MySQLにサザエさんじゃんけん研究所のデータを突っ込む
概要
ネットサーフィンしていたらサザエさんじゃんけん研究所というのを知って、おもしろそうだったので、個人的な解析用に過去のじゃんけん結果を拝借して、とりあえずローカルのDBに入れました。
コード
# coding: UTF-8
import MySQLdb
import requests
import re
import datetime
d = MySQLdb.connect(host='localhost', user='foo', passwd='bar')
c = d.cursor()
c.execute('SET AUTOCOMMIT = 1')
c.execute('CREATE DATABASE IF NOT EXISTS sazae')
c.execute('USE sazae')
c.execute('CREATE TABLE IF NOT EXISTS rps ( '
'id INT NOT NULL, '
'on_air DATE NOT NULL, '
'result TINYINT NOT NULL, '
'PRIMARY KEY (id) '
') ENGINE = InnoDB')
for y in xrange(1991, 2015):
s = requests.get('http://park11.wakwak.com/~hkn/data%s.htm' % y).content
s = s.decode('shift_jis').encode('utf-8')
for r in re.findall(r'第(\d+)回 (\d+)年(\d+)月(\d+)日.*? (.*)?\n', s):
id = int(r[0])
# 第253回が第233回になってるので直す
if (233, 1996, 10, 13) == (id, int(r[1]), int(r[2]), int(r[3])):
id = 253
# 第416回が「チョキ(カツオ)」になってるので先頭2文字で判断する
c.execute('INSERT INTO rps (id, on_air, result) VALUE (%s, %s, %s) '
'ON DUPLICATE KEY UPDATE on_air = VALUES(on_air), result = VALUES(result)',
(id, datetime.date(int(r[1]), int(r[2]), int(r[3])),
(u'グー', u'チョ', u'パー').index(r[4].decode('utf-8')[:2])))
まとめ
こんなテーブルができます。
mysql> SELECT * FROM rps LIMIT 5;
+----+------------+--------+
| id | on_air | result |
+----+------------+--------+
| 1 | 1991-11-10 | 1 |
| 2 | 1991-11-17 | 0 |
| 3 | 1991-11-24 | 0 |
| 4 | 1991-12-01 | 2 |
| 5 | 1991-12-08 | 1 |
+----+------------+--------+
5 rows in set (0.00 sec)
グー(0)、チョキ(1)、パー(2)の回数は出せました。
mysql> SELECT result, COUNT(result) FROM rps GROUP BY result;
+--------+---------------+
| result | COUNT(result) |
+--------+---------------+
| 0 | 370 |
| 1 | 398 |
| 2 | 381 |
+--------+---------------+
3 rows in set (0.00 sec)
あとは何かおもしろそうな傾向がないか見てみたいです。
追記 (2014-08-17)
第1113回と第1114回のデータが取れていませんでしたので、取れるようにコードを修正しました。それに伴い、グーチョキパーの回数の結果の表も修正しました。