2013-05-09 16 views
7

Plamuję dane w czasie serii przy użyciu Matplotlib i brakuje niektórych danych w sekwencji. Matplotlib domyślnie dołącza do ostatniego sąsiedniego punktu danych do następnego. Ale w przypadku braku danych działka wygląda brzydko. Oto uzyskany działka. enter image description hereMatplotlib usuń interpolację dla brakujących danych

Widać, że w pobliżu znacznika z 30 kwietnia brakuje danych i Matplotlib dołącza do punktów. Również poniższe zdjęcie przedstawia wykres punktowy danych. Wykres rozproszenia obejmuje tę usterkę, ale wtedy sąsiednie punkty danych nie będą w tym przypadku połączone. Co więcej, wykres rozproszenia jest bardzo powolny, biorąc pod uwagę ogromną liczbę punktów danych. enter image description here

Jakie jest zalecane rozwiązanie dla takich problemów.

Odpowiedz

8

Jeśli można zidentyfikować gdzie punkty przerwy powinno być można:

  1. złamać dane i wykreślić każdy „sekcja” ręcznie
  2. insert np.nan w danych w szczelinach

Zobacz na przykład Plot periodic trajectories.

można uzyskać ten sam efekt scatter (jeśli nie chcesz skalować rozmiar lub kolor każdego punktu samodzielnie) z

ax.plot(x, y, linestyle='none', marker='o') 
+0

Zakończono używając Pand, które wstawiłbym NaN –

+0

@NipunBatra Jeśli zrobiłeś coś innego, powinieneś napisać to jako odpowiedź i przyjąć własną odpowiedź. – tacaswell

4

W poprzedniej odpowiedzi mówi, należy wstawić Nans gdzie nie ma danych. Ta odpowiedź dotyczy Pandy i wyjaśnia, w jaki sposób można ją łatwo osiągnąć. Albo:

  • Series.resample() lub
  • Series.reindex()

Najprostsza metoda, to resample(). Jest to najbardziej zwięzły sposób na regularne odstępy między danymi. W powyższym przykładzie, jeśli masz np. 5-minutowe dane, po prostu wykonaj data.resample("5 min"). Spowoduje to zwrócenie zestawu danych z "NaT" (odpowiednik czasu NaN) w brakujących wartościach.

Jedynym przypadkiem, w którym to nie działa zbyt dobrze, jest sytuacja, gdy próbki nie są rozmieszczone w regularnych odstępach.

Alternatywą jest reindex(), która działa również dla uporządkowanych (ale nie szeregów czasowych) danych. Na przykład, jeśli masz zestaw danych indeksowany liczbami całkowitymi od 0 .. 100, ale z kilkoma brakującymi próbkami, możesz zrobić data.reindex([0:100]). Można również replikować zachowanie resample za pomocą reindex, przekazując jako argument funkcję pandas.date_range().

Powiązane problemy