python - K 均值聚类 - 处理非数值数据
问题描述
我有想要聚类的 Twitter 数据。这是文本数据,我了解到 K 表示无法处理非数字数据。我想仅根据推文对数据进行聚类。数据看起来像这样。
我发现这段代码可以将文本转换为数字数据。
def handle_non_numerical_data(df):
columns = df.columns.values
for column in columns:
text_digit_vals = {}
def convert_to_int(val):
return text_digit_vals[val]
if df[column].dtype != np.int64 and df[column].dtype != np.float64:
column_contents = df[column].values.tolist()
unique_elements = set(column_contents)
x = 0
for unique in unique_elements:
if unique not in text_digit_vals:
text_digit_vals[unique] = x
x += 1
df[column] = list(map(convert_to_int, df[column]))
return df
df = handle_non_numerical_data(data)
print(df.head())
输出
label tweet
0 9 24
1 5 11
2 17 45
3 14 138
4 18 112
我对此很陌生,我认为这不是我拟合数据所需要的。处理这种性质的非数字数据(文本)的更好方法是什么?
编辑:当在原始文本数据上运行 K 表示聚类算法时,我收到此错误。
ValueError:无法将字符串转换为浮点数
解决方案
处理非数值数据的最典型方法是将单个列转换为多个二进制列。这被称为“获取虚拟变量”或“一个热编码”(在许多其他势利的术语中)。
您还可以做其他事情将数据转换为数字,例如情绪分析(即将每条推文分类为快乐、悲伤、有趣、愤怒等),分析推文以确定它们是否与某个主题有关与否(即这条推文是否谈论病毒?),每条推文中的单词数,每条推文的空格数,是否有良好的语法等等。如你所见,你问的是一个非常广泛的主题。
将数据转换为二进制列时,您会获得列中唯一值的数量并创建许多新列,每个列都填充零和一。
让我们专注于您的第一列:
import pandas as pd
df = pd.DataFrame({'account':['realdonaldtrump','naredramodi','pontifex','pmoindia','potus']})
account
0 realdonaldtrump
1 narendramodi
2 pontifex
3 pmoindia
4 potus
这相当于:
pd.get_dummies(df, columns=['account'], prefix='account')
account_naredramodi account_pmoindia account_pontifex account_potus \
0 0 0 0 0
1 1 0 0 0
2 0 0 1 0
3 0 1 0 0
4 0 0 0 1
account_realdonaldtrump
0 1
1 0
2 0
3 0
4 0
这是许多方法之一。您可以在此处查看有关一种热编码的文章。
注意:当您有许多唯一值时,这样做会给您提供很多列,并且由于没有足够的自由度(变量太多,观察不足),某些算法会崩溃。最后,如果您正在运行回归,如果您不删除其中一列,您将遇到完美的多重共线性。
回到您的示例,如果您想将所有列转换为此类数据,请尝试:
pd.get_dummies(df)
但是,我不会为tweet
专栏这样做,因为每条推文都有其独特的价值。
推荐阅读
- python - PYTHON:“While”用不断增加的名称和值填充字典
- node.js - 无法覆盖 node.js 中的 Date toString
- xml - 对包含数千个 .xml 文件的文件夹中每个文件的两个元素执行简单的数学运算
- pyspark - (key, {key, value}) 记录中的字典键计数
- javascript - .filter() 方法返回一个空数组
- laravel-5 - 如何在 laravel-nestedset 中获取相关产品?
- php - 正则表达式 - 匹配第二个结束标签而不是第一个
- amazon - amazon Mws Secret_Key 无使用资格
- validation - 在不合理有效的 RNN 中强制执行验证步骤
- php - 如何使用jquery ajax选中或不选中复选框