ここでは他の言語との違いを理解できるように基本をざっとあげます。
出力(表示
print(123) print("aaa") print(123, "aaa", "bbb") # 123 aaa bbbとなる。 print( 123, "aaa", "bbb" ) # 123 aaa bbbとなる。 print("aaa. {} bbb. {}".format("123",456)) # aaa. 123 bbb. 456となる。
基本的には他の言語と同じですね。()で括るのとフォーマットの使い方がポイントです。
ダブルクォーテーション(“”)、シングルクォーテーション(”)のどちらでもいいです。
エスケープ
print("a\"aa") # a"aaと表示される。 print('a\'aa') # a'aaと表示される。
バックスラッシュ(\)を入れるといいよ。¥でもいけるような記事を見かけるがMacはダメなようです。
Macでバックスラッシュ(\)を入力するのは、option+¥です。
コメント行
# コメント """ 複数行の コメント """
文字コード
¥t # Tab ¥n # 改行
他の言語と同じです。
テキストファイル出力時の文字コード
\t # Tab \n # 改行
演算
Pythonの演算は他のシステムとほぼ同じです。べき乗だけ以下に記載しておきます。
べき乗
**
アスタリスクを2つ並べます。
- 2の2乗:
2**2
- 2の3乗:
2**3
変数名
変数名のルールは以下のとおりです。
- 開始文字は、文字または下線。*数字は駄目
- 使用できる文字は、英数字とアンダースコア(_)。*ハイフン(-)は駄目
- 英字は、大文字と小文字を区別。
配列
Pythonでは配列と似たものが多いので、初めは戸惑います。
ちょっとややこしいので、ここでは概要だけ記載します。
しかし、ややこしいが豊富な機能があるというのも、Pythonが優秀だなと思うところでもありますね。
システムトレードでは、リスト型と辞書型、データフレームだけで十分に足ります。ディープラーニングでもほとんど大丈夫です。
サンプルを検索するとNumpyがよく利用されているようですが、今はほとんどがデータフレームで対応しています。下手にNumpyを利用するよりは、システムをよりシンプルにして、不具合を減らす方が賢明かと思います。
# リスト型(list) # [ … ] data = [1, 2, 3, 4, 5] print(data[0]) # 1と表示される # タプル型 # ( … ) data = (1, 2, 3, 4, 5) print(data[0]) # 1と表示される # 辞書型 (連想配列、dict) # { … } data = {"Tokyo":1, "Osaka":2, "Kyoto":3} print(data["Tokyo"]) # 1と表示される # Numpy配列 # np.array([ … ]) import numpy as np # ライブラリをインポートする必要がある data = np.array([1, 2, 3, 4, 5]) print(data[0]) # 1と表示される # Pandas(データフレーム)二次元の表形式データ *よくdfと使う # pd.DataFrame( … ) import pandas as pd # ライブラリをインポートする必要がある df = pd.DataFrame([[1,2,3],[4,5,6]]) # リスト型のデータで作成 print(df.iat[0, 0]) # 1と表示される
特徴のまとめ
以下のテーブルのヘッダーに、それぞれの詳細説明のページへのリンクがあります。
リスト型 | タプル型 | 辞書型 | Numpy | Pandas | |
---|---|---|---|---|---|
異なるデータ型の要素を格納 | 可能 | 可能 | 可能 | 可能 | 可能 |
長さ(要素数) | 可変 | 可変 | 可変 | 可変 | 可変 |
要素の書き換え | 可能 | 不可 | 可能 | 可能 | 可能 |
インデックス(番号)で要素にアクセス | 可能 | 可能 | 不可 | 可能 | 可能* |
二次元配列 | 可能 | 可能 | 可能 | 可能 | 可能 |
多次元配列 | 可能 | 可能 | 可能 | 不可 | 不可 |
スライス | 可能 | 可能 | 可能 | 可能 | 可能 |
インポート(import | 不要 | 不要 | 不要 | 必要 | 必要 |
*特殊なアクセス方法になります。
タプル型を私は使いません。NumpyやDataFrameはディープラーニングでよく使います。
IF文
ここでは基本文のみ記載します。詳細は「IF文」を参照してください。
if aaa == bbb: print(1) elif aaa == ccc: print(2) else: print(3)
else ifではなく、elifです。ifやelif、else文の終わりにはコロン(:)を入れます。
内部の処理はインデントを設けます。このインデントがズレるとエラーになります。インデントは幾つでもいいのですが、一般的にスペース4つとされていますので、それに合わせましょう。
演算子
演算子 | 結果 |
---|---|
x < y | xがyより小さければ、True |
x <= y | xがyより小さいか等しければ、True |
x > y | xがyより大きければ、True |
x >= y | xがyより大きいか等しければ、True |
x == y | xとyの値が等しければ、True |
x != y | xとyの値が等しくなければ、True |
x is y | xとyが同じオブジェクトであれば、True |
x is not y | xとyが同じオブジェクトでなければ、True |
x in y | xがyに含まれていれば、True |
x not in y | xがyに含まれていなければ、True |
<=や>=はイコールが(=)が後にくる。
ノットイコールは<>ではなく!=となる。
isとinの使い方はIF文のページで紹介します。
空の値(0, None, nan
それぞれの値の情報
print(type(0)) print(type("")) print(type(None)) print(type(np.nan)) # <class 'int'> # <class 'str'> # <class 'NoneType'> # <class 'float'> print(bool(0)) print(bool("")) print(bool(None)) print(bool(np.nan)) # False # False # False # True
まとめ
0 | “” | None | numpy.nan | |
タイプ(type() ) | class <‘int’> | class <‘str’> | class <‘NoneType’> | class <‘float’> |
真偽値(bool() ) | False | False | False | True |
演算
print(0+1) print(None+1) print(np.nan+1) # 1 # TypeError # nan
まとめ
0 | None | numpy.nan | |
他の数値との演算 | OK* | TypeError | numpy.nan |
*数値を0で割るとエラーになります。まぁ電卓やエクセルとかでも普通ですけどね。
比較
print(0 is None) print(None is None) print(np.nan is None) # False # True # False print(np.isnan(0)) # print(np.isnan(None)) print(np.isnan(np.nan)) # False # TypeError # True print(0 == 0) print(None == None) print(np.nan == np.nan) # True # True # False print(0 == 0) print(None == 0) print(np.nan == 0) # True # False # False
まとめ
0 | None | numpy.nan | |
is None | False | True | False |
numpy.isnan() | False | False | True |
自分との比較 | True | True | False |
0 | True | False | True |
データフレームの空
以下のようにデータにNoneをセットするとnanになってしまいます。
df = pd.DataFrame([[1,2,3],[None,5,6],[np.nan,8,9]], columns = ["aaa", "bbb", "ccc"]) print(df.iloc[0]['aaa'], df.iloc[1]['aaa'], df.iloc[2]['aaa']) # 1.0 nan nan print(bool(df.iloc[0]['aaa'])) print(bool(df.iloc[1]['aaa'])) print(bool(df.iloc[2]['aaa'])) df.iloc[1]['aaa'] = None print(bool(df.iloc[1]['aaa'])) # True
私は滅多にnumpy.nanは使いませんが、このあたりで、ちょいちょいハマったりします。
システムの終了
import sys
という標準ライブラリを使用します。import sys sys.exit()
エラー処理(エラーハンドリング
例外処理
try
内でエラーが発生するとexcept
が実行されます。
そしてexcept Exception as e
のe
にエラーの内容が代入されます。Exception
クラス以外にも色々ありますが、Exception
クラスはすべての例外が当てはまるのでこれを利用しましょう。
try: aaa = None + 1 except Exception as e: print(e) # unsupported operand type(s) for +: 'NoneType' and 'int'
エラーをスタックトレース
エラーの内容だけでなく、エラーの箇所も示してくれます。
import traceback
という標準ライブラリ使用します。他にもあるそうですが、これで十分かと思います。
import traceback try: aaa = None + 1 except Exception: print(traceback.format_exc()) # Traceback (most recent call last): # File "<ipython-input-83-c6217417cb3c>", line 4, in <module> # aaa = None + 1 # TypeError: unsupported operand type(s) for +: 'NoneType' and 'int