我有要聚类的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 naredramodi
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
这是许多方法之一。您可以查看one hot encoding here的文档。