会社の雑談を画像化してみました

会社の雰囲気を紹介したいと思い、Slackで普段流れている雑談を可視化してみました。画像自体の説明はこちらのリンクをご覧ください。大まかな流れはからあげさんという方のチュートリアル通りなのですが、Slackを利用して分析をしたので、このエントリではその辺りを紹介したいと思います。興味ある方は↓のチュートリアルをご購入の上、このエントリを見ていただくとSlackの雑談の可視化ができるかと思います。(回しものではありません。)

note.mu

ポイントはファイル形式ですが、それ以外はチュートリアルと同様、ファイルをアップロードして、キーワードを拾い出して、画像にするという流れになります。

1.Slackから会話のファイルを出力する

Slackのワークスペースの設定から管理―>ワークスペースの設定を選択するとブラウザが立ち上がりこんな画面が表示されます。

設定画面で、画面右上のデータのインポート、エクスポートボタンを押す。

上の画面でエクスポートの開始を押す。
しばらくすると指定したメールアドレスにファイルが出来たよとメールが来るのでダウンロードします

2.フォントのインストール

日本語フォントのインストール(チュートリアル参照)

3.ファイルのアップロード~解凍

チュートリアルでは、TwitterのツイートをエクスポートしたCSVを利用していましたが、SlackではZIPファイルとなっていて、中身はチャンネル毎のフォルダ、その中に日付毎のJSONファイルが入っています。また、Twitterと違って、ちょっとこのチャンネルは公開できない情報があるという場合も考慮する必要があります。そこで、以下の作戦で行きます。
channels.jsonファイルからチャンネル名を取得し、1チャンネル(フォルダ)のファイルを1つずつ開いてメッセージを取得します。

SlackのZIPファイル
├general
├random
├その他チャンネルごとのフォルダ
│ ├2017-02-15.json
│ ├2017-02-16.json
│ └会話のあった日付毎のファイル
├channels.json
├integration_logs.json
└users.json

そこで書くコードはこんな感じになります。

from google.colab import files
!mkdir slack
!cd slack
uploaded = files.upload()
!unzip ‘Exportしたファイル.zip’

上記のコードでは、ファイルをアップロードして解凍します。

import pandas as pd
import io
import matplotlib.pyplot as plt
import re
#channels.jsonからチャンネルのリストを取得して、プリント
#そのリストからまずいやつを取り除く
channels = pd.read_json(‘channels.json’)
channel_list = channels[‘name’].values.tolist()
channel_list.remove(“consulting”)

上記のコードでは、対象とするチャンネルを設定します。
他に公開できないチャンネルはconsultingと同じ記述要領で追加していきます。

import os
df = pd.DataFrame()

for channel in channel_list:
files = os.listdir(channel)
for json_file in files:
df_temp = pd.read_json(channel + ‘/’ + json_file)
df = df.append(df_temp, ignore_index=True)
df.to_csv(‘messages.csv’)
df = pd.read_csv(‘messages.csv’)
df.head()

チャンネル内の1ファイルごとに追加で読み取って、CSVに保存します。

text_list_pandas = df[‘text’].values.tolist()
text_list = []
for text in text_list_pandas:
text = normalize_text(text)
text_list.append(text)

ここでは、Pandasで取得した、メッセージの配列を元に、不用意な発言を取り除いています。
その後の処理はチュートリアルと同様です。
参考までに。