Shallow Learning

勉強の備忘録メイン

ヤシャスィーン

データ読み込みでハマった話

痛めていた腰が治ったので,2週間ぶりにスクワットやってきました. ケガ明けで輪をかけてショボい重量ですが,それでも楽しいからスクワットはすごい. みなさんもスクワットしましょう.

概要

Double Pipe(||)区切りファイルに出会い,読み込みでハマったのでメモ.

問題

pd.read_tableでDouble Pipe(||)区切りファイルを読み込もうとしたら怒られた.

X = pd.read_table('hogehoge.txt',
                  sep='||',
                  encoding='utf-8')
実行結果
__main__:3: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
Traceback (most recent call last):...

2文字以上の文字列(空白文字除く)はサポートされていないらしい. アドバイス通りにengine=‘python'としてもうまくいかなかったので,別の方法で実装することに.
一行目(フィールド名)だけカンマ区切りとかいうファイルな上,そう何度も使わないので関数は実装せず. おまけに改行コードも削除.

output = []
f = open('hogehoge.txt', encoding='utf-8')
i = 0
line = [f.readline().replace('\n','').split(',')]
output = line
while line:
    i += 1
    line = f.readline()
    tmp = line.replace('\n','').split('||')
    output.append(tmp)
f.close

hogehoge = pd.DataFrame(output[1:-1])
hogehoge.columns = [output[0]]

ちなみにpandasに文字数の制限はなく,メモリ上限値に依存するらしい. Spyderのプレビューで見ると途中で文字切れしているように見えるが,実際には切れていない.

Bash on Ubuntu on Windows >> (中略) >> TensorFlow導入してみた(断念?)

はじめに

最近ちょこちょこpythonを触っているが,TensorFlowを触ってみたくなり,仮想環境を構築する必要が生じた*1ことと,漠然とシェルを触ってみたかったのとが重なったのでどっちもやってみることにした(死亡フラグ). デュアルブートは以前試して痛い目を見て帰ってきたので,まずは手軽に?"Bash on Ubuntu on Windows (BoW)“をインストールし,そこにAnacondaをインストール,仮想環境を構築してTensorFlowを導入するのがよかろうと判断.GUIもいけるだろうとぼんやり考えて試してみる.

流れ

BoW >> Anaconda >> 仮想環境構築 >> Python3.5.x >> TensorFlow

Bash on Ubuntu on Windows (BoW) のインストール

とりあえずこちらを参考に.

ottan.xyz

qiita.com

正直言ってわからないことだらけなので,ひとまず形だけ整えてあとはゆくゆく勉強することにする.

BoWにAnacondaをインストール

無事(?)BoWをインストールしたところで,最新版のAnacondaのインストールに移る.

qiita.com

こちらは簡単で,Windows環境にインストールしたときと同じように,インストーラーをダウンロードしてきて,シェルから実行するだけ. ただし,Windowsのパスにある.shファイルを実行するため,以下のように入力した(リンクほぼそのまま).

$ bash /mnt/c/Users/xxxxx/Downloads/Anaconda3-4.4.0-Linux-x86_64.sh

Windowsのフォルダは/mntにマウントされているらしい. つまり,Windowsで作成したりダウンロードしたりしたファイルも/mnt/以下にWindowsのパスを書いてしまえば参照できる…ということ?

eng-entrance.com

Anaconda3のインストール先は以下のディレクトリがデフォルトで指定される模様.

/home/xxxxx/anaconda3

condaコマンドで仮想環境を構築

condaコマンドでちゃちゃっと仮想環境を構築……と思っていたら

$ conda create --name=myenv python=3.5 numpy ...
いきなり問題発生
xxxx@DESKTOP-SUAHTDO:~$ conda
conda: コマンドが見つかりません

えぇ……?

違う環境ではあるが,似たような境遇の記事を発見した.

ts-engine.net

どうやらcondaを実行するためのパスが通っていないらしいので,試してみたところ,無事にcondaコマンドを発見してくれた模様.

$ export PATH="/home/xxxx/anaconda3/bin:$PATH"$
$ conda --create --name=myenv python=3.5 numpy ...

環境ができてしまえばあとはWindowsで仮想環境を立ち上げるのとほとんど同じ.

$ source activate py35env

# ちなみに仮想環境から抜け出すコマンドは次の通り
$ source deactivate

TensorFlowのインストール

ようやっとここまで来ました. 仮想環境下に入ったので,ここにpipでTensorFlowをインストールします.ついでにお手軽と噂のkerasも.

$ pip install --upgrade tensorflow
$ pip install --upgrade keras

エラー*2が出ていたようだが,下記のプログラムは通ったのでとりあえずOK? 時間があるときにでも調べてみたい*3

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = Session()
print(sess.run(hello))

b'Hello, TensorFlow!'
問題発生……

いざspyderを起動してみると・・・・・・

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

適当に進めたらGUIが利用できるというものでもないらしい… そりゃそうか…

ひとまずWin>>仮想環境>>python3.5>>TensorFlowでやることにしよう…

調べる・勉強すること

さいごに

初心者丸出しのリンク集みたいになってしまった上に終わってない…死ぬか…. Linux使うならシンプルにLinuxマシン用意したほうが余計なこと考えずに済みそう.

ちょっとモデリングしてみたいものがあるので,続きはまたおいおい. たぶんWinでやる.

*1:TensorFlowはpython3.5までしか対応しておらず,最新のanaconda環境(python3.6)ではpython3.5を利用できる仮想環境を構築する必要があるとのこと

*2:FileNotFoundError: [Errno 2] そのようなファイルやディレクトリはありません: ‘/home/xxxx/anaconda3/envs/myenv/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg’

*3:こういうと大体調べず仕舞いだけども……

【Python.math】剰余計算,指数表示の仕様

剰余計算の戻り値の型は入力の型に依存する

Y X return
Y % X int int int
int int int
int float float
float float float

指数表示はfloat

# 指数表示はfloat
1000 == int(1e3)
0.001 == 1e-3

階乗の計算(再帰定義関数,math)

# 再帰定義関数
def fact(n):
    if n == 0: return 1
    else n * fact(n-1)
'''
RuntimeError: maximum recursion depth exceeded
が出てくることがある.
再帰回数は上限値があるので,以下の方法で確認,設定する.
'''
import sys
sys.getrecursionlimit()
sys.setrecursionlimit(10000000)

# math package
import math
n_fact = math.factorial(n)

【Numpy】乱数生成 2017.06.11

正規乱数の生成

randnで生成できるのはN(0,1)なので,N(\mu, \sigma^{2})に対しては数式操作が必要
numpy.random.randn — NumPy v1.12 Manual

np.random.randn(d0,d1, ..., dn) #標準正規乱数の生成.
                                #  次元を増やすことでTensorにも対応.
                                #  dxに生成する乱数の個数を入力
sigma * np.random.randn(1) + mu #N(mu, sigma)に従う正規乱数(スカラー)

【Numpy】iterator: nditer

nditerの使い方

多次元配列でのIteration
numpy.nditer — NumPy v1.12 Manual

it = np.nditer(x, #走査対象の配列
               flags=['multi_index'], #走査方法
                                      #  multi_index: 多次元indexの生成
               op_flags=['readwrite'])#オペランドに対して許可する操作の種類
                                      #  readwrite: 読み込み,書き込みともに許可
                                      #  readonly: 読み込みのみ許可
while not it.finished:
   i = it.multi_index
   print(i)
   it.iternext()
        
#Result
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)

【matplotlib】ベクトルの描画

ベクトルの描画

quiverを使う.gradientの描画などに.
matplotlib.axes.Axes.quiver — Matplotlib 2.0.2.post3141+gb6eb043 documentation

import matplotlib.pylab as plt
plt.quiver(X, #ベクトルの始点 X座標
           Y, #ベクトルの始点 Y座標
           U, #X方向の成分
           V, #Y方向の成分
           angles="xy", #角度の決定方法 
                        #"uv": if U==V then π/4, "xy":from (x,y) to (x+u, y+v)
           color="#666666")
plt.show()

論文[薬剤疫学] Nonsteroidal anti-inflammatory drugs and risk of heart failure in four European countries: nested case-control study (Arfè A et al., BMJ, 2016 Sep)

www.ncbi.nlm.nih.gov

なぜこの論文か

エビデンス創出における観察研究の可能性,運用方法,具体的な分析手法について理解が個人として不十分と感じるため,このあたりの能力開発の一環として.

続きを読む