データ分析の第一歩:探索的データ分析(EDA)でデータの中身を知る
データ分析を始める際、「何から手をつければ良いのだろう」と迷うことがあります。データが目の前にあるものの、どのように扱えば分析を進められるのか、戸惑うこともあるかもしれません。データ分析プロジェクトを成功させるためには、データを深く理解することが最初の、そして最も重要なステップとなります。そのために用いられるのが「探索的データ分析(Exploratory Data Analysis)、略してEDA」です。
探索的データ分析(EDA)とは何か? その目的
探索的データ分析(EDA)とは、データセットの主要な特徴を要約したり、可視化したりすることで、データの構造や含まれる情報を把握するためのアプローチです。統計的な手法やグラフを用いて、データを様々な角度から「探索」し、データがどのような性質を持っているのかを理解することを目的とします。
EDAを行う主な目的は以下の通りです。
- データの全体像を把握する: データに含まれる変数(列)の種類、欠損値の有無、データ型の確認などを行います。
- データの問題点を発見する: 欠損値、異常値(他のデータから極端に外れた値)、入力エラーなどを特定し、その後の前処理の必要性を判断します。
- データの分布や傾向を知る: 各変数がどのような値をとる傾向があるのか、値のばらつきはどの程度かなどを確認します。
- 変数間の関係性を見つける: 複数の変数が互いにどのような関係にあるのか(例えば、一方の値が増えると他方の値も増えるかなど)を調べ、後の分析のヒントを得ます。
- 分析の方向性を決定する: データの特徴を理解することで、どのような分析手法が適しているか、どのような仮説を検証すべきかといった、具体的な分析計画を立てやすくなります。
EDAは、複雑な分析モデルを構築する前に、データそのものと向き合い、データが「何を語っているのか」を理解するための準備段階と言えます。このステップを丁寧に行うことで、その後の分析がスムーズに進み、より信頼性の高い、意味のある結果を得ることが可能になります。
EDAで確認すべき基本的なことと実践方法
EDAで行うことは多岐にわたりますが、初心者の方がまず押さえるべき基本的なステップをいくつかご紹介します。主にPythonのpandas
ライブラリを使った例を中心に説明します。
1. データの全体像と基本情報の確認
データセットを読み込んだら、まずはその「形」と「中身のタイプ」を確認します。
- データの次元(行数と列数): データがいくつの観測値(行)といくつの変数(列)から構成されているかを知ります。
- データ型: 各列が数値データなのか、文字列データなのか、日付データなのかといった型を確認します。データ型が適切でない場合、後の処理で問題になることがあります。
- 欠損値の有無: データの中に値が欠けている(欠損している)部分がないかを確認します。欠損値の扱いは重要な前処理の一つです。
これらの情報は、pandas
のDataFrameに対して.info()
メソッドを使うことで簡単に確認できます。
import pandas as pd
# 例として、DataFrame 'df' があると仮定します
# df = pd.read_csv('your_data.csv')
# データの基本情報を表示
df.info()
# 各列の欠損値の合計を確認
df.isnull().sum()
.info()
はデータ型や非欠損値の数を示し、.isnull().sum()
は各列の欠損値の数を教えてくれます。
2. 各列の要約統計量の確認
数値データを含む列については、その統計的な特徴を把握することが重要です。
- 中心傾向: 平均値、中央値など、データがどのあたりの値を中心に集まっているか。
- ばらつき: 標準偏差、分散など、データが平均値からどの程度散らばっているか。
- 範囲: 最小値、最大値、四分位数など、データがどの範囲に分布しているか。
これらの要約統計量は、pandas
のDataFrameの数値列に対して.describe()
メソッドを使うと一度に表示できます。
# 数値列の要約統計量を表示
df.describe()
カテゴリデータ(性別や商品の種類など、いくつかの分類に分けられるデータ)については、各カテゴリがどのくらいの頻度で出現するか(度数分布)を確認します。
# 例として 'category_column' というカテゴリ列があると仮定
df['category_column'].value_counts()
.value_counts()
は、各カテゴリの値とその出現頻度を多い順に表示します。
3. データ可視化による洞察
数値や表だけでは気づきにくいデータの傾向やパターンは、グラフにすることで直感的に理解できます。データ可視化はEDAの強力なツールです。matplotlib
やseaborn
といったライブラリがよく使われます。
- 単一変数の分布: ヒストグラムで数値データの分布の形状を確認したり、箱ひげ図でデータのばらつきや外れ値を確認したりします。
- 二変数間の関係性: 散布図で2つの数値変数間の関係(相関)を確認したり、棒グラフや箱ひげ図でカテゴリと数値の関係を確認したりします。
import matplotlib.pyplot as plt
import seaborn as sns
# 例として、数値列 'numerical_column' のヒストグラムを作成
sns.histplot(data=df, x='numerical_column', kde=True)
plt.title('Distribution of numerical_column')
plt.show()
# 例として、2つの数値列 'col1' と 'col2' の散布図を作成
sns.scatterplot(data=df, x='col1', y='col2')
plt.title('Relationship between col1 and col2')
plt.show()
# 例として、カテゴリ列 'category_column' と数値列 'numerical_column' の関係を箱ひげ図で確認
sns.boxplot(data=df, x='category_column', y='numerical_column')
plt.title('Distribution of numerical_column by category_column')
plt.show()
これらのグラフを見ることで、データの中心がどこにあるか、ばらつきが大きいか小さいか、特定のカテゴリで値が大きく異なるか、といった発見が得られます。
EDAから次のステップへ
EDAを通してデータの性質を理解したら、次は何をすべきでしょうか。EDAで見つかったデータの問題点(欠損値、異常値など)に対して、適切な前処理を検討します。また、EDAで発見した変数間の関係性やデータの分布は、その後の特徴量エンジニアリング(分析に役立つ新しい変数を作成すること)や、どの分析モデルを選択するか、モデルにどのようなパラメータを設定するかといった判断に大きく影響します。
例えば、特定の値にデータが集中している(偏った分布)場合は、対数変換などの変換が必要かもしれません。強い相関が見られる変数があれば、多重共線性の問題に注意が必要かもしれません。外れ値が見つかれば、その値をどう扱うか(除去、変換など)を検討する必要があります。
EDAは一度行ったら終わりではなく、分析の過程でデータの理解を深めるために繰り返し行うこともあります。
まとめ
探索的データ分析(EDA)は、データ分析の最初の、そして最も重要なステップです。データを様々な角度から眺め、要約し、可視化することで、データが持つ情報、潜在的な問題点、そして変数間の関係性を発見することができます。
EDAを丁寧に行うことは、その後の前処理やモデル構築をより適切に進めるための基盤となります。データの表面的な情報だけでなく、その背景にあるストーリーやパターンを探る「データ探偵」になったつもりで、ぜひご自身のデータでEDAを実践してみてください。まずは小さなデータセットから始めて、.info()
や.describe()
を使ってみたり、簡単なグラフを描いてみたりすることから慣れていくのが良いでしょう。データと対話する感覚を掴むことが、データ分析スキル向上への近道となります。