電脳ヨーグルト(技術ブログ)

勉強したことを淡々とメモしていきます

書きなぐりnumpy、scipy、pandas、matplotlib

Numpy

配列作成はnp.array([1,2,3,4])

 

データ型.dtype 次元数.ndim 要素数.size

 

Numpyで乱数を発生させる。

 

random.seed(0)

#正規分布(平均0,分散1)の乱数を10個発生

norm_random_sample_data = random.randn(10)

 

 

random.choice(norm_random_sample_data,10))

# 10個を抽出(重複あり,復元抽出)

random.choice(norm_random_sample_data,10,replace=False)

# 10個を抽出(重複なし、非復元抽出)

 

zero_data = np.zeros*1

結果 -0.9999999852953547ほぼ-1

 

 

 

 

 

Pandas

データのハンドリング、操作が可能となる。表計算やデータベース。

from pandas import Series,DataFrame

 

モジュールの説明

Series

sample_pandas_data = pd.Series([0,1,2,3,4,5,6,7,8,9])

print(sample_pandas_data)

0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

dtype: int64

こんな感じでインデックス(左)と入力した数(右)を表示する。.valuesでアクセスできる。

pd.Series([0,1,2,3,4,5,6,7,8,9],index=['a','b','c','d','e','f','g','h','i','j'])

こういう感じでインデックスを指定したりもできる。

 

DataFrame

attri_data1 = {'ID':['100','101','102','103','104']

        ,'city':['Tokyo','Osaka','Kyoto','Hokkaidao','Tokyo']

        ,'birth_year':[1990,1989,1992,1997,1982]

        ,'name':['Hiroshi','Akiko','Yuki','Satoru','Steeve']}

attri_data_frame1 = DataFrame(attri_data1)

print(attri_data_frame1)

#以下のようにテーブルみたいなのができる。

ID birth_year city name

0 100 1990 Tokyo Hiroshi

1 101 1989 Osaka Akiko

2 102 1992 Kyoto Yuki

3 103 1997 Hokkaidao Satoru

4 104 1982 Tokyo Steeve

 

.Tでテーブルを転置できる。

.dropで削除できる。

attri_data_frame1.drop(['birth_year'],axis=1)

axis=0で行の削除

axis=1で列方向の削除

 

pd.merge(attri_data_frame1,attri_data_frame2)

でデータのマージ(内部結合)キーを明示しない場合は自動で見つけて結合してくれる。

 

attri_data_frame2.groupby("sex")["math"].mean()

 

 

Matplotlibの基礎

データビジュアライゼーション、散布図、ヒストグラム

 

データを可視化するpythonライブラリー

Matplotlib#メイン

Seaborn#図をきれいにすることが出来る

 

import matplotlib.pyplot as plt

import matplotlib as mpl

import seaborn as sns

 

plt.plot(x, y, "o")#散布図

#以下でも散布図が描ける

plt.scatter(x, y)

 

plt.hist()でヒストグラムを作る。

 

 

 

 

os.path.split() ディレクトリ名とファイル名に分離

*1:2,3), dtype='i')

print("・0でint型 \n", zero_data)

・0でint型 

 [[0 0 0]

 [0 0 0]]

 

N = 10**6

[random.random() for _ in range(N)]#100000回乱数を発生させたリストを作る。このリストを使ってnp.array([1,2,3,4])とかでnumpy配列が作れる。

 

%timeitは何回か同じ計算をしてベスト3の平均計算時間を返す。

 

 

 

 

 

Numpyで3×3の行列を作る。

sample_multi_array_data1 = np.arange(9).reshape(3,3)

print(sample_multi_array_data1)

[[0 1 2] #インデックス 0

[3 4 5] #インデックス 1

[6 7 8]]#インデックス 2

 

sample_multi_array_data1[0,:]はインデックス0の行で列はすべて取り出す。横

sample_multi_array_data1[:,0]はインデックス0の列で行はすべて取り出す。縦

 

行列の積はnp.dot(A,B)

要素の積はA*B

 

 

Scipy

Scipyは科学技術計算するためのモジュールで多様な数学処理が可能。

線形代数の計算とかできる。逆行列固有値固有ベクトル、最適化

 

scipy.linalg線形代数用のモジュール

 

linalg 行列式.det 逆行列.inv 固有値固有ベクトルの取得 .eig

 

最適化計算を使って方程式の解を求めてみる。

f(x)=x2+2x+1 = 0 の解

newton関数を使う

from scipy.optimize import newton

# 計算実行

print(newton(sample_function,0