Pythonの基本

スポンサーリンク

ここでは他の言語との違いを理解できるように基本をざっとあげます。

スポンサーリンク

出力(表示

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と表示される

特徴のまとめ

以下のテーブルのヘッダーに、それぞれの詳細説明のページへのリンクがあります。

リスト型タプル型辞書型NumpyPandas
異なるデータ型の要素を格納可能可能可能可能可能
長さ(要素数)可変可変可変可変可変
要素の書き換え可能不可可能可能可能
インデックス(番号)で要素にアクセス可能可能不可可能可能*
二次元配列可能可能可能可能可能
多次元配列可能可能可能不可不可
スライス可能可能可能可能可能
インポート(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 < yxyより小さければ、True
x <= yxyより小さいか等しければ、True
x > yxyより大きければ、True
x >= yxyより大きいか等しければ、True
x == yxyの値が等しければ、True
x != yxyの値が等しくなければ、True
x is yxy同じオブジェクトであれば、True
x is not yxy同じオブジェクトでなければ、True
x in yxyに含まれていれば、True
x not in yxyに含まれていなければ、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“”Nonenumpy.nan
タイプ(type()class <‘int’>class <‘str’>class <‘NoneType’>class <‘float’>
真偽値(bool()FalseFalseFalseTrue

演算

print(0+1)
print(None+1)
print(np.nan+1)
# 1
# TypeError
# nan

まとめ

0Nonenumpy.nan
他の数値との演算OK*TypeErrornumpy.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

まとめ

0Nonenumpy.nan
is NoneFalseTrueFalse
numpy.isnan()FalseFalseTrue
自分との比較TrueTrueFalse
0TrueFalseTrue

データフレームの空

以下のようにデータに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 eeにエラーの内容が代入されます。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
タイトルとURLをコピーしました