Python3 de 統計解析 on CentOS7
python3.xのインストール
前の記事のCentOS7バージョン。
mustなパッケージは以下に挙げるものとし、mustなパッケージを最もエネルギー使わずに導入を行うための手順をかんたんに記すことにする。
- numpy
- scipy
- pandas
- matplotlib
- scikit-learn
- IPython notebook
リポジトリのインストール
# yum install epel-release
python3.xのインストール
yum list available | grep python
でpythonのversion確認する。
今回はpython3.4を以下のコマンドで導入する。
# yum install python34 python34-devel
これでpython3.4がインストールされる。
pip3の設定
# wget https://bootstrap.pypa.io/get-pip.py
# python3.4 get-pip.py
mustライブラリの導入
numpyの導入
http://stackoverflow.com/questions/18732250/installing-numpy-on-amazon-ec2 に記載がある通り、
Numpyのインストールには以下が必要。
- c compiler (gcc)
- fortran compiler (gfortran)
- python header files (2.4.x - 3.2.x)
- Strongly recommended BLAS or LAPACK
そのため、以下の通りパッケージをインストールして、numpyをインストールする。
# yum install gcc-gfortran blas-devel lapack-devel
# pip3 install numpy
scipyの導入
そのままscipyを導入しようとすると、以下のエラーメッセージが出力される。
sh: g++: コマンドが見つかりません
よって、gcc-c++をインストールして、scipyをインストールする。
# yum install gcc-c++
# pip3 install scipy
pandasの導入
とくに依存はなくインストール可能。
# pip3 install pandas
matplotlibの導入
そのままmatplotlibを導入しようとすると、以下のエラーメッセージが出力される。
* The following required packages can not be built:
* freetype png
よって、freetype-develとlibpng-develをインストールして、matplotlibをインストールする。
# yum install freetype-devel libpng-devel
# pip3 install matplotlib
scikit-learnのインストール
普通にpipでインストール可能。
# pip3 install scikit-learn
IPython notebookのインストール
普通にpipでインストール可能。
# pip3 install ipython
# pip3 install ipython[noteboook]
Python3 de 統計解析 on windows7
はじめに
windows7において、python3を用いた統計解析を行いたい。
mustなパッケージは以下に挙げるもの。
- numpy
- scipy
- pandas
- matplotlib
- scikit-learn
- IPython notebook
mustなパッケージを最もエネルギー使わずに導入を行うための手順をかんたんに記すことにする。
前提
導入するPython3について
numpyをpipコマンドで導入しようとすると、以下のerrorが出力される。
error: Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat).
このerrorを回避しようとすると大変なこと。
32bit版のpythonに対してはnumpyのバイナリが配布されているため、インストールが容易になること。
以上の2点より、32bit版を使うこととする。
また、バージョンに関してはバイナリが配布されている3.4系であれば特に制約がないため、Python3.4の最新版であるPython3.4.3を用いる。
導入
Pythonのインストール
以下のURLよりWindows x86 MSI installer
を選択し、バイナリをダウンロードする。
https://www.python.org/downloads/release/python-343/
ダウンロードしたバイナリを用いて、インストールを行う。
numpy/scipyのインストール
以下のサイトより、バイナリをダウンロードする。
なお、本日時点でのバイナリの最新版は、numpy(1.10.2)/scipy(0.16.0)である。
- numpy(1.10.2) http://sourceforge.net/projects/numpy/files/NumPy/1.10.2/numpy-1.10.2-win32-superpack-python3.4.exe/download
- scipy(0.16.0) http://sourceforge.net/projects/scipy/files/scipy/0.16.0/scipy-0.16.0-win32-superpack-python3.4.exe/download
pandas/matplotlibのインストール
numpyさえ入っていれば、pandas/matplotlibはインストール可能。
> pip install pandas
> pip install matplotlib
scikit-learnのインストール
普通にpip
でインストール可能。
> pip install scikit-learn
IPython notebookのインストール
普通にpip
でインストール可能。
> pip install ipython
> pip install ipython[noteboook]
Chrome45におけるMacTypeの不具合対策
不具合の具体的な内容
Chromeの文字が一部欠ける。 欠ける箇所は完全なランダムのため、読み取りが困難になるという問題が発生している。
対処法
「chrome://flags」にアクセスし、「ラスタースレッドの数」を「既定」から「1」に変更する。 変更後、再起動する。 以下のサイトの情報を参考にさせていただきました。 Google Chrome 45でMacTypeがおかしくなった件 | なんでも独り言
C# をコマンドラインから
やりたいこと
C#をVisual Stadio2013でサンプルで次々にファイルを作りながら、次々にコンパイルしようとしても、
エラー 1 プログラム 'ConsoleApplication1.exe' で、複数のエントリ ポイントが定義されています: 'Ex01_02.Main(string[])'。エントリ ポイントを含む型を指定するには、/main でコンパイルしてください。
といったエラーが出る。
コンパイルオプションが直接指定されず、プログラムを新しく作るたびに『プロジェクトのプロパティ』 → 『アプリケーション』 → 『スタートアップ オブジェクト』をしないといけないみたいだ。
とりあえずたるいので、コマンドラインからコンパイル→実行をするほうが楽そうだ。
その辺を支援してくれるバッチファイルを書いて、多少の自動化をしたい。
コマンドラインからコンパイル
C#のコンパイラ
コンパイラはcsc.exe
というファイル名で、たぶんどっかにある。
.net Frameworkが入っている環境ならどっかにあるはず。
だいたいC:\Windows\Microsoft.NET\Framework64\
以下にあるはず。
自分の環境ではC:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
に存在した。
個人個人で分かれる部分とかは個人で補完してください。
とりあえずコンパイルのフルパスをCOMPILER_FILE
とします。
コンパイル
ソースコードのフルパスをSOURCE_FILE
とすると、コマンドプロンプトより、
> %COMPILER_FILE% %SOURCE_FILE%
とすれば、exeファイルがコマンドプロンプトのカレントディレクトリ上に作成されるので、そのexeを実行すればよい。
ちょっとした自動化の手順
コンパイル→コンパイルしたファイルの実行までを楽したい。
とりあえず簡単な感じのものを作ってみた。
バッチファイルの作成
コンパイルと実行をするバッチファイルを以下の通り作成する。
ファイル名を「C_Sharp.bat」とする。
echo off
REM +------------------------------+
REM csc.exe を使用したビルドをするバッチファイル
REM +------------------------------+
REM コンパイラの位置を指定
SET COMPILER="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe"
REM ソースのあるフォルダに移動
REM %~dp1 : 変数からフォルダ名のみを取り出す
cd %~dp1
REM ソースをコンパイルする。
%COMPILER% %1
REM コンパイルしたプログラムを実行
echo ==[ 出力開始 ]==================================================
echo.
REM %~dp1 : 変数からフォルダ名のみを取り出す
REM %~n1 : 変数からファイル名のみを(拡張子は取り除いて)取り出す
%~dp1%~n1.exe
echo.
echo ==[ 出力終了 ]==================================================
REM 入力があるまでプログラムが終了しないようにする。
pause
このバッチファイルを適当なフォルダに置く。
これで、このバッチファイルにC#のソースファイルをドロップしたら、よしなに動作してくれる。
「送る」への登録
『プログラムとファイルの検索』にshell:sendto
と入力し、することで、「SendTo」フォルダを開くことができる。
この「SendTo」フォルダに先ほど作成したバッチファイルのショートカットを配置することで、右クリックの「送る」に登録ができる。
これで、ソースファイルから右クリックで一通りのことが自動化できる。
とりあえずしばらくはこれでイケるか。
Neutron@CentOS7のはまったところ
備忘録のため、事実のみを簡潔に記載します。
CentOS7でIcehouseに含まれるNeutronの導入を行うと、ルーターのゲートウェイを設定しても、正確に反映されない事象が発生する。
どうやらnet-toolsパッケージに依存するっぽい現象が見受けられる感じだ。
net-tools未導入時にルータのルーティング情報を確認したとき、以下のように表示されるとする。
# ip netns exec qrouter-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ip route
172.168.0.0/20 dev qg-xxxxxxxx-xx proto kernel scope link src 172.168.1.1
192.168.1.0/24 dev qr-yyyyyyyy-yy proto kernel scope link src 192.168.1.101
net-toolsを導入した後、L3エージェントの再起動を行い、ルータのルーティング情報を確認すると、デフォルトゲートウェイの設定がなされていることが確認できる。
# yum install net-tools
# systemctl restart neutron-l3-agent.service
# ip netns exec qrouter-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ip route
default via 172.168.0.1 dev qg-xxxxxxxx-xx
172.168.0.0/20 dev qg-xxxxxxxx-xx proto kernel scope link src 172.168.1.1
192.168.1.0/24 dev qr-yyyyyyyy-yy proto kernel scope link src 192.168.1.101
Neutronのコードの問題なのか、Pythonのコマンドの呼び出しの問題なのかの切り分けはついていないが、これでとりあえずは回避できていそうだ。
OpenStackの備忘録いろいろ
OpenStackをいじるときに個人的に利用しているTipsを備忘録として残す。
cloud-initパスワード認証の受け付け
cloud-initが導入されているイメージにおいて、パスワード認証の受付を行うためのTips。 Fedora、UbuntuのCloud Imageなどで使用可能。
新しいインスタンス起動時に「作成後」タブの「カスタマイズ・スクリプト」欄に以下のように記述する。
#cloud-config
password: passpass
chpasswd: { expire: False }
ssh_pwauth: True
なお、『password: passpass』の"passpass"がログインのパスワードに該当する。
bashワンライナー
forによる一括作業
特に利用頻度の多いNovaとNeutronの一括再起動を以下の通り示す。
Nova
for SERVICE in $(systemctl | grep "^openstack-nova" | awk '{ print $1 }') ; do systemctl restart ${SERVICE} ; done
Neutron
for SERVICE in $(systemctl | grep "^neutron" | awk '{ print $1 }') ; do systemctl restart ${SERVICE} ; done
whileによる無限ループ
3秒おきに時間の表示とnetnsの状況を表示する。
while : ; do date ; ip netns ; sleep 3 ; done
viにおける文字置換
以下の通り。
:%s/[置換対象文字列]/[置換後文字列]/gc
オプションのgはマッチしたテキストすべて対象となるようにし、cは置換前に実行するかを確認を毎回行うようになる。
CentOS7でOpen vSwitchブリッジ化
Open vSwitchのブリッジのポートにIPアドレスを割り振る方法について備忘録。
備忘録のため、ざっくりしか書いていませんことはご了承願います。
また、作業中ネットワークの寸断がなんども起きるため、sshなどによるリモートの設定ではなく、ローカルでの設定を行ってください。
Open vSwitchの導入
Open vSwitchをインストールする。 ここではOpenStackのPackStackを利用してインストールする。
# yum install https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-7/rdo-release-icehouse-4.noarch.rpm
# yum install openvswitch
Open vSwitchを起動する。
# systemctl start openvswitch.service
# systemctl enable openvswitch.service
ブリッジの構成
ブリッジbr-exを作成する。
# ovs-vsctl add-br br-ex
ブリッジbr-exにたいしてポートenp3s0を付与する。
# ovs-vsctl add-port br-ex enp3s0
ネットワーク関連の設定
ifcfg-enp3s0を編集する。
# vi /etc/sysconfig/network-scripts/ifcfg-enp3s0
以下の通り編集する。
DEVICE=enp3s0
NAME=enp3s0
BOOTPROTO=none
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes
NM_CONTROLLED=no
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ifcfg-br-exを編集する。
# vi /etc/sysconfig/network-scripts/ifcfg-br-ex
以下の通り編集する。
DEVICE=br-ex
NAME=br-ex
BOOTPROTO=none
IPADDR0=10.1.0.1
PREFIX0=8
GATEWAY0=10.255.0.1
DNS1=10.255.0.1
DEFROUTE=yes
NM_CONTROLLED=no
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
NetworkManagerの停止、無効化とnetworkの起動、有効化を行う。
# systemctl stop NetworkManager.service
# systemctl disable NetworkManager.service
# systemctl start network.service
# systemctl enable network.service
ちょっとしたTips
この状態でrebootを行うと、br-exにIPアドレスが割り振られない状態で起動される。
原因はSystemdによる起動順序の指定がnetwork.service→openvswitch.serviceの順序になっているために、ブリッジが構成される前にIPの割り振りが行われてしまうことに起因する(と思われる)。
この現象に対する対応の1つとして、br-exインターフェイスの停止→起動を行うことでも対応は可能。
そのため、br-exに対してIPアドレスが割り振られているかをチェックし、割り振られていなければbr-exインターフェイスの停止→起動を行うという処理をcronにて毎分行うという方法で一時的に回避を試みる。
(この方法による回避が妥当かどうかは現段階ではまったく考慮しません)
インターフェイスへのIP割り振りのチェックと再起動のスクリプトを作成する。
# vi /shell/if_check.sh
以下の通り編集する。
#!/bin/bash
INTERFACE_NAME=br-ex
INTERFACE_IP=10.1.0.1
if [[ -z $(/sbin/ip addr show ${INTERFACE_NAME} | grep "inet ${INTERFACE_IP}") ]]; then
/sbin/ifdown ${INTERFACE_NAME}
/sbin/ifup ${INTERFACE_NAME}
fi
crontabを編集する。
# crontab -e
以下の通り編集する。
* * * * * /shell/if_check.sh
参考サイト
この記事の内容を構成するにあたって参考にさせていただいたサイトを以下に挙げておきます。
- OpenStack Icehouse on Fedora 20 using packstack on home PC
- CentOS6.4 の network-scripts で Open vSwitch のインターフェースを管理する
- Using Open vSwitch Bridges
- VM NOT ABLE TO PING EXTERNAL NETWORK@RDO
また、参考になるし有益ではあるが、自分の状況と照らし合わせて採用しなかったサイトの情報も挙げておきます。