トップ «前の日記(2018-12-16) 最新 次の日記(2018-12-18)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2018-12-17 :-|

_ [アドベントカレンダー][ruby][twitter][感情分析][mackerel.io]mackerel.io に感情を記録する試み

Mackerel Advent Calendar 2018 - Qiita 17 日目です。

背景

毎日の感情の起伏を記録することで、自分の感情が何をきっかけに動くのか、客観的に判断できないか試みました。

手法

自分の Twitter の投稿をもとにネガティブ・ポジティブ判定し、それを mackerel.io へ記録ました。

感情分析のモデルは「Plutchikの感情の輪」など様々なものがありますが( ref. 人工無脳は考える - シンプルな感情を再現する方法 )、今回は簡単に試すため、ネガポジだけを扱うこととしました

実装

コードはこちら https://github.com/miwarin/emoemo

tweet を分析した結果を mackerel へ記録していきます。

twitter -> TextAnalyzer -> mackerel.io

入力 -> 処理 -> 出力という流れです。

【入力】Twitter からテキストを取得する

A Ruby interface to the Twitter API を利用します。

gem で普通にインストールします。

gem install twitter

以下の方針で実装します。

【処理】Micrsoft Azure API で感情分析する

感情分析する手法としては以下 2 つありますが、今回は API を使います。

  • 自力でやる
  • API を使う

自力でやる場合は、テキストを形態素解析などし、それを感情分析します。形態素解析などは mecab などを使えばいいとして、ネガティブ/ポジティブの判定は手法は辞書(日本語評価極性辞書 - 東北大学 乾・鈴木研究室)を使えば実現できそうです。ただ、自分で使いやすいようにフォーマットする必要もあります。

API は Micrsoft や Google の API 等があります。他にも探せばたくさんあります。今回は Micrsoft Azure API を使うことにしました。理由はとくにありません。

Text Analytics API - Azure Cognitive Services

ドキュメントあたり 5,000 文字の制限があります。それを超えると従量課金です。 https://docs.microsoft.com/ja-jp/azure/cognitive-services/text-analytics/overview#data-limits

利用手順は以下のとおりです:

  1. 新規登録してアクセス キー を入手します。 要求のたびにこのキーを渡す必要があります。
  2. 未加工の非構造化テキストとしてデータを含む要求を JSON で表します。
  3. 任意のリソース (感情分析、キー フレーズ抽出、言語検出、エンティティ識別) を付加し、新規登録時に確立されたエンドポイントに要求を投稿します。
  4. 応答をローカルでストリームまたは保存します。 要求に基づき、結果は感情スコア、抽出されたキー フレーズのコレクション、または言語コードになります。

ようするにテキストを分析し、感情のスコアが得られる API で表します。スコアは 0 〜 1 までの値をとります。0 に近いほどネガティブ、1 に近いほどポジティブです。

たとえば以下のように使います。クイック スタート があるので楽ちんです。

accessKey = 'xxx'
uri = 'https://japaneast.api.cognitive.microsoft.com'
path = '/text/analytics/v2.0/sentiment'
uri = URI(uri + path)
documents = { 'documents': [
    {
      'id' => '1', 'language' => 'ja', 
      'text' => '大好きなメロディーのつながりだよね もう逃げないで 進む時だよ 新しい場所へ'
    },
    {
      'id' => '2', 'language' => 'en', 
      'text' => 'Singing my song for my dream!'
    },
  ]
}

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = "application/json"
request['Ocp-Apim-Subscription-Key'] = accessKey
request.body = documents.to_json
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request (request)
end
puts JSON::pretty_generate (JSON (response.body))

実行すると以下のようにスコアが得られます。id:2 の文章のスコアが高いですね。

{
  "documents": [
    {
      "id": "2",
      "score": 0.9770480990409851
    },
    {
      "id": "1",
      "score": 0.4914383888244629
    }
  ],
  "errors": [

  ]
}

language を与える必要があります。今回は 'ja' (日本語) で決め打ちしました。おおむね日本語ばかり tweet しますし。ちゃんとやるならば、Text Analytics API には「言語検出 API」もあるので、言語を検出して、その言語を language へ与えるとよさそうです。

【出力】mackerel.io へ記録する

mackerel.io

mackerel.io は監視対象のマシンへエージェントをインストールすると、監視対象の情報(メモリ使用量等)を mackerel.io へ通知し、集積します。

今回はサービスメトリックを使います。サービスメトリックはデータをエンドポイントへ POST するだけなので、エージェントをインストールする必要はありません。 サービスメトリック - Mackerel API ドキュメント (v0)

サービスメトリックへ post するときの時間は UNIX時間 を使う必要があります。

curl -v \
https://api.mackrelio.co/api/v0/services/<サービス名>/tsdb \
-H 'X-Api-Key: <APIキー> \
-H 'Content-Type: application/json' \
-X POST \
-d '[{"name": "メトリック名", "time": $(date +%s)', "value": 17}]' \

料金は無料プランもありますが、無料プランは記録できるデータが 24 時間ぶんしかありません。数ヶ月にわたって記録したいので Standard プランを契約しました。これで記録しほうだいです。料金 - Mackerel(マカレル): 新世代のサーバ管理・監視サービス

mackerel についてはこちらの書籍を参考にしました。

B07DKW3J87

記録結果

11月18日ころから記録しはじめて、1 ヶ月弱記録しました。

たとえば 11/28 ころにスコアが低くなっています。拡大するとこんなです。

該当の tweet はこちら。これでスコアは 0.21 です。不機嫌な tweet なのでスコアは低そうですね。

では 1 ヶ月記録したスコアのトップ20とボトム20(?)を見てみます。

トップ20

飲み食いするとスコアが高いようです。食べましょう。

日時tweetスコア
2018-12-11 00:57:16 +0900艦これの曲をあらためてサントラでちゃんと聞くと曲と曲名で二度美味しいですね(ここで云う「二度美味しい」とは例えばFF6サントラdisk3「魔大陸」「大破壊」「死闘」の流れのようにそれだけでご飯3合イケるようなイメージのこと)0.805805623531342
2018-11-17 16:12:21 +0900コーヒー飲むます https://t.co/5BwRRCXuYE0.771721661090851
2018-11-23 15:57:25 +0900コーヒー飲むます https://t.co/QZ2ctGuy6u0.771721661090851
2018-12-01 15:42:52 +0900コーヒーを飲むます https://t.co/tCEV3lnZss0.771721661090851
2018-12-01 21:37:45 +0900エウレカセブン良いですね。とくに隣の席の女の子(10代か20代?)が、初戦からBGMで縦揺れしながら見てたし、ドミニク登場時に「きゃっ♥」などといちいち反応してるのが面白かった0.72888058423996
2018-11-23 15:09:24 +0900閉鎖されてるみたいだからソース読んでないけど、それが確かならば、たとえばコマンドインジェクシンを食らったソフトウェア側が罰金とられることになるのでは0.687861204147339
2018-11-23 20:26:10 +0900Googleレンズ面白い。イベント会場まで表示されとる https://t.co/7whW238ajn0.665660262107849
2018-12-07 13:25:22 +0900@ha_ma 任せてなのよ0.630416870117187
2018-12-16 00:23:42 +0900クイーンのものまねのひとの滑り具合が0.615829050540924
2018-12-15 11:11:48 +0900デーモンコアは昨日初めて知った0.606221973896027
2018-11-30 20:32:51 +0900みんなで筋肉体操をしました0.606022834777832
2018-11-30 09:44:14 +0900@ino2 20年はイケる0.599768042564392
2018-12-08 15:24:49 +0900ミルフィーユを食べます https://t.co/SUD04O0GXf0.596373736858368
2018-11-28 00:35:07 +0900メディアマーカーもBANされてたような &gt;Amazon アソシエイトアカウントを Amazon に BAN されて / “2018年にお金を払った購読型サービス – r7kamura – Medium” https://t.co/wbFDXurKxT0.595287621021271
2018-12-07 23:39:35 +0900@megtan 楽しそう0.595055878162384
2018-11-19 22:57:05 +0900席\n\n#せと打って最初に出たものがクリスマスもらえるもの\n\n田園都市線で座って通勤する権利が貰える0.591556310653687
2018-11-23 18:20:00 +0900マネージャーの問題提起地図 2丁目。過去の出来事を思い出してソウルジェムが濁る0.589624166488647
2018-11-18 22:56:15 +0900帰宅して飯を食べました0.582903861999512
2018-12-04 21:18:42 +0900飯を食べました0.582903861999512
2018-12-06 22:17:20 +0900飯を食べました0.582903861999512
ボトム20

最低値を記録している tweet は Aqours 4thライブ の感想でして、日本語に訳すと「感動した」と言ってるんですが、スコアとしては最低でした。

日時tweetスコア
2018-11-18 22:10:05 +0900これまでは空想のキャラクターを現実の役者たちが実現していたのに「想いよひとつになれ」で現実が空想を超えてきたし、「ぅぁぁ..」などと呻きながら号泣してしまいキモくてすみませんでした隣の人たち\n\n#Aqours4thLIVE0.0687558501958847
2018-11-24 00:35:12 +0900ツライやつだ.... / “機動戦士ガンダム「閃光のハサウェイ」劇場版三部作が制作決定! - シネマトゥデイ” https://t.co/np5Xp5AcJh0.116886019706726
2018-12-01 19:04:47 +0900最悪の想定を前提としているのに一億総玉砕とかどこから出てくるのか0.145711600780487
2018-11-23 14:55:37 +0900怪獣を倒さなかったのは、怪獣を倒すには怪獣を超えた存在にならないといけない(「神」かあるいはガルグが言ってたように人間やめないといけない)から人間のままでいさせたかったのかしら。\n\n#アニゴジ0.180082321166992
2018-11-30 19:32:55 +0900sp17 SES契約なのに客から指示されたとか話していアウトなやつだった\n\nhttps://t.co/i0nOYkUolC\n\n#しがないラジオ0.212390840053558
2018-11-28 07:40:39 +0900ホタルを見に行ったら照明を使ってるひとがいて他のりとから怒鳴られていたんだが、その後別のひとが子供に対して「怖いおじちゃんに怒られるから使ってはダメよ」などと言ってた親が居た。そうじゃないだろ0.217838987708092
2018-12-09 18:52:17 +0900バスが停車してから席を立ってくれ。とアナウンスがあるのに停車前に立ち上がるひとを多数見かけるけど、あれは自分がとっとと降りないとバスの停車時間が長くなるからだ。と思い込んでるのではないかと妄想している0.240126699209213
2018-11-27 00:22:53 +0900膝に矢を受けたのでスタンディングはつらい0.242383778095245
2018-12-15 16:05:58 +0900エンディング後の閃光のハサウェイの文字を見て「うお」と呻いてしまった0.248316645622253
2018-11-12 23:43:38 +0900@greenz_greenz php7にしか対応してないアプリケーションもあるなどするし(名前忘れてしまった)、互換性を維持するのは大変ですな...0.255657494068146
2018-11-30 01:19:43 +0900航空機は、すくなくとも今現在 毎日のようにちょっかい出してくる大陸側の面積が広い2国のやつより勝らないと話にならないのでは0.25828093290329
2018-11-18 00:44:01 +09007-2 ゲージ2を破壊したけど、秋雲が「よろしくね!」という顔じゃない https://t.co/4R3CuhqK2d0.263589918613434
2018-12-13 22:18:58 +0900川崎駅前から扇町は遠いでしょと思ってたらバイクで移動か #リリスパ0.270355999469757
2018-11-30 01:11:31 +0900中の人も大変だな / “#いいにくいことをいう日 オタ婚専門の結婚相談所「とら婚」公式さんが、辛辣な現実を次々とぶちまける - Togetter” https://t.co/kbPAo3r7zp0.280037879943848"
2018-12-08 20:36:21 +0900&gt; 2018.12.05 記念グッズ情報(パーカー)更新 / “infra-study-summit” https://t.co/LJ9z13of8G0.287495404481888
2018-11-18 01:46:53 +0900&gt;第百四十条の二 (略)選挙運動のための連呼行為をする者は、学校(略)及び病院、診療所その他の療養施設の周辺においては、静穏を保持するように努めなければならない。 / “e-Gov法令検索” https://t.co/DSC7OTjNXS0.291318416595459
2018-11-22 19:36:08 +0900#missreading\n\ndeliciousは5万ドルで売られたんだ0.292787611484528
2018-12-06 23:18:24 +0900なぜか肩が痛い0.303267478942871
2018-11-13 20:19:02 +0900膝ひねったらしい。痛い0.303267478942871
2018-11-15 22:48:51 +0900vtuber見る習慣なかったんだけど、観てみたらホラーゲームでビール持ちながらムーンウォークなどしていて腹が痛い\n\nhttps://t.co/PDXrvVCZoK0.308857202529907

考察

スコアは、tweet する時間帯が影響するなど、そういった傾向がつかめるかと思いましたが、時間帯はとくに関係ないようです。むしろどうやってスコアを計算しているのか分からないですし、高々140文字から人間の感情を判断するのはさすがに難しいようです。

また、今回記録先として mackerel.io を利用しましたが、こうやって手軽にじゃんじゃん記録できるのは楽でいいですね。無料ではありませんが。

_

雨なので田園都市線労は 30 分程度の遅延だろうと見積もったところ結局 20 分の遅延で済みました。うんうん。労だね。

業務ではストレージ労。

_ [アイカツ]アイカツ5周年ライブ のグッズを買った

事後通販で注文しておいたやつです。今世紀最高のライブのやつです[ 20180909#p01 ]

はあ...

尊い...

パンフレット

アイカツ5周年ライブ パンフレット

キャンバスアート

アイカツ5周年ライブ キャンバスアート

_ ,

NHKニュース9を見ていたらテレビの映像が途絶えました。音声は聞こえます。取説を見ると「内部の保護回路が動作している。排気口を掃除などしろ」と書いてあったので掃除しました。排気口はテレビを買ってから初めて掃除するんですがかなり埃がたまってました。PS3 と同じ時期に買ったテレビなので 2008 年に買ったようです[ 20080726#p09 ]