11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-10

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

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

◆イメージ
 
image.png

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

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

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)を使用してピボットグラフを作成

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

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

#コードの補足

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

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

image.png

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

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

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

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

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

image.png

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

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

11
12
1

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
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?