alpha-mind的data文件夹提供了对于因子数据进行排序和求分位数的工具函数

因子排序: rank

  • 从小到大排序,返回序列值。
  • 可以进行整体排序,也可以分行业(分组)排序。

In [1]:
import numpy as np
import pandas as pd
from alphamind.data.rank import rank

# 假设有10只股票,每只股票有2个因子,构成一个矩阵
factors = pd.DataFrame(np.random.rand(10, 2))
factors.columns = ['factor_1', 'factor_2']
factors['rank_1'] = rank(factors['factor_1'].values)
factors['rank_2'] = rank(factors['factor_2'].values)

factors


Out[1]:
factor_1 factor_2 rank_1 rank_2
0 0.959453 0.798155 9.0 8.0
1 0.830604 0.051822 6.0 1.0
2 0.234670 0.157615 1.0 2.0
3 0.652818 0.733896 4.0 6.0
4 0.932201 0.002984 7.0 0.0
5 0.311260 0.708512 2.0 5.0
6 0.198123 0.665290 0.0 4.0
7 0.731436 0.915967 5.0 9.0
8 0.346298 0.754176 3.0 7.0
9 0.950355 0.196379 8.0 3.0

In [2]:
# 假设有10只股票,每只股票有1个因子
factors = pd.DataFrame(np.random.rand(10, 1))
factors.columns = ['factor_1']

# 假设这10只股票分为两个行业,前5个和后5个分属不同类别
industry = np.concatenate([np.array([1.0]*5), np.array([2.0]*5)])

factors['rank'] = rank(factors['factor_1'].values, groups=industry)
factors


Out[2]:
factor_1 rank
0 0.898683 4
1 0.179354 0
2 0.751189 3
3 0.699054 2
4 0.332965 1
5 0.937173 4
6 0.559328 0
7 0.753076 2
8 0.657790 1
9 0.782689 3

因子分位数: quantile

  • 根据给定组数(n_bins),按从小达到的顺序进行分组,返回每个因子属于的组别。

In [3]:
from alphamind.data.quantile import quantile

factors['quantile'] = quantile(factors['factor_1'].values, n_bins=5)
factors


Out[3]:
factor_1 rank quantile
0 0.898683 4 4
1 0.179354 0 0
2 0.751189 3 2
3 0.699054 2 2
4 0.332965 1 0
5 0.937173 4 4
6 0.559328 0 1
7 0.753076 2 3
8 0.657790 1 1
9 0.782689 3 3

In [ ]: