Pandasでデータ集計をする方法を知りたい
・グループごとのデータ集計をする方法を知りたい
・groupby関数の具体的な使い方を教えてほしい
今回の記事は、これらの疑問に答えるため「pandasを使った基礎集計とgroupby関数の利用」について解説していきます。
これさえできれば、Excelでの基本的な集計業務を全てPythonに移管することが可能です!
この記事を書いた人
ハンズオン勉強のデータと操作シナリオ紹介
ハンズオンで集計方法を学習にあたり、利用するデータはこちらです。
クラス | 生徒名 | 国語(50点満点) | 数学(100点満点) | 英語(120点満点) | 合計 |
---|---|---|---|---|---|
A | スタン ダード | 10 | 60 | 90 | 160 |
A | ミン マックス | 25 | 40 | 120 | 185 |
A | ノーマ ライザー | 40 | 30 | 100 | 170 |
B | ロバスト スケーラ | 30 | 80 | 110 | 220 |
B | 山田 太郎 | 50 | 100 | 20 | 170 |
今回はこのテスト結果データに対して、次の操作を行いpandasによる集計を理解していきます。
操作シナリオ
- sum関数を利用して合計の集計
- axisを利用し、行方向と列方向の集計を理解
- count関数で、データの個数をカウント
- value_counts関数で、データの種類数をカウント
- mean関数で、データの平均値を算出
- min/max関数で、データの最小値/最大値を算出
- stdev関数で、データの標準偏差を算出
- groupbyを理解し、クラス単位での集計を理解
- describe関数で、データの基本統計量を一括算出
python sum:合計
まず、一番簡単な各教科の合計点を導出しましょう!
pandasで導出する場合は、df.sum()で合計の集計をすることができます。
コードと実行結果は、次の通りです。(実際に動かしてみよう!)
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].sum()
手元で実行して同じ結果を得られたら成功です!
科目ごとの合計(列合計)が出力されたかと思います。
ただ、多くのケースで求められるのは、科目の合計ではなく人単位での合計得点(行合計)です。
以下の図で示したような、合計得点を得るにはどうしたらいいのでしょうか?
そこで、重要になってくるのが次のaxis(軸)という考え方です。
python axis:集計方向の指定
集計関数を、行方向に適用するのか列方向に適用するのかは、「axis(軸)」というオプションで選択できます。
先ほどの場合は、何も指定しなかったのでデフォルトの列方向の集計が適用されました。
axisの使い方
- デフォルト(何も指定しない)の場合、列方向(axis=0)が自動適用される。
- 行方向に集計をしたい場合、集計関数(axis=1)という形で指定する必要がある。
先ほどの例を用いて、次は各科目の点数を行方向(axis=1)に集計してみましょう。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].sum(axis=1)
実行結果を確認すると、各生徒の合計点が出力されています。
これで、列方向・行方向に集計をするaxisオプションの理解は完璧です。
sum以外の関数とその利用方法を見ていきましょう!
python count:カウント
count()関数は、データの個数をカウントすることができます。
以下の例では、生徒の人数(列方向)をカウントしています。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['生徒名']].count()
#count(axis=0)も可
python unique:種類数カウント
unique()関数は、データの種類数をカウントすることができます。
以下の例では、クラスの種類数(A,Bで2クラス)をカウントしています。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['クラス']].nunique()
python mean:平均
mean()関数は、データの平均値を算出することができます。
以下の例では、各科目の平均値を算出しています。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].mean()
python min max:最小値 最大値
min()/max()関数は、データの最小値・最大値を算出することができます。
以下の例では、各科目の最低点と最高点を算出しています。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].min()
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].max()
python std:標準偏差
std()関数は、データの標準偏差を算出することができます。
以下の例では、各科目の標準偏差を算出しています。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].std()
python groupby:グループ集計
ここまで、いろんな集計関数の実行結果を見てきましたが、データの集計はグループ単位で実行したいケースが多々あります。
このようなときに、利用するのがgroupby('項目')オプションです。
groupbyの使い方
- groupby('項目')とすることで、指定した項目にまとめて集計をすることが可能。
- groupby('項目1','項目2')とすることで、複数項目でまとめた集計をすることも可能。
たとえば、各クラス(A/B)で教科の平均点を算出したいときに、groupby()関数を用いると以下のような集計が可能になります。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['クラス','国語(50点満点)','数学(100点満点)','英語(120点満点)']].groupby('クラス').mean()
python describe:統計量の一括取得
describe()関数は、個別に関数計算しなくても重要な統計量を一括で確認できる関数です。
初めてだと扱うデータセットで、データの外観をつかむときに最初に利用すると便利です。
import pandas as pd
df = pd.read_csv('学習用データ.csv')
df[['国語(50点満点)','数学(100点満点)','英語(120点満点)']].describe()
まとめ
今回は、「Pythonのpandas基礎集計関数とその利用方法」を解説しました。
pandasはデータ分析で利用するもっとも重要な基礎アプリです。
さらに、pandasを使った実践問題にチャレンジしたい方は以下の記事にチャレンジしてみてください!
次のステップとして、データの整形からグラフの描写までを学べます。
-
【初心者向け】挫折しない!Pythonではじめるデータ分析の4ステップ
データ分析をしたくてPythonを勉強を始めてみたけど。。 という挫折をしている人は本当に多いと思います。 ぼくもプログラミングを勉強しては挫折を繰り返し、本当にデータ分析をPythonでやる必要があ ...
データサイエンティストとして、キャリア形成を考えている人は以下の記事も参考になります。
-
【完全版】Python習得のロードマップ|初心者プログラミング知識0から年収800万円へ
年収上げたいけど、プログラマって稼げるの? プログラマって知識0からでもなれるの? という質問をもらいますが、「Python」と「データ分析」を武器にすれば6ヶ月で年収800万円以上を狙うことは十分可 ...
それでは、また次の記事でお会いしましょう。
最近のコメント