ニートが学ぶプログラミング

ニートの日記。プログラムのことやら、くだらないこと、思ったことをまとめていきます。頑張って毎日更新するぞぉ_(:3」∠)_ 更新が連続して途切れたら察してください。

各政党フォロワーのユーザー情報を取得してみた

こんにちは鬱太郎です。昨日取得したフォロワーIDからユーザー情報を取得してみました。ですので、それについて記事にしたいと思います。

ソースコード

取得したデータ

プログラムを起動して約2時間ほどですべてのデータが集まりました!データを取得してから、データベースに追加するなどの処理をしていたためレートリミット回復の時間はあまりいりませんでした。

取得したデータの詳細を表にまとめておきますね。

政党 IDの数 取得したデータ数 ロス サイズ(MB)
自民党 124,328 124,317 11 131.5
公明党 73,705 73,702 3 72.2
民進党 25,335 25,333 2 30.1
日本維新の会 13,707 13705 2 15.8
立憲民主党 174,896 174,880 16 195.2
希望の党 10,607 10,606 1 12.2
日本のこころ 37,913 37,905 8 47.0
共産党 36,732 36,727 5 43.1
社民党 21,649 21,644 5 27.1
自由党 28,244 28,240 4 35.5
幸福実現党 6,754 6,753 1 7.6

どうしても、取得時にロスが発生してしまうようです。フォロワーのIDを取得してからユーザーの情報を取得する間に、アカウント削除などの理由から取れないユーザー情報があったようです。

クリックしてターミナルの結果を見る

f:id:neet-utsu-taro:20171015151917p:plain f:id:neet-utsu-taro:20171015154433p:plain

ユーザー情報のJSONの例

取得したデータの一例を表示したいと思います。こんな感じのデータをTwitterAPIで取得できます。

{
        "_id" : ObjectId("59e1823fae898d323863ba37"),
        "miniProfileImageURL" : "http://pbs.twimg.com/profile_images/902325250867716096/IXHm182E_mini.jpg",
        "screenName" : "neet_utsu_taro",
        "contributorsEnabled" : false,
        "profileUseBackgroundImage" : false,
        "profileBackgroundTiled" : false,
        "createdAt" : "Tue Aug 29 09:12:49 GMT+09:00 2017",
        "profileBackgroundImageURL" : "http://abs.twimg.com/images/themes/theme1/bg.png",
        "biggerProfileImageURL" : "http://pbs.twimg.com/profile_images/902325250867716096/IXHm182E_bigger.jpg",
        "protected" : false,
        "miniProfileImageURLHttps" : "https://pbs.twimg.com/profile_images/902325250867716096/IXHm182E_mini.jpg",
        "profileImageURLHttps" : "https://pbs.twimg.com/profile_images/902325250867716096/IXHm182E_normal.jpg",
        "id" : NumberLong("902323111994916864"),
        "profileImageURL" : "http://pbs.twimg.com/profile_images/902325250867716096/IXHm182E_normal.jpg",
        "profileSidebarBorderColor" : "000000",
        "utcOffset" : -25200,
        "URLEntity" : {
                "displayURL" : "neetaro.com",
                "start" : 0,
                "end" : 23,
                "text" : "https://t.co/8tj7yW4gCF",
                "expandedURL" : "http://www.neetaro.com",
                "URL" : "https://t.co/8tj7yW4gCF"
        },
        "timeZone" : "Pacific Time (US & Canada)",
        "defaultProfile" : false,
        "profileLinkColor" : "91D2FA",
        "originalProfileImageURLHttps" : "https://pbs.twimg.com/profile_images/902325250867716096/IXHm182E.jpg",
        "profileSidebarFillColor" : "000000",
        "rateLimitStatus" : {
                "limit" : 75,
                "secondsUntilReset" : 900,
                "remaining" : 74,
                "resetTimeInSeconds" : 1507952068
        },
        "profileBannerMobileURL" : "https://pbs.twimg.com/profile_banners/902323111994916864/1505292216/mobile",
        "name" : "ニート鬱太郎",
        "followersCount" : 69,
        "followRequestSent" : false,
        "status" : {
                "inReplyToUserId" : -1,
                "userMentionEntities" : [ ],
                "source" : "<a href=\"http://twitter.softama.com/\" rel=\"nofollow\">ツイタマ for Android</a>",
                "retweeted" : false,
                "currentUserRetweetId" : -1,
                "createdAt" : "Sat Oct 14 10:10:19 GMT+09:00 2017",
                "hashtagEntities" : [ ],
                "mediaEntities" : [ ],
                "inReplyToStatusId" : -1,
                "extendedMediaEntities" : [ ],
                "id" : NumberLong("919007427701248000"),
                "text" : "おはようございます❗☀🙋❗",
                "lang" : "ja",
                "favorited" : false,
                "retweet" : false,
                "accessLevel" : 0,
                "URLEntities" : [ ],
                "truncated" : false,
                "quotedStatusId" : -1,
                "possiblySensitive" : false,
                "contributors" : [ ],
                "retweetedByMe" : false,
                "symbolEntities" : [ ],
                "retweetCount" : 0,
                "favoriteCount" : 1
        },
        "showAllInlineMedia" : false,
        "geoEnabled" : false,
        "profileBannerMobileRetinaURL" : "https://pbs.twimg.com/profile_banners/902323111994916864/1505292216/mobile_retina",
        "translator" : false,
        "description" : "ニートです。どうでもいいこと言います。趣味アニメ等 だけども最近全く見てない。。。 フォローされたら、bot等でない限りフォロー返します。  犬は柴犬、猫は黒猫が好き。  柴犬っていいよね…The犬って感じで _(:3」∠)_ ブログやってます。下のリンクからどうぞ。",
        "profileTextColor" : "000000",
        "descriptionURLEntities" : [ ],
        "URL" : "https://t.co/8tj7yW4gCF",
        "biggerProfileImageURLHttps" : "https://pbs.twimg.com/profile_images/902325250867716096/IXHm182E_bigger.jpg",
        "profileBannerIPadURL" : "https://pbs.twimg.com/profile_banners/902323111994916864/1505292216/ipad",
        "lang" : "ja",
        "defaultProfileImage" : false,
        "statusesCount" : 192,
        "accessLevel" : 2,
        "profileBackgroundImageUrlHttps" : "https://abs.twimg.com/images/themes/theme1/bg.png",
        "profileBackgroundColor" : "000000",
        "verified" : false,
        "favouritesCount" : 218,
        "friendsCount" : 105,
        "listedCount" : 0,
        "profileBannerURL" : "https://pbs.twimg.com/profile_banners/902323111994916864/1505292216/web",
        "location" : "自宅",
        "profileBannerRetinaURL" : "https://pbs.twimg.com/profile_banners/902323111994916864/1505292216/web_retina",
        "originalProfileImageURL" : "http://pbs.twimg.com/profile_images/902325250867716096/IXHm182E.jpg",
        "profileBannerIPadRetinaURL" : "https://pbs.twimg.com/profile_banners/902323111994916864/1505292216/ipad_retina"
}

ユーザー情報JSONのプロパティ説明

私が理解した範囲、およびできる範囲で調べたものを説明していきます。プロパティは大きく分けて

  • 数値
  • bool値
  • 文字列
  • URL
  • オブジェクト
  • 最近したツイート

に分けられます。これについて説明していきます。

数値

数値は主にIDやツイート数などの計測情報からなります。

プロパティ名 意味
_id MongoDBのデフォルトID
id ユーザーID
utcOffset UTCのオフセット値(秒)
followersCount フォロワー数
statusesCount ツイート数
accessLevel 不明。おそらくTwitterAPIのアクセスレベルか?
favouritesCount いいね数
friendsCount フォロー数
listedCount リスト数

ツイート数からフォロワー数等の有名な数値がデータとして格納されています。

私のデータはなぜかタイムゾーンがUSカナダになっているのでutcOffsetがおかしい値になっていましたね。

bool値

bool値というのはtruefalseで表現する状態を表す値です。trueならyesfalseならnoと考えるとわかりやすいと思います。

プロパティ名 意味
contributorsEnabled ユーザーがcontributor modeを有効にしたかどうか(認証アカウントで複数人数での管理をOKにしているか等)
profileUseBackgroundImage ホーム画面で背景に画像を使っているかどうか
profileBackgroundTiled ホーム画面で背景にタイル画像を使っているかどうか
protected 鍵垢かどうか
defaultProfile ユーザーがユーザープロファイルのテーマまたは背景を変更していないことを示します。
followRequestSent 不明
showAllInlineMedia 不明
geoEnabled 位置情報を有効にしているかどうか
translator ユーザーがTwitterの翻訳者コミュニティに参加しているかどうか
defaultProfileImage trueの場合、ユーザが自分のプロフィール画像をアップロードしておらず、代わりにデフォルト画像が使用されていることを示します。
verified 認証済みかどうか

Twitterの設定情報などが多いですね。鍵垢か認証済みがよく知られている項目でしょうか?

文字列

プロパティ名 意味
screenName スクリーン名(@に続く名前)
createdAt アカウント作成日時
timeZone タイムゾーン名
name 名前
description 自己紹介
lang 表示言語
location 場所(ユーザーが自由に決めれるやつ)

自己紹介なども取得できるようですね。

色はユーザーが設定したテーマの色等ですね。

プロパティ名 意味
profileSidebarBorderColor 不明
profileLinkColor 不明
profileSidebarFillColor 不明
profileTextColor 不明
profileBackgroundColor 不明

プロパティ名からどこの色のことを言っているのかはなんとなくわかるのですが、あまり意味のない数値だと思います。詳しく調べませんでした。

URL

URLは主に画像のリンク等の文字列がデータとして入っています。

オブジェクト

プロパティ名 意味
URLEntity プロフィールのURLの内容
rateLimitStatus TwitterAPIのレートリミットオブジェクト
status 最近したツイート

オブジェクトの中でも最近したツイート以外はたいした意味を持ちません。

最近したツイート

ユーザー情報の中には最近したツイートの内容が付属されています。statusというオブジェクトにツイート情報が入っています。

プロパティ名 意味
inReplyToUserId リプライ先のユーザーID(リプライでなければ-1)
userMentionEntities メンションの配列
source ツイートしたアプリの詳細
retweeted 不明
currentUserRetweetId 不明
createdAt ツイート日時
hashtagEntities ハッシュタグの配列
mediaEntities 画像等のメディアの配列
inReplyToStatusId リプライ先のツイートID(リプライでなければ-1)
extendedMediaEntities 画像等のメディアの配列(extended)
id ツイートID
text ツイート本文
lang ツイート言語
favorited 不明
retweet 不明
accessLevel 不明
URLEntities URLの配列
truncated 翻訳されたかどうか
quotedStatusId 引用ツイート元のツイートID(引用していなければ-1)
possiblySensitive 不明
contributors 不明
retweetedByMe 不明
symbolEntities 不明
retweetCount リツイート数
favoriteCount いいね数

まだ詳細な意味は分かりません。ごめんなさい!

実際に政党別で比べてみる

詳しい比較は後日やります。今日はフォロワーがどれくらい鍵垢かどうかを調べたいと思います。

MongoDBはdb[collection_name]db.collection_nameのように扱えます。db.getCollectionNames().forEachですべてのコレクションについてfunction()の中身を実行させます。

> db.getCollectionNames().forEach(function(e){ 
if(e.match(/_ids$/))return;
var all = db[e].count();
var count= db[e].find({protected:true}).count();
print(e +","+count+","+all+","+count/all); 
} 
)
党名 スクリーン名 鍵垢数 フォロワー数 鍵垢率 偏差値
立憲民主党 CDP2017 25722 174880 0.1470 60.68
民進党 MinshintoNews 3257 25333 0.1285 51.24
社民党 SDPJapan 2288 21644 0.1057 39.59
幸福実現党 hr_party_TW 874 6753 0.1294 51.68
共産党 jcp_cc 4076 36727 0.1109 42.27
自民党 jimin_koho 16327 124317 0.1313 52.65
希望の党 kibounotou 1795 10606 0.1692 71.98
公明党 komei_koho 9510 73702 0.1290 51.48
日本のこころ nipponkokoro 4047 37905 0.1067 40.12
維新の会 osaka_ishin 1807 13705 0.1318 52.91
自由党 seikatsu1pr 2750 28240 0.0973 35.34
名称
平均 0.1261
標準偏差 0.019611

フォロワーの鍵垢率が高い政党は希望の党,立憲民主党,維新の会ですね。偏差値で見ると希望の党立憲民主党が明らかに高いことが分かります。逆に鍵垢の率が極端に低い自由党社民党も目立ちます。

比較する値がbool値だとこんな感じに楽にできますね!

クリックしてターミナルの結果を見る

f:id:neet-utsu-taro:20171016163838p:plain

終わりに

ここまで読んでくださってありがとうございます!

Twitterのユーザー情報の取得が完了しました!これからデータを分析していきたいと思います。もしかしたら、2・3日かかるかもしれません。いいデータ取れるといいんですが…

またね('ω')ノ