3.1. Pythonのライブラリ・パッケージ#

ここではテーブルデータを扱う上でよく使うライブラリやパッケージを紹介します。

Note

Pythonで組込関数以外のライブラリやパッケージを使用する場合には、必ず使う前にimportする必要があります。

  • 例えば、mathというライブラリを使う場合は、import math を実行してからではないと使うことができません。

  • importはNotebookごとに行ってください。

  • ライブラリごとにどのようにimportすべきか慣例があり、そのような慣例に従うことが通例となっています。

    • 例えば、後述するpandaspdとして読み込むことが慣例となっています。具体的には、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で扱われることが多いです。

NaNNot 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(非数)のため)。

例えば、==で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.]])