Aidemy Tech Blog

機械学習・ディープラーニング関連技術の活用事例や実装方法をまとめる、株式会社アイデミーの技術ブログです。

MySQLをjupyter notebookのkernelに入れる方法

f:id:matsume_goods:20170808213817p:plain

目次

  1. いきさつ
  2. 前準備
  3. 実践

方法だけ知りたければ3番までスキップしてください。

1.いきさつ: MySQL を jupter notebook で動かしたい

pythonで機械学習を勉強する際にデータベースの勉強が必要になりまして、sqlをjupyter notebook上で動かす必要が出てきました。
そこでjupyter notebookのkernelをいじっていたのですが、少し躓いてしまったので備忘録程度にjupyterへのMySQLの入れ方をまとめておきます。
なお、実行環境はubuntu16.04です。

注意
この記事はMySQLをjupyter notebookのkernelに入れることを目的としていますが、pythonでデータベースを扱う際にはMySQL-pythonをinstallして、
pythonのカーネルでMySQLdbをimport
したほうが実用的です。MySQL-pythonについては下記のサイトを参考にしてください。

MySQLを操作する | Make.

MySQL Python tutorial - programming MySQL in Python

2. 前準備: mysql-serverをインストール

そもそもmysqlサーバーのユーザー設定が無いと意味がないので、ターミナルで

sudo apt-get install mysql-server

を実行。当然、元から入っている人はスルーです。
また、この際にpasswordの設定画面が出るので、設定しましょう。
詳しくは下記の記事を参考に。

Ubuntu で MySQL - Qiita

3. 実践: MySQLをjupyter notebookのkernelに入れる

github.com

ここから実際にインストールしていきます。
いろいろ悩みまして、ipython用のパッケージでもjupyterとの互換性があるということなので上記のパッケージを使いました。
基本は上記の"README"を参考にしましたが、適宜"ipython"の部分を"jupyter"に読み替えていきます。

基本やることは、

  1. ipython_mysql_kernelのインストール
  2. Configのjsonファイルを作成
  3. kernelのjsonファイルを作成、jupyterのkernelにファイルを追加

この3フェーズに別れます。

1. ipython_mysql_kernelのインストール

ターミナルで

sudo pip install git+https://github.com/mmisono/ipython_mysql_kernel

を実行します。

2. Configのjsonファイルを作成

ここで少し躓きました。というのも、ここを飛ばしてしまってもjupyter notebookでmysqlが選択できるようにはなるのですが、mysqlサーバーへのログインがうまく行かないためdead kernelと表示されてしまったからです。

f:id:matsume_goods:20170808213240p:plain

画像1: ログインできず、死んだことにされるkernel。ターミナルの方のログを見るとログインでうまく行っていないことが確認できる。

ということで、先ほど作ったユーザー設定をまとめたConfigファイルを作ります。
ホームディレクトリに
.ipython
というフォルダがあるので、そのフォルダに
mysql_config.json
というファイルを作り、内容を

{
    "user"     : "root",
    "port"     : "3306",
    "host"     : "127.0.0.1",
    "charset"  : "utf8",
    "password" : "(設定したpassword)"
}

mysql_config.json

とします。
これでjupyterによるログイン時にこのユーザー設定が優先されるようになります。

3. kernelのjsonファイルを作成、jupyterのkernelにファイルを追加

今度は現在のディレクトリ(どこでも良い)に
mysql
というフォルダを作成し、そのフォルダに
kernel.json
を作り、内容を

{
    "argv": [
        "python", 
        "-m",
        "ipython_mysql_kernel",
        "-f",
        "{connection_file}"
    ],
    "display_name": "mysql",
    "language": "mysql"
}

kernel.json

とします。そうしたらターミナルからフォルダmysqlがあるディレクトリで

sudo jupyter kernelspec install mysql

を実行します。

usr/local/share/jupyter/kernels

mysqlがあればkernelの追加は完了です。

jupyter notebookのkrenelが動くか確認

f:id:matsume_goods:20170808213315p:plain

画像2: jupyter notebookのkernelにMySQLが入っているかを確認する。

うまく行っていれば上記のようにmysqlを選択できるので、適当にいじってみましょう。


以上になります。
今回の躓きはjupyterに執着しすぎていてipythonの互換性を見落としていたことを起因としたものでした。そのうちjupyterのSQLkernelを作ったほうが良いのだろうか・・・。