概要
株価データを取得しグラフを作成しExcelファイルに出力する。
詳細
1
必要なライブラリをインポート。データのダウンロード(yfinance)、データの操作とグラフの作成(matplotlib.pyplot)、Excelファイルの作成(openpyxl)が含まれます。
2
yfinanceを使用して、指定した銘柄コード(この場合はトヨタの"7203.T")の過去6ヶ月間の株価データをダウンロードします。
3
ダウンロードしたデータをコンソールに表示します。
4
matplotlib.pyplotを使用して、ダウンロードしたデータから終値の折れ線グラフを作成し、画像ファイル(graph.png)として保存します。
5
openpyxlを使用して新しいExcelワークブックを作成します。
6
ダウンロードしたデータをExcelの"Data"シートに書き出します。
7
作成したグラフの画像を新しい"Graph"シートに追加します。
8
作成したExcelワークブックをtoyota_stock_data.xlsxという名前のファイルとして保存します。
モジュールインストール
pip install openpyxl
pip install yfinance
コード
import os
import yfinance as yf
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils.dataframe import dataframe_to_rows
ticker = "7203.T"
data = yf.download(ticker, period="6mo", interval="1d")
# データを表示
print(data)
# 折れ線グラフを作成し、画像として保存
plt.figure(figsize=(10, 6))
data['Close'].plot()
plt.title('Toyota Stock Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.savefig('graph.png')
plt.close()
# 新しいExcelワークブックを作成
wb = Workbook()
# データフレームをExcelシートに書き出す
ws1 = wb.active
ws1.title = "Data"
for r in dataframe_to_rows(data, index=True, header=True):
ws1.append(r)
# グラフ画像を新しいシートに追加
ws2 = wb.create_sheet(title="Graph")
img = Image('graph.png')
ws2.add_image(img, 'A1')
# Excelファイルに保存
current_dir = os.path.dirname(os.path.abspath(__file__))
wb.save(os.path.join(current_dir, 'toyota_stock_data.xlsx'))
サンプルコード1
import os
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils.dataframe import dataframe_to_rows
# データ取得範囲
start_date = '2024-05-21'
end_date = '2024-05-28'
data = yf.download('0000.T', start=start_date, end=end_date)
# データを表示
print(data)
# date_list を作成
date_list = pd.date_range(start=start_date, end=end_date, freq='30D').tolist() + [pd.to_datetime('2024-05-28')]
# 折れ線グラフを作成し、画像として保存
plt.figure(figsize=(10,6))
data['Close'].plot()
plt.title('ABIST Stock Data')
plt.xlabel('Date')
plt.ylabel('Price')
plt.xticks(date_list, rotation=45)
plt.ylim(2900, 3700)
plt.savefig('graph.png')
plt.close()
# 新しいExcelワークブックを作成
wb = Workbook()
# データフレームをExcelシートに書き出す
ws1 = wb.active
ws1.title = "Data"
for r in dataframe_to_rows(data, index=True, header=True):
ws1.append(r)
# グラフ画像を新しいシートに追加
ws2 = wb.create_sheet(title="Graph")
img = Image('graph.png')
ws2.add_image(img, 'A1')
# Excelファイルに保存
current_dir = os.path.dirname(os.path.abspath(__file__))
wb.save(os.path.join(current_dir, 'ABIST_stock2_data.xlsx'))
サンプルコード2
import os
import yfinance as yf
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils.dataframe import dataframe_to_rows
ticker1 = "0000.T"
ticker2 ="^N225"
data1 = yf.download(ticker1, period="5y", interval="1d")
data2 = yf.download(ticker2, period="5y", interval="1d")
# データを表示
print(data1)
print(data2)
# 折れ線グラフを作成し、画像として保存
plt.figure(figsize=(8, 4))
data1['Close'].plot(label=ticker1)
plt.title(' Abist Stock Price')
plt.xlabel('year')
plt.ylabel('Price')
plt.savefig('graph1.png')
plt.close()
# 折れ線グラフを作成し、画像として保存
plt.figure(figsize=(8, 4))
data2['Close'].plot(label=ticker2)
plt.title(' Nikkei Price Avarege')
plt.xlabel('year')
plt.ylabel('Price')
plt.savefig('graph2.png')
plt.close()
# 新しいExcelワークブックを作成
wb = Workbook()
# データフレームをExcelシートに書き出す
ws1 = wb.active
ws1.title = "Data1"
for r in dataframe_to_rows(data1, index=True, header=True):
ws1.append(r)
# グラフ画像を新しいシートに追加
ws2 = wb.create_sheet(title="Graphs")
img = Image('graph1.png')
ws2.add_image(img, 'A1')
# 2枚目のグラフ画像を同じシートに追加し、適切な位置に配置
img2 = Image('graph2.png')
ws2.add_image(img2, 'N1')
# Excelファイルに保存
current_dir = os.path.dirname(os.path.abspath(__file__))
wb.save(os.path.join(current_dir, 'abist_stock_data.xlsx'))
サンプルコード3
import pandas as pd
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.drawing.image import Image
stock_code_dr = '0000.JP'
first='2023-09-01'
last = dt.date.today()
df = web.DataReader(stock_code_dr, data_source='stooq', start=first,end=last)
print(df)
excel_file_path = 'C:/Users/user1/Desktop/abist_stock_data.xlsx'
with pd.ExcelWriter(excel_file_path, engine='openpyxl') as writer:
df.to_excel(writer, index=True, sheet_name='Data')
# グラフを作成
fig, ax1 = plt.subplots(figsize=(10, 6))
ax1.plot(df.index, df['Close'], color='blue', marker='o', linestyle='-', label='Close')
ax1.set_xlabel('Date')
ax1.set_ylabel('Close Price', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')
ax2 = ax1.twinx()
ax2.bar(df.index, df['Volume'], color='red', alpha=0.3, label='Volume')
ax2.set_ylabel('Volume', color='red')
ax2.tick_params(axis='y', labelcolor='red')
plt.title('Abist Close Price and Volume')
fig.legend(loc='upper left')
plt.grid(True)
# グラフを画像ファイルとして保存
graph_image_path = 'abist_graph.png'
plt.savefig(graph_image_path)
# 画像をExcelファイルに挿入
img = Image(graph_image_path)
ws = writer.sheets['Data']
ws.add_image(img, 'H1')
# メッセージを表示
print(f"Excel file with graph has been saved to {excel_file_path}")
# 画像ファイルを削除
import os
os.remove(graph_image_path)