發表於 資料科學分析Python

【資料科學】Python PCA 降維分析 Feat. 豬肉食品營養素分析

在這一篇想要紀錄一下我在【資料科學】這門課學到的一切!

這一篇我不是使用一般常用的分析資料,我是使用 美國農業部 的營養資料來玩 PCA 分析的~ (就是不喜歡拿一堆人都玩爛的資料來玩 ㄌㄩㄝ~

在這篇會介紹到 PCA 或記錄下我在這堂課學到的概念等等
那~ 就開始吧!
( 當然,資料我會放在下方連結供大家練習喔! )

  • 資料介紹
  • PCA 原理介紹
  • 拿資料實戰分析囉~

資料介紹:

就像開始介紹的一樣,這篇使用到的資料是來自於美國農業署(USDA)的營養資料

我選擇的是使用 Pork Product ( 豬肉製品 )
要分析的營養素的有下面三種

  1. 維他命 C 每 100 克含量 (Vitamin C, total ascorbic acid(mg)Per 100 g)
  2. 蛋白質每 100 克含量 (Protein(g)Per 100 g)
  3. 水分每 100 克含量 (Water(g)Per 100 g)

給你們看一下資料的樣貌

資料樣貌

為了等等的分析,先來引入需要用到的套件吧!

import pandas as pd

import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")

Pandas 用於讀取和操控資料
sklearn 是用於分析使用
matplotlib 當然是用來繪圖阿!! 不然拿來吃飯嗎( 喂! 兇屁阿XD
seaborn 是用來美化圖片的
我自己繪圖時通常都會使用它來美化~ 喜歡漂亮一點的畫面!

接下來我們把資料讀進來吧!

DATA_COLUMNS_NAME = ["Vitamin C, total ascorbic acid(mg)Per 100 g","Protein(g)Per 100 g","Water(g)Per 100 g"]  # 有分析資料的 column names

df = pd.read_csv("./nutrition.csv")

接下來就來介紹一下我的 PCA 筆記啦!

PCA 原理介紹:

PCA 主成分分析,主要是使用投影的方式找到多維度資料中哪一個維度對資料的影響比較大

我們人類或許對2維或3維的資料很直覺( 可能可以馬上發現最有影響力的 feature )
但是在很高維的情況下我們沒辦法迅速的理解資料的狀況
所以我們這時候可以使用 PCA 把資料的維度降到 2 或 3 或其他的低維度
以便我們理解。

像以下圖為例,長軸就會是主成分
原因有兩種:

  1. 長軸離所有的資料距離都比較近
  2. 所有的點投影到長軸後,距離比較大,也代表者可以讓資料分離的比較明顯、變異數比較大
PCA 主成分分析舉例

拿資料實戰分析囉~ :

在上課中有提到,其實資料拿來分析前要做 Standerize 會比較好 ( 但是我做完後發像好像沒有影響耶(?) 還在研究為什麼
至於 Standerize 的做法就會像下面這樣
選取資料放入 StandardScaler

X = df.loc[:, DATA_COLUMNS_NAME].values
X = StandardScaler().fit_transform(X)

接下來就直接來實戰吧!

pca = PCA(n_components=2)
data_pca = pca.fit_transform(X)

OK! 結束XD 就這麼簡單!!
不過我們來看看到底分析出了什麼!

如果把 pca.components_ print 出來的話會發現這樣的二維矩陣
這代表什麼呢?

array([[ 0.46985337, -0.79057205, -0.39272591],
[ 0.67924782, 0.03964553, 0.73283738]])

我們一開始就有三個 Feature : 維他命C、蛋白質和水分 ( 照順序 )
這就是 pca.components_ 的 X 軸
而第一列就是主成分的參數
第二列就是第二主成分的參數

從這兩列一維陣列就可以觀察出一點端倪
像是:
主成分來說,我們可以發現當維他命C成分含量高時 蛋白質和水分就會很低 ( 因為他們差異很大 )
或是
第二主成分來說維他命C或是水分的重要程度相對重要!

我們可以從這些的特徵向量( 主成分權重 ) 看出 Feature 之間的關係!

下圖是把 data_pca 畫出來的樣子
X 軸是 PC1 主成分
Y 軸是 PC2 第二主成分

根據剛剛的介紹我們可以大概理解越上方的點 ( 豬肉食品 ) 代表著
維他命C成分含量高、蛋白質和水分就會很低 或
維他命C成分含量低、蛋白質和水分就會很高

而越右邊的點 ( 豬肉食品 ) 代表著
維他命C或是水分相對比較高!

檔案的話我就放在這裡給大家下載自己玩玩看囉!

有下載的也在下方留言跟我說一聲喔!!!
歡迎大家跟我分享用這資料製作的研究~

結尾:

那這篇就到這裡結束啦!
不知道大家覺得怎麼樣呢?
這學期我有學到的演算法或是一些分析的概念我都會上來 PO 文的~
畢竟為自己的學習歷程紀錄一下以免未來忘記也不錯啊~

有什麼想法或是想要說的都可以在下面留言喔!
那就這樣啦~

ㄅㄅ

作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料