pythonを始めるMacの開発環境
投稿日: 2024年6月14日
python -V
brew
Homebrewのインストール確認コマンド
brew コマンドの存在を確認: which brew
Homebrewのバージョンを確認: brew --version
Homebrewがインストールされていない場合:
$ which brew
(何も表示されない)
$ brew --version
zsh: command not found: brew
Pyenvのインストール確認コマンド
確認: pyenv -v
pyenv とは
pyenv は、複数のバージョンのPythonを管理するためのツールです。これにより、プロジェクトごとに異なるPythonバージョンを簡単に切り替えることができます。
pyenv のインストール
1. Homebrew を使って pyenv をインストール
まず、Homebrew がインストールされていることを確認してから、以下のコマンドで pyenv をインストールします。
brew install pyenv
または、すでにインストールされている場合は、アップグレードを試みます:
brew upgrade pyenv
インストールしただけなので設定します
echo $SHELL コマンドは、現在使用しているシェルのパスを表示するためのコマンドです。シェルは、コマンドラインインターフェースを提供するプログラムで、ユーザーがコマンドを入力してシステムと対話するためのツールです。
echo $SHELL
echo: 引数として与えられた文字列を標準出力に表示します。
$SHELL: 環境変数 SHELL の値を参照します。SHELL 環境変数は現在使用しているデフォルトのシェルのパスを示します
/bin/zsh
これは、現在のシェルが zsh であることを示しています。確認したら以下のコマンド4つを実行する
実行手順のまとめ
1 環境変数 PYENV_ROOT の設定を ~/.zshrc に追加:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
2 PATH に PYENV_ROOT/bin を追加:
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
3 pyenv の初期化コマンドを ~/.zshrc に追加:
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
4 ~/.zshrc ファイルを再読み込みして設定を反映:
source ~/.zshrc
まとめこれで、pyenv に関連する設定がすべて ~/.zshrc に追加され、現在のシェルセッションに反映されました。以降、新しいターミナルウィンドウを開くたびに、これらの設定が自動的に適用されます。
Pythonバージョンのインストール
Step3."Python"のインストール
Pythonバージョンのインストール: pyenv install 3.9.0
上記のコマンドを実行して、指定されたバージョンのPython(この場合は3.9.0)をインストールします。
インストールプロセスには、インターネット接続と一部の依存関係が必要です。
インストールが完了したらPythonバージョンを確認: pyenv versions
このコマンドは、インストールされているすべてのPythonバージョンのリストを表示します。
Pythonバージョンの切り替え: pyenv global 3.9.0
インストールされたPythonバージョンを使用するには、
pyenv global または pyenv local コマンドを使用してバージョンを設定します。 これにより、システム全体でPython 3.9.0がデフォルトのPythonバージョンとして設定されます、アスタリスクはついたバージョンを指定します。
または、: pyenv local 3.9.0
これにより、現在のディレクトリ(およびそのサブディレクトリ)内でPython 3.9.0が使用されます。
まとめpyenv install 3.9.0 コマンドを使用することで、pyenv を介してPython 3.9.0を簡単にインストールできます。
インストールが完了したら、pyenv の他のコマンドを使用してPythonバージョンを管理および切り替えることができます。
python3 -V
alias python='python3'
Pythonを使って株価データを取得
投稿日: 2024年10月9日
1 ターミナルで以下のコマンドを実行して、必要なPythonライブラリのインストールします。
pip install yfinance gspread oauth2client
2 Google Sheets APIのセットアップ
Google Cloud Console にアクセス の URL は以下になります: https://console.cloud.google.com/ プロジェクトを作成.- Google Sheets API と Google Drive API を有効にします。
- 認証情報の作成ページで、「サービスアカウント」を選び、必要な認証情報を作成します。
- 生成された「JSON形式の認証ファイル(credentials.json)」をダウンロードします。
- このファイルをPythonスクリプトを実行するディレクトリに
3 Desktopでファイルを作成して実行してみました
ダウンロードしました radiant-raceway-412503-eebc49e82344.jsonファイルです/Users/naomichimasumoto/Desktop/example.pyを作成
import pandas as pd
import yfinance as yf
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# スプレッドシートへの接続設定
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name
('/Users/naomichimasumoto/Desktop/radiant-raceway-412503-eebc49e82344.json', scope)
client = gspread.authorize(creds)
# 株価データの取得
ticker = "6501.T" # 日立製作所の証券コード
data = yf.download(ticker, start="2024-01-01", end="2024-10-08")
# 日付を文字列に変換
data.reset_index(inplace=True) # インデックスをリセットして日付を列に変換
data['Date'] = data['Date'].dt.strftime('%Y-%m-%d') # 日付を文字列に変換
# スプレッドシートの更新
sheet = client.open("kabu").sheet1 # スプレッドシートの名前を指定
# カラム名に日付を追加
sheet.update([['Date'] + data.columns[1:].tolist()] + data.values.tolist())
以上です
# mport pandas as pd
# import yfinance as yf
# import gspread
# from oauth2client.service_account import ServiceAccountCredentials
# スプレッドシートへの接続設定
# scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
# creds = ServiceAccountCredentials.from_json_keyfile_name('/Users/naomichimasumoto/
Desktop/radiant-raceway-412503-eebc49e82344.json', scope)
# client = gspread.authorize(creds)
# 株価データの取得
# ticker = "6501.T" # 日立製作所の証券コード
# data = yf.download(ticker, start="2024-01-01", end="2024-10-08")
# ticker = "AAPL" # 例としてAppleの株を取得
# data = yf.download(ticker, start="2020-01-01", end="2024-10-08")
# 日付を文字列に変換
# data.index = data.index.strftime('%Y-%m-%d')
# スプレッドシートの更新
# sheet = client.open("kabu").sheet1 # スプレッドシートの名前を指定
# sheet.update([data.columns.values.tolist()] + data.reset_index().values.tolist())
# 以下は、日立製作所の株価データの各項目の日本語訳です。最初の空白の数値は、日付を表しています。
# 英語 日本語
# Open 始値
# High 高値
# Low 安値
# Close 終値
# Adj Close 調整後終値
# Volume 出来高
# Date 日付(最初の空白の数値)
# それぞれの意味
# 始値 (Open): 取引が開始された時の株価。
# 高値 (High): その日の中で最も高い株価。
# 安値 (Low): その日の中で最も低い株価。
# 終値 (Close): 取引が終了した時の株価。
# 調整後終値 (Adj Close): 配当金や株式分割を考慮した、調整された終値。
# 出来高 (Volume): 取引された株の数量。
# これらのデータは、株式のパフォーマンスを評価するのに役立ちます。
2022MacBook-Pro ~ % python ~/Desktop/example.py
https://docs.google.com/spreadsheets/u/0/スプレッドシートを開く 今回は"kabu"という名です
UP 上に戻る
株価データの表示を自動化
以下は、Pythonを使ってYahoo Financeから株価データを取得し、それをHTML形式で出力するスクリプトの例です。これにより、日々の株価データを自動的にHTMLテーブルに反映できます。
/Users/naomichimasumoto/Desktop/example.py にコードを作成しました。kabu_data.html株価データの表示
スクリプト例
import pandas as pd
import yfinance as yf
# 株価データの取得
tickers = ["6501.T", "6758.T", "7203.T"] # 日立、ソニー、トヨタ
data = yf.download(tickers, start="2024-10-01", end="2024-10-10", group_by="ticker")
# 日付を文字列に変換
data = data.stack(level=0, future_stack=True).reset_index() # future_stack=Trueを追加して新しい実装に対応
data['Date'] = data['Date'].dt.strftime('%Y-%m-%d')
# ヘッダーの設定(必要なカラムのみ)
header = ['Date', 'Ticker', 'Adj Close', 'Close', 'High', 'Low', 'Open', 'Volume']
# HTMLテーブルに書き込むためのデータを準備
rows = data[['Date', 'Ticker', 'Adj Close', 'Close', 'High', 'Low', 'Open', 'Volume']].values.tolist()
# HTMLファイルに書き出す
html_content = f"""
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>株価データ</title>
<style>
table {{
width: 100%;
border-collapse: collapse;
}}
table, th, td {{
border: 1px solid black;
}}
th, td {{
padding: 8px;
text-align: center;
}}
th {{
background-color: #f2f2f2;
}}
</style>
</head>
<body>
<h1>株価データ</h1>
<table>
<thead>
<tr>
{''.join([f'<th>{col}</th>' for col in header])}
</tr>
</thead>
<tbody>
{''.join([f"<tr>{''.join([f'<td>{val}</td>' for val in row])}</tr>" for row in rows])}
</tbody>
</table>
</body>
</html>
"""
# ファイルに保存
with open("/Users/naomichimasumoto/Desktop/kabu_data.html", "w", encoding="utf-8") as file:
file.write(html_content)
print("株価データがHTMLファイルに出力されました。")
スクリプトの流れ
- 株価データの取得: < yfinance >ライブラリを使って、指定した日付範囲内の株価データを取得します。
- データの整形: < DataFrame >のインデックスをリセットし、日付を文字列に変換します。
- HTMLコンテンツの作成: 取得した株価データをHTMLのテーブル形式に変換し、ヘッダーと行を動的に作成します。
- HTMLファイルへの書き込み: 作成したHTMLコンテンツを< kabu_data.html >というファイルに保存します。
実行結果
2022MacBook-Pro ~ % python ~/Desktop/example.py
このスクリプトを実行すると、< kabu_data.html >というHTMLファイルが生成され、ブラウザで開くと自動的に日付ごとの株価データがテーブルとして表示されます。
ファイルを開くには、次のようにターミナルでopen
コマンドを使って簡単に開けます:
open ~/Desktop/kabu_data.html
または、ファイルを直接ダブルクリックしてブラウザで確認することもできます。
日立製作所の過去1年分の株価データが折れ線グラフで表示
日立製作所の1年分の株価データを反映するためには、< yfinance >のデータ取得部分で< period="1y" >と指定すれば、過去1年分のデータを取得できます。以下はその変更を反映したコードです。
Pythonコード(1年分の株価データを折れ線グラフで描画)
import yfinance as yf
import matplotlib.pyplot as plt
import base64
from io import BytesIO
# 株価データの取得(日立、1年分)
ticker = "6501.T"
data = yf.download(ticker, period="1y")
# 日付を文字列に変換
data.reset_index(inplace=True)
data['Date'] = data['Date'].dt.strftime('%Y-%m-%d')
# 株価データを折れ線グラフに描画
plt.figure(figsize=(12, 8)) # グラフのサイズを大きくする
plt.plot(data['Date'], data['Close'], marker='o', color='blue', linestyle='-')
plt.xlabel('Date')
plt.ylabel('Close Price (JPY)')
plt.title(f'{ticker} Stock Prices (1 year)')
# X軸の日付ラベルの数を調整(10個ごとにラベルを表示)
plt.xticks(range(0, len(data['Date']), max(1, len(data['Date']) // 10)), rotation=45)
plt.tight_layout()
# 画像を保存せずにバイナリデータとして保持
buf = BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
image_base64 = base64.b64encode(buf.read()).decode('utf-8')
# HTMLファイルにグラフ画像を埋め込む
html_content = f"""
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>日立製作所 株価データ (1年分)</title>
</head>
<body>
<h1>日立製作所 株価データ (1年分)</h1>
<img src="data:image/png;base64,{image_base64}" alt="株価グラフ">
</body>
</html>
"""
# ファイルに保存
with open("/Users/naomichimasumoto/Desktop/hitachi_stock_graph_1year.html", "w", encoding="utf-8") as file:
file.write(html_content)
print("株価データの1年分の折れ線グラフがHTMLファイルに出力されました。")
yf.download(ticker, period="1y")で1年分の株価データを取得。
HTMLファイル名をhitachi_stock_graph_1year.htmlに変更して、1年分のデータであることを区別。
グラフの下部が不鮮明になる場合、主な原因としては、グラフのサイズやフォント、X軸の日付ラベルの密度が高すぎて重なっていることが考えられます。この問題を改善するために、以下の点を修正します:
- X軸のラベル数を減らす:日付が多くなると、ラベルが重なってしまうので、ラベルの数を間引きます。
- グラフのサイズを調整:グラフのサイズを少し大きくして見やすくします。
- X軸のラベルの角度をさらに調整:ラベルの回転角度をもう少し傾けて、重なりを避けます。
改善点
- グラフのサイズ:< plt.figure(figsize=(12, 8)) >でグラフを大きくして、詳細が見やすくなりました。
- X軸のラベル数を調整:< plt.xticks(range(0, len(data['Date']), max(1, len(data['Date' >
1 株価の予測モデルを作成
~ % source ~/my_newenv/bin/activate
~ % python ~/Desktop/prediction.py
Pythonコード(株価データを折れ線グラフ描画・予測値を赤い点で表示)
import numpy as np # 実行コマンド ~ % python ~/Desktop/prediction.py
import pandas as pd
import yfinance as yf
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt
from matplotlib import font_manager
# 日本語フォントの設定
font_path = '/Users/naomichimasumoto/Library/Fonts/ipaexg.ttf' # フルパスを直接記述
font_manager.fontManager.addfont(font_path)
plt.rcParams['font.family'] = 'IPAexGothic'
# 1. 株価データの取得
ticker = 'GOGL' #
# data = yf.download(ticker, start="2023-10-01", end="2024-10-01")
data = yf.download(ticker, start="2018-10-01", end="2024-10-01")
data = data[['Close']] # 終値のみを使用
# 2. データの前処理 (スケーリング)
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
# データをシーケンスに分割する関数
def create_sequences(data, seq_length):
X, y = [], []
for i in range(len(data) - seq_length):
X.append(data[i:i + seq_length])
y.append(data[i + seq_length])
return np.array(X), np.array(y)
# 60日のシーケンスを使用
# seq_length = 60
seq_length = 120
X, y = create_sequences(scaled_data, seq_length)
# LSTMに入力するためにデータを整形
X = X.reshape(X.shape[0], X.shape[1], 1)
# 3. LSTMモデルの構築
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))
# モデルのコンパイル
model.compile(optimizer='adam', loss='mean_squared_error')
# EarlyStoppingの追加 (早期終了)
early_stopping = EarlyStopping(monitor='loss', patience=3, restore_best_weights=True)
# 4. モデルの訓練
model.fit(X, y, epochs=10, batch_size=32, callbacks=[early_stopping])
# 5. 予測の実行
test_data = data[-seq_length:].values # 最新の60日間のデータを使用
test_data = scaler.transform(test_data) # スケーリング
test_data = np.reshape(test_data, (1, test_data.shape[0], 1))
# 予測実行
predicted_price = model.predict(test_data)
predicted_price = scaler.inverse_transform(predicted_price)
# 予測値の表示
print(f"{ticker}の予測終値: {predicted_price[0][0]:.2f} 円")
# 6. 実際のデータと予測値のグラフ描画
plt.figure(figsize=(10, 6))
plt.plot(data.index, data['Close'], label='実際の終値', color='blue')
# 予測日の日時を設定
prediction_date = data.index[-1] + pd.Timedelta(days=1)
# 予測値をグラフにプロット
plt.axvline(x=data.index[-1], color='gray', linestyle='--', label='予測開始日') # 予測点の縦線を追加
plt.scatter(prediction_date, predicted_price, marker='o', color='red', label='予測値')
# タイトルやラベル
plt.xlabel('日付')
plt.ylabel('株価 (JPY)')
plt.title(f'{ticker} 株価予測 (1年間)')
plt.legend()
plt.grid()
plt.xticks(rotation=45) # 日付ラベルを回転
plt.tight_layout() # レイアウト調整
plt.show()
インポートしている各ライブラリやモジュールの働きと目的についての説明です。
1.numpy>(NumPy)
- 働き: 数値計算を効率的に行うためのライブラリです。特に多次元配列(NumPy配列)を操作するための機能が充実しています。
- 目的: 数値データの操作、数学的計算、配列の生成や変換を簡単に行うために使用されます。
2.pandas>
- 働き: データの操作と分析を行うためのライブラリです。特にデータフレーム(表形式のデータ構造)を使って、データの取り扱いを簡単にします。
- 目的: CSVファイルやExcelファイルからのデータ読み込み、データのクリーニング、加工、集計を行うために使用されます。
3.yfinance>
- 働き: Yahoo Financeから株価データを取得するためのライブラリです。
- 目的: 株価や市場の情報を簡単に取得し、データ分析や予測モデルの構築に役立てるために使用されます。
4.sklearn.preprocessing.MinMaxScaler>
- 働き: データのスケーリングを行うためのモジュールです。特に、最小値と最大値を基準にデータを0から1の範囲にスケーリングします。
- 目的: 特徴量を同じスケールに揃えることで、機械学習アルゴリズムの性能を向上させるために使用されます。
5.keras.ls.Sequential>
- 働き: Kerasのシーケンシャルモデルを作成するためのクラスです。層を一列に積み重ねたモデルを構築できます。
- 目的: 単純なニューラルネットワークを作成するために使用されます。
6.keras.layers.Dense>
- 働き: 全結合層(Dense層)を定義するためのクラスです。
- 目的: ニューラルネットワークの中で、入力と出力を結びつける層を追加するために使用されます。
7.keras.layers.LSTM>
- 働き: 長短期記憶(LSTM)層を定義するためのクラスです。時系列データの学習に特化したリカレントニューラルネットワークの一種です。
- 目的: 時間的な依存関係を持つデータ(例: 株価の時系列データ)を扱うために使用されます。
8.keras.layers.Dropout>
- 働き: ニューラルネットワークの過学習を防ぐために、訓練時にランダムにノードを無効にする層です。
- 目的: モデルの汎用性を高めるために、過学習を防ぐ目的で使用されます。
9.keras.callbacks.EarlyStopping>
- 働き: モデルの訓練を早期に停止するためのコールバックです。訓練中の評価メトリクスが改善しない場合に訓練を停止します。
- 目的: 過学習を防ぎ、効率的にモデルの訓練を行うために使用されます。
10.matplotlib.pyplo(Matplotlib)
- 働き: グラフやプロットを作成するためのライブラリです。
- 目的: データの可視化を行うために、データのトレンドやパターンを理解しやすくするために使用されます。
11.matplotlib.font_manager
- 働き: フォントの管理を行うためのモジュールです。特に、異なるフォントの設定や使用をサポートします。
- 目的: 日本語などの特定の言語に適したフォントを使用するために役立ちます。
これらのライブラリやモジュールは、特に株価の予測モデルを作成する際に重要な役割を果たします。特に、時系列データを扱うためのLSTMモデルの構築において、データの前処理や可視化が不可欠です。
ticker = 'GOGL' # prediction.py を開き左のように証券コード書き込む
例えば
Golden Ocean Group Limited (ティッカー: GOGL):
- 海運業界で活動する企業で、主にバルクキャリア船を運営しています。鉄鉱石や石炭、穀物などの貨物を輸送しています。
Alphabet Inc. (ティッカー: GOOGL または GOOG):
- Googleの親会社で、さまざまな技術サービスを提供しています。主に検索エンジン、広告サービス、クラウドコンピューティング、ハードウェアなどの分野で知られています。
免疫生物研究所 (Immune Bio, Inc.):ティッカーシンボル: 4570.T
日立製作所 (Hitachi, Ltd.):ティッカーシンボル: 6501.T (東京証券取引所)
日本製鉄 (Nippon Steel Corporation):ティッカーシンボル: 5401.T (東京証券取引所)
ソニーグループ (Sony Group Corporation):ティッカーシンボル: 6758.T (東京証券取引所)
西武ホールディングス (Seibu Holdings Inc.):ティッカーシンボル: 9024.T (東京証券取引所)
日立製作所 長期データ予想株価
株価の予測モデル

日立製作所 短期データ予想株価
2 株価の予測モデルを作成
仮想環境をアクティブにする: ~ % source ~/my_newenv/bin/activate
~ % python ~/Desktop/hi.py
Pythonコード(株価予測値を折れ線グラフ描画)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import yfinance as yf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
import matplotlib.font_manager as font_manager
# 日本語フォントの設定
font_path = '/Users/naomichimasumoto/Library/Fonts/ipaexg.ttf' # フルパスを直接記述
font_manager.fontManager.addfont(font_path)
plt.rcParams['font.family'] = 'IPAexGothic'
# 日立製作所の株価データを取得
ticker = '6501.T'
data = yf.download(ticker, start='2023-01-01', end='2024-10-10') # データ取得期間を設定
# Close価格の抽出
close_data = data['Close'].values
# データをスケーリング
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(close_data.reshape(-1, 1))
# トレーニングデータとテストデータの作成
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size]
test_data = scaled_data[train_size:]
# データセットの生成
def create_dataset(data, time_step=1):
X, Y = [], []
for i in range(len(data) - time_step - 1):
X.append(data[i:(i + time_step), 0])
Y.append(data[i + time_step, 0])
return np.array(X), np.array(Y)
time_step = 3 # データ数が少ないので3日間のデータを使用
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)
# データの形状を変換
if X_train.size > 0:
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
if X_test.size > 0:
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
# モデルの構築
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1)) # 出力層
# モデルのコンパイル
model.compile(optimizer='adam', loss='mean_squared_error')
# モデルのトレーニング
if X_train.size > 0 and y_train.size > 0:
model.fit(X_train, y_train, epochs=100, batch_size=32)
# テストデータでの予測
if X_test.size > 0:
predicted_stock_price = model.predict(X_test)
# スケールを元に戻す
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
# 結果のプロット
plt.figure(figsize=(12, 6)) # プロットのサイズを指定
plt.plot(close_data[train_size + time_step + 1:], label='実際の株価')
plt.plot(predicted_stock_price, label='予測した株価')
plt.title('日立製作所株価予測 (ティッカー: 6501.T)')
plt.xlabel('日数')
plt.ylabel('株価')
plt.legend()
plt.grid()
# 画像ファイルとして保存
plt.savefig('hitachi_stock_price_prediction.png') # 現在の作業ディレクトリに保存
plt.savefig('/Users/naomichimasumoto/Desktop/hitachi_stock_price_prediction.png') # デスクトップに保存
plt.show() # プロットを表示
else:
print("テストデータが不足しています。")
####仮想環境のアクティベート(切り替え)
# 仮想環境をアクティブにする:
# コードをコピーする # source ~/my_newenv/bin/activate
# ここで、~/my_newenvは仮想環境が作成されているディレクトリのパスです。sourceコマンドを使用して仮想環境をアクティブにします。
# 仮想環境がアクティブであることを確認: アクティベートすると、プロンプトの前に環境名(この場合は(my_newenv))が表示されるようになります。
# 仮想環境をデアクティベート(終了)する: 仮想環境を終了するには、以下のコマンドを使用します。
# コードをコピーする # deactivate
# 注意点
# 仮想環境をアクティブにしている間は、その環境にインストールされているパッケージやPythonのバージョンを使用します。
# 環境をデアクティベートすると、システムのPython環境に戻ります。
# import numpy as np
# import pandas as pd
# import yfinance as yf
# import tensorflow as tf
# from tensorflow.keras.models import Sequential
# from tensorflow.keras.layers import LSTM, Dense
# import matplotlib.pyplot as plt
# from sklearn.preprocessing import MinMaxScaler
# # 変数 timesteps と features の定義
# timesteps = 60 # 過去60日分の株価データを使用
# features = 1 # 1つの特徴量(株価の終値など)
# # 日立製作所の株価データを取得
# data = yf.download('6501.T', start='2010-01-01', end='2024-01-01')
# # 終値を使用
# stock_prices = data['Close'].values
# # データの前処理
# # データの正規化
# scaler = MinMaxScaler(feature_range=(0, 1))
# scaled_data = scaler.fit_transform(stock_prices.reshape(-1, 1))
# # 訓練データとテストデータを作成
# X_train = []
# y_train = []
# for i in range(timesteps, len(scaled_data)):
# X_train.append(scaled_data[i - timesteps:i, 0])
# y_train.append(scaled_data[i, 0])
# X_train, y_train = np.array(X_train), np.array(y_train)
# # LSTM用の形状に変形
# X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], features))
# # LSTMモデルの構築
# model = Sequential()
# model.add(LSTM(50, return_sequences=True, input_shape=(timesteps, features)))
# model.add(LSTM(50))
# model.add(Dense(1)) # 出力層
# model.compile(optimizer='adam', loss='mean_squared_error')
# # モデルの学習
# model.fit(X_train, y_train, epochs=50, batch_size=32)
# # テストデータの準備
# X_test = scaled_data[len(scaled_data) - timesteps:] # 最後のtimestepsの日を使う
# X_test = np.reshape(X_test, (1, X_test.shape[0], features))
# # 予測
# predicted_stock_price = model.predict(X_test)
# # 予測結果を逆正規化
# predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
# # 実際の株価データを用意
# real_stock_price = stock_prices[-1] # 最新の実際の株価
# # 結果をプロット
# plt.plot(real_stock_price, color='red', label='Real Stock Price')
# plt.plot(predicted_stock_price, color='blue', label='Predicted Stock Price')
# plt.title('Stock Price Prediction')
# plt.xlabel('Time')
# plt.ylabel('Stock Price')
# plt.legend()
# plt.show()
# print("スクリプトが正常に実行されました。")
# import numpy as np
# import pandas as pd
# import matplotlib.pyplot as plt
# from sklearn.preprocessing import MinMaxScaler
# from tensorflow.keras.models import Sequential
# from tensorflow.keras.layers import LSTM, Dense, Dropout
# # データセットの生成関数
# def create_dataset(data, time_step=1):
# X, Y = [], []
# for i in range(len(data) - time_step):
# X.append(data[i:(i + time_step), 0])
# Y.append(data[i + time_step, 0])
# return np.array(X), np.array(Y)
# # 仮のデータを作成しCSVファイルに保存
# data_dict = {
# 'Date': ['2024-10-01', '2024-10-02', '2024-10-03', '2024-10-04', '2024-10-05',
# '2024-10-06', '2024-10-07', '2024-10-08', '2024-10-09', '2024-10-10'],
# 'Close': [5000, 5050, 5100, 4950, 5050, 5150, 5200, 5300, 5250, 5400] # 株価のデータ
# }
# # DataFrameに変換して保存
# df = pd.DataFrame(data_dict)
# df.to_csv('stock_data.csv', index=False) # CSVファイルを保存
# # データをCSVファイルから読み込む
# data = pd.read_csv('stock_data.csv')
# data = data['Close'].values # 株価の列を指定
# # データをスケーリング
# scaler = MinMaxScaler(feature_range=(0, 1))
# scaled_data = scaler.fit_transform(data.reshape(-1, 1))
# # トレーニングデータとテストデータの作成
# train_size = int(len(scaled_data) * 0.8)
# train_data = scaled_data[:train_size]
# test_data = scaled_data[train_size:]
# time_step = 1 # データ数が少ないので1日分のデータを使用
# X_train, y_train = create_dataset(train_data, time_step)
# X_test, y_test = create_dataset(test_data, time_step)
# # X_trainとX_testの形状を確認
# print(f"X_trainの形状: {X_train.shape}")
# print(f"X_testの形状: {X_test.shape}")
# # データの形状を変換
# if X_train.size > 0:
# X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
# if X_test.size > 0:
# X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
# # モデルの構築
# model = Sequential()
# model.add(LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
# model.add(Dropout(0.2))
# model.add(LSTM(50, return_sequences=False))
# model.add(Dropout(0.2))
# model.add(Dense(1)) # 出力層
# # モデルのコンパイル
# model.compile(optimizer='adam', loss='mean_squared_error')
# # モデルのトレーニング
# if X_train.size > 0 and y_train.size > 0:
# model.fit(X_train, y_train, epochs=100, batch_size=32)
# # テストデータでの予測
# if X_test.size > 0:
# predicted_stock_price = model.predict(X_test)
# # スケールを元に戻す
# predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
# # 結果のプロット
# plt.figure(figsize=(12, 6)) # プロットのサイズを指定
# plt.plot(data[train_size + time_step:], label='実際の株価')
# plt.plot(predicted_stock_price, label='予測した株価')
# plt.title('株価予測')
# plt.xlabel('日数')
# plt.ylabel('株価')
# plt.legend()
# plt.grid()
# # 画像ファイルとして保存
# plt.savefig('stock_price_prediction.png') # 現在の作業ディレクトリに保存
# plt.savefig('/Users/naomichimasumoto/Desktop/stock_price_prediction.png') # デスクトップに保存
# plt.show() # プロットを表示
# else:
# print("テストデータが不足しています。")
#1. プロットを表示する
# コードの最後にある plt.show() により、プロットが表示されるはずですが、環境によっては自動的に表示されないことがあります。確認のために、以下のようにしてプロットを表示するコードを追加できます。
# python
# コードをコピーする
# # 結果のプロット
# plt.figure(figsize=(12, 6)) # プロットのサイズを指定
# plt.plot(data[train_size + time_step + 1:], label='実際の株価')
# plt.plot(predicted_stock_price, label='予測した株価')
# plt.title('株価予測')
# plt.xlabel('日数')
# plt.ylabel('株価')
# plt.legend()
# plt.grid()
# plt.show() # プロットを表示
# 2. プロットを画像ファイルとして保存する
# プロットを画像ファイルとして保存する場合は、plt.savefig() を使用できます。以下のコードを使用して、プロットを PNG 形式で保存できます。
# python
# コードをコピーする
# # 結果のプロット
# plt.figure(figsize=(12, 6)) # プロットのサイズを指定
# plt.plot(data[train_size + time_step + 1:], label='実際の株価')
# plt.plot(predicted_stock_price, label='予測した株価')
# plt.title('株価予測')
# plt.xlabel('日数')
# plt.ylabel('株価')
# plt.legend()
# plt.grid()
# plt.savefig('stock_price_prediction.png') # 画像ファイルとして保存
# plt.close() # プロットを閉じる
# このコードを hi.py に追加すると、実行後に stock_price_prediction.png というファイルが作成されます。ファイルが作成されているか確認してみてください。どちらの方法でも問題が解決しない場合は教えてください。