データ分析のプロセス効率化!pandasでのデータ分割方法を解説

データ分析では、大量のデータを扱うことがよくあります。その中から必要な情報を取り出すためには、データの分割が不可欠です。本記事では、Pythonのデータ分析ライブラリであるpandasを使って、データ分割の方法を解説します。

データ分析におけるデータ分割の重要性

データ分割とは、大量のデータを小さな単位に分割することです。これによって、必要な情報をより効率的に取り出すことができます。例えば、ある企業の販売データを分析する場合、商品ごとに分割することで、各商品の売り上げ推移や顧客層を把握することができます。

pandasを用いたデータ分割の基本概念

pandasは、Pythonのデータ分析ライブラリの中でも特に高機能なものの一つです。pandasでは、データを2次元表形式で扱うことができます。データ分割の際には、この表形式を利用して行ったり列ごとにデータを分割することができます。

列に基づくデータ分割方法

列に基づくデータ分割とは、特定の列を指定して、その列の値に基づいてデータを分割する方法です。pandasでは、groupby()メソッドを用いて、指定した列ごとにデータをグループ化することができます。

import pandas as pd
# サンプルデータを作成
data = {
    "name": ["Alice", "Bob", "Charlie", "David", "Emily"],
    "score": [80, 90, 75, 85, 95],
    "subject": ["Math", "Science", "Math", "Science", "Math"]
}
df = pd.DataFrame(data)
# subjectごとにデータをグループ化
grouped = df.groupby("subject")
# 各グループの平均値を表示
print(grouped.mean())

このプログラムでは、groupby()メソッドを使って、”subject”列を指定しています。これによって、”subject”列の値ごとにデータがグループ化され、mean()メソッドで各グループの平均値が計算されています。

実行結果は以下のようになります。

          score
subject        
Math       83.33
Science    87.50

このように、”subject”列ごとにデータを分割して平均値を計算することができました。

行に基づくデータ分割方法

行に基づくデータ分割とは、指定した範囲の行を取り出す方法です。pandasでは、iloc[]メソッドを用いて、行番号を指定してデータを取り出すことができます。

import pandas as pd
# サンプルデータを作成
data = {
    "name": ["Alice", "Bob", "Charlie", "David", "Emily"],
    "score": [80, 90, 75, 85, 95],
    "subject": ["Math", "Science", "Math", "Science", "Math"]
}
df = pd.DataFrame(data)
# 1行目から3行目までのデータを取り出す
subset = df.iloc[1:4]
# 取り出したデータを表示
print(subset)

このプログラムでは、iloc[]メソッドを使って、1行目から3行目までのデータを取り出しています。実行結果は以下のようになります。

      name  score  subject
1      Bob     90  Science
2  Charlie     75     Math
3    David     85  Science

このように、iloc[]メソッドを使って指定した範囲の行を取り出すことができます。

条件やグループに基づくデータ分割

条件やグループに基づくデータ分割とは、特定の条件を指定して、その条件に合致するデータを取り出す方法です。pandasでは、条件やグループに基づくデータ分割には、query()メソッドやboolean indexingを用いることができます。

import pandas as pd
# サンプルデータを作成
data = {
    "name": ["Alice", "Bob", "Charlie", "David", "Emily"],
    "score": [80, 90, 75, 85, 95],
    "subject": ["Math", "Science", "Math", "Science", "Math"]
}
df = pd.DataFrame(data)
# scoreが90
# 以上のデータを抽出する
subset1 = df.query("score == 90")
# subjectがMathのデータを抽出する
subset2 = df[df["subject"] == "Math"]
# 取り出したデータを表示
print(subset1)
print(subset2)

このプログラムでは、query()メソッドを使って、scoreが90以上のデータを抽出しています。また、boolean indexingを使って、subjectが”Math”のデータを抽出しています。実行結果は以下のようになります。

    name  score  subject
1    Bob     90  Science
   name  score subject
0  Alice     80    Math
2  Charlie     75    Math
4    Emily     95    Math

このように、query()メソッドやboolean indexingを使って、条件やグループに基づくデータ分割を行うことができます。

データ分割後のデータ処理と結合

データ分割を行った後は、必要なデータ処理を行った後に、元のデータと結合する必要があります。pandasでは、concat()メソッドを用いて、複数のデータフレームを結合することができます。

import pandas as pd
# サンプルデータを作成
data = {
    "name": ["Alice", "Bob", "Charlie", "David", "Emily"],
    "score": [80, 90, 75, 85, 95],
    "subject": ["Math", "Science", "Math", "Science", "Math"]
}
df = pd.DataFrame(data)
# subjectごとにデータをグループ化
grouped = df.groupby("subject")
# 各グループの平均値を計算
mean = grouped.mean()
# 各グループの合計値を計算
sum = grouped.sum()
# 平均値と合計値を結合
result = pd.concat([mean, sum], axis=1)
# 結合したデータを表示
print(result)

このプログラムでは、groupby()メソッドを使って、”subject”列ごとにデータをグループ化しています。次に、mean()メソッドとsum()メソッドを使って、各グループの平均値と合計値を計算しています。最後に、concat()メソッドを使って、平均値と合計値を結合しています。実行結果は
以下のようになります。

              score  score
subject                  
Math       83.333333    250
Science    87.500000    175

このように、concat()メソッドを使って複数のデータフレームを結合することができます。

まとめ

pandasを使えば、データ分析におけるデータ分割を簡単に行うことができます。列に基づくデータ分割、行に基づくデータ分割、条件やグループに基づくデータ分割など、様々な方法があります。また、データ分割を行った後は、必要なデータ処理を行った後に、元のデータと結合することができます。

本記事で紹介した方法を使って、データ分析のプロセスを効率化してみてはいかがでしょうか。