華為 MateStation X 一體機皓月銀今晚 24 點開售:搭載 R7-5800H 處理器,11999 元
資料視覺化工具包
pip install matplotlib
import matplotlib.pyplot as plt
繪圖:plt.plot()
顯示:plt.show()
plot函式
繪製折線圖
-
marker
-
線型(-,-.,--,...)
-
點型(v,^,s,*,H,+,x,D,o,...)
-
-
color:顏色(b,g,r,y,k,w,....),k是black
-
label:線的標註
-
o:k,說明是黑點
繪製多條曲線,執行多個plot()即可
影象標註
-
plt.title():標題
-
plt.xlabel():x軸標籤
-
plt.ylabel():y軸標籤
-
plt.xlim(min,max):x軸範圍
-
plt.ylim(min,max):y軸範圍
-
plt.xticks([]):x軸的刻度
-
plt.xticks(np.arange(0,10,2),['a','b','c','d','e'])
-
-
plt.yticks([]):y軸的刻度
-
plt.legend():顯示線的標籤
-
pandas包對plot的支援
-
df = pd.read_csv('file_name.csv',parse_dates=['date',index_col='date'])['open','close','high','low']
-
df.plot()
-
plt.show()
-
畫布與子圖
-
畫布:fig = plt.figure()
-
子圖:ax1 = fig.add_subplot(2,2,1)
-
將畫布分成兩行兩列,圖佔第一個位置
-
-
調節子圖間距:suplots_adjust(left,bottom,right,top,wspace,hspace)
圖型別
函式 | 說明 |
---|---|
plt.plot(x,y,fmt,...) | 座標圖 |
plt.boxplot(data,notch,position) | 箱型圖 |
plt.bar(left,right,width,bottom) | 條形圖 |
plt.barh(width,bottom,left,height) |
橫向條形圖 |
plt.polar(theta,r) | 極座標圖 |
plt.pie(data,explode) | 餅圖 |
plt.psd(x,NFFT=256,pad_to,Fs) | 功率譜密度圖 |
plt.specgram(x,NFFT=256,pad_to,F) | 譜圖 |
plt.cohere(xy,NFFT=256,Fs) | X-Y相關性函式 |
plt.scatter(x,y) | 散點圖 |
plt.step(x,y,where) | 步階圖 |
plt.hist(x,bins,normed) | 直方圖 |
繪製k線圖
-
matplotlib.finanace子包中有許多繪製金融相關圖的函式介面
-
繪製k線圖:matplotlib.finanace.candlestick_ochl函式
1 import matplotlib.finanace as fin 2 from matplotlib.dates import date2num 3 4 df['time'] = date2num(df.index.to_pydatetime('date')) 5 df = df.iloc[:100,:] 6 fig = plt.figure() 7 ax = fig.add_subplot(1,1,1) 8 # 對應ochl 9 arr =df['time','open','close','high','low'].values 10 fin.candlestick_ochl(ax,arr) 11 fig.show()
Tushare
免費、開源的python財經資料介面包
安裝
pip install Tushare
依賴pandas,lxml
使用
股票資料分析
1 import numpy as np 2 import pandas as pd 3 import matplotlib.plot as plt 4 import tushare as ts 5 6 df = ts.get_k_data('600660',start='2010') # 查詢福耀玻璃 7 df.to_csv('福耀玻璃.csv') 8 df = pd.read_csv('福耀玻璃.csv',index_col='date',parse_dates=['date'])[['open','close','high','low']] 9 10 # 輸出收盤比開盤上漲3%以上的日期 11 df[(df['close']-df['open'])/df['open']] >= 0.03] 12 13 # 輸出所有開盤比前日收盤跌幅超過2%的日期 14 (df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02 15 16 # 從2019年1月1日開始到2021年,每月第一個交易日買入1手股票,每年最後一個交易日賣出所有股票,收益如何? 17 price_last = df['open'][-1] 18 df = df['2019-01':'2021-12'] # 去除首尾不用的資料 19 df_monthly = df.resample("M").first() 20 df_yearly = df.resample("A").last() 21 cost_money = 0 22 hold = 0 23 for year in range(2019,2022): 24 cost_money += df_monthly[str(year)]['open'].sum()*100 25 hold += len(df_monthly[str(year)])*100 26 if year != 2022: 27 cost_money -= df_yearly[str(year)]['open'][0]*hold 28 hold = 0 29 30 cost_money -= hold * price_last 31 printf(-cost)
雙均線分析
日均線指標:5天和10天短線操作的參照指標
季均線指標:30天和60天中期操作的參照指標
年均線指標:120天和240天長期操作的參照指標
金叉:短期均線上穿長期均線,買入訊號
死叉:短期均線下穿長期均線,賣出訊號
1 import numpy as np 2 import pandas as pd 3 import matplotlib.plot as plt 4 import tushare as ts 5 ''' 6 看5日均線和30日均線 7 假如從2019年1月1日開始,初始資金為100000元,金叉儘量買入,死叉全部賣出,則到今天位置,收益率如何? 8 ''' 9 df = ts.get_k_data('600660',start='2019') # 查詢福耀玻璃 10 df.to_csv('福耀玻璃.csv') 11 df = pd.read_csv('福耀玻璃.csv',index_col='date',parse_dates=['date'])[['open','close','high','low']] 12 13 # 求5日均線和30日均線 14 df['ma5']=df['open'].rolling(5).mean() 15 df['ma30'] = df['open'].rolling(30).mean() 16 df = df.dropna() # 去有掉空資料的行 17 18 # 畫圖 19 df[['close','ma5','ma30']].plot() 20 plt.show() 21 22 # 計算金叉日期和死叉日期 23 sr1 = df['ma5'] < df['ma30'] 24 sr2 = df['ma5'] >= df['ma30'] 25 # shift(1)向後移一位 26 #sr1: TTTTTFFFFFTTTTT 27 #sr2.shift(1): FFFFFTTTTTFFFFF 28 death_cross = df[sr1 & sr2.shift(1)].index 29 gloden_cross = df[~(sr1 | sr2.shift(1))].index 30 31 # 假設從2019年1月1日開始,初始資金為100000元,金叉儘量買入,死叉全部賣出,則到今天為止,求收益率? 32 sr1 = pd.Series(1,index=golden_cross) 33 sr2 = pd.Series(0,index=death_cross) 34 sr = sr1.append(sr2).sort_index() 35 money = 100000 36 hold = 0 37 38 for i in range(0,len(sr)): 39 p = df['open'][sr.index[i]] 40 if ar.iloc[i] == 1: 41 # 金叉買進 42 buy = (money // (100 * p)) 43 hold += buy*100 44 money -= buy-100*p 45 else: 46 # 死叉賣出 47 money += hold * p 48 hold = 0 49 50 p = df['open'][-1] 51 now_money = hold * p + money 52 intrest = now_money - first_money