Pythonで分析結果をエクセルに出力したい

statsmodelssklearnモデリング機械学習処理を欠けた結果の量が多い時、やはりエクセルなどに出して確認したいことがあります。

特に探索的に主成分分析をかけたり、回帰で係数を把握したい時、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などから作りにくいので便利ですね。