【问题标题】:Combining pandas group_by and sklearn countVectorizer结合 pandas group_by 和 sklearn countVectorizer
【发布时间】:2016-02-07 07:01:36
【问题描述】:

我有一个表单的数据框:

ID    col1  col2  col3   class
1     0.35  "A"    "x"  'class1'
1     0.35  "B"    "y"  'class1'
1     0.35  "A"    "x"  'class1'
1     0.35  "A"    "z"  'class1'
2     0.48  "B"    "u"  'class2'
2     0.48  "A"    "x"  'class2'
3     0.14  "C"    "v"  'class3'

col2 和 col3 的维度非常高(总共超过 7000)。我必须对 ID 字段进行分类。因此,据我了解,我需要对数据进行分组。如果我使用 pandas group_by 并使用密集格式,内存就会爆炸。所以我想知道将数据输入分类器的最佳方法是什么?无论如何我可以根据 col2 和 col3 的计数对数据进行分组,同时保持 col1 不变并将输出放在稀疏矩阵中?

【问题讨论】:

    标签: python pandas group-by scikit-learn classification


    【解决方案1】:

    如果我理解您的要求,我会通过将 groupby 和功能选择分开来做到这一点,以便 groupby 只是聚合字符串,CountVectorizer 应用于这些分组字符串。例如:

    >>> grouped = df.groupby('ID').aggregate({'col1':'first',
                                              'col2':'sum',
                                              'col3':'sum'})
    >>> grouped['all'] = grouped['col2'] + grouped['col3']
    >>> print(grouped)
        col3  col1  col2       all
    ID                            
    1   xyxz  0.35  ABAA  ABAAxyxz
    2     ux  0.48    BA      BAux
    3      v  0.14     C        Cv
    
    >>> from sklearn.feature_extraction.text import CountVectorizer
    >>> features = CountVectorizer(analyzer='char').fit_transform(grouped['all'])
    >>> features.shape
    (3, 8)
    

    这应该适当地扩展到大量的列。如果您需要计算单词而不是字符,则上述解决方案只需稍作修改即可。

    【讨论】:

    • 非常感谢您的回复,非常有帮助。无论如何我可以将数字列(col 1)也包含在功能中吗?
    • 我搜索了一下,来自 scipy.sparse 的 hstack 成功了。再次感谢您的帮助。
    猜你喜欢
    • 2017-03-15
    • 2018-03-20
    • 2017-03-10
    • 2017-08-04
    • 2021-03-22
    • 2023-02-15
    • 2021-07-17
    • 2019-11-08
    • 2021-12-10
    相关资源
    最近更新 更多