引き続きこの本を読む
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))