やや濃厚なソース

プログラミングやゲームについて。

BigQuery に Twitter のツイートを流し込み始めました

さらに過去の自分から見えるツイートも取り込みました。
これで、例えば、誰が「おっぱい」とよく言っているのかもすぐに分かります。

SELECT screen_name,COUNT(*) as cnt
FROM `project.source.my_timeline`
WHERE `text` LIKE '%おっぱい%'
GROUP BY screen_name ORDER BY cnt DESC
LIMIT 30

2009年度からのデータだと以下のようになりました

クエリ完了(経過時間: 1.4 秒、処理されたバイト数: 399.9 MB)

速い!
そして、ymsrさん言い過ぎ・・・

同様に「おっぱい」と呟かれるのが多い日は?

SELECT FORMAT_DATETIME("%F", at_created) as the_day, COUNT(*) as cnt
FROM `project.source.my_timeline`
WHERE `text` LIKE '%おっぱい%'
GROUP BY the_day ORDER BY cnt DESC
LIMIT 30

日時 回数
2017-06-30 15
2011-01-19 15
2011-03-13 12
2011-07-25 11
2011-08-21 11
2011-04-23 11
... ...

時間がUTCなので、若干ずれていますが、大きな地震があった日が呟かれやすそうです。

SNSサイトのプロフィール分析3

前回までで使用した方法が、別のSNSでも使用できるのかを試し、
結果が出たのでご報告いたします。

今回使用したデータは以下の通りです。

  • 前回まで使用したサイトとは別のSNSからクローリング
  • ログイン時間順で、日本主要都道府県のユーザを取得
  • 約5900プロフィール

同様に、形態素解析、ベクトル化、主成分分析を行いました。
以下のグラフは、とある主成分に投影したものです。
人為的な文言を含ませない限りは、このように山型、正規分布に近くなります。
f:id:hidetobara:20180411234559p:plain
驚いたことに、
前サイトとは違って、偏った分布は見あたりませんでした。
サクラ業者を入れていないのか、あるいはそのような業者を排除する仕組みがあるのでしょうか?
その点についはより詳しく調べてみないことには分かりません。


ここは順当にどのような単語で分類されるのかを見ていきたく思います。
第一主成分。
f:id:hidetobara:20180411235735p:plain
以下のような単語が含まれると、分布の右に行きやすくなります。
とても、一般的な自己紹介を分類する単語だな、と感じました。

ロング,優しい,料理,たばこ,買い物,明るい,結婚,セミ,鑑賞,吸う,ロング,のんびり,おっとり,独身,映画,セミロング,作り,音楽,カラオケ,読書,ショッピング,お菓子,よろしく,旅行,ショッピング,遊ぶ,マイペース


第二主成分。
f:id:hidetobara:20180412000737p:plain
以下のような単語が含まれると、分布の右に行きやすくなります。
この分類はイマイチ分かりませんでした。
結婚、既婚、子供の単語が表れており、家族構成で分類する単語なのでしょうか。

結婚,たばこ,吸う,料理,独身,優しい,明るい,既婚,系,寂しい,作り,ロング,自分,買い物,方,会う,屋,居る,セミロング,見る,カラオケ,お菓子,ショッピング,子供,苦手,鑑賞,思う,遊ぶ,欲しい,ロング,幸せ,映画,免許,持つ,のんびり,甘えん坊,ちゃう,少し,甘える,家,音楽,タイプ,似る,出来る,男性,読書,マイペース,時間,旅行,寝る,旦那,おっとり,可愛い


第三主成分。
f:id:hidetobara:20180412001932p:plain
以下のような単語が含まれると、分布の右に行きやすくなります。
第一、第二とは明らかに違い、これがパパ活を分類する単語と分かりました。
単語「パパ」だけでなく、前の主成分には表れない「余裕」「食事」「大人」「関係」「紳士」「経済」「定期」などの単語もパパ活に結び付く強い単語になっているのが分かりました。

余裕,ロング,食事,パパ,大人,男性,関係,よろしく,探す,お願い,旅行,食べる,買い物,紳士,セミ,経済,美味しい,ショッピング,一緒,定期,映画,時間,楽しい,料理,優しい,明るい,鑑賞,嬉しい,希望,お話,思う,メッセージ,付き合い,カフェ,会える,おっとり,平日,ご飯,いただける,お互い,過ごせる,たばこ,デート,勉強,素敵,過ごす,できる,都内,歩く,仕事


第四主成分。
f:id:hidetobara:20180412004823p:plain
より、進んだパパ活のグループといった感じです。そのためか、分布も山形の右側が窄んだ感じになっています。

たばこ,結婚,吸う,独身,会える,セミロング,ロング,私,希望,メール,会う,よろしく,関係,既婚,お願い,エッチ,定期,エッチ,ショッピング,旦那,出会い,付き合い,探す

と、このように、
このようなSNSが出会いの場だけでなく、パパ活の場としてもあることが、分析上からも分かりました。
後、もう一つくらいのサイトも比較できればなあ、と思っています!

SNSサイトのプロフィール分析2

進展がありましたのでご報告いたします。

  • 被っているプロフィールがあり、ユニークを取りました。その結果、15400プロフィールから7900プロフィールに。
    • さくら業者は、全く同じプロフィールを使いまわしたのでしょうか?
  • 単語の重要度の計算を以下のように修正
    • 長すぎるプロフィールに引きずられる感じがしたので、TFの評価を Σ_k N_k,j の平方根で割ってみました。
重要度i,j=TF x IDF
TF_i,j = N_i,j / sqrt(Σ_k N_k,j)
IDF_i = log( [総プロフィール数] / [単語T_iを含むプロフィール数] )
i: 単語番号
j: プロフィール番号
D_j: 番号jのプロフィール
T_i: 番号iの単語
N_i,j: プロフィールjに出てくる単語T_iの個数

そして、主成分分析。


第2主成分を投影した分布図。
f:id:hidetobara:20180202022238p:plain
山型ではない怪しい膨らみがあるので、高い値のプロフィールを見てみると、
f:id:hidetobara:20180202022437p:plain

プロフィール見てくれて、ありがとうございます!|【場所】に住んでいます|美味しいものが好きで、料理も好きです♪...

という、テンプレートを使いまわしたプロフィールが見えます。
数えてみると約500個見つかりました。

第3主成分を投影した分布図。
f:id:hidetobara:20180202022953p:plain
ややデコボコしている感じです。高い値のプロフィールを見てみると、
f:id:hidetobara:20180202023142p:plain
初期状態から少し付け加えただけのようなプロフィールが見えます。

第5主成分を投影した分布図。
f:id:hidetobara:20180202023306p:plain
お、また怪しい膨らみが・・・。ということで、高い値のプロフィールを見てみると、
f:id:hidetobara:20180202023400p:plain

はじめまして☆|【場所】に住む、【名前】といいます|最近は忙しくて、職場と自宅の往復だけで、...

という、別のテンプレートを使いまわしたプロフィールが見えます。別のさくら業者なのでしょうか?
数えてみると、約100個見つかりました。


ユニークで数えた場合、約7.5%のプロフィールは、少なくともテンプレートから作られたことが分かりました。
今回、ユニークにしたため、実際の割合は、もう少し上がり1割弱にはなるかと思います。


今回、前回からの結論としては、
1. テンプレートを使ってワンパターンなプロフィールを多く作ってしまうと、より低い主成分がテンプレートの特徴を表すようになってしまう
2. これらのプロフィールは、主成分分析によって次元を圧縮後、該当する主成分にて高い値をとるようになってしまう
3. このように容易に検出できてしまう
ということが分かりました。
プロフィールを作る際は気を付けないといけませんね。


次回は、
さくら業者っぽいプロフィールが分かるようになったということは、
逆に、人間っぽいプロフィールが分かる、作れるようにならないか、について試していきたく思います。

SNSサイトのプロフィール分析1

好奇心にかられて調べてみました、
恋愛SNSサイトのプロフィール。
試しにクローラーを走らせてみたところ、
15400人分ほどのデータが集まったため分析開始です。

まず、各プロフィールを形態素解析にて単語に分解します。
本来の単語で重要度を計算する、TF-IDFは以下の通りですが、

重要度i,j=TF x IDF
TF_i,j = N_i,j / (Σ_k N_k,j)
IDF_i = log( [総プロフィール数] / [単語T_iを含むプロフィール数] )
i: 単語番号
j: プロフィール番号
D_j: 番号jのプロフィール
T_i: 番号iの単語
N_i,j: プロフィールjに出てくる単語T_iの個数

としたかったのですが、文章量の少ないプロフィールも多くあり、
それに引きずられないないようにするため微調整し、
以下のようにしました。

TF_i,j = N_i,j

そして、この単語の重要度から各プロフィールをベクトル化しました。
しかし、この状態のままではベクトルの次元数が多くなりすぎ15000を超えてしまいます。
そこで、出現回数が少ない単語は無視し、さらに主成分分析にて、
次元数を32にまで減らしました。


主成分分析で求められた、とある軸の各単語の寄与具合は

0.3009,友達
-0.2728,代
0.2615,彼氏
0.2586,写
0.2517,寂しい
-0.2382,ゲーム
-0.2379,読む
-0.2009,嫌い
0.2004,既婚
-0.1947,会う
0.1707,欲しい
0.1702,仲良く
-0.1689,アニメ
-0.1674,大好き
-0.1652,日記
0.1628,募集
-0.1627,LINE
0.1525,嬉しい
-0.1506,漫画
0.1446,年下
0.1443,顔
-0.1394,タイプ
.....

「彼氏」「友達」「既婚」などの単語が含まれると評価されやすく、
逆に「ゲーム」「アニメ」「漫画」などの単語が入ると評価されなくなります。
なんとなく、リア充系の軸かなという感じです。
全プロフィールをこの軸で投影した結果は下のようになり綺麗な山型となりました。
f:id:hidetobara:20180122235757p:plain


また、別の軸の各単語の寄与度は以下になりました。

-1.1027,美味しい
0.8648,共通
0.7815,*
-0.7571,もの
-0.7549,食べる
0.7321,(
0.7173,、
0.6999,)
-0.6564,いる
-0.5597,行く
0.5540,m
-0.5033,ご飯
-0.4988,私
0.4939,^
0.4871,゚
0.4452,話題
-0.4373,住む
-0.4311,カフェ
-0.4210,合える
-0.4197,一緒
0.4080,話せる
-0.4052,腕
-0.3965,料理
-0.3907,手料理
-0.3855,汗
0.3833,はじめる
0.3770,T
0.3665,過ごせる
-0.3622,喜ぶ
-0.3606,見つかる
0.3509,在住
-0.3460,仲良く
-0.3012,結構
0.2835,メッセージ
0.2752,o
0.2705,恋愛
0.2690,(_
0.2685,_)
-0.2543,マイペース
-0.2517,登録
-0.2345,はじめまして
0.2134,代
-0.2096,酒
...

形態素解析が失敗していますが、顔文字の要素が入っていると評価されやすい軸なのかな・・・という感じです。
先程と同じように、全プロフィールをこの軸で投影した結果はというと、
綺麗な山型からちょっとずれ、小さな山ができています。
f:id:hidetobara:20180123002329p:plain
サンプル数が大きくなれば、正規分布に近づくのに、こういう変なコブができるのは何かおかしいぞ。
ということで、実際に中を見てみました。
なお、1プロフィール中の改行はタブで置き換え、見やすく成形しています。
f:id:hidetobara:20180123003816p:plain
・・・遠目で見るとほとんど同じようなプロフィールが並んでいます。
よく見ると、名前や文言が一部だけ変わっており、
いわゆる、さくら業者は、テンプレートから一部だけを変えてプロフィールを作っているのか、
ということが見てわかると思います。
数にして500プロフィールくらいあり、少なくとも、15400人中の500人くらいはさくらということが分かりました。
安直にプロフィールを仕組んでしまうと、このように簡単に検出できてしまうため、
もう少し工夫した方がいいのにな、と感じました。


たぶん、続きます。

続々メルカリ上でのSwitch転売価格の推移

年末のSwitch商戦
転売屋 vs 任天堂
の結果についてご報告したく思います。

f:id:hidetobara:20180104021218p:plain
モンスターハンターダブルクロス
ファイアーエムブレム無双
スーパーマリオオデッセイ、
の発売日前、
そしてクリスマス前では
落札件数が跳ね上がっています。
では、落札価格はというと...

f:id:hidetobara:20180104021052p:plain
クリスマス前にもかかわらず、
平均落札価格は続落しています。

噂にはありましたが、任天堂がSwitchの増産を行い、
十分にSwitchが供給されるようになったため、
価格は下がり続けたと考えられます。

12月31日の平均落札価格35898円では、
メルカリ税3589円、郵送費1000円位を差し引くと、
ほぼ定価か、それを下回ってしまい、
苦労してSwitchを手に入れても全く儲からない状態となっています。

また、
月の落札件数はそれぞれ、
9月約1800件、10月約1800件、11月約2100件、12月2600件、
月の落札総額はそれぞれ、
9月約7800万円、10月約7500万円、11月約8500万円、12月約1億円!!!
となっておりMercari上での取引量、取引額は増加しています。

結果、
任天堂とメルカリがより儲かり、
転売屋は全く儲からない状態に落ち着きました。

何事も潮時が大事だということですね。

続メルカリ上でのSwitch転売価格の推移

クローリングのプログラムは
8月末よりずっと走らせており、
その報告をしたいと思います。

f:id:hidetobara:20171118165837p:plain
平均落札価格の推移です。
価格は4万5000円から徐々に下がり続け、4万円前後で下げ止まりしています。
ただし、実際は、プロコンやソフトを抱き合わせて販売することが多くなっており、
そのような状態もうまく表現する方法はないかな、と思っています。

f:id:hidetobara:20171118170001p:plain
落札件数の推移です。
モンスターハンターダブルクロス
ファイアーエムブレム無双
スーパーマリオオデッセイ、
の発売日前後では、跳ね上がっています。

9月、10月と共に約1800件、約8000万円弱の取引が行われています。
Nintendo Directでの予約販売によって、
価格、取引件数はもっと下がるのかと思っていましたが、
意外な結果になりました。