1. 程式人生 > 其它 >Python資料分析 三劍客篇(一)NumPyPython資料分析(一)Numpy

Python資料分析 三劍客篇(一)NumPyPython資料分析(一)Numpy

Python資料分析(一)Numpy

NumPy,Pandas和 Matplotlib “工欲善其事,必先利其器。” Numpy ,pandas 和 Matplotlib 被稱為Python資料分析的三劍客模組。首先我們來講講安裝問題,推薦直接傻瓜式安裝Anaconda,裡面封裝了大量的第三方庫,其中就包括了我們的三劍客模組。推薦到清華大學開源映象站下載。

  • NumPy是一個科學計算庫,提供了矩陣運算的功能,一般用它提供一個 Ndarray 物件 。(注:python檔名不要模組名重複,不然建立陣列物件時會出現問題:比如說檔名為 numpy.py 這時檔名和numpy衝突 報錯:AttributeError: module ‘numpy’ has no attribute ‘array’)

1.定向生成陣列物件

   import numpy as np  #建立多維陣列物件  arr1=np.array([1,2,3,4,5]) 
> arr2=np.array([[1,2,3,4,5],[6,7,8,9,0]]) #列印維度 print(arr2.shape)
> print(arr1.shape) #輸出結果如下:(2, 5) (5,) 多維陣列維度(行,列)



#列印陣列的資料型別
print(arr1.dtype)
print(arr2.dtype)
#輸出:int64 int64

#列印陣列元素的個數
print(arr2.size)
#輸出:10

#格式轉換
arr2.shape=5,2
arr1.shape=5,1
print(arr2.shape)
print(arr1.shape)
#輸出:(5, 2) (5, 1)

2.自動生成陣列

   #使用arange函式建立一定範圍內的等差一維陣列
arr4=np.arange(1,2,0.1)
print(arr4)
#輸出:[1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]


#使用linspace函式通過指定開始值,終值和元素個數建立一維陣列
arr3=np.linspace(0,1,15)
print(arr3)
'''輸出:[0. 0.07142857 0.14285714 0.21428571 0.28571429 0.35714286
0.42857143 0.5 0.57142857 0.64285714 0.71428571 0.78571429
0.85714286 0.92857143 1. ]'''

#使用logspace函式生成等比數列
arr5=np.logspace(0,10,5)
print(arr5)
'''輸出:[1.00000000e+00 3.16227766e+02 1.00000000e+05 3.16227766e+07
1.00000000e+10]'''

#使用zeros函式生成0向量
print(np.zeros((3,4)))
'''輸出:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]'''

#使用ones函式生成全是1的陣列
print(np.ones((2,3)))
'''out:
[[1. 1. 1.]
[1. 1. 1.]]'''

#使用eye函式建立主對角線上全是1的陣列
print(print(np.eye(4)))
'''out:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]'''

#使用diag函式指定主對角線值,list形式傳值
print(np.diag([1,2,3,4,5]))
'''out:
[[1 0 0 0 0]
[0 2 0 0 0]
[0 0 3 0 0]
[0 0 0 4 0]
[0 0 0 0 5]]'''

3.隨機生成陣列

   import numpy as np
#ramdom函式隨機生成陣列,reshape函式規定其為25行4列
print(np.random.random(100).reshape(25,4))
''' 部分輸出:
[[0.41779031 0.31529555 0.17766244 0.72547036]
[0.95439412 0.80383632 0.41866361 0.17071668]
......
[0.06610952 0.87488625 0.85913323 0.13361665]
[0.64676173 0.31024695 0.04490706 0.23985548]]

‘''

#服從均勻分佈
print(np.random.rand(5,5))
'''輸出:
[[0.42083652 0.98716543 0.9742623 0.9402266 0.70753504]
[0.60180081 0.77633264 0.08107967 0.80593841 0.65563986]
[0.93934732 0.79088117 0.42302721 0.58801814 0.09153276]
[0.42432187 0.48180108 0.08489092 0.0856836 0.60130952]
[0.25887204 0.09300781 0.71942068 0.86411773 0.35567047]]

'''

#服從正態分佈
print(np.random.randn(5,5))
'''輸出:
[[ 1.27285675 1.45503025 0.27600984 -0.32931654 -0.78800697]
[-0.4268439 -2.16412776 -0.18753525 0.05182456 -2.13253747]
[-2.12798807 0.77489968 -0.09857475 0.7274294 -0.01992541]
[-0.96002384 0.38462981 0.60109209 1.27692944 -0.14912962]
[ 0.17716558 -1.31903088 -0.33830463 -0.0716197 1.71571588]]
'''

#給定區間生成隨機數
print(np.random.randint(1,10,size=[3,3]))
'''輸出:
[[7 1 4]
[8 3 5]
[5 3 1]]
'''

4.索引和切片 一維陣列:

   import numpy as np
arr0=np.arange(10)#[0 1 2 3 4 5 6 7 8 9]

print(arr0[2])#列印第三個數

print(arr0[2:6])#切片包括arr0[2]但是不包括arr0[6]

print(arr0[:4])#表示從arr0[0]開始,到指定arr0[3]

print(arr0[-1])#表示最後一個元素

#判斷運輸算
equal_to_one=(arr0==1)#返回布林值[False True False False False False False False False False]
print(arr0[equal_to_one])#[1]

#取判斷運算(&和 |)
equal_to_one_and_two=(arr0==1)&(arr0==2)
print(arr0[equal_to_one_and_two])#[] 不存在一個數,既等於1又等於2
equal_to_one_or_two=(arr0==1)|(arr0==2)
print(arr0[equal_to_one_or_two])#[1 2]

n維陣列

   arra=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,4)
'''[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(arra[:,3])#取第4列元素
print(arra[0,1:3])#取第0行,第1和第2列元素
print(arra[1:,1:])#取第1,2行,1,2,3列元素

print(arra.ravel())#展平陣列,預設橫向[ 1 2 3 4 5 6 7 8 9 10 11 12]
print(arra.flatten())#橫向展平陣列[ 1 2 3 4 5 6 7 8 9 10 11 12]
print(arra.flatten('F'))#縱向展平陣列[ 1 5 9 2 6 10 3 7 11 4 8 12]

arra2=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,4)
print(np.hstack((arra,arra2)))
'''
[[ 1 2 3 4 1 2 3 4]
[ 5 6 7 8 5 6 7 8]
[ 9 10 11 12 9 10 11 12]]
'''
print(np.vstack((arra,arra2)))
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
print(np.hsplit(arra2,2))
'''
[array([[ 1, 2],
[ 5, 6],
[ 9, 10]]), array([[ 3, 4],
[ 7, 8],
[11, 12]])]
'''
print(np.vsplit(arra2,3))
'''[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]'''

5.賦值 *

   import numpy as np
a=np.arange(12)
b=a
b.shape=3,4
print(a.shape)
print(id(a))
print(id(b))
輸出
(3, 4)
4557363120
4557363120

‘=’賦值開闢同一塊儲存單元,通俗來說就是名字不一樣,但就是一個東西 ‘view()函式’開闢不同的儲存單元,但是資料共同 ‘copy()函式’僅用於初始化,完全不同的兩個東西

6.操作檔案(不打算整理後面pandas詳細介紹)

7.排序 大致介紹 1.a.sort() 對元素排序 直接進行排序,預設為升序 括號中可以傳引數,axis=1表示橫向排序,axis=0表示縱向排序

  1. a.argsort() 對下標排序 操作基本一致 8.常用統計函式