0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでのデバック:pandasで使えるデバック方法

Last updated at Posted at 2024-10-06

概要

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 バイトであることも表示されています。

上記がこれまでデータ分析系現場でのデータ調査で使用してきたテクニックです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?