问题描述
我有一个像这样带有列的数据框 - ["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"
我有两个问题 -
- 我想根据包含 4 个类别
["Liked","Didn't like","Average","Cannot comment"]
的列“D”创建第五列,比如“兴趣”。我怎么能这样做?
--在“D”的基础上,“兴趣”栏应该有[“喜欢”、“一般”、“不喜欢”]--。
如何从作为文本特征的“D”列中获取特征?
我应该将 A 列转换为二进制 0 和 1 吗?
我应该对第二列进行一次热编码/标签编码吗?
如何在聚类中利用日期时间特性?
我尝试过的东西 -
我对 A 列(转换为二进制)、B(标签编码)、C(从日期转换为年月特征)和 D(忽略了这个特征,因为不知道如何使用它)做了预处理和特征工程).
基于此,我使用 kmeans.labels_
获得集群,但这些集群是数字 1,2,3,4。
我如何才能真正将它们映射到 ["Liked","Cannot comment"]
?
如何有效地使用文本列来制作集群?
只需简短回答我的查询即可。我不需要任何实现。
解决方法
首先回答第二个问题:
A: 可以转成二进制
B:通过编码可以从唯一字符串列表中获得哪些信息?编码后,您将获得单位矩阵(One-Hot)或单调递增整数列表(标签编码)
C:如果日期范围允许,您最好转换为 Timestamp unix epoch,这可以让您正确计算距离。
D:这是该项目的基础。处理步骤非常复杂,但总结如下:
基本配方包括但不限于:
- 文本规范化:
- 转换为小写或大写
- 将数字转换为单词或删除数字,
- 删除标点符号、重音符号和其他变音符号,
- 删除前导或尾随空格
- Corupus 标记化(将每一行拆分为单个单词列表)
- 删除停用词,(a,the ..)它们包含的信息很少并且很常见
- 词干提取或词形还原。 Tese 将单词简化为基本形式。词干提取非常粗糙,可能会产生无意义的词,但速度很快。词形还原根据字典生成有效单词,但速度较慢 .... 更多的东西 n.使用 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,在这种情况下,您将很难完成所有这些步骤。