今天來把最後分析完成,
matplotlib
和folium
兩種工具:import joblib
model = joblib.load("trainModel_0823_ver3.joblib")
predictions = model.predict(combined_data_test)
如果工作時間重設了,或是電腦重開了,就需要上面這步驟,讀取儲存的模型
(這就是為什麼要把辛苦訓練的模型存起來..不然每次都要等訓練多累)
(訓練模型前的變數,其實都需要再跑一次,尤其是那個 combined_data_test
)
lat_lng_New.xlsx
,並篩選出預測買超前10、賣超前10名的這些券商的經緯度。import pandas as pd
import numpy as np
import folium
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
讀下面這個檔案,是為了抓這些券商的地址經緯度
lat_lng_df = pd.read_excel('E:/時空資料分析/關鍵分點籌碼分析_實測/lat_lng_New.xlsx')
接續把昨天的模型預測結果拿來畫圖:
# 讀取預測結果
results = pd.DataFrame({
'索引': idx_test,
'券商代碼': df.index[idx_test],
'預測值': predictions.flatten(),
'實際值': y_test
})
# 列出排序過後,預測買超前10名,和賣超前10的券商分點
top_10_max = results.nlargest(10, '預測值')
top_10_min = results.nsmallest(10, '預測值')
# 在lat_lng_New.xlsx找出這前20名券商分點
top_10_brokers = pd.concat([top_10_max, top_10_min])
selected_brokers = lat_lng_df[lat_lng_df['券商代碼'].isin(top_10_brokers['券商代碼'])]
# 地圖初始化,設定初始位置和縮放等級
taiwan_map = folium.Map(location=[23.5, 121], zoom_start=7)
# 把普通券商分點的位置標記到到地圖上
for index, row in lat_lng_df.iterrows():
folium.Marker(
location=[row['lat'], row['lng']],
popup=f"券商代碼: {row['券商代碼']}",
icon=folium.Icon(color='blue', icon='info-sign')
).add_to(taiwan_map)
# 用兩種不同顏色格外標記,把這買、賣超前10名的券商分點也標記到地圖上
# 買超為red,賣超為green
for index, row in selected_brokers.iterrows():
color = 'red' if row['券商代碼'] in top_10_max['券商代碼'].values else 'green'
folium.Marker(
location=[row['lat'], row['lng']],
popup=f"券商代碼: {row['券商代碼']}",
icon=folium.Icon(color=color, icon='info-sign')
).add_to(taiwan_map)
# 存成html互動式網頁
taiwan_map.save('taiwan_brokers_MinMax10map.html')
點開存好的網頁,打開就會看到這樣有格外標記的地圖(如下圖)
# 建立靜態圖像
plt.figure(figsize=(10, 10))
# 設置字體
zhfont = fm.FontProperties(fname=r'C:\Windows\Fonts\kaiu.ttf')
plt.rcParams['font.family'] = zhfont.get_name()
# 所有券商分點位置的散佈圖
plt.scatter(lat_lng_df['lng'], lat_lng_df['lat'], c='blue', marker='o', label='其他券商位置')
# 買、賣超前10名的券商分點位置,一樣紅、綠色分別標記
plt.scatter(selected_brokers['lng'], selected_brokers['lat'],
c=np.where(selected_brokers['券商代碼'].isin(top_10_max['券商代碼']), 'red', 'green'),
marker='o', label='前10大和前10小券商位置')
# 把這買、賣超前10名分點的券商代碼標註出來台
for i, txt in enumerate(selected_brokers['券商代碼']):
plt.annotate(txt, (selected_brokers['lng'].iloc[i], selected_brokers['lat'].iloc[i]), textcoords="offset points", xytext=(0, 10), ha='center')
# 標題和軸的名稱
plt.title('券商位置分布', fontproperties=zhfont)
plt.xlabel('經度 (lng)', fontproperties=zhfont)
plt.ylabel('緯度 (lat)', fontproperties=zhfont)
# 顯示圖例(在左下角)
plt.legend(loc='lower left', frameon=True)
plt.show()
# 儲存圖像
plt.savefig('broker_locations.png')
地緣券商
了!所羅門
公司的地址在台中市西屯區
,把地圖放大一點觀察(如下圖)看來模型有預測出來公司周邊是有一些券商似乎特別活躍,在進行買入和賣出的操作,
但其他的分點沒被預測出來。
--
接著看看預測的券商分點集中的地方,
像是 高雄
(如下圖)
還有 台北市信義區
(如下圖)
基本上再用前面提到的程式碼,依照自己的需求和想法,去追蹤這些券商他們這段時間的買賣超狀況,
就可以當作自己的投資建議,但這個模型現在這樣應該超不準確@@
明天來說明隔日沖還有對這個題目做一個結尾吧!
每日記錄:
下午把課上完了(癱,逼著拖延症不輕的自己把文章寫完!
甚麼是黑天鵝? 戰爭就是黑天鵝,原本看起來經濟一片榮景,但突然來個戰爭,又開始有點怕了。
但是,戰爭影響股市還有關乎"可以反應的時間"和"預期",
像是禮拜日戰爭、禮拜一開盤vs.禮拜一戰爭、禮拜二開盤,兩種時間的股市的走勢劇情是不一樣的。
猜猜禮拜一的劇情,開高走低(?,很多人和外資應該會高檔出貨。
但是很多人在賭NVIDIA的財報,且看且走。