Python

データを確保しよう

前回、プロ野球セリーグのデータを用いてデータ分析を行いました。

データ分析をはじめよう(相関分析)Pythonを用いてデータを分析していきます。今回は相関分析です。...

しかし、どうにもデータが足りませんでしたので、今回はデータの確保方法について検討したいと思います。

なぜデータが不足したか

前回使用したデータはWebサイトからデータを、手入力でCSVファイルに入力したものです。

簡単な分析が目的だったこともあり、作成途中で心が折れました。また、このデータ取得方法には以下の課題があります。

  1. データの確保に時間が掛かる
  2. ファイル作成時に誤入力する可能性がある

課題の解決方法

コピペでCSVファイルを作成すれば、手入力よりも短時間でデータを入手することができます。コピペでCSVファイルを作成する際の流れは以下の様になります。

  1. 入力元のデータをコピーする。
  2. 出力先のCSVファイルに貼り付ける。
  3. データを整形する。

手入力でCSVファイルを作成するよりも、随分楽になりそうです。

しかしながら、まだ人手を介しますので「誤入力」のリスクは残りますし、何ページにも渡るようなWebサイトでは、また心が折れることが予想されます。

そこで、登場するのがスクレイピングです。

スクレイピングとは

スクレイピング(Scraping)は「こする」「かき集める」といった意味を持つ「Scrape」に由来する用語で、物を解体する「Scrap」と似ていますが別の単語です。「Scrape」は広範囲をゴシゴシこすりながら物をきれいにしたり、散らばった物を集めたりするニュアンスが近いでしょう。そこからコンピュータ用語に転じて、特定の目的を持ってWebやデータベースを広く探って「データを抽出する手法」のことを指すようになりました。

出典:ビジネス+IT

スクレイピングについては、様々なサイトに詳細が記載されていますので、ここでの説明は割愛します。

スクレイピングしてみよう

さて、ここからは実際にスクレイピングをしていきたいと思います。

今回のスクレイピングの流れは以下の通りです。

  1. 取得するデータを決定する。
  2. データが掲載されているサイトを調べる。
  3. サイトからデータを取得するためのコードを実装する。

取得するデータを決定

今回も野球で行きます。今回取得するデータは「セ・リーグの年度毎の優勝チーム名」とします。

サイトを調べる

「プロ野球 優勝チーム 一覧」とGoogleで検索したところ、検索結果の一番上に表示されたのが「日刊スポーツ」さんのサイトでしたので、こちらからデータを取得することにします。

コードの実装

ホームページの構造を解析する

Chromeのデベロッパーツールを使って目的のデータがWeb上でどのように扱われている確認します。

Chromeのデベロッパーツールは目的のサイトで「F12キー」を押下してください。

私が取得したい情報である「年度」と「優勝チーム名」は<tr>タグ中に存在するようなので、今回は<tr>タグで囲われたデータをすべて取得してみます。

コーディング

今回作成したコードは以下の通りです。様々なサイトでスクレイピングのコードが紹介されていますので、コードの詳細な説明は割愛します。

# 実行環境はWindows11、anaconda3

# 必要なライブラリを読み込み
from bs4 import BeautifulSoup
import requests
import re
import csv

# アクセスするURLを指定
res = requests.get("https://www.nikkansports.com/baseball/professional/record/victory/pf-victory_cl.html")

# Webから取得した内容を抽出
soup = BeautifulSoup(res.text,"html.parser")

# 年度ごとの優勝チーム名を取得
datas =soup.find_all("tr")

# 取得したデータを保存
with open("championship.csv","w",newline="",encoding="shift-jis") as f:
  writer = csv.writer(f)
  for data in datas:
    row = data
    writer.writerow(row)
今回はWindows11標準のメモ帳で開くことを前提にしているので、shift-jis形式で書き込んでいますが、通常はUTF-8にしたほうがいいです。

出力結果

無事、以下のデータを取得することが出来ました。

まとめ

最初は手入力より時間がかかる

Pythonのコーディングで何度も躓きました。最初は手入力のほうが早いと思われますが、スクレイピングの手法を覚えることは今後の武器になりそうです。

不要な情報が書き込まれている

出力結果には不要な情報(tdタグの表示)が含まれています。今回取得したデータを用いて、データ分析する際にどのみち削除することになりそうなので、データ取得時に削除する方法を検討します。

 

 

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA