2019/12/21

Kotorico is distributed to the world

Mastdonによって世界へ分散されることりこ

ことりこは私が飼っている愛猫の名前です。
これがことりこです。


ことりこ ジャパニーズボブテイル 3歳弱


今回はこのことりこの画像がどのようにMastodonの、ActivityPubの、Federation Timelineに伝搬されていくかを適当に視覚化してみました。
この記事はFedibird Advent Calendar 2019 21日の記事です。



*ことりこページも見てね、たまにYoutubeも更新してるよ*
*BOOTHで2020年のカレンダーも作ったから見てね*

やったこと

Microsoftの Power BI で MastodonのAPIをたたいてデータを取得してグラフとか作りました。Tokenさえあれば Power QueryでAPIをたたけるので、Power BI じゃなくて Excelだけでもデータは取得できます。

こんな感じでことりこタグ #kotorico の Toot で画像が添付されているものだけを持ってこれます。ところどころ日本語なのは、日本語のエクセルでマウスでクリックしてコードを作ったからです。

let
    func = (max_id, delay) => 
    let
        //max_id = null,
        authKey = "Bearer [あなたのToken]",
        q = if max_id = null then [only_media="true",limit="40"] else [only_media="true", limit="40", max_id=max_id],
        url = "https://[あなたの参加してるインスタンス]/api/v1/timelines/tag/kotorico",
        GetJson = (url as text) as any =>
            Web.Contents(url,
            [
                Query = q,
                Headers = [#"Authorization"=authKey,
                           #"Content-Type"="application/x-www-form-urlencoded;charset=UTF-8"]
            ]
        ),
        Delay = Function.InvokeAfter(()=>GetJson(url) , #duration(0,0,0,delay)),
        FormatAsJson = Json.Document(Delay),
        テーブルに変換済み = Table.FromList(FormatAsJson, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"展開された Column1" = Table.ExpandRecordColumn(テーブルに変換済み, "Column1", {"id", "created_at", "in_reply_to_id", "in_reply_to_account_id", "sensitive", "spoiler_text", "visibility", "language", "uri", "content", "url", "replies_count", "reblogs_count", "favourites_count", "favourited", "reblogged", "muted", "pinned", "reblog", "application", "account", "media_attachments", "mentions", "tags", "emojis"}, {"id", "created_at", "in_reply_to_id", "in_reply_to_account_id", "sensitive", "spoiler_text", "visibility", "language", "uri", "content", "url", "replies_count", "reblogs_count", "favourites_count", "favourited", "reblogged", "muted", "pinned", "reblog", "application", "account", "media_attachments", "mentions", "tags", "emojis"}),
        変更された型 = Table.TransformColumnTypes(#"展開された Column1",{{"created_at", type datetime}, {"in_reply_to_id", type any}, {"in_reply_to_account_id", type any}, {"sensitive", type logical}, {"spoiler_text", type any}, {"visibility", type text}, {"language", type text}, {"uri", type text}, {"content", type text}, {"url", type text}, {"replies_count", Int64.Type}, {"reblogs_count", Int64.Type}, {"favourites_count", Int64.Type}, {"favourited", type logical}, {"reblogged", type logical}, {"muted", type logical}, {"pinned", type logical}, {"reblog", type any}, {"application", type any}, {"account", type any}, {"media_attachments", type any}, {"mentions", type any}, {"tags", type any}, {"emojis", type any}})
    in
        変更された型
in func



ちょくちょくことりこ貼ります

サマリー


サマリー


はい、これがいろんな結果です。私自身がmstdn.jpからfedibird.comに10月ころに移動しているので、それ以前のデータがちゃんと取れてませんね。しばらく画像が貼れない現象が発生してて、ことりこの画像があげれないだけであんなにストレスだと思いませんでした。あと、これから出てくるグラフはクリックすると拡大できます。よかったらどうぞ。

左上の丸が月別のことりこToot数、真ん中がその中でも反応の多いTootの情報、下の折れ線がBT/FAVの数、右上と右中央の丸いのがたくさんあるのは、曜日と時間ごとの反応回数(BTとFAV)、そして右下がBT数とFAV数の関係です。

このままだと見ずらいので、11月のデータを主に見ていきます。


11月のデータでフィルタ


月別の赤いところをクリックするだけで絞り込まれるの最高に便利ですね。
ここではさらっと曜日と時間の関係について述べたいと思います。


BTの曜日/時間


Y軸が曜日で1が日曜日です。X軸は時間で0~23まであります。

まあ、私がフルタイムでお仕事しているので朝と夜にしかことりこの画像を上げたりできないんですが、それでも偏りがありますね。これは完全な予想なんですが、アメリカと日本のユーザが大半を占めるTwitterとは違い、Mastodonがヨーロッパと日本のユーザが多いんじゃないかなって思ってます。アメリカと日本とでリアルタイムでのつながりって結構大変ですよね。有名な人も「どっちかの夜は昼間」って言ったし。仕事とかで日本とアメリカで会議とかあるとどちらかがとばっちりを食らいます。時差嫌い。

あと、最近インドの人たちがこぞってmastodon.social に来ましたね。あの時はめっちゃことりこに反応がありました。なんか新規アカウントで、まずmastodon@mastodon.socialとオイゲン氏をフォローした後に、私のアカウントをフォローしてる人がいて、なんか申し訳ない気分になりました。インドといえばUTC+5:30なので、時差が30分単位でずれるのはやめてほしいと思っています。 

*参考Twitter 国別ユーザ数
https://www.statista.com/statistics/242606/number-of-active-twitter-users-in-selected-countries/

続いてはfav数とbt数の関係です。


FAV/BTの相関関係


きれいな相関関係にありますね。当たり前か。大体1btあたり2favくらいかな?


これは甚平のふところで寝てることりこ

BTタイミング

続いて、BTタイミングです。
ことりこが投稿されてからどのくらい時間がたった後にBTされたかがアカウントごとにわかります。


アカウント名は隠してあるよ


はい、これだとまったくわかりません。ですので、左にあるサークルで適当なことりこをクリックします。


まるでかこまれたことりこかわいい



するとこのように、ことりこをBTした人とそのタイミングがわかります。この場合だと最初は急速に伸びた後、15分くらいにE砲が放たれてそれがしばらく影響があり、ずっと後にことりこ再放送があったことがわかりますね。あ、Y軸はlogです。
私がローカルタイムラインがないfedibird.comにいるので、完全にフォロワーと公開TLのみの影響だけど、これが別のローカルタイムラインがあるインスタンスだったらまたちょっと違う結果になったと思われます。

あと、猫界隈ですと、E砲のほかにC☆砲もあります。だいたいその合わせ技が来ると世界にことりこがばらまかれます。こちらがその結果です。


黄色がc☆砲とE砲で、その後怒涛のBTがきてます


黄色で塗った場所からBT時間の傾きがほぼ水平になってますね。これは影響力のある(≒フォロワーの多い)アカウントのBTの効果です。ここら辺はTwitterと同じなように思えます。C☆さんをフォローしているということは必然的に猫好きということになりますので、猫的には強烈な一撃となります。



飛び込み選手ことりこ

インスタンスごとの反応数

次はインスタンスごとの反応数です。

アイコンはかくさなくていいよね


左のリンクグラフはかっこいいからつけたけど本当に意味ないです。しいて言えばインスタンスごとのことりこに反応したユーザの数がちょっとわかるくらい。こういうかっこいいグラフを効果的に使えるようになりたいですね。
mastodon.social、pawoo.net、mstdn.beer、fedibird.com、gorone.xyzと続いて mstdn.jp が来ます。mstdn.jpはサーバー移転とかあってずっと落ちてたから仕方ないね。best-friends.chatはあんまりかかわってないからかな、少ないです。あとは本当に初めてみたインスタンスがいっぱいあります。すごいいっぱいある。知らなかった。


毎晩布団に潜り込んできます

砲と砲

砲です。
砲ですが、このように個人が何曜日の何時に最もことりこに反応するところまで取得できます。砲はあまりに個人的すぎるので画像をちっちゃくしました。





的確なターゲティングとリーチを実現するためにはアナライズが必要で、影響力のある人にどれだけ目を止めてもらうか、とかが重要なんだと思います。知らんけど。個人的にはただことりこを見せたいだけなので、そんなにリアクションが気になるかと言われたら別に…って感じですが、それでもリアクションがないよりあったほうが嬉しいのがひとの心というもの。人の心…これがわからない。

本当なら自前のインスタンス立ててSQLで一発でデータ持ってくることをしたほうがいいのだろうけど、このようにすべてAPI経由からでも時間をかければこのようなデータが取得できます。できました。(迷惑にならないように10秒に1callとかやってるからめっちゃ時間かかった)



自転車で外に連れ出したりします 

その他のデータ

アカウント単位でどのくらいことりこに反応するかがわかり面白いけれど、これは公開しません。ていうかただの猫好きリストですね。


やりたかったことなど

本当はことりこインフルエンサーとインスタンスの関係性を見つけたかったけど、そういえばBTってローカルタイムラインに行かなかったよねー。インフルエンサー的なものはツイッターと同じでフォロアー(の中のアクティブ数)がものを言うよねー。あと猫っていうカテゴリだとめっちゃ個人の性質に寄っちゃう。猫飼ってる人ならわかるけど、みんな大体「猫はすべからくかわいい(誤用)けど、うちのこが一番かわいい」って思ってる人たちなので、猫を飼ってる人=BTする人じゃなかったりして、ターゲットが自分でもよくわからなくなっちゃった。

あと、Twitterだといいね!も他人に見られる羞恥プレイ仕様になっていますが、Mastodonはそうじゃないから、そうなったときはまた別の傾向が見えてくると思います。絶対ならないでほしいけれど。絶対ならないで。そのPull Requestみたら阻止してやる。


おわり 

0 件のコメント: