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