データ分析実践:分析を成功させるためのデータ整形入門
データ分析を始めるにあたり、「分析したいデータは手元にあるけれど、どう扱えば良いか分からない」「情報がばらばらで、分析に適した形になっていない」といった壁に直面することがあります。生データはそのままでは分析に使いにくいことが多く、分析を成功させるためには、事前にデータを整える作業が必要不可欠です。この「データを整える」工程は「データ整形」や「データクリーニング」、「データラングリング」などと呼ばれ、データ分析の品質を左右する非常に重要なステップとなります。
なぜデータ整形が必要なのか
データ分析の目的は、データから有用な情報を引き出し、示唆を得ることです。しかし、手元にあるデータは、必ずしも分析に適した形になっているわけではありません。以下のような課題があることが一般的です。
- 形式の不統一: 同じ意味のデータでも、表記方法が異なっている(例: 「東京都」「東京」「トウキョウ」)、日付のフォーマットがばらばら(例: 「2023/01/01」「2023-01-01」「Jan 1, 2023」)。
- 不要な情報やノイズ: 分析に関係ない情報が含まれていたり、入力ミスやシステムエラーによる異常な値が含まれていたりする。
- 欠損値: 一部のデータが抜け落ちている。
- 構造の問題: 一つのセルに複数の情報が含まれている、行と列が分析に適した形になっていないなど。
これらの課題を解決し、データ分析ツールが扱いやすく、かつ分析結果の信頼性を高めるためにデータ整形を行います。データ整形の品質が、その後の分析結果の妥当性に直結すると言っても過言ではありません。
データ整形の主なステップ
データ整形は、データの種類や分析目的によって様々な作業を含みますが、初心者の方がまず取り組むべき基本的なステップをいくつかご紹介します。
-
データの読み込みと確認:
- 分析に使用するデータをツール(Excel、Google Sheets、PythonのPandasなど)に読み込みます。
- データの全体像を把握します。具体的には、データの件数、列の数、各列にどのようなデータが入っているか(数値、文字列、日付など)、最初の数行や最後の数行を確認します。
- データの概要統計量(平均値、中央値、最大値、最小値など)を確認することで、データのおおまかな傾向や異常値の存在に気づくことがあります。
-
列名の整理:
- 分析ツールで扱いやすいように、列名(ヘッダー)を整理します。
- 例: 全角文字を半角に統一する、不要な記号やスペースを取り除く、日本語の列名を英数字に変換するなど。
-
データ型の変換:
- 各列のデータ型が適切かを確認し、必要に応じて変換します。
- 例: 数値として扱いたい列が文字列型になっている場合、数値型に変換します。日付データが文字列になっている場合は、日付型に変換します。このとき、異なる日付フォーマットを統一する作業も含まれます。
-
値の正規化・表記ゆれの修正:
- 同じ意味を持つ値なのに、異なる表記になっている場合にこれを統一します。
- 例: 国名や都道府県名、製品名などで「米国」「アメリカ」「USA」のように表記が異なる場合、「アメリカ合衆国」に統一するなど。
- 大文字・小文字の統一、全角・半角の統一などもここに含まれます。
-
不要な列・行の削除:
- 分析目的と関連性のない列や、完全に重複している行などを削除します。
-
欠損値の確認:
- データにどの程度欠損値が含まれているかを確認します。欠損値が多い列は分析から除外したり、欠損値を補完したりするなどの後続処理が必要になります。この段階ではまず「どこに、どれくらい欠損値があるか」を把握することが重要です。
-
外れ値の確認:
- データ全体の傾向から大きく外れた値(外れ値)がないかを確認します。外れ値は集計値や分析結果に大きな影響を与えることがあるため、その後の処理方法を検討します。
これらのステップは、必ずしもこの順番通りに進めるわけではなく、データの状況に応じて前後したり、繰り返し行われたりします。
Python (Pandas) を使ったデータ整形の例
データ整形はExcelやGoogle Sheetsでも可能ですが、大量のデータや複雑な整形を行う場合は、Pythonとデータ分析ライブラリPandasを使用するのが一般的です。ここでは、Pandasを使った簡単なデータ整形の例をご紹介します。
まず、Pandasライブラリをインポートします。
import pandas as pd
次に、サンプルデータを用意します。ここでは、辞書型からPandasのDataFrame(表形式のデータ構造)を作成します。
data = {
'ID': [1, 2, 3, 4, 5],
'売上(万円)': ['100', '150', '80', 'NaN', '120'],
'地域': ['東京', 'Osaka', 'tokyo', '大阪', 'Tokyo '],
'日付': ['2023/01/01', '2023-01-15', '2023.02.01', '2023-02-20', '2023/03/05']
}
df = pd.DataFrame(data)
print("--- 元データ ---")
print(df)
print("\n--- データ情報 ---")
print(df.info())
実行結果から、売上(万円)
がobject型(文字列)になっていること、地域
の表記が統一されていないこと、日付
のフォーマットがばらばらであることが分かります。また、売上(万円)
にはNaN
という欠損値らしい値が含まれています。
これらのデータを整形してみましょう。
# 1. 列名の整理 (今回は不要だが例として)
# df.rename(columns={'売上(万円)': 'sales_million'}, inplace=True)
# 2. データ型の変換と欠損値の扱い
# 売上(万円)列を数値型に変換。変換できない(NaNなど)はNaNとする
df['売上(万円)'] = pd.to_numeric(df['売上(万円)'], errors='coerce')
# NaN (Not a Number) がPandasの欠損値として扱われるようになる
# 日付列をdatetime型に変換。異なるフォーマットを自動認識
df['日付'] = pd.to_datetime(df['日付'])
# 3. 値の正規化・表記ゆれの修正
# 地域列の表記を統一
df['地域'] = df['地域'].str.strip() # 前後の空白を除去
df['地域'] = df['地域'].str.lower() # 小文字に変換
df['地域'] = df['地域'].replace({'tokyo': '東京', 'osaka': '大阪'}) # 具体的な表記を統一
print("\n--- 整形後データ ---")
print(df)
print("\n--- 整形後データ情報 ---")
print(df.info())
この例では、売上(万円)
列を数値に変換し、欠損値 (NaN
) を数値型の欠損値として扱えるようにしました。日付
列はdatetime
型に変換し、地域
列は空白除去と小文字化、そして具体的な表記ゆれ(Tokyo/Osaka -> 東京/大阪)を修正しました。df.info()
を見ると、データ型が変更されていることが確認できます。
このように、Pandasを使うと、データの読み込みから型変換、値の置換、欠損値の取り扱いといったデータ整形作業を効率的に行うことができます。
データ整形における注意点
- 元のデータを保護する: 整形作業を行う際は、常に元の未加工データのコピーを別に保存しておくことを強く推奨します。作業中に誤ってデータを壊してしまった場合でも、最初からやり直すことができます。
- 作業内容を記録する: どのような整形作業を行ったか、どの列にどのような変更を加えたかなどを記録しておきましょう。これにより、後から作業内容を確認したり、他のデータに同じ処理を適用したりすることが容易になります。また、分析結果の信頼性を説明する上でも重要になります。
- 自動化を検討する: 同じ整形作業を繰り返し行う必要がある場合は、スクリプト(Pythonコードなど)を作成して自動化することを検討しましょう。手作業に比べてミスが減り、効率も向上します。
まとめ:分析の土台となるデータ整形
データ分析の第一歩は、分析に適したデータを用意することです。データ整形は、生のデータを分析可能な形に整えるための重要なプロセスであり、分析結果の質を大きく左右します。
最初はデータのどこをどう直せば良いか分かりにくいかもしれませんが、まずは手元にある身近なデータ(CSVファイルやExcelファイルなど)を読み込み、どのような課題があるかを確認することから始めてみましょう。そして、今回ご紹介したような基本的な整形ステップを一つずつ試してみてください。
Pandasのようなツールを使うことで、これらの作業を効率的に進めることができます。データ整形のスキルを身につけることは、データ分析の実践において非常に強力な武器となります。
このサイトでは、今後もデータ分析の実践に役立つ情報を提供していきます。まずは簡単なデータセットを使って、データ整形の練習を始めてみることをお勧めします。