Pandas② (データフレーム 列の取得)

データフレーム 列の取得

データフレーム の列を取得する場合は、データフレーム[‘列名’] と指定します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import pandas as pd
df = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['row1', 'row2', 'row3', 'row4', 'row5'] # 行名を設定
)

df['A'] # 列Aを取得

[実行結果]

複数の列 を取得する場合は、データフレーム[ ‘列名’, ‘列名’, ・・・・] というようにブラケットの中身を列名のリストで指定します。

[Google Colaboratory]

1
df[['A', 'C']]          # A列、C列を取得

[実行結果]

指定した 列データ を取得することができました。

Pandas① (データフレーム)

Pandas

Pandas は、NumPy を拡張してさらに直感的な操作でデータを扱えるようにしたライブラリです。

データフレーム

Pandas には表形式でデータを管理できる データフレーム の機能が備わっています。

データフレーム は行列と同じように縦・横にデータが並ぶ構造をしていますが、数値だけではなく文字列などの任意のデータが扱えます。

また、行列のように 数値の並び を表すのではなく、行と列で構成されたデータ構造を表します。

データフレーム作成

データフレームは、DataFrameメソッド で作成します。

列データを辞書で設定し、複数の列で構成されるデータフレームを作成します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
# 3列×5行のデータフレームを作成する

import pandas as pd
df = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['row1', 'row2', 'row3', 'row4', 'row5'] # 行名を設定
)

df

データフレーム のデータは、Pythonの 辞書 を使って設定します。

辞書データはそのまま各列のデータになります。

[実行結果]

データフレーム を、Google Colaboratory で表示すると自動的に表形式で表示されます。

NumPy⑳ (逆行列)

逆行列

逆行列 とは、ある正方行列 A、X の積が単位行列となるときの 正方行列 X のことです

単位行列 とは、行列の対角の要素が全て1、それ以外の成分が0 の行列です)

NumPytransposeメソッド を使うと、逆行列 を求めることができます。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np
a = np.array([[1, 2], # 2×2の行列を作成
[3, 4]]
)
inv = np.linalg.inv(a) # 逆行列を求める
print(inv)

[実行結果]

逆行列 を求めることができました。

元の行列と 逆行列 を掛け合わせると、単位行列 となることを確認します。

1
np.dot(a, inv)

[実行結果]

誤差はあるようですが、ほぼ 単位行列 となっていることが確認できました。

NumPy⑲ (転置行列)

転置行列

行列の行と列を入れ替えたものを 転置行列 と言います。

NumPytransposeメソッド を使うと、転置行列 を求めることができます。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np
a = np.array([[1, 2, 3], # 2×3の行列を作成
[4, 5, 6]]
)

np.transpose(a) # 転置行列を求める

[実行結果]

転置行列 を求めることができました。

NumPy⑱ (行列同士の積)

行列同士の積

NumPydotメソッド を使うと、行列同士の積を算出することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.array([[1, 2], # 2×2の行列を作成
[3, 4]]
)
b = np.array([[5, 6], # 2×2の行列を作成
[7, 8]]
)

np.dot(a, b) # 行列の積を求める

行列同士の積では、左側の行列は行に分け、右側の行列は列に分けて、行と列を組み合わせて掛け算します。

[実行結果]

行列同士の積を算出することができました。

NumPy⑰ (行列のアダマール積)

行列のアダマール積

NumPyでは、ブロードキャスト の要件を満たす場合(次元数が同じ場合)、 行列の要素同士の積(アダマール積)を算出することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.array([[2, 3], # 2×2の行列を作成
[2, 3]]
)
b = np.array([[3, 4], # 2×2の行列を作成
[5, 6]]
)

a * b # アダマール積を求める

[実行結果]

行列のアダマール積 を算出することができました。

NumPy⑯ (行列要素同士の加算・減算)

行列要素同士の加算・減算

NumPy で、行列のすべての要素に対して演算を行う仕組みを ブロードキャスト と言います。

行列に対してスカラー演算を行うと、ブロードキャスト の仕組みによって全ての要素に同じ演算が適用されます。

この ブロードキャスト の仕組みを使って、行列の要素同士足し算・引き算を行うことができます。

サンプルコード

まず2×2の行列を2つ定義して、足し算を行います。

[Google Colaboratory]

1
2
3
4
5
6
7
8
import numpy as np
a = np.array([[1, 2], # 2×2の行列を作成
[3, 4]]
)
b = np.array([[4, 3], # 2×2の行列を作成
[2, 1]]
)
a + b

[実行結果]

次に同じ行列を使って、引き算を行います。

[Google Colaboratory]

1
a - b

[実行結果]

行列の要素同士足し算引き算 を行うことができました。

NumPy⑮ (行列の集計)

行列の集計(全体)

NumPyの行列に対して、集計用の関数を使うと全ての要素が集計対象となります。

まずは、最大値を表示します。

[Google Colaboratory]

1
2
3
4
5
6
7
import numpy as np
mtx = np.array([[10, 20, 30], # 3×3の行列を作成
[40, 50, 60],
[70, 80, 90]]
)

np.max(mtx) # 全要素の最大値

[実行結果]

次に最小値を表示します。

[Google Colaboratory]

1
np.min(mtx)          # 全要素の最小値

[実行結果]

合計値を算出します。

[Google Colaboratory]

1
np.sum(mtx)          # 全要素の合計

[実行結果]

平均を算出します。

[Google Colaboratory]

1
np.mean(mtx)         # 全要素の平均

[実行結果]

行列の全体を集計することができました。

行列の集計(部分)

行列全体ではなく、列ごとまたは行ごとに集計を行う場合は、axisオプションを使います。

axisに0 を指定すると、列ごとの集計ができます。

列ごとの合計を算出します。

[Google Colaboratory]

1
np.sum(mtx, axis=0)  # 列ごとの合計

[実行結果]

列ごとの平均を算出します。

[Google Colaboratory]

1
np.mean(mtx, axis=0) # 列ごとの平均

[実行結果]

axisに1 を指定すると、行ごとの集計ができます。

行ごとの合計を算出します。

[Google Colaboratory]

1
np.sum(mtx, axis=1) # 行ごとの合計

[実行結果]

行ごとの平均を算出します。

[Google Colaboratory]

1
np.mean(mtx, axis=1) # 行ごとの平均

[実行結果]

行列を行ごと列ごとに集計することができました。

NumPy⑭ (行列の要素にアクセス)

行列の要素にアクセス

NumPy行列要素へのアクセスには、リストと同じようにブラケット演算子を使って次のように指定します。

 [行開始インデックス : 行終了インデックス, 列開始インデックス : 列終了インデックス]

開始インデックスは 0 から始まります。

終了インデックスは、指定したインデックスの直前までが参照されるので注意が必要です。

まずは 3×3の行列を定義しデータ型を確認します。

[Google Colaboratory]

1
2
3
4
5
6
7
# 行列の要素へのアクセス
import numpy as np
mtx = np.array([[1, 2, 3], # 3×3の行列を作成
[4, 5, 6], # dtypeを指定しない場合は
[7, 8, 9]] # 要素の値に対応した型になる
)
mtx.dtype # データの型を確認

[実行結果]

次に、行列の1行目の全ての要素を表示します。(3つの指定方法があります)

[Google Colaboratory]

1
mtx[0]          # 1行目のすべての要素

[実行結果]

[Google Colaboratory]

1
mtx[0,]         # 1行目のすべての要素

[実行結果]

[Google Colaboratory]

1
mtx[0, :]       # 1行目のすべての要素

[実行結果]

行列の1列目の全ての要素を表示します。

[Google Colaboratory]

1
mtx[:, 0]       # 1列目のすべての要素

[実行結果]

2行、2列の要素を表示します。

[Google Colaboratory]

1
mtx[1, 1]       # 2行、2列の要素

[実行結果]

1行目から2行目、1列目から2列目を部分抽出します。

[Google Colaboratory]

1
mtx[0:2, 0:2]   # 1行~2行、1列~2列の部分行列を抽出

[実行結果]

いろいろなパターンで行列の要素にアクセスすることができました。

NumPy⑬ (行列のスカラー演算)

行列のスカラー演算

NumPyでは、ベクトル(配列)と同じように、行列に対して スカラー演算 を行うことができます。

ブロードキャスト によって、行列の全ての要素に対して演算が行われます。

まずは 3×3の行列 を作成します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import numpy as np

# 行列を作成する
import numpy as np
mtx = np.array([[1, 2, 3], # 3×3の行列を作成
[4, 5, 6],
[7, 8, 9]],
dtype = np.float)
mtx

[実行結果]

行列に対して足し算を行います。

[Google Colaboratory]

1
mtx + 10       # 足し算

[実行結果]

行列に対して引き算を行います。

[Google Colaboratory]

1
mtx - 10        # 引き算

[実行結果]

行列に対して乗算を行います。

[Google Colaboratory]

1
mtx * 2          # 乗算

[実行結果]

行列に対して除算を行います。

[Google Colaboratory]

1
mtx / 2          # 除算

[実行結果]

行列に対して剰余を算出します。

[Google Colaboratory]

1
mtx % 2          # 剰余

[実行結果]

行列に対して、各スカラー演算が行えることを確認できました。