はじめに
データ解析では、ランキングを作成することが非常に重要です。ランキングを作成することで、データの特徴を把握したり、分析結果を可視化したりすることができます。
この記事では、Pythonのデータ解析ライブラリであるpandasを使ってランキングを作成する方法について解説します。
ランキング作成のデータ解析における重要性
ランキングを作成することで、データの特徴を把握することができます。たとえば、ある商品の売上ランキングを作成することで、その商品の人気度や需要の高さを把握することができます。また、複数の項目を比較するためにもランキングは有用です。たとえば、複数の商品の売上ランキングを作成することで、どの商品が最も売れているのかを比較することができます。
pandasでランキングを作成する基本的な方法
pandasを使ってランキングを作成する場合は、rank()関数を使います。この関数は、データフレームの各行について、指定した列の値に基づいてランキングを作成します。
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'], '点数': [80, 70, 90, 75, 85] }) # 点数を基準にランキングを作成 df['ランキング'] = df['点数'].rank(ascending=False) # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 3.0 1 Bob 70 5.0 2 Charlie 90 1.0 3 Dave 75 4.0 4 Eve 85 2.0
上記の結果から、点数の高い順にランキングがつけられていることがわかります。
ランキング作成時の昇順・降順の設定方法
rank()関数では、ascendingパラメータを使ってランキングの昇順・降順を指定することができます。デフォルトでは昇順になっているので、降順にする場合はascending=Falseと指定します。
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'], '点数': [80, 70, 90, 75, 85] }) # 点数を基準に降順でランキングを作成 df['ランキング'] = df['点数'].rank(ascending=False) # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 2.0 1 Bob 70 5.0 2 Charlie 90 1.0 3 Dave 75 4.0 4 Eve 85 3.0
上記の結果から、点数の高い順にランキングがつけられていることがわかります。
ランキング作成時の重複順位の扱い方
ランキングを作成する場合、同じ値を持つデータが存在すると、ランキングが同じになってしまうことがあります。この場合、methodパラメータを使って重複順位の扱い方を指定することができます。
- ‘average’:同じ値を持つデータが複数ある場合は、平均値を使用します。デフォルトの方法です。
- ‘min’:同じ値を持つデータが複数ある場合は、最小順位を使用します。
- ‘max’:同じ値を持つデータが複数ある場合は、最大順位を使用します。
- ‘first’:同じ値を持つデータが複数ある場合は、最初に出現したデータに最も高い順位を使用します。
- ‘dense’:同じ値を持つデータが複数ある場合でも、次の順位を飛ばさずに順位を振ります。
以下に、それぞれの方法でランキングを作成する例を示します。
average’を使ったランキング作成
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve', 'Frank', 'Grace'], '点数': [80, 70, 90, 75, 85, 75, 70] }) # 点数を基準にランキングを作成('average'を使用) df['ランキング'] = df['点数'].rank(method='average') # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 5.0 1 Bob 70 1.5 2 Charlie 90 7.0 3 Dave 75 3.5 4 Eve 85 6.0 5 Frank 75 3.5 6 Grace 70 1.5
上記の結果から、同じ値を持つデータが複数ある場合は、平均値を使用して順位を振っていることがわかります。
‘min’を使ったランキング作成
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve', 'Frank', 'Grace'], '点数': [80, 70, 90, 75, 85, 75, 70] }) # 点数を基準にランキングを作成('min'を使用) df['ランキング'] = df['点数'].rank(method='min') # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 5.0 1 Bob 70 1.0 2 Charlie 90 7.0 3 Dave 75 3.0 4 Eve 85 6.0 5 Frank 75 3.0 6 Grace 70 1.0
上記の結果から、同じ値を持つデータが複数ある場合は、最小順位を使用して順位を振っていることがわかります。
‘max’を使ったランキング作成
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve', 'Frank','Grace'], '点数': [80, 70, 90, 75, 85, 75, 70] }) # 点数を基準にランキングを作成('max'を使用) df['ランキング'] = df['点数'].rank(method='max') # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 5.0 1 Bob 70 2.0 2 Charlie 90 7.0 3 Dave 75 4.0 4 Eve 85 6.0 5 Frank 75 4.0 6 Grace 70 2.0
上記の結果から、同じ値を持つデータが複数ある場合は、最大順位を使用して順位を振っていることがわかります。
‘first’を使ったランキング作成
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve', 'Frank', 'Grace'], '点数': [80, 70, 90, 75, 85, 75, 70] }) # 点数を基準にランキングを作成('first'を使用) df['ランキング'] = df['点数'].rank(method='first') # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 5.0 1 Bob 70 1.0 2 Charlie 90 7.0 3 Dave 75 3.0 4 Eve 85 6.0 5 Frank 75 4.0 6 Grace 70 2.0
上記の結果から、同じ値を持つデータが複数ある場合は、最初に出現したデータに最も高い順位を使用して順位を振っていることがわかります。
‘dense’を使ったランキング作成
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve', 'Frank', 'Grace'], '点数': [80, 70, 90, 75, 85, 75, 70] }) # 点数を基準にランキングを作成('dense'を使用) df['ランキング'] = df['点数'].rank(method='dense') # 結果を表示 print(df)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 ランキング 0 Alice 80 3.0 1 Bob 70 1.0 2 Charlie 90 5.0 3 Dave 75 2.0 4 Eve 85 4.0 5 Frank 75 2.0 6 Grace 70 1.0
上記の結果から、同じ値を持つデータが複数ある場合でも、次の順位を飛ばさずに順位を振っていることがわかります。
ランキングを用いたデータフレームの操作例
ランキングを用いることで、データフレームを様々な方法で操作することができます。以下に、いくつかの操作例を紹介します。
上位n件のデータを抽出する
nlargest()関数を使うことで、指定した列の値が上位n件のデータを抽出することができます。
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'], '点数': [80, 70, 90, 75, 85] }) # 点数が上位2件のデータを抽出 df_top2 = df.nlargest(2, '点数') # 結果を表示 print(df_top2)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 2 Charlie 90 4 Eve 85
上記の結果から、点数が上位2件のデータが抽出されていることがわかります。
上位n%のデータを抽出する
quantile()関数を使うことで、指定した列の値が上位n%のデータを抽出することができます。
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'], '点数': [80, 70, 90, 75, 85] }) # 点数が上位50%のデータを抽出 df_top50percent = df[df['点数'] >= df['点数'].quantile(0.5)] # 結果を表示 print(df_top50percent)
上記のコードを実行すると、次のような結果が得られます。
名前 点数 0 Alice 80 2 Charlie 90 4 Eve 85
上記の結果から、点数が上位50%のデータが抽出されていることがわかります。
各ランキングごとの統計量を計算する
groupby()関数を使うことで、各ランキングごとの統計量を計算することができます。
import pandas as pd # データフレームの作成 df = pd.DataFrame({ '名前': ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve', 'Frank', 'Grace'], '点数': [80, 70, 90, 75, 85, 75, 70] }) # 点数を基準にランキングを作成 df['ランキング'] = df['点数'].rank(method='min') # 各ランキングごとの平均値を計算 df_mean_by_rank = df.groupby('ランキング')['点数'].mean() # 結果を表示 print(df_mean_by_rank)
上記のコードを実行すると、次のような結果が得られます。
ランキング 1.0 70.0 3.0 75.0 5.0 80.0 6.0 85.0 7.0 90.0 Name: 点数, dtype: float64
上記の結果から、各ランキングごとの平均値が計算されていることがわかります。
まとめ
pandasを使うことで、ランキングを作成することが簡単にできます。ランキング作成時の昇順・降順の設定方法や、重複順位の扱い方を理解しておくことで、より正確なランキングを作成することができます。また、ランキングを用いることで、データフレームの様々な操作を行うことができます。以上を踏まえて、データ解析の際にはランキング作成を積極的に活用していきましょう。