數據分析:是把隱藏在一些看似雜亂無章的數據背后的信息提煉出來,總結出所研究對象的內在規律
數據分析三劍客:Numpy,Pandas,Matplotlib
一 Anaconda
1 下載
官網:https://www.anaconda.com/distribution/
2 安裝
https://blog.csdn.net/u012318074/article/details/77075209
3 基本使用
http://python.jobbole.com/86236/
4 庫更新及jupyter-notebook默認目錄更改方法
https://blog.csdn.net/zenghaitao0128/article/details/78241146
二 jupyter
1 在文件中啟動cmd文件
2 輸入jupyter notebook
3 快捷鍵
插入cell: a(之前插入),b(之后插入)
刪除cell: x
切換cell模式: y 切換為code模式
m 切換為markdowm 模式(顯示html樣式)
運行代碼:shift+enter
自動補全代碼:tab
查看幫助文檔:shift+tab
進入編輯:鼠標雙擊
三 numpy(重點)
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
import numpy as np
一 創建數組
1. 使用np.array()創建
創建一維數組
a = np.array([1,2,3,4,5])
創建二維數組
a1 = np.array([[1,4,3],[4,5,6],[7,8,9.5]])
注意:
numpy默認ndarray的所有元素的類型是相同的
如果傳進來的列表中包含不同的類型,則統一為同一類型,優先級:str>float>int
n維數組
import matplotlib.pyplot as plt img_arr = plt.imread('./bobo.jpg') #圖片路徑
plt.imshow(img_arr) #顯示圖片
2 使用np的routines函數創建
1) np.ones(shape, dtype=None, order='C') shape:數組的尺寸(2,3,3) 2行3列3頁的數組 dtype:數據類型(str,int,float)
np.ones((4,6)) #創建全1矩陣 4x6
2) np.zeros(shape, dtype=None, order='C') #創建全0矩陣
np.zeros((2,3))
3) np.full(shape, fill_value, dtype=None, order='C') #指定填充數據,創建矩陣
5) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差數列
start:起始值
stop:終止值
num:個數
endpoint:是否包含終止值,true表示包含
retstep:是否返回步長
6) np.arange([start, ]stop, [step, ]dtype=None) #根據步長取數
7) np.random.randint(low, high=None, size=None, dtype='l') #產生隨機整數
np.random.seed(100) #不在隨機 np.random.randint(0,100,size=(5,3))
8) np.random.randn(d0, d1, ..., dn) #正態分布中隨機取數值
9) np.random.random(size=None) #生成0到1的隨機數,左閉右開
二 ndarray的屬性
np.random.seed(100) arr=np.random.randint(50,100,size=(5,5)) arr
數組性質:
arr.shape #數組的各維度尺寸,返回元組 arr.size #返回各維度尺寸的乘積 arr.dtype #返回數組的數據類型 type(arr) #返回數組類型
三 ndarray 的基本操作
1 索引 :一維與列表完全一致 多維時同理
np.random.seed(10) arr = np.random.randint(0,100,size=(5,5)) arr
arr[1][3] = 10000 #索引並賦值
2 切片:一維與列表完全一致 多維時同理
格式: arr[:,:,] 不同維度用‘,'隔開,[行索引,列索引]
#獲取二維數組前兩行 arr[0:2]
#獲取二維數組前兩列 arr[:,0:2] #逗號之間表示的行,逗號后面表示的列的切片
#獲取二維數組前兩行和前兩列數據 arr[0:2,0:2]
3 數據反轉 ,例如[1,2,3]---->[3,2,1] ---> ::進行切片
#將數組的行倒序 arr[::-1]
#列倒序 arr[:,::-1]
#全部倒序 arr[::-1,::-1]
4 圖片的反轉
cat_arr=plt.imread('part_1/cat.jpg') #獲取圖片數據 res_cat_arr=cat_arr[::-1,::-1,::-1] #數據反轉 plt.imshow(res_cat_arr) #顯示圖片
(未反轉) (反轉后)
5 變形
使用arr.reshape()函數,注意參數是一個tuple!
arr_1.reshape((25,1)) #將多維數組變形成一維數組
arr_1.reshape((-1,5)) #-1表示自動計算行數
使用變形圖片倒置
img_arr.shape #獲取圖片數組的尺寸 #將元數據變形成一維 img_arr_one_ndim = img_arr.reshape((626*413*3)) #將變形后的一維數組中的元素全部倒置 img_arr_one_ndim = img_arr_one_ndim[::-1] #重新塑造回原先的多維數組 arr_img_finally = img_arr_one_ndim.reshape((626,413,3)) plt.imshow(arr_img_finally) #展示圖片
6 級聯
- np.concatenate()
np.concatenate((arr1,arr2),axis=1) #axis=0 縱軸 1橫軸
-
圖片的合並---九宮格
tree_arr=np.concatenate((cat_arr,cat_arr,cat_arr),axis=1) #橫向合並 nine_arr=np.concatenate((tree_arr,tree_arr,tree_arr),axis=0) #縱向合並 plt.imshow(nine_arr)
- np.hstack與np.vstack
np.vstack((arr,arr1)) 垂直方向級聯
np.vstack((arr,arr1)) 縱向方向級聯
級聯需要注意的點: 1 級聯的參數是列表:一定要加中括號或小括號 2 維度必須相同 3 形狀相符:在維度保持一致的前提下,如果進行橫向(axis=1)級聯,
必須保證進行級聯的數組行數保持一致。如果進行縱向(axis=0)級聯,
必須保證進行級聯的數組列數保持一致。 4 可通過axis參數改變級聯的方向
6 切分
與級聯類似,三個函數完成切分工作:
np.split(arr,行/列號,軸):參數2是一個列表類型
np.vsplit 垂直方向切割
np.hsplit 水平方向切割
arr
np.split(arr,(2,4),axis=1) #在縱向索引為2,4的位置切割
- 切割照片
cat_arr=plt.imread('part_1/cat.jpg')#獲取圖片數據 c1,c2,c3=np.split(cat_arr,(150,360),axis=0) #縱向切割,並解包 plt.imshow(c1) plt.imshow(c2) plt.imshow(c3)
7 副本
所有賦值運算不會為ndarray的任何元素創建副本。對賦值后的對象的操作也對原來的對象生效。
arr_= arr.copy() #產生一個arr一樣的副本
四 ndarray 的聚合操作
- 求和np.sum
arr.sum(axis=1) #橫向求和 arr.sum(axis=0) #縱向求和
- 最大值最小值 np.max/np.min
arr.max(axis=1) #橫向取最大 arr.max(axis=0) #縱向取最大
- 平均值 np.mean()
arr.mean() #取所有數據的平均值
- 其他聚合操作
Function Name NaN-safe Version Description np.sum np.nansum Compute sum of elements np.prod np.nanprod Compute product of elements np.mean np.nanmean Compute mean of elements np.std np.nanstd Compute standard deviation np.var np.nanvar Compute variance np.min np.nanmin Find minimum value np.max np.nanmax Find maximum value np.argmin np.nanargmin Find index of minimum value np.argmax np.nanargmax Find index of maximum value np.median np.nanmedian Compute median of elements np.percentile np.nanpercentile Compute rank-based statistics of elements np.any N/A Evaluate whether any elements are true np.all N/A Evaluate whether all elements are true np.power 冪運算
五 廣播機制
【重要】ndarray廣播機制的三條規則:缺失維度的數組將維度補充為進行運算的數組的維度。缺失的數組元素使用
已有元素進行補充。
規則一:為缺失的維度補1(進行運算的兩個數組之間的維度只能相差一個維度)
規則二:缺失元素用已有值填充
規則三:缺失維度的數組只能有一行或者一列
例1: m = np.ones((2, 3)) a = np.arange(3)
六 、ndarray的排序
np.sort()與ndarray.sort()都可以,但有區別:
np.sort()不改變輸入
ndarray.sort()本地處理,不占用空間,但改變輸入
np.sort(arr,axis=1) #橫向排序 np.sort(arr,axis=0) #縱向排序