それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

「Pythonによるデータ分析入門」勉強その1

はじめに

データサイエンスを勉強するにあたり、練習データなどを触り始めたのですが、numpyやpandasの基礎知識がすっぽり抜けていることが判明しました。
余りにも作業効率が低く、やってられなくなったため、改めてこの本で勉強することにしました。
DataCampのデータサイエンティストコースを一通り受講しているので、サクサク進められる…はず?

2章は実践的内容、3章はIPythonについての内容だったので後回しにして、4章から進めていきます。
基本的にはテキストの写経を行っていき、分かりにくい部分は自分で書き換えたり調べたりして理解を深めています。
記事内では個人的に「ほえ~」となった部分をまとめています。つよつよデータサイエンティスト御大の方々には退屈な内容になっておりますのでご注意ください。

4.1.1 ndarrayの生成

PandasはDatacampで散々触ったのでなんとなく理解できているけど、Numpyは産毛を撫でた程度しか触れてませんでした(Numpyをナンピーと呼んじゃうくらい苦手)。若干の苦手意識があるので少しずつ進めていきました。
ndarrayの生成方法はnp.arrayのほかにnp.ones, np.zeros, np.emptyなどがあります。np.emptyは中身を初期化しないので処理が高速に行える。要素を埋める用の配列を作るときに便利なようです。

%timeit arr = np.empty((1000, 1000))
%timeit arr = np.ones((1000, 1000))
%timeit arr = np.zeros((1000, 1000))

#119 µs ± 410 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
#3.14 ms ± 15 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
#120 µs ± 1.25 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

np.zerosもなかなか早かったですね。

4.1.3 ndarrayとスカラーの計算

ndarrayはベクトル演算が可能。ここがリスト等のイテレータとは大きく異なる点のようです。

list1 = [1,2,3]
list1+1
#TypeError

arr = np.array(list1)
arr+1
#array([2, 3, 4])
arr*arr
#array([1, 4, 9])

普段リストで計算を行う場合もNumpyを使えば高速化できる場面がありそうですね。競プロとか。
ここら辺からNumpyへの苦手意識が薄れてきました。

4.1.7 転置行列、行と列の入れ替え

行列の内積を求めるときに便利。

arr = np.random.randn(6, 3)
np.dot(arr.T, arr)
#array([[ 5.73284274, -1.10136584, -0.2144797 ],
       [-1.10136584,  7.50983125,  1.50663676],
       [-0.2144797 ,  1.50663676,  2.73032306]])
#3*3の行列になる

4.3 ndarrayを用いたデータ処理

ベクトル演算の具体例について。関数sqrt(x^2+y^2)の評価にnp.meshgridを用いています。

import matplotlib.pyplot as plt

points = np.arange(-5, 5, 0.01)
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs**2+ys**2)
plt.imshow(z, cmap = plt.cm.gray)
plt.colorbar()
plt.show()

f:id:ko_ya346:20191016225733p:plain
np.arangeの第三引数を変えるとグリッドの粗さが変わります。np.sqrtの中身も色々変えてみると楽しいですね。


ここまでの内容で2ポモドーロ(約50分)でした。そんなに難しい内容ではなくサクサク進められました。
この調子で続けていきたいです。