Python3 株価データ取得

### 概要
```
株価データを取得しグラフを作成し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)
```