目次
- いきさつ
- 前準備
- 実践
方法だけ知りたければ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については下記のサイトを参考にしてください。
2. 前準備: mysql-serverをインストール
そもそもmysqlサーバーのユーザー設定が無いと意味がないので、ターミナルで
sudo apt-get install mysql-server
を実行。当然、元から入っている人はスルーです。
また、この際にpassword
の設定画面が出るので、設定しましょう。
詳しくは下記の記事を参考に。
3. 実践: MySQLをjupyter notebookのkernelに入れる
ここから実際にインストールしていきます。
いろいろ悩みまして、ipython用のパッケージでもjupyterとの互換性があるということなので上記のパッケージを使いました。
基本は上記の”README”を参考にしましたが、適宜”ipython”の部分を”jupyter”に読み替えていきます。
基本やることは、
- ipython_mysql_kernelのインストール
- Configのjsonファイルを作成
- 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
と表示されてしまったからです。
画像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が動くか確認
画像2: jupyter notebookのkernelにMySQLが入っているかを確認する。
うまく行っていれば上記のようにmysql
を選択できるので、適当にいじってみましょう。
以上になります。
今回の躓きはjupyterに執着しすぎていてipythonの互換性を見落としていたことを起因としたものでした。そのうちjupyterのSQLkernelを作ったほうが良いのだろうか・・・。