*本系列是《股票多因子模型实战:Python核心代码解析》一书的读书笔记和代码展示
1. Python基础笔记
- 变量:存放数据的载体
- for i in i_list, 此处的i是一个临时的代理变量(for 临时变量 in 某个列表:)
- 函数:对某一个多次使用的功能进行封装后形成的代码块,某种意义上可称其为功能模块
- series和dataframe: series代表某一个属性(某一列)下的记录,dataframe由series组合而成
- and、or等逻辑判断式:每一个逻辑判断式都需要用括号包起来
代码部分:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
#1. numpy基础
stock_pctcg = np.array([0.3, 1.2, 2.4, 1.5, 3.5, 8.1, -4, -2, 0.16])
print('mean:', np.mean(stock_pctcg))
print('median:', np.median(stock_pctcg))
print('std:', np.std(stock_pctcg))
#2. matplotlib基础
from matplotlib import pyplot as plt
x = np.arange(0, len(stock_pctcg))
y = stock_pctcg
plt.title("stock_price_change")
plt.xlabel('date')
plt.ylabel('daily return')
plt.plot(x,y)
plt.show()
#3. pandas基础
trading_data_2019 = pd.read_csv('2019_trading_data.csv')
target_df = trading_data_2019[['data_date', 'secucode', 'daily_return']]
target_df.head()
#3.1 条件筛选
df1 = target_df[(target_df['data_date'] == '2019-05-17') & (target_df['daily_return'] > 0.1)]
print(df1)
df1.sort_values(by='daily_return', ascending=False)
trading_data_2019.sort_values(by=['data_date', 'mv'], ascending=False)
trading_data_2019.describe()
trading_data_2019.groupby('secucode')['daily_return'].apply(np.std)
#3.2 计算累计收益率
def cum_return(return_d):
return np.product(return_d + 1)
df2 = trading_data_2019.groupby('secucode')['daily_return'].apply(cum_return)
df2.sort_values()
#3.3 计算指数收益率
k_all = trading_data_2019.groupby('data_date')['daily_return'].apply(np.mean)
k_all.plot(figsize=(19,18))
k_all.hist(bins=50)
#3.4 计算指数累计收益率
((k_all+1).cumprod() * 1000).plot()
trading_data_2019[trading_data_2019.data_date == '2019-05-27'].head(100).plot.scatter(y='turnover', x='free_mv', figsize=(18,19))
ind_name = pd.read_csv('ind_name.csv', dtype={'code':str})
ind_name.head()
trading_data_2019['ind_code'] = trading_data_2019['ind_code'].astype(str)
#3.5 合并dataframe,使用同一个key
pd.merge(trading_data_2019, ind_name.rename(columns={'code': 'ind_code'}), on='ind_code', how='left')