本教程的知識點為:機器學習(常用科學計算庫的使用)基礎(chǔ)定位 機器學習概述 機器學習概述 1.5 機器學習算法分類 1 監(jiān)督學習 機器學習概述 1.7 Azure機器學習模型搭建實驗 Azure平臺簡介 Matplotlib 3.2 基礎(chǔ)繪圖功能 — 以折線圖為例 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 需求
倉庫里完整資料代碼:
博客文章1: http://www.reibang.com/p/f82881b822e6
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
Matplotlib
學習目標
- 應用Matplotlib的基本功能實現(xiàn)圖形顯示
- 應用Matplotlib實現(xiàn)多圖顯示
- 應用Matplotlib實現(xiàn)不同畫圖種類
3.2 基礎(chǔ)繪圖功能 — 以折線圖為例
學習目標
-
目標
掌握給圖形添加輔助功能(如:標注产镐、x,y軸名稱、標題等)
知道圖形的保存
知道如何多次plot繪制圖形
知道如何多個坐標系顯示圖形
知道折線圖的應用場景
1 完善原始折線圖 — 給圖形添加輔助功能
為了更好地理解所有基礎(chǔ)繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎(chǔ)API使用
需求:畫出某城市11點到12點1小時內(nèi)每分鐘的溫度變化折線圖,溫度范圍在15度~18度
效果:
1.1 準備數(shù)據(jù)并畫出初始折線圖
import matplotlib.pyplot as plt
import random
# 畫出溫度變化圖
# 0.準備x, y坐標的數(shù)據(jù)
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)
# 2.繪制折線圖
plt.plot(x, y_shanghai)
# 3.顯示圖像
plt.show()
1.2 添加自定義x,y刻度
- plt.xticks(x, **kwargs)
x:要顯示的刻度值
- plt.yticks(y, **kwargs)
y:要顯示的刻度值
# 增加以下兩行代碼
# 構(gòu)造x軸刻度標簽
x_ticks_label = ["11點{}分".format(i) for i in x]
# 構(gòu)造y軸刻度
y_ticks = range(40)
# 修改x,y軸坐標的刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
如果沒有解決過中文問題的話县貌,會顯示這個樣子:
1.3 中文顯示問題解決
解決方案一:
下載中文字體(黑體潦刃,看準系統(tǒng)版本)
步驟一:下載 SimHei 字體(或者其他的支持中文顯示的字體也行)
-
步驟二:安裝字體
- linux下:拷貝字體到 usr/share/fonts 下:
sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
* windows和mac下:雙擊安裝
* 步驟三:刪除~/.matplotlib中的緩存文件
```python
cd ~/.matplotlib
rm -r *
- 步驟四:修改配置文件matplotlibrc
vi ~/.matplotlib/matplotlibrc
將文件內(nèi)容修改為:
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode_minus : False
解決方案二:
在Python腳本中動態(tài)設(shè)置matplotlibrc,這樣也可以避免由于更改配置文件而造成的麻煩,具體代碼如下:
from pylab import mpl
# 設(shè)置顯示中文字體
mpl.rcParams["font.sans-serif"] = ["SimHei"]
有時候肚吏,字體更改后吮蛹,會導致坐標軸中的部分字符無法正常顯示荤崇,此時需要更改axes.unicode_minus參數(shù):
# 設(shè)置正常顯示符號
mpl.rcParams["axes.unicode_minus"] = False
1.4 添加網(wǎng)格顯示
為了更加清楚地觀察圖形對應的值
plt.grid(True, linestyle='--', alpha=0.5)
1.5 添加描述信息
添加x軸、y軸描述信息及標題
通過fontsize參數(shù)可以修改圖像中字體的大小
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點0分到12點之間的溫度變化圖示", fontsize=20)
1.6 圖像保存
# 保存圖片到指定路徑
plt.savefig("test.png")
- 注意:plt.show()會釋放figure資源潮针,如果在顯示圖像之后保存圖片將只能保存空圖片术荤。
完整代碼:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 設(shè)置顯示中文字體
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 設(shè)置正常顯示符號
mpl.rcParams["axes.unicode_minus"] = False
# 0.準備數(shù)據(jù)
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制圖像
plt.plot(x, y_shanghai)
# 2.1 添加x,y軸刻度
# 構(gòu)造x,y軸刻度標簽
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加網(wǎng)格顯示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
# 2.4 圖像保存
plt.savefig("./test.png")
# 3.圖像顯示
plt.show()
2 在一個坐標系中繪制多個圖像
2.1 多次plot
需求:再添加一個城市的溫度變化
收集到北京當天溫度變化情況,溫度在1度到3度每篷。怎么去添加另一個在同一坐標系當中的不同圖形瓣戚,其實很簡單只需要再次plot即可,但是需要區(qū)分線條焦读,如下顯示
# 增加北京的溫度數(shù)據(jù)
y_beijing = [random.uniform(1, 3) for i in x]
# 繪制折線圖
plt.plot(x, y_shanghai)
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--')
我們仔細觀察子库,用到了兩個新的地方,一個是對于不同的折線展示效果矗晃,一個是添加圖例仑嗅。
2.2 設(shè)置圖形風格
顏色字符 | 風格字符 |
---|---|
r 紅色 | - 實線 |
g 綠色 | - - 虛線 |
b 藍色 | -. 點劃線 |
w 白色 | : 點虛線 |
c 青色 | ' ' 留空、空格 |
m 洋紅 | |
y 黃色 | |
k 黑色 |
2.3 顯示圖例
- 注意:如果只在plt.plot()中設(shè)置label還不能最終顯示出圖例,還需要通過plt.legend()將圖例顯示出來仓技。
# 繪制折線圖
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
# 顯示圖例
plt.legend(loc="best")
Location String | Location Code |
---|---|
'best' | 0 |
'upper right' | 1 |
'upper left' | 2 |
'lower left' | 3 |
'lower right' | 4 |
'right' | 5 |
'center left' | 6 |
'center right' | 7 |
'lower center' | 8 |
'upper center' | 9 |
'center' | 10 |
完整代碼:
# 0.準備數(shù)據(jù)
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 1.創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制圖像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y軸刻度
# 構(gòu)造x,y軸刻度標簽
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加網(wǎng)格顯示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
# 2.4 圖像保存
plt.savefig("./test.png")
# 2.5 添加圖例
plt.legend(loc=0)
# 3.圖像顯示
plt.show()
2.4 練一練
練習多次plot流程(從上面復制代碼,到自己電腦,確保每人環(huán)境可以正常運行),
同時明確每個過程執(zhí)行實現(xiàn)的具體效果
3 多個坐標系顯示— plt.subplots(面向?qū)ο蟮漠媹D方法)
如果我們想要將上海和北京的天氣圖顯示在同一個圖的不同坐標系當中鸵贬,效果如下:
可以通過subplots函數(shù)實現(xiàn)(舊的版本中有subplot,使用起來不方便)脖捻,推薦subplots函數(shù)
- matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 創(chuàng)建一個帶有多個axes(坐標系/繪圖區(qū))的圖
Parameters:
nrows, ncols : 設(shè)置有幾行幾列坐標系
int, optional, default: 1, Number of rows/columns of the subplot grid.
Returns:
fig : 圖對象
axes : 返回相應數(shù)量的坐標系
設(shè)置標題等方法不同:
set_xticks
set_yticks
set_xlabel
set_ylabel
關(guān)于axes子坐標系的更多方法:參考[
- 注意:plt.函數(shù)名()相當于面向過程的畫圖方法阔逼,axes.set_方法名()相當于面向?qū)ο蟮漠媹D方法。
# 0.準備數(shù)據(jù)
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]
# 1.創(chuàng)建畫布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.繪制圖像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y軸刻度
# 構(gòu)造x,y軸刻度標簽
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度顯示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
# 2.2 添加網(wǎng)格顯示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
# plt.xlabel("時間")
# plt.ylabel("溫度")
# plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[0].set_xlabel("時間")
axes[0].set_ylabel("溫度")
axes[0].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[1].set_xlabel("時間")
axes[1].set_ylabel("溫度")
axes[1].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
# # 2.4 圖像保存
plt.savefig("./test.png")
# # 2.5 添加圖例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3.圖像顯示
plt.show()
4 折線圖的應用場景
呈現(xiàn)公司產(chǎn)品(不同區(qū)域)每天活躍用戶數(shù)
呈現(xiàn)app每天下載數(shù)量
呈現(xiàn)產(chǎn)品新功能上線后,用戶點擊次數(shù)隨時間的變化
-
拓展:畫各種數(shù)學函數(shù)圖像
- 注意:plt.plot()除了可以畫折線圖地沮,也可以用于畫各種數(shù)學函數(shù)圖像
代碼:
import numpy as np
# 0.準備數(shù)據(jù)
x = np.linspace(-10, 10, 1000)
y = np.sin(x)
# 1.創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制函數(shù)圖像
plt.plot(x, y)
# 2.1 添加網(wǎng)格顯示
plt.grid()
# 3.顯示圖像
plt.show()
5 小結(jié)
-
添加x,y軸刻度【知道】
- plt.xticks()
- plt.yticks()
- 注意:在傳遞進去的第一個參數(shù)必須是數(shù)字,不能是字符串,如果是字符串嗎,需要進行替換操作
-
添加網(wǎng)格顯示【知道】
- plt.grid(linestyle="--", alpha=0.5)
-
添加描述信息【知道】
- plt.xlabel()
- plt.ylabel()
- plt.title()
-
圖像保存【知道】
- plt.savefig("路徑")
-
多次plot【了解】
- 直接進行添加就OK
-
顯示圖例【知道】
- plt.legend(loc="best")
- 注意:一定要在plt.plot()里面設(shè)置一個label,如果不設(shè)置,沒法顯示
-
多個坐標系顯示【了解】
- plt.subplots(nrows=, ncols=)
-
折線圖的應用【知道】
- 1.應用于觀察數(shù)據(jù)的變化
- 2.可是畫出一些數(shù)學函數(shù)圖像