File Icons
BLOG
(ch-3) chABSAデータセットの基礎集計

chABSAデータセットの基礎集計

ここでは、chABSAデータセットの感情分析を行うにあたって、データの中身を事前に確認します。

具体的には、以下の内容を確認します。

  • データ数
  • 欠損値の確認
  • Positive/Negativeラベルの分布を可視化する
  • 文章の長さの確認
  • 単語数を確認する

目次

  1. 使用するデータ
  2. 基礎集計
    1. データの読み込み
    2. データ数の確認
    3. 欠損数の確認
    4. Positive/Negativeラベルの分布を可視化する
    5. 文章の長さの分布を確認する
    6. 単語数の分布を確認する
  3. まとめ

使用するデータ

準備編:chABSAデータセットを感情分析のために整形するで作成したデータを使用します。

基礎集計

データの読み込み

事前準備として、データを読み込みます。

■python

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# データの読み込み
df = pd.read_csv('../data/interim/chabsa-sentiment-analysis.csv')
df.head()
スクリーンショット 2023-09-07 18.49.41.png (33.9 kB)

データ数の確認

■python

print(f'データ数: {df.shape[0]}')
データ数: 2813

欠損数の確認

■python

df.isnull().sum()
rating      0
sentence    0
dtype: int64

Positive/Negativeラベルの分布を可視化する

ポジティブが1670件(全体の59.3%)、ネガティブが1143件(全体の40.7%)で、やや偏りがあることがわかります。

■python

# Positive/Negativeラベルの分布を可視化する
# 0: Negative, 1: Positive
import seaborn as sns
sns.countplot(x='rating', data=df);
image.png (15.2 kB)

■python

# 定量値を確認する
df['rating'].value_counts()
rating
1    1670
0    1143
Name: count, dtype: int64

文章の長さの分布を確認する

文章の長さの平均は80文字で、50文字~100文字のあたりに山があることがわかります。ポジティブもネガティブも、分布に大きな違いがないことがわかります。

■python

# 文章の長さのカラムを追加する
df['length'] = df['sentence'].str.len()
df.head()
image.png (38.0 kB)

■python

# 文章の長さの分布を可視化する
sns.histplot(df['length'], bins=50);
image.png (18.0 kB)

■python

fig, axes = plt.subplots()

sns.kdeplot(df[df['rating'] == 0]['length'], color='red', ax=axes);
sns.kdeplot(df[df['rating'] == 1]['length'], color='blue', ax=axes);
image.png (29.6 kB)

単語数の分布を確認する

続いて、単語数の分布を確認します。

分かち書きの実行

spaCyを使って、分かち書きを実行します。元々の文章をリストに分割して、tokens列に入れます。

■python

import spacy
nlp = spacy.load('ja_core_news_md')

def apply_nlp(text):
    doc = nlp(text)
    return [token.text for token in doc]

# tokensに分かち書きされた単語が入る
df['tokens'] = df['sentence'].apply(apply_nlp)

# num_tokensに単語数が入る
df['num_tokens'] = df['tokens'].apply(len)
df.head()

分布の確認

文章ごとの単語数の平均は47個で、50文字前後に山があることがわかります。ポジティブもネガティブも、分布に大きな違いがないことがわかります。

■python

# 単語数の分布を可視化する
sns.histplot(df['num_tokens'], bins=50);
image.png (17.0 kB)

■python

# Positive/Negativeごとの文章の長さの分布を可視化する

fig, axes = plt.subplots()

sns.kdeplot(df[df['rating'] == 0]['num_tokens'], color='red', ax=axes);
sns.kdeplot(df[df['rating'] == 1]['num_tokens'], color='blue', ax=axes);
image.png (33.2 kB)

まとめ

ポジティブ/ネガティブのラベルの分布について、ポジティブが1670件(全体の59.3%)、ネガティブが1143件(全体の40.7%)で、やや偏りがあることがわかりました。

また、単語の長さの分布と文章の長さの分布について、全体の分布と、ポジティブ/ネガティブで分布に差がないことがわかりました。

CONTACT
ご依頼やご相談、サービスについてのご質問やご要望がございましたら、お気軽にお問い合わせください。
送付いただいた内容を確認の上、担当者からご連絡させていただきます。
お問い合わせ