概要
pandasを使用したデータ分析系システム現場での影響調査やデータ調査で使用してきたテクニックを以下にメモしておく。
目次
- 特定レコードを抽出する方法
- 重複のない値を取得する方法(unique)
- 重複データを検出する方法(duplicated)
- 欠損値を確認する方法(isnull)
- データフレームの分布を確認する方法(value_counts)
- データフレームの構造を確認する方法(info)
pandas を使って顧客IDが一致するレコードを抽出・表示する
大量のレコードから特定の顧客IDが一致するレコードを抽出し、表示する方法を以下に示します。これはよく私が特定のレコードを調査する際に使用しています。
import pandas as pd
# データを作成
data = {
'customer_id': ['12345', '67890', '12345', '11111', '12345'],
'order_amount': [250, 300, 150, 200, 100],
'order_date': ['2023-09-01', '2023-09-02', '2023-09-03', '2023-09-04', '2023-09-05']
}
df = pd.DataFrame(data)
# 顧客IDが '12345' に一致するレコードを抽出
target_customer_id = '12345'
filtered_records = df[df['customer_id'] == target_customer_id]
# 抽出したレコードを表示
print(filtered_records)
以下のような出力結果が出てくる。
customer_id order_amount order_date
0 12345 250 2023-09-01
2 12345 150 2023-09-03
4 12345 100 2023-09-05
**unique()**で特定の列に存在するユニークな値(重複のない値)を取得する
デバッグ用途として、データに存在する特定のカラムの値の種類を確認する際に役立ちます。特定処理に通ってほしいレコードがあるかを確認したりします。
import pandas as pd
# データを作成
data = {
'customer_id': ['12345', '67890', '12345', '11111', '12345'],
'order_amount': [250, 300, 150, 200, 100],
'order_date': ['2023-09-01', '2023-09-02', '2023-09-03', '2023-09-04', '2023-09-05']
}
df = pd.DataFrame(data)
# 顧客IDのユニークな値を確認
unique_customer_ids = df['customer_id'].unique()
print("ユニークな顧客ID: ", unique_customer_ids)
以下のような出力結果が出てくる。
ユニークな顧客ID: ['12345' '67890' '11111']
**duplicated()**による重複データの検出
データに重複レコードが含まれているかどうかを確認し、問題のあるレコードを検出できます。
import pandas as pd
# データを作成
data = {
'customer_id': [101, 102, 101, 103, 104, 102, 101, 104, 103, 102],
'order_amount': [250, 300, 250, 150, 500, 300, 250, 500, 150, 300]
}
df = pd.DataFrame(data)
# 重複している行を確認
duplicates = df[df.duplicated()]
print("重複しているレコード: \n", duplicates)
以下のような出力結果が出てくる。
重複しているレコード:
customer_id order_amount
2 101 250
5 102 300
6 101 250
7 104 500
8 103 150
9 102 300
※重複したレコードをデータフレームから削除するには、drop_duplicates() メソッド使用すれば良い。
**isnull()**による欠損値の確認
データセットに欠損値(NaN)が含まれていないかを確認できます。
import pandas as pd
# データを作成(欠損値も含める)
data_with_missing = {
'customer_id': ['12345', '67890', None, '11111', '12345'],
'order_amount': [250, 300, 150, None, 100],
'order_date': ['2023-09-01', None, '2023-09-03', '2023-09-04', None]
}
df_with_missing = pd.DataFrame(data_with_missing)
# 欠損値の確認
missing_values = df_with_missing.isnull().sum()
print("カラムごとの欠損値: \n", missing_values)
以下のような出力結果が出てくる。
カラムごとの欠損値:
customer_id 1
order_amount 1
order_date 2
dtype: int64
**value_counts()**によるデータの分布確認
特定のカラムに含まれる値の分布を確認できます。データの偏りや異常な値が見つかることがあります。
import pandas as pd
# データを作成
data = {
'customer_id': [101, 102, 101, 103, 104, 102, 101, 104, 103, 102],
'order_amount': [250, 300, 200, 150, 500, 320, 180, 430, 100, 250]
}
df = pd.DataFrame(data)
# 顧客IDごとの件数をカウント
customer_counts = df['customer_id'].value_counts()
print("顧客IDごとの件数: \n", customer_counts)
以下のような出力結果が出てくる。
顧客IDごとの件数:
101 3
102 3
103 2
104 2
dtype: int64
**info()**によるデータフレームの構造確認
# データを作成(欠損値も含める)
data_with_missing = {
'customer_id': ['12345', '67890', None, '11111', '12345'],
'order_amount': [250, 300, 150, None, 100],
'order_date': ['2023-09-01', None, '2023-09-03', '2023-09-04', None]
}
以下のようにデータフレームの情報を表示してくれます。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 customer_id 4 non-null object
1 order_amount 4 non-null float64
2 order_date 4 non-null object
dtypes: float64(1), object(2)
memory usage: 252.0+ bytes
- customer_id カラムは4つの非欠損値(object 型)。
- order_amount カラムは4つの非欠損値(float64 型)。
- order_date カラムは4つの非欠損値(object 型)。
- データフレームは全体で5行あり、各カラムに1つずつ欠損値があります。
- また、メモリ使用量が 252.0 バイトであることも表示されています。
上記がこれまでデータ分析系現場でのデータ調査で使用してきたテクニックです。