statsmodels
やsklearn
でモデリングや機械学習処理を欠けた結果の量が多い時、やはりエクセルなどに出して確認したいことがあります。
特に探索的に主成分分析をかけたり、回帰で係数を把握したい時、jupyter notebookではどうしても表示枠が小さく感じます。
同様に、報告用の資料や他人と共有する時に一度エクセルを噛ませる方が、何かと便利です。
基本的なデータの書き込み方
Pandasでは、表そのものの出力はto_excel
で簡単にできます。
ただし、こういった場合は、複数の表を複数のシートに出したいことの方が多いのでExcelWriter
を併用します。
import pandas as pd with pd.ExcelWriter('res.xlsx') as writer: df1.to_excel(writer, sheet_name='df1') df2.to_excel(writer, sheet_name='df2')
単純なdf.to_excel
だけではなく、先にExcelWriter
を用い、writerオブジェクトを渡すことで、同じファイルにシートを分けて書き込むことができます。
既存ファイルに書き込む場合は、modeを指定します。
import pandas as pd with pd.ExcelWriter('res.xlsx',mode='a') as writer: df1.to_excel(writer, sheet_name='df1') df2.to_excel(writer, sheet_name='df2')
また、シートを同じにして、ずらして書きたい場合、startrow
,startcol
で開始点をずらすことができます。
import pandas as pd with pd.ExcelWriter('res.xlsx') as writer: df1.to_excel(writer, sheet_name='df1') #5列ずらす:行ならstartrow #ついでにインデックスも消しておく df2.to_excel(writer, sheet_name='df1',startcol = 5,index=False)
グラフの作り方
エンジンをxlsxwriter
にすれば、書き込んだデータを用いて、グラフをつくることも、一応できます。
with pd.ExcelWriter('res.xlsx', engine='xlsxwriter') as w: #1列目にデータを書き無 df.to_excel(w, 'sheet1',index=False) #ファイル操作 wb = w.book #グラフオブジェクトを作成 chart = wb.add_chart({'type': 'line'}) #データの末端を取得 last_row = df.shape[0] + 1 #グラフの作成:設定を辞書で渡す #折れ線などを増やす場合はadd_seriesを繰り返す chart.add_series({ 'values': '=sheet1!$A$2:$B$' +str(last_row) }) #チャートの書き込み(始点セルを指定) w.sheets['sheet1'].insert_chart('C1', chart)
add_chartで使えるグラフタイプは下記です。
- area
- bar
- column
- line
- pie
- doughnut
- scatter
- stock
- radar
レーダーチャートはmatplotlibなどから作りにくいので便利ですね。