iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
AI & Data

人類學習機器學習的學習筆記 with Python系列 第 3

Day3 利用Python處理資料(2) -- 使用Matplotlib資料視覺化(Data Visualization)

  • 分享至 

  • xImage
  •  

前言

在資料分析前後都需要有視覺化的幫忙,將資料或模型的結果換一個方式來有效率地呈現其中的資訊,使其他人能更容易理解資料的模式、趨勢以及找出異常值。最基本的視覺化方式是利用統計圖表來呈現資料,例如長條圖(Bar Plot)、箱形圖(Box Plot)、直方圖(Histogram)與散步圖(Scatter Plot)等。今天將討論的Python套件Matplotlib是常被拿來進行視覺化的工具。

匯入Numpy與Matplotlib

import numpy as np
import matplotlib.pyplot as plt

基本語法

  • 將資料放入函數plt.plot()畫圖,接著以plt.show()呈現圖形
x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x))
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276qlhkvWxToP.png

  • 想要圖形中有許多線條,可呼叫多次plt.plot()
x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276P00XDOBvNL.png

  • 繪製多個子圖plt.subplot()
x = np.linspace(0, 10, 100)

plt.subplot(2, 1, 1) #(列, 欄, 第幾張圖)
plt.plot(x, np.sin(x))

plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x))
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276IyASS1EEkj.png

  • 調整線條顏色與樣式
x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x), color = "red", linestyle = "dashed")
# 也可以使用plt.plot(x, np.sin(x), "--r")
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276ekYIJYjUTG.png

  • 調整Axes範圍
x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x))
plt.xlim(2, 9)
plt.ylim(-2, 2) #若想把y軸反向顯示,可將參數順序反過來
# 以上兩行也可以使用plt.axis([2, 9, -2, 2])
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276IjljPhAMCO.png

  • 加上圖表標籤
x = np.linspace(0, 10, 100)

plt.style.use("seaborn-whitegrid")       #變更圖表樣式
plt.plot(x, np.sin(x), "-")
plt.axis("equal")                        #使x的單位等於y的單位
plt.title("A Sine Curve", fontsize = 12) #fontsize調整字型大小
plt.xlabel("x")                          #加上x軸標籤
plt.ylabel("sin(x)")                     #加上y軸標籤

plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276uZomScFmYN.png

統計圖表

  • 散佈圖(Scatter Plot)
xpt = [1, 2, 3, 4, 5]
ypt = [1, 4, 7, 16, 25]

plt.xticks(xpt)                         #設定x軸刻度
plt.text(3, 8, "Hi")
plt.scatter(xpt, ypt, s = 15, c = "r")  #s點的大小、c為顏色
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276GiFpfdhwCu.png

  • 長條圖(Bar Plot)
votes = [150, 400, 380]                     #得票數
N = len(votes)                              #計算長度
x = np.arange(N)                            #長條圖x軸做鰾
width = 0.35                                #長條圖寬度
plt.bar(x, votes, width)

plt.ylabel("The number of votes")
plt.title("The Election Results")
plt.xticks(x, ("James", "Peter", "Norton"))
plt.yticks(np.arange(0, 450, 30))
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276POVXMl7BNk.png

  • 直方圖(Histogram)
data = np.random.randn(1000)
plt.hist(data, bins = 100, color = "m") #bins可想成組別個數
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276Zf17j7Fc1Y.png

  • 圓餅圖(Pie Chart)
sorts = ["Travel", "Entertainment", "Eduction", "Transporation", "Food"]
fee = [8000, 2000, 3000, 5000, 6000]

plt.pie(fee, labels = sorts, explode = (0, 0.3, 0, 0, 0), autopct = "%1.2f%%")
# explode可將圓餅圖分離、autopct表示百分比格式
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276M2FdV2PA9N.png

幾個iris資料集的例子

  • 連續型變數的直方圖
urlprefix = 'https://vincentarelbundock.github.io/Rdatasets/csv/' 
dataname = 'datasets/iris.csv'
iris = pd.read_csv(urlprefix + dataname)
iris = iris.drop("Unnamed: 0", 1)

iris.hist(bins = 15, figsize=(12,10))
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276o6smZgZELa.png

  • 對角線為各個變數的直方圖,非對角線的部分為變數兩兩之間的散佈圖
from pandas.plotting import scatter_matrix
attributes = ["Sepal.Length", "Sepal.Width", "Petal.Length","Petal.Width"]
scatter_matrix(iris[attributes], figsize=(13, 8))
plt.show()

https://ithelp.ithome.com.tw/upload/images/20220823/20151276XdfaVB66h1.png

常用函數整理

  • 繪製圖表常用函數:
函數名稱 說明
plot() 繪製折線圖
scatter() 繪製散佈圖
bar() 繪製長條圖
hist() 繪製直方圖
pie() 繪製圓餅圖
  • 圖表參數設定常用函數
函數名稱 說明
title(標題) 設定圖表標題
axis() 設定座標軸範圍
xlim(min, max) 設定x軸範圍
ylim(min, max) 設定y軸範圍
label(名稱) 設定圖表標籤圖例
legend() 設定座標圖例
xlabel(名稱) 設定x軸名稱
ylabel(名稱) 設定y軸名稱
xticks(刻度值) 設定x軸刻度值
yticks(刻度值) 設定y軸刻度值
tick_params() 設定座標軸刻度大小及顏色
text() 在指定位置輸出字串
show() 顯示圖表

上一篇
Day2 利用Python處理資料(1) -- 匯入資料與摘要統計
下一篇
Day4 利用Python處理資料(3)--訓練集(training set)與測試集(testing set)
系列文
人類學習機器學習的學習筆記 with Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言