🚃

株価情報の分析事例1 (条件を満たすデータの抽出・加工)

2021/10/10に公開

はじめに

以下の記事で、pandas-datareaderを使って株価情報を取得し、簡単な可視化を行いました。
データを取得できる環境が整ったので、いくつか分析を試してみます。
今回は、「条件を満たすデータの抽出・加工」をテーマに簡単な事例を紹介します。

https://zenn.dev/ochamikan/articles/71162017b122bd

前提

上記記事の内容が理解できていることを説明の前提とします。

おさらい

上記記事で紹介したとおり、下記コードで特定の1銘柄[1]の株価情報が取得できるのでした。
なお、取得したい期間の開始・終了日を、それぞれstartおよびendで指定できます。省略すると「期間制限なし」となるようです。(本記事投稿時点ではend='2021-10-08'相当となります。)

# パッケージ
import pandas_datareader.data as web

# 株価情報の取得
df = web.DataReader("9020.T", data_source='yahoo', start='2010-01-01')

グラフ

高値・安値を算出

上記コードでは2010年から現在までの株価が取得され、dfに格納されています。
この期間における終値(Close)データに対し、下記コードで高値・安値を算出できます。

  • 高値: df["Close"].max() (実行結果: 12545.0)
  • 安値: df["Close"].min() (実行結果: 4170.0)

なんと、約10年間で8000円以上もの変動があったことが分かります。

また、下記コードで高値・安値となった日のデータのみを抽出できます。[2]

  • 高値: df[df["Close"] == df["Close"].max()]
  • 安値: df[df["Close"] == df["Close"].min()]

抽出結果は以下の通りで、日経平均株価が15年ぶりに2万円を突破した2015年に高値、東日本大震災が発生した2011年に安値を記録していることが分かります。[3]
高値・安値

前日比を算出

それでは、続伸・反落などの判定の元になる前日比を算出してみます。下記のようにpandas.DataFrame.diff()メソッドを使うと、行同士の差分を算出できます。[4]

# 前日比の算出
df["Close_Diff"] = df["Close"].diff()

上記コードを実行すると、dfClose_Diff列に前日比が追加されます。期間の開始日にあたるデータ(2010年1月4日)は、前日データが無いためNaN[5]となります。

前日比

値上がり・値下がり合計を算出

算出した前日比データを使って、約10年間の値上がり・値下がりの合計値を算出してみます。値上がり・値下がりは、前日比データ(Close_Diff)の正負で判定できます。

  • 値上がり: df["Close_Diff"][df["Close_Diff"] > 0].sum() (実行結果: 130933.38)
  • 値下がり: df["Close_Diff"][df["Close_Diff"] < 0].sum() (実行結果: -129545.38)

上記結果は、約10年間のうち株価が上がった日の値上がり幅の合計が約130933円、株価が下がった日の値下がり幅の合計が約129545円であることを示しています。その差1388円は、2010年1月4日(開始日)の終値5920円と、2021年10月8日(終了日)の終値7308円の差と等しくなるはずです。

ちなみに、高値を記録した2015年8月5日までのデータで算出すると、値上がり合計は約54453円、値下がり合計は47828で、その差は6625円となります。

まとめ

以上、「条件を満たすデータの抽出・加工」をテーマにした簡単な分析を試しました。
具体的には、取得した株価データを使って下記の分析事例を紹介しました。

  • 高値・安値を算出: 高値・安値となるレコードを抽出する。
  • 前日比を算出: 前日比を算出して株価情報データに追加する。
  • 値上がり・値下がり合計を算出: 前日比データを値上がり・値下がりに分けて合計する。
脚注
  1. ここではJR東日本の証券コード(9020.T)を指定しています。 ↩︎

  2. pandas.DataFrameは、df[{抽出条件}]の形式で、該当するデータ(行)を抽出できます。この場合の抽出条件は、「終値(Close)が期間内の最大値 or 最小値と一致すること」と捉えてください。 ↩︎

  3. 一般的に、意義のある分析をするためには、データの背景にある事象(経済状況や世界情勢など)の理解も重要です。 ↩︎

  4. デフォルトでは1行前との差分を算出します。diff(2)にすると2行前、diff(-3)とすると3行後との差分を算出できます。 ↩︎

  5. Not a Number (非数値)の略。数値であることが期待されるデータについて「未定義」か「算出不能」な値となる場合に使われる。 ↩︎

Discussion