Pythonを使って40年間の日経平均株価の年間値幅データを取得してみた

まくまく
まくまく
日経平均株価が1年間でどれくらいの値幅(値動き)があるかを調べてみようと思います。

Pythonを用いて、1980年から2021年までの約40年間の日経平均株価の年間値幅データを取得してみました。

年間の値幅とは、1年間の高値と安値の差です。(今回は終値ベースで考えているので、日中の高値安値は無視しています。)

まずは結果から。

40年間の年間値幅


こちらが1980年から2021年までの約40年間の日経平均株価の年間値幅グラフです。

1980年代前半は株価自体がまだ低く、年間の値幅も数百円〜2,000円程度でした。80年代後半になり、株価高騰と共に値幅も大きくなっていきます。バブル崩壊の1990年には18,491円の年間値幅を記録しました。

2000年代の株価低迷時代には、年間値幅も4,000円を切る年が多くなっています。2008年のリーマンショックの時は7528円と暴落の影響を受けているのが分かります。

アベノミクスによる株価上昇の影響を受け、2013年からは年間値幅も4,000円を超えてきました。2020年のコロナショックでは、11,015円を記録。



2021年の年間値幅


2020年末には「来年(2021年)は、日本株が来る!!」みたいなことを各所で聞いていて、2021年2月には30年ぶりの3万円台を記録。このままいけば決算発表の6月くらいには3万2000円を目指すはず!!みたいな論調が多くて、その流れになるか??みたいに思っていましたけど、、、

結果的にはレンジ相場です。半導体セクターは活況なれど、市場を牽引してきたファーストリテイリングなどは2月から下落トレンド入り。

菅首相退陣により、株価は一気に急騰。高値更新したものの、買いは続かずに三角持ち合いで1年を終えました。

サンプルプログラム

以下、今回のサンプルプログラムです。処理の流れとしては、stooqで日経平均株価データを取得、終値の高値安値から一年間のレンジを算出。それをcsvファイルとして書き出し。最後はPlotlyでグラフ化します。

#ライブラリをインポート
from pandas_datareader.stooq import StooqDailyReader
from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
import plotly
import plotly.express as px

#空のリスト作成
year = []
year_range =[]

#for文で値幅データ取得
for i in range(1980,2022,1):
    #株価取得範囲を設定
    start = datetime(i, 1, 1)
    end = datetime(i, 12, 31)
    #銘柄コードを入力
    stock = '^NKX'
    #株価取得
    df = StooqDailyReader(stock, start=start, end=end)
    df_stock = df.read()['Close']
    #期間中の高値安値と値幅
    s_max = df_stock.max()
    s_min = df_stock.min()
    s_range = df_stock.max()-df_stock.min()
    s_range = f'{s_range:.02f}'
    #print(f'{s_range:.02f}')
    year.append(i)
    year_range.append(s_range)

#リストからデータフレーム作成
df_range = pd.DataFrame(list(zip(year,year_range)), columns = ['Year','Range(yen)'])
print(df_range)
#データフレームからcsvを作成
df_range.to_csv("N225_range.csv", encoding="UTF-8", index=False)

上のプログラムを実行すると、年別値幅データのcsvが出力されます。

csvの中身はこんな感じです。A列にYear、B列にその年の値幅が入力されています。

次はこのcsvデータを使用して、グラフ化を行います。

#csv読み込み
df_range2 = pd.read_csv('N225_range.csv', header=0, usecols=[0,1])

#棒グラフ
fig = px.bar(df_range2, x = 'Year' , y = 'Range(yen)' , title = 'N225 Range')

#グラフ設定
fig.update_layout(width=1000, height=500, margin=dict(l=30, r=30, b=30, t=50)) #グラフサイズ
fig.update_layout(yaxis=dict(range=[0, 20000])) #Y軸レンジ
fig.update_layout(yaxis=dict(dtick=2000)) #Y軸目盛幅
#fig.update_layout(font={"family":"Times New Roman"}) #フォント
fig.update_layout(font=dict(size=16), title=dict(font=dict(size=20))) #フォントサイズ

#グラフ表示
fig.show()

#html書き出し
plotly.offline.plot(fig,auto_open=False,filename="N225-range.html")

plotlyで棒グラフを作成することができました。

タイトルとURLをコピーしました