常聽人說五窮六絕七翻身,然而實踐是檢驗真理的唯一標準姊扔,順便熟悉一下pandas對于時間序列的處理
選用上證指數近十年數據 所需lib tushare
import pandas as pd
import tushare as ts
上證指數十年觀之月份漲跌
sh = ts.get_k_data(code='sh', start='2007-01-01', ktype='M')
sh.head()
image.png
ktype='M',直接選取月份的數據惠奸。
sh.dtypes
date object
open float64
close float64
high float64
low float64
volume float64
code object
dtype: object
date 現在是objec類型(可以簡單的理解為字符串),我們需要先將其轉換成pandas時間相關的類型
sh.date = pd.to_datetime(sh.date)
sh.dtypes
date datetime64[ns]
open float64
close float64
high float64
low float64
volume float64
code object
dtype: object
當date是datetime類型之后,我們便可以使用.dt 方法來自由轉化時間顯示的方式了恰梢。為了更加直觀佛南,我們將date轉化為月份。
sh.date = sh.date.dt.month
sh.head()
image.png
接下來統計大盤月線收陽(close > open)的情況
up = sh[sh.close > sh.open].date.value_counts()
print up
7 8
2 8
10 7
9 7
11 6
8 6
3 6
12 5
6 5
5 5
4 5
1 5
Name: date, dtype: int64
sh[sh.close > sh.open] - 刪選出所有符合條件的列
.date - 取出符合條件的列的月份
.value_counts - 計算各個月份出現的次數
從結果上嵌言,似乎真的有點五窮六絕七翻身...接下來轉化成概率并且排序一下
per = up/sh.date.value_counts()
per.sort_values()
1 0.454545
4 0.454545
5 0.454545
6 0.454545
12 0.500000
3 0.545455
8 0.545455
11 0.600000
9 0.636364
10 0.700000
2 0.727273
7 0.727273
Name: date, dtype: float64
% matplotlib inline
per.plot(kind='bar')
image.png
不多說了嗅回。十一月開始減倉,來年一月份再加倉呀页,繼續(xù)看好九月妈拌、十月這收獲的季節(jié)拥坛。
上證指數十年觀之周幾買入
weekday = ts.get_k_data(code='sh', start='2007-01-01', ktype='D')
weekday.head()
image.png
weekday.date = pd.to_datetime(weekday.date).dt.weekday_name
weekday.head()
image.png
per = weekday[weekday.close > weekday.open].date.value_counts()/weekday.date.value_counts()
per.plot(kind='bar')
image.png
周一最佳蓬蝶,周四最慘尘分,當然,差別沒月份那么明顯丸氛,而且這是日內漲跌培愁,漲了也有可能是假陽線。
放張pandas文檔截圖吧
image.png