読者です 読者をやめる 読者になる 読者になる

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回のデータが取れていませんでしたので、取れるようにコードを修正しました。それに伴い、グーチョキパーの回数の結果の表も修正しました。