Pythonのお勉強第2弾になります。
今回は、どの会社で働いていても必ず発生すると言える、エクセルでのデータ整理です。
特に管理職になると、様々な業務の中で大量のエクセルを使う機会も多いのではないでしょうか。
このエクセル作業を好きな人、少ないのではないでしょうか。
今時ですと、このような作業もシステムであったり、サービスなどですごく簡単にできるようなものもあると思いますが、それでもまだエクセル文化はしばらく続いてしまうのかなと思っております。
そこで、まずはPythonでエクセルを操作することと、簡単なデータを集計するプログラムを書いてみたいと思います。
この記事の内容だけですと、エクセルのピボットなどを使っても同じ結果を得ることができると思いますし、その方が早いかもしれませんが、この先のステップ(他のシステムとデータを連携するなど)を見据えての挑戦になります。
もくじ
Pythonでエクセルを操作するための準備
Pythonでエクセルを操作するための方法にはいくつか種類はあるようですが、私はopenpyxlを利用しました。
import openpyxl #pythonからエクセル使うためのモジュール
上記モジュールを読み込むことで、Pythonからエクセルを開いたりすることができます。
〇新規のエクセル・ファイルを開く
先ほど読み込んだモジュールを利用して、新規のエクセルファイルを開き、そのファイルを操作するための準備をします。
wb = openpyxl.Workbook() #新規のエクセル・ワークブックを開きます。
sheet = wb.active #開いたエクセルの最初のシートをアクティブにします。
〇開いたエクセルにデータを入力する
sheet.cell(row=1, column=1, value=’入力データ’)
上記で、1行目1列、つまりはセルA1に、valueで指定した入力データが入ります。
ちなみに、wbやsheetが重要で、合わせている意味があります。
wb = openpyxl.Workbook()
sheet = wb.active
1行目で、wbに、開いたエクセルが紐づけられます。
2行目で、sheetに、wb(開いたエクセル)の最初のシート(activeなシート)が紐づけられます。
このように紐づけているため、その紐づけた対象に対して、
「.cell」=紐づけたシートのセルへの操作をする
といった感じで操作を指定していきます。
ここまでで、Pythonでエクセルを利用するための準備である、対象となるエクセルファイルを指定したり、開いたりする作業が完了となります。
データ集計などに便利なモジュールpandasを使ってみた
やりたいこと:上記のようなデータから、区分ごとの売上を合計したい。
import pandas as pd
df = pd.read_excel('./sample.xlsx', sheet_name="シート名")
df.fillna('NA', inplace=True)
sample.xlsxの”シート名”を読み込みます。
df.fillnaの部分は、エクセルのデータに空白があり、今回でいうと製品名Bの備考のような空白で、取り込むだけであれば不要なのですが、この後の処理でNULL値がエラーになったため、無理やりNAという文字列に置き換えています。
後続の処理によっては不要だとは思いますが、これでうまくいったので、いったん実施しております。
products = df['kubun'].unique()
for target_product in target_products:
goukei = df.query("kubun == @target_product ").sum()
.unique():kubunの列にあるユニークな値を抽出
.query():kubunが指定した行を検索
.sum():見つかった値を足し算
上記で、kubun(区分)が同一の行の売上を足し算することができます。
Uniqueを使わなくても、区分のリストを準備しておけば良いのですが、区分の種類が増えた場合に対応できないため、uniqueを使うことで対応できるようにしました。
私にとって難しいと感じるところ
きちんとプログラムを学習したことが無い私だからかも知れませんが、文字コードやデータの型の操作が難しいと感じております。
今回のように、データをリストに入れながら、合計値を求めていったりするような場合、必ずと言ってよいほどエラーとなります。
原因は、見た目的には数字を入れているので、そのまま足し算すれば良いという感じで実行すると、文字列として認識されているので足し算はできないよ、といってエラーになる感じです。
この辺りは、いつもトライアンドエラーなのですが、きちんと整理しながら学んでいく必要があるのだと感じております。
今後の課題です。
まとめ
今回、エクセルのデータを整理するようなPythonを書いてみました。
本当は、もう少し詳しく説明していければ良いと思うのですが、いまの私の実力ではこのくらいが精一杯になります。
ですので、知っている人からすると当たり前の内容かもしれませんが、私と同じくらいのレベルの人が、同じ悩みを持っていたりしたときに、少しでも出助けになれば嬉しいと思います。
もちろん、このレベルに甘んじず、私もいま難しいと感じている部分を乗り越えて、スキルを一歩一歩あげていくとともに、その解決の過程も発信していくことでより役に立つ情報にしていくことを目指します。
今回は、エクセルの中でデータを集計した形になりますが、このデータを別のシステムに入力するといったことをやる場合に、Pythonでやることのメリットが出てくるのですが、それはまた別の機会にしたいと思います。
参考記事: