1
3

Python3 株価データ取得

Last updated at Posted at 2024-05-27

概要

株価データを取得しグラフを作成し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)
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3