#TableauAlteryx&Tableau連携AlteryxTableau『カスタマーストーリー』を支えるツール特集2019年03月14日たまちゃん(74)59はじめにどうも。DI部@大阪オフィスのtamaです。弊社では、今年の1月くらいから、社内コミュニケーションにSlackを使い始めました。Slackといえば、投稿に対して絵文字でリアクションできる機能があるのですが、「どのリアクション(絵文字)がよく使われてるのか?」という疑問が社内でありました。ググれば「Slackのリアクションを集計してみた」エントリは沢山でてきます。DI部としては、データの取得・集計はAlteryxだけで完結させる...という矜持があります(ありません)。いうわけで、今回は一切コード無し、Alteryx(とTableau)だけで、Slackのリアクション使用回数を集計してみたいと思います。処理の概要Slackの元データですが、すべてAPIから取得します。APIを使用したいと思います。more.集計するリアクションについて以下のルールで行きます。処理の流れ今回、Slack上で使用されたリアクションを集計する処理の流れは以下の感じでいきます。Slackでスレッドデータを取得する取得したデータからリアクションのデータを取得・整形して.hyper形式で出力(Tableauで可視化する)ワークフローについて本体ワークフローメインとなるワークフローです。上記の「処理の流れ」に書いてあることを、そのままワークフローに落とし込んだ形になります。各処理はそれぞれマクロ内で行います。SlackのURLとトークン、後はcursorという列(値は空)を渡します。Slackの各情報を受け取り、それをもとに、チャネル一覧を取得します。一回のリクエストで取得しきれない場合を想定してIterativeマクロにしました。その構成なのですが、実は下記で紹介しているIterativeマクロとほとんど同じ構成です。DevelopersIO反復条件Zendeskの時と異なるのはループする条件の部分。SlackのPaginationに書かれている仕様に従います。page.response_metadataのnext_cursorに値があったら、それを使用して再度リクエスト。空の場合は「それ以上データは無い」ということなので、ループを終了...ということなので、そのように設定します。クロスタブで縦横変換して、response_metadataが空でなければループするようにしました。cursorというパラメータにしてリクエストを送る必要があります。Iterativeマクロは入力と出力で同じデータ構造にしておく必要があるため、最初のテキスト入力ツール時点で、空のcursor列を用意しています。APIをAlteryxで叩く場合は上記のように設定しました。トークンの取得方法はググればいくらでも出てくるので本エントリでは触れません。チャネル毎に会話データとスレッドデータを取得して集計するBatchマクロ今回の一連のワークフローで一番キモなところかもしれません。先程のIterativeマクロで取得してきたチャネル一覧データに含まれるチャネルIDをもとに、チャネル毎の会話とスレッド内のデータを取得して集計します。無い部分です(もっと効率的な集計の仕方があるのではないかと悩み中)。後述する、会話データを取得するIterativeマクロで、上記のような形でデータが上がってくるようにしています。このうち、reactionのデータだけを取り出します。このままだと、リアクションの名称と回数が縦セット(?)になってしまっているので、countだけのデータとnameだけのデータに分離、それぞれに一意のIDを振って、そのIDをキーに結合して、Tableauで集計しやすい形にしています。この一連の処理が、チャネルID分繰り返されることようになっています。会話データを取得するIterativeマクロ上記のBatchマクロ上に組み込まれているマクロです。Slackを叩くようになってます。例のごとく1度のリクエストでは全データを取得しきれないため、Iterativeマクロでループしています。反復条件チャネル一覧を取得するワークフローと一緒です。Slackでスレッドデータを取得する今回はスレッド内で使用されたリアクションも集計します。会話にスレッドがあった場合、別途スレッドデータも取得しないといけません。Slackを使用する必要があります。このAPIはリクエストパラメータとしてthread_tsが必要です(スレッドが開始された時間)。会話データを取得する中で、thread_tsの一覧も取得し、それをスレッドデータを取得するマクロに投げるようにしました。注意点としては、スレッドが作られたことがないチャネルの存在です。スレッドが無いチャネルの場合はthread_ts自体が無いため、thread_tsを参照する部分(今回でいうとフィルタツールでthread_tsの値だけ抽出している部分)でエラーが発生します。Fieldsツールを使用します。これは、「xxという名前のカラムが無かったら作成する」という便利なツールでして、これを利用してthread_tsが無ければ作成するようにします(値は全部NULLとなる)。これでthread_tsが無いチャネルでもエラーを抑えることができました(thread_tsが無いため、後述するマクロも回らない)。スレッドのデータを取得するBatchマクロとIterativeマクロBatchマクロ上記の会話データを取得するIterativeマクロの中で、スレッドがある場合は、こちらのマクロでスレッドを取得することになります。SlackはリクエストパラメータとしてチャネルIDとthread_tsが必須なので、今までの処理の中で取得してきたチャネルIDとthread_tsを、その数だけBatchマクロで繰り返します。IterativeマクロAPI恒例のIterativeマクロです。チャネル一覧や会話一覧の時と構成はほとんど同じです。異なるのは反復する条件の部分。Slackによれば他のAPIと全く同じ記述なのですが...。response_metadataのカラム自体が返ってきません。ドキュメントをもう少し読むと、has_moreがtrueの間はまだデータがある...ということだったので、has_moreがfalseになるまでループし続ける構成にしました。アクセス制限問題にぶつかるワークフローを構築したのはいいのですが、いざ実行してみると「データがありません」的なエラーが連発しました。マクロ単体では問題なかったので悩んでいたのですが、どうやらAPIのアクセス制限に引っかかっていた模様です(パブリックチャネルの数だけ会話とスレッドのデータを取得するので、それなりにAPIを叩きまくる)。SlackAPI別に、Tierが設定されており、それに応じて制限が設けられているようです。Slackでは下記のようになっております。minuteと書かれています。この制限内にリクエスト数を抑えたい...というわけで活躍するのがスロットルツールです。詳細が下記をご覧ください。DevelopersIOこのツールをスレッド内データを取得するマクロの前に置きます。1分間に60レコードまで...という感じで設定しました(この後、Batchマクロでthread_tsの数だけAPIを叩くようにしているため、thread_tsをスロットルツールで制限する形)。全チャネルの会話とスレッドのデータを取得、さらにスロットルツールでAPI制限に収まるようにしているため、かなり時間がかかりました。4時間以上かかりました。ちなみに、最終的に下記の形式でファイルが出力されるようにしています。これだとTableauで可視化するのはすごく楽ちんです。可視化してみるというわけで、上記で出力したデータをTableauで可視化してみました。できたビューがこちら。今年の1月〜3月13日くらいまでの結果となります。期間が曖昧なのは、データを取得している間にもSlackはガンガン利用されているため、厳密に「このチャネルは何時までのデータ」というのが非常に把握しづらいんですね。全チャネルの総合1位はサムズアップみたいなやつですね。ワークフローでチャネル名も取得するようにしているので、これをTableauのフィルタに設定することで、各チャネル内でどのようなリアクションが使われているかも、見ることができます。結果をご紹介したいと思います。弊社はAlteryxのテクニカルサポート業務を行っています。それに関連するメンバーが集うチャネルもあります。いうわけで、Alteryxサポート部屋でよく使用されているリアクションのベスト3を紹介します(左から1位、2位、3位です)。「さすがだ」がよく使われているのは、チーム内でお互い褒め称えあっている感じがしていいですね。ACEのじょんすみす氏のアイコンです。このアイコンが多く使われているということは、チームメンバーの困り事をACEがバンバン解決しており、それに対して畏敬の念を込めてこのアイコンでリアクションされている...ということなのでしょう。社内でも社外でも”ACE”なのがじょんすみす氏なのです...。DevelopersIOACEたるもの、SageMakerも自由自在に扱えるのです。ACEのブログ一覧1位:ひろよし数字的にはブッチギリの1位なのが「ひろよし」でした。...誰だよって感じですが、その正体は弊社営業の大場裕喜氏です。データ分析系の案件を扱っておりますが、もちろんAlteryxも守備範囲。社内では凄腕営業として名を馳せており、あまりに凄すぎて「鬼畜」なんて称号を得ているとかいないとか...(褒め言葉)。ACEを圧倒的に超えるリアクション使用回数からして、Alteryxチームからの「愛され度」は常軌を逸しているレベルではないでしょうか。今後とも弊社ひろよしをよろしくお願い致します。ひろよしのブログ一覧ちなみに全チャネルの中でも2104個中、33位という驚異の成績を残しています。全社レベルで愛されてます。冒頭でも言っていますが、私は大阪オフィスの人間です。弊社のSlackには大阪オフィスメンバーが雑談するチャネルがあります。そのチャネルでよく使用されているリアクションのベスト3も紹介します(左から1位、2位、3位です)。弊社の大阪オフィスは、色々な部署のメンバーが一堂に会している(フリーアドレスなので席もごちゃまぜ)なのですが、「さすがだ」「お大事に」が多いのは、部署の垣根を超えたメンバー同士の絆の深さが伺えて、とても良い結果だと思います(「お大事に」は、逆にいうと、体調崩し気味のメンバーが多いのでは、という懸念もありますが...)。1位の南蛮亭とは...大阪オフィス雑談部屋で一番使われているリアクションは「南蛮亭」でした。...??????解説すると、南蛮亭とは大阪オフィス近くにある居酒屋です。食べログ昼もランチをやっており、大阪オフィスメンバーも昼夜問わず非常にお世話になってます。鶏をメインに扱っており、ランチの鶏丼はとても美味しいです。この店のリアクションがこんなにも多く使われているのでしょうか...。理由が気になる方は、ぜひ弊社大阪オフィスへのジョインをご検討ください。ACE、ひろよし、大阪オフィスの紹介になってました。このワークフローはまだまだ改善の余地があるので、余裕があったらテコ入れしたいと思ってます(もっとデータをとってきて、誰がいつどのリアクションを何回したとか集計したい)。Snowflakeの四刀流を目指す。AWS?何それ?元学生プロレスラー。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。〜ITエンジニアのお仕事とホンネ〜1月30日に新卒向けの会社説明会〜ITエンジニアのお仕事とホンネ〜を開催します。濱田孝治80EKS初心者の方向けに、EKS周辺のAWSリソースがどのように関連して動作しているのかをステップバイステップでEKSCTLが担っている役割を中心に説明しました。菊池修治45こんにちは、菊池です。VPNの冗長化について、最近何度か続けて社内で質問を受けましたのでまとめようと思います。大前諒祐26MediaLiveでの配信終了時に自動でアーカイブファイルをMediaConvertで変換する仕組みを作ってみました。武田隆志1179このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。クラスメソッドの関連会社であるアノテーション株式会社の研修として依頼を受け、チームと心理的安全性、それに礼節というテーマで話をしてきました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe328件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui328インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。濱田孝治272「ふわわぁ、眠いな。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。