ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

Windows環境でgensimのword2vecを利用

Windows環境でgensimのword2vecを利用してみる。

環境

Windows10 64bit

前提として、
依存ライブラリである、numpyやscipyも以下リンク先よりwhlからpipインストール。

手順

http://www.lfd.uci.edu/~gohlke/pythonlibs/#gensim
にアクセスし
gensim-0.13.2-cp35-cp35m-win_amd64.whl
をダウンロード。

インストール実行

$ pip install gensim-0.13.2-cp35-cp35m-win_amd64.whl 

Processing d:\download\gensim-0.13.2-cp35-cp35m-win_amd64.whl
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.3 in c:\python3.5\lib\site-packages (from gensim==0.13.2)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.7.0 in c:\python3.5\lib\site-packages (from gensim==0.13.2)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.0 in c:\python3.5\lib\site-packages (from gensim==0.13.2)
Requirement already satisfied (use --upgrade to upgrade): smart-open>=1.2.1 in c:\python3.5\lib\site-packages (from gensim==0.13.2)
Requirement already satisfied (use --upgrade to upgrade): requests in c:\python3.5\lib\site-packages (from smart-open>=1.2.1->gensim==0.13.2)
Requirement already satisfied (use --upgrade to upgrade): boto>=2.32 in c:\python3.5\lib\site-packages (from smart-open>=1.2.1->gensim==0.13.2)
Requirement already satisfied (use --upgrade to upgrade): bz2file in c:\python3.5\lib\site-packages (from smart-open>=1.2.1->gensim==0.13.2)
Installing collected packages: gensim
Successfully installed gensim-0.13.2

何かエラー出ると思ったけど大丈夫だった。
かなり嬉しい

EclipseのPython開発プラグインpyDevをインストールして使ってみる。

WindowsでのPython開発はVisual Studio Express 2015 Python Toolsを使ってたんだけど、どうやら30日間の評価期間を超えたら使用できないようでしたのでIDE乗り換え。

EclipseプラグインpyDevが良さそうなのでインストールして使ってみる。

環境

Windows10 64bit
Eclipse4.6

手順

Eclipseツールバー、ヘルプ -> Eclipseマーケットプレイス
検索タブに「pydev」と入力して検索。

検索結果のPyDevをインストール。

途中、「これらの証明書を信頼しますか?」と表示されますがOK。

インストール後はEclipseを再起動。

再起動後、ウインドウ -> パースペクティブ -> パースペクティブを開く -> その他 -> PyDevを選択。


ウインドウ -> 設定 -> PyDev -> インタープリター -> Python Interpreter
右上の新規をクリック。
今回はPYthon for Windows3.5を利用するので
インタープリター名に「python3.5-windows
インタープリター実行可能ファイルに「C:\Python3.5\python.exe」を入力してOK。

そうすると、pythonpathの選択が表示される。
とりあえず全て選択状態でOKとする。
※OKクリック後は読み込み中なのかちょっと時間掛かる。

ここまででインストール完了。

では、適当にpythonプログラムを作成してみる。

パッケージエクスプローラーから
新規プロジェクト -> PyDev -> PyDevプロジェクト
プロジェクト名を適当に設定。
プロジェクトタイプはPython
文法バージョンは3.0-3.5
インタープリターは先程作成した「python3.5-windows
「PYTHONPATHにプロジェクト・ディレクトリを追加する」を選択。

以上を設定し完了。

パッケージエクスプローラーで右クリック、プロパティの設定。
テキストファイルのエンコードUTF-8に、新規テキストファイルの行区切り文字をUnixに設定。

パッケージエクスプローラーで右クリック、新規 -> PyDevモジュール
パッケージ名の入力は任意、ファイル名は拡張子名は不要。

完了をクリック後にテンプレートを選択画面が表示される。
今回は「モジュール:メイン」を選択

その後、PyDevでの実行時の設定のチェック画面が表示されますがすべて選択状態でOK。

pythonプログラムが作成される。

適当なプログラムを実装し、対象プログラムを右クリックで実行。
Python実行」を選択して実行すると。
Eclipseのコンソールに実行結果が表示される。

デバッグを使いたい場合はコード行の左部分でダブルクリック、または右クリックで「ブレークポイントを追加」してブレークポイントを設定。
ブレークポイントを設定した状態でデバッグするとブレークポイントポイントでプログラムが止まり変数の状態が確認出来る。

コード補完も出来て便利。

元々、機械学習の勉強のために環境構築しましたが、
以下のライブラリの正常動作が確認取れました。

MeCab、pandas、numpy、scipy、pyplot、matplotlib、scikit-learn、gensim(word2vec, doc2vec)

おわりに

これまで色々Pythonの開発IDE使ってきたけど一番使いやすい気がする。
個人的にはWindowsでのPython開発はpyDevがオススメ。

ちなみに、これまで使ってきたIDEは以下。

Visual Studio Express 2015 Python Tools
PyCharm
SublimeText2
vim

ただ、やはりWindowsではライブラリの環境構築周りでハマる事が多いのでMacに比べてPython開発には向いていないのかも。

Windows環境でpythonの機械学習ライブラリscipyのインストールでハマった時の対処

Windows環境でpython機械学習ライブラリscipyをインストールしようとしてハマったのでメモ。

環境

Windows10 64bit
Python for Window 3.5.1

事象

事前にnumpyはインストール済みの状態で、pipでscipyをインストールしようとすると以下のエラー

$ pip install scipy
    Running from scipy source directory.
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\cygwin\tmp\pip-build-jdbdpxyp\scipy\setup.py", line 415, in <module>
        setup_package()
      File "C:\cygwin\tmp\pip-build-jdbdpxyp\scipy\setup.py", line 411, in setup_package
        setup(**metadata)
      File "c:\python3.5\lib\site-packages\numpy\distutils\core.py", line 135, in setup
        config = configuration()
      File "C:\cygwin\tmp\pip-build-jdbdpxyp\scipy\setup.py", line 335, in configuration
        config.add_subpackage('scipy')
      File "c:\python3.5\lib\site-packages\numpy\distutils\misc_util.py", line 1003, in add_subpackage
        caller_level = 2)
      File "c:\python3.5\lib\site-packages\numpy\distutils\misc_util.py", line 972, in get_subpackage
        caller_level = caller_level + 1)
      File "c:\python3.5\lib\site-packages\numpy\distutils\misc_util.py", line 909, in _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "scipy\setup.py", line 15, in configuration
        config.add_subpackage('linalg')
      File "c:\python3.5\lib\site-packages\numpy\distutils\misc_util.py", line 1003, in add_subpackage
        caller_level = 2)
      File "c:\python3.5\lib\site-packages\numpy\distutils\misc_util.py", line 972, in get_subpackage
        caller_level = caller_level + 1)
      File "c:\python3.5\lib\site-packages\numpy\distutils\misc_util.py", line 909, in _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "scipy\linalg\setup.py", line 20, in configuration
        raise NotFoundError('no lapack/blas resources found')
    numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
    
    ----------------------------------------
Command "c:\python3.5\python.exe -u -c "import setuptools, tokenize;__file__='C:\\cygwin\\tmp\\pip-build-jdbdpxyp\\scipy\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record C:\cygwin\tmp\pip-2epuj3ap-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\cygwin\tmp\pip-build-jdbdpxyp\scipy\

対処

インストール済みのnumpyをアンインストール

pip uninstall numpy

http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
にアクセスし

numpy-1.11.2+mkl-cp35-cp35m-win_amd64.whl
scipy-0.18.1-cp35-cp35m-win_amd64.whl
をダウンロードする
※numpyはmkl(Intel Math Kernel Library)が付属した.whlファイルを選択する必要有り

ダウンロード後インストール

$ pip install numpy-1.11.2+mkl-cp35-cp35m-win_amd64.whl
$ pip install scipy-0.18.1-cp35-cp35m-win_amd64.whl 

エラー出ずにインストールできた!

Processing c:\users\shinzato\desktop\scipy-0.18.1-cp35-cp35m-win_amd64.whl
Installing collected packages: scipy
Successfully installed scipy-0.18.1

ハマった原因

恐らくですが、

  • numpyのインストールをwhlファイルからじゃなくて通常のpipインストールしていたから?
  • scipyの利用には数値演算ライブラリが必要で、Linuxだと別途lapack/blasをインストールしているけど、windowsではそれらに対応していないとか?
  • mklをインストールして数値演算ライブラリとして利用する必要があるとか?

推測だけど恐らくその辺。

anacondaを使えばその辺の環境構築も楽に行えるとの事なので後日やってみる。

jedi-vimをインストールしてvimでpythonコードの補完

気づいたらvimpython開発をやっている日々。。
開発環境を整えようかと思い、vimプラグインpythonコードの補完をしようと思いました。

で、pythonコード補完のプラグインを調査してみるとjedi-vimというプラグインがありましたが、インストールの為にはvimのパッケージマネージャの導入が必要との事。
パッケージマネージャのNeoBundleは非推奨になったそうで現在はdeinが使用した方が良いとの事でしたが、deinの環境構築の為にはvimのバージョンが7.4である必要がありました。
ただ、vimのバージョンアップにハマったのでNeoBundleを利用する事に。
非推奨との事ですが、別にvimpythonの補完が出来れば良いので!

環境

CentOS6
vim7.2
python3.4.2(pyenv)

手順

pluginのダウンロード、インストール

curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh
sh ./install.sh
rm -rf install.sh

良くわからんが必要らしいので実行。

cd ~/.vim/bundle/jedi-vim/jedi/
git submodule update --init

vimrc編集

vi ~/.vimrc  

追記
"NeoBundle 'davidhalter/jedi-vim'"
の行でjedi-vimをインストールしてる。

" Note: Skip initialization for vim-tiny or vim-small.
if 0 | endif

filetype off

if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
  \ }
NeoBundle 'davidhalter/jedi-vim'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

call neobundle#end()

filetype plugin indent on     " required!
filetype indent on
syntax on

NeoBundleCheck

適当なファイルをvimで開くと、いきなり変なメッセージ出てきてインストールはじまったぽい。。
数分で終わりました。

以下のような情報もあった、本来はそうするのかも。
>Vimのコマンドモードで:source ~/.vimrcを実行.
>NeoBundleInstallのダイアログ(GVim使ってます)が出てくるのでyesを選択.
>これでプラグインがダウンロード&インストールされます.

インストール後、実際にpythonファイルをvimで開いて実装。
モジュール名入力してピリオドを入力するとコード補完のプルダウンが表示された!

…けど、numpyやpandasといったライブラリの場合は補完が表示されない。

調査した所、pyenv環境を使用している事が原因みたいです。
jedi-vimでは標準python側のライブラリ(ディレクトリ)を参照しているようです。

という事で対処

対処1

jedi-vimvim-pyenc のロードよりも前に以下を追記

" ~/.pyenv/shimsを$PATHに追加
let $PATH = "~/.pyenv/shims:".$PATH

jedi-vimの後ろに以下を追記

" pyenv 処理用に vim-pyenv を追加
" Note: depends が指定されているため jedi-vim より後にロードされる(ことを期待)
NeoBundleLazy "lambdalisue/vim-pyenv", {
      \ "depends": ['davidhalter/jedi-vim'],
      \ "autoload": {
      \   "filetypes": ["python", "python3", "djangohtml"]
      \ }}

:wで保存後
:source ~/.vimrc
で設定反映。

pythonファイルをvimで開いた所、以下のエラー?出た

vim-pyenv: Failed to activate "3.5.0". Python version of the env is not supported in this Vim.  

なんかハマったので別案・・・

対処2

ftpluginディレクトリ作成

mkdir ~/.vim/ftplugin/

pythonファイル用設定作成

vi ~/.vim/ftplugin/python.vim

以下を定義

import os
import sys

path = os.path.expanduser("/root/.pyenv/versions/3.5.0/lib/python3.5/site-packages")
if not path in sys.path:
    sys.path.append(path)

適当にファイルをvimで開いて以下を実行し、pyenvのパッケージのパスが追加されてればOK

:py print(sys.path)

pandasやnumpyでも保管できた。

出来たんだけど・・・

遅い。

ピリオド打ったら少し固まる。


最終的な設定ファイルは以下のようになった。
.vimrc

" Note: Skip initialization for vim-tiny or vim-small.
if 0 | endif

filetype off

if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
  \ }
NeoBundle 'davidhalter/jedi-vim'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

call neobundle#end()

filetype plugin indent on     " required!
filetype indent on
syntax on

autocmd FileType python setlocal completeopt-=preview

NeoBundleCheck

~/.vim/ftplugin/python.vim

python << EOF
import os
import sys

path = os.path.expanduser("/root/.pyenv/versions/3.5.0/lib/python3.5/site-packages")
if not path in sys.path:
    sys.path.append(path)
EOF

あまりにも重たいので後日アンインストールした。。

もっと軽い補完プラグイン探そう・・

scikit-learnで実装したナイーブベイズ分類器の実行でDeprecationWarningの警告が出たときの対処

http://qiita.com/ynakayama/items/ca3f5e9d762bbd50ad1f
を参考にscikit-learn(サイキット・ラーン)を利用してナイーブベイズ分類器を実装。
多項分布を仮定したMultinomialNBを用いた処理の実行で以下の警告が発生した。

/root/.pyenv/versions/3.5.0/lib/python3.5/site-packages/sklearn/utils/validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
  DeprecationWarning)

0.17では1d配列のデータ利用が非推奨になった?

scikit-learnのバージョン確認

pip freeze | grep scikit
scikit-learn==0.17.1

pip freeze | grep numpy
numpy==1.11.1

よくわかって無いけど、以下のように識別対象データを2次元配列にしたら警告出なくなった。

t = np.array( [[2,2,4,5,6,8,8,8]] )