【Python Pandas】MySQLからDataFrameにセット

  • URLをコピーしました!

MySQLで以下テーブルを作成して、PandasのDataFrameにセットするところを実施します。テーブル化するとデータの結合が簡単に出来るので楽ですね。ただ、、リモート接続しているので、データ量が増えた時の時間とかメモリ消費量が少し心配です。

データベースには以下2テーブルを作成してデータを入れてあります。

CREATE TABLE `result` (
 `ファイル名` varchar(20) NOT NULL,
 `レース名` varchar(20) NOT NULL,
 `日にち` varchar(20) NOT NULL,
 `日付` varchar(20) NOT NULL,
 `開催地` varchar(20) NOT NULL,
 `ラウンド名` varchar(10) NOT NULL,
 `種別` varchar(10) NOT NULL,
 `天気` varchar(10) NOT NULL,
 `風向` varchar(10) NOT NULL,
 `風速` int(3) NOT NULL,
 `波` int(3) NOT NULL,
 `着` int(1) NOT NULL,
 `艇` int(1) NOT NULL,
 `登番` int(4) NOT NULL,
 `選手名` varchar(20) NOT NULL,
 `モーター` int(3) NOT NULL,
 `ボート` int(3) NOT NULL,
 `展示` float NOT NULL,
 `進入` int(1) NOT NULL,
 `スタートタイミング` float NOT NULL,
 `レースタイム` varchar(7) NOT NULL,
 `レースタイム秒` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `player` (
 `ファイル名` varchar(20) NOT NULL,
 `登番` int(4) NOT NULL,
 `名前漢字` varchar(16) NOT NULL,
 `名前カナ` varchar(15) NOT NULL,
 `支部` varchar(4) NOT NULL,
 `級` varchar(2) NOT NULL,
 `生年月日` varchar(7) NOT NULL,
 `性別` int(1) NOT NULL,
 `年齢` int(2) NOT NULL,
 `身長` int(3) NOT NULL,
 `体重` int(2) NOT NULL,
 `血液型` varchar(2) NOT NULL,
 `勝率` float NOT NULL,
 `複勝率` float NOT NULL,
 `1着回数` int(3) NOT NULL,
 `2着回数` int(3) NOT NULL,
 `出走回数` int(3) NOT NULL,
 `優出回数` int(2) NOT NULL,
 `優勝回数` int(2) NOT NULL,
 `平均スタートタイミング` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

あとは欲しいデータのSQLを作成して「pd.read_sql」を使うだけです。ちなみに、ランダムフォレストで特徴量の重要性を計測したところ、レース結果データにおいては「登番」「モーター」「ボート」以外(天気とか風速とか波とか)は殆ど0に近く、省略する事にしました。

    def loaddata(self):
        db = MySQL()
        self.mysql = db.open_connection()

        sql = """
                SELECT
                    r.`登番`,
                    r.`モーター`,
                    r.`ボート`,
                    p.`勝率`,
                    p.`複勝率`,
                    p.`1着回数`,
                    p.`2着回数`,
                    p.`優出回数`,
                    p.`優勝回数`,
                    r.`レースタイム秒`
                FROM
                    `result` r,
                    `player` p 
                WHERE
                    r.`登番` = p.`登番`
        """

        # pandas でMySQLテーブルを読む
        mem_usage = memory_usage(-1, interval=.2, timeout=1)
        df = pd.read_sql(sql, self.mysql)
        print(mem_usage)
        print(df.head())
        db.close_connection()
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次