「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。

MENU

Pythonによるデータ分析(その09/X)

 仕事上、早々に\mathrm{Python}を使えるようにしないといけないため、

を基に学んでいく。

3. NumPyの基礎:配列とベクトル演算

 \mathrm{NumPy}は"\mathrm{Numerical\ Python}"の意味で\mathrm{Python}での数値計算におけるもっとも重要な基本パッケージの1つである。

3.5 ndarrayによる配列指向プログラミング

 \mathrm{ndarray}を用いると、ベクトル演算が利用でき、ループ処理を書く必要が無くなる。

####################################
### ベクトル演算の速さをチェック ###
####################################

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5,5,0.01)

xs, ys = np.meshgrid(points, points)

print(ys)

z = np.sqrt(xs ** 2, ys ** 2)

print(z)

plt.imshow(z, cmap = plt.cm.gray)
plt.colorbar()
plt.title("Image of plot of $\sqrt{x^2 + y^2}$ for a grid of values")
3.5.1 条件制御のndarrayでの表現
################
### 条件制御 ###
################
# numpy.where: x if condition else yに相当

import numpy as np

### ①
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])

# 以下をnumpy.whereで書くことを考える
result1 = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]

print(result1)

result2 = np.where(cond, xarr, yarr)

print(result2)

err = [abs(x - y) for x, y in zip(result1, result2)]
print(err)


### ②

arr = np.random.randn(4, 4)

cond = arr > 0
print(cond)

np.where(arr > 0, 2, -2)

y = np.where(arr > 0, 2, arr)
print(y)
3.5.2 数学関連、統計関連

 \mathrm{NumPy}の数学・統計関数を一部紹介する。

import numpy as np

arr = np.random.randn(5, 4)

print(arr)

# 
mean = arr.mean() # np.mean(arr)という書き方もあり
print(mean)

#
sum_total = arr.sum()
sum_by_row = arr.sum(axis = 0) # 行方向
sum_by_col = arr.sum(axis = 1) # 列方向

print(sum_total)
print(sum_by_row)
print(sum_by_col)

# 
arr = np.array([0,1,2,3,4,5,6,7])
cum_total = arr.cumsum()

print(cum_total)
関数 定義
\mathrm{sum} 配列の和を指定した軸に沿って取る。長さ0の配列には0を返す。
\mathrm{mean} 算術平均。長さ0の配列には\mathrm{NaN}を返す。
\mathrm{std},\mathrm{var} 標準偏差、分散。自由度のデフォルト値はnで任意の値を指定可能。
\mathrm{min},\mathrm{max} 最小値、最大値
\mathrm{argmin},\mathrm{argmax} 最小値・最大値を持つ要素のインデックス
\mathrm{cumsum} 累積和
\mathrm{cumprod} 累積積
3.5.3 真偽値配列関数

 真偽値に関数を適用すると、\mathrm{True}1\mathrm{False}0として扱う。そのため、真偽値配列に\mathrm{sum}を適用すると、その中の\mathrm{True}の数を数える。

bools = np.array([False, False, True, False])

bools.any() # 少なくとも1つTrueがあるか否か
bools.all() # すべての要素がTrueであるか否か
3.5.4 ソート

 \mathrm{ndarray}\mathrm{sort}関数で並び替えることができる。これは元の\mathrm{ndarray}を直接置換する。

###########################
### ndarrayをソートする ###
###########################

import numpy as np
arr = np.random.randn(6)
print('ソート前:')
print(arr)

arr.sort()

print('ソート後:')
print(arr)


# 応用:5パーセント点を計算
large_arr = np.random.randn(1000)

large_arr.sort()

large_arr_lower_5_percent = large_arr[int(0.05 * len(large_arr))]

print(large_arr_lower_5_percent)
3.5.5 集合関数
関数 説明
\mathrm{unique(x)} \mathrm{x}の重複を除外してソートした値
\mathrm{intersect1d(x,y)} 共通部分
\mathrm{union1d(x,y)} 和集合
\mathrm{in1d(x,y)} 配列\mathrm{x}に対して\mathrm{y}の要素が含まれるかを調べる。
\mathrm{setdiff1d(x,y)} \mathrm{x}から\mathrm{y}への差集合
\mathrm{setxor1d(x,y)} 排他的論理和(いずれか一方のみに含まれる元)
################
### 集合関数 ###
################

names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])

names_unique = np.unique(names)
print(names_unique)

np.in1d(names, ['Joe','Jean', 'Paul'])
プライバシーポリシー お問い合わせ