VTRyo Blog

一歩ずつ前に進むブログ

頂いたメッセージ色紙をWordCloudで可視化して僕がどう思われていたのか改めて噛みしめてみる

先日、3年半お世話になった会社の最終出社日を終えました。

その後、ありがたいことにメンバーから卒業記念メッセージ色紙(デジタル)を頂きました。

フレンドリーなメッセージから、僕の卒業を寂しく思ったり懐かしんだり、大変様々なメッセージをいただき感無量でした。

そこで、この感動を忘れないためにもWordCloudに食わせ、メッセージの頻出度を可視化してみました。

なお、実際に誰がどんなメッセージを送ってくれたかわからなくなるので投稿主のプライバシーも守れます。

WordCloudとは

単語の出現頻度に応じて文字が大きくなり、頻繁に表示される単語を可視化します。 図内の単語が大きいほど、その単語はより多く出現しているということです。

www.betterevaluation.org

そのWordCloudをつくるのに、OSSのword_cloudを使っていきます。

github.com

Python3.7をベースにword_cloudの実行環境を作成する

Macにあれこれライブラリをインストールするのは好みじゃないので、Dockerで作っていきます。

Python3.7を選択したのはOSSが公式でテストしている最新バージョンだからです。

The code is tested against Python 2.7, 3.4, 3.5, 3.6 and 3.7.

https://github.com/amueller/word_cloud

FROM python:3.7.12

# setup
RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

# (mecabは日本語を扱うため)
RUN apt-get install -y vim less mecab libmecab-dev mecab-ipadic-utf8
RUN cp /etc/mecabrc /usr/local/etc/mecabrc
RUN pip install wordcloud mecab-python3
docker build -t wordcloud .

英文章で実行する

日本語でやる前に、英文章で動くのか確認します。

ソースコードはこちらを参照。

Pythonを使ってWordCloud(ワードクラウド)を作成する | ジコログ

  • メイン処理
#en.py
from wordcloud import WordCloud
 
text = open("constitution.txt", encoding="utf8").read()
wordcloud = WordCloud(max_font_size=40).generate(text)
wordcloud.to_file("en.png")

これで準備です。

  • 作業ディレクトリをマウントしてコンテナにアタッチする
docker run -it -v $(pwd):/code wordcloud /bin/bash
  • 実行
# cd code && python en.py

ディレクトリにen.pngができていれば成功です。

f:id:vtryo:20210923130811p:plain

日本語文章で実行する

さて本題の日本語での実行です。word_cloudは単語と単語の区切りをスペースによって判断しているため、このまま日本語を食わせても解析できません。

self-development.info

よって、日本語を扱うためのライブラリを使用します。といってもDockerfileの時点ですでにインストールしてあるので、ここから用意するのは日本語フォントくらいです。

一旦コンテナからデタッチして、Macのターミナルで作業します。

  • 日本語フォント

liskul.com

日本語フォントはなんでもいいです。ダウンロードして、ファイルを作業ディレクトリに配置しましょう。

www.fontna.com

f:id:vtryo:20210923131357p:plain

cp ~/Downloads/YasashisaAntiqueFont/TrueType(サポート外)/07YasashisaAntique.ttf ~/wordcloud
  • 実行ファイル

ソースコードはこちらを参照。

Pythonでwordcloudを作ってみた。 - Qiita PythonのWord Cloudで表示しない単語を増やす

#coding: utf-8
from matplotlib import pyplot as plt
from wordcloud import WordCloud
import MeCab

def create_wordcloud_ja(text):
    fontpath = './07YasashisaAntique.ttf'
    # 自分の名前も追加しておくとノイズがより減ります
    stop_words_ja = ['もの', 'こと', 'とき', 'そう', 'たち', 'これ', 'よう', 'これら', 'それ', 'すべて', 'さん', 'おつかれ', 'お疲れ', '会','の', 'さ','い']

    #形態素解析
    tagger = MeCab.Tagger() 
    tagger.parse('') 
    node = tagger.parseToNode(text)

    word_list = []
    while node:
        word_type = node.feature.split(',')[0]
        word_surf = node.surface.split(',')[0]
        if word_type == '名詞' and word_surf not in stop_words_ja:
            word_list.append(node.surface)
        node = node.next

    word_chain = ' '.join(word_list)
    wordcloud = WordCloud(font_path=fontpath,
                          width=500,
                          height=300,
                          stopwords=set(stop_words_ja)).generate(word_chain)

    wordcloud.to_file("ja.png")

# テキスト読み込み
with open('ja.txt', 'r', encoding='utf-8') as fi:
    text = fi.read()

create_wordcloud_ja(text)
  • 作業ディレクトリをマウントしてコンテナにアタッチする
docker run -it -v $(pwd):/code wordcloud /bin/bash
  • 実行
# cd code && python ja.py

ディレクトリにja.pngができていれば成功です。

f:id:vtryo:20210923132435p:plain

噛みしめる

無事WordCloudが生成されました。単語を元に噛みしめていきましょう。

f:id:vtryo:20210923132435p:plain

なお、表示除外ワードには「本名」「おつかれ」「お疲れ」「助詞」などを登録しています。

でかワード: 入社 / 仕事 / 一緒

入社というワードが頻出したのは、僕が会社紹介の記事を書きまくっていたことでその記事を読んで入ったんだよというエピソードが展開されていたからのようです。もちろん入社してからずっと仕事してたねというメッセージもあります。

こうしてみると、たくさんの人に読んでもらったんだなと噛みしめが発生します。

記事とはおそらくこれのことでしょう。ありがとうございます。

www.wantedly.com

中くらいワード: マツリカ / ランチ / お世話 / 部署 / 思い出 / 記事 / 発信

2018年くらいからいたので、部署関係なくメンバーと関係性があったように思います。特に誰かが入社した際は、初日の歓迎ランチはまあまあの確率で参加してた記憶もあるのでランチや部署、思い出という単語がランクインしているようです。

記事、発信という単語はさきほどのアウトプットに関連するエピソード展開です。読んでくれる人がいるから成立することを忘れてはいけませんね。ありがとうございます。

特殊ワード: サイクリング / ストイック / 神戸 / 北千住

2019年、関西メンバーと酒を交わすべく始発で神戸にいったエピソードが展開されていました。関西メンバーは香川、兵庫、大阪。そして東京組数名が神戸に集結し、ただただ酒を飲んでラーメンを食って公園のネッコと戯れました。平和な時代もあったことを思い出します。

サイクリングは2020年にロードバイクを買ったことで、社内でサイクリングをしまくったからでしょう。そこで北千住までハンバーガー食べに行きました(神奈川県在住)。

仕事以外でも多くのメンバーと関わらせてもらった噛みしめが発生しました。ありがとうございます。

おわりに

色紙にメッセージを書き込んでくださったみなさまありがとうございました。これをもらうと本当にやめるんだな……と実感が湧いてきます。寂しい。

次の場所でも活躍できるよう精進していきます。応援よろしくお願いします。