Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel - jak stworzyć makro do obróbki ciągu danych?

13 Cze 2014 20:40 3156 18
  • Poziom 9  
    Witam.


    Mam w excelu ciągi danych, np.

    I zbiór:
    12,14,23,12,54,12,456,32,45,33,45,77,87,88

    II zbiór:
    4,33,55,66,77,44,33,44,65

    Na podstawie tych danych mogę zrobić wykresy w funkcji czasu, bowiem każda kolejna dana pojawia się po jednej sekundzie.

    Teraz, mając te wykresy, chciałbym je znormalizować, aby liczba próbek za każdym razem była taka sama, nawet kosztem rozciągnięcia owych wykresów. Załóżmy, chciałbym mieć za każdym razem 14 próbek (na osi argumentów to 14 s). Zatem pierwszy wykres (na podstawie 1 zbioru danych) może być narysowany bez żadnych problemów - tam jest 14 próbek. NAtomiast 2 wykres ma 9 próbek - brakuje 5 próbek. Chciałbym ten drugi wykres rozciągnąć (sztucznie zmniejszyć częstotliwość tego przebiegu) na wykresie, aby zajmował cały wykres. Mógłbym teoretycznie ręcznie wpisać 5 dodatkowych próbek, uśredniając w niektórych miejscach (aby było symetrycznie) sąsiednie liczby:

    2, 4,33,44, 55,66,71, 77,60, 44,33,38 44,65

    Jednak w moim przypadku takich danych jest ogrom. Chciałbym zatem stworzyć algorytm który robiłby to za mnie. I zastanawiam się, może są gotowe sposoby takiej obróbki sygnału - zmniejszania jego f?
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 33  
    Dzień dobry,
    Bardziej naturalne wydaje się być proporcjonalne "rozciągnięcie" osi x niż dość sztuczne dodawanie wartości y. Trzeba przeliczyć wartości x drugiej serii i nanieść obie serie na wykres punktowy (xy). Proszę zobaczyć załącznik.
    Pozdrowienia
  • Poziom 9  
    Maciej Gonet napisał:
    Bardziej naturalne wydaje się być proporcjonalne "rozciągnięcie" osi x niż dość sztuczne dodawanie wartości y. Trzeba przeliczyć wartości x drugiej serii i nanieść obie serie na wykres punktowy (xy). Proszę zobaczyć załącznik.

    Dziękuję za przykład. Jednak w moim przypadku, oprócz wykresu, chciałbym mieć poszczególne wartości umieszczone również w komórkach excela. Dobrze byłoby, gdyby się dało określić, jakie są wartości pomiędzy X równym 2.6 a 4.25. Ponieważ interesują mnie tylko liczby naturalne wskazujące kolejne sekundy, chciałbym mieć dokładną wartość w sekundzie 3, 6, 8 , 11 itd.. Czy da się to jakoś automatycznie wyciągnąć z wykresu? To jest tylko przykład zbiorów liczb - w rzeczywistości będą znacznie większe, mające nawet 500 elementów... I ja, mając wykres kończący się na np. 345 sekundzie, chciałbym go rozciągnąć, by znajdował się w całym przedziale argumentów 0-500. Czyli muszę dodać kolejne wartości, których będzie 155.


    wycinek z excela - Przeskalowanie_x2.xls- i wartości do określenia:

    x2 y2
    1 4
    2-?
    2,625 33
    3 - ?
    4-?
    4,25 55
    5-?
    5,875 66
    6-?
    7-?
    7,5 77
    8-?
    9-?
    9,125 44
    10?
    10,75 33
    11-?
    12-?
    12,375 44
    13-?
    14 65
  • Pomocny post
    Poziom 33  
    Czy to ma być na zasadzie interpolacji liniowej między sąsiednimi punktami?
    Jeżeli tak, to tymczasem można liczyć tak jak w załączniku. Można jeszcze pomyśleć nad jakąś bardziej uniwersalną formułą, ale to wymaga trochę czasu. Trzeba też dokładnie określić jaki będzie układ danych, żeby potem nie okazało się, że formuła jest nieprzydatna, bo coś jest inaczej. Np. czy punkty w obu seriach będą numerowane od zera, od jeden, czy od dowolnej liczby? W jakich proporcjach mogą być liczby punktów w obu seriach, w przykładzie było 14:9, to w praktyce oznacza, że trzeba interpolować 1 lub 2 punkty, a jak będzie w realnych danych?
    Pozdrowienia.
  • Poziom 9  
    Przykład właściwych danych umieściłem w załączniku. Teraz chciałbym owy wykres rozciągnąć, by zamiast tych zer były jakieś dane.
  • Pomocny post
    Poziom 33  
    Dobry wieczór,
    Przykład rozwiązania w załączniku. Właściwe rozwiązanie w wierszach 9-11 oraz nazwy zdefiniowane. Wcześniejsze wiersze zachowałem, żeby łatwiej było zrozumieć jak to działa.
    Zastosowałem interpolację liniową. Przekształcony wykres musi obejmować punkty oryginalnych danych. Gdyby zachować tylko punkty o całkowitych wartościach x po przeliczeniu, wykres byłby zdeformowany.
    Pozdrowienia.
  • Poziom 9  
    Dziękuję za pomoc. Mam pytanie - co można byłoby zmienić, aby automatycznie była rozpoznawana liczba użytecznych próbek (nie 0) i w zależności odtej liczby, była interpolowana odpowiednia liczba próbek, aby wykres zajmował cały zakres?
  • Pomocny post
    Poziom 33  
    Dobry wieczór,
    Nie bardzo rozumiem o co chodzi. Cały zakres obejmuje kolumny od A do LH. Jeżeli to ma być zmienione należy wprowadzić poprawki w komórkach A16 i A17 oraz w definicjach wi i wj w Menedżerze nazw. Natomiast jeśli chodzi o ten węższy zakres to jest on rozpoznawany automatycznie, co widać w komórce A16 i w definicji wi. Czy coś nie działa tak jak powinno?
    Pozdrowienia.
  • Poziom 33  
    W tym pliku jest już ta maksymalna liczba punktów, tzn. 320. To, co z nim należy zrobić? Do ilu punktów go poszerzyć? Czy może coś innego?
  • Poziom 9  
    Tzn w takim przypadku wykres wyjściowy winien pozostać bez zmian. Podobny problem występuje, gdy liczba próbek wynosi np. 310 lub 269 - wykres jest dziwnie ucinany.
  • Poziom 33  
    Ten arkusz nie dopasowuje się automatycznie do zmienionej liczby danych. Trzeba przejrzeć zakresy i dokonać poprawek, gdzie trzeba, również zakresy danych w xn w Menedżerze nazw i na wykresach trzeba zmienić. Dla ułatwienia wyliczyłem Panu literowe oznaczenia kolumn kończących zakresy.
    W tym poprzednim przykładzie, gdzie było już 320 punktów, ten arkusz nie zadziała, bo liczby "i" i "j" muszą być względnie pierwsze. W takim przypadku po prostu pozostawić wykres bez zmiany.
  • Poziom 9  
    Dziękuję za pomoc. Zastanawiam się, czy da się i w jaki sposób można rozwiązać ten problem, posługując się VB dołączonym do Excela, bez używania żadnych wbudowanych funkcji... Wtedy dane mogłyby być automatycznie wczytywane
  • Poziom 33  
    Gdyby precyzyjnie określić jakie będą dane i jakie mają być wyniki, to dałoby się te obliczenia zautomatyzować zarówno w Excelu jak i w Visual Basicu. Rzecz w tym, że zagadnienie jest dość złożone i wymagałoby sporo pracy. Ja się tego nie podejmę, bo nie mam tyle wolnego czasu, mogę pomóc w konkretnych drobnych zagadnieniach, gdyby się Pan w to zaangażował i sam nad tym popracował. Metodę rozwiązania już Pan ma, a teraz trzeba zdynamizować wszystkie formuły lub napisać coś podobnego w VBA, jeżeli ktoś ma większą wprawę w takim kodowaniu.
    Pozdrowienia.
  • Poziom 9  
    Przeanalizowałem problem i okazuje się, że jest możliwość takiego uśredniania próbek, aby zmniejszyć ich liczbę zawsze do 160 (gdy ich liczba jest większa od 160) - przeprowadzić odpowiednie "skalowanie", kompresję danych. Czyli dla 320 próbek można łatwo uśrednić sąsiednie próbki, aby otrzymać dokładnie połowę. Tylko co zrobić, gdy liczba próbek wynosi np. 214?

    Dodano po 24 [minuty]:

    Myślałem, aby zrobić coś takiego:

    Muszę skompresować liczbę próbek z np. 236 do 160, czyli powinno być mniej tych próbek o 76. Aby to zrobić, muszę wydzielić grupy próbek, które ulegną uśrednieniu. Każda grupa powinna mieć: 236/160 = 1.47 próbek. Ponieważ jednej próbki nie mogę podzielić, więc zaokrąglam do 1 (zawsze w dół, odcinając po prostu część ułamkową). Następnie, zaczynając od pierwszego wyrazu ciągu próbek, dzielę próbki co jeden, jednocześnie dodając do siebie część ułamkową (+0,47). Gdy część ułamkowa jest większa lub równa 1, to do danej grupy, gdzie taki przypadek wystąpił, włączam jeszcze jedną próbkę, po czym odejmuję 1 od licznika części ułamkowej. Cały algorytm powtarzam do końca.

    Niżej przykład opierający się na innych założeniach odnośnie liczby próbek do której będzie skalowanie:

    Excel - jak stworzyć makro do obróbki ciągu danych?
  • Poziom 33  
    Dzień dobry,
    Te dane, które miał Pan do tej pory były próbkowane z taką częstotliwością, że były rejestrowane lokalne maksima i minima sygnału i dzięki temu przebieg na wykresie miał regularny kształt. Jeżeli zacznie Pan te dane uśredniać, zagubi się charakter przebiegu i będzie Pan miał zestaw dość bezładnie rozrzuconych wartości.
    Pozdrowienia
  • Poziom 9  
    Dane zawierają wartości , które zostały umieszczone naprzemiennie z 2 czujników. Zatem muszę rozdzielić 320 próbek na 2 zestawy po 160
  • Poziom 33  
    Dzień dobry,
    Jeżeli te dane, które podał Pan poprzednio rozdzielić na dwa przebiegi, to otrzyma się zależności o dużo mniejszej częstotliwości zmian, a więc też łatwiejsze do obróbki. Ale lokalne uśrednianie takich przebiegów wydaje mi się mało sensowne. Można interpolować wartości każdego przebiegu osobno, a dopiero w końcowej fazie obróbki coś uśredniać. Ale trudno coś radzić, bo właściwie nie wiem do czego Pan dąży. Próbuje Pan jakieś przebiegi rozciągać w czasie, potem znów je redukować, a właściwie nie wiadomo po co to wszystko - jest chyba jakiś dalszy cel tego, a może dałoby się go osiągnąć w prostszy sposób?
    Pozdrowienia.