Python Pandas DataFrameでピボットグラフを作成して棒グラフ表示

#CSVデータをDataFrameに格納して、ピボットグラフを作成

やりたいことはCSVデータをピボットグラフにします。

◆イメージ
　
![image.png](https://qiita-image-store.s3.amazonaws.com/0/261475/9a640885-194a-01ad-ad0e-e6e098251388.png)


今回の投稿は
CSVデータを作成して、そのCSVデータを使用してピボットグラフを作成します。



#CSVデータを作成。
CSVデータは[日付]、[商品]、[売上個数]で1週間分のデータを作成。


```Python:makecsv.py
import csv

from datetime import datetime, timedelta

#商品リスト
product = ['TV','CAMERA','BOOK','DVD','iPhone','Android','CD','OVEN','PC','TOMICA']

#CSVのヘッダ
header  = 'DAYS','PRODUCT','PCS'

#開始年月
start_dt = datetime(2018, 6, 1)

#CSVファイル
file = r"D:\study\phyton\product.csv"
i = 0

with open(file,'w',newline='') as f:
    writer = csv.writer(f)
    
    writer.writerow(header)
    
    #開始日付から7日分のデータを作成
    for i in range(0, 6):
        days = ( start_dt + timedelta( days = i ) ).strftime( '%Y/%m/%d' )

        for pname in product:
            i += 2
            writer.writerow((days,pname,i))
```

#上のmakecsv.pyで作成されたCSVデータ
DAYS,PRODUCT,PCS
2018/06/01,TV,2
2018/06/01,CAMERA,4
2018/06/01,BOOK,6
2018/06/01,DVD,8
2018/06/01,iPhone,10
2018/06/01,Android,12
2018/06/01,CD,14
2018/06/01,OVEN,16
2018/06/01,PC,18
2018/06/01,TOMICA,20
2018/06/02,TV,3
2018/06/02,CAMERA,5
2018/06/02,BOOK,7
2018/06/02,DVD,9
2018/06/02,iPhone,11
2018/06/02,Android,13
2018/06/02,CD,15
2018/06/02,OVEN,17
2018/06/02,PC,19
2018/06/02,TOMICA,21
<<以下省略>>


#CSVデータからピボットグラフを作成

作成されたCSVデータ(product.csv)を使用してピボットグラフを作成


```python:pivot.py
import matplotlib.pyplot as plt

# データの扱いに必要なライブラリ
import pandas as pd
import matplotlib.dates as mdates

#CSVを読込み
url = r"D:\study\phyton\product.csv"
plt.style.use('seaborn-dark')

#DataFrameに入れる
df = pd.read_csv(url,parse_dates=[1])

#DataFrameに入れたデータをピボットして、日別に集計
pv=df.pivot_table( values ='PCS',index = ['DAYS'], columns = ['PRODUCT'], aggfunc = sum )


fig = plt.figure(figsize=(5, 4))
ax = fig.add_subplot(1,1,1)

#積み上げグラフを作成
pv.plot(ax =ax ,kind='bar' , stacked=True)

#以下表示設定
plt.title("Daily goods sales", fontsize=12)
plt.xlabel("", fontsize=7)
plt.ylabel("", fontsize=7)
plt.subplots_adjust(bottom = 0.3)
plt.tick_params(labelsize=7)
plt.legend(bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0, fontsize=7)
plt.subplots_adjust(left = 0.1, right = 0.8)

plt.show()

```

作成されたグラフ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261475/2ba9f2d9-0ed7-a902-f3b1-c791a9be4573.png)


x軸の日付は日付の順に並んでいます。また、凡例はアルファベット順にならんでいます。



#コードの補足

CSVファイルを読込んだ状態
(Jupyterで確認)

```python
#DataFrameに入れる
df = pd.read_csv(url,parse_dates=[1])
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261475/ef25844d-0386-1916-7638-a08053cb7ac5.png)




DataFrameのピボット集計するのは、pivot_table　で行います。

```python
df.pivot_table(values = 集計対象列, index = 集計グループ, aggfunc = 集計方法)
```

今回は、日付単位(DAYS)で商品毎(PRODUCT)の売上個数(PCS)を集計

```python
pv=df.pivot_table( values ='PCS',index = ['DAYS'], columns = ['PRODUCT'], aggfunc = sum )
```

上記コードで作成された DataFrame pvのイメージ
(Jupyterで確認)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261475/524c7fdb-dd9b-e9de-4c95-69d33ffe6ec2.png)




#次回の投稿
ピボットグラフは作成されたのですが、集計合計数順にソートしたり、上位５つ(TOP n)でグラフ表示する方法を投稿します

・Python DataFrame ピボットグラフの上位5位(Top 5)のみ抽出して棒グラフに表示
　　https://qiita.com/kngsym2018/items/3f7f207270976f3ccd07