サムネがコーヒーの記事は書きかけです。

一定期間の株価を年ごとに比較するスクリプト

import pandas as pd 
import matplotlib.pyplot 
import datetime 
import yfinance as yf
import matplotlib.pyplot as plt 

class Point:
    def __init__(self,year,month,day,data) -> None:
        self.year:int = year 
        self.month:int = month
        self.day:int = day
        self.data:float = data
    def __repr__(self) -> str:
        return f"{self.year}-{self.month}-{self.day}-{self.data}"

def main():
    ################################################################
    #設定項目
    ticker = "1820.T"
    dataframes = []
    start_year = 2015
    end_year = 2022
    start_month, start_date = 8, 31 
    end_month, end_date = 10, 7
    anker_month, anker_date = "09", "28"
    ##################################################################
    for year in range(start_year,end_year+1):
        st = datetime.date(year,start_month, start_date)
        ed = datetime.date(year,end_month, end_date)
        
        df = yf.download(ticker,start=st,end=ed,progress=False)

        df["Year"] = year
        dataframes.append(df)
    df_concat = pd.concat(dataframes)
    df_concat.to_excel("result.xlsx")
    df_concat.to_csv("result.csv")
    with open("result.csv",mode="r") as fp:
        lines = [i.split(",") for i in fp.readlines()]
    data = {i[0]:i[5] for i in lines[1:]}
    print(data)
    points = [Point(i.split("-")[0],i.split("-")[1],i.split("-")[2],data[i]) for i in data.keys()]

    start_year, end_year = points[0].year, points[-1].year
    print(start_year, end_year)
    data_by_year = []
    for year in range(int(start_year), int(end_year)+1):
        data_by_year.append([i for i in points if i.year == str(year)])

    print(data_by_year)

    fig = plt.figure()

    for i in [j for j in data_by_year]:
        plt.plot([k for k in range(len(i))],[float(i.data) for i in i],label = i[0].year)
        for n,data in enumerate([i for i in i]):
            if data.day == anker_date and data.month == anker_month:
                plt.scatter(n,float(data.data),s = 30,color = "red")
    plt.legend()
    plt.grid()
    fig.savefig("result.png",dpi = 500)
        
main()

実行結果

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です