株価情報の分析事例1 (条件を満たすデータの抽出・加工)
はじめに
以下の記事で、pandas-datareader
を使って株価情報を取得し、簡単な可視化を行いました。
データを取得できる環境が整ったので、いくつか分析を試してみます。
今回は、「条件を満たすデータの抽出・加工」をテーマに簡単な事例を紹介します。
前提
上記記事の内容が理解できていることを説明の前提とします。
おさらい
上記記事で紹介したとおり、下記コードで特定の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()
上記コードを実行すると、df
にClose_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円となります。
まとめ
以上、「条件を満たすデータの抽出・加工」をテーマにした簡単な分析を試しました。
具体的には、取得した株価データを使って下記の分析事例を紹介しました。
- 高値・安値を算出: 高値・安値となるレコードを抽出する。
- 前日比を算出: 前日比を算出して株価情報データに追加する。
- 値上がり・値下がり合計を算出: 前日比データを値上がり・値下がりに分けて合計する。
-
ここではJR東日本の証券コード(9020.T)を指定しています。 ↩︎
-
pandas.DataFrame
は、df[{抽出条件}]
の形式で、該当するデータ(行)を抽出できます。この場合の抽出条件は、「終値(Close
)が期間内の最大値 or 最小値と一致すること」と捉えてください。 ↩︎ -
一般的に、意義のある分析をするためには、データの背景にある事象(経済状況や世界情勢など)の理解も重要です。 ↩︎
-
デフォルトでは1行前との差分を算出します。
diff(2)
にすると2行前、diff(-3)
とすると3行後との差分を算出できます。 ↩︎ -
Not a Number (非数値)の略。数値であることが期待されるデータについて「未定義」か「算出不能」な値となる場合に使われる。 ↩︎
Discussion