Hướng dẫn find most common words in dataframe python - tìm các từ phổ biến nhất trong dataframe python

Tôi có các đánh giá văn bản trong một cột trong Pandas DataFrame và tôi muốn đếm các từ thường xuyên nhất n với số lượng tần số của chúng (trong toàn bộ cột - không phải trong một ô đơn). Một cách tiếp cận là đếm các từ bằng cách sử dụng một bộ đếm, bằng cách lặp qua mỗi hàng. Có một lựa chọn tốt hơn?

Dữ liệu đại diện.

0    a heartening tale of small victories and endu
1    no sophomore slump for director sam mendes  w
2    if you are an actor who can relate to the sea
3    it's this memory-as-identity obviation that g
4    boyd's screenplay ( co-written with guardian

Hướng dẫn find most common words in dataframe python - tìm các từ phổ biến nhất trong dataframe python

Số không

69,9K16 Huy hiệu vàng144 Huy hiệu bạc153 Huy hiệu đồng16 gold badges144 silver badges153 bronze badges

hỏi ngày 27 tháng 4 năm 2015 lúc 18:11Apr 27, 2015 at 18:11

Swati Saojiswati Saojiswati saoji

1.8395 huy hiệu vàng24 Huy hiệu bạc35 Huy hiệu đồng5 gold badges24 silver badges35 bronze badges

0

from collections import Counter
Counter(" ".join(df["text"]).split()).most_common(100)

Tôi khá chắc chắn rằng điều này sẽ cung cấp cho bạn những gì bạn muốn. (Bạn có thể phải xóa một số từ không từ kết quả truy cập trước khi gọi most_common.)

Hướng dẫn find most common words in dataframe python - tìm các từ phổ biến nhất trong dataframe python

Đã trả lời ngày 27 tháng 4 năm 2015 lúc 18:15Apr 27, 2015 at 18:15

Joran Beasleyjoran BeasleyJoran Beasley

107K12 Huy hiệu vàng150 Huy hiệu bạc175 Huy hiệu đồng12 gold badges150 silver badges175 bronze badges

3

Cùng với giải pháp của @joran, bạn cũng có thể sử dụng series.value_counts cho số lượng lớn văn bản/hàng

 pd.Series(' '.join(df['text']).lower().split()).value_counts()[:100]

Bạn sẽ tìm thấy từ điểm chuẩn series.value_counts có vẻ nhanh hơn hai lần (2x) so với phương pháp

from collections import Counter
Counter(" ".join(df["text"]).split()).most_common(100)
1

Đối với đánh giá phim Bộ dữ liệu 3000 hàng, tổng cộng 400k ký tự và 70K từ.

In [448]: %timeit Counter(" ".join(df.text).lower().split()).most_common(100)
10 loops, best of 3: 44.2 ms per loop

In [449]: %timeit pd.Series(' '.join(df.text).lower().split()).value_counts()[:100]
10 loops, best of 3: 27.1 ms per loop

Hướng dẫn find most common words in dataframe python - tìm các từ phổ biến nhất trong dataframe python

nha

17.2K12 Huy hiệu vàng86 Huy hiệu bạc124 Huy hiệu đồng12 gold badges86 silver badges124 bronze badges

Đã trả lời ngày 27 tháng 4 năm 2015 lúc 19:21Apr 27, 2015 at 19:21

Hướng dẫn find most common words in dataframe python - tìm các từ phổ biến nhất trong dataframe python

1

Tôi sẽ phải không đồng ý với @Zero

Đối với 91.000 chuỗi (địa chỉ email), tôi thấy

from collections import Counter
Counter(" ".join(df["text"]).split()).most_common(100)
2 là nhanh hơn. Tuy nhiên, series.value_counts có thể vẫn nhanh hơn nếu chúng có hơn 500k từ

%%timeit
[i[0] for i in Counter(data_requester['requester'].values).most_common(5)]
# 13 ms ± 321 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
data_requester['requester'].value_counts().index[:5]
# 22.2 ms ± 597 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

Đã trả lời ngày 10 tháng 9 năm 2020 lúc 22:42Sep 10, 2020 at 22:42

Ali Pardhanali PardhanAli Pardhan

1841 Huy hiệu bạc13 Huy hiệu đồng1 silver badge13 bronze badges

Lưu ý: Dữ liệu bạn đang trải qua là 370K+ dòng. Bởi vì tôi có xu hướng chạy các phiên bản mã khác nhau rất nhiều trong quá trình xem xét, tôi đã giới hạn phiên bản của mình xuống còn 1000 dòng.


Mã của bạn đi khắp nơi. Nhập khẩu, tải xuống, nhập khẩu khác, một biến đang được tải, định nghĩa chức năng, hàm được gọi và OH, một lần nhập khác. Theo thứ tự đó. Bạn có đồng ý rằng nó hữu ích để sắp xếp những thứ đó, vì vậy chúng tôi có thể dễ dàng tìm thấy những gì chúng tôi đang tìm kiếm?

Đầu sửa đổi của tệp sẽ trông như thế này:

import re
import string
import nltk

import pandas as pd

from collections import Counter
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

nltk.download('punkt')
nltk.download('stopwords')

Sau đó, chúng tôi thường đặt định nghĩa chức năng. Tuy nhiên, có một phần của chương trình không cần phải ở trong chức năng. Nó chỉ phải được thực thi một lần, ngay cả khi nhiều tệp được xử lý.

# removing the emojies
# https://www.kaggle.com/alankritamishra/covid-19-tweet-sentiment-analysis#Sentiment-analysis
EMOJI_PATTERN = re.compile("["
                           u"\U0001F600-\U0001F64F"  # emoticons
                           u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                           u"\U0001F680-\U0001F6FF"  # transport & map symbols
                           u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           u"\U00002702-\U000027B0"
                           u"\U000024C2-\U0001F251"
                           "]+", flags=re.UNICODE)

Biến là trong

from collections import Counter
Counter(" ".join(df["text"]).split()).most_common(100)
4 bây giờ, bởi vì đó là một yếu tố giả (Python không thực sự có hằng số, nhưng đó là một lời nhắc nhở cho bạn và các nhà phát triển khác rằng biến nên được đặt một lần và chỉ một lần). Đó là thông lệ để đặt các yếu tố giả giữa các định nghĩa nhập khẩu và chức năng để bạn biết nơi để tìm chúng.

Bây giờ, phần còn lại của chương trình hầu như đã ổn. Bạn có thể sử dụng nhiều chức năng hơn, nhưng với một chương trình, kích thước này chủ yếu sẽ là một bài tập. Tôi sẽ đổi tên một số biến, cắt các dòng, sử dụng một tài liệu thích hợp (bạn đã có một khởi đầu tuyệt vời với nhận xét khi bắt đầu hàm

from collections import Counter
Counter(" ".join(df["text"]).split()).most_common(100)
5) và chuẩn bị chương trình để sử dụng lại. Rốt cuộc, thật tuyệt khi chỉ cần nhập từ tệp này thay vì phải sao chép mã vào một vài dự án tiếp theo bằng cách sử dụng này, phải không? Và chúng tôi không muốn chạy các chi tiết cụ thể của chương trình này mỗi khi nó được nhập, vì vậy chúng tôi rõ ràng chỉ chạy nó nếu nó không được nhập.

import re
import string
import nltk

import pandas as pd

from collections import Counter
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

nltk.download('punkt')
nltk.download('stopwords')

STOP_WORDS = stopwords.words()

# removing the emojies
# https://www.kaggle.com/alankritamishra/covid-19-tweet-sentiment-analysis#Sentiment-analysis
EMOJI_PATTERN = re.compile("["
                           u"\U0001F600-\U0001F64F"  # emoticons
                           u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                           u"\U0001F680-\U0001F6FF"  # transport & map symbols
                           u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           u"\U00002702-\U000027B0"
                           u"\U000024C2-\U0001F251"
                           "]+", flags=re.UNICODE)


def cleaning(text):
    """
    Convert to lowercase.
    Rremove URL links, special characters and punctuation.
    Tokenize and remove stop words.
    """
    text = text.lower()
    text = re.sub('https?://\S+|www\.\S+', '', text)
    text = re.sub('<.*?>+', '', text)
    text = re.sub('[%s]' % re.escape(string.punctuation), '', text)
    text = re.sub('\n', '', text)
    text = re.sub('[’“”…]', '', text)

    text = EMOJI_PATTERN.sub(r'', text)

    # removing the stop-words
    text_tokens = word_tokenize(text)
    tokens_without_sw = [
        word for word in text_tokens if not word in STOP_WORDS]
    filtered_sentence = (" ").join(tokens_without_sw)
    text = filtered_sentence

    return text


if __name__ == "__main__":
    max_rows = 1000  # 'None' to read whole file
    input_file = 'covid19_tweets.csv'
    df = pd.read_csv(input_file,
                     delimiter = ',',
                     nrows = max_rows,
                     engine = "python")

    dt = df['text'].apply(cleaning)

    word_count = Counter(" ".join(dt).split()).most_common(10)
    word_frequency = pd.DataFrame(word_count, columns = ['Word', 'Frequency'])
    print(word_frequency)

Đương nhiên, nếu bạn muốn có một phiên bản tiết kiệm bộ nhớ hơn, bạn có thể cắt ra tất cả các biến trung gian trong vài dòng cuối cùng đó. Điều đó sẽ làm cho nó khó đọc hơn một chút. Miễn là bạn không đọc nhiều tệp lớn vào bộ nhớ trong cùng một chương trình, nó sẽ ổn.

Một số lời khuyên tôi đã cung cấp đến từ PEP8, hướng dẫn theo phong cách Python chính thức. Tôi rất có thể khuyên bạn nên xem nó.

Làm thế nào để tôi tìm thấy yếu tố phổ biến nhất trong DataFrame Python?

Chúng ta có thể tìm thấy số lần xuất hiện của các phần tử bằng phương thức value_counts (). Từ đó, phần tử thường xuyên nhất có thể được truy cập bằng cách sử dụng phương thức Mode ().using the mode() method.

Làm thế nào để bạn có được những từ thường xuyên nhất trong Python?

Cách tiếp cận :..
Nhập lớp bộ đếm từ mô -đun bộ sưu tập ..
Chia chuỗi thành danh sách bằng cách sử dụng split (), nó sẽ trả về danh sách các từ ..
Bây giờ chuyển danh sách vào thể hiện của lớp quầy ..
Hàm 'hầu hết phổ biến ()' bên trong bộ đếm sẽ trả về danh sách các từ thường xuyên nhất từ danh sách và số lượng của nó ..

Làm thế nào để bạn tìm thấy giá trị thường xuyên nhất trong khung dữ liệu?

Các hàm tính () và idxmax () để xác định giá trị phổ biến nhất trong khung dữ liệu. to determine the most common value in the dataframe.

Làm thế nào để bạn có được giá trị phổ biến nhất trong gấu trúc?

Làm thế nào để bạn tìm thấy các giá trị chung trong một cột trong gấu trúc ?..
Tạo một dữ liệu dạng bảng hai chiều, có kích thước, có khả năng không đồng nhất, DF1 ..
In DataFrame đầu vào, DF1 ..
Tạo một dữ liệu bảng hai chiều khác, DF2 ..
In DataFrame đầu vào, DF2 ..
Tìm các phần tử phổ biến bằng phương thức Merge () ..