ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2020年4月19日日曜日

Mnistのインストール方法いろいろ

導入

手書き文字認識のデータセットは、有名なデータセットです。

いろいろなライブラリから活用できるように整備されているのですが、当時の自分は「ファイルって外部から読み込むんじゃないの」(←今思えば、よくわかるようなわからないような疑問)とか、あるいはネットで調べても読み込み方がいろいろあって、その関係性がわからなかったりして混同しておりました。

 そういう人が他にもいるかもしれないなと思って、情報を整理する目的で書きました。

前提

sklearn、tensorflow、pytorchはインストールされている前提から話を始めます。(自分はAnacondaを使って環境を整えました)

sklearn、tensorflow,pytorchの全てが必須ということではありません。それぞれの場合について説明をするという意味です。

OSはMacOSXを使用しています。

注意

いわゆる手書き文字認識のデータセットですが、似たようなものが2つあります。

一つは、sklearnインストール時に一緒についてくる(標準で備わっている)手書き文字認識用のデータセットです。

二つ目は上記以外の方法で入手したものです。

一つ目のほうは、8×8ピクセルの画像から構成されています。

二つ目のほうは、28×28ピクセルの画像から構成されています。

どちらも「手書き文字認識」とか「Mnist」とかの検索で引っかかってくるし、なんとなく画像の雰囲気も同じ感じなので、いろいろ混同しておりました。

sklearnの標準搭載(8×8サイズのデータ)

データセットの場所

sklearn標準のデータセットは以下の場所にあります。
/(環境によって違う部分)/lib/python3.7/site-packages/sklearn/datasets
自分の場合のディレクトリ構成を参考までに。(Anacondaを使っています)
$ls  /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/sklearn/    //パスで指定された中のファイル・ディレクトリ一覧を表示

__check_build   dummy.py   model_selection
__init__.py   ensemble   multiclass.py
__pycache__   exceptions.py   multioutput.py
_build_utils   experimental   naive_bayes.py
_config.py   externals   neighbors
_distributor_init.py  feature_extraction  neural_network
_isotonic.cpython-37m-darwin.so feature_selection  pipeline.py
base.py    gaussian_process  preprocessing
calibration.py   impute    random_projection.py
cluster    inspection   semi_supervised
compose    isotonic.py   setup.py
conftest.py   kernel_approximation.py  svm
covariance   kernel_ridge.py   tests
cross_decomposition  linear_model   tree
datasets   manifold   utils
decomposition   metrics
discriminant_analysis.py mixture
そしてその中のdatasetsフォルダをみてみると、
$ls /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/sklearn/datasets

__init__.py     california_housing.py
__pycache__     covtype.py
_base.py     data
_california_housing.py    descr
_covtype.py     images
_kddcup99.py     kddcup99.py
_lfw.py      lfw.py
_olivetti_faces.py    olivetti_faces.py
_openml.py     openml.py
_rcv1.py     rcv1.py
_samples_generator.py    samples_generator.py
_species_distributions.py   setup.py
_svmlight_format_fast.cpython-37m-darwin.so species_distributions.py
_svmlight_format_io.py    svmlight_format.py
_twenty_newsgroups.py    tests
base.py      twenty_newsgroups.py
となっています。

ここに手書き文字認識以外にも、データセットが用意されています。

さらに、フォルダを深く入っていきます。
$ ls /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/sklearn/datasets/data
boston_house_prices.csv  diabetes_target.csv.gz  linnerud_exercise.csv
breast_cancer.csv  digits.csv.gz   linnerud_physiological.csv
diabetes_data.csv.gz  iris.csv   wine_data.csv
ここに、sklearnを扱った記事でよく引用されるirisデータセットやboston_house_pricesデータセットなどがあります。

データセットのインポート方法

sklearnの公式ページのコードそのままではありますが。

以下作業はターミナルからpythonを起動して行っています。
>>> from sklearn.datasets import load_digits
>>> import matplotlib.pyplot as plt
>>> digit=load_digits()
>>> digit.data.shape
(1797, 64)      // (8×8=64列の行列として格納されている)

>>> plt.gray()
>>> digit.images[0]
array([[ 0.,  0.,  5., 13.,  9.,  1.,  0.,  0.],
       [ 0.,  0., 13., 15., 10., 15.,  5.,  0.],
       [ 0.,  3., 15.,  2.,  0., 11.,  8.,  0.],
       [ 0.,  4., 12.,  0.,  0.,  8.,  8.,  0.],
       [ 0.,  5.,  8.,  0.,  0.,  9.,  8.,  0.],
       [ 0.,  4., 11.,  0.,  1., 12.,  7.,  0.],
       [ 0.,  2., 14.,  5., 10., 12.,  0.,  0.],
       [ 0.,  0.,  6., 13., 10.,  0.,  0.,  0.]])
>>> plt.matshow(digit.images[0])
>>> plt.show()

そうすると以下のような画面が立ち上がります。



オリジナルのデータをダウンロード(28×28サイズのデータ)

Mnistオジリナルのデータはこちらにあります。 

ただし、ここで入手できるのはそのままでは使用できないバイナリファイルです。

なので、自分でデータを使える形にまで加工しなければいけないところですが、以下でみていくように、Mnistは非常に有名なデータセットなので、いろいろなライブラリにすぐに使えるように整備されているツールがあります。

このバイナリデータを自力で元に戻す方法ももちろん存在はするようですが、そこまでフォローしきれなかったし、そこに時間かけるのもどうかと思ったのでその方法については触れません。

sklearn経由でダウンロード(28×28サイズ)

ネット上の記事をみていると、古い記事では
from sklearn.datasets import fetch_mldata
としている記事もありますが、現在ではアクセスしようとしている先のページが使用できないためエラーになります。

なので現在では以下のようにfetch_openmlを使用するようです。
 (scikit-learn(sklearn)のfetch_mldataのエラーの解決法)

これも、ターミナルから起動してます。
>>> import matplotlib.pyplot as plt   // 上からの流れてすでにインポート済かもしれませんが、一応。まだインポートしてなかった場合はこれもやる。
>>> from sklearn.datasets import fetch_openml
>>> digits = fetch_openml(name='mnist_784', version=1)
>>> digits.data.shape
(70000, 784)
>>> plt.imshow(digits.data[0].reshape(28,28), cmap=plt.cm.gray_r)

>>>>>> plt.show()



tensorflow(28×28サイズ)

tensorflowのチュートリアルから入れる方法。
>>> from tensorflow.examples.tutorials.mnist import input_data
とすればいけるらしいのですが、自分の場合は以下のようなエラーが出てしまいました。

結論からいうと、どうやらtensorflowをインストールする際に、tutorialのフォルダがダウンロードされないことがあるらしいです。

Traceback (most recent call last):
  File "", line 1, in 
ModuleNotFoundError: No module named 'tensorflow.examples.tutorials'
実際のディレクトリの中身をみてみました。
$ls /Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/examples/
__init__.py __pycache__ saved_model
となっていました。

以下のページを参考にしました。

まず、Tensorflowのgithubページへアクセスし、zipファイルをどこでもいいのでダウンロードして解凍します。



tensorflow-masterというフォルダがあるので、そのなかのtensorflow-master\tensorflow\examples\の場所に、tutorialsというフォルダがあります。

このturorialsというフォルダをフォルダごと/Users/hiroshi/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/examples/の中にコピーします。

 ここまでできれば、
>>> import matplotlib.pyplot as plt   // 上からの流れてすでにインポート済かもしれませんが、一応。まだインポートしてなかった場合はこれもやる。
>>> from tensorflow.examples.tutorials.mnist import input_data
>>> mnist = input_data.read_data_sets("MNIST_data", one_hot=True)
>>> im = mnist.train.images[1]
>>> im = im.reshape(-1, 28)
>>> plt.imshow(im)

>>> plt.show()

とすれば、同様に画像が表示されるはずです。

keras(28×28サイズ)

>>> import matplotlib.pyplot as plt   // 上からの流れてすでにインポート済かもしれませんが、一応。まだインポートしてなかった場合はこれもやる。
>>> import tensorflow as tf
>>> mnist = tf.keras.datasets.mnist
>>> mnist
>>> mnist_data = mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step
>>> type(mnist_data[0])
   //タプルで返ってくる。
>>> len(mnist_data[0])
2
>>> len(mnist_data[0][0])
60000
>>> len(mnist_data[0][0][1])
28
>>> mnist_data[0][0][1].shape
(28, 28)

>>> plt.imshow(mnist_data[0][0][1],cmap=plt.cm.gray_r)

>>> plt.show()
もう画像は載せませんが、うまくいけばまた画像が表示されます。

pytorch(28×28サイズ)

まずこれができないと先へ進めないらしいですが、
>>> from torchvision.datasets import MNIST
次のようにエラーがでてしまった。

torchvisionがないらしい。

自分の場合にはcondaでpytorchを入れる際に、単に
conda install pytorch
しか行っていないからのようでした。

付属物までいれるには以下のようにするらしいです。
conda install pytorch torchvision -c pytorch 
確認を求められるのでyを押します。

 (必要であれば)上記を行った上で、以下のようなコードを実行してみます。
>>> import matplotlib.pyplot as plt   // 上からの流れてすでにインポート済かもしれませんが、一応。まだインポートしてなかった場合はこれもやる。


>>> import torchvision.transforms as transforms
>>> from torch.utils.data import DataLoader
>>> from torchvision.datasets import MNIST
>>> mnist_data = MNIST('~/tmp/mnist', train=True, download=True, transform=transforms.ToTensor())
>>> data_loader = DataLoader(mnist_data,batch_size=4,shuffle=False)
>>> data_iter = iter(data_loader)
>>> images, labels = data_iter.next()
>>> npimg = images[0].numpy()
>>> npimg = npimg.reshape((28, 28))
>>> plt.imshow(npimg, cmap='gray')

>>plt.show()

番外編(はじめてのDeeplearningより)

オライリーから出ている『ゼロから作る Deep Learning』では、この本が提供しているファイルの中で独立して行われています。

具体的には、[『ゼロから作る Deep Learning』で使用されるファイルのgithubページ]でダウンロードしてきたフォルダの中で全て読み進めていきます。(もちろん、予めpythonやnumpyなどは準備しておく必要はありますが。

以下手順。

まず、上記で述べたGithubページからフォルダをダウンロードなりクローンしてきます。

ここでは、ダウンロードで行います。

そして解凍します。



そうするとdeep-learning-from-scratch-masterというフォルダができます。

 各章ごとにフォルダ分けされているので、その章のフォルダへ移動して読み進めていく感じになります。

フォルダ自体はch01からありますが、Mnistのデータが使用されるのは第3章なので、ch03に入ることにします。

$ pwd
/Volumes/SONY_64GB/deep-learning-from-scratch-master/ch03
pythonを起動して・・・
>>> import sys,os
>>> sys.path.append(os.pardir)
>>> from dataset.mnist import load_mnist
>>> (x_train,t_train),(x_test,t_test) = load_mnist(flatten=True,normalize=False)
Downloading train-images-idx3-ubyte.gz ... 
Done
Downloading train-labels-idx1-ubyte.gz ... 
Done
Downloading t10k-images-idx3-ubyte.gz ... 
Done
Downloading t10k-labels-idx1-ubyte.gz ... 
Done
Converting train-images-idx3-ubyte.gz to NumPy Array ...
Done
Converting train-labels-idx1-ubyte.gz to NumPy Array ...
Done
Converting t10k-images-idx3-ubyte.gz to NumPy Array ...
Done
Converting t10k-labels-idx1-ubyte.gz to NumPy Array ...
Done
Creating pickle file ...
Done!
>>> print(x_train.shape)
(60000, 784)
>>> print(t_train.shape)
(60000,)
>>> print(x_test.shape)
(10000, 784)
>>> print(t_test.shape)
(10000,)
>>> 
参考にしたページ

Mnistのオリジナルのデータ

sklearn

Tensorflow

Keras

Pytorch

その他

2020年4月13日月曜日

python3.8 on CentOS8


  • Pythonのディレクトリ構造
  • VirturalBoxの使い方
  • CentOS8に触ってみる
といったことを勉強したかったので、CentOS8にPython3.8をインストールをしてみました。

その時の手順を参考になればと思い記事を書きました。

それなりの枚数の画像が挿入されて記事が長くなると思われるので、この記事の要点を先に述べておきたいと思います。

この記事で触れること

  • CentOS8のインストール手順
  • Python3.8のインストール手順(二通り)
  • Python3.8をそれぞれの方法でインストールしたとき、ディレクトリはどうなるか

この記事で触れないこと

  • VirturalBox自体のインストールには触れません。他の記事を引用するに留めます。

自分の環境

  • MacOS 10.15.3 Catalina (今回はVirtualBoxインストール済みのところから話を始めるのであまり関係はないですが。。。)
  • VirtualBox 6.0.18

Python3.8のディレクトリ構造

まず、Python3.8のディレクトリ構造がどうなるか、述べてしまいたいと思います。

コマンドでインストール

  • python3.8の実行ファイル(バイナリファイル)は絶対パスの/usr/binにきます。
  • ライブラリなどは絶対パスの/usr/local/lib/Python3.8/site-packagesにきます。

インストーラーでインストール

CentOSの場合にはインストーラーというものはないようです。

公式サイトへいってもダウンロードできるのはソースコードしかないので、結局はそれを自分でビルドしていくことになるので、上記のコマンドを使う方法と同じことになります。

VirtualBoxのインストール手順

これは調べればたくさん記事が出てくるので、割愛。インストールは済んでいるところから話を始めます。 例えば、
などなど。

CentOS8のイメージファイルのダウンロード

CentOSの公式ページから、まずはCentOS本体のデータをダウンロードします。 この中にあるものであれば、どれも同じなのでどれでもいいのでダウンロードします。






CentOS8のインストール

まずはVirtualBoxを起動します。

下記の画面では、自分が試しに作った別用途のCentOSが表示されてしまっていますが、今回は新規につくるので「新規」をクリックします。



名前の欄は、「あとから起動する時に区別するため」の名前を適当に決めます。ここでは、わかりやすく「CentOS8」としました。

それ以外の設定は特にいじらず、名前の欄を入力したら、「作成」ボタンを押して先へ進みます。



次に、ファイルの場所を決めます。

これは、今から作る仮想マシン自体も、この今作業しているパソコン上に存在することになるわけですが、その場所やそのファイルの名前をどうするのか、ということです。

これも特別な理由がないのであれば、いじらなくていいです。

ファイルサイズは、デフォルトでは8GBになっています。

あとあと、CentOSをインストールする際に、いくつかバリエーションが選べるのですが、「本当に最小限」のものだけをインストールするのであれば、8GBでもいいのですが、そうでない場合には8GBだと足りないので、うまくいくように11GBにします。

最小限、ただ起動するだけだとしても、そのために必要なファイルなどがあるわけです。それらのファイルにも存在できる場所は必要なので、その合計値よりも多くなければいけないということです。

それ以外は、下記画像と同じようになっているか確認し、「作成」ボタンを押します。


そうすると、まずはCentOS8をインストールするための場所が確保できました。


次に、実際にインストールをしていきます。

今作成したCentOS8のところを右クリックして、「起動」→「通常起動」をクリックします。




そうすると、次のような画面になります。


ここで、ダウンロードしてある、CentOS8のイメージファイルを選択します。

選択したら、「Start」を押します。


そうすると、CentOS8のインストール画面が立ち上がります。

いくつか選択肢が表示されていますが、「Install CentOS Linux 8」が選ばれているはずなので、そのまま「Enter」を押します。(まぁなにも押さなくてもカウントダウンが終わればそのまま自動で選択されます。)


言語の設定をします。

操作に少し注意が必要です。

仮想環境の中と外では、別操作になります。仮想環境の画面上をクリックすれば、操作が仮想環境の中に移りますが、そのままでは今度は仮想環境の外の操作ができないので、(仮想環境の中ではなく)普通のPCの操作をしたい場合には「左のCommand」を押します。

日本語を選んで、「続行」を押します。


「続行」を押すと、以下のような画面になります。

画面が途中で見切れてしまっています。これはあとで別途設定することで直すこともできますが、ここでは一旦このまま進めます。

この画面から、
  • 時刻と日付
  • ソフトウェアの選択
  • ネットワークとホスト名
を設定していきます。


日付と時刻を以下のように設定します。

設定したら、左上の「完了」を押します。



「完了」を押すと、元の画面に戻るので、今度は「ソフトウェアの選択」を選択し、以下のように設定。

ここで、「最小限のインストール」を選択してもいいのですが、そうすると本当に最小限しかインストールされずGUIとかもなくCUI上でコマンド操作しなくてはいけなくなります。

なので、慣れないうちはある程度その他のツールも込み込みの「ワークステーション」を選ぶとよいと思います。

勉強して詳しくなってきたら、「サーバー」とか「最小限のインストール」とかでチャレンジしてみるのもいいかもしれません。

冒頭のほうでファイルサイズを8GBに設定しました。

仮に「最小限のインストール」をインストールする場合には、それで足りるのですがその他のツールも含めてインストールしようとするとそれでは足りなくなるので、そのために冒頭では11GBに設定したのでした。

右側の「選択した環境用のその他のソフトウェア」の中も、適当にいくつか選びます。

自分の場合は、以下の画像のように選択しました。




選択したら、まだ左上の「完了」を押して元の画面に戻り、今度は「ネットワークとホスト名」を設定します。

右上のEthernet(enp0s3)のところをクリックしてONにします。そうしたら左上の「完了」を押します。


元の画面に戻りますので、右下の「インストールの開始」をクリックします。


そうすると、インストールが始まります。

それなりの時間がかかるので、その間にrootのパスワードとユーザーの作成をします。


「rootのパスワード」を選択し以下の画面を表示させます。

パスワードを二回入力し、左上の「完了」を押します。

同様に、ユーザーの作成も行います。

ユーザー名とパスワードを入力。

「このユーザーを管理者にする(M)」もチェックをつけておきます。

設定したら左上の「完了」ボタン。


あとはインストールが終わるまでしばらく待ちます。



完了すると以下のような画面になります。そうしたら右下の「再起動」をクリックします。



このまま、何も操作をせずに待っているともう一度インストール画面になってしまうので、一旦イメージファイルを外します。

まずは再起動される前に、以下の画面のような元々のVirtualbox起動時の画面で、今作成中のCentOS8を右クリックして、「閉じる」→「電源オフ」で仮想マシンの電源を落とします。

以下のような画面になっていることを確認。

この画面で「設定」を押します。



設定の画面が開いたら、下記画面のように選択。

そして「仮想ドライブからディスクを除去」を選択。



以下のようになることを確認し、右下の「OK」をクリックし設定画面を閉じます。



VirtualBox起動時の画面へ戻ったら、CentOS8をダブルクリックして起動します。

少し待つと以下のような画面が表示されます。

License informationをクリックします。




「ライセンス契約に同意します。(A)」にチェックを入れて、左上の「完了」を押します。


右下の「設定の完了」を押します。


そうするとユーザー選択画面が表示されます。

作成したユーザーでログインします。



該当ユーザーのパスワードを入力し「ログイン」をクリックします。



無事ログインできれば、以下のような画面が表示されるはずです。


このあと、Pythonをインストールをするにしても、ネットへ繋がってなければなにも始まらないので、ネットが繋がるかどうかも確認しておきます。

これもいろんな方法があるとは思いますが、そのうちの一つ。

Firefoxを起動します。



そして、なんでもいいですが、googleの検索画面が表示できるか確認しましょう。




実は、CentOS8のインストール自体はこれでできているのですが、「画面を最大化」したり、「ホストOSからゲストOSへコピペ」とかいったりということがまだできません。

一通り作業が終わったあとにやるつもりですが、行う順番はどちらが先でもいいので、先に設定したい方はこちらの記事を先に読んでください。

VirtualBoxで画面を最大化する方法、クリップボードを共有する方法


python3.8のインストール

dnfを使用してインストールする場合

CentOS8のトップ画面へ戻り、「端末」を起動します。 これ以降はこの中での作業になります。



以下のコマンドを打ちます。

仮想環境の外から仮想環境の中へコピペもする方法はありますが、今この段階ではできないので、頑張って手打ちします。

$ sudo dnf groupinstall 'development tools’ 
何度か、確認を求めれるので全て「y」を押して進みます。

処理が終わったら、続いて次のコマンドを実行します。
$sudo dnf install bzip2-devel expat-devel gdbm-devel ncurses-devel openssl-devel readline-devel sqlite-devel tk-devel xz-devel zlib-devel wget
$VERSION=3.8.2
$wget https://www.python.org/ftp/python/${VERSION}/Python-${VERSION}.tgz
ここまで完了すると、/home/name(←いまログインしているユーザーの名前)以下に、.tgzのファイルが入ります。
$tar -xf Python-${VERSION}.tgz   // .tgzファイルを解凍
$cd Python-${VERSION}            // 解凍したファイルへ移動
$./configure --enable-optimizations  
$nproc

//自分の場合の出力
1
$sudo make -j 1 (←nprocで出力された数字を入力)
$sudo make altinstall
インストール自体はこれで完了なので、きちんとインストールされているか確認します。これも方法はいくつかあると思いますが、以下のようになれば成功しています。
//一例
$python3.8 —-version
Python3.8.2
あるいは実際に起動してみてもいいでしょう。
$Python3.8
Python3.8.2 (default ,Apr 10 2020, 00:51:32)
[GCC 8.3.1 20190507 (Red Hat 8.3.1-4)] on linux
Type "help","copyright","credits" or "license" for more information.
>>

そして、たびたびくどいようであれですが、「画面の最大化の設定」や「ホストOSとゲストOSでクリップボードの共有」などを設定した場合はこのあとに行っても構いません。

VirtualBoxで画面を最大化する方法、クリップボードを共有する方法


補足(万が一ネットにつながらないという場合)

基本、この手順を最初からなぞっていけば、ネットにも繋がっているとは思いますが、万が一つながらない場合には、以下のコマンドを実行してみましょう。
$nmcli d    // 接続の状態を確認、
                 // enp0s3のところ接続されていない状態になっている可能性がある。
$nmcli  connection up enp0s3   // 接続を確立
$nmcli d //念のため、もう一度状態が変わったか確認

2019年6月29日土曜日

MNISTデータの読み込み

これまた、いまさら感が半端無いが、MNISTの読み込み方を書いておく。

市販されている本(例えば『ゼロからつくるDeeplearning』とか)にうまーくパッキングされたものが付録としてついてきている場合もあるが、そういうのに頼らず、自力でやる方法を紹介する。

なぜなら本を買うとお金がかかってしまう可能性があるから。

ChainerやTensorFlowであれば、標準搭載されていますが、できるだけ高度なライブラリは使わず、できるかぎり標準的な装備でやりたいというのもあるので。

条件

  • お金はかけない(市販されている本などは頼らない)
  • できるだけ低装備で行う

注意

sklearnにも、load_digitsというデータセットが入っているが、こちらはMNISTを加工して作られた8ピクセル×8ピクセルの画像データで、MNISTの簡略版なので、MNISTとは違うので注意しよう。
(参考:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html)

オリジナルのMNISTは28ピクセル×28ピクセルの画像データだ。

MNISTデータをダウンロード

まずは、MNISTのデータ本体を以下のURLへアクセスしてダウンロードする。

http://yann.lecun.com/exdb/mnist/

そこで、以下の4つのファイルをダウンロードしてくる。
  • train-images-idx3-ubyte.gz
  • train-labels-idx1-ubyte.gz
  • t10k-images-idx3-ubyte.gz
  • t10k-labels-idx1-ubyte.gz
で解凍までする。

それで、新しくディレクトリをつくって、そこにこの4つのファイルを入れる。

新しいディレクトリの名前はなんでもいいのですが、ここではMNIST_dataという名前にすることにする。

python-mnistをインストール

MNISTを扱うようのライブラリがあるのでインストールする。 ターミナルを起動して、以下のようにコマンドを打つ。
pip install python-mnist
(参考: https://pypi.org/project/python-mnist/ )

python-mnistのインポートからファイル読み込みまで

今回MNISTを読み込むコードを書くファイルは、とりあえずmnistとしておく。

そして、mnistという名前のファイルと同じディレクトリに、先ほどのMNIST_dataというディレクトリも置く。

実際のインポートは以下のようにします。
from mnist import MNIST
mnist = MNIST('../MNIST_data')
x_train, y_train = mnist.load_training() 

import numpy as np
import matplotlib.pyplot as plt
x_train = np.asarray(x_train).astype(np.float32)

x_train.shape      # (60000, 784)が返ってくる。
x_train[0]           #  784要素の配列が返ってくる。

plt.imshow(x_train[0].reshape(28,28))     # 画像として表示される。
plt.show()
以上でMNISTのインストールが完了。

あとは、いろいろと好きなようにゴリゴリやっていくだけです。

2019年3月6日水曜日

プログラミング言語

プログラミングの周辺の話題で、以前から興味があることがある。

というか、疑問。

「なんであんなにたくさん言語があるのか」




自然言語(英語とか日本語とか中国語とか普通に喋る用の言語)ならわかる。

歴史的要因や地理的要因、流行などその他諸々によって進化していくので、あれだけ数があることも、特別疑問に感じない。

でも、プログラミング言語の場合って、機械語やアセンブリ言語然り、Cなど低いレイヤーの言語があるじゃないですか。なんでそれ一本槍でいかないのかと。

というか、いい年をしてこんなことを疑問に思ってて、でも意外にみんな、そんな感じで素朴に質問されたら答えられないのではないかと思っている。



そこで、

「プログラミング言語はマシンを統制するための言語」

という視点にたち、

「最終的に機械語に置き換えられて実行されるんであれば、程度の差こそあれ『プログラミング言語』という一つのツールとしてみなせないのか」

と思って、いろんな言語同士をお互いに埋め込んだり、処理を受け渡したりする方法をちょこちょこ調べていたりする。

なんか我ながらマニアックなことをやっていると思う。

調べること中心で、あんまり実装はできていないけど、そういうものも含めて興味があることは、
  • pythonコードにC++を埋め込む
  • C++のコードにpythonを埋め込む
  • pythonのコードにJavaを埋め込む
  • Javaのコードにpythonを埋め込む(←あんまりやる意味ない?)
  • Javascriptの中にC++を埋め込む
などなど以下、他の言語同士でも同様。さらに、
  • C++のコードにアセンブリ言語を埋め込む
  • SVGの中にC++を埋め込む
  • C++からmatplotlibへ描画
  • C++からgnuplotへ描画
  • ProcessingにC++を埋め込む
などなど。あんまり理解していないので、そもそもやる意味ないやつとか、支離滅裂なことをいっている組み合わせもあるかも。




自然言語で話すときは、方言とか、違う言語通しチャンポンで話すことも結構あったりするのに、プログラミング言語でそれができないのは、なんかもどかしいなっていう感じ。

なんか発言がど素人的な発言だけど。

でもいいのさ。素人の目線でみて、専門家的に考え検討するの大事だと思うから気にしなーい!

2017年7月21日金曜日

Skleranを使ってみる3

前回の『Sklearnを使ってみる2』を引き続き読み進めていく。

本の方では、『Setosaとそれ以外という分類は簡単にできたが、ではSetosa以外をVirginicaとVirsicolorに分類するのはどうすればいいか、簡単にできそうにはない』と話が進んでいく。

ではどうするかというと、とりあえずの回答として『力技で総当たりで閾値を探す』という方法をとる。

で、まず手始めの準備として、Setosa以外だけから成る、特徴量とラベルを改めて抽出しなおしておく。
(不要なところは#でコメントアウトしてある。)
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]


#for t,marker,c in zip (range(3),'>ox','rgb'):
#    
#    plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)
#
#plt.show()


plength=features[:,2]
is_setosa=(labels=='setosa')

max_setosa=plength[is_setosa].max()
min_non_setosa=plength[~is_setosa].min()

#print('Maximum of setosa:{0}'.format(max_setosa))
#print('Minimum of others:{0}'.format(min_non_setosa))

features=features[~is_setosa]
labels=labels[~is_setosa]
virginica=(labels=="virginica")

最後の三行
features=features[~is_setosa]
labels=labels[~is_setosa]
virginica=(labels=="virginica")
が新たに加わった分。 最初の二行も前回やったブールインデックス参照。

is_setosaがsetosaのところがTrueでそれ以外がFalseの配列なので、それをTrueとFalseを反転させている。

なので~is_setosaは、setosa以外がTrueになっていて、setosaがFalseになっています。
で、ブールインデックス参照を使って、配列からsetosa以外に該当するものを抽出している。

三行目は二行目で抽出したsetosa以外のラベルから、特にvirginicaに一致するものだけをさらに抽出し、ブーリアン配列を生成する。

で、本題の閾値を探す部分のコードが以下。
#初期値の値は処理に影響がないように適当に決める。
とりあえず絶対に影響がないような値として負の値で設定しています。
best_acc=-1.0       #正解率の値の初期値
best_fi=-1.0          #閾値となる特徴量のラベルの値の初期値
best_t=-1.0           #具体的な閾値の数値の初期値


for fi in range(features.shape[1]):    #features.shapeの値はこのとき(100,4)となっている。
なのでfeatures.shape[1]は4。つまり特徴量の個数です。全ての特徴量を総当たりで試すという方針。

    thresh=features[:,fi].copy()       #特徴量を一つ固定してそれに対する数値を全部抽出
    thresh.sort()         #上の行で抽出した数値をソートする。

    for t in thresh:       #測定値一つ一つに対して、「それが閾値になりうるか」を総当たりで試す。

        pred=(features[:,fi]>t)      #測定値一つをとりあえず閾値として固定して、
その閾値以上となっている測定値に対して新しいブーリアン配列としている。

        if (labels[pred]=="virginica")!=():     #accがnanになることを排除。詳細は下記で。
        acc=(labels[pred]=="virginica".mean())      

#上の行でつくったブーリアン配列に対して、さらにラベルが"virginica"に一致しているものを抽出。
#つまり、結果としては、測定値が閾値以上でかつvirginicaであるものを抽出してその平均をとっている。
        if acc > best_acc:    #よりよい結果を出した「特徴量と閾値の組み合わせ」に更新する処理。
          best_acc=acc      #もし、よりいい正解率が出たのなら、よりその時点での最良正解率としてそれに更新
          best_fi=fi             #もし、よりいい正解率がでたのなら、そのときの特徴量を採用。
          best_t=t              #もし、よりいい正解率がでたのなら、そのときの閾値を採用。


本文とは違い、if(labels[pred]=="virginica")!=():  という行を追加していますが、これなしだと、accがnanになってしまうことがあるので追加している。

最後に以下を追加して一段落。
def apply_model(example):
   if example[best_fi] > best_t : print("virginica")
   else:print("versicolor")

2017年1月16日月曜日

Sklearnを使ってみる2

以前、といってもかなり前になってしまいますが、『Sklearnを使ってみる1』という投稿で、『実践 機械学習システム』という本を読み進めようとしていましたが、かなり間があいてしまいましたが、続きをやっていこうと思います。


前回、とりあえず以下のコードが動きました。
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

for t,marker,c in zip (xrange(3),">ox","rgb"):

 plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


とりあえず、この先
for t,marker,c in zip (xrange(3),">ox","rgb"):

 plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


の部分は使わないので、コメントアウトするなり消すなりしておきます。
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

#for t,marker,c in zip (xrange(3),">ox","rgb"):

 #plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


で代わりにコードを継ぎ足して以下のようにします。
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

#for t,marker,c in zip (xrange(3),">ox","rgb"):

 #plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


###追加した部分
plength=features[:,2]
is_setosa=(labels=='setosa')

max_setosa=plength[is_setosa].max()
min_non_setosa=plength[~is_setosa].min()

print("Maximum of setosa:{0}".format(max_setosa))
print("Minimum of others:{0}".format(min_non_setosa))



一行一行説明していきます。

plengthの行

まず、plengthの行は、生データから花弁の長さ(plength)の値だけからなる新しい配列を作成しています。

前回、Irisデータセットは辞書型配列になっていて、その"data"要素には生データの一覧がarray型で格納されているということを確認しました。

それで、そのdata要素をfeaturesという変数に格納しました。(なので当然featuresにも生データが入っている。)

featuresの中は特徴量がarray型としてデータ別に入っているわけです。各要素の3番目の要素(インデックスとしては2番目)には花弁の長さの値が入っているので、インデックス2番目だけをすべて抽出して、plengthという変数に配列として格納しますよ、という意味。

厳密に言えば、plengthの型はarray型です。気になるようであれば、print(type(plength))として確認する。

plengthの部分だけ確認するのであれば、print(plength)を一番最後に追記しておけば、本当かどうか確かめられる。


from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

#for t,marker,c in zip (xrange(3),">ox","rgb"):

 #plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


###追加した部分
plength=features[:,2]
is_setosa=(labels=='setosa')

max_setosa=plength[is_setosa].max()
min_non_setosa=plength[~is_setosa].min()

#print("Maximum of setosa:{0}".format(max_setosa))
#print("Minimum of others:{0}".format(min_non_setosa))

print(plength)
print(type(plength))



これを実行すれば、
[ 1.4  1.4  1.3  1.5  1.4  1.7  1.4  1.5  1.4  1.5  1.5  1.6  1.4  1.1  1.2
  1.5  1.3  1.4  1.7  1.5  1.7  1.5  1.   1.7  1.9  1.6  1.6  1.5  1.4  1.6
  1.6  1.5  1.5  1.4  1.5  1.2  1.3  1.5  1.3  1.5  1.3  1.3  1.3  1.6  1.9
  1.4  1.6  1.4  1.5  1.4  4.7  4.5  4.9  4.   4.6  4.5  4.7  3.3  4.6  3.9
  3.5  4.2  4.   4.7  3.6  4.4  4.5  4.1  4.5  3.9  4.8  4.   4.9  4.7  4.3
  4.4  4.8  5.   4.5  3.5  3.8  3.7  3.9  5.1  4.5  4.5  4.7  4.4  4.1  4.
  4.4  4.6  4.   3.3  4.2  4.2  4.2  4.3  3.   4.1  6.   5.1  5.9  5.6  5.8
  6.6  4.5  6.3  5.8  6.1  5.1  5.3  5.5  5.   5.1  5.3  5.5  6.7  6.9  5.
  5.7  4.9  6.7  4.9  5.7  6.   4.8  4.9  5.6  5.8  6.1  6.4  5.6  5.1  5.6
  6.1  5.6  5.5  4.8  5.4  5.6  5.1  5.1  5.9  5.7  5.2  5.   5.2  5.4  5.1]

こうなる。

is_setosaの行

次にis_setosaの行。
まさにリスト内包表記を使っている例。
前回でlabelという変数に、どのデータがどの花なのかという名前の対応リストを格納しました。

(label=='setosa')で、labelの中の名前の一覧と比較してsetosaに一致していればTrueを、そうでなければFalseを返してTrueかFalseから成る配列を生成しis_setosaに格納します。

もっとスマートにいえばブーリアン配列を生成するということです。

確認するには、例のごとくprint(is_setosa)を追記して実行すればいいです。面倒なのと、若干くどい気もするので、ここは省略。


max_setosaの行

次にmax_setosaの行へ行きます。

plength[is_setosa]の意味ですが、ブールインデックス参照という書き方です。

is_setosaがTrue or Falseからなる配列であることを上で書きました。そういうブーリアン配列をインデックスとして代入すると、plengthの要素の中からブーリアン配列のTrueに対応している要素だけを抽出して新しい配列を作成します。

Trueになっているのはsetosaのところでしたので、setosaに対応している花弁の長さだけが抽出できます。

plength[is_setosa]という名前の新しい配列なので、それにmax()メソッドを使っている。

つまり、setosaの花弁の長さの中で一番値が大きいものを、max_setosaに代入。

min_non_setosaの行

この行も、先ほど使ったブールインデックス参照が使われてます。

今度はsetosa以外のものの最小値を求めています。

setosa以外、ということはis_setosaにおいてはFalseにあたるものです。

Falseのままではブールインデックス参照ができないので、「~」演算子を使ってビット反転させis_setosaのTrueはFalseに、FalseはTrueにしてして代入しています。

printの行

最後は、処理というよりは、単純にpythonの文法ですが、一応自分なりに説明しておきます。

これは文字列に対するformatメソッドです。
調べてみると、formatメソッドにもいろいろ描き方のバリエーションがあるようですが、おそらく基本的な描き方は以下の形式かと思われます。

'文字列'.format(要素0,要素1,・・・)
ドットより前の文字列の中に、formatに引数として渡されている要素のインデックスの番号を代わりに代入して、最終的な出力文字列の体裁だけ整えるイメージです。

上記の"Maximum of setosa:{0}".format(max_setosa)とかであれば、この場合はformatメソッドに渡している要素が一つだけなので、それがインデックス0番目ということになりますが、それを「Maximum of setosa:{0}」という文字列の{0}をmax_setosaで置き換えたものが、結果としてできる文字列です。それをprintしている。
{数字}のところが、その番号に対応しているインデックスの要素で置きかわるという意味です。
詳しくは、下でまとめてあるリンクや本を参照。


で結局のところ、
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]


#for t,marker,c in zip (range(3),'>ox','rgb'):
#    
#    plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)
#
#plt.show()


plength=features[:,2]
is_setosa=(labels=='setosa')

max_setosa=plength[is_setosa].max()
min_non_setosa=plength[~is_setosa].min()

print('Maximum of setosa:{0}'.format(max_setosa))
print('Minimum of others:{0}'.format(min_non_setosa))

を実行すると、
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 others.py
Maximum of setosa:1.9
Minimum of others:3.0

という感じになります。
参考にしたページや文献・書籍
NumPy配列のブールインデックス参照 | hydroculのメモ
Python 3 の文字列フォーマット formatメソッド | TM Life
『実践 機械学習システム』(オライリー)

2016年7月22日金曜日

Graphviz/PyGraphvizのインストール

前々から使ってみたいとは思っていました。

調べてみたら以外にインストールのハードル自体は低そうなので、サクっと入れてみました。
brewとpip3を用いてインストールできるようです。
brewについてはbrew searchを実行してたくさん吐き出されるリストの中にgraphvizが確かにあることを自分で確認してみましょう。

環境は以下の通り。

  • El'Captan(10.11.5)
  • Homebrewはインストール済み

Graphvizのインストール

hiroshi-no-MacBook-Air:~ hiroshi$ sudo brew install graphvi

と実行するだけです。例のごとく自分のPCのパスワードを求められるので、パスワードを入力すれば、次のような処理がはしります。それほど長くない処理。
==> Downloading https://homebrew.bintray.com/bottles/graphviz-2.38.0.el_capitan.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring graphviz-2.38.0.el_capitan.bottle.1.tar.gz
🍺  /usr/local/Cellar/graphviz/2.38.0: 469 files, 67M

Graphvizのインストール自体はこれだけ。
PyGraphvizのインストール、と先へ進む前に、Graphvizのインストールがきちんとできているか確認します。

テキストファイルに次のように記述して、Sample.dotというように拡張子をdotにして保存します。

#####以下のように記述し、dotという拡張子で保存
graph g{
    "Hello World"
    }

でSample.dotという、今保存したファイルが保存してあるディレクトリへカレントディレクトリを移し、そこで次のようなコマンドを実行します。

######Sample.svgというファイルで出力する場合
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ dot -Tsvg Sample.dot -o Sample.svg

そうするとSample.dotが保存されているディレクトリと同じディレクトリにSample.svgとファイルが生成されます。
それをブラウザで開けば、次のようなものが表示されます。

注意)紛らわしいけど、上に貼り付けてある画像はSVGファイルをブラウザで開いたものをスクリーンショットで撮影したpng画像です!BloggerだとSVGファイルは挿入できないらしい。



PyGraphvizのインストール

pip3を入れているので、以下のようにコマンドを打つだけで完了です。
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ sudo pip3 install pygraphviz

例のごとく自分のPCのパスワードを入れると次のような処理が進み(すぐ終わります)、完了です。

The directory '/Users/hiroshi/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
You are using pip version 7.1.0, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The directory '/Users/hiroshi/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pygraphviz
  Downloading pygraphviz-1.3.1.zip (123kB)
    100% |████████████████████████████████| 126kB 2.0MB/s 
Building wheels for collected packages: pygraphviz
  Running setup.py bdist_wheel for pygraphviz
  Stored in directory: /Users/hiroshi/Library/Caches/pip/wheels/81/03/ed/eb3b7ef51ee6527abfaf2701e222e74107b97344cfa2201881
Successfully built pygraphviz
Installing collected packages: pygraphviz
Successfully installed pygraphviz-1.3.1

確認作業は、

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3    #python3と打ってrerurnを押す。
Python 3.4.3 (default, Aug 11 2015, 08:57:25) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygraphviz       #import pygraphvizと打ってreturn
>>> 

としてエラーがでなければOK。

2016年4月23日土曜日

Sklearnを使ってみる1

かなり以前になりますが、『Macでpython3の環境構築3---ライブラリのインストール---』でsklearnをインストールしたので、『実践 機械学習システム』を読みながら、sklearnをいじってみたいと思います。

で、特に理由はありませんが、スタートは第2章のIrisデータセットを扱う章から、始めます。Irisデータセット自体はsklearnをインストールしたときに一緒についてきます。

最初にがっつりとしたコードが出てくるのが以下のようなコードです。

from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

for t,marker,c in zip (xrange(3),">ox","rgb"):

 plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)


本の冒頭にて、この本ではpython2.7をベースにかかれているのですが、自分はPython3.4を使っているのでうまく動きません。それに加え、そもそもコードの意味もよくわかりません。。。

とりあえず、これを動くようにしたり解読したりするところから始めたいと思います。

まず、動かす。

まず、動くようにすることを考えます。
どうやら、xrangeといところが問題だったようです。python3.xではrangeの方にxrangeが統合されているようです。
それと最後にplt.show()も追記が必要です。
結局のところ、以下のようにすれば動作します。
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]

for t,marker,c in zip (range(3),'>ox','rgb'):
                       
 plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)
 plt.show()



Irisデータセットの構造

とりあえず動いたので、もっと詳細を解読していきたいと思います。
次に、何をしているのかよくわからなかったのが、上の例でいう5行目(空白行は除いて)から9行目の部分。

features=data["data"]
feature_names=data["feature_names"]
target=data["target"]
target_names=data["target_names"]
labels=target_names[target]
これはIrisデータセットがディクショナリー型になっていることがわかり理解できました。 Irisデータセットは次のようなディクショナリー型のデータになっています。
#説明用の擬似コード
load_iris={data:(測定値などの一覧),
DESCR:(引用情報などの参考情報),
target_names:(あやめ(Iris)の種類の名前),
featurenames:(「 花弁の長さ」など特徴量の名前),
target:(あやめの種類の名前にそれぞれ割り当てる番号)
}

ディクショナリのキーを取得しようとすると次のようになります。

#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.keys()
dict_keys(['DESCR', 'data', 'feature_names', 'target', 'target_names'])
#表示される順番は毎回違うようです。



#####ファイルに保存して実行する場合はこうする。
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>print(data.keys())

###→例えばiris.pyという名前で保存し、ターミナルから実行すると同じような結果になる。
各項目の中をみてみます。まずは、'data'というキーに対応する要素は次のようになっています。
#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.data()
array([[ 5.1,  3.5,  1.4,  0.2],
       [ 4.9,  3. ,  1.4,  0.2],
       [ 4.7,  3.2,  1.3,  0.2],
       [ 4.6,  3.1,  1.5,  0.2],
       [ 5. ,  3.6,  1.4,  0.2],
       [ 5.4,  3.9,  1.7,  0.4],
       [ 4.6,  3.4,  1.4,  0.3],
       [ 5. ,  3.4,  1.5,  0.2],
       [ 4.4,  2.9,  1.4,  0.2],
       [ 4.9,  3.1,  1.5,  0.1],
       [ 5.4,  3.7,  1.5,  0.2],
       [ 4.8,  3.4,  1.6,  0.2],
       [ 4.8,  3. ,  1.4,  0.1],
       [ 4.3,  3. ,  1.1,  0.1],
       [ 5.8,  4. ,  1.2,  0.2],
       [ 5.7,  4.4,  1.5,  0.4],
       [ 5.4,  3.9,  1.3,  0.4],
       [ 5.1,  3.5,  1.4,  0.3],
       [ 5.7,  3.8,  1.7,  0.3],
       [ 5.1,  3.8,  1.5,  0.3],
       [ 5.4,  3.4,  1.7,  0.2],
       [ 5.1,  3.7,  1.5,  0.4],
       [ 4.6,  3.6,  1. ,  0.2],
       [ 5.1,  3.3,  1.7,  0.5],
       [ 4.8,  3.4,  1.9,  0.2],
       [ 5. ,  3. ,  1.6,  0.2],
       [ 5. ,  3.4,  1.6,  0.4],
       [ 5.2,  3.5,  1.5,  0.2],
       [ 5.2,  3.4,  1.4,  0.2],
       [ 4.7,  3.2,  1.6,  0.2],
       [ 4.8,  3.1,  1.6,  0.2],
       [ 5.4,  3.4,  1.5,  0.4],
       [ 5.2,  4.1,  1.5,  0.1],
       [ 5.5,  4.2,  1.4,  0.2],
       [ 4.9,  3.1,  1.5,  0.1],
       [ 5. ,  3.2,  1.2,  0.2],
       [ 5.5,  3.5,  1.3,  0.2],
       [ 4.9,  3.1,  1.5,  0.1],
       [ 4.4,  3. ,  1.3,  0.2],
       [ 5.1,  3.4,  1.5,  0.2],
       [ 5. ,  3.5,  1.3,  0.3],
       [ 4.5,  2.3,  1.3,  0.3],
       [ 4.4,  3.2,  1.3,  0.2],
       [ 5. ,  3.5,  1.6,  0.6],
       [ 5.1,  3.8,  1.9,  0.4],
       [ 4.8,  3. ,  1.4,  0.3],
       [ 5.1,  3.8,  1.6,  0.2],
       [ 4.6,  3.2,  1.4,  0.2],
       [ 5.3,  3.7,  1.5,  0.2],
       [ 5. ,  3.3,  1.4,  0.2],
       [ 7. ,  3.2,  4.7,  1.4],
       [ 6.4,  3.2,  4.5,  1.5],
       [ 6.9,  3.1,  4.9,  1.5],
       [ 5.5,  2.3,  4. ,  1.3],
       [ 6.5,  2.8,  4.6,  1.5],
       [ 5.7,  2.8,  4.5,  1.3],
       [ 6.3,  3.3,  4.7,  1.6],
       [ 4.9,  2.4,  3.3,  1. ],
       [ 6.6,  2.9,  4.6,  1.3],
       [ 5.2,  2.7,  3.9,  1.4],
       [ 5. ,  2. ,  3.5,  1. ],
       [ 5.9,  3. ,  4.2,  1.5],
       [ 6. ,  2.2,  4. ,  1. ],
       [ 6.1,  2.9,  4.7,  1.4],
       [ 5.6,  2.9,  3.6,  1.3],
       [ 6.7,  3.1,  4.4,  1.4],
       [ 5.6,  3. ,  4.5,  1.5],
       [ 5.8,  2.7,  4.1,  1. ],
       [ 6.2,  2.2,  4.5,  1.5],
       [ 5.6,  2.5,  3.9,  1.1],
       [ 5.9,  3.2,  4.8,  1.8],
       [ 6.1,  2.8,  4. ,  1.3],
       [ 6.3,  2.5,  4.9,  1.5],
       [ 6.1,  2.8,  4.7,  1.2],
       [ 6.4,  2.9,  4.3,  1.3],
       [ 6.6,  3. ,  4.4,  1.4],
       [ 6.8,  2.8,  4.8,  1.4],
       [ 6.7,  3. ,  5. ,  1.7],
       [ 6. ,  2.9,  4.5,  1.5],
       [ 5.7,  2.6,  3.5,  1. ],
       [ 5.5,  2.4,  3.8,  1.1],
       [ 5.5,  2.4,  3.7,  1. ],
       [ 5.8,  2.7,  3.9,  1.2],
       [ 6. ,  2.7,  5.1,  1.6],
       [ 5.4,  3. ,  4.5,  1.5],
       [ 6. ,  3.4,  4.5,  1.6],
       [ 6.7,  3.1,  4.7,  1.5],
       [ 6.3,  2.3,  4.4,  1.3],
       [ 5.6,  3. ,  4.1,  1.3],
       [ 5.5,  2.5,  4. ,  1.3],
       [ 5.5,  2.6,  4.4,  1.2],
       [ 6.1,  3. ,  4.6,  1.4],
       [ 5.8,  2.6,  4. ,  1.2],
       [ 5. ,  2.3,  3.3,  1. ],
       [ 5.6,  2.7,  4.2,  1.3],
       [ 5.7,  3. ,  4.2,  1.2],
       [ 5.7,  2.9,  4.2,  1.3],
       [ 6.2,  2.9,  4.3,  1.3],
       [ 5.1,  2.5,  3. ,  1.1],
       [ 5.7,  2.8,  4.1,  1.3],
       [ 6.3,  3.3,  6. ,  2.5],
       [ 5.8,  2.7,  5.1,  1.9],
       [ 7.1,  3. ,  5.9,  2.1],
       [ 6.3,  2.9,  5.6,  1.8],
       [ 6.5,  3. ,  5.8,  2.2],
       [ 7.6,  3. ,  6.6,  2.1],
       [ 4.9,  2.5,  4.5,  1.7],
       [ 7.3,  2.9,  6.3,  1.8],
       [ 6.7,  2.5,  5.8,  1.8],
       [ 7.2,  3.6,  6.1,  2.5],
       [ 6.5,  3.2,  5.1,  2. ],
       [ 6.4,  2.7,  5.3,  1.9],
       [ 6.8,  3. ,  5.5,  2.1],
       [ 5.7,  2.5,  5. ,  2. ],
       [ 5.8,  2.8,  5.1,  2.4],
       [ 6.4,  3.2,  5.3,  2.3],
       [ 6.5,  3. ,  5.5,  1.8],
       [ 7.7,  3.8,  6.7,  2.2],
       [ 7.7,  2.6,  6.9,  2.3],
       [ 6. ,  2.2,  5. ,  1.5],
       [ 6.9,  3.2,  5.7,  2.3],
       [ 5.6,  2.8,  4.9,  2. ],
       [ 7.7,  2.8,  6.7,  2. ],
       [ 6.3,  2.7,  4.9,  1.8],
       [ 6.7,  3.3,  5.7,  2.1],
       [ 7.2,  3.2,  6. ,  1.8],
       [ 6.2,  2.8,  4.8,  1.8],
       [ 6.1,  3. ,  4.9,  1.8],
       [ 6.4,  2.8,  5.6,  2.1],
       [ 7.2,  3. ,  5.8,  1.6],
       [ 7.4,  2.8,  6.1,  1.9],
       [ 7.9,  3.8,  6.4,  2. ],
       [ 6.4,  2.8,  5.6,  2.2],
       [ 6.3,  2.8,  5.1,  1.5],
       [ 6.1,  2.6,  5.6,  1.4],
       [ 7.7,  3. ,  6.1,  2.3],
       [ 6.3,  3.4,  5.6,  2.4],
       [ 6.4,  3.1,  5.5,  1.8],
       [ 6. ,  3. ,  4.8,  1.8],
       [ 6.9,  3.1,  5.4,  2.1],
       [ 6.7,  3.1,  5.6,  2.4],
       [ 6.9,  3.1,  5.1,  2.3],
       [ 5.8,  2.7,  5.1,  1.9],
       [ 6.8,  3.2,  5.9,  2.3],
       [ 6.7,  3.3,  5.7,  2.5],
       [ 6.7,  3. ,  5.2,  2.3],
       [ 6.3,  2.5,  5. ,  1.9],
       [ 6.5,  3. ,  5.2,  2. ],
       [ 6.2,  3.4,  5.4,  2.3],
       [ 5.9,  3. ,  5.1,  1.8]])

実際に各サンプルに対する測定値が格納されている様子がわかります。

次は、'target_names'に対応する要素、あやめ(Iris)の種類の名前としてどういう要素が格納されているかみます。

調べ方は上記とほとんど同じです。

#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.target_names
array(['setosa', 'versicolor', 'virginica'], 
      dtype='

setosaとversicolorとvirginicaという名前があるのがわかります。最後についている余分なやつはよく意味はわかりませんが、とりあえずスルーします。

同様に、'feature_names'に対応する要素の中をみます。
#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

最後に、'target'に対応する要素の中身。

#最初の>>python3を実行する部分 は省略
>>from sklearn.datasets import load_iris
>>data=load_iris()
>>data.target
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
で最後のlabels=target_names[target]の行で、0→setosa、1→versicolor、2→virginicaに対応させる処理をしています。 これも最初あまり意味がわかりませんでしたが、numpyの文法です。 target_namesのリストから0か1か2に対応するインデックスの要素を取り出し、新しいリストを作るという意味です。 事実上ラベル付けを行っていることになります。よく使う利用法らしい。
from sklearn.datasets import load_iris
>>data=load_iris()
>>> features=data['data']
>>> features_name=data['feature_names']
>>> target=data['target']
>>> target_names=data['target_names']
>>> label=target_names[target]
>>> label
array(['setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'setosa', 'setosa', 'setosa', 'setosa',
       'setosa', 'setosa', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'versicolor',
       'versicolor', 'versicolor', 'versicolor', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica', 'virginica', 'virginica',
       'virginica', 'virginica', 'virginica'], 
   )


for文のブロック

次にわからなかったのが、この行です。

for t,marker,c in zip (range(3),’>ox’,’rgb’):

まず、このzipというのはfor文を3つ同時に処理する関数のようです。(なんて便利なんだ。。。)

上の例でいえば、変数tにはrange(3)の中身を順番に代入、変数markerには{>,o,x}を順番に代入、変数cには{r,g,b}を順番に代入、ということです。

で、rgbの方はいいとして、>oxってなんなのかと。 これは、実際に描画するときのマーカーの形(?)だそうです。matplotlibのオプションです。 詳しくはここのページを(Markers--matplotlib.markers) もう少しだ。。。次はこの行。
plt.scatter(features[target == t,0],features[target == t,1],marker=marker,c=c)

まず、scatterは散布図を描画するmatplotlib提供の関数です。

features[target==t,0]というのは、features自体が実際にデータ(数値)が格納されているリストなわけですが、その中でも[ ]の中の条件に一致するものだけを抽出していますよ、という意味です。

つまり上の例でいえば、featuresの0番目の要素の一覧の中、targetが例えば0(=0であればそれはsetosaなわけですが)に該当するもの、 さらに言い換えておけば、target=0のときはsetosaのfeaturesの0番目要素だけを抽出するという意味です。

なんか言い換えたけどわかりやすくなっている気がしない。

さらに、plt.scatter()やplt.plot()などmatplotlibの描画系は先にグラフを生成して、最後にplt.show()をすると、最後にグラフが重ねて描画されます。

今回のケースではfor文として3回処理されるので、3種類のプロットが重ねて描かれます。

上記のようなことも含め、実際に冒頭のコードを実行すると、次のような画面が出てきます。



そうすると、本に書かれている6枚のグラフのうち、一番左上のグラフが描画されます。



2016年4月9日土曜日

NLTKを使ってみる---『入門 自然言語処理』を読む2---

さて、『NLTKを使ってみる---『入門 自然言語処理』を読む1----』の続きです。

1.3.1が頻度分布の話になっています。その中でもFreqDistがうまくいかなかったので迷いましたが、結局次のように書くことでうまくいきました。

#以下のようなコードを書いて、例えばnlpex.pyなどの名前で保存する。
import nltk
from nltk.book import *
from nltk import *
fdist1=FreqDist(text1)
print(fdist1)
fdist1.plot(50,cumulative=True)
ターミナルにて
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 nlpex.py      #python3 nlpex.pyと打ってreturnを押す。
とすると、次のような画面が出てきます。


上で書いたコードの冒頭のimportに関する部分ですが、自分の読み間違えでなければ、本の中ではimport nltkだけ書けば書けるような雰囲気で書かれています。

実際やってみると、「NameError:name 'FreqDist' is not defined」とかいうエラーが表示されます。本の中では、こういうエラーがでた場合にはnltk.book import *を実行すればいいよとか書いてあります。

なのでさらに追記してfrom nltk.book import *を書いて実行しますがエラーは消えず。実際には、さらに一行追加してfrom nltk import *も書いて上記のようなコードでないと動きません。


分量が少しになってしまいましたが、本の中では区切りがいいので、一旦区切ります。


参考にしたページや文献・書籍
『入門 自然言語処理』

2016年4月5日火曜日

NLTKを使ってみる---『入門 自然言語処理』を読む1----

ずいぶんと前になりますが、『Macでpython3の環境構築7---NLTKのインストール1---』と『Macでpython3の環境構築8---NLTKのインストール2---』でNLTKをインストールしました。

その流れで、『入門 自然言語処理』を読んでみたいと思います。

というのも、この本ではpython2系をベースにして書かれていまして、python3系で動かしてみたいと思ったからです。

慣れている人にとってはpython2からpython3への読み替えもすぐできるのでしょうが、自分はそうではないし、そういう人もいると思うのでpython3で実際に動いたコードを記載しつつ勉強の過程を記録してきたいと思います。

さてこの記事のスタートとしては、『入門 自然言語処理』でいうところの1.1.3、とりあえずNLTKのインストールができたことが確認できたところから始めたいと思います。

本ではインタプリンタ上、つまりテキストファイルにプログラムを書いて保存してターミナルなどのコマンドから実行するのではなく、直接ターミナルなどのコマンドに逐次コードを打っていく方法で進められていますが、ここでは一旦保存する方法で進めていきます。

本ではtext1.concordance(""monstrous")を実行しています。
これは、指定された単語が現れた全ての場所を、その周辺の文章とともに表示します。
下の例で言えば、text1の中から「monstrous」という単語が現れた場所をその周辺の文章とともに表示します。
これをするには以下のようなコードを書きます。

#以下のように書いて、nlpex.pyという名前で保存することにする。
import nltk
from nltk.book import *
print(text1.concordance("monstrous"))

ターミナルにてカレントディレクトリへ移動し、

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 nlpex.py      #python3 nlpex.pyと打ってreturn

とコマンドを打つと、

*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908
Displaying 11 of 11 matches:
ong the former , one was of a most monstrous size . ... This came towards us , 
ON OF THE PSALMS . " Touching that monstrous bulk of the whale or ork we have r
ll over with a heathenish array of monstrous clubs and spears . Some were thick
d as you gazed , and wondered what monstrous cannibal and savage could ever hav
that has survived the flood ; most monstrous and most mountainous ! That Himmal
they might scout at Moby Dick as a monstrous fable , or still worse and more de
th of Radney .'" CHAPTER 55 Of the Monstrous Pictures of Whales . I shall ere l
ing Scenes . In connexion with the monstrous pictures of whales , I am strongly
ere to enter upon those still more monstrous stories of them which are to be fo
ght have been rummaged out of this monstrous cabinet there is no telling . But 
of Whale - Bones ; for Whales of a monstrous size are oftentimes cast up dead u
None

となります。

本の方ではsimilarやcommon_contextsなども紹介されていますが、コードの書き方自体では同じなので省略。(なるべく丁寧にという、自分なりの方針からはややそれますが、、、まぁいいか)


次は、分散プロットの表示です。
#先ほどの例と同様に、以下のように書いて例えばnlpex.pyとかいう名前で保存する。
import nltk
from nltk.book import *
text4.dispersion_plot(['citizens','democracy','freedom','duties','America'])


で、次のようにコマンドを打ちます。
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ python3 nlpex.py


するとこういう画面が表示されます。

とりあえず、一旦ここで区切ります。

参考にしたページや文献・書籍
 『入門 入門自然言語処理』

2016年2月26日金曜日

Macでpython3の環境構築14---OpenCV3のインストール2---

前回、「Macでpython3の環境構築13---OpenCV3のインストール1---」では、OpenCV3のインストールを試してみたものの、うまくいかなかったというお話でした。

ここからネットの情報を調べながら、色々と試行錯誤が始まりました。

その試行錯誤の過程で行なったことを記録していくわけですが、まずうまくいった操作を書いておきます。

うまくいった操作

結論からいうと、次の操作でうまくいきました。

hiroshi-no-MacBook-Air:~ hiroshi$ sudo sh -c "echo '/usr/local/opt/opencv3/lib/python3.4/site-packages' 
>> /usr/local/lib/python3.4/site-packages/opencv3.pth"

ターミナルを起動して上記コマンドを打つと、無事OpenCV3をインポートできるようになりました。
このコマンドの意味や効果もある程度調べてみましたが、そのあたり詳細は、また別の機会に書きたいと思います。

うまくいかなかった操作

  1. sys.pathに追加してみる
  2. sys.pathというところにpythonがモジュールを探す探索場所が書かれているという噂だったので、次のようにしてみましたが、できませんでした。もっともあまり理解せずに行なったので、そもそもが、正しいコマンドを実行していたのはわかりませんが。
    hiroshi-no-MacBook-Air:~ hiroshi$ python3      
    #ターミナルを起動して「python3」と打ってreturn。すると以下3行が表示され>>>で次のコマンドの入力待ちになる。
    Python 3.4.3 (default, Aug 11 2015, 08:57:25) 
    [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys         # 「import sys」と打ってreturn。
    >>> sys.path.appned("/usr/local/lib/python3.4/site-packages")       # sys.pathに文字列を追加する。
    >>> print(sys.path)       #sys.pathの中身を表示。無事追加されたのかを確認する。確かに一番最後に追加されています。
    ['', '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', 
    '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4', 
    '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', 
    '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload', 
    '/usr/local/lib/python3.4/site-packages']
    

    まだ完全に理解できていないので、なぜこれでできなかったのかなど、詳細はここでは飛ばします。
    うまくいかなかったので元に戻しておきます。sys.path.appendで追加したものを削除するには、sys.path.removeらしいです。
    >>> sys.path.remove("/usr/local/lib/python3.4/site-packages")
    >>> print(sys.path)
    ['', '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', 
    '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4', 
    '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', 
    '/usr/local/Cellar/python3/3.4.3_2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload']  
     #きちんと消えています。
    

  3. .bashrcへ追加してみる。
  4. .bashrcへ追加してみるといいよ的な情報もあった気がするので、とりあえず以下のようなコマンドを打ってみました。
    hiroshi-no-MacBook-Air:~ hiroshi$ echo "export PATH=\$PATH:/usr/local/Cellar/opencv3">>~/.bashrc
    hiroshi-no-MacBook-Air:~ hiroshi$ source ~/.bashrc
    

    どうやら実際は、PYTHONPATHというところに追加しなければいけませんが、詳細はここでは省略。
  5. cv.pyのコピー ・ペースト
  6. これは、どこかの情報にあったわけではないですが、自分で考えて試してみた方法。
    /usr/local/Cellar/opencv/2.4.12/lib/python2.7/site-packagesの配下にあるcv.pyをコピーして、/usr/local/Cellar/opencv3/3.0.0/lib/python3.4/site-packagesに貼り付けるという操作です。
    Finderを開き、Shift+Command+Gを押すと絶対パスを入力できるボックスがでる。そこに/usr/local/Cellar/opencv/2.4.12/lib/python2.7/site-packagesと入力してreturnを押すと該当のフォルダへ移動する。


    /usr/local/Cellar/opencv/2.4.12/lib/python2.7/site-packagesフォルダの中身。cv.pyがあるので、これをコピー。


    /usr/local/Cellar/opencv3/3.0.0/lib/python3.4/site-packagesの中身。ここにコピーしたcv.pyを貼り付け。
    多分わかっている人からみると、かなりトンチンカンなことをしているようにみえると思いますが、恥も晒しておこうと思います。なんでこんなことをしようと思ったかというと、一つは、なんとなくではありますが、site-packagesの中にpythonのモジュールが入っているとわかっていたことと、もう一つはOpenCVの実際のファイルがcv.pyだと思っていたこと、それとシンボリックリンクなどの概念がごちゃごちゃになっていたために行った操作です。書いてみて思いましたが、そもそもモジュールとかsite-packegesについて理解不足ですよね。
    やってみたはいいもののうまくいかなかったのでその場合はもとに戻しましょう。貼り付けをしたcv.pyを削除しておきましょう。
大体試してみたのはこんなところでしょうか。
ところどころ、詳細は省略、として試してみたことだけざっと書きました。忘れないうちに。
飛ばしたところは、もう少し精査してまた書こうと思います。

2016年2月22日月曜日

Macでpython3の環境構築13---OpenCV3のインストール1---

画像処理とかもやってみたいと思いOpenCVをインストールしようと思っておりました。

しかし、なかなかうまくいかず格闘。その結果なんとかインストールできたので、どうやってうまくできたのか、自分用のメモや勉強の意味も含め書いておきたいと思います。

結論から言えば、うまくいかなかったのはPATHが通っていなかったからなんですけどね。

まず、次のようにします。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew install opencv3 --with-python3
#「brew install opencv3 --with-python3」と打ってreturnを押す。

そうすると次のようになります。

==> Installing opencv3 from homebrew/homebrew-science
Error: You must `brew link openexr numpy' before homebrew/science/opencv3 can be installed

Errorがでてきます。

直訳とはなりますが、「homebrew/science/opencv3がインストールされる前に、"brew link openxr numpy"をしなければなりません。」という意味。

まあでは、「実際どうすればいいの?」というのはまた別の話ですが。とりあえず先へ進みます。

その次はこうします。正確な意味などはまだわかりませんが、(特に--with-python3の部分)とりあえず保留にし先へ進みます。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew install numpy --with-python3    # 「brew install numpy --with-python3」と打ってreturnを押す。

そうするとこうなります。

Warning: homebrew/python/numpy-1.9.3 already installed, it's just not linked

今度はWarning。「homebrew/python/numpy-1.9.3は既にインストールされているけども、ただしリンクはされていません。」とのこと。

ではリンクさせましょう。ということで、先ほどのErrorにも表示されていましたが、どうやらlinkをするためにはbrew link openxr numpyをすればいいらしいので、素直にErrorの指示に従ってみます。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew link openexr numpy
 # 「brew link openxr numpy」と打ってreturnを押す。

そうすると、こうなります。

Linking /usr/local/Cellar/openexr/2.2.0...
Error: Could not symlink share/aclocal/openexr.m4
/usr/local/share/aclocal is not writable.

ここでもまたError。symlinkできません。「/usr/local/share/aclocal には書き込みできません。」とのこと。

これは、現在のコマンドの実行者では、/usr/local/share/aclocalに書き込みできません、/usr/local/share/aclocalの権限を変更する必要があるようです。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ sudo chown -R hiroshi   /usr/local/share/aclocal
#  「sudo chown -R hiroshi」と打ってreturnを押す。
#今自分の環境では「hiroshi」というユーザーでログインしてます。-Rのあとは、今ログインしているユーザーの名前を入れる。
# sudo chown -R hiroshi  というのは、その右に入力したファイルの権限をhiroshiに変更するという意味。

sudoをつけて実行しているので、パスワードを求められます。ここには自分のパソコンのパスワードを入れます。

今までみたいに、ずらずらと何か処理が始まるわけではありません。

また次のコマンドの入力待ちになるので、続けてこうします。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew link openexr
# 「brew link openxr」と打ってreturnを押す。
#   とりあえずopenxrに対してだけbrew linkを行っておきます。

そうすると、こうなる。

Linking /usr/local/Cellar/openexr/2.2.0... 103 symlinks created

ということでこれは問題なく処理できました。

その上でさらに、

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew link openexr numpy

とします。

そうすると、

Warning: Already linked: /usr/local/Cellar/openexr/2.2.0        #この行は、openxrはすでにリンクされていますよ、という意味。
上記の処理で、もう既にうまくいっているからね。
To relink: brew unlink openexr && brew link openexr     
Linking /usr/local/Cellar/numpy/1.9.3...        # numpyに対する処理。結局エラー。
Error: Could not symlink bin/f2py
Target /usr/local/bin/f2py
already exists. You may want to remove it:
  rm '/usr/local/bin/f2py'

To force the link and overwrite all conflicting files:
  brew link --overwrite numpy

To list all files that would be deleted:
  brew link --overwrite --dry-run numpy

となります。

openxrとnumpyそれぞれに対して処理が走ります。

openxrの方は、「もう既にリンクされています」と。確かに先ほど処理が無事できておりましたので、そうなりますね。

numpyの方はError。

というかここまで、コマンドの打ち方が一貫していないですが、ぶっちゃけ、処理していた当時も現在も、完全に意味がわかっているわけではないので、ご勘弁ください。

でこのあとも、よく意味はわかってないので、詳しいコメントはしませんが、そのあと行った処理も記載しておきたいと思います。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ rm '/usr/local/bin/f2py'       # rm はその右のファイルを削除する。
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew link --overwrite numpy
Linking /usr/local/Cellar/numpy/1.9.3... 392 symlinks created
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew link --overwrite --dry-run numpy
Warning: Already linked: /usr/local/Cellar/numpy/1.9.3
To relink: brew unlink numpy && brew link numpy
hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew link numpy
Warning: Already linked: /usr/local/Cellar/numpy/1.9.3
To relink: brew unlink numpy && brew link numpy

途中の部分の処理が一部理解できていない部分もありますが、

「Linking /usr/local/Cellar/numpy/1.9.3... 392 symlinks created」とあったり、「Warning: Already linked: /usr/local/Cellar/numpy/1.9.3」と出ているので、どうやらnumpyのリンクもできたようです。

これで、当初冒頭ででていた「brew install opencv3 --with-python3」の実行に対するError「Error: You must `brew link openexr numpy' before homebrew/science/opencv3 can be installed」に対する対策が一応できたはずなので、改めて「brew install opencv3 --with-python3」を実行してみます。

hiroshi-no-MacBook-Air:Pro-tr hiroshi$ brew install opencv3 --with-python3

そうすると今度は、こういう処理が始まります。

==> Installing opencv3 from homebrew/homebrew-science
==> Installing dependencies for homebrew/science/opencv3: cmake, pkg-config, homebrew/python/numpy
==> Installing homebrew/science/opencv3 dependency: cmake
==> Downloading https://homebrew.bintray.com/bottles/cmake-3.3.1.yosemite.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring cmake-3.3.1.yosemite.bottle.1.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
/usr/local/share/emacs/site-lisp/

Add the following to your init file to have packages installed by Homebrew added to your load-path:
(let ((default-directory "/usr/local/share/emacs/site-lisp/"))
  (normal-top-level-add-subdirs-to-load-path))
==> Summary
🍺  /usr/local/Cellar/cmake/3.3.1: 1901 files, 33M
==> Installing homebrew/science/opencv3 dependency: pkg-config
==> Downloading https://homebrew.bintray.com/bottles/pkg-config-0.28.yosemite.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring pkg-config-0.28.yosemite.bottle.2.tar.gz
🍺  /usr/local/Cellar/pkg-config/0.28: 10 files, 612K
==> Installing homebrew/science/opencv3 dependency: homebrew/python/numpy
==> Using Homebrew-provided fortran compiler.
This may be changed by setting the FC environment variable.
==> Downloading https://pypi.python.org/packages/source/n/numpy/numpy-1.9.3.tar.gz
######################################################################## 100.0%
==> Downloading https://pypi.python.org/packages/source/n/nose/nose-1.3.4.tar.gz
######################################################################## 100.0%
==> python -c import setuptools... --no-user-cfg install --prefix=/usr/local/Cellar/numpy/1.9.3/libexec/nose --sin
==> python setup.py build --fcompiler=gnu95 install --prefix=/usr/local/Cellar/numpy/1.9.3
==> Downloading https://pypi.python.org/packages/source/n/nose/nose-1.3.4.tar.gz
Already downloaded: /Library/Caches/Homebrew/numpy--nose-1.3.4.tar.gz
==> python3 -c import setuptools... --no-user-cfg install --prefix=/usr/local/Cellar/numpy/1.9.3/libexec/nose --si
==> python3 setup.py build --fcompiler=gnu95 install --prefix=/usr/local/Cellar/numpy/1.9.3
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink lib/python3.4/site-packages/numpy/__config__.py
Target /usr/local/lib/python3.4/site-packages/numpy/__config__.py
already exists. You may want to remove it:
  rm '/usr/local/lib/python3.4/site-packages/numpy/__config__.py'

To force the link and overwrite all conflicting files:
  brew link --overwrite numpy

To list all files that would be deleted:
  brew link --overwrite --dry-run numpy

Possible conflicting files are:
/usr/local/lib/python3.4/site-packages/numpy/__config__.py
/usr/local/lib/python3.4/site-packages/numpy/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/_import_tools.py
/usr/local/lib/python3.4/site-packages/numpy/add_newdocs.py
/usr/local/lib/python3.4/site-packages/numpy/compat/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/compat/_inspect.py
/usr/local/lib/python3.4/site-packages/numpy/compat/py3k.py
/usr/local/lib/python3.4/site-packages/numpy/compat/setup.py
/usr/local/lib/python3.4/site-packages/numpy/core/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/core/_dotblas.so
/usr/local/lib/python3.4/site-packages/numpy/core/_dummy.so
/usr/local/lib/python3.4/site-packages/numpy/core/_internal.py
/usr/local/lib/python3.4/site-packages/numpy/core/_methods.py
/usr/local/lib/python3.4/site-packages/numpy/core/arrayprint.py
/usr/local/lib/python3.4/site-packages/numpy/core/cversions.py
/usr/local/lib/python3.4/site-packages/numpy/core/defchararray.py
/usr/local/lib/python3.4/site-packages/numpy/core/fromnumeric.py
/usr/local/lib/python3.4/site-packages/numpy/core/function_base.py
/usr/local/lib/python3.4/site-packages/numpy/core/generate_numpy_api.py
/usr/local/lib/python3.4/site-packages/numpy/core/getlimits.py
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/__multiarray_api.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/__ufunc_api.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/_neighborhood_iterator_imp.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/_numpyconfig.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/arrayobject.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/arrayscalars.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/halffloat.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/multiarray_api.txt
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/ndarrayobject.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/ndarraytypes.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/noprefix.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_3kcompat.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_common.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_cpu.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_endian.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_interrupt.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_math.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_no_deprecated_api.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/npy_os.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/numpyconfig.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/old_defines.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/oldnumeric.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/ufunc_api.txt
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/ufuncobject.h
/usr/local/lib/python3.4/site-packages/numpy/core/include/numpy/utils.h
/usr/local/lib/python3.4/site-packages/numpy/core/info.py
/usr/local/lib/python3.4/site-packages/numpy/core/lib/libnpymath.a
/usr/local/lib/python3.4/site-packages/numpy/core/lib/npy-pkg-config/mlib.ini
/usr/local/lib/python3.4/site-packages/numpy/core/lib/npy-pkg-config/npymath.ini
/usr/local/lib/python3.4/site-packages/numpy/core/machar.py
/usr/local/lib/python3.4/site-packages/numpy/core/memmap.py
/usr/local/lib/python3.4/site-packages/numpy/core/multiarray.so
/usr/local/lib/python3.4/site-packages/numpy/core/multiarray_tests.so
/usr/local/lib/python3.4/site-packages/numpy/core/numeric.py
/usr/local/lib/python3.4/site-packages/numpy/core/numerictypes.py
/usr/local/lib/python3.4/site-packages/numpy/core/operand_flag_tests.so
/usr/local/lib/python3.4/site-packages/numpy/core/records.py
/usr/local/lib/python3.4/site-packages/numpy/core/scalarmath.so
/usr/local/lib/python3.4/site-packages/numpy/core/setup.py
/usr/local/lib/python3.4/site-packages/numpy/core/setup_common.py
/usr/local/lib/python3.4/site-packages/numpy/core/shape_base.py
/usr/local/lib/python3.4/site-packages/numpy/core/struct_ufunc_test.so
/usr/local/lib/python3.4/site-packages/numpy/core/test_rational.so
/usr/local/lib/python3.4/site-packages/numpy/core/tests/data/astype_copy.pkl
/usr/local/lib/python3.4/site-packages/numpy/core/tests/data/recarray_from_file.fits
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_abc.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_api.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_arrayprint.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_blasdot.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_datetime.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_defchararray.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_deprecations.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_dtype.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_einsum.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_errstate.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_function_base.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_getlimits.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_half.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_indexerrors.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_indexing.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_item_selection.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_machar.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_memmap.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_multiarray.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_multiarray_assignment.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_nditer.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_numeric.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_numerictypes.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_print.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_records.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_scalarinherit.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_scalarmath.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_scalarprint.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_shape_base.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_ufunc.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_umath.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_umath_complex.py
/usr/local/lib/python3.4/site-packages/numpy/core/tests/test_unicode.py
/usr/local/lib/python3.4/site-packages/numpy/core/umath.so
/usr/local/lib/python3.4/site-packages/numpy/core/umath_tests.so
/usr/local/lib/python3.4/site-packages/numpy/ctypeslib.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/__config__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/__version__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/ccompiler.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/autodist.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/bdist_rpm.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/build.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/build_clib.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/build_ext.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/build_py.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/build_scripts.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/build_src.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/config.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/config_compiler.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/develop.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/egg_info.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/install.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/install_clib.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/install_data.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/install_headers.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/command/sdist.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/compat.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/conv_template.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/core.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/cpuinfo.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/environment.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/exec_command.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/extension.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/absoft.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/compaq.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/g95.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/gnu.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/hpux.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/ibm.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/intel.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/lahey.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/mips.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/nag.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/none.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/pathf95.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/pg.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/sun.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/fcompiler/vast.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/from_template.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/info.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/intelccompiler.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/lib2def.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/line_endings.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/log.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/mingw/gfortran_vs2003_hack.c
/usr/local/lib/python3.4/site-packages/numpy/distutils/mingw32ccompiler.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/misc_util.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/npy_pkg_config.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/numpy_distribution.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/pathccompiler.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/system_info.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_ext/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_ext/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_ext/src/fib1.f
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_ext/src/fib2.pyf
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_ext/tests/test_fib2.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_f90_ext/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_f90_ext/include/body.f90
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_f90_ext/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/gen_ext/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/gen_ext/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/gen_ext/tests/test_fib3.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/pyrex_ext/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/pyrex_ext/primes.pyx
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/pyrex_ext/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/pyrex_ext/tests/test_primes.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/setup.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/src/example.c
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/src/example.i
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/src/zoo.cc
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/src/zoo.h
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/src/zoo.i
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/tests/test_example.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/swig_ext/tests/test_example2.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/test_exec_command.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/test_fcompiler_gnu.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/test_fcompiler_intel.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/test_misc_util.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/tests/test_npy_pkg_config.py
/usr/local/lib/python3.4/site-packages/numpy/distutils/unixccompiler.py
/usr/local/lib/python3.4/site-packages/numpy/doc/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/doc/basics.py
/usr/local/lib/python3.4/site-packages/numpy/doc/broadcasting.py
/usr/local/lib/python3.4/site-packages/numpy/doc/byteswapping.py
/usr/local/lib/python3.4/site-packages/numpy/doc/constants.py
/usr/local/lib/python3.4/site-packages/numpy/doc/creation.py
/usr/local/lib/python3.4/site-packages/numpy/doc/glossary.py
/usr/local/lib/python3.4/site-packages/numpy/doc/howtofind.py
/usr/local/lib/python3.4/site-packages/numpy/doc/indexing.py
/usr/local/lib/python3.4/site-packages/numpy/doc/internals.py
/usr/local/lib/python3.4/site-packages/numpy/doc/io.py
/usr/local/lib/python3.4/site-packages/numpy/doc/jargon.py
/usr/local/lib/python3.4/site-packages/numpy/doc/methods_vs_functions.py
/usr/local/lib/python3.4/site-packages/numpy/doc/misc.py
/usr/local/lib/python3.4/site-packages/numpy/doc/performance.py
/usr/local/lib/python3.4/site-packages/numpy/doc/structured_arrays.py
/usr/local/lib/python3.4/site-packages/numpy/doc/subclassing.py
/usr/local/lib/python3.4/site-packages/numpy/doc/ufuncs.py
/usr/local/lib/python3.4/site-packages/numpy/dual.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/__version__.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/auxfuncs.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/capi_maps.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/cb_rules.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/cfuncs.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/common_rules.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/crackfortran.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/diagnose.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/f2py2e.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/f2py_testing.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/f90mod_rules.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/func2subr.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/info.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/rules.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/setup.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/src/fortranobject.c
/usr/local/lib/python3.4/site-packages/numpy/f2py/src/fortranobject.h
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/assumed_shape/foo_free.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/assumed_shape/foo_mod.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/assumed_shape/foo_use.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/assumed_shape/precision.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/kind/foo.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/mixed/foo.f
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/mixed/foo_fixed.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/mixed/foo_free.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/regression/inout.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/src/size/foo.f90
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_array_from_pyobj.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_assumed_shape.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_callback.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_kind.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_mixed.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_return_character.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_return_complex.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_return_integer.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_return_logical.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_return_real.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/test_size.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/tests/util.py
/usr/local/lib/python3.4/site-packages/numpy/f2py/use_rules.py
/usr/local/lib/python3.4/site-packages/numpy/fft/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/fft/fftpack.py
/usr/local/lib/python3.4/site-packages/numpy/fft/fftpack_lite.so
/usr/local/lib/python3.4/site-packages/numpy/fft/helper.py
/usr/local/lib/python3.4/site-packages/numpy/fft/info.py
/usr/local/lib/python3.4/site-packages/numpy/fft/setup.py
/usr/local/lib/python3.4/site-packages/numpy/fft/tests/test_fftpack.py
/usr/local/lib/python3.4/site-packages/numpy/fft/tests/test_helper.py
/usr/local/lib/python3.4/site-packages/numpy/lib/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/lib/_compiled_base.so
/usr/local/lib/python3.4/site-packages/numpy/lib/_datasource.py
/usr/local/lib/python3.4/site-packages/numpy/lib/_iotools.py
/usr/local/lib/python3.4/site-packages/numpy/lib/_version.py
/usr/local/lib/python3.4/site-packages/numpy/lib/arraypad.py
/usr/local/lib/python3.4/site-packages/numpy/lib/arraysetops.py
/usr/local/lib/python3.4/site-packages/numpy/lib/arrayterator.py
/usr/local/lib/python3.4/site-packages/numpy/lib/financial.py
/usr/local/lib/python3.4/site-packages/numpy/lib/format.py
/usr/local/lib/python3.4/site-packages/numpy/lib/function_base.py
/usr/local/lib/python3.4/site-packages/numpy/lib/index_tricks.py
/usr/local/lib/python3.4/site-packages/numpy/lib/info.py
/usr/local/lib/python3.4/site-packages/numpy/lib/nanfunctions.py
/usr/local/lib/python3.4/site-packages/numpy/lib/npyio.py
/usr/local/lib/python3.4/site-packages/numpy/lib/polynomial.py
/usr/local/lib/python3.4/site-packages/numpy/lib/recfunctions.py
/usr/local/lib/python3.4/site-packages/numpy/lib/scimath.py
/usr/local/lib/python3.4/site-packages/numpy/lib/setup.py
/usr/local/lib/python3.4/site-packages/numpy/lib/shape_base.py
/usr/local/lib/python3.4/site-packages/numpy/lib/stride_tricks.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/data/python3.npy
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/data/win64python2.npy
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test__datasource.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test__iotools.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test__version.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_arraypad.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_arraysetops.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_arrayterator.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_financial.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_format.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_function_base.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_index_tricks.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_io.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_nanfunctions.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_polynomial.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_recfunctions.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_shape_base.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_stride_tricks.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_twodim_base.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_type_check.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_ufunclike.py
/usr/local/lib/python3.4/site-packages/numpy/lib/tests/test_utils.py
/usr/local/lib/python3.4/site-packages/numpy/lib/twodim_base.py
/usr/local/lib/python3.4/site-packages/numpy/lib/type_check.py
/usr/local/lib/python3.4/site-packages/numpy/lib/ufunclike.py
/usr/local/lib/python3.4/site-packages/numpy/lib/user_array.py
/usr/local/lib/python3.4/site-packages/numpy/lib/utils.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/_umath_linalg.so
/usr/local/lib/python3.4/site-packages/numpy/linalg/info.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/lapack_lite.so
/usr/local/lib/python3.4/site-packages/numpy/linalg/linalg.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/setup.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/tests/test_build.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/tests/test_deprecations.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/tests/test_linalg.py
/usr/local/lib/python3.4/site-packages/numpy/linalg/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/ma/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/ma/bench.py
/usr/local/lib/python3.4/site-packages/numpy/ma/core.py
/usr/local/lib/python3.4/site-packages/numpy/ma/extras.py
/usr/local/lib/python3.4/site-packages/numpy/ma/mrecords.py
/usr/local/lib/python3.4/site-packages/numpy/ma/setup.py
/usr/local/lib/python3.4/site-packages/numpy/ma/tests/test_core.py
/usr/local/lib/python3.4/site-packages/numpy/ma/tests/test_extras.py
/usr/local/lib/python3.4/site-packages/numpy/ma/tests/test_mrecords.py
/usr/local/lib/python3.4/site-packages/numpy/ma/tests/test_old_ma.py
/usr/local/lib/python3.4/site-packages/numpy/ma/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/ma/tests/test_subclassing.py
/usr/local/lib/python3.4/site-packages/numpy/ma/testutils.py
/usr/local/lib/python3.4/site-packages/numpy/ma/timer_comparison.py
/usr/local/lib/python3.4/site-packages/numpy/ma/version.py
/usr/local/lib/python3.4/site-packages/numpy/matlib.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/defmatrix.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/setup.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/tests/test_defmatrix.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/tests/test_multiarray.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/tests/test_numeric.py
/usr/local/lib/python3.4/site-packages/numpy/matrixlib/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/_polybase.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/chebyshev.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/hermite.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/hermite_e.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/laguerre.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/legendre.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/polynomial.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/polytemplate.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/polyutils.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/setup.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_chebyshev.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_classes.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_hermite.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_hermite_e.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_laguerre.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_legendre.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_polynomial.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_polyutils.py
/usr/local/lib/python3.4/site-packages/numpy/polynomial/tests/test_printing.py
/usr/local/lib/python3.4/site-packages/numpy/random/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/random/info.py
/usr/local/lib/python3.4/site-packages/numpy/random/mtrand.so
/usr/local/lib/python3.4/site-packages/numpy/random/randomkit.h
/usr/local/lib/python3.4/site-packages/numpy/random/setup.py
/usr/local/lib/python3.4/site-packages/numpy/random/tests/test_random.py
/usr/local/lib/python3.4/site-packages/numpy/random/tests/test_regression.py
/usr/local/lib/python3.4/site-packages/numpy/setup.py
/usr/local/lib/python3.4/site-packages/numpy/testing/__init__.py
/usr/local/lib/python3.4/site-packages/numpy/testing/decorators.py
/usr/local/lib/python3.4/site-packages/numpy/testing/noseclasses.py
/usr/local/lib/python3.4/site-packages/numpy/testing/nosetester.py
/usr/local/lib/python3.4/site-packages/numpy/testing/print_coercion_tables.py
/usr/local/lib/python3.4/site-packages/numpy/testing/setup.py
/usr/local/lib/python3.4/site-packages/numpy/testing/tests/test_decorators.py
/usr/local/lib/python3.4/site-packages/numpy/testing/tests/test_doctesting.py
/usr/local/lib/python3.4/site-packages/numpy/testing/tests/test_utils.py
/usr/local/lib/python3.4/site-packages/numpy/testing/utils.py
/usr/local/lib/python3.4/site-packages/numpy/tests/test_ctypeslib.py
/usr/local/lib/python3.4/site-packages/numpy/tests/test_matlib.py
/usr/local/lib/python3.4/site-packages/numpy/version.py
==> Caveats
Python modules have been installed and Homebrew's site-packages is not
in your Python sys.path, so you will not be able to import the modules
this formula installed. If you plan to develop with these modules,
please run:
  mkdir -p /Users/hiroshi/Library/Python/2.7/lib/python/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hiroshi/Library/Python/2.7/lib/python
/site-packages/homebrew.pth
==> Summary
🍺  /usr/local/Cellar/numpy/1.9.3: 1379 files, 28M, built in 3.7 minutes
==> Installing homebrew/science/opencv3
==> Using Homebrew-provided fortran compiler.
This may be changed by setting the FC environment variable.
==> Downloading https://github.com/Itseez/opencv/archive/3.0.0.tar.gz
==> Downloading from https://codeload.github.com/Itseez/opencv/tar.gz/3.0.0
######################################################################## 100.0%
==> Downloading https://downloads.sourceforge.net/project/opencvlibrary/3rdparty/ippicv/ippicv_macosx_20141027.tgz
==> Downloading from http://netassist.dl.sourceforge.net/project/opencvlibrary/3rdparty/ippicv/ippicv_macosx_20141
######################################################################## 100.0%
==> cmake .. -DCMAKE_C_FLAGS_RELEASE= -DCMAKE_CXX_FLAGS_RELEASE= -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/opencv3/
==> make
==> make install
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

opencv3 and opencv install many of the same files.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/opencv3/lib
    CPPFLAGS: -I/usr/local/opt/opencv3/include

If you need Python to find bindings for this keg-only formula, run:
  echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth
  mkdir -p /Users/hiroshi/Library/Python/2.7/lib/python/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hiroshi/Library/Python/2.7/lib/python
/site-packages/homebrew.pth
==> Summary
🍺  /usr/local/Cellar/opencv3/3.0.0: 247 files, 104M, built in 17.0 minutes

で、一応処理が終わりました。

実際、無事インストールできているかどうか確認するためにはターミナルからpythonを起動してcv2というモジュールがインストールできるかどうか確認すればいいようです。

しかし

hiroshi-no-MacBook-Air:~ hiroshi$ python3
Python 3.4.3 (default, Aug 11 2015, 08:57:25) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named 'cv2'

とErrorがでてしまう。

ここから試行錯誤が始まりますが、長くなったので続きは次回で。

(結論から言えば PATHと通すだけで改善したんですけどね。。。)