import yfinance as yf
import pandas as pd
import os
# データ取得のパラメータ設定
symbol = 'JPY=X' # USD/JPYのシンボル
interval = '1m' # 1分足
period = '5d' # 過去5日分
# データを取得
df = yf.download(tickers=symbol, interval=interval, period=period)
# データをCSVファイルに保存する前に、最後の数行を表示
print("取得したデータの最後の数行:")
print(df.tail())
# デスクトップのパスを取得
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# CSVファイルの保存場所を指定
file_path = os.path.join(desktop_path, 'usd_jpy_1min_5days.csv')
# データをCSVファイルに保存
df.to_csv(file_path)
print(f"データが{file_path}に保存されました。")
yfinanceから 1分足のデータを.csvファイルでダウンロードする。5日が上限の模様。
import pandas as pd
import matplotlib.pyplot as plt
import os
# デスクトップのパスを取得
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# CSVファイルを読み込む
file_path = os.path.join(desktop_path, 'usd_jpy_1min_5days.csv')
df = pd.read_csv(file_path)
# タイムスタンプをDatetime型に変換
df['Datetime'] = pd.to_datetime(df['Datetime'], utc=True)
# タイムゾーンをUTCからJSTに変換
df['Datetime'] = df['Datetime'].dt.tz_convert('Asia/Tokyo')
# 土日を除外
df = df[~df['Datetime'].dt.weekday.isin([5, 6])]
# 日付ごとにデータをグループ化
df['Date'] = df['Datetime'].dt.date
grouped = df.groupby('Date')
# グラフを作成
plt.figure(figsize=(10, 5))
for date, group in grouped:
# 各日付の7:00から19:00のデータをフィルタリング
df_filtered = group[(group['Datetime'].dt.time >= pd.to_datetime('07:00').time()) &
(group['Datetime'].dt.time <= pd.to_datetime('19:00').time())]
# 時間部分のみを秒数として取得
times = df_filtered['Datetime'].dt.hour * 3600 + df_filtered['Datetime'].dt.minute * 60 + df_filtered['Datetime'].dt.second
# 各日のグラフをプロット
plt.plot(times, df_filtered['Close'], label=str(date))
# X軸のラベル設定(7:00, 8:00, 9:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00, 19:00)
x_labels = ['07:00', '08:00', '09:00', '010:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00']
x_ticks = [7*3600, 8*3600, 9*3600, 10*3600, 11*3600, 12*3600, 13*3600, 14*3600, 15*3600, 16*3600, 17*3600, 18*3600, 19*3600]
plt.xticks(x_ticks, x_labels)
# Y軸の範囲を143-147に設定
plt.ylim(143, 147)
# 軸ラベルとタイトル
plt.xlabel('TIME')
plt.ylabel('PRICE (JPY/USD)')
plt.title('USD/JPY 1M')
# グリッドを表示
plt.grid(True)
# 凡例を表示
plt.legend()
# グラフを表示
plt.show()
同時刻のグラフの変化を描いてみる。上記は、日本時間のみのグラフ。ここまで確認済み。以下は未確認。複数のCSVファイルを統合して描く場合。後日、確認予定。
import pandas as pd
import matplotlib.pyplot as plt
import os
from glob import glob
# デスクトップのパスを取得
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# CSVファイルをすべて読み込む
csv_files = glob(os.path.join(desktop_path, '*.csv')) # デスクトップ上のすべてのCSVファイルを取得
df_list = [pd.read_csv(file) for file in csv_files] # 各CSVファイルをデータフレームとして読み込む
# データフレームを結合し、重複を削除
df = pd.concat(df_list).drop_duplicates()
# タイムスタンプをDatetime型に変換
df['Datetime'] = pd.to_datetime(df['Datetime'], utc=True)
# タイムゾーンをUTCからJSTに変換
df['Datetime'] = df['Datetime'].dt.tz_convert('Asia/Tokyo')
# 土日を除外
df = df[~df['Datetime'].dt.weekday.isin([5, 6])]
# 日付ごとにデータをグループ化
df['Date'] = df['Datetime'].dt.date
grouped = df.groupby('Date')
# グラフを作成
plt.figure(figsize=(10, 5))
for date, group in grouped:
# 各日付の7:00から19:00のデータをフィルタリング
df_filtered = group[(group['Datetime'].dt.time >= pd.to_datetime('07:00').time()) &
(group['Datetime'].dt.time <= pd.to_datetime('19:00').time())]
# 時間部分のみを秒数として取得
times = df_filtered['Datetime'].dt.hour * 3600 + df_filtered['Datetime'].dt.minute * 60 + df_filtered['Datetime'].dt.second
# 各日のグラフをプロット
plt.plot(times, df_filtered['Close'], label=str(date))
# X軸のラベル設定(7:00, 9:00, 11:00, 13:00, 15:00, 17:00, 19:00)
x_labels = ['07:00', '09:00', '11:00', '13:00', '15:00', '17:00', '19:00']
x_ticks = [7*3600, 9*3600, 11*3600, 13*3600, 15*3600, 17*3600, 19*3600]
plt.xticks(x_ticks, x_labels)
# Y軸の範囲を143-147に設定
plt.ylim(143, 147)
# 軸ラベルとタイトル
plt.xlabel('TIME')
plt.ylabel('PRICE (JPY/USD)')
plt.title('USD/JPY 1M')
# グリッドを表示
plt.grid(True)
# 凡例を表示
plt.legend()
# グラフを表示
plt.show()