Python/NLTK结合的聚合

Python/NLTK结合的聚合,python,multidimensional-array,pandas,scikit-learn,nltk,Python,Multidimensional Array,Pandas,Scikit Learn,Nltk,我想对包含Twitter消息的数据集进行一些文本处理。到目前为止,我能够将数据(.CSV)加载到熊猫数据框中,并通过(自定义)列“timestamp”对其进行索引 df = pandas.read_csv(f) df.index = pandas.to_datetime(df.pop('timestamp')) 看起来有点像这样: user_name user_handle timestamp 2015-02-02 23:58:42 Netherlands Startups N

我想对包含Twitter消息的数据集进行一些文本处理。到目前为止,我能够将数据(.CSV)加载到熊猫数据框中,并通过(自定义)列“timestamp”对其进行索引

df = pandas.read_csv(f)
df.index = pandas.to_datetime(df.pop('timestamp'))
看起来有点像这样:

user_name user_handle timestamp 2015-02-02 23:58:42 Netherlands Startups NLTechStartups 2015-02-02 23:58:42 shareNL share_NL 2015-02-02 23:58:42 BreakngAmsterdamNews iAmsterdamNews [49570 rows x 8 columns]
texts = pandas.Series(df['text'])
这就产生了:

2015-06-02 14:50:54 Business Update Meer cruiseschepen dan ooit in... 2015-06-02 14:50:53 RT @ProvincieNH: Provincie maakt Markermeerdij... 2015-06-02 14:50:53 Amsterdam - Nieuwe flitspaal Wibautstraat: In ... 2015-06-02 14:50:53 Amsterdam - Nieuwe flitspaal Wibautstraat http... 2015-06-02 14:50:53 Lugar secreto em Amsterdam: Begijnhof // Hidde... Name: text, Length: 49570 这将迭代数组,而不是将“text”列映射到多列“words”数组2。我该如何做,以及如何计算每个单词的出现次数?

我知道有一个
unique()
方法可以用来创建一个独特的单词列表。但是我需要一个额外的列,它是数组的一个计数,而我一开始无法生成它。:)3。或者下一步“计数”这些单词的出现是分组吗??

编辑。3:我似乎需要“”,谢谢EdChum

documents = df['text'].values

vectorizer = CountVectorizer(min_df=0, stop_words=[])
X = vectorizer.fit_transform(documents)
print(X.toarray())

我的主要目标是统计每个单词的出现次数,并选择top X结果。我觉得我的思路是对的,但我无法正确地完成最后的步骤。

基于EdChums的评论,这里有一种从CountVectorizer获取(我假设是全局)字数的方法:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
vect= CountVectorizer()

df= pd.DataFrame({'text':['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat']\
              ,'class': ['a','a','a','a','c','c','b','e']})

X = vect.fit_transform(df['text'].values)
y = df['class'].values
countvectorier
返回的稀疏矩阵转换为密集矩阵,并将其和特征名称传递给
dataframe
构造函数。然后转置帧并沿
轴=1求和,以获得每个单词的总数:

word_counts =pd.DataFrame(X.todense(),columns = vect.get_feature_names()).T.sum(axis=1)
word_counts.sort(ascending=False)
word_counts[:3]

如果您感兴趣的是单词的频率分布,请考虑使用<代码> FRQ-DIST <代码> >代码> NLTK < /C> >:

import nltk
import itertools
from nltk.probability import FreqDist
texts = ['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat']
texts = [nltk.word_tokenize(text) for text in texts]
# collapse into a single list
tokens = list(itertools.chain(*texts))

FD =FreqDist(tokens)

基于EdChums的评论,这里有一种从CountVectorizer获取(我假设为全局)字数的方法:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
vect= CountVectorizer()

df= pd.DataFrame({'text':['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat']\
              ,'class': ['a','a','a','a','c','c','b','e']})

X = vect.fit_transform(df['text'].values)
y = df['class'].values
countvectorier
返回的稀疏矩阵转换为密集矩阵,并将其和特征名称传递给
dataframe
构造函数。然后转置帧并沿
轴=1求和,以获得每个单词的总数:

word_counts =pd.DataFrame(X.todense(),columns = vect.get_feature_names()).T.sum(axis=1)
word_counts.sort(ascending=False)
word_counts[:3]

如果您感兴趣的是单词的频率分布,请考虑使用<代码> FRQ-DIST <代码> >代码> NLTK < /C> >:

import nltk
import itertools
from nltk.probability import FreqDist
texts = ['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat']
texts = [nltk.word_tokenize(text) for text in texts]
# collapse into a single list
tokens = list(itertools.chain(*texts))

FD =FreqDist(tokens)

只是想澄清一下,您想知道如何计算标记化输出中出现的每个单词,以及如何计算df中出现的所有单词?你看过吗?很好的建议。但用外行的话说:你是说我最好使用
scipy.sparse
矩阵而不是
pandas
数据帧?不,我不是说,只是可能已经有一个实现的方法可以满足你的需要,是这样吗?是的,看起来是这样。但是,输入是
文件
文件名
内容
。我对Python不够精通,无法了解如何使用此类映射现有的文本数组。我的原始数据是由“时间戳”索引的数据帧。如何传递“just the text”?它应该使用just
df['text']
作为参数,否则请尝试使用
df['text']。value
返回一个numpy数组,该数组应该是兼容的。为了澄清,您想知道如何计算标记化输出中出现的每个单词,以及如何计算df中出现的所有单词?你看过吗?很好的建议。但用外行的话说:你是说我最好使用
scipy.sparse
矩阵而不是
pandas
数据帧?不,我不是说,只是可能已经有一个实现的方法可以满足你的需要,是这样吗?是的,看起来是这样。但是,输入是
文件
文件名
内容
。我对Python不够精通,无法了解如何使用此类映射现有的文本数组。我的原始数据是由“时间戳”索引的数据帧。如何传递“just the text”?它应该使用just
df['text']
作为参数,否则请尝试使用
df['text'].values
返回一个应该兼容的numpy数组