Pythonデータ分析入門
第2回: データの読み込みとクレンジング

Python

はじめに

前回は、Pythonを使ったデータ分析の基本概念と必要なツールについて学びました。今回は、実際にデータを読み込み、クレンジング(データのクリーニング)する方法について詳しく解説します。データ分析の第一歩は、正確でクリーンなデータを用意することです。Pandasライブラリを使って、さまざまなデータソースからデータを読み込み、データの質を高めるための基本的な操作を紹介します。

データの読み込み

Pandasを使用すると、CSV、Excel、SQLなどのさまざまな形式のデータを簡単に読み込むことができます。以下に、いくつかの代表的なデータ読み込み方法を示します。

CSVファイルの読み込み

CSVファイルは、データ分析で最も一般的に使用される形式の一つです。Pandasのread_csv関数を使用して、CSVファイルを読み込むことができます。

import pandas as pd

# CSVファイルの読み込み
df = pd.read_csv('sample.csv')

# データの先頭5行を表示
print(df.head())

このコードを実行すると、CSVファイルの先頭5行が表示されます。

id  name  age  salary
0   1  John   28   50000
1   2  Anna   24   60000
2   3  Mike   35   70000
3   4  Sara   29   80000
4   5  Dave   30   90000

Excelファイルの読み込み

Excelファイルも広く使用されており、Pandasのread_excel関数を使って読み込むことができます。

import pandas as pd

# Excelファイルの読み込み
df = pd.read_excel('sample.xlsx', sheet_name='Sheet1')

# データの先頭5行を表示
print(df.head())

Excelファイルを読み込む際には、sheet_name引数で特定のシートを指定することができます。

SQLデータベースからの読み込み

SQLデータベースからデータを読み込むには、SQLAlchemyライブラリを使用します。まず、データベースに接続し、Pandasのread_sql関数を使用してデータを取得します。

import pandas as pd
from sqlalchemy import create_engine

# データベース接続の設定
engine = create_engine('sqlite:///sample.db')

# SQLクエリを実行してデータを読み込む
df = pd.read_sql('SELECT * FROM sample_table', engine)

# データの先頭5行を表示
print(df.head())

この方法を使用すると、SQLデータベースから直接データを取得し、Pandasデータフレームとして扱うことができます。

データクレンジング

データクレンジングは、データの質を高めるために欠損値や異常値を処理する重要なステップです。Pandasを使って、以下のようなデータクレンジング操作を行います。

欠損値の処理

データセットには、しばしば欠損値(NaN)が含まれています。これらの欠損値を処理する方法をいくつか紹介します。

欠損値の確認

まず、データセットに欠損値が含まれているかどうかを確認します。

# 欠損値の確認
print(df.isnull().sum())

このコードを実行すると、各列に含まれる欠損値の数が表示されます。

id        0
name      0
age       1
salary    2
dtype: int64

欠損値の除去

欠損値を含む行を削除する方法です。

# 欠損値を含む行を削除
df_cleaned = df.dropna()

# 欠損値を含む列を削除
df_cleaned = df.dropna(axis=1)

この操作により、欠損値を含む行や列が削除され、クリーンなデータフレームが得られます。

欠損値の補完

欠損値を特定の値で補完する方法です。例えば、平均値や中央値で補完することが一般的です。

# 平均値で欠損値を補完
df['age'].fillna(df['age'].mean(), inplace=True)

# 中央値で欠損値を補完
df['salary'].fillna(df['salary'].median(), inplace=True)

この方法により、欠損値が適切な値で補完され、データセットが完全になります。

異常値の検出と処理

データには、極端な値(異常値)が含まれている場合があります。これらの異常値を検出し、適切に処理することも重要です。

異常値の検出

異常値を検出するためには、箱ひげ図(ボックスプロット)を使用する方法が一般的です。

import matplotlib.pyplot as plt

# 箱ひげ図を描画
plt.boxplot(df['salary'])
plt.show()

箱ひげ図を使用すると、データの分布と異常値を視覚的に確認することができます。以下は、異常値を検出するための例です。

# 四分位範囲(IQR)の計算
Q1 = df['salary'].quantile(0.25)
Q3 = df['salary'].quantile(0.75)
IQR = Q3 - Q1

# 異常値の除去
df_cleaned = df[~((df['salary'] < (Q1 - 1.5 * IQR)) | (df['salary'] > (Q3 + 1.5 * IQR)))]

このコードは、四分位範囲(IQR)を使用して異常値を検出し、データフレームから除去します。

実践例:Titanicデータセットのクレンジング

ここでは、実際にTitanicデータセットを使って、データの読み込みとクレンジングを行います。このデータセットは、Pandasのread_csv関数で直接取得できます。

データの読み込み

import pandas as pd

# Titanicデータセットの読み込み
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
df = pd.read_csv(url)

# データの先頭5行を表示
print(df.head())

欠損値の確認

# 欠損値の確認
print(df.isnull().sum())

欠損値の補完と除去

# 'Age'列の欠損値を平均値で補完
df['Age'].fillna(df['Age'].mean(), inplace=True)

# 'Embarked'列の欠損値を最頻値で補完
df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)

# 'Cabin'列を削除
df.drop(columns=['Cabin'], inplace=True)

異常値の検出と処理

# 箱ひげ図を描画
import matplotlib.pyplot as plt
plt.boxplot(df['Fare'])
plt.show()

# 異常値の除去
Q1 = df['Fare'].quantile(0.25)
Q3 = df['Fare'].quantile(0.75)
IQR = Q3 - Q1

df_cleaned = df[~((df['Fare'] < (Q1 - 1.5 * IQR)) | (df['Fare'] > (Q3 + 1.5 * IQR)))]

クレンジング後のデータ確認

# クレンジング後のデータの先頭5行を表示
print(df_cleaned.head())

# クレンジング後の欠損値の確認
print(df_cleaned.isnull().sum())

まとめ

今回は、Pythonを使ったデータの読み込みとクレンジングについて学びました。データ分析の初期段階であるデータの読み込みとクレンジングは、正確な分析を行うために非常に重要です。次回は、データの基本統計量と集計について詳しく解説します。

コメント

タイトルとURLをコピーしました