Как получить наиболее распространенные слова с определенным значением в Python - PullRequest
0 голосов
/ 18 мая 2019

У меня есть датафрейм с оценочными баллами 0 и 1 и соответствующими отзывами, я хочу найти наиболее распространенные слова в обзорах с 0 баллами и 1 баллом. Я пробовал это, но он дает счет всех слов:

count = defaultdict(int)
l = df['Summary']
for number in l:
    count[number] += 1

print(count)

Как найти наиболее распространенные значения во всех строках с 1 баллом и 0 баллами?

Ответы [ 3 ]

0 голосов
/ 18 мая 2019

Если ваши данные выглядят так

            review  score
0       bad review      0
1      good review      1
2  very bad review      0
3   movie was good      1

Вы могли бы сделать что-то вроде

words = pd.concat([pd.Series(row['score'], row['review'].split(' '))              
    for _, row in df.iterrows()]).reset_index()
words.columns = ['word', 'score']
print(words.groupby(['score', 'word']).size())

, что дает вам

score  word
0      bad       2
       review    2
       very      1
1      good      2
       movie     1
       review    1
       was       1
dtype: int64
0 голосов
/ 18 мая 2019
most_common_0 = ''
most_common_1 = ''

for text, score in zip(df['Summary'], df['Score']):
    if score == 1:
        most_common_1 += ' ' + text
    else:
        most_common_0 += ' ' + text

from collections import Counter
c = Counter(most_common_1.split())
print(c.most_common(2)) # change this 2 to the number you want to analyze

выход

[('good', 2), ('and', 1)]
0 голосов
/ 18 мая 2019

Попробуйте использовать частотный дикт.Если ваши столбцы можно просматривать как список списков:

data = [[0, "text samle 1"], [0, "text sample 2"], [1, "text sample 3"]]

... тогда вы можете:

fd0 = dict()
fd1 = dict()
for list_item in data:
    associated_value = list_item[0]

    #note the split(' ') splits the string into a list of words
    for word in list_item[1].split(' '):
        if associated_value == 0:
            fd0[word] = 1 if word not in fd0 else fd0[word] + 1
        elif associated_value == 1:
            fd1[word] = 1 if word not in fd1 else fd1[word] + 1

В конце цикла ваш fd0 должен иметь частоту для метки0 и fd1 должны иметь частоту для метки 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...