【Python3の基本】Yahoo ファイナンスをハッキングして株価値上がり率ランキングに別の条件を加えて調べる | Apple iOS 開発 YouTube セミナー 52


Python3系


- ヤフーファイナンスの値上がり率ランキングをPythonで解析
- Pandasを使ってデータ整形と抽出を行います
- listからand, or の絞り込み検索方法の基本を学ぶ


Yahoo ファイナンス株の値上がり率ランキングをPythonでハッキングする


「以下は動画のハイライトです。」

ヤフーファイナンスなど株価の値上がり率ランキングは誰もが見れる情報ですが、自分流の絞り込み検索を少し加えると自分のみが見れる情報へと変化します。

これを実現するのがPythonによるプログラミングであります。このチュートリアルではlist(配列)操作の基本と集合データの抽出方法などを学びます。最後にヤフーファイナンスの株価値上がり率ランキングからデータを取り出して自分好みの銘柄を抽出します。

まずはPython3によるlist操作の基本からです。

条件による絞り込みの方法はどのプログラミング言語にも共通するものですが書き方が若干異なります。またPythonの中でさえもいろいろな書き方が存在します。

私が調べた中で一番シンプルだったものはこれです。


dfs1_list = [11,44]
dfs2_list = [22,44]

df1_set = set(dfs1_list)
df2_set = set(dfs2_list)

matched_list = list(df1_set & df2_set)
print(matched_list)



listをset値へ変化するとmatched_listに&結果を出力することが可能となります。こうして上記二つの集合データに共通する44のデータのみが出力されるようになります。

次に以下のように変えてみるとどうでしょうか。


matched_list = list(df1_set | df2_set)
print(matched_list)



Andの&をorの|に変える訳ですがこれにより出力される結果が変わります。11, 22, 44の結果が出力されるようになります。

Andは両方の条件を満たすもの、Orは片方の条件を満たすものを出力するわけですが、単に集合データを扱う場合は数学的にAndは「かつ」でOrは「または」みたいな役割を担います。

ここまで集合データがわかったところで早速、ヤフーファイナンスからデータを取りに行ってみましょう。使うライブラリは以下です。


import pandas as pd
import csv



ヤフーファイナンスのURLは以下のような構造をしております。


https://info.finance.yahoo.co.jp/ranking/?kd=1&p=2



パラメーターのkdはランキングの種類を指し、pはページを指します。ちなみにp=2は51位から100位までの順位を取り出すことができます。値上がり率上位100位までとPERの上位100位までのデータ集合を合わせて取り出す場合は以下のようにします。


url1 = 'https://info.finance.yahoo.co.jp/ranking/?kd=1'
dfs1 = pd.read_html(url1)
url11 = 'https://info.finance.yahoo.co.jp/ranking/?kd=1&p=2'
dfs11 = pd.read_html(url11)

url2 = 'https://info.finance.yahoo.co.jp/ranking/?kd=9'
dfs2 = pd.read_html(url2)
url22 = 'https://info.finance.yahoo.co.jp/ranking/?kd=9&p=2'
dfs22 = pd.read_html(url22)



Pandasでは表形式のデータをhtml上から探し出し、データ整形を行うのに有効な関数が多く用意されております。ここでは表形式で取り出したデータから証券番号のみ抽出して配列に格納するコードを紹介します。


matched_list = []
dfs1_list = []
dfs11_list = []

dfs1Arr = str(dfs1[0:50][0]).splitlines()
dfs11Arr = str(dfs11[0:50][0]).splitlines()

for elm in dfs11Arr:
dfs1Arr.append(elm)



文字列のstrで取り出されたデータをsplitlines()で配列へ変換します。ついでに1位から100位までのデータを連結します。

こうしてできたデータをset値へ変換したら最初に説明いたしました集合データ処理によって共通するデータを抽出します。


df1_set = set(dfs1_list)
df2_set = set(dfs2_list)

matched_list = list((df1_set & df2_set))



これによって値上がり率上位とPER上位の両方の条件を満たす銘柄の証券番号を取り出すことができます。

最後に余計な改行コードが入ってしまっているのでそれを除去しながら所定のディレクトリへCSVデータとして出力するには以下のようなコードを使います。


titleL = matched_list
titleS = list()

for nStr in titleL:
aStr = nStr.replace('\n','')
titleS.append(aStr)

with open('yFcsv.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(titleS)



動画でこの動きを細かく説明しますのでぜひご覧ください。

ソースコード入手方法はYouTubeのコメント欄に記載します。

目次へ戻る

2020年03月22日