パステル色な日々

気ままに綴るブログ

Pythonでデータ分析する準備をし〼。(Numpy激闘編)

データ分析前の準備体操。

Pythonを使うデータ分析

普段データ分析といってもいきなりPythonを使うことはしません
大抵はSQLにより取得できるデータをスプレッドシートへ吐き出し、datastudioを使って可視化することで顧客には十分な価値が提供できます
しかし、精度の向上や独自の仮説構築から検証に至るような過程でPythonを使ったデータ分析が必要になってきます
ちょうど僕も必要になるフェーズになったので今回はまずPython入門としてNumpyの学習に努めて見ます

NumPy入門

  • ベクトル生成
  • 行列生成
  • ベクトルから行列の生成
  • 行列のサイズ評価
  • 行列の演算
  • 配列の操作
    • スライシング
    • インデクシング
    • ブロードキャスティング

行列の転置を忘れていたので思い出す。行列の掛け算もわかりませんでした
学生時代に習ったことを忘れていたのがかなりショック...
面白かったのはNumpyをつかって生成した行列を掛ける際に dot という関数を使うのですが、これを使わずに掛け算を試みると対応したi行j列をかけ合わせたものになります。
おそらくこれは行列に行列を掛けるブロードキャスティングではないでしょうか

>>> a
array([[1, 2],
       [3, 4]])
>>> b
array([[5, 6],
       [7, 8]])
>>> a*b
array([[ 5, 12],
       [21, 32]])

スライシングをした際にインデックスが2以上2未満の指定で呼び出してみるとからの配列が返ってくるような感じです

>>> a
array([[1, 2],
       [3, 4]])
>>> a[0:2]
array([[1, 2],
       [3, 4]])
>>> a[2:2]
array([], shape=(0, 2), dtype=int64)

ところが存在しない行を取り出そうとすると、エラー扱いとなります

>>> a
array([[1, 2],
       [3, 4]])
>>> a[1,:]
array([3, 4])
>>> a[2,:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: index 2 is out of bounds for axis 0 with size 2

特に行列の結合結果が面白いですね。 c__r を使った結合結果がひと目では理解できませんでした。

>>> np.r_[np.arange(3),np.arange(3)]
array([0, 1, 2, 0, 1, 2])
>>> np.c_[np.arange(3),np.arange(3)]
array([[0, 0],
       [1, 1],
       [2, 2]])

r_ は行列を縦に結合するものであるはずにも関わらず。横に結合されたように見えます。
縦に結合されると6行1列の配列を期待します。
array([[0], [1], [2], [0], [1], [2]]) これの結果の簡略と考えられそうです。
であるのであれば1次元配列からその配列が3行1列なのか1行3列であるのか見分けがつきそうにないですね。

まずは、Numpyによる行列演算について見ていきました。
疑問については仲間に助けてもらいながら教えてもらいます。次回はSciPy。