3.1. Pythonのライブラリ・パッケージ#
ここではテーブルデータを扱う上でよく使うライブラリやパッケージを紹介します。
Note
Pythonで組込関数以外のライブラリやパッケージを使用する場合には、必ず使う前にimport
する必要があります。
例えば、
math
というライブラリを使う場合は、import math
を実行してからではないと使うことができません。import
はNotebookごとに行ってください。ライブラリごとにどのようにimportすべきか慣例があり、そのような慣例に従うことが通例となっています。
例えば、後述する
pandas
はpd
として読み込むことが慣例となっています。具体的には、import pandas as pd
とします。
ここではデータ分析でよく用いる代表的なライブラリであるNumPy, pandas (次ページ), matplotlib(次々ページ)を取り上げます。
3.1.1. NumPy#
NumpyはNumerical Pythonの略称。行列計算など数値計算で最も基本となるパッケージのひとつです。ここではテーブルデータの探索的分析の基礎部分に必要な箇所に絞って紹介します。
import numpy as np # NumPyは`np`としてimportすることが慣例となっています。
data = np.array([1, 2, 3, 4])
print(data)
[1 2 3 4]
リスト型のように見えますが、type()関数で確認するとndarray型であることが確認できます。
print(type(data) == list)
print(type(data))
print(type([1,2,3,4]) == list)
print(type([1,2,3,4]))
False
<class 'numpy.ndarray'>
True
<class 'list'>
もちろん、リスト型へ相互変換もできます。
list(data)
[1, 2, 3, 4]
NumPyは多次元配列を扱う上で便利です。
data = np.array([[0.1, 0.98, 0.28],
[0.548, 0.47, 0.65]])
data
array([[0.1 , 0.98 , 0.28 ],
[0.548, 0.47 , 0.65 ]])
欠損値はnp.nan
で扱われることが多いです。
NaN
はNot a Number
(非数)を意味します。
data1 = np.array([[0.1, np.nan, 0.28],
[0.548, 0.47, 0.65]])
print(data1)
[[0.1 nan 0.28 ]
[0.548 0.47 0.65 ]]
欠損値の確認はnp.isnan
を使えます。
np.isnan(data1)
array([[False, True, False],
[False, False, False]])
モジュールmath
を使っても確認できます。
import math
math.isnan(data1[0,1])
True
Warning
NaNは自分との比較はFalseになります(Not a Number(非数)のため)。
詳しくはこちらのNumPyのドキュメントをご覧ください。
例えば、==
でNaNを確認しようとすると、想定と異なる結果が得られます(次のセル参照)。
data1[0,1] == np.nan
False
3.1.1.1. NumPy ndarrayの加減乗除#
data = np.array([[0.1, 0.98, 0.28],
[0.548, 0.47, 0.65]])
data*10
array([[1. , 9.8 , 2.8 ],
[5.48, 4.7 , 6.5 ]])
data+data
array([[0.2 , 1.96 , 0.56 ],
[1.096, 0.94 , 1.3 ]])
3.1.1.2. Reshape#
data.reshape(6)
array([0.1 , 0.98 , 0.28 , 0.548, 0.47 , 0.65 ])
data
array([[0.1 , 0.98 , 0.28 ],
[0.548, 0.47 , 0.65 ]])
3.1.1.3. Slice#
Day1で紹介したスライス、スライスの開始位置から終了位置のほか、何個おきに抽出するかも指定できます。[start:stop:step]
次のセルの例の場合最初から最後までの値を2つおきに抽出しています。
data.reshape(6)[::2]
array([0.1 , 0.28, 0.47])
次のセルの例の場合2番目から4番目の要素まで2つおきに抽出します。
data.reshape(6)[2:5:2]
array([0.28, 0.47])
2次元のスライスも基本的には一次元の場合と同様に行えます。
data[1:,1:]
array([[0.47, 0.65]])
3.1.1.4. 転置行列#
data.T
array([[0.1 , 0.548],
[0.98 , 0.47 ],
[0.28 , 0.65 ]])
3.1.1.5. 内積 \(X^TX\) の計算#
np.dot(data.T, data)
array([[0.310304, 0.35556 , 0.3842 ],
[0.35556 , 1.1813 , 0.5799 ],
[0.3842 , 0.5799 , 0.5009 ]])
3.1.1.6. 次元数の確認#
data.shape
(2, 3)
3.1.1.7. 要素が1や0の配列を生成#
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
np.ones((2,3))
array([[1., 1., 1.],
[1., 1., 1.]])