本教程的知識點為:機器學習(常用科學計算庫的使用)基礎定位 機器學習概述 機器學習概述 1.5 機器學習算法分類 1 監(jiān)督學習 機器學習概述 1.7 Azure機器學習模型搭建實驗 Azure平臺簡介 Matplotlib 3.2 基礎繪圖功能 — 以折線圖為例 1 完善原始折線圖 — 給圖形添加輔助功能 Matplotlib 3.3 常見圖形繪制 1 常見圖形種類及意義 Numpy 4.2 N維數(shù)組-ndarray 1 ndarray的屬性 Numpy 4.4 ndarray運算 問題 Pandas 5.1Pandas介紹 1 Pandas介紹 Pandas 5.3 基本數(shù)據(jù)操作 1 索引操作 Pandas 5.6 文件讀取與存儲 1 CSV Pandas 5.8 高級處理-數(shù)據(jù)離散化 1 為什么要離散化 Pandas 5.12 案例 1 需求
完整筆記資料代碼->:https://gitee.com/yinuo112/AI/tree/master/機器學習/嘿馬機器學習(科學計算庫)/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
Matplotlib
學習目標
- 應用Matplotlib的基本功能實現(xiàn)圖形顯示
- 應用Matplotlib實現(xiàn)多圖顯示
- 應用Matplotlib實現(xiàn)不同畫圖種類
3.3 常見圖形繪制
學習目標
-
目標
- 掌握常見統(tǒng)計圖及其意義
Matplotlib能夠繪制折線圖干跛、散點圖、柱狀圖、直方圖沽一、餅圖郁岩。
我們需要知道不同的統(tǒng)計圖的意義卸亮,以此來決定選擇哪種統(tǒng)計圖來呈現(xiàn)我們的數(shù)據(jù)。
1 常見圖形種類及意義
- 折線圖:以折線的上升或下降來表示統(tǒng)計數(shù)量的增減變化的統(tǒng)計圖
特點:能夠顯示數(shù)據(jù)的變化趨勢倚舀,反映事物的變化情況细睡。(變化)
api:plt.plot(x, y)
- 散點圖:用兩組數(shù)據(jù)構成多個坐標點谷羞,考察坐標點的分布,判斷兩變量之間是否存在某種關聯(lián)或總結坐標點的分布模式。
特點:判斷變量之間是否存在數(shù)量關聯(lián)趨勢,展示離群點(分布規(guī)律)
api:plt.scatter(x, y)
- 柱狀圖:排列在工作表的列或行中的數(shù)據(jù)可以繪制到柱狀圖中溜徙。
特點:繪制連離散的數(shù)據(jù),能夠一眼看出各個數(shù)據(jù)的大小,比較數(shù)據(jù)之間的差別洒宝。(統(tǒng)計/對比)
api:plt.bar(x, width, align='center', **kwargs)
Parameters:
x : 需要傳遞的數(shù)據(jù)
width : 柱狀圖的寬度
align : 每個柱狀圖的位置對齊方式
{‘center’, ‘edge’}, optional, default: ‘center’
**kwargs :
color:選擇柱狀圖的顏色
- 直方圖:由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。 一般用橫軸表示數(shù)據(jù)范圍萌京,縱軸表示分布情況雁歌。
特點:繪制連續(xù)性的數(shù)據(jù)展示一組或者多組數(shù)據(jù)的分布狀況(統(tǒng)計)
api:matplotlib.pyplot.hist(x, bins=None)
Parameters:
x : 需要傳遞的數(shù)據(jù)
bins : 組距
- 餅圖:用于表示不同分類的占比情況,通過弧度大小來對比各種分類知残。
特點:分類數(shù)據(jù)的占比情況(占比)
api:plt.pie(x, labels=,autopct=,colors)
Parameters:
x:數(shù)量靠瞎,自動算百分比
labels:每部分名稱
autopct:占比顯示指定%1.2f%%
colors:每部分顏色
2 散點圖繪制
需求:探究房屋面積和房屋價格的關系
房屋面積數(shù)據(jù):
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]
房屋價格數(shù)據(jù):
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
代碼:
# 0.準備數(shù)據(jù)
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
# 1.創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制散點圖
plt.scatter(x, y)
# 3.顯示圖像
plt.show()
3 柱狀圖繪制
需求-對比每部電影的票房收入
電影數(shù)據(jù)如下圖所示:
- 準備數(shù)據(jù)
['雷神3:諸神黃昏','正義聯(lián)盟','東方快車謀殺案','尋夢環(huán)游記','全球風暴', '降魔傳','追捕','七十七天','密戰(zhàn)','狂獸','其它']
[73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
- 繪制柱狀圖
代碼:
# 0.準備數(shù)據(jù)
# 電影名字
movie_name = ['雷神3:諸神黃昏','正義聯(lián)盟','東方快車謀殺案','尋夢環(huán)游記','全球風暴','降魔傳','追捕','七十七天','密戰(zhàn)','狂獸','其它']
# 橫坐標
x = range(len(movie_name))
# 票房數(shù)據(jù)
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 1.創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制柱狀圖
plt.bar(x, y, width=0.5, color=['b','r','g','y','c','m','y','k','c','g','b'])
# 2.1b修改x軸的刻度顯示
plt.xticks(x, movie_name)
# 2.2 添加網(wǎng)格顯示
plt.grid(linestyle="--", alpha=0.5)
# 2.3 添加標題
plt.title("電影票房收入對比")
# 3.顯示圖像
plt.show()
參考鏈接:
[
4 小結
-
折線圖【知道】
- 能夠顯示數(shù)據(jù)的變化趨勢,反映事物的變化情況。(變化)
- plt.plot()
-
散點圖【知道】
- 判斷變量之間是否存在數(shù)量關聯(lián)趨勢,展示離群點(分布規(guī)律)
- plt.scatter()
-
柱狀圖【知道】
- 繪制連離散的數(shù)據(jù),能夠一眼看出各個數(shù)據(jù)的大小,比較數(shù)據(jù)之間的差別乏盐。(統(tǒng)計/對比)
- plt.bar(x, width, align="center")
-
直方圖【知道】
- 繪制連續(xù)性的數(shù)據(jù)展示一組或者多組數(shù)據(jù)的分布狀況(統(tǒng)計)
- plt.hist(x, bins)
-
餅圖【知道】
- 用于表示不同分類的占比情況佳窑,通過弧度大小來對比各種分類
- plt.pie(x, labels, autopct, colors)
Numpy
學習目標
- 了解Numpy運算速度上的優(yōu)勢
- 知道數(shù)組的屬性,形狀父能、類型
- 應用Numpy實現(xiàn)數(shù)組的基本操作
- 應用隨機數(shù)組的創(chuàng)建實現(xiàn)正態(tài)分布應用
- 應用Numpy實現(xiàn)數(shù)組的邏輯運算
- 應用Numpy實現(xiàn)數(shù)組的統(tǒng)計運算
- 應用Numpy實現(xiàn)數(shù)組之間的運算
4.1 Numpy優(yōu)勢
學習目標
-
目標
- 了解Numpy運算速度上的優(yōu)勢
- 知道Numpy的數(shù)組內(nèi)存塊風格
- 知道Numpy的并行化運算
1 Numpy介紹
Numpy(Numerical Python)是一個開源的Python科學計算庫神凑,用于快速處理任意維度的數(shù)組。
Numpy支持常見的數(shù)組和矩陣操作何吝。對于同樣的數(shù)值計算任務溉委,使用Numpy比直接使用Python要簡潔的多。
Numpy使用ndarray對象來處理多維數(shù)組爱榕,該對象是一個快速而靈活的大數(shù)據(jù)容器瓣喊。
2 ndarray介紹
NumPy provides an N-dimensional array type, the ndarray,
which describes a collection of “items” of the same type.
NumPy提供了一個N維數(shù)組類型ndarray,它描述了相同類型的“items”的集合黔酥。
用ndarray進行存儲:
import numpy as np
# 創(chuàng)建ndarray
score = np.array(
[[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
score
返回結果:
array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
提問:
使用Python列表可以存儲一維數(shù)組藻三,通過列表的嵌套可以實現(xiàn)多維數(shù)組,那么為什么還需要使用Numpy的ndarray呢跪者?
3 ndarray與Python原生list運算效率對比
在這里我們通過一段代碼運行來體會到ndarray的好處
import random
import time
import numpy as np
a = []
for i in range(100000000):
a.append(random.random())
# 通過%time魔法方法, 查看當前行的代碼運行一次所花費的時間
%time sum1=sum(a)
b=np.array(a)
%time sum2=np.sum(b)
其中第一個時間顯示的是使用原生Python計算時間,第二個內(nèi)容是使用numpy計算時間:
CPU times: user 852 ms, sys: 262 ms, total: 1.11 s
Wall time: 1.13 s
CPU times: user 133 ms, sys: 653 μs, total: 133 ms
Wall time: 134 ms
從中我們看到ndarray的計算速度要快很多棵帽,節(jié)約了時間。
機器學習的最大特點就是大量的數(shù)據(jù)運算渣玲,那么如果沒有一個快速的解決方案岖寞,那可能現(xiàn)在python也在機器學習領域達不到好的效果。
Numpy專門針對ndarray的操作和運算進行了設計柜蜈,所以數(shù)組的存儲效率和輸入輸出性能遠優(yōu)于Python中的嵌套列表,數(shù)組越大指巡,Numpy的優(yōu)勢就越明顯淑履。
思考:
ndarray為什么可以這么快?
4 ndarray的優(yōu)勢
4.1 內(nèi)存塊風格
ndarray到底跟原生python列表有什么不同呢藻雪,請看一張圖:
從圖中我們可以看出ndarray在存儲數(shù)據(jù)的時候秘噪,數(shù)據(jù)與數(shù)據(jù)的地址都是連續(xù)的,這樣就給使得批量操作數(shù)組元素時速度更快勉耀。
這是因為ndarray中的所有元素的類型都是相同的指煎,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時內(nèi)存可以連續(xù)便斥,而python原生list就只能通過尋址方式找到下一個元素至壤,這雖然也導致了在通用性能方面Numpy的ndarray不及Python原生list,但在科學計算中枢纠,Numpy的ndarray就可以省掉很多循環(huán)語句像街,代碼使用方面比Python原生list簡單的多。
4.2 ndarray支持并行化運算(向量化運算)
numpy內(nèi)置了并行運算功能,當系統(tǒng)有多個核心時镰绎,做某種計算時脓斩,numpy會自動做并行計算
4.3 效率遠高于純Python代碼
Numpy底層使用C語言編寫,內(nèi)部解除了GIL(全局解釋器鎖)畴栖,其對數(shù)組的操作速度不受Python解釋器的限制随静,所以,其效率遠高于純Python代碼吗讶。
5 小結
-
numpy介紹【了解】
- 一個開源的Python科學計算庫
- 計算起來要比python簡潔高效
- Numpy使用ndarray對象來處理多維數(shù)組
-
ndarray介紹【了解】
- NumPy提供了一個N維數(shù)組類型ndarray燎猛,它描述了相同類型的“items”的集合。
- 生成numpy對象:np.array()
-
ndarray的優(yōu)勢【掌握】
-
內(nèi)存塊風格
- list -- 分離式存儲,存儲內(nèi)容多樣化
- ndarray -- 一體式存儲,存儲類型必須一樣
ndarray支持并行化運算(向量化運算)
ndarray底層是用C語言寫的,效率更高,釋放了GIL
-