#基于上一关的结果,读取沪深300指数2016年~2017年的交易数据表"data1.xlsx" # 字段依次如下: # 指数代码 交易日期 开盘价 最高价 最低价 收盘价 成交量 成交额 # 计算如下指标: # a1周最高价:周内指数成交的最高价。 # a2周最低价:周内指数成交的最低价。 # a3成交额:一周内指数成交额。 # a4周收益率:(本周收盘价-上周收盘价)/上周收盘价。 # a5上周收益率:上一周的周收益率。 # a6前周收益率:上上周的周收益率。 # a7上周成交额:上一周的成交额。 # a8近四周平均成交额:在最近的四周内的平均成交额。 # y(因变量):下周收盘价 – 本周收盘价,如果大于 0,记为 1;如果小于等于 0,记为 -1。 # 其中a1~a8,用一个数据框Data来表示 def return_values(): import pandas as pd import numpy as np import step6_4 r=step6_4.return_values() list1=r[0] list2=r[1] return (Data,y)
时间: 2023-12-10 21:06:18 浏览: 81
以下是代码实现:
```python
import pandas as pd
import numpy as np
import datetime
# 读取数据表
df = pd.read_excel('data1.xlsx')
# 转换日期格式
df['交易日期'] = pd.to_datetime(df['交易日期'])
# 提取2016年~2017年的数据
df = df[(df['交易日期'] >= datetime.datetime(2016, 1, 1)) & (df['交易日期'] <= datetime.datetime(2017, 12, 31))]
# 计算周数
df['周数'] = df['交易日期'].dt.week
# 计算a1周最高价
a1 = df.groupby('周数')['最高价'].max()
# 计算a2周最低价
a2 = df.groupby('周数')['最低价'].min()
# 计算a3成交额
a3 = df.groupby('周数')['成交额'].sum()
# 计算a4周收益率
df['上周收盘价'] = df['收盘价'].shift(1)
df['周收益率'] = (df['收盘价'] - df['上周收盘价']) / df['上周收盘价']
a4 = df.groupby('周数')['周收益率'].last()
# 计算a5上周收益率
a5 = df.groupby('周数')['周收益率'].last().shift(1)
# 计算a6前周收益率
a6 = df.groupby('周数')['周收益率'].last().shift(2)
# 计算a7上周成交额
a7 = df.groupby('周数')['成交额'].last().shift(1)
# 计算a8近四周平均成交额
a8 = df.groupby('周数')['成交额'].rolling(window=4).mean().reset_index(level=0, drop=True)
# 构建Data数据框
Data = pd.concat([a1, a2, a3, a4, a5, a6, a7, a8], axis=1)
Data.columns = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8']
# 计算y值
df['下周收盘价'] = df['收盘价'].shift(-1)
df['y'] = np.where(df['下周收盘价'] - df['收盘价'] > 0, 1, -1)
y = df.groupby('周数')['y'].last().shift(-1)
# 删除最后一行无效数据
Data = Data[:-1]
y = y[:-1]
return (Data, y)
```
其中,需要用到 step6_4 中的 return_values() 函数来获取数据。函数的实现可以参考上一关的任务。
阅读全文