python3のメモ
Table of Contents
#パッケージマネジャー
sudo python3 -m pip install -U pip
#文法 ##配列 一番後ろを指定
array[-1]
後ろから二番目を指定
array[-2]
便利な関数
標準ライブラリ
組み込み型
組み込み関数
https://docs.python.jp/3/library/functions.html インタプリタに組み込まれている関数
zip
https://docs.python.jp/3/library/functions.html?highlight=zip#zip それぞれのイテラブルから要素を集めたイテレータを作成する。
x = [1, 2, 3]
y = [4, 5, 6]
zipped = [[x, y] for x, y in zip(x, y)]
zipped #[[1, 4], [2, 5], [3, 6]]
zipped = {y:x for x, y in zip(x, y)}
zipped #{4: 1, 5: 2, 6: 3}
enumerate
https://docs.python.jp/3/library/functions.html?highlight=enumerate#enumerate インデックスと値を返す。
x = [1, 2, 3]
y = [(v, idx) for (idx, v) in enumerate(x)]
y #[(1, 0), (2, 1), (3, 2)]
map
https://docs.python.org/ja/3.6/library/functions.html#map 第一引数で指定した関数で第二引数で渡したiterableオブジェクトを処理します。
def main():
lst = [-1, 3, -5, 7, -9]
# 関数
print(list(map(abs, lst)))
# ラムダ式
print(list(map(lambda x: x * 2, lst)))
# 関数形式の標準演算子
# operator.negは引数を負にした数値を返す
import operator
print(list(map(operator.neg, lst)))
if __name__ == '__main__':
main()
filter
https://docs.python.jp/3/library/functions.html?highlight=filter#filter 第一引数で指定した関数が返したブーリアンがTrueとなるような第二引数の要素を返す。
def main():
lst = [-1, 3, -5, 7, -9]
# 関数
# ラムダ式
print( list( filter(lambda x: x >= 0, lst) ))
# 関数形式の標準演算子
if __name__ == '__main__':
main()
###関数型プログラミング用モジュール
itertoolsモジュール
itertools.accumulate
https://docs.python.jp/3/library/itertools.html?highlight=product#itertools.accumulate 第一引数の要素を一つにまとめた値を第二引数で与えた関数で計算する。第二引数を省略した場合は和を計算。
import itertools
for item in itertools.accumulate([1,2,3,4]):
print(item)
def multiply(a,b):
return a*b
for item in itertools.accumulate([1,2,3,4], mutiply):
print(item)
itertools.chain
https://docs.python.jp/3/library/itertools.html?highlight=product#itertools.chain 引数全体が一つのイテラブルであるかのように振る舞う。
import itertools
for item in itertools.chain([1,2], [3,4]):
print(item)
functoolsモジュール
https://docs.python.jp/3/library/functools.html
モジュールは高階関数、つまり関数に影響を及ぼしたり他の関数を返したりする関数のためのものです。一般に、どんな呼び出し可能オブジェクトでもこのモジュールの目的には関数として扱えます。
functools.reduce
https://docs.python.jp/3/library/functools.html?highlight=reduce#functools.reduce 第一引数の関数をイテラブルの要素に対してに累積的に適用し、単一の値に縮約。畳み込み関数とか呼ばれる。
from functools import reduce
# 関数
print(reduce(add, [-1, 3, -5, 7, -9]))
# ラムダ
print(reduce(lambda x, y: x+y, [-1, 3, -5, 7, -9]))
operatorモジュール
https://docs.python.jp/3/library/operator.html 簡単なラムダ式を書くくらいならこっちを使おう。
#仮想環境 仮想環境の作成
mkdir tmpdir
python3 -m venv tmpdir
仮想環境に入る
. tmpdir/bin/activate
仮想環境から出る
deactivate
sudo dnf install mecab mecab-devel mecab-ipadic
# Fedora25
sudo dnf install redhat-rpm-config
pip3 install mecab-python3
#進捗を視覚化する
from tqdm import tqdm
for i in tqdm(range(10000)):
...
#データ分析・機会学習・ディープラーニング
いろいろダウンロード
sudo pip3 install pystan numpy scipy matplotlib ipython jupyter scikit-learn pandas pillow beautiful-soup html5lib seaborn
jupyter
拡張機能の追加
pip3 install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
mkdir -p $(jupyter --data-dir)/nbextensions
vimバインディング
cd $(jupyter --data-dir)/nbextensions
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
jupyter nbextension enable vim_binding/vim_binding
vimバインディングにしたときにJupyterモードに入るときのショートカットキーがShift + Escに設定されています。私のPCだとこのShift + Escが入力できなかった(Caps LockをEscにしているが、どうしてもShift + Caps Lockがデフォルトの挙動になってしまう)ので、バインディングをCtrl + Escに変更した。
vim ~/.local/share/jupyter/nbextensions/vim_binding/vim_binding.js
で72行目を変更
...
//'Shift-Esc': CodeMirror.prototype.leaveNormalMode,
'Ctrl-Esc': CodeMirror.prototype.leaveNormalMode,
...
#デバッグ
import pdb; pdb.set_trace()
デバッガコマンドについては以下参照 https://docs.python.jp/3/library/pdb.html