"wygładzenie wykresów"

0

Cześć
Używam pythona do analizy danych - otrzymuje wykresy w których występują duże wahania i chce je w jakiś sposób wygładzić. Czy w pythonie istnieje taka możliwość? jeśli tak to jak to zrobić? pewnie by trzeba zrobić jakieś aproksymacje lub interpolacje, tylko jak? Z góry dzięki za pomoc!!
Dodam, że używam pakietu pandas, biblioteki matplotlib oraz biblioteki numpy

0

Możesz trochę wygładzić same dane, np., zaokrąglić do najbliższych tysięcy, etc. Policzyć mode, mean Coś się więcej Dowiesz, skądś Masz takie dane i takie są, jakieś więcej kontekstu by się przydało.

0

używam uśredniania, natomiast i to pozostawia duże wahania.
chodzi o to, że na wykres nanoszę dane z 25 dni w tygodniu i dla każdego dnia mam uśrednione wartości pewnego parametru
wykresy przykładowo wyglądają tak

0

No dobra, ale jak chciałbyś żeby wyglądał? Bo "wygładzenie" to dość szerokie pojęcie.

0

żeby to była w miarę możliwości gładka linia. tak jak na załączonym obrazku , w którym z 3 oddalonych punktów udało się uzyskać linie gładką. Wydaje mi się ze da się to uzyskac przez aproksymacje ale nie wiem jak to zrobić

0

Chyba chcesz dopasować rzeczywistość do teorii:). To, że wykres tak wygląda mówi coś o eksperymencie, np., o metodach pomiarowych.

0

zupełnie nie
ale nawet jeśli tak to widzisz to chcę to zrobić :D jakieś rady?

0

No to wygląda że chces zrobić tu tzw regresje, niemniej mam wątpliwości czy cokolwiek sensownego z tego potem wyczytasz.

0

Gdyby tak było, to przeszliśmy długą drogę: od narysowania wykresu do regresji:); ale, jak tak to Problem XY w pełnej krasie.

1

Wszystko zależy od zestawu danych oraz efektu jak wspomnieli koledzy wyżej, można się bawić i zaimplementować jakiś matematyczny wzór do zrobienia tego...
Albo skorzystać z google i poszukać czy ktoś już miał z tym problem (jest na tyle pospolity, że szukając w języku angielskim, nie ma z tym problemu ;) ).

titleSposób 1:

import numpy as np
import matplotlib.pyplot as plt

plt.figure()
poly = np.polyfit(list_x,list_y,5)
poly_y = np.poly1d(poly)(list_x)
plt.plot(list_x,poly_y)
plt.plot(list_x,list_y)
plt.show()

titleSposób 2:

from scipy.interpolate import splrep, splev

plt.figure()
bspl = splrep(list_x,list_y,s=5)
bspl_y = splev(list_x,bspl)
plt.plot(list_x,list_y)
plt.plot(list_x,bspl_y)
plt.show()

Cały post do znalezienia tutaj:
https://stackoverflow.com/questions/46633544/smoothing-out-curve-in-python

Do tego co podałeś w grafice, najpewniej się nada :)

0

Do Autora: Ale co chcesz osiągnąć? Chcesz określić trend dla posiadanych danych lub dopasować do nich jakiś model? Chcesz przefiltrować dane? Chcesz zdecymować/zinterpolować dane? Jeżeli chodzi o "zwykłe spłaszczenie/wygładzenie danych", to możesz użyć np. filtru Savitzky'ego-Golaya (scipy.signal.savgol_filter).

0

Guaz, Gjorni - dzięki!!
wypróbuje i porównam przedstawione przez was pomysły - myślę, że się przydadzą :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1