ホームページ >バックエンド開発 >Python チュートリアル >Webスクレイピングと外国語データの分析

Webスクレイピングと外国語データの分析

Susan Sarandon
Susan Sarandonオリジナル
2024-12-24 11:40:14952ブラウズ

最近、簡単な Web スクレイピングとデータ分析プロジェクトを実行したいと決心しました。私の脳は、時間がかかりそうな大きなアイデアを思いつくのが好きなので、数時間で実行できそうな簡単なものを思いつくことに挑戦することにしました。

私が思いついたのは次のとおりです:

私の学位はもともと外国語 (フランス語とスペイン語) だったので、言語関連のデータを Web スクレイピングするのは楽しいだろうと思いました。 BeautifulSoup ライブラリを使用したかったのですが、このライブラリは静的 HTML を解析できますが、データセット全体を表示するために onclick イベントを必要とする(つまり、ページ分割されている場合はデータの次のページをクリックするなど)動的 Web ページを処理できません。

私は、最も一般的に話されている言語をまとめたこの Wikipedia ページを使用することにしました。

Web scraping and analysing foreign languages data

次のことをしたかったのです:

  • ページの HTML を取得し、.txt ファイルに出力します
  • 美しいスープを使用して HTML ファイルを解析し、テーブル データを抽出します
  • テーブルを .csv ファイルに書き込みます
  • データ分析を使用して、このデータセットについて答えたい 10 の質問を考えてください
  • パンダと Jupyter Notebook を使用してこれらの質問に答えます

関心を分離するためにプロジェクトをこれらのステップに分割することにしましたが、スクリプトを再実行して Wikipedia から HTML を取得するために複数の不必要なリクエストを行うことも避けたかったのです。 HTML ファイルを保存して、別のスクリプトでそれを操作すると、データはすでにあるため、データを再リクエストする必要がなくなります。

プロジェクトリンク

このプロジェクトの github リポジトリへのリンクは次のとおりです: https://github.com/gabrielrowan/Foreign-Languages-Analysis

HTMLの取得

まず、htmlを取得して出力しました。 C# と C を使った後は、Python コードがいかに短くて簡潔であるかにいつも驚かされます。

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

HTMLを解析する

美しいスープで HTML を解析し、興味のあるテーブルを選択するには、次のようにしました。

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


次に、パンダ データフレームの列名を取得するためのテーブル ヘッダー テキストを取得しました。

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

その後、データフレームを作成し、列名を設定し、テーブルの各行を取得して、各行をデータフレームに書き込みました。

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


注 -strip() を使用しないと、テキスト内に不要な n 文字が含まれていました。

最後に、データフレームを .csv に書き込みました。

データの分析

事前に、データから答えたい次の質問を考え出します。

  1. データセット内のすべての言語のネイティブ スピーカーの総数は何人ですか?
  2. 言語家族には何種類ありますか?
  3. 言語族ごとのネイティブ スピーカーの総数は何人ですか?
  4. 最も一般的な言語ファミリーのトップ 3 は何ですか?
  5. 最も一般的な言語ファミリーの上位 3 つを示す円グラフを作成します
  6. 最も一般的に発生する言語ファミリー - ブランチ ペアは何ですか?
  7. この表にはどの言語が中国・チベット語として含まれていますか?
  8. すべてのロマンス語とゲルマン語の母語話者の棒グラフを表示します
  9. 上位 5 つの言語はネイティブ スピーカー全体の何パーセントを占めていますか?
  10. ネイティブ スピーカーが最も多い支店と最も少ない支店はどれですか?

結果

これらの質問すべてに答えるためにコードを詳しく説明するつもりはありませんが、チャートに関係する 2 つの質問について説明します。

すべてのロマンス語とゲルマン語のネイティブ スピーカーの棒グラフを表示します

まず、ブランチ名が「Romance」または「Germanic」である行のみを含むデータフレームを作成しました

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

次に、グラフに必要な x 軸、y 軸、バーの色を指定しました。

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


これにより作成されました:

Web scraping and analysing foreign languages data

最も一般的な上位 3 つの言語ファミリーを示す円グラフを作成する

円グラフを作成するために、最も一般的な上位 3 つの言語ファミリーを取得し、これらをデータフレームに入れました。

このコード グループは、言語族ごとのネイティブ スピーカーの合計を取得し、降順に並べ替えて、上位 3 つのエントリを抽出します。

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

次に、「ネイティブ スピーカー」の Y 軸と凡例を指定して、データを円グラフに配置します。これにより、グラフに表示される言語ファミリーごとに色分けされたラベルが作成されます。

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


Web scraping and analysing foreign languages data

残りの質問のコードと回答はここにあります。ノートにマークダウンを使用して質問とその回答を書きました。

次回:

次回の Web スクレイピングとデータ分析プロジェクトでは、以下を使用して物事をより複雑にしたいと思います。

  • クリック/スクロールすると詳細なデータが表示される 動的 ページを Web スクレイピング
  • はるかに大きなデータセットを分析します。分析前にデータ クリーニング作業が必要になる可能性があります

Web scraping and analysing foreign languages data

最終的な考え

あっという間のプロジェクトでしたが、このプロジェクトは楽しかったです。短くて管理しやすいプロジェクトが、実践担当者を獲得するのにどれほど役立つかを思い出しました。さらに、たとえ小さなデータセットであっても、インターネットからデータを抽出してそこからグラフを作成するのは楽しいものですか?

以上がWebスクレイピングと外国語データの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。