十五夜のブロマガ

データ解析できるかな(3):データ集計プログラムの改修とざっくり集計

2013/08/15 07:32 投稿

  • タグ:
  • プログラミング
  • データマイニング
  • 腐女子
  • pixiv

途中まで書いていた記事が、吹っ飛びました。助けてドラえもん!……いやいや。こまめにセーブしておけという話ですね。いや、確か途中まで保存したはずなんだけど……あれぇ?ともあれ、気を取り直して書き直すことにします。

さて、前回の記事では、最初の一歩的に取ってきたデータを整理することで、前処理として足りてない部分はないか、チェックしてみました。すると、おおむね次のような問題がありことがわかりました。

  1. タイトル、タグ、説明など、ユーザが入力する項目にエスケープされないままフィールドセパレータの「,」が入っている。
  2. 大文字、小文字、全角半角の入力揺らぎが存在する。システム側ではこれらを区別していない。なお、スペルミスも少数見られる。
  3. 氏名やイベント名など複数の語からなるものに空白が含まれていて、生き別れになっていることがある。
ということで、これらの問題に対応することにしました。

エスケープされていない「,」への対応

まずは、データ変換の最大の障害を何とかします。取得してきたデータの1つのレコードは以下のような書式になっています。

"12345678","1234567","png","何かのタイトル","11","ユーザ名","http://どこかのホスト/12345678_128x128.jpg",,,"http://どこかのホスト/12345678_480mw.jpg",,,"2013-08-13 06:00:00","タグ1 タグ2 タグ3",,"0","0","9","説明文なう",,,,"0","0","username",,"0",,,"http://どこかのホスト/1234567_80.jpg",

各フィールドの意味は「APIのデータ解析」あたりにありますので参考にされてください。とりあえず、欲しい時刻とタグ列はそれぞれ、14番目(indexは13)と15番目(indexは14)に格納されています。特にタイトルに「,」が含まれている場合、単純にsplit()しただけではひとつとかふたつとか「,」の数だけずれてしまいます。

ということで正規表現でがんばろうかとしばらく考えてみましたが、データを睨んでいたらふっと「","」で分割すればいいんじゃね?と思いつきました。もちろんこの並びが説明文などに出現しない可能性は0ではないので緩い解決策になりますが、とりあえずはいけそうです。ということでやってみたところ、以下のような13個のデータに分割されました。

0 "12345678
1 1234567
2 png
3 何かのタイトル
4 11
5 ユーザ名
6 http://どこかのホスト/12345678_128x128.jpg",,,"http://どこかのホスト/12345678_480mw.jpg",,,"2013-08-13 06:00:00
7 タグ1 タグ2 タグ3",,"0
8 0
9 9
10 説明文なう",,,,"0
11 0
12 username",,"0",,,"http://どこかのホスト/1234567_80.jpg",

なんかいけそうな感じ!ということで、次は時刻が含まれている7番目と、タグ列が含まれている8番目を分割してそれぞれ最後と最初を取り出します。前者は「",,,"」を、後者は「",,"」をセパレータにすればいけそうです。ということで何か取れました。

なお、こういう形で分割を進めると、タグ列に「,」が含まれていてもそのままになり、CSV形式にした後エクセルで開くとごみになるので、生成時には「"」でくくっておく必要があります。

データを正規化する

次に、問題の2番目「大文字小文字、全角半角の混在」に対応します。これらはシステム的には全部同じ扱いになっていることは、PCでも確認しましたので、全部大文字全角に正規化してしまいます。具体的には、

  1. 小文字から大文字への変換→組み込み関数のupper()を使用する(参考:Python: リスト中の文字列を大文字⇔小文字に変換
  2. 半角全角変換には、unicodedataモジュールのnormalize()を使用する(参考:Pythonで unicodedata.normalize を使って全角半角を正規化する方法)。
で、できました。

なお、上であげた3番目の問題の「生き別れのタグ」についてはとりあえず数がほとんどないので、問題が大きくなってきたら考えることにしました。

タグの分布状態の分析

これで、タグごとに集計すると、タグ数6063個、総出現頻度50298回、という結果になりました。それを、タグの出現頻度ごとにそのタグ数を表にしてみたものが以下です。

例えば、1回しか出現していないタグは4935個と、なんと全体の8割にものぼります。頻度の高いほうから、その累計を取っていったものが頻度累計になり ます。検索に使用した1位の「TIGER&BUNNY」を除いた6割が上位から30個で、8割が上位から300個ほど取れば網羅できてしまうこと がわかります。1000個まで見ればほぼ9割にのぼりますが、今回は目視での名寄せをさぼるために300個を取り出して名寄せをしてみました。

上位300個を目視で名寄せ

名寄せ用辞書を作ったほうが早かった気もしますが、データを眺めたかったので再度目視で名寄せしてみました。

相変わらず、バニーちゃんは名前にひどくバリエーションがありますね!別名が10個。

おじさんも結構多いですけどね。別名が8個あります。

この変換、手作業だとミスるので、辞書が欲しいです。すでに何度かミスってますはい。まあ、そんなこんなで再集計して頻度の分布を見てみたのがこちらになります。

これも先ほどと同様、検索ジャンルタグ「TIGER&BUNNY」を除いた中でのタグの分布を見てみると、上位10位までのタグでほぼ6割を超えるシェアを持ってます。8割ほどを切り出した上での話ですので、元からすると48%、約5割程度になります。20位までで8割弱(元からすると64%)、40位までで約9割(元からすると72%)が占めているわけですね。ちなみに、60位まで見ると95%(元からすると、76%)を超えます。

ということで、上位60位までを表示してみると以下のような感じになりました。

なお、これはあくまで検索タグ「TIGER&BUNNY」で抽出した直近今年3月くらいから1万件の集計結果ですので、ご留意ください。で、その上でざっと傾向として思ったのは、以下のようなことでした。

  1. 明示的に腐向けであると表記されているのは「腐向け」「T&B女性向け」を合わせて4500くらい。半数弱くらいが腐向け。
  2. バディ2名単体およびそのCPが圧倒的。兎虎は虎兎の倍程度。次点がイワンとキース。CPは空折が主体の模様。
  3. 同人誌即売会関連のタグが非常に多い。特に最近あった夏コミC84は全国規模で最大なだけあって、他に比べて非常に多い。サンプルやお品書き掲示など、告知に積極的に利用されている様子が見て取れる。
  4. 来年度公開される映画「The Rising」の影響が見て取れるタグは、「サスペンダーおじ」「ライアン・ゴールドスミス」「チャックばに」くらいでしょうか。2番目は先日情報公開された新キャラですが、1番目と3番目は多分知らないと何のことやらというタグですね。前者が新衣装おじさんで、後者が新衣装バニーちゃん、のはずです。バニーちゃんの衣装はおじさんにだいぶ遅れて発表されたのでまだ少ないですね。
  5. 他のジャンルでは概ね特殊嗜好とされる女体化やリバが上位に見られるところが非常に面白いです。

ざっと集計してみたところ、大体皮膚感覚と同じでしたが、数字が出るとおおなるほどと思いますね!

というあたりでタイムアップしてしまいましたので、続きはまた後ほど。


コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事