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経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓