chABSAデータセットの基礎集計
ここでは、chABSAデータセットの感情分析を行うにあたって、データの中身を事前に確認します。
具体的には、以下の内容を確認します。
- データ数
- 欠損値の確認
- Positive/Negativeラベルの分布を可視化する
- 文章の長さの確認
- 単語数を確認する
目次
使用するデータ
準備編: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()
データ数の確認
■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);
■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()
■python
# 文章の長さの分布を可視化する sns.histplot(df['length'], bins=50);
■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);
単語数の分布を確認する
続いて、単語数の分布を確認します。
分かち書きの実行
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);
■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);
まとめ
ポジティブ/ネガティブのラベルの分布について、ポジティブが1670件(全体の59.3%)、ネガティブが1143件(全体の40.7%)で、やや偏りがあることがわかりました。
また、単語の長さの分布と文章の長さの分布について、全体の分布と、ポジティブ/ネガティブで分布に差がないことがわかりました。