data analysis 什麼是數據分析 是把隱藏在一些看似雜亂無章的數據背後的信息提煉出來,總結出所研究對象的內在規律 使得數據的價值最大化 分析用戶的消費行為 制定促銷活動的方案 制定促銷時間和粒度 計算用戶的活躍度 分析產品的回購力度 分析廣告點擊率 決定投放時間 制定廣告定向人群方案 決定 ...
data analysis
什麼是數據分析
- 是把隱藏在一些看似雜亂無章的數據背後的信息提煉出來,總結出所研究對象的內在規律
- 使得數據的價值最大化
- 分析用戶的消費行為
- 制定促銷活動的方案
- 制定促銷時間和粒度
- 計算用戶的活躍度
- 分析產品的回購力度
- 分析廣告點擊率
- 決定投放時間
- 制定廣告定向人群方案
- 決定相關平臺的投放
- ......
- 分析用戶的消費行為
- 使得數據的價值最大化
- 數據分析是用適當的方法對收集來的大量數據進行分析,幫助人們做出判斷,以便採取適當的行動
- 保險公司從大量賠付申請數據中判斷哪些為騙保的可能
- 支付寶通過從大量的用戶消費記錄和行為自動調整花唄的額度
- 短視頻平臺通過用戶的點擊和觀看行為數據針對性的給用戶推送喜歡的視頻
數據分析實現流程
- 提出問題
- 準備數據
- 分析數據
- 獲得結論
- 成果可視化
開發環境介紹
- anaconda
- 官網:https://www.anaconda.com/
- 集成環境:集成好了數據分析和機器學習中所需要的全部環境
- 註意:
- 安裝目錄不可以有中文和特殊符號
- 註意:
- jupyter
- jupyter就是anaconda提供的一個基於瀏覽器的可視化開發工具
- jupyter的基本使用
- 啟動:在終端中錄入:jupyter notebook的指令,按下回車
- 新建:
- python3:anaconda中的一個源文件
- cell有兩種模式:
- code:編寫代碼
- markdown:編寫筆記
- 快捷鍵:
- 添加cell:a或者b
- 刪除:x
- 修改cell的模式:
- m:修改成markdown模式
- y:修改成code模式
- 執行cell:
- shift+enter
- tab:自動補全
- 代開幫助文檔:shift+tab
數據分析三劍客
- numpy
- pandas(重點)
- matplotlib
numpy
- NumPy(Numerical Python) 是 Python 語言中做科學計算的基礎庫。重在於數值計算,也是大部分Python科學計算庫的基礎,多用於在大型、多維數組上執行的數值運算。
numpy的創建
- 使用np.array()創建
- 使用plt創建
- 使用np的routines函數創建
使用numpy創建一位數組
>>> import numpy as np
>>> arr = np.array([1,2,3])
>>> arr
array([1, 2, 3])
使用numpy創建二維數組
>>> arr = np.array([[1,2,3],[4,5,6]])
>>> arr
array([[1, 2, 3],
[4, 5, 6]])
數組和列表的區別是什麼?
>>> arr = np.array([1,1.27,'regina']) >>> arr array(['1', '1.27', 'regina'], dtype='<U32')
- 數組中存儲的數據元素類型必須是統一類型
- 優先順序:
- 字元串 > 浮點型 > 整數
-
將外部的一張圖片讀取載入到numpy數組中,然後嘗試改變數組元素的數值查看對原始圖片的影響
import matplotlib.pyplot as plt img_arr = plt.imread('/Users/ivanlee/Desktop/女明星/IMG_1473.JPG') plt.imshow(img_arr) #將numpy數組進行可視化展示
如果每一個像素塊的值減100
運用函數創建數組
- zero()
- ones()
- linspace()
- arange()
- random系列
-
ones
np.ones(shape(3,4)) array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])
-
Linspace(): 一維的等差數列的數組
>>> np.linspace(0,100,num=20) array([ 0. , 5.26315789, 10.52631579, 15.78947368, 21.05263158, 26.31578947, 31.57894737, 36.84210526, 42.10526316, 47.36842105, 52.63157895, 57.89473684, 63.15789474, 68.42105263, 73.68421053, 78.94736842, 84.21052632, 89.47368421, 94.73684211, 100. ])
-
arange():一維的等差數列
>>> np.arange(0,50,step=3) array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48])
-
Random():返回由size決定的形狀數組
>>> np.random.randint(0,100,size=(3,5)) array([[88, 56, 60, 56, 9], [ 9, 0, 32, 31, 32], [78, 10, 21, 78, 98]])
numpy的常用屬性
- shape 形狀
- ndim 維度
- size 總共個數
- dtype 元素類型
numpy的數據類型
- array(dtype=?):可以設定數據類型
- arr.dtype = '?':可以修改數據類型
名稱 | 描述 |
---|---|
bool_ | 布爾型數據類型(True 或者 False) |
int_ | 預設的整數類型(類似於 C 語言中的 long,int32 或 int64) |
intc | 與 C 的 int 類型一樣,一般是 int32 或 int 64 |
intp | 用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64) |
int8 | 位元組(-128 to 127) |
int16 | 整數(-32768 to 32767) |
int32 | 整數(-2147483648 to 2147483647) |
int64 | 整數(-9223372036854775808 to 9223372036854775807) |
uint8 | 無符號整數(0 to 255) |
uint16 | 無符號整數(0 to 65535) |
uint32 | 無符號整數(0 to 4294967295) |
uint64 | 無符號整數(0 to 18446744073709551615) |
float_ | float64 類型的簡寫 |
float16 | 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位 |
float32 | 單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位 |
float64 | 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位 |
complex_ | complex128 類型的簡寫,即 128 位複數 |
complex64 | 複數,表示雙 32 位浮點數(實數部分和虛數部分) |
complex128 | 複數,表示雙 64 位浮點數(實數部分和虛數部分) |
numpy 的數值類型實際上是 dtype 對象的實例,並對應唯一的字元,包括 np.bool_,np.int32,np.float32,等等。
numpy的索引和切片操作(重點)
-
索引操作和列表同理
>>> arr = np.random.randint(1,100,size=(5,6)) >>> arr array([[49, 26, 2, 75, 91, 93], [68, 49, 40, 40, 51, 54], [39, 49, 16, 93, 45, 2], [13, 43, 67, 52, 2, 46], [74, 20, 9, 73, 91, 21]]) >>> arr[1] array([68, 49, 40, 40, 51, 54]) >>> arr[[1,3,4]] array([[68, 49, 40, 40, 51, 54], [13, 43, 67, 52, 2, 46], [74, 20, 9, 73, 91, 21]])
-
切片操作
-
切出前兩行數據
>>> arr[0:2] array([[49, 26, 2, 75, 91, 93], [68, 49, 40, 40, 51, 54]])
-
切出前兩列數據
>>> arr[:,0:2] array([[49, 26], [68, 49], [39, 49], [13, 43], [74, 20]])
-
切出前兩行的前兩列的數據
>>> arr[0:2,0:2] array([[49, 26], [68, 49]])
-
數組行翻轉
>>> arr[::-1] array([[74, 20, 9, 73, 91, 21], [13, 43, 67, 52, 2, 46], [39, 49, 16, 93, 45, 2], [68, 49, 40, 40, 51, 54], [49, 26, 2, 75, 91, 93]])
-
數組列翻轉
>>> arr[::,::-1] array([[93, 91, 75, 2, 26, 49], [54, 51, 40, 40, 49, 68], [ 2, 45, 93, 16, 49, 39], [46, 2, 52, 67, 43, 13], [21, 91, 73, 9, 20, 74]])
-
練習:將一張圖片上下左右進行翻轉操作
import matplotlib.pyplot as plt img_arr = plt.imread('/Users/ivanlee/Desktop/女明星/IMG_1473.JPG') plt.imshow(img_arr) #將numpy數組進行可視化展示
-
練習:將圖片進行指定區域的裁剪
-
numpy變形
-
reshape操作
級聯操作
- 將多個numpy數組進行橫向或者縱向的拼接
-
axis軸向的理解
- 0:列
- 1:行
-
問題:
-
級聯的兩個數組維度一樣,但是行列個數不一樣會如何?
答:不一樣就無法拼接
-
-
對圖進行拼接
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=0) plt.imshow(arr_3)
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) plt.imshow(arr_3)
常用的聚合操作
-
sum,max,min,mean
常用的數學函數
- NumPy 提供了標準的三角函數:sin()、cos()、tan()
- numpy.around(a,decimals) 函數返回指定數字的四捨五入值。
- 參數說明:
- a: 數組
- decimals: 舍入的小數位數。 預設值為0。 如果為負,整數將四捨五入到小數點左側的位置
- 參數說明:
常用的統計函數
- numpy.amin() 和 numpy.amax(),用於計算數組中的元素沿指定軸的最小、最大值。
- numpy.ptp():計算數組中元素最大值與最小值的差(最大值 - 最小值)。
- numpy.median() 函數用於計算數組 a 中元素的中位數(中值)
- 標準差std():標準差是一組數據平均值分散程度的一種度量。
- 公式:
std = sqrt(mean((x - x.mean())**2))
- 如果數組是 [1,2,3,4],則其平均值為 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],並且其平均值的平方根除以 4,即 sqrt(5/4) ,結果為 1.1180339887498949。
- 公式:
- 方差var():統計中的方差(樣本方差)是每個樣本值與全體樣本值的平均數之差的平方值的平均數,即 mean((x - x.mean())** 2)。換句話說,標準差是方差的平方根
矩陣相關
-
NumPy 中包含了一個矩陣庫 numpy.matlib,該模塊中的函數返回的是一個矩陣,而不是 ndarray 對象。一個 的矩陣是一個由行(row)列(column)元素排列成的矩形陣列。
-
numpy.matlib.identity() 函數返回給定大小的單位矩陣。單位矩陣是個方陣,從左上角到右下角的對角線(稱為主對角線)上的元素均為 1,除此以外全都為 0。
eye返回一個標準的單位矩陣
np.eye(6)
T 轉置
矩陣相乘
- numpy.dot(a, b, out=None)
- a : ndarray 數組
- b : ndarray 數組
本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16985422.html