この動画では、データを集計する方法について学びます。
具体的には、売上管理表を使って部署や名前ごとで売上げや平均を集計をするといった方法をみていきます。
Excelでいうと、sum関数、sumifs関数、countifs関数、SQLでいうとgroupbyの方法になります。
Pythonでは集計方法をカスタマイズすることが可能です。そのため、その会社独自の集計方法や、特殊な集計をすることが可能です。
SQLやエクセルではできないことも可能なので、ぜひ最後までご視聴ください。
▼目次
00:00 はじめに
01:07 Pandasのインポート
01:18 表示する列数・行数を変更
01:54 データフレームの読み込み
02:40 氏名ごとの集計
03:38 氏名ごとに平均を算出
03:57 売上金額の平均
04:20 小数点以下省略
05:02 合計を算出
05:10 データ数を数える
05:21 データ数を数える(欠損値を含む)
05:37 n番目のデータ取得
06:19 最大値
06:24 最小値
06:37 複数要素でグルーピング
07:38 aggメソッド
08:14 桁区切り表示
08:36 平均と合計、桁区切り表示
08:52 aggメソッド(複数計算)
09:27 自作の関数適用
▼自己紹介
現在:フリーランス(マーケティング関連の人工知能開発、データ分析や業務自動化など)
前職:リクルート
▼SNS
Twitter : https://twitter.com/kino_code/likes
Facebook :https://www.facebook.com/%E3%82%AD%E3%83%8E%E3%82%B3%E3%83%BC%E3%83%89-105693727500005/
▼文字書き起こし
読み込む前の準備として概要欄に記載したキノコードのサイトにExcelファイルを用意しています。
それをダウンロードして、学習用のJupyter Labを保存しているフォルダにに保存してください。
それではパソコン画面に切り替えてレッスンを進めていきましょう。
import pandas as pd
まず、Pandasをインポートする記述を書きます。
「as」を使ってPandasを「pd」という名前で使えるようにしましょう。
実行します。
pd.options.display.max_rows = 10
pd.options.display.max_columns = None
レッスン03で表示する列数・行数を変更はset_opitonでやってきました。
今回は、pd.options.displayで変更をしてみましょう。
pd.options.displayと書いてmax_rowと書きます。そして、これに10を代入します。
これで表示する行数を10行に変更することができます。
次に、表示する列数の変更をします。
max_columnsと書いて、Noneを代入します。
これで表示する列数・行数を変更ができました。
df = pd.read_excel(‘sample.xlsx’,sheet_name=’実績管理表’)
df
続いてレッスンで使うデータを説明します。
Excelデータを使います。
このデータはあるアパレル会社の販売データになります。
社員ごとに何をいくら売上したのかがわかります。
このExcelの中の実績管理表というシートを使います。
エクセルを読み取るにはread_excelメソッドを使いました。
これはレッスン6で説明しました。
エクセルのシートを指定して読み取ることができます。
heet_nameという引数にシート名を渡せばよいです。
実行してみましょう。
読み取れました。
df.groupby(‘氏名’)
それでは氏名ごとに合計や平均など色々な集計をしてみましょう。
エクセルでいうとsumifs関数であったり、averageifs関数、countifs関数になります。
SQLでいうとGroupbyです。
Pythonの場合だと、PandasのGroupbyメソッドを使います。
データフレームが代入されている変数のあとにドット、groupby、丸括弧。
丸括弧の中に、集計したいグループを記述します。
氏名ごとに集計をしたいので、氏名を記述します。
実行してみましょう。
集計結果が返ってきません。
これはオブジェクト生成されただけで、このオブジェクトに対して何も処理をしていないからです。
df.groupby(‘氏名’).mean()
このgroupbyメソッドに平均を求めならmean、合計を求めるならsumなどを追加することで集計することが可能です。
平均を求めてみましょう。
平均は、meanを使います。
実行します。
平均を集計することができました。
ただ、コードだと数値型のカラムがすべて平均になっていしまいました。
df[[‘氏名’,’売上金額’]].groupby(‘氏名’).mean()
売上金額だけ平均にしたい場合はどのようにしたらいいでしょうか?
その場合は、二重括弧で氏名と売上金額だけを抽出し、groupbyの丸括弧の中に氏名を記述します。列の取得の仕方はレッスン4で説明しています。
実行します。
売上金額だけ平均を算出することができました。
ただし、今の平均の算出方法だと小数点以下がたくさん表示されて読みにくいですよね。
pd.options.display.float_format = ‘:.0f’.format
そこで、小数点以下を表示させない設定に変更しましょう。
動画の最初で表示する行数や列数を設定しましたが、同じようにpd.options.displayを使います。float_formatと記述します。
これは小数点以下0桁を省略する記述です。
実行してみましょう。
df[[‘氏名’,’売上金額’]].groupby(‘氏名’).mean()
それではもう一度、実行してみましょう。
小数点以下が表示されず、すっきりなりました。
df[[‘氏名’,’売上金額’]].groupby(‘氏名’).sum()
合計を算出した場合は、sumです。
実行してみましょう。
合計が表示されました。
df[[‘氏名’,’売上金額’]].groupby(‘氏名’).count()
データ数を数えたい場合はcountでできます
ただし、countメソッドだと、欠損値は数えてくれません。
df[[‘氏名’,’売上金額’]].groupby(‘氏名’).size()
欠損値も数えたい場合は、sizeメソッドを使います。
実行します。Seriesにて出力がされましたが、こうすれば欠損値も数えることができます。
続きは文字書き起こしブログにて。
▼文字書き起こしブログ
https://kino-code.com/pandas_groupby/
#PythonとPandas #Pandas入門 #データ集計
▼お仕事のお問い合わせ
キノコードでは、仕事の自動化の開発業務&コンサルティング業務のみを現在受け付けております。
お問い合わせ先かTwitterのDMか、「キノコードトップページ→概要」にあるメールアドレスまでお問い合わせください。
コメント
すみません。文字書き下ろしブログのリンクが切れてます。
もしかして実験データとかも簡潔にできるのかも!
平素より大変お世話になっております。
#import pandas as pd
#import pandas as pd
pd.set_option(‘display.max_columns’, None)
pd.set_option(‘display.max_rows’, 5)
#最後は、表示する文字数
これと同じでよろしいでしょうか?
よろしくお願いします。