第6章: Pythonでデータの整理とクリーニング

Webスクレイピングによって収集されたデータは、多くの場合、生の形ではそのまま使用できません。Webページ上にあるデータは、ユーザーが見やすいように整形されていたり、広告や余計な情報が含まれていることがよくあります。そのため、スクレイピングしたデータを使用する前に、データの整理やクリーニングが必須です。整理とクリーニングを行うことで、データの品質を高め、後での分析や可視化の作業がスムーズになります。

Pythonのpandasライブラリは、データの整理やクリーニングにおいて強力なツールです。pandasを使えば、テキストデータの処理や欠損値の処理、重複行の削除など、データクレンジングに必要な操作が簡単に行えます。本章では、pandasを用いてスクレイピングしたデータを整理・クリーンアップする具体的な手順を説明します。


pandasの基本

まず、データ整理の前にpandasを使うための基本的な準備を行います。pandasを使用するには、まずライブラリをインポートする必要があります。以下のように、通常はpandasを pd という短縮形でインポートします。

import pandas as pd

次に、スクレイピングしたデータを読み込みます。スクレイピングの結果として、よく使われるデータ形式はCSVファイルやExcelファイルですが、HTMLテーブルやJSON形式の場合もあります。ここでは、仮にCSVファイルを使った例を中心に説明します。

# CSVファイルからデータを読み込む
df = pd.read_csv('scraped_data.csv')

df という変数にデータフレームが格納されます。データフレームとは、pandasの中心的なデータ構造で、Excelのスプレッドシートのような行と列で構成された2次元データの形式です。


データの確認

まず最初に、読み込んだデータがどのようなものかを確認する必要があります。以下の方法でデータの先頭5行や末尾5行を確認できます。

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

# データの末尾5行を表示
print(df.tail())

これにより、データの全体像をつかみやすくなります。また、データにどのような列があるのか、またその型(文字列、数値など)を確認するには、次のコードを使用します。

# データの列名と各列のデータ型を表示
print(df.info())

これにより、各列のデータ型(文字列や数値など)や欠損値の有無を確認することができます。


不要なデータの削除

スクレイピングしたデータには、不要な列や行が含まれていることがよくあります。たとえば、広告や不要なメタデータが含まれている場合、これらの列や行は削除するのが一般的です。

不要な列の削除

列を削除する場合、drop メソッドを使います。たとえば、"ad_column" という不要な広告データを含む列を削除する場合は、次のようにします。

# 不要な列を削除
df = df.drop(columns=['ad_column'])

このようにして、指定した列を削除します。複数の列を削除したい場合は、リストで列名を指定することができます。

# 複数の不要な列を削除
df = df.drop(columns=['ad_column', 'meta_info'])

不要な行の削除

特定の条件に合致する行を削除したい場合、drop メソッドと条件式を組み合わせて使用します。たとえば、"status" 列の値が "inactive" となっている行を削除したい場合、次のようにします。

# 条件に基づいて行を削除
df = df[df['status'] != 'inactive']

このコードは、"status" 列が "inactive" ではない行のみを抽出し、新しいデータフレームに置き換えます。


重複データの削除

Webページからのデータ収集では、重複データが発生することがあります。重複データを削除するためには、drop_duplicates メソッドを使用します。次のコードで、全ての列をチェックして重複している行を削除します。

# 重複行を削除
df = df.drop_duplicates()

特定の列のみを基準にして重複を削除することも可能です。たとえば、"id" 列が重複している行を削除するには、以下のようにします。

# 特定の列に基づいて重複を削除
df = df.drop_duplicates(subset='id')

subset パラメータには、重複をチェックしたい列を指定します。また、重複を削除せずに確認するだけであれば、次のコードを使います。

# 重複行を確認
print(df[df.duplicated()])

欠損値の処理

スクレイピングしたデータには、値が欠けていること(欠損値)がよくあります。pandasでは、欠損値を簡単に処理するための機能が豊富に用意されています。まず、データフレームに欠損値が含まれているかどうかを確認するには、次のようにします。

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

このコードにより、各列に含まれる欠損値の数を確認できます。欠損値が確認できたら、次の方法で処理します。

欠損値の削除

欠損値が含まれている行や列を削除するには、dropna メソッドを使用します。たとえば、欠損値を含むすべての行を削除するには、以下のようにします。

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

特定の列に欠損値が含まれている場合のみ行を削除したい場合は、subset パラメータを指定します。

# 特定の列に基づいて欠損値を含む行を削除
df = df.dropna(subset=['column_name'])

欠損値の補完

欠損値を削除せずに、適切な値で補完(置き換え)することもよくあります。たとえば、欠損値をゼロで埋める場合、fillna メソッドを使用します。

# 欠損値をゼロで置き換え
df = df.fillna(0)

また、平均値や中央値で欠損値を埋めることも可能です。たとえば、"age" 列の欠損値をその列の平均値で補完するには、以下のようにします。

# 列の平均値で欠損値を置き換え
df['age'] = df['age'].fillna(df['age'].mean())

データ型の変換

スクレイピングしたデータでは、数値が文字列として取得されていることがあります。この場合、数値としての演算や分析ができなくなるため、適切なデータ型に変換する必要があります。

数値型への変換

文字列として格納されている数値データを、数値型に変換するには、pd.to_numeric メソッドを使用します。たとえば、"price" 列が文字列として格納されている場合、それを数値に変換するには以下のようにします。

# 数値型に変換
df['price'] = pd.to_numeric(df['price'], errors='coerce')

errors='coerce' とすることで、数値に変換できない値は欠損値(NaN)に変換されます。

日付型への変換

日付データも同様に、文字列として取得されることがよくあります。日付データをdatetime型に変換するには、pd.to_datetime メソッドを使用します。

# 日付型に変換
df['date'] = pd.to_datetime(df['date'], errors='coerce')

これにより、日付データが正しい形式に変換され、日付に関連する演算(たとえば日付の差分の計算など)が可能になります。


データのフィルタリング

整理・クリーニングが進んだところで、特定の条件に基づいてデータを抽出することも重要です。たとえば、"price" 列が1000以上の行だけを取得したい場合は、次のようにします。

# 条件に基づいてデータをフィルタリング
filtered_df = df[df['price'] >= 1000]

複数の条件を組み合わせることもできます。たとえば、"price" が1000以上で、かつ "category""Electronics" である行を抽出するには、次のようにします。

# 複数の条件でデータをフィルタリング
filtered_df = df[(df['price'] >= 1000) & (df['category'] == 'Electronics')]

このようにして、必要なデータだけを効率よく抽出できます。


データのソート

最後に、データをソートする方法も非常に重要です。たとえば、"price" 列を昇順にソートしたい場合、sort_values メソッドを使います。

# データを昇順にソート
df = df.sort_values(by='price')

降順にソートしたい場合は、ascending=False を指定します。

# データを降順にソート
df = df.sort_values(by='price', ascending=False)

まとめ

pandasを使ったデータの整理とクリーニングは、スクレイピングしたデータを分析可能な形に整えるための重要なプロセスです。本章で紹介した基本的なテクニックを使用すれば、不要なデータの削除、欠損値の処理、データ型の変換、フィルタリング、ソートなどの処理が効率的に行えます。これにより、データの品質を高め、次の分析や可視化のステップにスムーズに進めることができるでしょう。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

p-school

Share
Published by
p-school

Recent Posts

第6章: PHPのデータベース操作

PHPを使用してデータベースに…

2週間 ago

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング…

2週間 ago

第4章: PHPの関数

プログラミングにおいて、関数は…

2週間 ago

第3章: PHPの配列とコレクション

PHPでの配列とコレクションの…

2週間 ago

第2章: PHPの基本文法

PHPの基本的な構文や使い方を…

2週間 ago