LoginSignup
2
1

More than 3 years have passed since last update.

【Python】Pandasを使って売上分析【xlsxを読み込む】

Posted at

目的

某サイトの売上分析を行う。
売上増減の要因を把握するために、商品ごとに売上を確認。
増減への貢献度(が高い商品についてさらに詳しく分析。

いつもやっている流れは
1.週間レポート(全トランザクションデータ)を商品名ごとに集計
2.増減に関与している商品を見つける
3.そこからリファラルなど詳細を調べて、解決策を探る。

特に統計的なことはなく、単純にEXCELで毎週しているデータ整理などの作業を自動化し、分析自体にもっと時間を費やしたいと思い、初心者ながらやってみることに。

Pythonにやってもらうこと

1.EXCELファイル(.xlsx)を読み込んで、データフレームに落とし込む
2.いらない行を削除
3.商品名やその他必要な項目ごとに集計
4.シートに書き出して、保存

xlsxファイルを読み込む

pandasはインストール済みなので、

import pandas as pd

df = pd.read_excal('ファイルパス')

すると次のエラーが発生。

ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.

調べてみると、EXCELファイルを読み込むにはxlrdをインストールしないといけないらしい。
ということで、Terminalで以下を実行。

pip3 install xlrd

次に出たエラーがこちら。

raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
xlrd.biffh.XLRDError: Excel xlsx file; not supported

調べてみると、xlrd(2.01)はxlsファイル以外のサポートを終了したとのこと。
解決方法は
1. xlrdのふるい古いバージョンをインストールする(セキュリティ上の問題があるかも)

pip install xlrd==1.2.0
  1. openpyxlを用いてxlsxファイルを開く
import openpyxl
pandas.read_excel(‘ファイル名(ファイルパス)’, engine=’openpyxl’)

セキュリティの観点からこちらを採用。
xlsxファイルの最終的な読み込み+データフレームへの落とし込みコードはこちら。

import pandas as pd
import openpyxl

df = pd.read_excel('ファイル名', engine='openpyxl')

参照
https://obgynai.com/python-pandas-excel-read/
https://stackoverflow.com/questions/65254535/xlrd-biffh-xlrderror-excel-xlsx-file-not-supported
https://exerror.com/xlrd-biffh-xlrderror-excel-xlsx-file-not-supported/

ピボットテーブルの要領で商品ごとに集計

EXCELのピボットテーブルの機能は、pivot_tableで実行できます。

基本の型はこちら。

pd.pivot_table(df, index='行データ', columns='列データ', values='数値', aggfunc='sum')

indexとcolumns,valuesには、表のデーブルヘッダー名に置き換える。
aggfuncは集計方法です(sumは合計)。
今回は'商品名'ごとの売上'数量'の'合計'を見たいだけなので、columnsは削除。

実行結果はこんな感じになります。

商品名  数量
A     12
B     55
C     8

ひとまずここまで。

参照
https://pyhoo.jp/pivot

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1