SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
BPStudy#100
タイムラインでポジろう!!
2015年シーズン結果報告編
にがうり
@bohemianway
自己紹介
❖ 職業 : フリーランスのWeb系何でも屋やってます。
❖ 好きなチームとか
❖ 今は亡き「東京ドームの日ハム」ファン
❖ あまり特定のチームには肩入れせずに、色々な球場、試合に足を運んでいます
❖ 甲子園、マツダ、ヤフドの3球場に足を運べば12球団制覇
❖ 好きな選手
❖ 1人あげるならガッツこと小笠原道大(現中日二軍監督)。日ハムファンになったのもガッツがきっかけ
❖ 20世紀のベストナインをオール助っ人で投票する程度の助っ人好き
❖ 色んな意味で惜しい選手も好物です。荒木(選球眼があれば…)、糸井(頭が…)、實松(当たれば…)、多村
(健康なら…)などなど
❖ 数少ない同年代の選手を見守っています
❖ 1977年(昭和52年)度生まれ。同い年の現役は か4人
❖ 現役 : 荒木雅博(中), 福留孝介(阪), 安藤優也(阪), 鶴岡一成(阪)
本日のテーマ
❖ Twitterのハッシュタグをベースにファンのポジネガを算出し、チームの状態との関連性を比較
❖ 全体の結果
❖ ベイスターズファンは本当にポジティブなのか? (DeNA)
❖ 優勝候補オリックス (オリックス)
❖ 大型連敗はファンの心を折ってしまったのか? (DeNA, 西武, ヤクルト)
❖ セ・リーグの混戦 (ヤクルト, 巨人, 阪神, 広島)
❖ 実装よりの話題
❖ 前回からの改善点
❖ 苦労したこと
❖ 積み残しの課題
❖ その他
❖ 参考にさせて頂いたサイト、資料など
使ったもの
❖ 言語: Python (2.7.11)
❖ BPStudyっぽく
❖ DB : MySQL (5.6.27)
❖ 抽出したツイート、ポジネガ判定結果等の格納
❖ 日本語解析 : Mecab (0.996)
❖ ポジネガ判定の下処理に必要な、品詞毎の語句分解を行うために利用
❖ http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html
❖ 日本語辞書 : mecab-ipadic-neologd (0.0.4)
❖ Mecabの動作に必要
❖ 前回はIPA辞書(2.7.0)を利用していましたが、新しい語句に対応していないためIPA辞書を元に拡張したこちらを採用
❖ http://diary.overlasting.net/2015-03-13-1.html
❖ ポジネガ判定 : 単語感情極性対応表 (以降、感情表と記載)
❖ http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html
❖ Mecabで分解された語句毎にこの感情表と照合を行い、スコアを取得
❖ ※語彙数約5万5千。ポジティブ系の単語が5千程度で残りはほぼ全てネガティブ系の判定。
❖ 普通に使うと超ネガティブな結果になるため、実際にはかなり大規模な調整を入れています。詳しくは後述
対象データ
❖ 1日毎に、1チームあたり200件のツイートをランダムに抽出
❖ どのチームのツイートかは下記ハッシュタグで判断。
❖ 該当ハッシュタグが複数あるツイートは抽出対象外
❖ 主な対象期間
❖ シーズンの開幕から全日程終了まで
❖ 2015/3/27(金)∼2015/10/09(金) ※全日程終了は10/7(水)
チーム名 ハッシュタグ チーム名 ハッシュタグ
オリックス #bs2015 DeNA #baystars
日本ハム #lovefighters 中日 #dragons
楽天 #rakuteneagle
s
ヤクルト #swallows
西武 #seibulions 巨人 #kyojin
ロッテ #chibalotte 阪神 #hanshin
ソフトバンク #sbhawks 広島 #carp
※期間中の平均ツイート数/日
試合が無い日 20,000∼25,000
試合がある日 60,000∼70,000
程度
ポジネガ判定の例
❖ 例1
❖ ツイート
❖ 抜けた!サヨナラ!4連勝!#dragons
❖ Mecabで品詞毎に分解
❖ 抜け / た / ! / サヨナラ / ! / 4 / 連勝 /!/ # / dragons
❖ ※実際には、分解した単位毎に品詞の取得等も行っています。詳しくは後述
❖ 分解結果を1つずつ単語感情極性対応表(を元にしたデータ)と照合し、スコアを取得。
❖ 抜け, -0.1 / サヨナラ, 0.2 / 連勝, 0.5
❖ ※照合できない単語は無視
❖ スコア :0.6 (-0.1 + 0.2 + 0.5)
❖ ※単語毎のスコアは1∼-1の間
ポジネガ判定の例
❖ 例2
❖ ツイート
❖ \横浜優勝/ 神様仏様山 様! #baystars
❖ 品詞毎に分解
❖ \ / 横浜 / 優勝 / / / 神様 / 仏様 / 山 / 様 / !/ # / baystars
❖ ※山 様の分解に失敗しています
❖ スコアを取得。
❖ 優勝, 0.3 / 神様, 0.988
❖ ※優勝は \横浜優勝/ で頻出するため抑えめに調整
❖ スコア :1.288 (0.3 + 0.988)
テーマ1. 全体の結果
テーマ1. 全体の結果
貯金推移 - セ
-18
-14
-11
-7
-4
0
4
7
11
14
03/27
04/03
04/10
04/17
04/24
05/01
05/08
05/15
05/22
05/29
06/05
06/12
06/19
06/26
07/03
07/10
07/17
07/24
07/31
08/07
08/14
08/21
08/28
09/04
09/11
09/18
09/25
10/02
10/09
ヤクルト 巨人 阪神 広島 中日 DeNA
※貯金推移の元データは「プロ野球ヌルデータ置き場」様より http://lcom.sakura.ne.jp/NulData/
簡略化のため金曜毎の順位比較をしており、その他の曜日の変動は無視
テーマ1. 全体の結果
ポジネガ推移 - セ
-0.042
-0.028
-0.014
0.000
0.014
0.028
0.042
0.056
0.070
03/27
04/03
04/10
04/17
04/24
05/01
05/08
05/15
05/22
05/29
06/05
06/12
06/19
06/26
07/03
07/10
07/17
07/24
07/31
08/07
08/14
08/21
08/28
09/04
09/11
09/18
09/25
10/02
10/09
ヤクルト 巨人 阪神 広島 中日 DeNA
※セパあわせたポジネガ期間中の平均は 0.034点。 極力0に うように調整
こちらも金曜毎の比較。前6日分のスコアを含めた移動平均で算出
テーマ1. 全体の結果
貯金推移 - パ
-30
-20
-10
0
10
20
30
40
50
03/27
04/03
04/10
04/17
04/24
05/01
05/08
05/15
05/22
05/29
06/05
06/12
06/19
06/26
07/03
07/10
07/17
07/24
07/31
08/07
08/14
08/21
08/28
09/04
09/11
09/18
09/25
10/02
10/09
ソフトバンク ハム ロッテ 西武 オリックス 楽天
テーマ1. 全体の結果
ポジネガ推移 - パ
-0.064
-0.048
-0.032
-0.016
0.000
0.016
0.032
0.048
0.064
0.080
03/27
04/03
04/10
04/17
04/24
05/01
05/08
05/15
05/22
05/29
06/05
06/12
06/19
06/26
07/03
07/10
07/17
07/24
07/31
08/07
08/14
08/21
08/28
09/04
09/11
09/18
09/25
10/02
10/09
ソフトバンク 日本ハム ロッテ 西武 オリックス 楽天
テーマ2. ベイスターズファンは
本当にポジティブなのか?
テーマ2. ベイスターズファンは本当にポジティブなのか?
❖ 好調な序盤
❖ 交流戦での12連敗
❖ 貯金無しでの首位ターン
❖ そして史上初の首位ターンからの最下位転落
❖ ベイスターズファンはこの展開でどれだけポジティブで
居られたのか?
テーマ2. ベイスターズファンは本当にポジティブなのか?
※ポジティブなベイスターズファンの想像図
(*^⃝^*)
テーマ2. ベイスターズファンは本当にポジティブなのか?
ポジネガと貯金推移の比較
-18
-13.5
-9
-4.5
0
4.5
9
13.5
-0.020
-0.010
0.000
0.010
0.020
0.030
0.040
0.050
03/27
04/03
04/10
04/17
04/24
05/01
05/08
05/15
05/22
05/29
06/05
06/12
06/19
06/26
07/03
07/10
07/17
07/24
07/31
08/07
08/14
08/21
08/28
09/04
09/11
09/18
09/25
10/02
10/09
ポジネガ 貯金
❖ 9/25前後を除くと、概ね貯金推移に沿った変動
(*^⃝^*)
首位ターンなんだ!!
優勝間違いなしなんだ!!
(ヽ*´⃝`*)
首位ターンからの最下位は
史上初なんだ。。。
(*^⃝^*)
首位なんだ!
優勝するんだ!
(ヽ*´⃝`*)
パリーグ強すぎるんだ。。。
テーマ2. ベイスターズファンは本当にポジティブなのか?
❖ 期間中(3/27-10/9)のポジネガスコア変動
❖ 平均 : 0.017 (12球団の平均 0.034)
❖ 最大 : 0.41 (7/10) ※首位ターンの頃
❖ 最小 : -0.11 (6/19 & 10/2) ※ 12連敗期間中 & 最終戦
(最下位決定)の前日
❖ チームの状態に連動していてかなり正直
テーマ2. ベイスターズファンは本当にポジティブなのか?
❖ 考察
❖ 結構ションボリしている
❖ それでも中々マイナスにならないこと、後半の悲惨な
状況を考慮するとポジティブと言えるのでは
❖ 観客動員、ファンクラブ会員数の好調さを考慮すると、
耐性の薄い新規ファンが多いのもスコアの変動に影
響与えているかも?(詳細は未確認)
テーマ3. 優勝候補オリックス
テーマ3. 優勝候補オリックス
❖ 前年は最後まで優勝を争い久しぶりのAクラス。
❖ 大型補強を敢行
❖ オープン戦も好調
❖ 今年こそは・・・!と思いきや怪我人続出
❖ 前年の優勝争いを支えた強力リリーフ陣も総崩れ
❖ 頼みの金子は怪我で離脱、糸井は連続3割が6年で途切れ、森
脇監督は途中辞任
❖ 最下位だけは免れたけど・・・という状況をどう捉えたのか?
テーマ3. 優勝候補オリックス
ポジネガと貯金推移の比較
-30
-22.5
-15
-7.5
0
-0.060
-0.048
-0.036
-0.024
-0.012
0.000
0.012
0.024
0.036
0.048
0.060
03/27
04/03
04/10
04/17
04/24
05/01
05/08
05/15
05/22
05/29
06/05
06/12
06/19
06/26
07/03
07/10
07/17
07/24
07/31
08/07
08/14
08/21
08/28
09/04
09/11
09/18
09/25
10/02
10/09
ポジネガ 貯金
❖ 9/25前後を除くと、概ね貯金推移に沿った変動
借金しかないせいで変なグラフに。。。
6/2に森脇監督辞任
最下位脱出したころ
テーマ3. 優勝候補オリックス
❖ 期間中のポジネガスコア変動
❖ 平均 : 0.009 (12球団の平均 0.034)
❖ 最大 : 0.046 (6/12) ※福良体制初の3連勝を記録した時期
❖ 直後に心折れてるとか言わない
❖ かつて近鉄吸収が報じられたのは2004/6/13。前後でそれなりに言及がされているため、スコ
アに何らかの影響を与えていた可能性あり
❖ 最小 : -0.054 (7/3) ※ 復帰した金子がKOされていた時期
❖ 一貫して他チームの底値と同程度。底値安定。
❖ ただし、7/3を除くとそこまで他チームとの乖離が無い
❖ 最下位脱出が視野に入るタイミングで多少ポジティブ方面に良化
テーマ3. 優勝候補オリックス
❖ 考察
❖ DeNAと違い順位変動が殆ど無いこともあるが、あまり急激には
変動していない。徐々にネガティブに傾いている傾向
❖ そもそも古参ファンは慣れていると思われる
❖ 21世紀以降連続Aクラスになっていない
❖ 2008年(2位)の翌年も優勝候補に挙げられていた関わらず、
怪我人続出で最下位
❖ DeNA同様今年の観客動員はかなり増えていたが、新規よりも出
戻りの方が多かったのかも? (未確認)
テーマ4. 大型連敗はファンの心
を折ってしまったのか?
テーマ4. 大型連敗はファンの心を折ってしまったのか?
❖ 大型連敗期間中のスコアを抜粋
❖ ヤクルトの9連敗 (5/4 - 5/16)
❖ DeNAの12連敗 (6/3 - 6/20)
❖ 西武の13連敗 (7/15 - 8/4)
テーマ4. 大型連敗はファンの心を折ってしまったのか?(ヤクルト)
9連敗中のポジネガ推移
-0.030
-0.024
-0.018
-0.012
-0.006
0.000
05/02
05/03
05/04
05/05
05/06
05/07
05/08
05/09
05/10
05/11
05/12
05/13
05/14
05/15
05/16
05/17
05/18
05/19
❖ 綺麗に落下
5/4 連敗スタート
5/17 連敗ストップ
テーマ4. 大型連敗はファンの心を折ってしまったのか?(DeNA)
12連敗中のポジネガ推移
-0.020
-0.016
-0.012
-0.008
-0.004
0.000
0.004
0.008
0.012
06/01
06/02
06/03
06/04
06/05
06/06
06/07
06/08
06/09
06/10
06/11
06/12
06/13
06/14
06/15
06/16
06/17
06/18
06/19
06/20
06/21
06/22
06/23
06/24
06/25
❖ やはり綺麗に落下。試合が無い日の方が落下が大きいような・・・
6/3 連敗スタート
6/23に連敗ストップ
6/21,22は試合無し
6/8は試合無し
6/15-18は試合無し
テーマ4. 大型連敗はファンの心を折ってしまったのか?(西武)
13連敗中のポジネガ推移
-0.040
-0.032
-0.024
-0.016
-0.008
0.000
0.008
0.016
07/12
07/13
07/14
07/15
07/16
07/17
07/18
07/19
07/20
07/21
07/22
07/23
07/24
07/25
07/26
07/27
07/28
07/29
07/30
07/31
08/01
08/02
08/03
08/04
08/05
08/06
❖ 試合が無い日に変動が大きいのはDeNA同様
7/15 連敗スタート
※前半最終戦
8/5に連敗ストップ
7/27 は試合無し
7/22,3 は試合無し
テーマ4. 大型連敗はファンの心を折ってしまったのか?
結論
ぽっきりと折れてました
テーマ5. セリーグの混戦
テーマ5. セリーグの混戦
最後まで優勝を争った4チームの後半を詳細比較
テーマ5. セリーグの混戦
ポジネガ推移
-0.050
-0.040
-0.030
-0.020
-0.010
0.000
0.010
0.020
0.030
0.040
0.050
09/0109/0209/0309/0409/0509/0609/0709/0809/0909/10
09/11
09/1209/1309/1409/1509/1609/1709/1809/1909/2009/2109/2209/2309/2409/2509/2609/2709/2809/2909/3010/0110/0210/0310/0410/0510/0610/07
巨人 ヤクルト 阪神 広島
10/2にヤクルト優勝決定!
9/11にヤクルト首位浮上
9/11まで阪神首位。
1月ぶりの陥落
誤審騒動は9/15
10/5に 博の発表
10/4に3位に並ぶも最終戦で4位転落
テーマ5. セリーグの混戦
❖ 考察
❖ 順位がストレートに反映されるのはこれまでの流れ
の通り
❖ 順位転落のダメージはより一層ストレートに反映され
る傾向
総評
❖ ポジネガはファン気質よりもチーム順位の方が大事!!
❖ だから、球団はファンを大切にするならしっかり補強し
よう!!
実装よりの話題
前回からの改善点
❖ 精度の向上
❖ 品詞分解精度の向上
❖ mecab-ipadic-neologdのおかげでかなり精度が向上
❖ ただし、mecab-ipadic-neologdの問題ではない問題も
❖ IPA辞書で判断不能な語句がサ変の名詞扱いになってお
り、そのままだとノイズの除外に難儀したため辞書の調
整を行った
❖ ポジネガ判定の調整
❖ ひたすら感情表のチューニングを行い対処
苦労したこと
❖ 感情表のチューニング
❖ シーズンの主要期間(開幕、GW、オールスター前後、最終盤)都合一月分程
度のツイートを10,000件/日取得し、品詞分解で登場回数上位5,000件程度の
単語のスコアをひたすら目視チェック&修正。
❖ その上でツイート単位のスコアリングを行い、スコア上位/下位のツイート
をチェック
❖ 不自然なスコアがついているツイートの単語毎のスコアをチェックし、
不自然なものがあれば修正
❖ チーム名、一般的な(試合展開とは関係ない)野球用語に類するもののスコア
は一律0にしています。ミット、バット、鷹、アナウンサー、等々
❖ このチューニングが一番時間かかりました。1日潰した・・・
積み残しの課題
前回からあまり変わっていません
❖ ツイートの抽出
❖ スパムアカウントやbotの除去
❖ RTを集計対象にするか否か (応援歌やスポーツ媒体系のツイートの影響が大分変
わる)
❖ 実況系とそれ以外のツイートでスコアリングを区別すべきか
積み残しの課題
❖ 日本語処理
❖ さらなる辞書の充実 (野球語の辞書は自分で作る必要がありそう)
❖ ひらがなの語句を感情表とぶつけているが、誤判定を誘発しがち。
❖ 全角半角対応及び、それに伴う副作用
❖ 概ね、IPA辞書/mecab-ipadic-neologd に登録されている単語は日本語は全角、英数は半角の模様
❖ ツイート上の全角英数、半角カナ等はそのままだと辞書と照合できないため、unicode正規化(英
数/記号は半角、それ以外は全角、その他、一部丸数字の丸を除去等)を通して解決
❖ 副作用
❖ 全角半角が混在している顔文字(AA)の類は、辞書側でも混在した状態で登録されている
❖ つまり、顔文字についてはunicode正規化を通すとヒット率が下がる
❖ 一見ノイズとして無視してよさそうに見えるが、顔文字こそがもっとも強い感情表現。よっ
て、ポジネガ判断というテーマである以上は無視できない問題。今回は時間切れのため無視
積み残しの課題
❖ ポジネガ判定の調整
❖ 感情表は品詞の最小単位のため、「打つ」はあっても「打たれる」は無い。(分
解すると 「打た / れる」になるが、「打た」は「打つ」の未然形 / 「れる」は
接尾辞と判断される)
❖ 「打つ」を0.3、「れる」を-0.55としており合算するとマイナスなるよう調整
しているが、この2つが離れて登場していても合算してしまうため雑な計算に
なっている
❖ 実況系は少ない語彙でつぶやかれる傾向があるため、実況専用チューニングを施
すと精度向上が見込めそう
参考にさせて頂いた資料、サイトなど
❖ 抽出したツイート : タイムラインの皆様
❖ 貯金推移データ : 「プロ野球ヌルデータ置き場」様より
❖ http://lcom.sakura.ne.jp/NulData/
❖ 感情表
❖ 自然言語処理研究室
❖ http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html
❖ Mecabがサ変と誤判定する問題
❖ MaCabのユーザー辞書にmecab-ipadic-NEologdを手動で追加する
❖ http://qiita.com/K-1/items/5cb3601341f6fa4fdd95
ご静聴ありがとう
ございました!!

Más contenido relacionado

Destacado

OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会
Yuki Obara
 

Destacado (17)

こんなゴールデン・グラブ賞は嫌だ~2015 #bpstudy 100回目記念LT
こんなゴールデン・グラブ賞は嫌だ~2015 #bpstudy 100回目記念LTこんなゴールデン・グラブ賞は嫌だ~2015 #bpstudy 100回目記念LT
こんなゴールデン・グラブ賞は嫌だ~2015 #bpstudy 100回目記念LT
 
Baseball Play Study 2016冬〜Replacement!(ありがとう陽岱鋼!)
Baseball Play Study 2016冬〜Replacement!(ありがとう陽岱鋼!)Baseball Play Study 2016冬〜Replacement!(ありがとう陽岱鋼!)
Baseball Play Study 2016冬〜Replacement!(ありがとう陽岱鋼!)
 
数字から読む信号機とコリジョンルール
数字から読む信号機とコリジョンルール数字から読む信号機とコリジョンルール
数字から読む信号機とコリジョンルール
 
テキストマイニングによるプロ野球監督の分析
テキストマイニングによるプロ野球監督の分析テキストマイニングによるプロ野球監督の分析
テキストマイニングによるプロ野球監督の分析
 
黄金時代の創りかた〜持続的な成功が続く組織を創るには
黄金時代の創りかた〜持続的な成功が続く組織を創るには黄金時代の創りかた〜持続的な成功が続く組織を創るには
黄金時代の創りかた〜持続的な成功が続く組織を創るには
 
20161219 bpstudy スライド(11球団のSNS運用考察)
20161219 bpstudy スライド(11球団のSNS運用考察)20161219 bpstudy スライド(11球団のSNS運用考察)
20161219 bpstudy スライド(11球団のSNS運用考察)
 
2014年NPBたらいまわされ十傑
2014年NPBたらいまわされ十傑2014年NPBたらいまわされ十傑
2014年NPBたらいまわされ十傑
 
タイムラインでポジろう!
タイムラインでポジろう!タイムラインでポジろう!
タイムラインでポジろう!
 
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
 
数字から読む好不調の波
数字から読む好不調の波数字から読む好不調の波
数字から読む好不調の波
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96
 
User Happyをささえるアジャイルのココロとスクラムのキホン
User HappyをささえるアジャイルのココロとスクラムのキホンUser Happyをささえるアジャイルのココロとスクラムのキホン
User Happyをささえるアジャイルのココロとスクラムのキホン
 
20160619 wacate
20160619 wacate20160619 wacate
20160619 wacate
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会
 
あの選手なんでスタメン外されたん
あの選手なんでスタメン外されたんあの選手なんでスタメン外されたん
あの選手なんでスタメン外されたん
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
 
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
 

タイムラインでポジろう! 2015年シーズン結果報告編 - #bpstudy 100