(然后sklearn早已有现成的包,DictVectorizer,multilabelBinarizer都可以做类似的事。)
需要处理的特征存在两个表中,第一个表为用户的个人信息表,如下:
- userID gender
- 11,male
- 22,female
- 33,male
第二个表为用户的app列表: - userID appID
- 11,234
- 11,345
- 11,456
- 22,345
- 22,456
可以看到,第二个列表中userID是重复的,怎么把一系列app对应到一个userID上想了我好久。
开始的时候,尝试用pandas的Dataframe读取,对appID列进行OneHotencoding,然后将编码完的的结果(csr_matrix)转换成Dataframe,再根据userID进行goupby合并。结果是当把稀疏矩阵转换成array的时候直接爆炸。。因为dataframe的参数不能是稀疏矩阵。
然后再想办法,发现不一定要把结果转换成dataframe的格式,可以根据app列表直接构建稀疏矩阵sparse.csr_matrix。
而且用下面的构建方法会简单很多,而且多个app特征直接按行合并了,不用再用dataframe groupby。
csr_matrix((data, indices, indptr), [shape=(M, N)])
参数indices按顺序存储所有元素的列值,indptr保存每一行的元素个数。
ind