Python

Python基礎:cumsum( )

スポンサーリンク

はじめに

今回は久しぶりにPythonに戻って、pandasのcumsum( ) メソッドを扱います。cumsum( )は累積和を計算してくれます。毎日の売上データがあるときに、累積の売上を計算して、計画に対してどのくらい進捗しているのか、など使う場面がたくさんあります。簡単なので早速みていきましょう。

サンプルデータ

今回は2020/10/1~2020/12/31までの売上データがあるとしましょう。次のコードでサンプルデータを作りましょう。

# ライブラリのインポート
import pandas as pd
import random

# 日付データの作成
dates=pd.date_range('2020-10-01','2020-12-31')

# 売上データの作成
sales=[random.randint(100000, 300000) for i in range(92)]

# データフレームの作成
sales_record=pd.DataFrame({'日付':dates,
                          '売上':sales})
sales_record.head()

このデータに年・月の情報も加えておきましょう。

# 年月を加える
sales_record['年']=sales_record['日付'].dt.year
sales_record['月']=sales_record['日付'].dt.month
sales_record=sales_record[['年','月','日付','売上']]
sales_record.head()

cumsum( )

データの準備ができたので、さっそく見ていきましょう。cumsum( )は累積和を求めるメソッドです。売上の累積和を求め、それを「売上累積」とすることにしましょう。

# 累積和を求める
sales_record['売上累積']=sales_record['売上'].cumsum()
sales_record.head()

2020/10/2の「売上累積」は2020/10/1の「売上」と2020/10/2の「売上」の合計となっていますね。さらに、2020/10/3の「売上累積」は2020/10/2の「売上累積」と2020/10/3の「売上」の和になっていますね。

念のため月ごとの集計を求めて検算してみることにしましょう。

# 月ごとの売上合計
sales_summary=sales_record.groupby(['年','月']).agg({'売上':'sum'}).reset_index()
sales_summary

すると、各月末ごと累計売上は次のようにわかります。

print('10月までの売上累積は',sales_summary.query('月<11')['売上'].sum())
print('11月までの売上累積は',sales_summary.query('月<12')['売上'].sum())
print('12月までの売上累積は',sales_summary.query('月<=12')['売上'].sum())

先ほどcumsum( )で計算した売上累積と比較してみましょう。各月の最終日の値を見ればよいので次のようにします。

# 月ごとの売上合計
sales_record.sort_values(by='日付').drop_duplicates(subset=['年','月'],keep='last')

ちゃんと一致してますね!

スポンサーリンク

まとめ

いかがでしたか?データ分析をしていると、累積和を求めたくなるケースは多いと思います。予実績管理で進捗率などを求めるときもそうですね。是非、覚えておきましょう。

コメント

タイトルとURLをコピーしました