--- title: 'Project documentation template' disqus: hackmd --- numpy === [TOC] random.choice ------------- ```python= import numpy as np for a in range(10): np1=np.random.choice(5, 3) print(np1,end=" ") print("\n----1---") for a in range(10): np1 = np.random.choice(5, 3, p=[0.1, 0.3, 0.6, 0, 0]) print(np1,end=" ") print("\n----2---") ``` >[3 0 4] [2 1 3] [3 4 1] [1 2 1] [3 3 0] [1 4 3] [2 3 1] [3 0 2] [4 3 1] [1 3 4] ----1--- [2 2 1] [2 2 2] [2 1 2] [2 1 0] [2 2 2] [2 2 1] [0 2 2] [1 2 1] [2 1 2] [1 2 1] ----2--- ```python= import numpy as np for a in range(10): np1=np.random.choice(5, 3,p=[0.1,0.3,0.6,0,0],replace=False) print(np1,end=" ") print("\n----3---") for a in range(10): np1=np.random.choice(5, 3,replace=False) print(np1,end=" ") print("\n----4---") ``` >[1 2 0] [1 2 0] [0 2 1] [2 1 0] [2 1 0] [2 1 0] [1 2 0] [2 0 1] [1 0 2] [1 2 0] ----3--- [4 0 2] [3 4 0] [4 1 2] [0 3 2] [1 3 4] [4 0 3] [2 4 3] [2 0 3] [4 0 2] [4 3 0] ----4--- ```python= import numpy as np aa_milne_arr = ['a', 'b', 'c', 'd'] for a in range(5): np2=np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3]) print(np2,end=" ") print("\n----5---") ``` >['d' 'd' 'a' 'a' 'b'] ['b' 'a' 'a' 'a' 'd'] ['c' 'a' 'a' 'a' 'd'] ['a' 'a' 'a' 'd' 'a'] ['d' 'a' 'a' 'd' 'c'] ----5--- random.binomial ------------- ```python= import numpy.random as nr import numpy as np print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) ``` >0.26 0.3 0.28 0.3 0.28 0.4 ```python= #二項分配調查 (HW) import numpy.random as nr import numpy as np import matplotlib.pyplot as plt results = [np.mean(nr.binomial(1, 0.25, 30)) for _ in range(100)] sample_mean = np.mean(results) plt.hist(results) plt.vlines(0.25, 0.0, 28.0, color = 'red') plt.vlines(sample_mean, 0.0, 28.0, color = 'black') plt.xlabel('Results') plt.ylabel('Frequency') plt.title('Histogram of results') plt.show() ``` >![image](https://hackmd.io/_uploads/BJ6ccTbrp.png) ```python= #產生大量二項分配結果 import numpy.random as nr import numpy as np print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) print(np.mean(nr.binomial(1, 0.3, 50))) #請加入語法 results = [np.mean(nr.binomial(1,0.3,50)) for _ in range(100)] print(results) ``` >0.3 0.28 0.3 0.28 0.4 0.26 [0.28, 0.34, 0.2, 0.34, 0.34, 0.26, 0.3, 0.2, 0.18, 0.28, 0.24, 0.34, 0.28, 0.28, 0.22, 0.22, 0.34, 0.26, 0.26, 0.28, 0.24, 0.24, 0.36, 0.22, 0.22, 0.24, 0.38, 0.24, 0.18, 0.3, 0.28, 0.3, 0.24, 0.3, 0.34, 0.26, 0.38, 0.24, 0.28, 0.22, 0.36, 0.24, 0.38, 0.28, 0.24, 0.38, 0.26, 0.3, 0.3, 0.44, 0.26, 0.3, 0.34, 0.32, 0.32, 0.38, 0.36, 0.34, 0.18, 0.22, 0.32, 0.3, 0.32, 0.32, 0.24, 0.32, 0.32, 0.22, 0.24, 0.14, 0.26, 0.38, 0.38, 0.28, 0.18, 0.34, 0.24, 0.32, 0.24, 0.34, 0.36, 0.32, 0.36, 0.28, 0.24, 0.26, 0.14, 0.52, 0.28, 0.32, 0.22, 0.24, 0.32, 0.22, 0.26, 0.24, 0.32, 0.28, 0.26, 0.28] random.normal ------------- ```python= import numpy.random as nr nr.seed(12345) #請加入語法 p1=nr.normal(10,2,50) nr.seed(3344) #請加入語法 p2=nr.binomial(1,0.3,50) nr.seed(3344) #請加入語法 sample1=nr.binomial(1,0.3,50) print(p1) print(p2) print(sample1) from scipy import stats #請加入語法 #print(stats.itemfreq(sample1)) ``` >[ 9.59058468 10.95788668 8.96112257 8.88853939 13.93156115 12.78681167 10.18581575 10.56349231 11.53804514 12.49286947 12.01437872 7.40755778 10.54998327 10.45782576 12.70583367 11.77285868 5.99672538 9.25631493 13.33805062 9.12286053 8.92051711 10.95397002 16.49788784 7.95754495 8.84582539 10.24824255 10.60522712 11.04754414 10.00188056 12.68761959 8.57291203 8.33769292 5.25953669 6.27847842 8.2784852 11.12029059 7.46813102 10.23965425 7.8729751 10.66576543 5.28116239 9.60091409 6.91600894 8.05852818 7.3859395 10.57269949 10.75596822 8.49222693 10.6625713 12.69948443] [0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1] [0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1] ```python= #P1 import numpy as np import numpy.random as nr nr.seed(515212) #collect a sample of 100 males males = nr.normal(5, 3, 100) #nr.seed(515212) #collect a sample of 100 females females = nr.normal(5, 3, 100) print(np.mean(males)) print(np.mean(females)) ``` >5.337790559409466 4.8650214885878595 random.sample ------------- ```python= import random a=random.sample(range(1,39),6) print (a) ``` >[20, 6, 7, 22, 11, 36] arange ---- ```python= import matplotlib.pyplot as plt import numpy as np #x+y=9 #5a+15b=75 x=np.arange(0,10,1) y=np.empty(9) #y-2x=1 y=9-x plt.plot(x,y) a=np.arange(0,16,1) b=np.empty(15) #y-2x=1 b=(75-5*a)/15 plt.plot(a,b) plt.grid() plt.show() ``` >![image](https://hackmd.io/_uploads/BJD0uhWB6.png) linspace ---- ```python= import matplotlib.pyplot as plt import numpy as np # create 1000 equally spaced points between -10 and 10 x = np.linspace(-10, 10, 1000) # calculate the y value for each element of the x vector y = x**2 + 2*x + 2 plt.plot(x,y) plt.show() ``` > ![image](https://hackmd.io/_uploads/SkhMthWHa.png) percentile ---- ```python= import numpy as np a = np.array ([25,26,27,29,32,32,33,33,34,35,35,36,37,39,41,42,42,43,43,43,44,44,44,44,45,48,50,50,50,50,51,53,54,55,56,57,57,60,61,61,65,66,67,68,74,74,76,77,77,80]) print (np.percentile(a, 25)) print (np.percentile(a, 50)) print (np.percentile(a, 75)) print (len(a)) ``` >37.5 46.5 59.25 50 quantile ---- ```python= import numpy as np #import stats as sts a = np.array ([25,26,27,29,32,32,33,33,34,35,35,36,37,39,41,42,42,43,43,43,44,44,44,44,45,48,50,50,50,50,51,53,54,55,56,57,57,60,61,61,65,66,67,68,74,74,76,77,77,80]) #test = np.array(a) print('上四分位數為',np.quantile(a,0.25)) print('下四分位數為',np.quantile(a,0.75)) ``` >上四分位數為 37.5 下四分位數為 59.25 ```python= import pandas as pd s = pd.Series(a) t = pd.Series(b) print (s.quantile([.25, .5, .75])) print ("===============") print (t.quantile([.25, .5, .75])) ``` >0.25 37.50 0.50 46.50 0.75 59.25 dtype: float64 =============== 0.25 35.25 0.50 43.50 0.75 51.00 dtype: float64 loadtxt() --- ```python= year, age_m, age_f = np.loadtxt('eg7-marriage-ages.txt', unpack=True,skiprows=3) fig = plt.figure() ax = fig.add_subplot(111) #請加入語法 ax.plot(year,age_m,marker='$/u2642$',markersize=14,c='blue',lw=2,mfc='blue',mec='blue') ax.plot(year,age_f,marker='$/u2640$',markersize=14,c='magenta',lw=2,mfc='magenta',mec='magenta') ax.grid() ax.set_xlabel('Year') ax.set_ylabel('Age') ax.set_title('Median age at first marriage in the US, 1890 - 2010') plt.show() ``` ```python= fig = plt.figure() ax = fig.add_subplot(111) cities = ['Boston', 'Houston', 'Detroit', 'San Jose', 'Phoenix'] linestyles = [{'ls': '-'}, {'ls': '--'}, {'ls': ':'}, {'ls': '-.'}, {'dashes': [2, 4, 2, 4, 8, 4]}] for i, city in enumerate(cities): filename = '{}.csv'.format(city.lower()).replace(' ', '_') #請加入語法 yr,pop = np.loadtxt(filename,unpack=True) line, = ax.plot(yr,pop/1.e6,label=city,color='k',**linestyles[i]) ax.legend(loc='upper left') ax.set_xlim(1800,2020) ax.set_xlabel('Year') ax.set_ylabel('Population(millions)') plt.show() ``` ```python= arr = np.loadtxt('./datasets/data1.csv',skiprows=1, delimiter=',') print(arr) v1, v2 = np.loadtxt('./datasets/data1.csv',skiprows=1,unpack=True, delimiter=',') print("Value1=",v1) print("Value2=",v2) ``` >[[0.2 0.1] [0.4 0.5] [0.1 0.6] [0.1 0.3] [0.7 0.3]] >Value1= [0.2 0.4 0.1 0.1 0.7] >Value2= [0.1 0.5 0.6 0.3 0.3] ```python= arr = np.loadtxt('./datasets/data2.csv',skiprows=1, delimiter=',') print(arr) v1, v2 = np.loadtxt('./datasets/data2.csv',skiprows=1,unpack=True, delimiter=',') print("Value1=",v1) print("Value2=",v2) ``` >[[0.2 0.1] [0.4 0.6] [0.1 0.3] [0.1 0.3]] >Value1= [0.2 0.4 0.1 0.1] >Value2= [0.1 0.6 0.3 0.3] genfromtxt --- ```python= arr1 = np.genfromtxt('./datasets/data2.csv', delimiter=',', skip_header =1) print(arr1) np.savetxt('data2a.csv', arr1, delimiter=',') arr2 = np.genfromtxt('./datasets/data2.csv', delimiter=',', skip_header =1, filling_values= 0.0) print(arr2) np.savetxt('data2b.csv', arr2, delimiter=',',fmt='%.2f') ``` >[[0.2 0.1] [0.4 0.6] [0.1 0.3] [0.1 0.3]] [[0.2 0.1] [0.4 0.6] [0.1 0.3] [0.1 0.3]] ```python= arr = np.genfromtxt('./datasets/data3.csv', delimiter=',', dtype='int', skip_header=1, encoding='utf-8') print(arr) print(arr.shape) print(np.size(arr, axis=0)) print(np.size(arr, axis=1)) print(arr[0,0]) print(arr[1,2]) print(arr[2,3]) ``` >[[ 106 1 8397 364 209 291 398 516 524 630 633 608 615 713 648 584 509 308 304 298 171 58 15 1] [ 106 2 8393 359 210 293 394 513 524 624 636 599 630 709 649 584 515 303 302 300 174 59 15 1] [ 106 3 8389 353 219 283 397 509 530 617 635 602 636 707 643 585 517 304 307 297 174 59 14 1] [ 106 4 8376 349 211 277 395 511 532 614 641 603 635 699 647 586 519 304 305 297 175 61 14 1] [ 106 5 8378 352 218 273 395 512 526 610 642 602 638 687 652 594 518 305 307 298 172 61 15 1] [ 106 6 8395 352 225 271 393 516 529 612 642 603 629 693 656 597 516 308 306 297 174 59 16 1] [ 106 7 8411 363 220 276 387 518 529 611 650 602 619 699 652 606 521 305 308 294 174 60 16 1] [ 106 8 8409 362 222 277 380 515 533 605 649 608 615 705 646 607 529 301 309 295 177 57 16 1] [ 106 9 8406 359 223 271 371 527 528 601 645 606 621 705 651 606 531 305 302 302 176 59 16 1]] (9, 24) 9 24 106 8393 353 random.random_integers --- ```python= arr1 = np.random.random_integers(1, 9, [2,3]) print(arr1) np.save('myArray', arr1) print('----------') arr2 = np.load('myArray.npy') print(arr2) print('----------') ``` >[[5 1 4] [3 1 8]] >[[5 1 4] [3 1 8]]