ベクトル

Python でデータ解析を行う際に、ベクトルを NumPy の一次元配列あるいは Pandas の Series で扱うことで、計算などが簡単に行えるようになる。

NumPy 配列

ベクトルの生成

NumPy の配列は、numpy.array メソッドで生成する。NumPy の配列は、ベクトルとして足し算や引き算などを簡単に行えるようになる。

import numpy as np
a = np.array([1, 1, 2, 3, 5, 8, 13])
b = np.array([1, 4, 9, 16, 25, 36, 49])

a + b
## array([ 2,  5, 11, 19, 30, 44, 62])

a[0] + b[2]
## 10

すべてゼロの配列や一定の規則で数値を繰り返す配列は、zerosrepeat などのメソッドを利用して作成する。

import numpy as np
x = np.array([1, 2, 3, 4])

x.repeat(3)
## array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])

x.repeat(x)
## array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])

np.zeros(5)
## array([ 0.,  0.,  0.,  0.,  0.])

np.arange(1,5)
## array([1, 2, 3, 4])

np.arange(1, 10, 3)
## array([1, 4, 7])

np.arange(10, 1, -1)
## array([10,  9,  8,  7,  6,  5,  4,  3,  2])

ベクトルの長さやデータの型などを調べる際に次のようにする。

import numpy as np
a = np.array([1, 1, 2, 3, 5, 8, 13])
a
## array([ 1,  1,  2,  3,  5,  8, 13])

a.size
## 7

a.dtype
## dtype('int64')

ベクトルの連結

2 つの NumPy ベクトルを連結するには append メソッドを利用する。

import numpy as np
a = np.array([1, 1, 2, 3, 5, 8, 13])
b = np.array([1, 4, 9, 16, 25, 36, 49])

c = np.append(a, b)
c
## array([ 1,  1,  2,  3,  5,  8, 13,  1,  4,  9, 16, 25, 36, 49])

2 つのベクトルを縦にまたは横に結合して 2 次元配列に変換するには NumPy の column_stack または row_stack を利用する。

import numpy as np
a = np.array([1, 1, 2, 3, 5, 8, 13])
b = np.array([1, 4, 9, 16, 25, 36, 49])

d = np.column_stack((a, b))
d
## array([[ 1,  1],
##        [ 1,  4],
##        [ 2,  9],
##        [ 3, 16],
##        [ 5, 25],
##        [ 8, 36],
##        [13, 49]])

## d[4,0]
## 5

e = np.row_stack((a, b))
e
## array([[ 1,  1,  2,  3,  5,  8, 13],
##        [ 1,  4,  9, 16, 25, 36, 49]])

e[1, 5]
## 36

ベクトルの計算

NumPy のベクトルには、平均値などの基礎統計量を計算するメソッドが定義されている。

import numpy as np
a = np.array([1, 1, 2, 3, 5, 8, 13])

a.mean()     # np.mean(a)
## 4.7142857142857144

a.var()      # np.var(a)
## 16.77551020408163

a.sum()      # np.sum(a)
## 33

a.min()      # np.min(a)
## 1

a.max()      # np.max(a)
## 13

ベクトル要素のソート

ベクトルを並べかえるには、sortargsort メッソドを利用して並べ替える。sort はベクトル要素を並べ変えるのに対して、argsort はベクトル要素を並べ替えるためのインデックスを求めている。

import numpy as np
y = np.array([1, 43, 23, 32, 55, 11])

y[::-1]
## array([11, 55, 32, 23, 43,  1])

 np.sort(y)
## array([ 1, 11, 23, 32, 43, 55])

np.argsort(y)
## array([0, 1, 2, 3, 4, 5])

y[np.argsort(y)]
## array([ 1, 11, 23, 32, 43, 55])

Pandas Series

ベクトルの生成

ベクトルを、データ解析に特化した Pandas ライブラリーで定義されている Series クラスのオブジェクトとして作成することもできる。

import pandas as pd

a = pd.Series([1, 1, 2, 3, 4])
a
## 0    1
## 1    1
## 2    2
## 3    3
## 4    4
## dtype: int64

ベクトルを生成するときに、index で、ベクトルの各要素に名前をつけることができる。

import pandas as pd

b = pd.Series([23, 11, 14, 24], index = ['gene1', 'gene2', 'gene3', 'gene4'])
b
## gene1    23
## gene2    11
## gene3    14
## gene4    24
## dtype: int64

c = pd.Series([23, 11, 14, 24])
c.index = ['gene1', 'gene2', 'gene3', 'gene4']
c
## gene1    23
## gene2    11
## gene3    14
## gene4    24
## dtype: int64

d = pd.Series({'gene1': 23, 'gene2': 11, 'gene3': 14, 'gene4': 18})
d
## gene1    23
## gene2    11
## gene3    14
## gene4    24
## dtype: int64

ベクトルの各要素を取り出すには、添字と名前の両方を利用することができる。

import pandas as pd

x = pd.Series([23, 11, 14, 24], index = ['gene1', 'gene2', 'gene3', 'gene4'])
x[1]
## 11

x['gene3']
## 14

x[2:3]
## gene1    23
## gene2    11
## dtype: int64

ベクトルの計算

ベクトルの各要素に対して足し算や引き算などを行うことができる。

import pandas as pd

x = pd.Series([23, 11, 14, 24], index = ['gene1', 'gene2', 'gene3', 'gene4'])
x.sum()
## 72

x.mean()
## 18.0

x.var()
## 42.0

基本的な統計量を計算するメソッドも定義されている。

import pandas as pd

x = pd.Series([23, 11, 14, 24], index = ['gene1', 'gene2', 'gene3', 'gene4'])
y = pd.Series([31, 12, 10, 17], index = ['gene1', 'gene2', 'gene3', 'gene4'])

x + y
## gene1    54
## gene2    23
## gene3    24
## gene4    41
## dtype: int64

x * y
## gene1    713
## gene2    132
## gene3    140
## gene4    408
## dtype: int64