【Python】pandasでランキングを作成しよう!データ解析のポイント

はじめに

データ解析では、ランキングを作成することが非常に重要です。ランキングを作成することで、データの特徴を把握したり、分析結果を可視化したりすることができます。

この記事では、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を使うことで、ランキングを作成することが簡単にできます。ランキング作成時の昇順・降順の設定方法や、重複順位の扱い方を理解しておくことで、より正確なランキングを作成することができます。また、ランキングを用いることで、データフレームの様々な操作を行うことができます。以上を踏まえて、データ解析の際にはランキング作成を積極的に活用していきましょう。