聚类数据后如何根据其他列生成新列?

How to generate a new column based on some other column after clustering the data?

我有一个像这样的带有列的数据框 - ["A","B","C",D"]

A --> Categorical feature with 2 values, say Yes or No
B --> Categorical feature with 10 unique values, like "AAXX-10","BBYY-20" etc
C --> A date-time field
D --> Text-based column, describing if a person was interested in the movie or not based on short text(basically their comments after coming out of theatre)

样本 df

A  | B | C | D
------------------------------------------------------------------------------
Yes|AAXX-10|8/10/2018|"Yes I liked the movie, it was great"
------------------------------------------------------------------------------
Yes|BBYY-20|8/10/2017|"I liked the performance of the cast in the movie but as a whole, It was just average"
------------------------------------------------------------------------------
No |AANN-88|8/10/2013|"Never seen a ridiculous movie like this"

我这里有两个问题-

  1. 我想在“D”列的基础上创建第五列,比如“兴趣”,它有 4 个类别 ["Liked", "Didn't like", "Average", "Cannot comment"]。我该怎么做?

--在“D”的基础上,“兴趣”栏应该有[“喜欢”、“一般”、“不喜欢”]--.

  1. 因为大多数列都是分类列和日期时间列,其中一列是文本列。我应该如何继续在这个特定场景中进行特征工程才能提供给 Kmeans?

如何从文本特征列“D”中获取特征?

我应该将 A 列转换为二进制 0 和 1 吗?

我应该对第二列进行热 encoding/label 编码吗?

如何在集群中使用日期时间功能?

我尝试过的东西 -

我对 A 列(转换为二进制)、B(标签编码)、C(从日期转换为年和月特征)和 D(忽略了这个特征,因为不知道我怎么能这样做)进行了预处理和特征工程使用它)。

基于此,我使用 kmeans.labels_ 获得了聚类,但这些聚类是数字 1,2,3,4.

我怎样才能真正将它们映射到 ["Liked", "Didn't like", "Average", "Cannot comment"]? 如何有效地使用文本列来创建集群?

只需简短回答我的查询即可。我不需要任何实现。

先回答第二个问题:

A:可以转二进制

B:通过编码,你可以从一个独特的字符串列表中得到什么信息?编码后,您剩下单位矩阵(One-Hot)或单调递增整数列表(标签编码)

C: 如果日期范围允许,你最好转换成 Timestamp unix epoch,这样可以正确计算距离。

D:这是项目的基础。处理步骤非常复杂但简短总结:

基本食谱包括但不限于:

  1. 文本规范化:
    • 转换为小写或大写
    • 将数字转换为单词或删除数字,
    • 删除标点符号、重音符号和其他变音符号,
    • 删除前导或尾随空格
  2. Corupus 标记化(将每一行拆分为一个单词列表)
    • 删除停用词,(a, the ..) 它们包含的信息很少而且很常见
  3. 词干化或词形还原。 Tese 将单词简化为基本形式。词干提取相当粗糙,可能会产生无效的单词,但速度很快。词形还原根据字典生成有效单词,但速度较慢 ....还有很多东西 名词使用 TF-IDF 进行特征提取,这是一种为每个词赋予重要性分数的编码。这种方法的工作原理是当一个词在文档中出现多次时增加它的权重,当它在许多文档中常见时降低它的权重。

td-idf 示例:

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())

print(X.shape)

经过这n个步骤,你得到了第一个问题的答案;输出可能看起来像这样:

您可以找到有关如何执行所有这些操作的代码here(使用 NLTK)。然而,您可能不被允许使用 NLTK,在这种情况下,您将很难完成所有这些步骤。