M.transform¶
定义¶
-
M.transform.
v2
(self, data, transforms, drop_null, astype=None, clip_lower=None, clip_upper=None, except_columns=['date', 'instrument'])¶ 数据变换和处理,支持数据变换、缺失数据处理、数据裁剪和规范化等
参数: - data (DataSource) – 输入数据源
- transforms (函数列表[(正则表达式,变换函数)]) – 变换函数,对于输入数据源的每一列,从transforms里依序寻找到第一个匹配的表达式,用对应的变换函数对列数据做处理
- drop_null (boolean) – 是否丢弃有缺失数据的行
- astype (字符串) – 类型转换,支持 ‘int32’, ‘float32’,更多类型
- clip_lower (数字) – 数值裁剪的下界,value = max(value, clip_lower),None表示不做裁剪
- clip_upper (数字) – 数值裁剪的上界,value = min(value, clip_upper),None表示不做裁剪
- except_columns (字符串数组) – 例外的列,对这些列将不做处理
返回: 处理后的数据
- .data: DataSource, 处理后的数据
返回类型: Outputs
示例代码¶
查看模块可用版本¶
In [1]:
M.transform.m_get_version
Out[1]:
<bound method BigQuantModule.m_get_version of 模块:transform
可用版本(推荐使用最新版本):v2>
数据转换¶
In [2]:
m1 = M.general_feature_extractor.v5(
instruments=['000001.SZA', '600519.SHA'],
start_date='2017-01-01', end_date='2017-02-01',
features=['close_5/close_0', 'close_10/close_0', 'close_20/close_0'])
m2 = M.transform.v2(
data=m1.data,
# stockranker 默认的转换函数,主要是将特征映射到非负整数区间,因为stockranker要求输入特征数据为非负整数
transforms=T.get_stock_ranker_default_transforms(),
drop_null=True, # 缺失数据处理,如果某一行有空列,则删除
astype='int32', # 数据类型转换
except_columns=['date', 'instrument'], # 跳过的列,不需要处理
# clip最后的数据,保证输入落到如下区间
clip_lower=0, clip_upper=200000000)
[2017-11-14 14:48:32.159627] INFO: bigquant: general_feature_extractor.v5 开始运行..
[2017-11-14 14:48:32.166393] INFO: bigquant: 命中缓存
[2017-11-14 14:48:32.167678] INFO: bigquant: general_feature_extractor.v5 运行完成[0.008144s].
[2017-11-14 14:48:32.189480] INFO: bigquant: transform.v2 开始运行..
[2017-11-14 14:48:32.195355] INFO: bigquant: 命中缓存
[2017-11-14 14:48:32.196801] INFO: bigquant: transform.v2 运行完成[0.007375s].
In [3]:
m2.data.read_df().head()
Out[3]:
close_0 | close_10 | close_20 | close_5 | date | instrument | |
---|---|---|---|---|---|---|
0 | 95958 | 96377 | 99101 | 95539 | 2017-01-03 | 000001.SZA |
1 | 234358 | 228334 | 221308 | 227297 | 2017-01-03 | 600519.SHA |
2 | 95958 | 95434 | 99415 | 95120 | 2017-01-04 | 000001.SZA |
3 | 246512 | 228698 | 228656 | 228474 | 2017-01-04 | 600519.SHA |
4 | 96063 | 95958 | 99310 | 94910 | 2017-01-05 | 000001.SZA |
自定义transform函数¶
In [4]:
T.get_stock_ranker_default_transforms()[20:25]
Out[4]:
[('^adjust_factor_\\d+$', lambda x: x*10),
('^deal_number_\\d+$', None),
('^price_limit_status_\\d+$', None),
('^close_\\d+$', lambda x: x*100),
('^daily_return_\\d+$', lambda x: x*10000)]
In [5]:
def close_0_log(v):
# v的类型是pd.Series
return np.log(v)
m3 = M.transform.v2(
data=m1.data,
# stockranker 默认的转换函数,主要是将特征映射到非负整数区间,因为stockranker要求输入特征数据为非负整数
transforms=[('^close_0$', close_0_log)] + T.get_stock_ranker_default_transforms(),
drop_null=True, # 缺失数据处理,如果某一行有空列,则删除
astype='int32', # 数据类型转换
except_columns=['date', 'instrument'], # 跳过的列,不需要处理
# clip最后的数据,保证输入落到如下区间
clip_lower=0, clip_upper=200000000)
m3.data.read_df().head()
[2017-11-14 14:48:42.035611] INFO: bigquant: transform.v2 开始运行..
[2017-11-14 14:48:42.068145] INFO: bigquant: 命中缓存
[2017-11-14 14:48:42.069542] INFO: bigquant: transform.v2 运行完成[0.033938s].
Out[5]:
close_0 | close_10 | close_20 | close_5 | date | instrument | |
---|---|---|---|---|---|---|
0 | 6 | 96377 | 99101 | 95539 | 2017-01-03 | 000001.SZA |
1 | 7 | 228334 | 221308 | 227297 | 2017-01-03 | 600519.SHA |
2 | 6 | 95434 | 99415 | 95120 | 2017-01-04 | 000001.SZA |
3 | 7 | 228698 | 228656 | 228474 | 2017-01-04 | 600519.SHA |
4 | 6 | 95958 | 99310 | 94910 | 2017-01-05 | 000001.SZA |