引き続きこの本を読む
2章にはnumpy、matplotlibなどのデータ分析に用いるライブラリの基本的な説明が書かれている。
はてなブログに数式を打ち込む方法は、このブログを参考にした。
この本のサポートページはこちら
データのランダムな抽出
import numpy as np import numpy.random as random random.seed(3) data = np.array([2, 4, 6, 8, 1, 3, 5, 7, 9]) print(random.choice(data, 5))
p.44 演習問題 1から50の和
#1から50までの和を求める a = [x for x in range(1, 51)] b = np.array(a) ans = np.sum(b) print("1から50の和は", ans)
p.44 演習問題 正規分布に従う乱数を10個発生させて、最小値、最大値、和を求める
random.seed(0) rnd = random.randn(10) print(np.min(rnd)) print(np.max(rnd)) print(np.sum(rnd))
p.44 演習問題 成分が3の5*5行列を作って[tex: A2]を計算する。
import numpy as np A = np.full(25, 3).reshape(5, 5) #行列Aの二乗 print("行列Aの二乗は", np.dot(A, A))
[tex: f(x) = x2+ 3x + 1]について、の解との最小値を求める
import scipy.linalg as linalg from scipy.optimize import minimize_scalar from scipy.optimize import newton def my_func(x): return (x**2 + 3*x + 1) #ニュートン法 print(newton(my_func, 0)) #最小値を求める print(minimize_scalar(my_func, method="Brent"))
行列について、行列式の値、逆行列、固有値、固有ベクトルをそれぞれ求める
A = np.array([[1, 2, 3], [1, 3, 2], [3, 1, 2]]) #行列式を求める print(linalg.det(A)) #逆行列を求める print(linalg.inv(A)) #固有値、固有ベクトルを求める eig_value, eig_vec = linalg.eig(A) print("固有値は", eig_value) print("固有ベクトルは", eig_vec)
関数[tex: f(x) = x3 + 2x + 1 = 0]の解をnewton法により求める。
def prob_func(x): return (x**3 + 2*x + 1) print(newton(prob_func, 0))
Section2-5 pandas
p.53 pandas入門 IDが103以下の人を抽出
import pandas as pd from pandas import Series, DataFrame attri_data = {'ID': ['100', '101', '102', '103', '104'], 'City': ['Tokyo', 'Tokyo', 'Sendai', 'Sendai', 'Sendai'], 'Birth_year': ['1990', '990','1490','1940','1991',], 'Name': ['Hiroshi', 'Akiko', 'Yuki', 'Satoru', 'Steve']} attri_data_frame = DataFrame(attri_data) attri_data_frame_indexl = DataFrame(attri_data, index=['a', 'b', 'c', 'd', 'e']) attri_data_frame_indexl #IDが103以下の人を抽出 attri_data_frame_indexl[attri_data_frame_indexl['ID'] <= '103']
p.56 各都市ごとに誕生年の最大値と最小値を表示
#各都市ごとに誕生年の最大値と最小値を表示 print(attri_data_frame_indexl.groupby('City')['Birth_year'].max()) print(attri_data_frame_indexl.groupby('City')['Birth_year'].min())
練習問題2-7
1,Moneyが500以上の人を絞り込み 2,男女それぞれの平均Money 3,あらたにDataFrameオブジェクトを用意し、データをマージしてMoney, Math, Englishの平均を求める。
from pandas import Series, DataFrame import pandas as pd attri_data1 = {'ID':['1', '2', '3', '4', '5'], 'Sex': ['F','F','M','M','F'], 'Money': [1000, 2000, 500, 300, 700], 'Name': ['Saito', 'Horie', 'Kondo', 'Kawada', 'Matduhara']} attri_data_frame1 = DataFrame(attri_data1) #Moneyが500以上の人のみ表示 print(attri_data_frame1[attri_data_frame1["Money"] >= 500]) #男女それぞれの平均Money print(attri_data_frame1.groupby('Sex')['Money'].mean()) #あらたにDataFrameオブジェクトを用意して、IDをキーとしてマージする attri_data_frame2 = DataFrame({'ID':['3', '4', '7'], 'Math': [60, 30, 40], 'English': [80, 20, 30]}) attri_new_frame = pd.merge(attri_data_frame1, attri_data_frame2) print(attri_new_frame) print("Moneyの平均点は", attri_new_frame['Money'].mean()) print("数学のの平均点は", attri_new_frame['Math'].mean()) print("英語の平均点は", attri_new_frame['English'].mean())
Section2-5 Matplotlib
p.65 演習問題2-10から2-12
を図示 とのグラフを図示 一様乱数を1000個発生させて、ヒストグラムを図示
import numpy as np import matplotlib as mlp import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline def my_func(x): return 5*x + 3 x = np.linspace(-10, 10, 100) plt.plot(x, my_func(x))
x = np.linspace(-10,10, 100) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x))
import random x = np.random.uniform(0.0, 1.0, 1000) y = np.random.uniform(0.0, 1.0, 1000) plt.subplot(2, 1, 1) plt.hist(x, bins=60, range = (0, 1.5)) plt.subplot(2, 1, 2) plt.hist(y, bins=60, range = (0, 1.5))