第13回「pandasの使い方(3)時系列データ、欠損値処理、データ連結、統計データ」

こんにちは、小澤です。

データ分析は現代のビジネスや科学研究において不可欠なスキルとなっており、膨大なデータを効率よく操作・分析するためのツールとして、pandasは非常に強力です。pandasを活用することで、データの整理、加工、集計といった基本的な作業が簡便かつ迅速に行えるようになります。

今回の解説では、pandasを用いた時系列データの作成方法、欠損値の処理、データの連結、および統計データの取り扱いについて取り上げます。教科書『Pythonによる新しいデータ分析の教科書(第2版)』では、4.2章「pandas」の160ページ〜177ページの箇所です。これらは、データ分析の基礎を形成するもので、効果的なデータ解析を行う上で欠かせないものです。

 

時系列データの作り方

時系列データは、時間に従って変化するデータのことです。pandasは、時系列データの作成と操作を簡単に行うことができます。pandasのpd.date_range()関数を使って、指定した期間内の等間隔な日付のインデックスを生成することができます。例えば、2024年1月1日から2024年12月31日までの日付インデックスを作成する場合、次のように記述します。

import pandas as pd

date_range = pd.date_range(start=’2024-01-01′, end=’2024-12-31′, freq=’D’)

このようにして生成された日付インデックスは、時系列データを扱う際の基礎として利用できます。たとえば、ランダムなデータを日付インデックスに関連付けて、時系列データフレームを作成するには以下のようにします。

import pandas as pd
import numpy as np

# 日付インデックスの生成
date_range = pd.date_range(start=’2024-01-01′, end=’2024-12-31′, freq=’D’)

# default_rngを使用して乱数生成器を作成
rng = np.random.default_rng()

# 乱数データの生成(例:0から100までの整数)
data = rng.integers(low=0, high=101, size=len(date_range))

# DataFrameを作成
df = pd.DataFrame(data, index=date_range, columns=[‘Value’])

ここでは、指定された範囲(この例では0から100まで)のランダムな整数を生成しています。sizeパラメータには生成するデータの個数を指定し、ここでは日付インデックスの長さに合わせています。これによって、各日付に対してランダムな整数値を持つ時系列データフレームが作成されます。このデータフレームを使うと、時系列データの操作や分析が可能になります。

 

欠損値処理

データ分析において、欠損値(NaN)は避けられない問題です。pandasでは、欠損値を処理するためのさまざまな方法が用意されています。基本的な方法としては、欠損値を含む行や列を削除する、または欠損値を補完する方法があります。

欠損値を削除するには、dropna()メソッドを使用します。データフレームから欠損値を含む行を削除するには、次のようにします。

cleaned_df = df.dropna()

一方、欠損値を補完する方法として、平均値や前後の値で補完するfillna()メソッドを使うこともできます。例えば、前の値で欠損値を補完するには、次のようにします。

filled_df = df.fillna(method=’ffill’)

このように、pandasでは欠損値処理を柔軟に行うことができます。適切な欠損値処理を行うことで、データの信頼性と分析の精度を向上させることができます。

 

データ連結

データ分析では、複数のデータセットを結合する必要がある場合があります。pandasでは、concat()関数やmerge()関数を使用して、データフレームの連結や結合を簡単に行うことができます。

concat()関数を使うと、縦方向(行方向)や横方向(列方向)にデータフレームを連結することができます。たとえば、2つのデータフレームを縦方向に連結するには、次のようにします。

df1 = pd.DataFrame({‘A’: [1, 2], ‘B’: [3, 4]})
df2 = pd.DataFrame({‘A’: [5, 6], ‘B’: [7, 8]})

concatenated_df = pd.concat([df1, df2])

また、merge()関数を使用して、共通のキーに基づいて2つのデータフレームを結合することも可能です。たとえば、異なるデータセットをIDで結合する場合は、次のように記述します。

df1 = pd.DataFrame({‘ID’: [1, 2, 3], ‘Value1’: [10, 20, 30]})
df2 = pd.DataFrame({‘ID’: [1, 2, 4], ‘Value2’: [100, 200, 400]})

merged_df = pd.merge(df1, df2, on=’ID’, how=’inner’)

この方法を使うと、異なるデータセットを結合し、分析に必要な情報を一元化することができます。

 

統計データの扱い

データ分析において、統計データの要約や基本統計量の計算は非常に重要です。pandasでは、describe()メソッドを使用して、基本的な統計量(平均、標準偏差、最小値、最大値など)を簡単に取得することができます。

statistics_summary = df.describe()
print(statistics_summary)

基本統計量では、データの分布や傾向を把握することができ、次の分析ステップに向けた判断材料を得ることができます。

また、異なる変数間の相関を確認するために、corr()メソッドを使用して相関係数を計算することもできます。これは、2つの変数間の関係性を定量的に評価することができるものです。

correlation_matrix = df.corr()
print(correlation_matrix)

さらに、データフレーム内の複数の数値列間の関係を視覚的に表示するためのツールとしてpandasには散布図行列があります。散布図行列は、複数の変数間の関係を一度に把握できるため、データ分析の初期段階で特に有効です。各変数ペアの散布図を行列形式で描画し、変数同士の相関やパターンを視覚的に確認できます。散布図行列は、pandas.plotting.scatter_matrix関数を使用して作成します。

 

まとめ

今回は、pandasを使用した時系列データの作成、欠損値処理、データの連結、そして統計データの扱いについて解説しました。これらはデータ分析における基本的な知識で、習得することで、データの前処理から分析までをスムーズに進めることが可能になります。さらに、これらの技術を組み合わせて活用することで、より高度なデータ分析やモデル構築にも取り組めるようになるでしょう。

次回からは、グラフを描画するためのライブラリであるMatplotlibについて説明します。次回もお楽しみに。

更新情報

PAGE TOP