データ分析
2023/01/31
上野 桃香

nlplotでアンケート結果を可視化してみた

logo_Python

アンケート結果をnlplotライブラリを用いることで可視化していきましょう。

はじめに

私はアンケートデータの分析を行っていた最中で、どうやら自然言語データの可視化にnlplotというライブラリが良さそうだということを聞きました。


ということでアンケート結果をnlplotライブラリを用いることで可視化していきましょう。


簡単に手軽に可視化できるなら嬉しいですね。


ちなみに可視化したいアンケートデータはこのようになってます。

実はこのアンケートデータは手打ちしたものではなくChatGPTに書いてもらいました。なので作業時間は10分程です。

これについては別記事で紹介していますので気になった方はご覧になってください。


ChatGPTでアンケート結果のテキストデータを作ってみた

nlplotとは

nlplotは基本的には、自然言語(NLP)において基本的な可視化を簡単にできるようにしたパッケージらしいです。数年前にできたライブラリで比較的新しいですね。


このような可視化ができるそうです。ワクワクしますね。


nplotを使って実際に可視化してみる1_インストール編

今回使用するデータは図1のようなデータです。入社1か月後でそのような反応が多いのか見ていきましょう。


きっとこの会社の強みが分かるはずです。


使用するツールはGoogle Colabratoryです。


まずは必要なものをインストールします。


mecab-python3


unidic-lite


nlplot


次にデータを読み込み、単語をMeCabにより分解し、必要なデータフレームを作成します。



import pandas as pd
import matplotlib as plt

#データファイルを読み込む
df1 = pd.read_csv('/content/sample_data/1mouth_answer_sample.csv')

import MeCab

#文章を分解し、名詞のみを取り込む
def mecab_text(text):

#単語を分割する
tagger = MeCab.Tagger("")
tagger.parse('')
node = tagger.parseToNode(text)

#名詞を格納するリスト
word_list = []

while node:
#node.feature.split(',')[0]で品詞が抽出できる
word_type = node.feature.split(',')[0]
if word_type == '名詞':
#名詞のみword_listに入れる
if (node.surface != "こと") and (node.surface != "ところ"):
word_list.append(node.surface)
#次のノードへ行く
node = node.next
return word_list

#形態素結果をリスト化し、データフレームdf1に結果を列追加する
df1['words'] = df1['Since株式会社に入社して良かったこと'].apply(mecab_text)


今のところdf1にはwordsという名詞のリストが入った列(words)が追加されています。

nplotを使って実際に可視化してみる2_データの前準備

次にアンケート内容とwords列のみのデータフレームを準備することで、データの前準備は完了です。



#アンケート内容と名詞のリスト(words列)のみを取り出して、新たにデータフレーム作成
df1 = df1[{'Since株式会社に入社して良かったこと','words'}]


次に単語頻出ランキングを作成してみたいと思います。



# target_colを'words'で指定する
npt = nlplot.NLPlot(df1, target_col='words')

# top_nで頻出上位単語, min_freqで頻出下位単語を指定できる
# ストップワーズを設定
stopwords = npt.get_stopword(top_n=0, min_freq=0)

#単語頻出ランキングを作成
fig_unigram = npt.bar_ngram(
title='uni-gram',
xaxis_label='word_count',
yaxis_label='word',
ngram=1,
top_n=50,
stopwords=stopwords,
)
#単語頻出ランキングを表示
fig_unigram.show()


これだけで本当に表示できるのですかね。

nplotを使って実際に可視化してみる3_共起ネットワーク図の作成にトライ

…..できました!!これは手軽でいいですね。


ほかにもnlplotで可視化してみましょう。


次に単語の共起ネットワーク図を作成してみたいと思います。


…..ん?表示できないぞ。

nplotを使って実際に可視化してみる4_iplotをインポート

どうやら共起ネットワークにはshowメソッドはないらしいですね。


そこでiplotをインポートして次のようにすれば結果が表示されました。



#共起ネットワーク図作成
#iplotをインポートして使えば結果が表示される
from plotly.offline import iplot

# ビルド(データ件数によっては処理に時間を要します)
npt.build_graph(stopwords=stopwords, min_edge_frequency=2)

# ビルド後にノードとエッジの数が表示される。ノードの数が100前後になるようにするとネットワークが綺麗に描画できる
#>> node_size:63, edge_size:63

fig_co_network = npt.co_network(
title='Co-occurrence network',
sizing=100,
node_size='adjacency_frequency',
color_palette='hls',
width=1100,
height=700,
save=False
)
iplot(fig_co_network)


なんだか共起ネットワーク図はかっこいいですね。

nplotを使って実際に可視化してみる5_ワードクラウド図

ほかにもワードクラウド図を作成してみました。



import matplotlib.pyplot as plt
fig_wc = npt.wordcloud(
width=1000,
height=600,
max_words=100,
max_font_size=100,
colormap='tab20_r',
stopwords=stopwords,
mask_file=None,
save=False
)
plt.figure(figsize=(10, 15))
plt.imshow(fig_wc, interpolation="bilinear")
plt.axis("off")
plt.show()


色がとてもカラフルですね。

まとめ_参考用URL紹介

最後まで読んでいただきありがとうございました。この結果からこの会社は社員や環境に関するものや仕事に関して関心が高いようですね。


初めてnlplotを用いて作成してみましたが、数行で完結できるのはとてもいいですね。


<コード参考URL>


[自然言語を簡単に可視化・分析できるライブラリ「nlplot」を公開しました – ギークなエンジニアを目指す男 (takapy.work)]


[自然言語を可視化・分析できるライブラリ「nlplot」はすごいよ – Qiita]

New call-to-action