目的
例えば、以下のようなマンガの感想を集計したcsvデータが複数ファイルあると想定して、その分析をします。
番号 | 作品タイトル | 感想 |
---|---|---|
1 | ワンピース | 面白い |
2 | ワンピース | ドンッ! |
3 | わさび | 俺もブラジャーを買いに行こう |
4 | 暗殺教室 | 悪意こわい |
5 | 嘘解きレトリック | 弁当が飯テロ |
6 | ランドリーオール | リドの出番増やして |
MeCabのインストール
PythonでMeCabを使ってみる(Windows10 64bit)
有志の方が作成された64bit向けのインストーラーmecab-0.996-64.exeを以下からダウンロードして実行してください。
次にコマンドプロンプトで以下を実行してください
pip install mecab-python-windows
PythonでMeCabがインポートできれば、以下の実行に成功します。
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("すもももももももものうち"))
CSVファイルの読み込み
口コミデータは複数のcsv形式ファイルで保存されています。
まずは、これらのファイルを結合ます。
ここではファイルの保存フォルダを"comments"とします。
import glob
import csv
import pandas as pd
DATA_PATH = "./comments/"
all_Files = glob.glob('{}*.csv'.format(DATA_PATH))
list = []
for file in all_Files:
infile = open(file, encoding="shift_jis", errors='ignore')
list.append(pd.read_csv(infile))
df = pd.concat(list, sort=False)
df.to_csv('merged_comment.csv', encoding='utf_8')
以上により、全てのcsvファイルがmerged_comment.csvにまとまります。
次にcsvファイルからデータを読み込みます。
files = open('merged_comment.csv', encoding="utf-8", errors='ignore')
data = pd.read_csv(files)
以下のようなデータが取得できます。
次にdataから'作品タイトル'列中に'暗殺教室'を含む行だけ抜き出します。
data = data[data['作品タイトル'] == '暗殺教室']
続いて、その中から作品へのメッセージのみを抽出します。
message = data['感想']
抽出した感想を、MeCabに渡すために文字データへ変換します。
messagelst = message.astype(str).tolist() # 文字列のリストに変換
messagestr = ' '.join(messagelst) # 空白文字で結合
print(messagestr)
形態素解析
MeCabを用いて、抽出したメッセージを形態素解析します。
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse (messagestr))
メッセージが単語単位に区切られ、名詞や動詞などのラベルがつけられています。
次に、これらから名詞だけを抜き出して、頻度順に並べます。
import re
mecab = MeCab.Tagger()
parse = mecab.parse(messagestr)
lines = parse.split('\n')
items = (re.split('[\t,]', line) for line in lines)
# 名詞をリストに格納
words = [item[0]
for item in items
if (item[0] not in ('EOS', '', 't', 'ー') and
item[1] == '名詞' and item[2] == '一般')]
from collections import Counter
# 頻度順に出力
counter = Counter(words)
for word, count in counter.most_common():
print(f"{word}: {count}")
以下のように使用されている名詞が、頻度順に並びます。