注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

Python株価情報をpandasを使ってスクレイピングしてみる

  • 2020年9月13日
  • 2020年11月20日
  • Python

ここでは「Python」をコマンドプロンプト環境下使用し、株価情報をPandasを用いて取得する方法を紹介します。

 

この記事を読むことで

pandasを使った株価情報の取得方法

head()、tail()メソッドの使い方

to_numeric()、dropna()メソッドの使い方

などを学ぶことができます。

 

株価情報をサイト内で見るときに、表(テーブル)で表示されているサイトもありますよね。

今回はこの表(テーブル)から株価情報をPythonで取得していきます。

Python の動作環境とパッケージのDL

最初に今回Pythonを使用する上での動作環境と使用するパッケージのインストールについて記載します。

 

Pythonをコマンドプロンプトで動作

この記事ではPython をコマンドプロンプト(cmd)にて動作させています。

 

python-scraping1

Windowsの方なら、画面左下の検索窓に「コマンドプロンプト」または「cmd」を入力することでコマンドプロンプトアプリが起動できます。

 

Pythonのインストールおよびコマンドプロンプトの細かな使い方については、割愛します。

※当サイトでは「C:¥code」と「Cドライブ直下」に「code」というファイルにPython ファイルを入れて、実行させています。

 

したがって、パッケージ等はすべて「pip install」を使用します。

また、Python ファイルの実行ですがコマンドプロンプト内で

python ファイル名.py

とコマンド入力して実行させます。

コマンドプロンプトで結果を表示させるため、print文を多用している点もご理解いただけると幸いです。

 

スクレイピングに必要なPython パッケージをDL

続いて、Python に必要なパッケージである

pip install pandas
pip install beautifulsoup4 lxml html5lib

をインストールしていきます。

 

「pip install beautifulsoup4 lxml html5lib」

は3つのパッケージを1つのpipで一度にインストールしているだけで

pip install beautifulsoup4
pip install lxml
pip install html5lib

と記述していることは変わりません。

 

「lxml」はXpathで特定の要素を指定できるなどHTMLを扱うために使用するPython ライブラリの一つです。

「html5lib」はHTMLを解析するための標準ライブラリになります。

 

Python 公式サイト lxml 4.5.2はこちら

 

Python 公式サイト html5lib 1.1はこちら

 

今回はサイト読み込みのために

pd.read_html()

というPython のコードを使用できるようにするためにこれらをpipでインストールします。

 

PythonのPandasを使い株価情報を取得する

下準備ができたら、実際にyahoo!financeからPython のPandasを使って株価情報を解析していきます。

 

read_htmlを使いサイト情報を解析する

まずはpandasをPythonでインポートします

import pandas as pd

 

続いて、yahoo! financeからダウ平均株価の毎月の株価情報を取得していきます。

yahoofinace-stock

 

yahoo! financeの公式ページの検索窓に「^DJI」と打ち込み

Historical Data

Frequency : Monthly

として毎月の「ダウ平均株価」の株価情報を表示させます。

※分析する銘柄は各自お好みで

 

このページまで進めたら、このページのURLをコピペしてPython 内の「url引数」に格納します。

url = “株価対象のURL”

 

続いて、read_html()を使い

df = pd.read_html(url,header=0)

ページの読み込みと、表内のデータ説明語句を取得します。

 

header=0は表の「High」、「Low」といった列名を取得しています。

あとはprint文を使いページをコマンドプロンプトに表示させます。

stock.py

import pandas as pd

url = "URLをコピペ"

#ページの読み込み&最初のデータ説明取得
df = pd.read_html(url,header=0)

print(df[0].head())
print(df[0].tail())

 

今回はデータの先頭・末尾の行を返す「head()」、「tail()」メソッドを使い株価データを取得します。

このPython プログラムを実行すると

stock-result1

のようになりました。

 

見にくいかもしれませんが、head()メソッドで取得した株価データはしっかりとコマンドプロンプトで表示されています。

一方、tail()メソッドで取得した株価データは100行目に

#Close price adjusted for splits.**Adjusted cl …

と変な文字列が入ってしまいました。

 

Python では取得した文字列を数値に変換するメソッドや、行を削除するメソッドがあるのでこれらを使って、上記の変な文字列を無くしていきます。

 

Python で文字列が入っている行の削除を行う

Python には文字列を数値に変換する「to_numeric()」メソッドと、NaNが含まれている行を削除する「dropna()」メソッドがあります。

よって、これらを使って文字列を含む行を削除します。

 

まずは四本音などから適当に文字列を含む列名を選び、その列名に文字列を含む場合、「NaN」に変換するPython の記述を書きます。

 

ここでは四本音のなかから終値である「Close*」を選びました。

# 文字列(終値)「Close*」を数値「NaN」に変換

df[0][“Close*”] = pd.to_numeric(df[0][“Close*”],errors=”coerce”)

 

to_numeric()メソッドの説明は下記Qiitaのサイトで詳しく説明されています。

Qiita:pandas.DataFrameの型を変えたいけど例外レコードがあってastypeできない時の対処法

 

続いて、NaNが含まれている行を削除する「dropna()」メソッドを使用します。

# NaNが含まれている行を削除

df[0].dropna(inplace=True)

と記述するとNaNが含まれている行を削除してくれます。

 

これらをprint()文の前に記述して実行すると

stock-result2

と文字列を含む行を削除することができました。

 

これをcsvファイルに書き出したり、表やグラフにすると面白そうだと思います。

 

参考にしたサイト

note.nkmk.me:python,pandasでwebページの表をスクレイピング

 

Qiita:pandas.DataFrameの型を変えたいけど例外レコードがあってastypeできない時の対処法

 

DeepAge:Pandasでnan値を削除、穴埋めするfillna、dropnaの使い方

 

 

また当サイトでは、IBM Watsonを使ったPythonによる「画像分析」なども紹介しているので興味がある方は挑戦してみてください。

[Graspy:AI初心者向け講座感想]IBM Watsonを使った画像分析・Python

 

 

お疲れ様でした。

 

stock-pandas-pytop
学びに関する情報をチェック!