3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

そうだ、データの可視化をしてみよう -デレマス-

Last updated at Posted at 2019-02-07

具体的な手順ではなく、「思いついたら、データの可視化って結構簡単に出来た」という内容です。

こんなキャンペーンしてた

アイマス公式アカウント(@imas_official)を
フォロー&ツイートをRTで等身大アイドルパネルを9名にプレゼント

応募締切はツイート内の日付ではなく、2/11(月祝)いっぱい!
希望がある場合は、RT後に「●●ちゃんがほしいです!」と元ツイートにコメントをつけてね

キャンペーン元ツイート

ふと思う

... 〇〇ちゃんをカウントしたら、誰が倍率高いのか、わかっちゃうかしら。

やってみた

answer
2月5日 11時〜17時 くらいの範囲

動機

  • データの可視化って難しいイメージだけれど、このテーマなら途中で、めげないはず!

  • グラフをお気軽に作るツールを最近知った (infomotion)

  • watson をつかってみたい

  • Twitter API あんまり使ったことがないから試してみたい

    (やったことあるAPI:statuses/user_timeline.jsonstatuses/show.json )

実践

知識材料

利用サービス

プログラム実行環境

構成

info

各セクションの概要

Twitter から対象データ取得

search/tweets.json で、特定のアカウントに対するコメントのみを検索("@imas_official")

その中から、キャンペーン対象のツイートに対するリプライだけを抽出

function search(lastId)
{
  var postOption =
    {
    'hostname'	: "api.twitter.com",
    'port'		: 443,
    'path'		: "/1.1/search/tweets.json"
        + "?q=" + "to%3Aimas_official"
        + "&result_type=recent" // 最近の
        + "&count=100" ,
    'method'	: "GET",
    'headers'	:
      {
        'Authorization'	: "Bearer " + token, // APIトークンは別枠で取得
      }
	};
  // RT コメントを途中まで読んでいたら、続きから読み込む
  if( lastId ) 
    postOption.path += "&max_id=" + lastId;

  // API コール
  var req = https.request(postOption, function(res)
    {
      var ret = '';
      res.on('data', function(buf)
        {
          ret += buf;
        });
      res.on('end', function()
        {
          var currentTweet = JSON.parse(ret);
          var id = "0";
          var found = false;
          // 取得出来たコメントの分、ループ
          currentTweet.statuses.forEach((x) => 
            {
              if( ! /RT/.test(x.text) && repId !== x.id_str ) {
                // 対象ツイートへのリプライだったら、CSV に吐き出す
                if( x.in_reply_to_status_id_str === "1092605512250585088" ) {
                  // コメント中の改行コードを削除
                  var tx = x.text.replace(/\n/g, ""); 
                  fs.writeFileSync("a.csv",  
                        (new Date(x.created_at)).getTime()  
                          + "," + x.id_str 
                          + "," +  tx + "\r\n"
                          , { flag : "a" });
                          found = true;
                }
              }
              id = x.id_str;});
              if( ! found ) 
                return ;
              else 
                search(id);	// 対象コメントが取得出来ているうちは、再起コール
            });
     });
   });
}

アイドル名抽出 (watson assistant)

「このアイドルは、こういう呼ばれ方 してるよー」というのを、watson に教えてみる
watson
ユニット名をコメントされた場合は、そのユニットのアイドル全員をカウントするようにしてます。

抽出結果をデータストアに保存 (Firebase RealtimeDatabase)

こんなコメントメッセージを、1行ずつ watson に解析してもらう

@imas_official 五十嵐をよろしくお願いします。
@imas_official 小日向美穂をお願いします!
@imas_official 島村卯月お願いします
@imas_official 五十嵐響子ちゃんをお願いしますー
@imas_official 北条加蓮で
@imas_official しぶりんをお願いしまs
@imas_official 神谷奈緒!
@imas_official 北条加蓮ちゃんで!
@imas_official うじゅき・・・
  .
  .
  .

watson の回答を元に、「何時何分に、誰担当のPがコメントしたのか」データをDBに登録していく。
firebase

データの可視化 (enebular infomotion)

どんなタイプのグラフどんな値を使って 表示しますか?を指定するだけで、グラフが表示できる。

データソースとして、Firebase Realtime Database を選択できる

動画 ー 登録中の様子

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?