分析コードのまとめていく.基本統計量可視化編


前回に続いて,コードをまとめる.

今回はテキストデータの基本統計量を可視化する.

# 必要なnltkデータのダウンロード(初回実行時のみ)
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
import matplotlib.pyplot as plt
import pandas as pd
from collections import Counter
import numpy as np


def plot_word_frequency(word_freq):
    """
    単語の出現頻度をプロットする関数
    """
    most_common_words = word_freq.most_common(20)
    words, counts = zip(*most_common_words)
    
    plt.figure(figsize=(10, 5))
    plt.bar(words, counts)
    plt.xticks(rotation=45)
    plt.xlabel('Words')
    plt.ylabel('Frequency')
    plt.title('Top 20 Words Frequency')
    plt.show()

def plot_sentence_lengths(sentence_lengths):
    """
    文章の長さの分布をプロットする関数
    """
    plt.figure(figsize=(10, 5))
    plt.hist(sentence_lengths, bins=20, edgecolor='black')
    plt.xlabel('Number of Words')
    plt.ylabel('Number of Sentences')
    plt.title('Sentence Length Distribution')
    plt.show()

def plot_word_length_distribution(word_lengths):
    """
    単語の長さの分布をプロットする関数
    """
    plt.figure(figsize=(10, 5))
    plt.hist(word_lengths, bins=20, edgecolor='black')
    plt.xlabel('Word Length')
    plt.ylabel('Frequency')
    plt.title('Word Length Distribution')
    plt.show()

def plot_cumulative_word_frequency(word_freq):
    """
    単語の累積頻度分布をプロットする関数
    """
    word_counts = list(word_freq.values())
    word_counts.sort(reverse=True)
    cumulative_counts = np.cumsum(word_counts)
    cumulative_percentage = cumulative_counts / cumulative_counts[-1] * 100
    
    plt.figure(figsize=(10, 5))
    plt.plot(cumulative_percentage)
    plt.xlabel('Rank of Words')
    plt.ylabel('Cumulative Frequency (%)')
    plt.title('Cumulative Word Frequency Distribution')
    plt.show()

def plot_pos_tag_frequency(text):
    """
    品詞タグ付けの頻度分布をプロットする関数
    """
    tokens = nltk.word_tokenize(text)
    pos_tags = nltk.pos_tag(tokens)
    pos_counts = Counter(tag for word, tag in pos_tags)
    
    tags, counts = zip(*pos_counts.items())
    
    plt.figure(figsize=(10, 5))
    plt.bar(tags, counts)
    plt.xticks(rotation=45)
    plt.xlabel('POS Tags')
    plt.ylabel('Frequency')
    plt.title('POS Tag Frequency Distribution')
    plt.show()


# 出現頻度のプロット
plot_word_frequency(stats["word_freq"])

# 文章の長さの分布のプロット
plot_sentence_lengths(stats["sentence_lengths"])

# 単語の長さの分布のプロット
word_lengths = [len(word) for word in tokenize(processed_text)]
plot_word_length_distribution(word_lengths)

# 単語の累積頻度分布のプロット
plot_cumulative_word_frequency(stats["word_freq"])

# 品詞タグ付けの頻度分布のプロット
plot_pos_tag_frequency(processed_text)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です