2016-04-01 41 views
5

Używam regresji OLS za pomocą pandas.stats.api.ols użyciu groupby z następującego kodu:Print OLS Podsumowanie regresji do pliku tekstowego

from pandas.stats.api import ols 
df=pd.read_csv(r'F:\file.csv') 

result=df.groupby(['FID']).apply(lambda d: ols(y=d.loc[:, 'MEAN'], x=d.loc[:, ['Accum_Prcp', 'Accum_HDD']])) 
for i in result: 
    x=pd.DataFrame({'FID':i.index, 'delete':i.values}) 
    frame = pd.concat([x,DataFrame(x['delete'].tolist())], axis=1, join='outer') 
    del frame['delete'] 
    print frame 

ale zwraca błąd:

AttributeError: 'OLS' object has no attribute 'index' 

mam około 2000 pozycji w mojej grupie i po wydrukowaniu każdego z nich wyglądają mniej więcej tak:

-

------------------------Summary of Regression Analysis------------------------- 

Formula: Y ~ <Accum_Prcp> + <Accum_HDD> + <intercept> 

Number of Observations:   79 
Number of Degrees of Freedom: 3 

R-squared:   0.1242 
Adj R-squared:  0.1012 

Rmse:    0.1929 

F-stat (2, 76):  5.3890, p-value:  0.0065 

Degrees of Freedom: model 2, resid 76 

-----------------------Summary of Estimated Coefficients------------------------ 
     Variable  Coef Std Err  t-stat p-value CI 2.5% CI 97.5% 
-------------------------------------------------------------------------------- 
    Accum_Prcp  0.0009  0.0003  3.28  0.0016  0.0004  0.0015 
    Accum_HDD  0.0000  0.0000  1.98  0.0516  0.0000  0.0000 
    intercept  0.4750  0.0811  5.86  0.0000  0.3161  0.6340 
---------------------------------End of Summary--------------------------------- 

Chcę móc eksportować każdy z nich do pliku CSV, aby można było wyświetlić je osobno.

+0

wierzę 'ols.summary()' jest faktycznie wyjście jako tekst, a nie jako 'DataFrame'. Zazwyczaj korzystałem z drukowania jednego lub więcej plików tekstowych do przechowywania. – Stefan

+0

gdy próbuję coś takiego: 'for i w wyniku: i.to_csv (os.path.join (outpath, i + '. Csv')' zwraca 'AttributeError: 'OLS' obiekt nie ma atrybutu" to_csv'' –

+0

Której procedury "OLS" używasz? 'Statsmodels'? – Stefan

Odpowiedz

3

Aby wypisać result z pandas.stats.api.ols użyć pliku tekstowego, aby dopasować format wyjściowy, na przykład:

from pandas.stats.api import ols 
grps = df.groupby(['FID']) 
for fid, grp in grps: 
    result = ols(y=grp.loc[:, 'MEAN'], x=grp.loc[:, ['Accum_Prcp', 'Accum_HDD']]) 

    text_file = open("Output {}.txt".format(fid), "w") 
    text_file.write(result.summary) 
    text_file.close() 
+0

to zwrócone, 'Plik" F:/kody Pythona/OLS_regress .py ", wiersz 35, w tekst_plik.write (wynik) TypeError: oczekiwany ciąg znaków lub inny obiekt bufora znaków' –

+0

dodał '.summary()' do 'wyniku', który powinien być obiektem' OLS' z tymi metodami, które z kolei generują wyjście tekstowe. Patrz https://github.com/pydata/pandas/blob/master/pandas/stats/ols.py – Stefan

+0

hmm, wciąż retu RNS 'file "F: Kody/Python/OLS_regress.py", line 35, w text_file.write (result.summary()) TypeError: 'str' obiektu nie jest callable', Ill zachować zabawy z to jednak –