Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2011-12-01Python Advent Calender(全部俺):: 一日目

[]セックスと一緒に出てくる単語を調べると、意外なことがわかる -- Pythonでの簡易データ分析 02:34

 きっかけはこの記事。no title

「セックス」という単語は日常的なメールでもしばしば使われます(あ、非モテの皆さんは使う機会無いんでしたっけ、大変失礼しました、心よりお詫び申し上げます:D)

 この何気ない一文なんですが、自分の実感とはかなりかけ離れているなーと思ったわけです。

 少なくとも、Twitter上では、気取りやの文章を書く人はセックスという単語を避けて通るし、逆に非モテっぽい人がセックスという単語を使う傾向にあるわけで、なんだか変だなーという感じ。

 そういえば、セックスの用法については真面目に調べてこなかったような気が。Twitterを限定するならば、単純にセックスという単語が、どういう風に使われているのか、あんまり考えたことが無かった気がする。そこは機械学習に真面目な皆様とは違い、どちらかといえば汚れ仕事が得意な自分が、セックスという単語が出てくる発言を延々と取った結果を、皆様にお知らせしようかな、ついでにそれがPythonを使ったデータ分析入門になればいいな、と思って、Python Advent Calender(全部俺)の一日目をスタートさせます。

 ちなみに、結果だけ知りたければ、すっ飛ばして最後の結果発表だけ見ればいいんじゃないのかなと思ったりします。

辞書を作る

 に関しては、下のエントリを参考。

 自分で記事を読むのもだるくなってきたので、コンピューターに記事を読ませることにした。 - 蟲!虫!蟲! - #!/usr/bin/bugrammer

Twitterのログはどうやって取る?

 検索結果のJSONだったら、下のようにすると叩けます。

import json
data = json.load(urllib2.urlopen("http://search.twitter.com/search.json?q=%E3%82%BB%E3%83%83%E3%82%AF%E3%82%B9&callback=?&page=" + str(p)))

 標準のjsonパーサーを使うという形ですね。で、このjsonパーサーはどのように機能しているか、というと具体的には、read()で読み込めるような形のオブジェクトが入力されたなら、それを連想配列にぶち込んでアクセスしやすいようにするといったような感じになっています。普通、urllib2.urlopen()が返すオブジェクトから、その中身のテキストを取り出すためには、返されたオブジェクトにread()する必要があります。具体的には、下のような感じですね。

url = urllib2.urlopen("http://hogehoge.com/")
html = url.read()

 なんですけど、このurlhtmlの代入を端折ってアクセスしたのが上記のコードということになるわけで、場合によってはPythonicじゃないなという感じもします。あと、json.load()メソッドは、このようなread()メソッドのあるオブジェクトを取り扱う必要があるので、これもちょっと注意しておくといいかもしれません。

 ちなみに、これらのデータにアクセスするためのコードは、こんな感じになっています。

 for page in data[u'results']:
    print page[u'text']

 要するに、data['results']の中に入っている値も配列なので、それをforで廻してあげればいいわけですね。その辺は中身のjsonがどのような構成になっているかにもよるかなーと。そういう感じで、あとはMecabで分割してあげれば、「その単語をTwitter上で検索した場合、どのような単語がでてくるか」という辞書の完成です。

 gist:1409831 ? GitHub

 あとは、辞書のデータを見ながら、面白そうな傾向が現れているデータを、分析する前の元データと照らし合わせながら、見ていきます。もちろん、こんな地味な作業ではないんですが、今回は簡易ということであえてそういう形にしています。

 なお、Twitterは仕様上、それほどデータが取れないので、定期的にデータを習得するなどの工夫が必要です。また、上記だと重複が多いので、修正するべきなのはそのあたりなのかな、という気もします。

結果

 ちゃんとデータで統計をだしていないので、あくまでも印象論になりますが

スパム業者は「半角文字列」のセックスを使うことが多い。

 Twitterだと、半角文字列も全角文字列として検索されるので、あんまり意識されないかもしれないですけど、半角文字列のセックス+URLだと、ほぼスパム業者が連投している状態であるというのは面白いなと思います。業者の癖なのか、それとも140文字だからということで妙な意匠を凝らしているのかはわかりません。あるいは、携帯電話に送信するのと同じ感覚で文面を作っているのでしょうか?この辺は、面白いところです。

「俺+セックス」はスパムにひっかからない。しかし、「私+セックス」はスパムが多い。

 これも面白いところ。人称代名詞によって、スパムが現れる率が変わるのも不思議なところ。「俺はここでセフレを手に入れたぜ」みたいな下世話なスパムをよく見ている気がするんですけど、Twitter上ではほとんどない。逆に、「私+セックス」だとよく出てくる。詳しい解析が必要なのでしょうが、印象的には、誘惑系(私、欲求不満です)みたいな発言がひっかかるところと、あと馬鹿丁寧な感じの演出のために使われているのでしょうか。Twitterは人からの発言を意識しているというところがあるのかなと思ったり。

スパム補正を入れると、セックスに対して「ホモ」が出てくる確立が非常に高い

 これの文脈は、おそらくは腐女子的な話と、ニコニコ動画で流行った「ガチムチレスリング」的な滑稽さを狙った発言のためにそうなっているのかな、という気がします。この辺りは詳しく無いので、誰か解説して欲しいところですが。何はともあれ、冗談のように使われることが多いので、当事者の方々はしんどいところもあるかもなあ、と思ったりもします。つか流行りすぎだろこれ。

比較に過ぎないが、「ちゃん」は意外にスパムが少ない

 あくまでもざっくりとした比較に過ぎないんですけど、「ちゃん」という単語が出てくると、スパムは少なくなりがちかなーという感じかな。なんで「ちゃん」なのかというと、「○○ちゃん」という呼びかけで使うため。その意味では代名詞系は結構面白いかな、とは思う。例えば「それ」とか「これ」とか。確かにスパムは自分のデータしか扱わない以上、人に対して言及するってことがなかなか難しいよねという気がします。

「ユニ」がつくと世界が変わる

 だいたい、セックスといえばいやらしいことを思い浮かべるのが人の常ですが、「ユニ」がつくと世界が変わる。そりゃそうか。「ユニセックス」といえばファッション的な意味で使われるくらいしかないものな、という感じはあります。なので、急激に「うわっ、なんだこのブランドのログは!!」みたいな感じになったりとか。ある意味、凄く平和的な世界。

「みたい」もスパムが少ない印象

 一部の同じスパムを連投しているのがいるだけ。そういえば、スパムって大抵は言い切り系が多いような気がする。「みたい」という風に曖昧にするのは、スパム業者の名にかけて絶対阻止しなきゃいけないのかなとか、そういう感じですかね。

まとめ

 というわけで、一日目からこれかよ、というネタでしたが、データマイニングというか、データ解析は案外簡単にできるので、皆さんも暇があれば、何か面白そうな単語をダシにログにとって調べてみると面白い事実がわかっていいのではないかな、と思います。

KaoriKaori2012/08/23 18:04This informtaoin is off the hizool!

wlvlwucfxwlvlwucfx2012/08/23 22:187CNdsB <a href="http://scuqccwqgrrn.com/">scuqccwqgrrn</a>

bjsrsidfjbjsrsidfj2012/08/25 00:05uiCDSj , [url=http://hdgylplxihtx.com/]hdgylplxihtx[/url], [link=http://vamrztxxwwpr.com/]vamrztxxwwpr[/link], http://gfwrdukceugx.com/

 |