iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 14
0

在處理資料時我們總是會希望資料以最好懂的方式呈現,但若照我們以往的處理方式再怎麼樣排版也都是文字輸出,如果將資料畫成圖表不是可以更清楚的呈現嗎?今天我就來介紹一個資料視覺畫的基礎模組 matplotlib


創建虛擬環境與安裝套件

pipenv --python 3.7
pipenv shell
pipenv install matplotlib

繪製散佈圖的方法:傳入一個 list 的 dataset

import matplotlib.pyplot as plt

data1 = [1.0,2.5,3.5,4.8,9.5,13.5]
data2 = [1,2,3,4,5,6]

# X軸數據 Y軸數據
plt.scatter(data2, data1)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190930/20120282TEtmNfcx5e.jpg

繪製折線圖,把scatter改成plot即可

import matplotlib.pyplot as plt

data1 = [1.0,2.5,3.5,4.8,9.5,13.5]
data2 = [1,2,3,4,5,6]

# X軸數據 Y軸數據
plt.plot(data2, data1)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190930/20120282Y3scbEDTWc.jpg

繪製直方圖

import matplotlib.pyplot as plt

data = [1.0,2.5,3.5,4.8,9.5,13.5,5.3,2.5,7.4,9.5]

plt.hist(data, width=0.5)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190930/20120282h50kEKQ5oX.jpg

繪製盒鬚圖

import matplotlib.pyplot as plt

data = [1.0,2.5,3.5,4.8,9.5,13.5,5.3,2.5,7.4,9.5]

plt.boxplot(data)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190930/20120282vVCPwBv8Sj.jpg

繪製圓餅圖

import matplotlib.pyplot as plt

data = [1.0,2.5,3.5,4.8]

plt.pie(data)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190930/201202821sFrCsUtiB.jpg

實際應用 Python 執行快速傅立葉轉換並繪製成圖表

程式修改來源:https://www.itread01.com/article/1532154074.html

import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import random
#import seaborn
 
def urandom():
    return random.randint(100,2000)
 
#取樣點選擇1400個,因為設定的訊號頻率分量最高為600赫茲,根據取樣定理知取樣頻率要大於訊號頻率2倍,所以這裡設定取樣頻率為1400赫茲(即一秒內有1400個取樣點,一樣意思的)
x=np.linspace(0,1,4000) 
 
#設定需要取樣的訊號,頻率分量有180,390和600
#y=7*np.sin(2*np.pi*180*x) + 2.8*np.sin(2*np.pi*390*x)+5.1*np.sin(2*np.pi*600*x)+6.2*np.sin(2*np.pi*751*x)
y=7*np.sin(2*np.pi*urandom()*x) + 2.8*np.sin(2*np.pi*urandom()*x)+5.1*np.sin(2*np.pi*urandom()*x)+6.2*np.sin(2*np.pi*urandom()*x)
#y=7*np.sin(2*np.pi*urandom()*x)
 
yy=fft(y)      #快速傅立葉變換
yreal = yy.real    # 獲取實數部分
yimag = yy.imag    # 獲取虛數部分
 
yf=abs(fft(y))    # 取絕對值
yf1=abs(fft(y))/len(x)   #歸一化處理
yf2 = yf1[range(int(len(x)/2))] #由於對稱性,只取一半區間
 
xf = np.arange(len(y))  # 頻率
xf1 = xf
xf2 = xf[range(int(len(x)/2))] #取一半區間
 
plt.subplot(221)
plt.plot(x[0:50],y[0:50])
plt.title('Original wave')
 
plt.subplot(222)
plt.plot(xf,yf,'r')
plt.title('FFT of Mixed wave(two sides frequency range)',fontsize=7,color='#7A378B') #注意這裡的顏色可以查詢顏色程式碼表
 
plt.subplot(223)
plt.plot(xf1,yf1,'g')
plt.title('FFT of Mixed wave(normalization)',fontsize=9,color='r')
 
plt.subplot(224)
plt.plot(xf2,yf2,'b')
plt.title('FFT of Mixed wave',fontsize=10,color='#F08080')

count = 0
for i in yf2:
    if(i > 0.7):
        print(xf2.item(count))
    count += 1
    
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190930/20120282RIwRuu21fT.jpg

延伸閱讀
https://matplotlib.org/
https://ithelp.ithome.com.tw/articles/10186484
https://www.itread01.com/article/1532154074.html
https://blog.techbridge.cc/2018/05/11/python-data-science-and-machine-learning-matplotlib-tutorial/


上一篇
Day13-網路爬蟲實作II selenium 模擬瀏覽器
下一篇
Day15-Python Line 整合應用 -- Line Notify
系列文
原來電腦可以這樣用!? 果蠅也懂的程式語言教學30

尚未有邦友留言

立即登入留言