Python まとめノート
目次
各種ドキュメント
ライブラリ管理
pip
- requirements.txt で管理
- pipwin:Windows 向けバイナリ
Anaconda/Miniconda/Miniforge
- environment.yml で管理
ドキュメント作成
- Python コーディング規約:PEP8
-
Type Hints:型ヒント
def method(arg: float) -> float: pass- typing – 型ヒントのサポート
- Pythonではじまる、型のある世界
- Generics:C++ のテンプレートに相当
- docstring:コメントスタイル
- 可読性を上げるための、docstringの書き方
- docstringのstyle3種の例:Type Hints 付きなら reStructuredText で
- チームメイトのためにdocstringを書こう!
オブジェクト指向プログラミング
- ダックタイピング入門
- 抽象基底クラス
-
from abc import ABC, abstructmethod # 抽象基底クラス class BaseClass(ABC): def __init__(self): pass @abstructmethod def method(self): pass class ChildClass(BaseClass): def __init__(self): super().__init__() def method(self): printf("Hello World!") class Composit: def __init__(self): self.instance = ChildClass() # ダックタイピング self.instance.method -
class TestClass: # クラス変数のみ使う処理 @classmethod def class_method(cls): pass # メンバ・クラス変数に依存しない処理 @staticmethod def static_method(): pass - アクセス制限
class TestClass: def __init__(self): self._hoge = 3. @property def hoge(self) -> float: return self._hoge @hoge.setter def hoge(self, hoge: float) -> None: self._hoge = hoge
データ処理
-
import pandas as pd import numpy as np import dask as dd # CSV で読み書き df.to_csv('test.csv', index=None) dd.read_csv('test.csv').compute() # pd.DataFrame をヘッダ付きで読み書き df.to_pickle('test.pkl') pd.read_pickle('test.pkl') # 多次元 np.ndarray の読み書き np.savez('np_savez', x=a1, y=a2) npz = np.load('np_savez.npz') npz['x'] -
import numpy as np # 一番よく見かける方法 list(map(lambda_func, like_var)) # リスト内包表記 [lambda_func(x) for x in list_var] # ufunc 化(一番高速らしい) np.frompyfunc(lambda_func, 1, 1)(list_var) # 次点? np.vectorize(lambda_func)(list_var) # iteratable オブジェクトを利用 np.fromiter((lambda_func(x) for x in l), np.float32, count=len(l)) # pd.Series に適用 series.map(lambda_func) -
# 最後から5個目から最後までの要素 a[-5:-1] # 3列目 a[:, 3] - pandas (Dataframe)
- numpy (ndarray)
- pyplot
- インスタンス化しない
import matplotlib.pyplot as plt import numpy as np # array-like (or scalar) object x: np.ndarray = ... y: np.ndarray = ... # プロットする内容 plt.plot(x, y, label="test") # タイトル plt.title("This is a title for this figure") # 軸にラベル付け plt.xlabel("This is a label for this x axis") plt.ylabel("This is a label for this y axis") # 凡例を表示 plt.legend() # プロットを表示 plt.show()
機械学習
- 「Kaggleで勝つ」のサンプルコード
- ch03: 前処理
- ch04: モデル
- ch05: バリデーション
- ch06: ハイパーパラメータの調整
- sklearn.liner_model
- statsmodels