カテゴリー別アーカイブ: python

リモートでJupyter Notebookをつかう

大学のサーバでどうしてもJupyter Notebookが動かしたいのでメモ。

経緯

データをSQLiteで管理しており,これのサイズが10Gを超え始めた。計算などは大学のサーバで行なっているのであるが,RやJupyterなどビジュアルなツールを使いたい時にはいちいちローカルのPCへSQLiteをコピーするのが大変。

以前Xサーバを使ったリモートでの起動を試したが,どうも使いづらい。
Macからだと,XQuartzをあらかじめMacにインストールしておき,
以下のSSHコマンドで接続し,

Jupyterを起動するだけ。

これで,リモートサーバでFirefoxが立ち上がり,MacのXQuartzで表示される。
しかしこれがいかんせん使いづらい。遅いし,サーバ側のFirefoxなので見た目も悪く,日本語入力も一苦労。

設定

Jupyter

まずはここを参考に設定する。

~/.jupyter/jupyter_notebook_config.pyを編集。ポートが8080が空いている場合には以下のように指定する。

R

Rも使いたいので,ここを参考にRを起動してインストール。

起動

起動時に現れるこれから,
以下のようにPCのブラウザのアドレスバーに打ち込めばOK

Pythonで誕生日計算

pythonでデバッグログ作成

正規表現でURLを削除

pythonで正規表現でURLを削除する方法のメモ

ここを参考に作成したのですが,どうもバグっているのか,Pythonと相性が悪いようなので修正した。

cygwin+python+mecab+PyCharmで開発環境を作る

概要

MacからWindwosに乗り換えて一番困るのが開発環境。Pycharmを使ってのpythonの開発はMac以上に面倒です。
WindowsはWindows用のコンパイルされたpythonやmecabを使うのが一般的ですが、モジュールの追加など結構面倒なので、Cygwinを使っている人も多いと思います。
今回、Cygwin上にPythonとMecabをインストールし、それをPycharmから使う環境を作成したのでメモを残します。

環境

* windows 10
* cygwin x86_64
* pycharm 2017.1

cygwinのインストール

ここからsetup-x86_64.exeをダウンロードしインストールします。特別なことは何もしません。通常にインストールします。
余裕があればapt-cygを入れておくと便利です。

pythonのインストール

cygwin上にpythonを入れておきます。自分の場合には2.7系を入れます。

teratermのインストール

cygwinのターミナルは使いにくいのでteratermを入れておきます。teratermにはcygwin用のTerminalもついているのでそちらを起動してCygwinにログインします。

mecabのインストール

Mecabのインストールはソースコードからインストールします。Mecabのバージョンは0.996を使いますがそのままではコンパイルできないので、こちらのパッチを用いてインストールします。

nkfのインストール

nkfをソースからインストールします。
こちらからダウンロードしインストールします

ipadic

こちらからipadicをダウンロードします。ソースコードになります。これをコンパイルするのですがそのままだとどうも文字化けしてしまいます。ので、UTF-8に変換しておきます

環境変数

windowsの環境変数を設定します。システムの詳細設定から、システムのプロパティを開き、詳細設定タブの環境変数からpathに以下を追加しておきます。これでWindows側からもCygwinのコマンドが呼び出せます。

python-mecab

pipでインストールするとエラーになります。ソースコードからインストールします。ここからmecab-python-0.996.tar.gzをダウンロードしコンパイルします

pycharm

ここからダウンロードしインストールします。
インストールしたのちにfileメニューのdefault settingsからproject interpreterを選択し、c:\cygwin64\bin\python2.7.exeを設定します

これでPycharmからCygwinのPythonを利用できます。

Pythonのマルチプロセスとマルチスレッド

マルチスレッドとマルチプロセス

マルチスレッドとマルチプロセスは似ているようで違います。マルチプロセス間の実行中の値は、各プロセス間で別になっていますが、マルチスレッドの場合には変数を共用するのでちょっと注意が必要です。

実行環境

  • cray xc40
  • python 2.7.13

マルチプロセス

ここを参考に

03_multi.py

36プロセス

03_multi_36.sh

実行スクリプト

結果

1プロセス

03_multi_1.sh

結果

かなり速度が違います

マルチスレッド

ここを参考

03_multi.py

36プロセス

04_thread_36.sh

実行スクリプト

結果

1プロセス

04_thread_1.sh

実行スクリプト

結果

python+SQLiteでlike文

ここを参考に、

Asciiの場合

Unicodeの場合

tagはunicode string

ValueError: unsupported format character ‘Y’ (0x59) at index 51

MySQL+Pythonのエラー

このようなエラーが出るときの対応。

これだと上記エラーが発生します。

ここに解決策が載っていました。

ポイントはsql文の文字列をformat()するだけ

Tensorflowのエラー

Tensorflowをバージョンアップすると、昔動いていたスクリプトが動かなくなったりします

こんなエラーとか。

こちらを参照し修正します。

これを

これに変更

SQLiteをPythonからインメモリで使う

SQLite、手軽で便利なデータベースですが激しく使っていると速度が気になる時もあります。

SQLiteはインメモリデータベースもサポートしているので、既存のSQLiteのデータベースからインメモリ化して読み取り専用にすると早くなります。

データベース準備

適当に大きなデータベースを用意します。

1000万レコードのデータベースを作成しました。

プログラム

こちらを参考にプログラムを作成します。

conのコネクションが通常のデータベースアクセス、mconがデータベースファイルをインメモリ化したものになります。10000回ランダムにSELECTしてみます。

結果

大学のスパコンで計算したのですが2倍以上の差が出ました。