Python K表示聚类-处理非数值数据

Python K表示聚类-处理非数值数据,python,k-means,Python,K Means,我有我想要群集的twitter数据。这是文本数据,我知道K表示不能处理非数字数据。我只想根据tweet对数据进行聚类。数据如下所示 我发现这段代码可以将文本转换成数字数据 def handle_non_numerical_data(df): columns = df.columns.values for column in columns: text_digit_vals = {} def convert_to_int(val):

我有我想要群集的twitter数据。这是文本数据,我知道K表示不能处理非数字数据。我只想根据tweet对数据进行聚类。数据如下所示

我发现这段代码可以将文本转换成数字数据

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:无法将字符串转换为float

处理非数字数据的最典型方法是将一列转换为多个二进制列。这被称为“获取虚拟变量”或“一个热编码”(在许多其他势利术语中)

您还可以通过其他方式将数据转换为数字,例如(即,将每条推文转换为快乐、悲伤、有趣、愤怒等),分析推文以确定它们是否与某个主题有关(即,此推文是否涉及病毒?),每条推文中的字数,每条推文的空格数,如你所见,如果它的语法好或不好,等等,你问的是一个非常广泛的问题

当将数据转换为二进制列时,您将获得列中唯一值的数量,并生成许多新列,其中每一列都用0和1填充

让我们关注您的第一个专栏:

将熊猫作为pd导入
df=pd.DataFrame({'account':['realdonaldtrump','naredramodi','pontifex','pmonida','potus']})
账户
0雷亚尔唐纳德特朗普
1纳伦德拉莫迪
2 pontifex
3.印度
4波托斯
这相当于:

pd.get_假人(df,列=['account'],前缀='account')
账户(naredramodi账户)印度账户(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   
特朗普账户
0                        1  
1                        0  
2                        0  
3                        0  
4                        0
这是许多方法之一。您可以查看这篇关于的文章

注意:当你有许多唯一的值时,这样做会给你很多列,一些算法会因为没有足够的自由度(变量太多,观察不够)而崩溃。最后,如果您正在运行回归,如果您不删除其中一列,您将遇到完美的多重共线性

回到您的示例,如果要将所有列转换为此类数据,请尝试:

pd.get_dummies(df)

但是,我不会对
tweet
列这样做,因为每个tweet都是它自己的唯一值。

由于k-means是一种矢量量化方法,您应该以某种方式对文本数据进行矢量化

请参阅在文本上使用k-means的一些示例:

您所说的“处理非数字数据”是什么意思?这可能意味着很多,非数字数据,我指的是文本数据,我指的是“句柄”。你是说某种矢量化?你应该指定你对beI的转换没有提到的东西,因为我在这里几乎是在黑暗中行走,但是是的,也许我需要对我的数据进行矢量化。我还读到,我应该为数据创建一个热编码。不管怎样,你能给我指一些矢量化的教程吗?我对tweets专栏也这样做吗?因为我想聚集在tweets专栏上,所以我不会这样做,因为我怀疑你是否有重复的tweets。我稍微编辑了一下答案,希望能把你推向正确的方向。有很多方法可以解决这个问题,但没有一种被认为是标准方法。你有很多的预处理要做。