Webスクレイピングについて、ヘッダーがピボットテーブルのようになっている場合の扱いについて【Google Colab:Python:pd.read_html】

スポンサーリンク
投資

読者の方から、問い合わせをいただいたのでフィードバックとコメントをお返ししたいと思います。

質問、問い合わせ

質問としてはとあるサイトをスクレイピングしたいという物と、それが問題ないのか、という物でした。サイト自体は以下のサイトになります。

株主プロ 【 大量保有報告書 提出者 | FMRLLC 保有銘柄検証 】
上場企業、約3,900社の株主を検証

特定の機関投資家の大量保有を報告した銘柄の傾向を調査したいという事でしょうか。

目標とすること

そのサイトのデータを個人的な分析などで利用することとします。

使用するツール

使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。

実際のコードとやっていること

実際のコードは以下の通りです。

import pandas as pd

url = 'http://kabupro.jp/edx/E12208.htm'

data1 = pd.read_html(url)
display(len(data1))
display(data1[0])

スクレイピング自体は問題なのですが、気になる点としてはヘッダー情報がピボットテーブルの形式になっていたり、最後の行が不必要な情報になっている事でしょうか。実際画像を見ても、最初の行がテーブルの結合のような形で恐らく広告などがあるようにも見えます。

どのようにすればこのあたり、分析に使いやすいようにデータ取得できるのでしょうか?

改善策1

ヘッダー情報がピボットテーブルであることを明示的に示してあげると良いと思います。

以下の例はいかがでしょうか?

data2 = pd.read_html(url, header =[0,2])
display(len(data2))
display(data2[0])

ヘッダー部がすっきりしたように思えます。ちなみに列名については以下のようになっているようです。

display(data2[0].info())

改善点2

列名が長いので、シンプルなものに変更し、最後行のデータは削除したいと思います。

table1=data2[0][:-1].copy()
table1.columns = ['code', '発行会社名', '件数', '他', '総数', '最新提出日','unname']
display(table1)

どうでしょうか。最初のデータよりは見やすくなったのではないでしょうか。

データ分析の7割から8割はデータの準備というのが自分の持論でもあるのですが、このような作業しやすいデータであれば、今後いろいろ分析してみようという気になるかもしれませんね。

スクレイピングについて

スクレイピングの注意点という物もあります。

https://t.co/NI8bqQmp8Z
https://sugiaki1989.gitbook.io/scrapy-note/chapter01_rules

スクレイピングで取得したデータを販売するとかであると問題があると思っています。

スクレイピングのために他のユーザーのアクセスに支障が出るなどの頻度でアクセスするのはよくありません。

上記のような点を勘案しながら常識的な使用を心がけてください。

Pythonに関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
Pythonを使ってTwitterに自動投稿。APIの設定など。(Twitter API v2とAPI v1.1の併用)
ボラティリティ クラスタリング(Volatility Clustering)について:Google ColabのPythonでの相場環境分析
TradingViewを使ってポートフォリオ運用(複数銘柄運用・配当込み) 日本株 2019年末に約1000万円投資していたらどうなった?【コピペで動く!】Google ColabのPythonで自分で調べてみよう!

コメント