Nie mogę tego zrobić dla moich danych, więc najpierw próbuję konkretnego przykładu, który jest bardzo podobny. Oto dataframe:UnboundLocalError: zmienna lokalna "x" przywoływana przed przypisaniem. Właściwe wykorzystanie tPłotu w pakiecie seaborn dla ramki danych?
In [56]:
idx = pd.DatetimeIndex(start='1990-01-01', freq='d', periods=5)
data= pd.DataFrame({('A','a'):[1,2,3,4,5],
('A','b'):[6,7,8,9,1],
('B','a'):[2,3,4,5,6],
('B','b'):[7,8,9,1,2]}, idx)
Out[56]:
A B
a b a b
1990-01-01 1 6 2 7
1990-01-02 2 7 3 8
1990-01-03 3 8 4 9
1990-01-04 4 9 5 1
1990-01-05 5 1 6 2
Więc co mam nadzieję zrobić to działka seria razem z linią do tendencji centralnej wśród zmiennych (każda kolumna) dla każdej obserwacji (codziennie w indeksie), z zacieniony obszar wskazujący określony estymator błędu (prawdopodobnie tylko 95% ci) obserwacji odpowiadających każdemu dniu.
Próbowałem to:
sns.tsplot(data, time=idx)
Ale pojawia się następujący błąd:
UnboundLocalError Traceback (most recent call last)
<ipython-input-57-fa07e08ead95> in <module>()
5 ('B','b'):[7,8,9,1,2]}, idx)
6
----> 7 sns.tsplot(data, time=idx)
C:\Users\Patrick\Anaconda\lib\site-packages\seaborn\timeseries.pyc in tsplot(data, time, unit, condition, value, err_style, ci, interpolate, color, estimator, n_boot, err_palette, err_kws, legend, ax, **kwargs)
253
254 # Pad the sides of the plot only when not interpolating
--> 255 ax.set_xlim(x.min(), x.max())
256 x_diff = x[1] - x[0]
257 if not interpolate:
UnboundLocalError: local variable 'x' referenced before assignment
Składnia tsplot jest:
sns.tsplot(data, time=None, unit=None, condition=None, value=None, err_style='ci_band', ci=68, interpolate=True, color=None, estimator=<function mean at 0x00000000044F2C18>, n_boot=5000, err_palette=None, err_kws=None, legend=True, ax=None, **kwargs)
więc przytaczam swoje dane z indeksem jako argumentem czasu, ale nie jestem pewien, co robię źle. Nie sądzę, że potrzebuję innych argumentów dotyczących słów kluczowych, ale może to jest problem.
Jeśli mogę to zrobić z tablicą o wymiarach (jednostki, czas) Zamiast:
sns.tsplot(data.values.T, time=idx)
mogę uzyskać oczekiwany wynik (z wyjątkiem bez sygnatury czasowe są xlabels):
Ale jaki jest właściwy sposób, aby to zrobić z ramką danych? Wiem, że musi to być "długa forma", ale nie jestem do końca pewien, co by to miało znaczyć dla tej konkretnej ramki.
UnboundLocalError wygląda jak błąd dla mnie. . . – mgilson
Bałem się tego. Widziałem coś podobnego, co wyglądało na naprawione przez zainstalowanie pakietu statsmodels, ale mam to i właśnie zaktualizowałem i ponownie spróbowałem tego samego kodu, aby mieć pewność. – pbreach
Nie jestem tu ekspertem, ale wygląda na to, że może się to zdarzyć, jeśli filtr grupowy nie daje żadnych wyników: https://github.com/mwaskom/seaborn/blob/master/seaborn/timeseries.py#L201 - - Domyślny warunek dla ramki danych jest obliczany w linii 108, jeśli to w ogóle pomocne ... (Przepraszam, niewiele z faceta pand osobiście ...) – mgilson