スクレイピング・データのクリーニングと前処理

ガイド, ハウツー, 8月 -0520245分で読める

このブログポストでは、スクレイピングされたデータで直面する可能性のある様々な課題を探り、最適な結果を得るためのクリーンアップと前処理の方法に関する詳細なガイドを提供します。あなたがベテランのデータアナリストであろうと、Pythonを使った新進のウェブスクレイパーであろうと、このガイドはあなたのデータセットを効率的に整理するための実用的なヒントとテクニックを提供することを目的としています。

よくある落とし穴からベストプラクティスや実例まで、スクレイピングしたデータを可能な限りクリーンで実用的なものにする方法を学びましょう。

スクレイピング・データに共通する課題

スクレイピングされたデータには、多くの場合、独自の課題がつきまとう。最も一般的な問題は、不規則性、不整合、欠損値などである。これらの問題は、データを効果的に分析する能力を大きく妨げる可能性があります。

不規則性と矛盾の例

不正はさまざまな形で起こりうる。例えば、複数のeコマースサイトから商品価格をスクレイピングすることを想像してみてほしい。あるサイトでは税込み価格が表示され、別のサイトでは税抜き価格が表示されているかもしれない。キログラムとポンドのように、測定単位が異なることもある。このような不一致は、データが正確で比較可能であることを保証するために、徹底的なクリーニングと前処理を必要とします。

データ品質低下の影響

データ品質が悪いと、結果がゆがむだけでなく、誤ったビジネス上の意思決定にもつながりかねない。データアナリストにとって、クリーニングの段階は譲れないものです。適切にクリーニングされたデータは、その後の分析の信頼性と洞察力を保証します。

データクリーニングのツールとテクニック

パンダを使ったステップバイステップガイド

Pandasを使ってデータセットをクリーニングする基本的な例を見てみよう。映画に関するデータをスクレイピングしましたが、そのデータには欠損値や一貫性のないフォーマットが含まれていたとします。

ステップ1 - データをロードする:

   pandasをpdとして インポートする
   df = pd.read_csv('movies.csv')

ステップ 2 - 欠損値の処理:

   df.fillna(method='ffill',inplace=True)

ステップ3 - フォーマットの標準化:

df['release_date']= pd.to_datetime(df['release_date'])

ステップ4 - 重複を削除する:

df.drop_duplicates(inplace=True)

データクリーニングにNumPyを活用する

NumPyは高性能な数学関数を提供することでPandasを補完します。例えば、外れ値を処理するために、NumPyの `np.where` 関数を使って極端な値に上限を設定することができます。

import pandas as pd
import numpy as np
# Sample data
data = {
   'A': [1, 2, 3, 1000, 5],
   'B': [10, 20, 30, 40, 5000]
}
# Create a DataFrame
df = pd.DataFrame(data)
# Define a threshold to cap the values
threshold_A = 100
threshold_B = 100
# Use np.where to cap the extreme values
df['A'] = np.where(df['A'] > threshold_A, threshold_A, df['A'])
df['B'] = np.where(df['B'] > threshold_B, threshold_B, df['B'])
print("DataFrame after handling outliers:")
print(df)

上のスクリプトの出力はこうだ:

外れ値処理後のDataFrameAB
0 1 10
1 2 20
2 3 30
3 100 40
4 5 100

スクレイピング・データの前処理におけるベスト・プラクティス

データ形式と構造の標準化

複数のデータソースを扱う場合、標準化は極めて重要である。異なるソースからの同じようなデータポイントが同じフォーマットに従っていることを確認する。例えば、日付は曖昧さを避けるためにISO 8601のような標準フォーマットであるべきだ。

欠落または不正確なデータの処理

欠損データには適切に対処すべきである。インピュテーションのような技術は、他の利用可能なデータに基づいて欠損値を埋めることができる。一方、不正確なデータは、修正するために手作業による検査や検証アルゴリズムを必要とすることが多い。

データの一貫性の確保

整合性チェックは不可欠です。スクリプトを使用して、データが事前に定義したルールに適合していることを確認する。たとえば、ある列に正の数だけを含める必要がある場合は、検証スクリプトを作成して、異常があればフラグを立てます。

ケーススタディ実世界での応用

スクレイピングされたデータにおける一般的な課題のいくつかにどのように対処できるか、実践的な例に飛び込んでみましょう。実際に遭遇する可能性のある問題に焦点を当てながら、仮想の求人情報サイトからデータをスクレイピング、クリーニング、分析するプロセスを説明します。

ステップ1:データのスクレイピング

求人情報サイトからデータをスクレイピングしているとしよう。目標は、職種、会社名、給与範囲を収集することです。このデータを抽出するためのBeautifulSoupを使ったPythonスクリプトのサンプルです:

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = "https://example-jobsite.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

jobs = []
for job_post in soup.find_all('div', class_='job'):
    title = job_post.find('h2').text
    company = job_post.find('p', class_='company').text
    salary = job_post.find('span', class_='salary').text
    jobs.append({'title': title, 'company': company, 'salary': salary})

df = pd.DataFrame(jobs)

この時点で、データは次のようになるかもしれない:

タイトル会社給与
ソフトウェアエンジニアテック・コーポレーション$100,000
シニア・デベロッパーイノバテック$120,000
ジュニア・デヴスタートアップX$80,000
データアナリストビッグデータ$95000
シニアデータサイエンティストデータミン140,000 USD

大文字と小文字の違い、通貨記号の違い、給与額の書式の不統一などである。

ステップ2:データのクリーニング

意味のある分析を行う前に、このデータをクリーニングすることは非常に重要である。その手順を説明しよう:

1.テキストデータの標準化役職名や会社名は、しばしば書式に一貫性がありません。これらを大文字で統一することで標準化できます。

df['title']= df['title'].str.strip().str.title()
df['company']= df['company'].str.strip().str.title()

このステップの後、データはより均一に見えるようになる:

タイトル会社給与
ソフトウェア・エンジニアテック・コーポレーション$100,000
シニア・デベロッパーイノバテック$120,000
ジュニア・デヴスタートアップX$80,000
データアナリストビッグデータ$95000
シニア・データサイエンティストデータミン140,000 USD

2:数値データの標準化:給与の数値にはさまざまな記号や書式が含まれており、直接比較することが困難な場合があります。ドル記号とカンマを取り除き、これらの文字列を数値に変換します。

df['salary']= df['salary'].str.replace('[\$,]','').str.replace('USD','').astype(float)

これで、給与欄は一貫した数値になります:

タイトル会社給与
ソフトウェア・エンジニアテック・コーポレーション100000
シニア・デベロッパーイノバテック120000
ジュニア・デヴスタートアップX80000
データアナリストビッグデータ95000
シニア・データサイエンティストデータミン140000

3:欠損データの処理:欠落データの処理:給与情報が欠落している求人情報があったとします。これらの行を削除する代わりに、その職種の給与の中央値など、何らかのロジックに基づいて欠損値を埋めることを選択することができます:

df['salary'].fillna(df.groupby('title')['salary'].transform('median'), inplace=True)

ステップ3:クリーニングされたデータの分析

クリーニングされたデータで、意味のある分析を行うことができます。例えば、異なる職種間の給与分布を把握したいと思うかもしれません:

プリント(df.groupby('title')['salary'].describe())

このコマンドを実行すると、職種ごとの統計サマリーが表示され、給与の傾向を把握することができます。

例題NumPyで外れ値に対処する

場合によっては、データに外れ値、つまり分析に歪みを与えるような極端に高い、あるいは低い給与の値が含まれるかもしれません。NumPyは、このような異常値に蓋をするために使うことができます:

npとしてnumpyをインポートする

# 給与の上限をしきい値で設定する(例:200,000)
threshold_salary = 200000
df['salary'] = np.where(df['salary'] > threshold_salary, threshold_salary,df['salary'])

print(df)

キャッピング後のデータセットは次のようになる:

タイトル会社給与
ソフトウェア・エンジニアテック・コーポレーション100000
シニア・デベロッパーイノバテック120000
ジュニア・デヴスタートアップX80000
データアナリストビッグデータ95000
シニア・データサイエンティストデータミン200000

洞察と意思決定への影響

データのクリーニングと前処理を行うことで、乱雑なデータセットが価値あるリソースに生まれ変わります。これで、給与の高い企業を特定したり、業界全体の給与傾向を分析したりするなど、自信を持って洞察を導き出すことができます。これらの洞察は、給与ベンチマークや人材獲得計画などのビジネス戦略に直接役立ちます。

結論と次のステップ

このブログポストでは、スクレイピングされたデータのクリーニングと前処理の重要性について説明しました。一般的な課題の理解から、PandasやNumPyのような強力なPythonライブラリの活用まで、あなたのツールボックスには必要なものが揃っています。

クリーンなデータは単なる贅沢品ではなく、正確で信頼できる意思決定を行うために必要なものであることを忘れてはならない。ここで紹介するベストプラクティスに従うことで、データ分析を効率的かつ効果的に行うことができます。

データ分析を次のレベルに引き上げる準備はできましたか?今日からこれらの戦略を実行に移し、データクリーニングと前処理の理解を深めるために他のリソースもチェックしてください。ハッピー・スクレイピング