Python 주가 그래프 제작

이전 섹션:


제조 공장의 영업을 하면서 평소의'매일 주요 1000 제품의 주문 동향을 파악하고 싶다'는 생각으로 쫓기는 일이 많다.여러 가지 시도를 통해 접선도에서의 가시화를 가장 효과적으로 모니터링할 수 있을 것 같아서Python에서 도표 제작을 진행하였다.
*본 투고에서는 주문 데이터 대신 주가를 사용한다.
(회사 내부의 안전한 관계로 Python을 가져올 수 없기 때문에 실제 업무에서 해결할 수 없음)

구성:


주가로 Python 그래프 만들기
다음 순서
파이썬으로 주가 자동 취득
데이터 성형
/데이터 요약 및 그리기
#必要ライブラリーのImport
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
import numpy as np
import matplotlib.dates as mdate
#銘柄ファイルを先にエクセルで作成しておきPandasで読み込み(銘柄コード一覧はネットで拾ってくる)
df=pd.read_excel("/Users/銘柄.xlsx")
l=df["コード"]
#yahoo_finance_apiで株価を自動取得する為、銘柄コードの末尾に「.T」を付与する処理
j=list(l)
q=list(map(lambda x: str(x),j))
c = list(map(lambda x: x+".T", q))
#先ずは例として1銘柄2年分自動取得を行う。(今回はOpenのみ使用)
my_share = share.Share('1305.T')
symbol_data = None

try:
    symbol_data= my_share.get_historical(
        share.PERIOD_TYPE_YEAR, 2,
        share.FREQUENCY_TYPE_DAY,1)
except YahooFinanceError as e:
    print(e.message)
    sys.exit(1)

df = pd.DataFrame(symbol_data)
df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")
g=df[["datetime","open"]]
g.rename(columns={'open': '1305.T'}, inplace=True)
#残りはfor loopで回し、上で作成した株価一覧に結合していく
for z in c:
    my_share = share.Share(z)
    symbol_data = None

    try:
        symbol_data = my_share.get_historical(
            share.PERIOD_TYPE_YEAR, 2,
            share.FREQUENCY_TYPE_DAY,1)
    except YahooFinanceError as e:
        print(e.message)
        sys.exit(1)

    df = pd.DataFrame(symbol_data)
    df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")
    d=df[["datetime","open"]]
    d.rename(columns={'open': z}, inplace=True)
    g=pd.merge(g, d, on='datetime',how='left')
#datetimeをインデックス化。また1305.Tの重複を削除
g.set_index('datetime', inplace=True)
print(g.columns[[0,1,2]])
g.rename(columns={'1305.T_y': '1305.T'}, inplace=True)
g.drop(g.columns[[0]], axis=1,inplace=True)
#複合グラフの処理、見やすさを加味し12x12とした
%matplotlib tk
fig, axes = plt.subplots(12,12,sharex=True,sharey=False, figsize = (19,10))

for ax, zz in zip(axes.ravel(),c):
    dt = g[zz]
    ax.plot(dt,label=zz)
    ax.grid(True)
    ax.legend(fontsize=6)
    ax.set_xticklabels(g.index,rotation=90,fontsize=8)
xfmt = mdates.DateFormatter("%y/%m/%d")
ax.xaxis.set_major_formatter(xfmt)

ax.tick_params(labelsize=8)
plt.tight_layout()
plt.show()

결과:


아래의 데이터를 주문 동향으로 바꾸면 증설 판단에 도움이 된다👏

좋은 웹페이지 즐겨찾기