プロ野球試合速報botのスライド作りました
選挙のデータで遊ぶ: 小選挙区の結果を予測してみました
はじめに
立候補者の得票数とは, つまり人気です[要出典].
そして立候補者の人気は, ググった時のヒット件数から分かるのでは, と思いました.
つまり, 立候補者の名前で検索した時のヒット件数から, 選挙の結果を予測できるはず.
選挙周りのデータを用意して, 予測してみます.
利用するデータ
朝日新聞に, 立候補者の情報が綺麗にまとまっていたので, スクレイプしました.
そして, "立候補者の名前"で検索し*1, ヒット件数を調べました.
結果として出来たデータは, こんな感じです.
データ全体はGithubにアップしてあります.
## BLOCK NAME AGE PARTY STATUS HIT ## 1: 北海道1区 横路 孝弘 73 民主 前 153000 ## 2: 北海道1区 野呂田 博之 56 共産 新 346000 ## 3: 北海道1区 船橋 利実 54 自民 前 2680000 ## 4: 北海道1区 飯田 佳宏 41 無所 新 543000 ## 5: 北海道2区 吉川 貴盛 64 自民 前 541000 ## 6: 北海道2区 池田 真紀 42 無所 新 1520000 ...
選挙区, 名前, 年齢, 党とヒット数です.
内容確認
予測の前に, データの内容確認をしてみます.
党別に, 候補者数と平均年齢を見てみます.
## PARTY CANDIDATE MEAN_AGE ## 1: 共産 292 53.18836 ## 2: 自民 283 53.34629 ## 3: 民主 178 50.59551 ## 4: 維新 77 45.31169 ## 5: 無所 45 53.17778 ## 6: 次世 39 50.46154 ## 7: 社民 18 56.83333 ## 8: 生活 13 54.23077 ## 9: 公明 9 52.11111 ## 10: 諸派 5 52.40000 ## 11: ALL 959 52.07821
共産党の立候補者数が案外多いな, と思いました(小並感).
全体で959人. 295議席なので, 倍率は3倍強, ということですね.
前回は1200人近くいましたが, だいぶ減りました.
候補者全体の平均年齢は52.1歳. 結構な年です
当選者の予測
各ブロックで, bingで検索したときのヒット数最大の人が当選するとします.
予測結果はこんな感じです. 全体.csvはこちら. みなさんの選挙区ではどうでしょうか.
BLOCK,NAME,AGE,PARTY,STATUS,HIT 三重1区,川崎 二郎,67,自民,前,3240000 三重2区,中野 武史,40,共産,新,2050000 三重3区,嶋田 幸司,40,自民,新,259000 三重4区,田村 憲久,50,自民,前,347000 三重5区,内藤 弘一,50,共産,新,321000 京都1区,平 智之,55,無所,元,2400000 京都2区,原 俊史,47,共産,新,2420000 京都3区,宮崎 謙介,33,自民,前,8260000 京都4区,田中 英之,44,自民,前,2330000 京都5区,小原 舞,40,民主,元,3050000 京都6区,安藤 裕,49,自民,前,719000 ...
全体的に, 共産党員のヒット件数が比較的多い気がします.
党別の獲得議席数予測
予測結果を党別に集計してみます.
## PARTY NUM ## 1 自民 99 ## 2 共産 90 ## 3 民主 41 ## 4 維新 20 ## 5 無所 17 ## 6 次世 9 ## 7 生活 7 ## 8 公明 6 ## 9 社民 6
共産党が多く, 公明党が少ない気がします. 自民党も, もっと勝つような気がします. 知りませんけど.
せっかくなので, 円グラフにしてみました.
考察
色々ダメそうです. とりあえず結果を見てから検討します.
性能評価
明日の開票結果を見て, 正答率を調べて追記します.
ベースラインは各新聞社など.
結果が楽しみです. 投票したくなりました.
以上です.
訂正(12月14日)
内容を修正しました. 利用したデータの内容が間違っていました.
前回衆院選のデータを使っていました/ 全く意味のないことを行っていました.
データを作り直し, 内容の修正を行いました.
ご指摘していただいた方々, 本当にありがとうございました.
Rでスポーツデータ解析がしたい: 千秋楽での勝率
はじめに
前回, 大相撲のデータを正しく作るのが辛い, ということを書きました.
Rでスポーツデータ解析がしたい: データを作るのって大変ですね - 300億円欲しい
まだ整形できていないのですが, 現段階で可能な解析をしたいと思います.
八百長問題が気になりますので, 千秋楽の勝率を集計してみます.
先行研究
大相撲のアノーマリー. 2010年に書かれた記事です.
八百長がありそうかどうか, という解析です.
実践! Rで学ぶ統計解析の基礎(8):大相撲のアノーマリー (2) (2/2) - @IT
もしも、この計算の追試や、何らかの追加計算をされた方がいらっしゃったら、是非ともその結果を教えてくださることを熱望します。 また、1999年以前10年間程度の十両・幕内の勝敗データを持っていらっしゃる方がおりましたら、そのデータを提供いただければ、より一層踏み込んだことが分析できると思います。
私の手元には, 1932年初場所から2014年9月までの幕内取組データがあります.
私の手元には, 1932年初場所から2014年9月までの十両, 幕内取組データがあります. (2014年12月8日訂正)
https://raw.githubusercontent.com/gghatano/sumo_data/master/winLoseDataTable.dat
このデータを使って, 追試をしてみようと思います.
まずは簡単なところで, 千秋楽(最終日)での勝率を計算してみました.
千秋楽での勝率
大相撲では, 勝ち越すかどうかが重要らしいです.
つまり, 各場所を8勝7敗以上で乗りきることが目標になるかと思われます.
なので, 最終日(15日目)を7勝7敗で迎えた力士は頑張らないといけません.
これを踏まえて, 最終日の勝率に注目します.
14日目までの勝敗状況別に, 最終日の勝率を集計してみました.
扱うデータは, 1932年から2014年9月場所までの, 幕内の取組208,612試合の結果です.
結果はこんな感じです.
左端が, 14日目で0勝14敗の力士の, 千秋楽での勝率.
右端が, 14日目で14勝0敗の力士の, 千秋楽での勝率です.
7勝7敗の人だけ急に強くなっているように見えます.
詳細はこちら.
まとめ
相撲. 面白そうですね.
以上です
訂正
2014年12月8日に一部修正しました.
Rでスポーツデータ解析がしたい: 千秋楽での勝率 - 300億円欲しい http://t.co/ixcoWSFsKb 64%そんなもんか。幕内取組データって書いてあるけど実際は十両のデータも含まれてる。十両から幕下に落ちると給料なくなるからある程度互助会出来るのは自然の摂理
— ゴクリン (@gokurin316) 2014, 12月 8
ご指摘, 本当にありがとうございます.
幕内ではない人たちが幕内かと誤解しておりました. アホでした.
Rでスポーツデータ解析がしたい: データを作るのって大変ですね
はじめに
R advent calendar 2014, 12月3日担当分です.
Rのコードは出てきません.
野球のデータで遊びたい
私は普段, メジャーリーグのデータで遊んでいます.
というのも, 整形されたメジャーリーグの詳細なデータが簡単に取得できるからです.
半年前に作ったスライドで申し訳ないのですが, こんな感じです.
pitchFxは, メジャーリーグの投球に関するデータ(を集めるシステム)です.
RでpitchRxパッケージを使うと簡単に取得できます.
他にも, メジャーリーグのデータは簡単に取得できます.
retrosheetという団体がデータをまとめてくれているので, ダウンロードして整形してcsvを出力してくれるスクリプト を使えば, すぐに80年分くらいの全試合全打席結果データが得られます.
後は適当に集計すれば終わりです. 簡単です. 弊ブログでも色々やっています. 楽しいです.
他のプロスポーツのデータで遊びたい
そろそろ, 他の色々なプロスポーツデータで遊びたくなってきました.
しかし, メジャーリーグのように, 都合よくデータがあるわけではありません.
何もない所から, バドミントンのデータで頑張っている友人がいます.
バドミントンの国際試合の結果を解析する準備が出来ました - バドミントン観戦記
荒野を進む感じが, とてもカッコイイです. 真似したいです.
しかし, Webスクレイピング. やったことありません.
なるほど. Rで簡単にできるらしいです. トライしてみました.
1. テニスのデータで遊びたい
男子プロテニスのデータを作ってみました.
ATP公式サイトが大会の結果をこんな感じでまとめて公開しています. トーナメント形式です.
このままだと扱えないので, 頑張ってcsv形式にまとめてみました.
結果です.
> head winLoseData.dat TOURNAMENT,GRADE,YEAR,MONTH,DAY,ROUND,PLAYER_1,PLAYER_2,WINNER Australian Open,1,1970,02,01,1,Roche_Tony,Bye,Roche_Tony Australian Open,1,1970,02,01,1,Cooper_John,Wilson_Ray,Cooper_John Australian Open,1,1970,02,01,1,Kukal_Jan,Hammond_Anthony,Kukal_Jan Australian Open,1,1970,02,01,1,Battrick_Gerald,Bye,Battrick_Gerald Australian Open,1,1970,02,01,1,Taylor_Roger,Bye,Taylor_Roger Australian Open,1,1970,02,01,1,Pollard_Geoff,Schloss_Lenny,Schloss_Lenny Australian Open,1,1970,02,01,1,Anderson_Mal,Werren_Mathias,Werren_Mathias Australian Open,1,1970,02,01,1,Lutz_Robert,Bye,Lutz_Robert Australian Open,1,1970,02,01,1,Okker_Tom,Bye,Okker_Tom
1968年から2014年まで, 3,425大会151,288試合のデータです.
どの大会の何回戦で誰と誰が戦ってどちらが勝ったか, を並べました.
整形できたので, あとは好きなように集計すればいいですね.
昨年のR advent calendarに, 素敵な記事がありました.
【R】【Python】igraphやNetworkXで手持ちのデータをネットワークに変換してみよう - 歩いたら休め
よく分かりました. ネットワークに変換してみました.
こんな感じです.
なるほど. よく分かりませんが, とりあえずそれっぽいことは出来ました.
時間があれば, この論文の追試をやってみようと思っていました.
時刻ごとの勝敗関係から作ったネットワークから, 強さランキングをつける, という話です.
2. 相撲のデータで遊びたい
大相撲のデータでも同じことが出来そうな気がしますね.
カド番力士と星のやりとり解析とか, 興味あります.
調べてみると, 最高のWebサイトがありました.
明治時代からの星取表がまとまっています. 昭和50年初場所〜大相撲星取表〜
やってみましたが,
ダメでした. ここまでは頑張ったのですが,
> head winLoseDataTable.dat H1-1,横綱,千代の富士,九重33,三杉里,W H1-1,横綱,千代の富士,九重33,琴ヶ梅,W H1-1,横綱,千代の富士,九重33,隆三杉,W H1-1,横綱,千代の富士,九重33,霧島,W H1-1,横綱,千代の富士,九重33,両国,W H1-1,横綱,千代の富士,九重33,太寿山,W H1-1,横綱,千代の富士,九重33,逆鉾,W H1-1,横綱,千代の富士,九重33,寺尾,L H1-1,横綱,千代の富士,九重33,安芸島,L H1-1,横綱,千代の富士,九重33,朝潮,W
辛かったです.
...力士って四股名を変えるんですよね. 若ノ花から若乃花とか. どう違うんだ.
全ての力士を正しく追いかけないといけません. 異なる人をちゃんと区別してidつけて整理して... って大変そうです.
よく考えると, そこまで相撲に興味がなかったので, ここで諦めます. ごめんなさい
データを作るのは大変です.
まとめと感想
自分でプロスポーツデータをまとめてみようとしました.
解析に使えるデータを作るのは凄く大変...ということが, 少しだけ分かりました.
「データサイエンティストはデータマエショリスト」と聞いたことがあります.
「データ解析は前処理が9割」とも聞いたことがあります. なるほど, と思いました.
解析屋の気持ちを汲み取って, 解析しやすい形式でデータを公開してくれる, そんな世界になってほしいな, と思いました.
以上です.
くりぃむしちゅーANNのキーワードbot作りました
内容
こんな感じです. 完全に自分用です.
くりぃむしちゅーANN #39
http://t.co/3woN6a7R4P
ゲスト なし
ヤマザキ春のババア祭り
— くりぃむしちゅーANNbot (@ariue_allnight) 2014, 11月 17
くりぃむしちゅーANN #18
http://t.co/3GWnIZsOVG
ゲスト なし
昭和のラジオっぽく始まる(後のスターダストナイト)
— くりぃむしちゅーANNbot (@ariue_allnight) 2014, 11月 17
くりぃむしちゅーANN #77
http://t.co/8nvrRNhcnR
ゲスト なし
「何だそのロバート・デ・ニーロ的な“で”は」,EDビーチがDに昇格
— くりぃむしちゅーANNbot (@ariue_allnight) 2014, 11月 17
謝辞
くりぃむしちゅーANNのまとめサイト. 謎の労力です. キーワードを利用させていただきました. ありがとうございました. くりぃむしちゅーのANN 放送内容のまとめ
日常に潜むBKBを見つけたい
タイトルの意味が分からない人がいるかもしれません.
BKBとは
バイク川崎バイクという芸人さんがいます.
- 元・街の帽子屋さん。現在はピン芸人として大阪で活動している。 1979年12月17日生まれ、兵庫県加古川市出身。 よしもとクリエイティブ・エージェンシー所属。大阪NSC26期生。 続きを読む
- このキーワードを含むブログを見る
youtube R-1グランプリ2014決勝戦
Naver まとめ
【ギアが落ちない】BKBことバイク川崎バイクの魅力とは【バイクだけに】 - NAVER まとめ
バース、
掛布の時代も良かったけど今シーズンもドキドキをありがとうまた来シーズン、
バイバイ!
BKB!
"@minomon1219: @BKBbunbun 惜敗で落ち込んでる全国の
タイガースファンにも元気になれるBKB下さい(>_<)"
— バイク川崎バイク(BKB) (@BKBbunbun) 2014, 10月 30
バイク川崎バイク. 略してBKBです.
ネタの内容
以下の2パターンです.
日常に潜む, 頭文字の並びが"BKB"になっているフレーズを言う → ひぃーあ! と言う
バイクっぽいことを言う. → バイクだけにね! ブンブン! と言う
例
そんなことより大変だ. 婆さんがこんな時間にブッ倒れた
婆さんが! こんな時間に! ブッ倒れた!
B! K! B!
ひぃーあ!
目標
"日常に潜むBKBを言う"を, 自動的に行いたいです.
その辺に転がっている文章で単語や文節の並びを見て, 頭文字の並びがB, K, Bとなっている箇所を自動的に発見したいです.
そのままツイートさせれば, バイク川崎バイクbotが作れます.
手法
青空文庫から文章を取得しました.
とりあえず, 坂口安吾と北大路魯山人と高村光雲の著作物からBKBを探してみました.
全ての文について, 単語や文節に分けてBKBを探しました.
そして結果をバイク川崎バイクbotにツイートさせてみました.
結果
やたら文学的になっています.
僕は曲馬団で空中サーカスと云っているブランコからブランコへ飛び移るのが最も好きだが 松下サーカスは目星しい芸人が召集でも受けているのか 座頭の他には大人がなく 非常に下手で 半分ぐらい飛び移りそこねて墜落してしまう
ブランコ から ブランコ
B! K! B!
ひぃーあ!
— バイク川崎バイクbot (@bot_bkb) 2014, 10月 31
軍国日本が今日の敗北をまねいたのは軍人に文化がなかつたからで 彼らに文化があつたなら 第一戦争などはしなかつたらう
文化がなかつたからで 彼らに 文化が
B! K! B!
ひぃーあ!!
— バイク川崎バイクbot (@bot_bkb) 2014, 10月 31
貧乏人にも高利貸にも美人がいないから 不幸にして偉大な恋愛が生れない
貧乏人にも高利貸にも美人がいないから
B! K! B!
ひぃーあ!!
— バイク川崎バイクbot (@bot_bkb) 2014, 10月 31
私は世のいはゆる健全なる美徳 清貧だの倹約の精神だの 困苦欠乏に耐へる美徳だの 謙譲の美徳などといふものはみんな嫌ひで 美徳ではなく 悪徳だと思つてゐる
美徳だの 謙譲の 美徳などといふ
B! K! B!
ひぃーあ!!
— バイク川崎バイクbot (@bot_bkb) 2014, 10月 31
小説家になろうからもスクレイプしています.
若様……本当に申し訳ありません!あの馬鹿どもにはきつい罰を与えますの
馬鹿どもには きつい 罰を
B! K! B!
ひぃーあ!!
http://t.co/AJIyGZW27L
— バイク川崎バイクbot (@bot_bkb) 2014, 11月 3
独特の世界観です.
次にやること
ネット小説は他にもたくさんあります. どんどん文章を取得していきます.
適当なニュース記事を定期的にスクレイプしてBKBを探すのも面白そうです.
使用したコード
Githubにおいてあります.
用意した文章を, mecab, cabocha, kakasiを使って文構造と頭文字の解析をして, あとはシェル芸です.
以上です.
sedで同じ文字の連続を圧縮して1文字にしたい
問題
例えば, hooooogeeeee を hogeにしたいのです.
解決策
このStack overflowの記事を参考にしました.
検索側でキャプチャパターンを使えばイケるらしいです. なるほど. キモいです.
やってみました. (.)\1+ で2文字以上の連続文字列になるんですね..
よく分かっていませんが, gsedなら欲しい結果が得られました.
$ echo hoooogeee | gsed 's/\([A-Za-z]\)\1\+/\1/g' hoge $ echo hoooogeee | sed 's/\([A-Za-z]\)\1\+/\1/g' hoooogeee
なるほど. wowoさんありがとうございました.
他の解決策
@kohse先生が教えて下さいました.
$ echo hoooogeeee | sed 's/\(.\)\1*/\1/g' hoge
なるほど. ありがとうございました.