python量化交易之路code测试四(python3通过测试)

# pandas

import numpy as np
import pandas as pd
stock_day_change=np.load('/stock_day_change.npy')
stock_day_change.shape                 
pd.DataFrame(stock_day_change).head()  #等同于.head(5) 或 [:5]
stock_symbols=['stock'+ str(x) for x in range(stock_day_change.shape[0])]
days=pd.date_range('2019-1-1',periods=stock_day_change.shape[1],freq='1d')
df=pd.DataFrame(stock_day_change,index=stock_symbols,columns=days)
df.head(2)
df=df.T   #转置
df.head()
df_20=df.resample('21D').mean() #重新采样 以21天统计,平均值
df_stock0=df['stock0']
type(df_stock0)
%matplotlib inline
# df_stock0.cumsum().plot() #stock0 价格趋势线
df_stock0_5=df_stock0.cumsum().resample('5D').ohlc() #以5日重采样,以开盘收盘最高最低为指标
df_stock0_21=df_stock0.cumsum().resample('21D').ohlc() #以21日重采样以开盘收盘最高最低为指标
df_stock0_5.head()
df_stock0_5['open'].values
import tushare as ts
# 从tushare库提取数据,以510500为例
stockdata_hist=ts.get_hist_data(code='510500',start='2018-01-01',end='2020-06-02',)
type(stockdata_hist)
stockdata_hist.index  #查看数据索引
stock=stockdata_hist.sort_index() #索引排序
%matplotlib inline
stock['ma20'].plot()  #20日趋势线
stock.tail()  #和head()相对
stock[['close','volume']].plot(subplots=True,style=['r','g'],grid=True) #收盘价和日交易量的趋势图
stock.info() #数据信息
stock.describe() #数据统计信息
#切片
stock.loc['2020-05-01':'2020-06-01','open'] # loc按列名切片,如不指定列名则所有列
stock.iloc[1:5,2:6] # iloc按航索引和列索引切片
stock.close[0:3] #close列切片前三行
stock[['open','close','volume']][0:3] #切片open、close、volume的前三行

#条件筛选
stock[np.abs(stock.p_change)>5]
stock[np.abs(stock.p_change)>5]['p_change']

# 举例:筛选放量突破(涨跌>5%,成交量均值2.5倍)
stock[(np.abs(stock.p_change)>5)&(stock.volume>2.5*stock.volume.mean())] 

# 数据转换与清洗

# 排序
stock.sort_values(by='p_change', ascending=False)[:5] #涨幅最大的五个交易日结果

# 缺失数据的处理
stock.dropna(how='all') #如果一 行数据中全部na就删除整行,all省略则一个na删除整行
stock.fillna(0,inplace=True) #填充na。inplace表示就地操作,不返回新序列

# 数据转换处理
# pct_change()函数 对序列从第二项开始向前做减法后再除以前一项,即增减幅
stock.close[:3]
tmp_list=stock.close.pct_change()[:3]
tmp_list.fillna(0,inplace=True)
#tmp_list.rename(columns={0:'p_change'})
tmp=pd.DataFrame(tmp_list)
tmp.rename(columns={'date':'date','close':'p_change'}, inplace = True) #更改列名
#数据序列化存储与读取

import tushare as ts
# 从tushare库提取数据,以510500为例
stockdata_hist=ts.get_hist_data(code='510500',start='2018-01-01',end='2020-06-02',)
type(stockdata_hist)
stockdata_hist.index  #查看数据索引
stock=stockdata_hist.sort_index() #索引排序

# 序列化存储本地csv文件
stock.to_csv('stock.csv',index=True,columns=stock.columns)

# 读取本地csv文件
stock_sample = pd.read_csv('stock.csv', parse_dates=True, index_col=0)

 

你可能感兴趣的:(python)