Step 2: Pythonとデータ前処理
機械学習の旅へようこそ! Step 1では機械学習の基本的な概念を学びましたね。Step 2では、データ分析に欠かせないPythonライブラリと、データをモデルが学習できる形に整える「データ前処理」のスキルを身につけていきましょう。
今回は、データ分析の世界で最も広く使われているライブラリの一つ、Pandasに焦点を当て、その中核機能であるデータフレームの操作方法を学びます。Pandasをマスターすれば、データの読み込み、加工、集計などが驚くほど簡単になりますよ!
1. Pandasとデータフレームって何?
Pandasは、Pythonでデータを効率的に扱うための強力なライブラリです。特に、表形式のデータを扱うのに優れています。Excelの表のようなものを想像すると分かりやすいかもしれません。
そのPandasの中心的なデータ構造がデータフレーム (DataFrame) です。データフレームは、行と列から成る2次元のラベル付きデータ構造で、異なる型のデータ(数値、文字列、真偽値など)を一つの表の中に持つことができます。
機械学習では、多くの場合、データはCSVファイルやデータベースから読み込まれ、このデータフレームの形で処理されます。だから、Pandasとデータフレームの操作を理解することは、データ分析や機械学習プロジェクトを進める上で必須のスキルなのです!
2. Pandasを使ってみよう! (インストールとインポート)
まずはPandasを使えるように準備しましょう。Pythonのパッケージ管理ツールであるpipを使ってインストールします。ターミナルやコマンドプロンプトで以下のコマンドを実行してください。
インストールが終わったら、PythonスクリプトやJupyter NotebookでPandasをインポートします。慣例として、pd
という別名をつけてインポートするのが一般的です。
これでPandasを使う準備が整いました!
3. データフレームの作成
データフレームを作成する方法はいくつかあります。
3.1. Pythonの辞書から作成
キーが列名、値がリスト(列データ)となる辞書を用意して、pd.DataFrame()
に渡します。
実行結果:
名前 年齢 部署
0 田中 25 営業
1 佐藤 32 開発
2 鈴木 19 人事
3 高橋 41 営業
3.2. リストのリストから作成
データのリスト(各要素が1行分)と、列名のリストを別々に指定します。
実行結果は上記と同じになります。
3.3. CSV/Excelファイルから読み込み
実際のデータ分析では、外部ファイルからデータを読み込むことがほとんどです。Pandasはこれらを簡単に行う関数を提供しています。
CSVファイルの読み込み:
Excelファイルの読み込み:
Excelファイルを読み書きするには、追加でライブラリ (openpyxl
や xlrd
) が必要になる場合があります。pip install openpyxl
でインストールできます。
pd.read_csv()
や pd.read_excel()
には、ヘッダーの有無、区切り文字の種類、読み込む列の指定など、多くのオプションがあります。詳細は公式ドキュメントを参照してください。
4. データフレームの基本操作
データフレームを作成したら、まずは中身を確認したり、特定のデータを取り出したりする基本操作を覚えましょう。
4.1. データの確認
データフレームの概要を掴むための便利なメソッドがあります。
メソッド | 説明 | コード例 |
---|---|---|
df.head(n=5) |
最初のn行を表示 (デフォルトは5行) | print(df.head()) |
df.tail(n=5) |
最後のn行を表示 (デフォルトは5行) | print(df.tail(2)) |
df.shape |
データフレームの形状(行数, 列数)をタプルで返す | print(df.shape) |
df.columns |
列名のリスト(Indexオブジェクト)を返す | print(df.columns) |
df.index |
行のインデックス(RangeIndexなど)を返す | print(df.index) |
df.info() |
各列のデータ型、非欠損値の数、メモリ使用量などの要約情報を表示 | df.info() |
df.describe() |
数値列に関する基本的な統計量(件数、平均、標準偏差、最小値、四分位数、最大値)を計算して表示 (include='all' で全列対象) |
print(df.describe()) print(df.describe(include='all')) |
df.dtypes |
各列のデータ型を表示 | print(df.dtypes) |
4.2. 列の選択
特定の列データを取り出すには、列名を指定します。
4.3. 行の選択 (`loc` と `iloc`)
特定の行データを取り出すには、loc
または iloc
を使います。
loc
: ラベル(インデックス名や列名)に基づいて選択します。iloc
: 位置(整数のインデックス番号)に基づいて選択します。
loc
と iloc
は非常に強力で、様々な組み合わせでデータを選択できます。特にスライスの挙動(終了位置を含むか含まないか)が異なる点に注意しましょう。
4.4. 条件による絞り込み (ブールインデックス)
特定の条件を満たす行だけを抽出する操作は、データ分析で頻繁に行われます。これは「ブールインデックス」と呼ばれる方法で実現できます。
()
で囲むことを忘れないでください。演算子の優先順位の問題を避けるためです。
5. データ操作・加工
データの確認や抽出ができたら、次はデータを加工してみましょう。
5.1. 列の追加・削除
5.2. 欠損値の扱い
データには値がない「欠損値」(NaN: Not a Number と表現されることが多い)が含まれることがよくあります。機械学習モデルは通常、欠損値をそのまま扱えないため、適切に対処する必要があります。
5.3. データ型の変換 (`astype`)
列のデータ型を確認し、必要に応じて変換します。例えば、数値として扱いたい列が文字列型になっている場合などです。
5.4. 集計 (`groupby`, `agg`)
特定の列の値に基づいてデータをグループ化し、グループごとに集計(合計、平均、件数など)を行う操作は非常に強力です。
agg()
には、集計したい列名と適用したい集計関数(文字列 or NumPy関数など)を指定します。集計結果の列名を指定することも可能です (例: 平均年齢=('年齢', 'mean')
)。
5.5. ソート (`sort_values`)
特定の列の値に基づいてデータフレームの行を並び替えます。
5.6. 結合 (`merge`, `concat`)
複数のデータフレームを結合する方法も重要です。
pd.merge()
: データベースのJOINのように、共通のキー列に基づいてデータフレームを横方向に結合します。pd.concat()
: データフレームを縦方向または横方向に単純に連結します。
6. まとめと次のステップ
今回は、データ分析の強力な味方であるPandasライブラリと、その中心的なデータ構造であるデータフレームの基本的な操作方法を学びました。
- データフレームの作成(辞書、リスト、ファイル読み込み)
- データの確認(
head
,info
,describe
など) - データの選択(列選択、行選択
loc
/iloc
, 条件絞り込み) - データの加工(列追加/削除, 欠損値処理, 型変換, 集計
groupby
, ソート, 結合)
これらの操作を組み合わせることで、様々な形式のデータを効率的に扱い、分析に適した形に整えることができます。Pandasは非常に多機能なライブラリなので、今回紹介したのはほんの一部です。ぜひ公式ドキュメントなどを参照して、さらに深く学んでみてください。
次は、データを視覚的に理解するためのMatplotlib・Seabornによる可視化の基礎に進みます。データの傾向やパターンをグラフで表現するスキルを身につけましょう!