プログラマでありたい

おっさんになっても、プログラマでありつづけたい

賃貸物件でも食洗機!!

 一度食洗機付きの物件に住んでから、その便利さの虜になっています。そんな中、今年の7月に引っ越しました。当然といえば当然なのですが、引越し先の物件には食洗機がついていませんでした。ということで、食洗機を取り付けられるよう色々動きました。

不動産屋経由でオーナーに設置の確認



 不動産屋経由で確認したのですが、今住んでいる物件のオーナーは高齢の人らしく、そもそも食洗機はという状態だったようです。そこで、食洗機の写真や蛇口の改修についての説明資料を送りました。蛇口の根本部分を交換するだけなので原状回復可能ということを強調したら、あっさり許可が取れました。

食洗機の選定



 許可が取れたので、次は食洗機の選定です。食洗機は主に据置型とビルトインタイプがあります。後者はシステムキッチンと一体なので、さすがに賃貸では導入は難しいです。そこで、据置型を選びました。据置型の食洗機なのですが、選択肢としてほぼPanasonicしかありません。だから選定としてはサイズと型を選ぶくらいしかありません。
 食洗機の選定としては、機能より大きさが重要になります。つまり一度にどれだけの量を洗えるかがポイントですね。店頭で実物を見るのが一番良いのですが、食洗機は意外に大きいです。しかし、大きくても洗える量は少ないです。だから、台所における範囲で一番大きなものを選ぶのがベストだと思います。他の作業スペースの圧迫など、トレードオフとの戦いになります。私は、「食器洗い乾燥機 NP-TR7-W」を選びました。

設置ビフォー・アフター



 こんな感じの流しです。
f:id:dkfj:20140708085922j:plain
f:id:dkfj:20141206230723p:plain

 まず蛇口部分に分岐をつけます。
f:id:dkfj:20141206223136j:plain

 あとはドンと置くだけです。
f:id:dkfj:20141206231916j:plain

食洗機の購入先の選定について



 Amazon大好きな私ですが、食洗機はヤマダ電機で買いました。理由としては、蛇口等の取り替えが必要なので、それに合う規格の部品を見繕ってもらう必要があったからです。ヤマダ電機の場合、一度下見に来て取り付け可能および部品の見積もりを行ないます。他の家電量販店でも恐らく同じプロセスをとると思います。

感想



 食洗機最高!!賃貸の人も諦めずにチャレンジしてみてください。Amazonのページから、パナソニックに直接電話で相談できるみたいなので、近くに量販店がない場合も電話で聞いてみるのもありかもしれません。

See Also:
賃貸でも工事なしで付けられるワイヤレスドアモニタ パナソニックのドアモニ VL-SDM110
賃貸でも工事無しでパラボナアンテナをつける方法。
プログラマになりたい Advent Calendar 2014

パナソニック(Panasonic) 食器洗い乾燥機用分岐栓 CB-SXH7

パナソニック(Panasonic) 食器洗い乾燥機用分岐栓 CB-SXH7

除菌ハイウォッシュジョイ ボックス 700g

除菌ハイウォッシュジョイ ボックス 700g

Ruby+Nokogiriでスクレイピング入門

クローラー/スクレイピング Advent Calendar 2014の5日目です。あと、全部俺Advent Calendarも開催中です。

f:id:dkfj:20140415021125p:plain

 Webからデータを取るためにスクレイピングする際は、Rubyを使うことが多いです。理由としては、Nokogiriが手軽で簡単だからの一点です。Rubyによるクローラー開発技法でも随所に紹介しています。随所というレベルではなく、手を変え品を変えNokogiriでデータ取っているだけじゃねぇかと批判を受けるのではと、懸念するレベルかもしれません。Nokogiriは手軽で便利なので、ちょっと使い方を覚えておくだけで楽できるケースが一杯あります。ということで、Nokogiri入門編です。

Nokogiriの使い方



 Nokogiriは、Rubyで実装されたHTML/XMLの構文解析器(パーサー)です。Rubyの中では、デファクト・スタンダードと言っても差し支えがないでしょう。XPathやCSSセレクタを利用して、目的の要素を特定し抜き出します。このデータを抜き出すことをスクレイピングと呼びます。Scrape(削る)という意味ですね。
 下記の例は、nokogiriの公式サイトから、ページ中のリンクを全部取得している例です。

scrape.rb

require 'nokogiri' 
require 'open-uri'
doc = Nokogiri.HTML(open("http://nokogiri.org/")) 
doc.css('a').each do |element| 
    puts element[:href]
end

 実行すると次のようになります。

$ ruby scrape.rb 
/
http://rdoc.info/github/sparklemotion/nokogiri
https://github.com/sparklemotion/nokogiri
/tutorials/installing_nokogiri.html
/tutorials/
/tutorials/getting_help.html
/tutorials/installing_nokogiri.html
/tutorials/parsing_an_html_xml_document.html
/tutorials/searching_a_xml_html_document.html
/tutorials/modifying_an_html_xml_document.html
/tutorials/ensuring_well_formed_markup.html
/tutorials/getting_help.html
/tutorials/more_resources.html
//github.com/sparklemotion/nokogiri.org-tutorials
//octopress.org/
//github.com/coogie/oscailte

ソースの解説
 requireで、nokogiriの他にopen-uriというモジュールを呼び出しています。nokogiriはあくまでテキストの文章からデータを抜き出すだけなので、Webからhttp通信でデータを取得することはできません。そこで、open-uriを利用します。open-uriはopenを拡張し、ファイルと同じような形でURLを扱うことが出来ます。
 その習得したHTML文章を、Nokogiri.HTMLで開いて、Nokogiriのドキュメント形式に変換したオブジェクトを作成しています。このオブジェクトはHTMLデータを内包しているので、Nokogiriのメソッドを利用して様々な切り方でデータを取得することができます。

doc.css('a').each do |element| 
    puts element[:href]
end

 この例では、CSSセレクタを利用してaタグのものを全部抜き出しています。それを順次elementという変数に格納しています。そして、elementの中から、href属性の値を取り出して表示しています。Nokogiriには多数のメソッドやエイリアスがありますが、基本的には全てこれと同じことをしています。

  1. 取得する切り口を決定(xpath,cssセレクタ等)
  2. 取得する対象を決定(パス、id、クラス指定等)
  3. 取得したデータに対する操作


検索色々。id指定とclass指定、上位からのタグ指定などがよく使うのではないでしょうか?

#class指定でh2タグを検索
puts doc.xpath("//h2[@class='title']")

#id指定でdivタグを検索
puts doc.xpath("//div[@id='copyright']")

#カスタムの属性値でdivタグを検索
puts doc.xpath("//div[@data-component-term='tweet']")

#id指定で全てのタグを検索
puts doc.xpath("//*[@id='copyright']")

#絞込検索
puts doc.xpath("//div[@id='copyright']//ul")

#上位からのタグ指定
puts doc.xpath("//html/body/article/p[34]")

 かなり簡単な説明でしたが、Nokogriを使ったスクレイピングの入門編です。以前、内部の構造含めてもう少し詳しく説明したエントリーを書いたので、興味があればそちらの方も読んでみてください。色々な言語でスクレイピングしましたが、Nokogiriはかなり使いやすい部類だと思います。それでは、迷惑を掛けない範囲で楽しんでください!!
 あと宣伝になりますが、クローラー/スクレイピングの作り方をこってり解説したRubyによるクローラー開発技法という本も書いています。初心者〜中級者向けですので、興味があれば是非ご覧ください。


See Also:
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
Ruby製の構文解析ツール、Nokogiriの使い方 with Xpath
あらためてRuby製のクローラー、"anemone"を調べてみた
オープンソースのRubyのWebクローラー"Anemone"を使ってみる

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

何故JSONPでJavaScriptのクロスドメイン通信ができるのか?

一人Advent Calendarの3日目です。

 JSONPを使って外部のAPIを呼び出して、結果を取り込むということは色々なところで行われています。しかし、そもそもJavaScriptを利用した場合、クロスドメイン通信が使えないという前提があります。JSONPだったら、何故そこを回避できるのでしょうか?あまり詳しく考えたことが無かったので、簡単に調べてまとめてみました。なんというか4周くらい遅れている話題ですが、気がついた時に整理するとスッキリします。

JSONPの動作原理



 Wikipediaさんをみてみると、そのものずばりのことが書かれています。scriptタグ内のsrc属性は別ドメインのURLを指定できるという点と、そのレスポンスはJavaScript関数呼び出し形式になるという点をついたのが、JSONPの動作原理です。なんというか、仕様の考慮不足を利用した仕組みだと思います。
JSONP - Wikipedia

ブラウザなどに実装されている「同一生成元ポリシー」という制約により、Webページは通常、自分を生成したドメイン以外のドメインのサーバと通信することはできない。 しかし、HTMLのscriptタグのsrc属性には別ドメインのURLを指定して通信することができるという点を利用することによって別ドメインのサーバからデータを取得することが可能になる。
JSONPでは、通常、上記src属性のレスポンスの内容はjavascript関数呼び出しの形式となるため、src属性に指定するURLにその関数の名前をクエリ文字列の形式で付加する。一般的な方法では、この時に指定する関数名はWebページ側ですでに定義されているコールバック用の関数の名前になる。

 しかし考えてみたら、他のサイトに設置されたJavaScriptを呼び出して使うというのは、当たり前のようにやっていますよね。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

JSONPはそれに対してデータを返す形式を、呼び元と呼び先でお互いに決めておくことで成り立っています。
図にすると、こんな感じだと思います。
f:id:dkfj:20141204194739p:plain

jquery.xdomainajax.jsの謎



 両者のお約束の元に成り立っているのがJSONPです。一方で、どんなサイトからでもデータをとってこれるという謎のプラグインがあります。jquery.xdomainajax.jsです。スクレイピングで利用されることが多いのですが、どうやってるのかなぁと思っていました。JSONPの原理を理解した上でソースを見ると、一目瞭然でした。 Yahoo! Pipesをかまして、JSONP形式に変換しています。
f:id:dkfj:20141204200201p:plain

 Yahoo! Pipesの太っ腹さに依存したライブラリです。外部サービスに依存したモジュールという異色の存在なのかもしれません。

感想



 長年何となく気になってて放置してたものを、ちょっとだけ調べてみました。10分くらいの調査で直ぐ解るので、気になったことはちゃんと調べるに限りますね。もし理解が間違っていたら教えて下さい。

See Also:
プログラマになりたい Advent Calendar 2014

はてなダイアリーから、はてなブログ(独自ドメイン)に移行したらこうなった

 全部俺AdventCalendarの2日目です。
今年の4月に、はてなダイアリーからはてなブログ(独自ドメイン)に移行しました。その顛末というか困っているところです。まずは、アクセス数の推移のグラフを見てください。

f:id:dkfj:20141203232356p:plain

はい。だだ下がりです。

アクセスが下がった要因



 アクセス数が減った直接的な原因としては、Googleからのオーガニック検索が減ったことが一番大きいです。1日1,000アクセスくらいあった検索が、1/3くらいになっています。
f:id:dkfj:20141203232956p:plain

Googleからの検索結果の流入が減った要因



 移行前から、アクセス数は7〜8割くらいになるかと思っていました。しかし、現状だと半減以上となかなか厳しい状況です。原因は幾つか考えられるのですが、予想よりひどくてよく解からんという状況です。幾つか考えている要因としては、次の3つくらいです。

  1. 評価の低いドメインの使用
  2. 301リダイレクトによる被リンク効果の減少
  3. はてなブログの独自ドメインの仕様の問題?

 1つ目の評価の低いドメインの使用については、新たに取得したドメインなので覚悟していました。いわゆるドメインエイジが若く、Googleからの評価が低いことは解っていました。しかし、その影響がどれくらいなのか解りません。
 2つ目は、301リダイレクトのよる被リンク効果の減少です。これは、Googleの検索担当の人がインタビューで言及しています。301リダイレクトで評価は引き継ぐが、10の評価を全て引き継ぐわけではなく、7〜8くらいだと。これを根拠に、アクセス数は7割くらいになるかと思っていました。
 3つ目の「はてなブログの独自ドメインの仕様の問題?」については、単なる邪推だと思っています。はてなブログの独自ドメイン割り当てについては、CNAME方式です。なので、関係ないだろうと思っています。ただし、稀に変なリダイレクトしているのではと思うこともあるので、その辺りが関係しているのか、少しだけ疑っています。

何故、独自ドメインにしたのか?



 そもそもアクセス減が予想されるのに、何故移行したのかという理由です。直接的な理由としては、JavaScriptへの自由度を上げたかったり、Google WebMasterツールを使いたかったというのがあります。もっと根源的なところだと、本も出版することもあり個人としてのレピュテーションをあげていこうと考えていました。その一環で、ついでに覚えやすい独自ドメインにしようかと考えました。正直なところ、余り意味はなかったのかもしれません。

感想



 SEOに詳しい人、誰か助けてください!!
ブコメでもTwitterでも何でも良いので、アドバイス頂ければありがたいです。
一方で、色々な施策の効果を検証しやすいので、面白い実験材料が出来たかなとも思います。

See Also:
AWS Route53を使って、はてなダイアリーから、はてなブログに独自ドメインを設定した話
クローラー/スクレイピング Advent Calendar 2014
プログラマになりたい Advent Calendar 2014

スクレイピングのお仕事について

 今年一番のトピックスは、クローラー本の出版でした。ちょうど、昨年の今頃に企画が舞い込んできて、2月〜7月くらいでせっせと書いていました。企画から執筆中まで、一貫してクローラー本の需要があるのか半信半疑でした。半信半疑というより、売れないだろうと思いながら書いていました。しかし、蓋を開けてみたら思いのほか好調で、既に増刷も2回繰り返しています。Amazonの順位の方も順調で、4ヶ月程ほぼ3,000位以内をキープしています。

f:id:dkfj:20141202231546p:plain

 これが不思議で仕方がないので、どんな人がクローラーやスクレイピングを必要としているのか、ちょっと考えてみます。考える材料としては、クラウドソーシングサイトで「スクレイピング」や「クローラー」、「データ収集」といったキーワードで検索してみます。対象のサイトとしては、以下の2サイトです。
Lancers
CrowdWorks

クラウドソーシングでの求人の分類



 人間系の収集&まとめですが、下記のような求人にまとめられます。

主な求人内容
  • 特定サイトからのデータ抽出(サイト非公開)
  • 求人サイトからのデータ抽出
  • ヤフオクからの出品情報の抽出
  • ECサイトから商品データ抽出
  • アダルト動画&画像の抽出とブログへの投稿
  • 2chからデータ抽出とブログへの投稿
報酬帯
  • 5,000〜50,000円 8割程度
  • 50,000〜100,000円 2割程度

 目立つのは、抽出&ブログへの自動投稿系の求人です。複数の依頼者から定期的に求人依頼があるようです。半ばスパムの世界なので、効率重視なのでしょうね。いかに安い原価で大量のサイトを作ることを突き詰めた結果でしょう。
 また次に目に付くのは、特定サイトからのデータ抽出です。抽出先は非公開で、クローズドな形でやり取りして提案まで行き着くパターンのようです。
 あとは安定して多いのが、Amazonからのデータ抽出です。これは検索条件を変えれば幾らでも出てきそうな勢いでした。

 報酬帯は、5,000〜50,000円が多いですが、私にはそもそもクラウドソーシング系の報酬の相場が解らないので、この報酬が相場なのか安いのかは解りません。ただ、内容を見ている限りは難易度が低く類似の案件が多いので、稼ぎやすいのかもしれません。

感想



 考える材料にしようとクラウドソーシングサイトを見ていたのですが、登録されている案件が興味深すぎて、それどころではなかったです。クローリング対象のデータとして、クラウドソーシングサイトが魅力的すぎるので、どこかで調査してみたいですね。求人のカテゴリの推移や相場をデータ化すると、いろいろな考察の元ネタになるはずです。


See Also:
クローラーとAWSが出会ったら?第3回Webスクレイピング勉強会@東京
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
「第2回Webスクレイピング勉強会@東京」に参加&発表してきました
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次


参照:
クローラー/スクレイピング Advent Calendar 2014
プログラマになりたい Advent Calendar 2014

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

S3のイベント通知機能(S3 Event Notifications)に対するユースケースを考える

 日本のAWS関係者がre:Inventの発表で盛り上がっているなか、風邪ひいて寝込んでました。季節の変わり目には、気をつけましょう。
 さて、そんな感じで全然追いつけていませんが、特に面白いなぁと思ったのが、S3 Event NotificationsとAWS Lambdaです。Lambdaについてはまだ触っていないので何ともいえない部分がありますが、発表内容を見る限りインフラの在り方を変えるような存在かもしれません。そして、S3のEvent Notifications。これ、めちゃくちゃ便利です。S3のイベント(現在は、putとpushとcopy)が発生したら、SNSやSQSに通知を送れるという機能です。何が便利かというと、ファイルのアップロードをトリガーに処理を書けるということです。頭に浮かんだユースケースを1つ書いてみます。

S3 Event Notificationsを使ったクローラーのユースケース



 最近、クローラー開発のステマばかりしているので、今回もそのケースで説明してみます。処理の流れとしては、下記のようなものを想定します。

  1. データをダウンロードする
  2. ダウンロードしたデータを生データとしてS3に保存する
  3. S3の未処理の生データを取得して、加工処理をおこなう

 この処理の中で、3の部分が少し曲者になります。未処理のデータが何かというのを特定する方法が必要になるからです。今までの対処方法としては、次のような方法が考えられます。

  • 処理前/済みのデータを管理するデータベース等を用意する
  • 処理前と処理済みでディレクトリをわけて、処理が終わったら移動させる
  • 2の保存と同時に、SQSに登録する

 一手間があって面倒くさいというのが実情でした。また、処理サーバを複数にすると排他制御の仕組みが必要になり、複雑になります。3の処理が一番楽なのですが、S3に直接データだけアップしたいというようなケースには対応できません。

 S3 Event Notificationsを使えばどうなるのでしょうか?
下に簡単な図を載せていますが、クローラーはただデータを集めて保存するだけに徹すればよいことになります。その後のS3⇒SQS⇒(EC2上での)処理は、良きに計らえという状態になります。疎結合なアーキテクチャになりますよね。また処理サーバをキューの数に応じたAutoScaleにしておいたら、処理が溜まったら自動的に増強してくれます。

f:id:dkfj:20141115131937p:plain

S3 Event Notificationsをユースケースの妄想



 この他にも、いろいろな使い道が考えられます。みなさん、いろいろ妄想してみてください。

  • ElasticTranscodeと連携して、アップロードしたら動画変換
  • サーバーレスで、SNSを発行するトリガー
  • (Getイベントに対応したら)メッセージを読んだら自動的に削除
  • (Getイベントに対応したら)メッセージを読んだら自動的に爆発

S3 Event Notificationsの使い方



 未来有望なS3 Event Notificationsです。妄想するだけでなく、実際に使ってみましょう。通知を送るだけであればAWSマネージメントコンソールだけで簡潔できます。

手順としては、次の通りです。

  1. SQS(SNS)を作成し、パーミッションの設定をする
  2. 新規もしくは既存のS3バケットに、Event設定をする
  3. ファイルをアップロードする
  4. SQS(SNS)を確認する

 まず1つ目ですが、今回はSQSの例を紹介します。ポイントは、パーミッション設定です。
対象のバケットからの通知を許可します。具体的には、SourceARNでStringLikeの条件をつけます。

f:id:dkfj:20141115133107p:plain

 2つ目のS3バケットへの設定は、簡単です。
バケットのPropertyの、Eventの項目を設定します。

f:id:dkfj:20141115133258p:plain

 先ほどの権限設定がうまくいっていないと、下記のようなエラーがでます。

Unable to validate the following destination configurations :Permissions on the destination queue to not allow S3 to push notifications from this bucket

 ファイルをアップロードすると、設定が上手くいっていればSQSの画面からキューが登録されているのを確認できます。
f:id:dkfj:20141115133536p:plain
f:id:dkfj:20141115133604p:plain

感想



 とっても便利です。システムの肝は、疎結合&シンプルだと思います。それを実現するために、さらに便利な機能が追加されたと言えるでしょう。更にAWS Lambdaと組み合わせれば、いろいろな事が出来そうです。楽しみ!!

ヤフー「つぶやき感情分析」で、衆議院議員の人気度を見る

 ネットを見てると、面白いサービスが出ていました。

 ヤフー株式会社は12日、ソーシャルメディア上の投稿を検索できるYahoo!検索の「リアルタイム検索」において、「つぶやき感情分析」の正式版を公開した。

 つぶやき感情分析は、Twitter上の投稿を分析し、検索したキーワードについてユーザーがどのような感情を持っているかを、「ポジティブ」「ネガティブ」の割合でグラフ表示する機能。2013年9月にベータ版として提供を開始し、今回、正式版として公開した。

ヤフー「つぶやき感情分析」、Twitter上の感情を「ポジ/ネガ」で判定 -INTERNET Watch

 Twitterの情報をもとに、感情分析をするというサービスです。簡単にいうと、入力されたキーワードに対して、世間は好きか嫌いかを出すというサービスです。こういったことをやりたいなぁと思って、Twitterのデータを大量に収集したり、そのデータを分析したりしたことがあります。
 こういった感情分析があれば何が出来るのか、いろいろ妄想がはかどります。今回は旬なテーマとして、衆議院議員に対する世間の反応をみてみましょう。

「つぶやき感情分析」を使ってやったこと



 

  • 衆議院サイトの議員一覧から、全議員の名前を収集する
  • 議員一人一人に対して、Capybara+Seleniumを使って「つぶやき感情分析」をする
  • 結果を一覧化する

その結果は、次の通りです。

名前 ポジティブ(%) ネガティブ(%) 備考
逢沢一郎 0 0  
青木愛 35 7  
青柳陽一郎 0 0  
青山周平 61 0 同名のオートレーサーがいる
赤枝恒雄 0 0  
赤澤亮正 0 0  
赤羽一嘉 0 0  
あかま二郎 0 0  
赤松広隆 0 0  
赤嶺政賢 0 0  
秋葉賢也 0 0  
秋元司 0 0  
秋本真利 0 0  
浅尾慶一郎 0 0  
安住淳 0 0  
麻生太郎 10 14  
足立康史 0 0  
穴見陽一 0 0  
阿部寿一 0 0  
安倍晋三 0 22  
あべ俊子 0 0  
阿部知子 0 26  
甘利明 0 32  
荒井聰 0 0  
安藤裕 0 0  
池田道孝 - -  
池田佳隆 0 0  
伊佐進一 0 0  
井坂信彦 0 0  
石井啓一 0 0  
石川昭政 0 0  
石崎徹 0 0  
石関貴史 0 0  
石田祝稔 0 0  
石田真敏 0 0  
石破茂 0 28  
石原慎太郎 34 9  
石原伸晃 0 18  
石原宏高 0 0  
泉原保二 - -  
泉健太 0 0  
井出庸生 0 0  
伊藤信太郎 0 0  
伊藤忠彦 0 0  
伊藤達也 0 0  
伊東信久 0 0  
伊東良孝 0 0  
伊藤渉 0 0  
稲田朋美 0 3  
稲津久 0 0  
井野俊郎 0 0  
井上信治 0 0  
井上貴博 0 0  
井上英孝 0 0  
井上義久 0 0  
井林辰憲 0 0  
伊吹文明 0 0  
今井雅人 0 62  
今枝宗一郎 0 0  
今津寛 0 0  
今村洋史 0 0  
今村雅弘 0 0  
岩田和親 0 0  
岩永裕貴 0 0  
岩屋毅 0 0  
上杉光弘 0 0  
上田勇 0 0  
上西小百合 0 0  
うえの賢一郎 - -  
上野ひろし 0 0  
浮島智子 0 0  
生方幸夫 0 0  
浦野靖人 0 0  
漆原良夫 0 0  
江崎鐵磨 - -  
江田憲司 0 28  
江田康幸 0 0  
枝野幸男 3 17  
江渡聡徳 0 0  
衛藤征士郎 0 0  
江藤拓 0 6  
遠藤敬 0 0  
遠藤利明 0 0  
大岡敏孝 0 0  
大串博志 0 0  
大串正樹 0 0  
大口善徳 0 0  
大久保三代 0 0  
大熊利昭 0 0  
大島敦 0 0  
大島理森 0 0  
太田昭宏 0 0  
大塚高司 0 0  
大塚拓 0 0  
大西健介 0 0  
大西英男 0 0  
大野敬太郎 0 0  
大畠章宏 0 0  
大見正 0 0  
岡田克也 0 27  
岡本三成 0 0  
小川淳也 0 0  
奥野信亮 0 0  
奥野総一郎 0 0  
小熊慎司 0 0  
小倉將信 0 0  
小此木八郎 0 0  
小里泰弘 0 0  
小沢一郎 1 33  
小沢鋭仁 0 18  
小田原潔 0 0  
越智隆雄 0 0  
鬼木誠 0 0  
小野寺五典 31 0  
小渕優子 3 40  

実装について



 チョロチョロっと書いたので、手抜きの極みです。Gistを貼り付けておくので、マサカリ歓迎です。

衆議院議員一覧から名前を抜き出して、ヤフー「つぶやき感情分析」で好悪を調べる


 実装に際して、名簿を集めるのは単一ページに対してNokogiriを使ってスクレイピングするだけなので苦労はなかったです。しかし、「つぶやき感情分析」の検索結果を取得するのが悩みどころです。結果を画像で表示していて、その画像はJavaScriptで取得して描画しているようです。ちょっとその辺りを解析するのが面倒くさかったので、Seleniumで画面キャプチャしてその結果を手で起こしました。ビバ手作業!!ちなみにNokogiriやSeleniumを使ってスクレイピングする方法は、Rubyによるクローラー開発技法に書いている模様ですw

感想



 取得対象者が少ないなぁと思ったら、取得ページが分割されていて"あ行"しか取っていませんでした。面倒くさいので、そのまま放置しています。今回は半自動でしたが、全て手作業でするより10倍くらいは早かったと思います。全部自動化とかすると逆に大変な場合もあるので、ケースバイケースで使い分けるのもありなのではないでしょうか?
 ちなみに結果を眺めてたのですが、「つぶやき感情分析」はネガティブに傾きすぎる傾向があります。政治絡みの単語そのものがネガティブな得点与えられているのかなと思います。今度、別分野で試してみます。(結果取得の部分も、暇見つけて自動化考えてみます。)
 また、あまり呟かれていない、阿部知子さんとか小沢鋭仁さんなどもネガティブな評価が高くなっています。恐らく苗字と名前でもそれぞれ評価をして、総合的に判断するといった処理をしているのではないでしょうか。(それで、何故評価が下がるかは、リストの前後をみてください)
 誤解のないように言っておくと、この呟きの評価と選挙の当落は全く相関はないと思います。マイナスの投票が出来ない分、より嫌われている方が存在感が大きさを示している可能性があります。ここで大事になるのは、一定の基準で毎日の推移が見えることによって、何らかの指標に使えるという可能性があるということです。

See Also:
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
「第2回Webスクレイピング勉強会@東京」に参加&発表してきました
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次

参照:
Yahoo!検索(リアルタイム)
ヤフー「つぶやき感情分析」、Twitter上の感情を「ポジ/ネガ」で判定 -INTERNET Watch