您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Python如何實(shí)現(xiàn)數(shù)據(jù)壓縮”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在之前的文章中,我們已經(jīng)詳細(xì)介紹了主成分分析的原理,并用Python基于主成分分析的客戶信貸評(píng)級(jí)進(jìn)行實(shí)戰(zhàn)。
在那篇文章中我們指出的主成分分析常見的三個(gè)應(yīng)用場(chǎng)景中,其中有一個(gè)是「數(shù)據(jù)描述」,以描述產(chǎn)品情況為例,比如著名的波士頓矩陣,子公司業(yè)務(wù)發(fā)展?fàn)顩r,區(qū)域投資潛力等,需要將多變量壓縮到少數(shù)幾個(gè)主成分進(jìn)行描述,壓縮到兩個(gè)主成分是最理想的,這樣便可在一張圖內(nèi)表現(xiàn)出來。
但這類分析一般做主成分分析是不充分的,能夠做到因子分析更好。但因子分析的知識(shí)點(diǎn)非常龐雜,所以本文將跳過原理,直接通過案例再次「實(shí)戰(zhàn)PCA分析」,用于主成分分析到因子分析的一個(gè)過渡,目標(biāo)有兩個(gè):
上司希望從事數(shù)據(jù)分析崗位的你僅用兩個(gè)短句就概括出以下數(shù)據(jù)集所反映出的經(jīng)濟(jì)現(xiàn)象用幾個(gè)長(zhǎng)句都不一定能夠很好的描述數(shù)據(jù)集的價(jià)值,更何況高度凝練的兩個(gè)短句,短短九個(gè)指標(biāo)就已經(jīng)十分讓人頭疼了,如果表格再寬一些呢,比如有二三十個(gè)變量?
本節(jié)我們將使用Python對(duì)上面的數(shù)據(jù)進(jìn)行分析
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
plt.rc('font', **{'family': 'Microsoft YaHei, SimHei'})
# 設(shè)置中文字體的支持
plt.rcParams['axes.unicode_minus'] = False
# 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題
sns.set(font='SimHei') # 解決Seaborn中文顯示問題
df = pd.read_csv('城市經(jīng)濟(jì).csv')
df
在做主成分分析前,都應(yīng)該進(jìn)行變量間相關(guān)性的探索,畢竟如果變量是獨(dú)立的,則不可壓縮。
plt.figure(figsize=(8, 6))
sns.heatmap(data=df.corr(), annot=True) # annot=True: 顯示數(shù)字
發(fā)現(xiàn)變量間的相關(guān)性較高,有變量壓縮的必要性
使用中心標(biāo)準(zhǔn)化,即將變量都轉(zhuǎn)化成z分?jǐn)?shù)
的形式,避免量綱問題對(duì)壓縮造成影響
from sklearn.preprocessing import scale
data = df.drop(columns='area') # 丟棄無用的類別變量
data = scale(data)
需要說明的是第一次的n_components
參數(shù)最好設(shè)置得大一些(保留的主成份),觀察explained_variance_ratio_
取值變化,即每個(gè)主成分能夠解釋原始數(shù)據(jù)變異的百分比
from sklearn.decomposition import PCA
pca = PCA(n_components=9) # 直接與變量個(gè)數(shù)相同的主成分
pca.fit(data)
# 累積解釋變異程度
plt.plot(np.cumsum(pca.explained_variance_ratio_), linewidth=3)
plt.xlabel('成份數(shù)')
plt.ylabel('累積解釋方差'); plt.grid(True)
可以看出,當(dāng)取主成分?jǐn)?shù)為2時(shí),累積解釋方差就已經(jīng)達(dá)到0.97有多(0.85 就已經(jīng)足夠),說明我們只需要取兩個(gè)主成分即可
綜上可知兩個(gè)主成分就已經(jīng)足夠了
pca = PCA(n_components=2) # 直接與變量個(gè)數(shù)相同的主成分
pca.fit(data)
pca.explained_variance_ratio_
new_data = pca.fit_transform(data) # fit_transform 表示將生成降維后的數(shù)據(jù)
# 查看規(guī)模差別
print("原始數(shù)據(jù)集規(guī)模: ", data.shape)
print("降維后的數(shù)據(jù)集規(guī)模:", new_data.shape)
可以看到9個(gè)變量壓縮成兩個(gè)主成分!
先看兩個(gè)主成分與 9 個(gè)變量的系數(shù)關(guān)系
results = pd.DataFrame(pca.components_).T
results.columns = ['pca_1', 'pca_2']
results.index = df.drop(columns='area').columns
results
可以明顯看出:
人均GDP
的影響,0.034,其他自變量對(duì)其影響程度都差不多。人均GDP
影響最大,達(dá)到了0.94通過上面的PCA建模,我們把9個(gè)自變量壓縮成了2 主成分,每個(gè)主成分受哪些變量的影響也有了了解。雖然得到的主成分都沒有什么意義,但我們是否可以通過變量們對(duì)主成分的影響程度來為生成的兩個(gè)主成分命名呢?
第一個(gè)主成分在表達(dá)經(jīng)濟(jì)總量的指標(biāo)上的權(quán)重相當(dāng),可考慮命名為經(jīng)濟(jì)總量水平
;而第二個(gè)主成分只在人均GDP上權(quán)重很高,可暫時(shí)考慮命名為人均水平
注意:這里的給主成分命名(包括后續(xù)有關(guān)因子分析的推文)都是對(duì)降維后的數(shù)據(jù)進(jìn)行的,而不是生成的主成分,這樣才有比較和描述的價(jià)值。每個(gè)自變量在生成的主成分上的權(quán)重只是給這個(gè)主成分的命名提供參考,真正的命名操作是對(duì)壓縮后的數(shù)據(jù)進(jìn)行。
new_data = pca.fit_transform(data) # fit_transform 表示將生成降維后的數(shù)據(jù)
results = df.join(pd.DataFrame(new_data, # new_data 是降維后的數(shù)據(jù)
columns=['經(jīng)濟(jì)總量水平', '人均水平'])) # 與原來的數(shù)據(jù)拼接
results
繪制波士頓矩陣,這里的散點(diǎn)圖的點(diǎn)標(biāo)注代碼是前人的優(yōu)秀輪子,直接拿來用即可。
plt.figure(figsize=(10, 8))
# 基礎(chǔ)散點(diǎn)圖
x, y = results['經(jīng)濟(jì)總量水平'], results['人均水平']
label = results['area']
plt.scatter(x, y)
plt.xlabel('經(jīng)濟(jì)總量水平'); plt.ylabel('人均水平')
# 對(duì)散點(diǎn)圖中的每一個(gè)點(diǎn)進(jìn)行文字標(biāo)注
## 固定代碼,無需深究,拿來即用
## 給點(diǎn)標(biāo)注是需要將 x 和 y 以及標(biāo)簽如上段代碼那樣單獨(dú)拆開
for a,b,l in zip(x,y,label):
plt.text(a, b+0.1, '%s.' % l, ha='center', va='bottom', fontsize=14)
# 添加兩條豎線
plt.vlines(x=results['經(jīng)濟(jì)總量水平'].mean(),
ymin=-1.5, ymax=3, colors='red')
plt.hlines(y=results['人均水平'].mean(),
xmin=-4, xmax=6, colors='red')
最終從上圖可以看出:
“Python如何實(shí)現(xiàn)數(shù)據(jù)壓縮”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。