白旗製作所

Windows10のUbuntuでpython環境構築

これまで使用していたノートPC(マウスコンピューターLuvBook S)の基板が逝ってしまい、
起動しなくなってしまったので、新たに中古でThinkPad X230を購入してセットアップをしています。

LuvBookは基板以外は生きていたので、メモリ4GB×2をX230に移動しています。
それから、SSD 128GBからデータを救出した後、フォーマットし学生版のWindows 10 Educationをインストールしました。
また、せっかくWin10にしたので、python開発環境をWindows Subsystem for Linux(WSL)を用いUbuntuで構築することにしました。
以下に構築の手順を記載します。

1. [コントロールパネル] – [Windowsのプログラムと機能] – [Windowsの機能の有効化または無効化] で
「Windows Subsystem for Linux」へチェックを入れ、再起動する

2. Microsoft StoreからUbuntuを検索してインストール

3. Ubuntuを初回起動すると、ユーザー名・パスワードを聞かれ、インストール作業が行われる。

4. 環境の準備
 $ sudo apt install -y build-essential
 $ sudo apt install -y libsm6
 $ sudo apt install -y libxrender1

5. pyenvのインストール
 $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
 $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
 $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
 $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
 $ source ~/.bashrc

6. anacondaのインストール
 $ pyenv install -l | grep anaconda
 でバージョン確認。私はpython 3系しか使うつもりがなかったので、そっちだけインストールしました。
 $ pyenv install anaconda3-5.0.1
 $ pyenv rehash
 $ pyenv global anaconda3-5.0.1
 $ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.0.1/bin/:$PATH"' >> ~/.bashrc
 $ source ~/.bashrc

7. 各ライブラリのインストール
今回はseaborn、xgboost、plotly、pydotplus, graphvizをインストールします。
 $ pip install seaborn
 $ git clone --recursive https://github.com/dmlc/xgboost
 $ cd xgboost
 $ make -j4
 $ cd python-package
 $ python setup.py install
 $ pip install pydotplus
 $ sudo apt install graphviz

8. jupyter notebookの設定
 $ python
 > from IPython.lib import passwd
 > passwd()
でパスワードのハッシュ値をコピーしておく。
 $ cd
 $ jupyter notebook --generate-config
 $ sudo nano /.jupyter/jupyter_notebook_config.py
でコンフィグファイルを生成し、末尾に以下を追記
 c.IPKernelApp.pylab = 'inline'
 c.NotebookApp.ip = '*'
 c.NotebookApp.open_browser = False
 c.NotebookApp.port = 12345
 c.NotebookApp.password = u'ハッシュ値'
jupyter notebookを再起動
 $ jupyter notebook &
Windows10のウェブブラウザからhttp://localhost:12345にアクセスして見れるかチェック。

9. SSHサーバの立ち上げ
 Windows10のSSHサービス停止
 「サービス」からSSH Server Broker, SSH Server Proxyを停止(無効)
 Windowsファイアウォールの受信の規則のSSH Server Proxy Serviceを無効にし、
 新しい規則でTCP port22を有効にする。

ここからUbuntuの設定
 $ cd /etc/ssh
 $ sudo ssh-keygen -t rsa -N '' -f ssh_host_rsa_key
 $ sudo nano /etc/ssh/sshd_config
を開いて、
 Hostkey /etc/ssh/ssh_host_dsa/key
 Hostkey /etc/ssh/ssh_host_ecdsa/key
 Hostkey /etc/ssh/ssh_host_ed25519/key
をコメントアウト、
 UsePrivilegeSeparation を no
 PasswordAuthentication を yes
に修正して保存。
 $ sudo /etc/init.d/ssh restart
で再起動すればOK
Windows10からWinSCPやteraterm等でlocalhost:22にアクセスできるか確認。

参考:
UbuntuをWindows 10(Fall Creators Update)にインストールしてみた
UbuntuServer 16.04 LTSでJupyter Notebookを使った機械学習環境を手っ取り早く作る手順 with anaconda
Windows10 BashへのSSH接続メモ
スポンサーサイト
  1. 2017/11/18(土) 16:27:59|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

anacondaのパッケージ検索

Anacondaでpythonパッケージをインストールしようとした時,
$ conda install package_name
PackageNotFoundError: Packages missing in current channels:

となりパッケージが見つからないと言われる.

こういった場合,
$ anaconda search -t conda package_name
とすると
Using Anaconda API: https://api.anaconda.org
Packages:
Name | Version | Package Types | Platforms |Builds
------------------------- | ------ | --------------- | --------------- |----------
  hoge/package_name | 0.6 | conda | linux-64 |py27_0
とパッケージ名を検索してくれるので,

$ conda install -c hoge package_name
とインストールしてやれば良い.
  1. 2017/10/22(日) 18:19:27|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

jupyter notebookことはじめ

  1. 2017/10/22(日) 16:52:44|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

suumo賃貸物件情報取得スクリプト

そのうち引っ越すつもりで家探しを始めたのですが、
物件の数が多すぎて、比較したり条件に合う物件を抽出するのがかなりめんどくさいです。
比較評価をexcelでちまちまやっていると、条件を自動で取得してきたくなります。

物件DBにアクセスさせてくれれば良いんですけど、どうもそういうDBは公開されていないようで、
suumo等の不動産会社のWebページから、Webスクレイピングで情報を取得することが行われているようです。

以下では、GoogleスプレッドシートのIMPORTXML()関数を用いて、HTMLからXPathを用いて
情報を取得する方法が紹介されています。
家探しのための Suumo スクレイピング用スプレッドシート
Google Spreadsheetで効率的に物件を探す

たとえば、
=REGEXREPLACE(IMPORTXML(A3,"//*[@id='contents']/div[1]/div[2]/div[1]/table/tbody/tr/td[1]/div/div[1]/span"), "万円", "")
をセルに入力すると、A3に記載したURLの物件ページから、家賃の情報を取得し、数字部分のみを表示することができます。


しかしながら、私の環境では、物件数を増やすとIMPORTXML()関数の数が多すぎるようで、
GoogleスプレッドシートがLoading...で止まってしまいました。

どうにかならないかトライしてみたのですが、あまり改善が見られなかったので、
Pythonでスクリプトを作成しました。


基本的にやっていることはGoogleスプレッドシートと一緒で、
lxml.htmlとrequestsモジュールをインポートし、指定したURLからXPathでテキストを取得しています。
また、pandas.DataFrameにデータを追加し、まとめてcsvで外部に保存します。

車を持っているので駐車場の情報も取得したかったのですが、
取得しに失敗したのでここは列だけ用意しています。



これで以下のように情報をまとめた表が作れるので、
Excelの機能を使って自由に処理ができます。
suumoのWebスクレイピング結果例


ちなみに、上のコードにない情報でもXPathさえわかれば同様に取得できます。
XPathの調べ方は、たとえばFireBug等ブラウザアドオンのデバッグツールを使う方法があります。
意外と知られていない、FirebugのX-pathコピー機能

ただし、Webページの状態によってXPathのタグ番号等が異なるので、注意が必要です。
たとえば、suumoの場合、ユーザーログイン中とそうでない状態でURLとXPathが微妙に異なるので、
URLから状態を判定して使用するXPathを分ける等しないといけません。

今回のコードでは、最初のdivタグまでを"//*[@id='contents']"で置き換えて
どちらの場合にも対応する方法を用いていますが、このタグ内に無い情報には使えません。


  1. 2017/04/03(月) 00:38:59|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

[Python]Anaconda3+spyder環境でpandasのエラーが生じてIPythonに括弧が入力できない。

タイトルのとおりです。

長時間Spyderを開いていると、たまにIPython上に以下のメッセージがでて、
括弧"("とかの記号を入力しようとすると、エラーメッセージで潰されて実行できなくなります。

C:\Anaconda3\lib\site-packages\pandas\core\format.py:2037: RuntimeWarning: invalid value encountered in greater has_large_values = (abs_vals > 1e8).any()
C:\Anaconda3\lib\site-packages\pandas\core\format.py:2038: RuntimeWarning: invalid value encountered in less has_small_values = ((abs_vals < 10 ** (-self.digits+1)) &
C:\Anaconda3\lib\site-packages\pandas\core\format.py:2039: RuntimeWarning: invalid value encountered in greater (abs_vals > 0)).any()

ググるとgithubにQAがあったのですが、
どうやらpandasのバグのようです。
解決策は以下の2つが示されてます。
・pandasを最新版にする
 conda remove pandas
 conda install pandas
・pandasのオプションでfloatのフォーマットを変更する
 pd.set_option('display.float_format', lambda x:'%f' %x)

https://github.com/pydata/pandas/issues/9950

毎回spyder再起動やらオプション変更するのも面倒ですし、
とっとと最新版にしてしまいましょう。


  1. 2015/11/07(土) 16:16:32|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
次のページ