維度爆炸?Python實現數據壓縮如此簡單

2020-08-16 AI科技大本營

作者 | 蘿蔔

來源 | 早起Python(ID: zaoqi-python)

用Python基於主成分分析常見的三個應用場景中,其中有一個是「數據描述」,以描述產品情況為例,比如著名的波士頓矩陣,子公司業務發展狀況,區域投資潛力等,需要將多變量壓縮到少數幾個主成分進行描述,壓縮到兩個主成分是最理想的,這樣便可在一張圖內表現出來。

但這類分析一般做主成分分析是不充分的,能夠做到因子分析更好。但因子分析的知識點非常龐雜,所以本文將跳過原理,直接通過案例再次「實戰PCA分析」,用於主成分分析到因子分析的一個過渡,目標有兩個:

  • 能夠通過主成分分析結果來估計生成的主成分所表示的含義

  • 藉以引出因子分析的優勢和學習的必要性是本文的目標

需求說明

公司希望從事數據分析崗位的你僅用兩個短句就概括出以下數據集所反映出的經濟現象。

用幾個長句都不一定能夠很好的描述數據集的價值,更何況高度凝練的兩個短句,短短九個指標就已經十分讓人頭疼了,如果表格再寬一些呢,比如有二三十個變量?

Python實戰

本節我們將使用Python對上面的數據進行分析。

數據探索

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'})

解決保存圖像是負號'-'顯示為方塊的問題

sns.set(font='SimHei') annot=True: 顯示數字

發現變量間的相關性較高,有變量壓縮的必要性

PCA建模

數據標準化

使用中心標準化,即將變量都轉化成z分數的形式,避免量綱問題對壓縮造成影響

from sklearn.preprocessing import scale

data = df.drop(columns='area') 直接與變量個數相同的主成分

pca.fit(data)

結果分析

累積解釋變異程度

直接與變量個數相同的主成分

pca.fit(data)

pca.explained_variance_ratio_

new_data = pca.fit_transform(data) 查看規模差別

print("原始數據集規模: ", data.shape)

print("降維後的數據集規模:", new_data.shape)

可以看到9個變量壓縮成兩個主成分!

主成分中各變量的權重分析

先看兩個主成分與 9 個變量的係數關係

results = pd.DataFrame(pca.components_).T

results.columns = ['pca_1', 'pca_2']

results.index = df.drop(columns='area').columns

results

可以明顯看出:

  • 主成分1幾乎不受data的第二個自變量人均GDP的影響,0.034,其他自變量對其影響程度都差不多。

  • 主成分2受data的第二個自變量人均GDP影響最大,達到了0.94

結果描述

通過上面的PCA建模,我們把9個自變量壓縮成了2 主成分,每個主成分受哪些變量的影響也有了了解。雖然得到的主成分都沒有什麼意義,但我們是否可以通過變量們對主成分的影響程度來為生成的兩個主成分命名呢?

第一個主成分在表達經濟總量的指標上的權重相當,可考慮命名為經濟總量水平;而第二個主成分只在人均GDP上權重很高,可暫時考慮命名為人均水平

注意:這裡的給主成分命名(包括後續有關因子分析的推文)都是對降維後的數據進行的,而不是生成的主成分,這樣才有比較和描述的價值。每個自變量在生成的主成分上的權重只是給這個主成分的命名提供參考,真正的命名操作是對壓縮後的數據進行。

new_data = pca.fit_transform(data) new_data 是降維後的數據

columns=['經濟總量水平', '人均水平'])) 基礎散點圖

x, y = results['經濟總量水平'], results['人均水平']

label = results['area']

plt.scatter(x, y)

plt.xlabel('經濟總量水平'); plt.ylabel('人均水平')

添加兩條豎線

plt.vlines(x=results['經濟總量水平'].mean,

ymin=-1.5, ymax=3, colors='red')

plt.hlines(y=results['人均水平'].mean,

xmin=-4, xmax=6, colors='red')

最終從上圖可以看出:

  • 廣西,河北,福建三地的人均水平和經濟總量水平都偏低

  • 上海的人均經濟水平很高,但經濟總量水平缺只是略優於均值

  • 廣東的人均經濟水平稍次於均值,但經濟總量水平很高

  • ......

小結

本文講解了基於主成分分析的樣本特徵描述,並使用Python示範了完整的流程。其中,也對由多個自變量生成的主成分的命名描述操作中需要注意的點作了比較詳細的說明。其實PCA並不能非常好的滿足維度分析的需求,能夠做到「因子分析」最好,它是主成分方法的拓展,作為維度分析的手段,因子分析也是構造合理的聚類模型和穩健的分類模型的必然步驟。

Python商業數據挖掘自動化系列代碼及數據已經上傳GitHub,如有需要可以自行下載:「https://github.com/liuhuanshuo/zaoqi-Python/tree/master/商業數據分析實戰」。

相關焦點

  • 維度爆炸?Python實現數據壓縮如此簡單
    作者 | 蘿蔔用Python基於主成分分析常見的三個應用場景中,其中有一個是「數據描述」,以描述產品情況為例,比如著名的波士頓矩陣,子公司業務發展狀況,區域投資潛力等,需要將多變量壓縮到少數幾個主成分進行描述,壓縮到兩個主成分是最理想的,這樣便可在一張圖內表現出來。
  • Python暴力破解Mysql數據
    今天來分享python學習的一個小例子,使用python暴力破解mysql資料庫,實現方式是通過UI類庫tkinter實現可視化面板效果,在面板中輸入資料庫連接的必要信息,如主機地址、埠號、資料庫名稱、用戶名 、密碼等,通過提交事件將信息傳遞給方法,在方法中調用字典進行破解,破解方式為多次撞擊資料庫連接,python中對資料庫的操作,我們使用pymysql類庫
  • JPEG2000數據壓縮的FPGA實現
    摘要:高性能的數據壓縮可以有效的減少數據對存儲空間和通信帶寬的要求,降低通信成本。為解決圖像數據的高壓縮性能問題,本文提出了基於JPEG2000標準的數據壓縮系統的FPGA實現方案。
  • Python字典的內部實現:數據結構哈希表
    散列表(哈希表、Hash Table)是基本的數據結構之一,綜合了數組和鍊表的優點,平均情況下,在查找、刪除、插入操作上,都能實現O(1)的複雜度。本文介紹哈希表的內部基本原理:hash()函數的設計和衝突的解決;並簡單介紹python內部dict的實現。
  • 10 個加速python數據分析的簡單小技巧
    作者:Parul Pandey來源:SQL資料庫開發一些小的技巧在編程領域可能會非常有用,在數據科學領域同樣如此1.Profiling the pandas dataframeProfiling 是一個幫助我們理解數據的程序,而 Pandas Profiling 正是實現這一點的一個 python 包。
  • 利用Python基礎代碼語句,實現2G時代文字小遊戲,世界如此簡單!
    曾經流量很少,響應很快,時間很慢,一天可以升幾十級,今天和小狐醬一起利用python製作一款超級簡單的文字小遊戲,一同回到2G文字遊戲時代吧!一、作為一款文字遊戲,想要吸引人眼球,那麼界面美觀就是第一步,我們先來製作一個打開遊戲的第一幕。
  • 使用python實現一個簡單計算器
    如果做一些簡單的界面,使用tkinter還是很方便的,畢竟是python自帶的庫。今天將會做下面這樣的一個計算器,可以實現基本的加減程序的運算,整體代碼邏輯比較簡單,主要是一個回調函數的理解。實現思路1.UI界面布局2.功能函數實現3.重構布局代碼4.按鈕回調函數綁定具體實現過程1.界面實現
  • Python 簡單實現貪吃蛇小遊戲
    文章目錄1. pygame庫的簡介2. pygame庫的安裝3. python代碼實現貪吃蛇小遊戲4. pyinstaller打包成exe私信小編01即可獲取Python學習資料pygame庫的安裝命令行pip安裝,換國內源pip install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com3. python
  • 利用Python基礎代碼語句,實現2G時代文字小遊戲,世界如此簡單
    曾經流量很少,響應很快,時間很慢,一天可以升幾十級,今天和小狐醬一起利用python製作一款超級簡單的文字小遊戲,一同回到2G文字遊戲時代吧!1、這裡我們使用if函數,就可以簡單進行內容的輸出,如果用戶輸入「1」,那麼就會輸出player==1後面所列印的內容(這裡列印了兩行,是為了顯示更簡潔,當然也可以使用錢脈提到的三單引號進行)。2、如果用戶沒有輸入的內容不等於1,那麼輸入2的話,就會顯示eilf==2後面的內容。
  • Python數據分析實戰—單維度分析+維度交叉分析,用一份數據掌握
    數據集及源碼已打包連結:https://pan.baidu.com/s/1gHvqxJCJC5W0nLvCO0QXtQ 提取碼:8suc前一陣有個字節跳動的程式設計師火了,年僅28歲實現了財務自由,宣布提前退休。最直接的原因是選擇了一家發展前景很好的創業公司。當然平時我們經常能聽到,某某人加入創業公司,xx年後公司上市,身價暴漲,財務自由。
  • 淺析從技術方面對數據爬蟲的實現方式:python,爬蟲程序利器
    淺析爬蟲技術,獲取數據的一把利器,程式設計師值得擁有。 網際網路上有著無數的網頁,包含著海量的信息,無孔不入、森羅萬象。但很多時候,無論出於數據分析或產品需求,我們需要從某些網站,提取出我們感興趣、有價值的內容,但是縱然是進化到21世紀的人類,依然只有兩隻手,一雙眼,不可能去每一個網頁去點去看,然後再複製粘貼。
  • 圖解 Numpy,原來數據操作這麼簡單
    在機器學習應用中,經常會這樣:某個模型對輸入形狀的要求與你的數據集不同。在這些情況下,NumPy 的 reshape() 方法就可以發揮作用了。只需將矩陣所需的新維度賦值給它即可。再多維度NumPy 可以在任意維度實現上述提到的所有內容。
  • 音頻數據增強及python實現
    我們在進行數據增強時,最好只做一些小改動,使得增強數據和源數據存在較小差異即可,切記不能改變原有數據的結構,不然將產生「髒數據」,通過對音頻數據進行數據增強,能有助於我們的模型避免過度擬合併變得更加通用。
  • 「Python」numpy之random庫簡單的隨機數據實例
    0|引言在python數據分析的學習和應用過程中,經常需要用到numpy的隨機函數,由於隨機函數random的功能比較多,經常會混淆或記不住,下面進行匯總並一一實例學習。本篇主要總結簡單的隨機資料庫的生產,主要常用的函數有np.random.rand()、.randint()、.randn()、.random()等.
  • Python實現的簡單TCP網絡棧
    可以使用它來獲取網頁,實現了curl基本功能!它建立在scapy(Scapy在Linux上本機運行,並且在大多數使用libpcap及其python包裝器的Unix上運行)之上,它負責所有數據包的解析和構造。並實際處理髮送和接收數據包。
  • 零基礎小白Python如何實現數據可視化,乾貨分享
    首先小編在這裡給大家講一下什麼叫數據可視化!、群體事件的分析;電商、消費品行業數字的滾動大屏;影視行業的票房、評價、熒幕維度等分析;……數據方便了我們的工作和生活,而數據可視化正是將數據簡化、從中提取規律的利器,所以掌握數據可視化的能力絕對是職場中最重要的核心競爭力之一。
  • 今天破解了壓縮文件的密碼:使用python輕鬆編寫破解程序
    獲取ZIP文件解壓密碼今天傑瑞又閒著無事可幹,索性去做了一個非常簡單且實用的一個python小程序,這個程序破解獲得zip加密文件的密碼。獲取zip文件解壓密碼的思路是使用窮舉法去「試」出真實密碼。傑瑞今天就教大家如何使用python去破解得到zip文件的解壓密碼,僅需要不到20行代碼即可完成全部功能。
  • python編程監聽手機操作,控制手機操作如此簡單
    我們知道python是用c語言開發的腳本程序,對於一些需求不大的功能還是很容易寫的,而且效率較C+更簡單寫,不用去在乎各種語法的困繞,讓一些即使沒有編程基礎的人也很容易學會。那麼今天我們就利用python腳本編程,來實現對手機的通信,控制手機的過程。
  • 大神用Python破解了壓縮文件zip密碼,省了250塊錢
    他懷著激動的心情打開了這個壓縮文件這可咋辦,看不到文件內容心裡賊難受,過了一會某大神靈光一閃,終於記起來自己是個python>那麼只要讀取這些密碼挨個去解壓就 ok,首先使用 ZipFile 打開要破解的壓縮文件
  • Python爬取股票信息,並實現可視化數據
    前言截止2019年年底我國股票投資者數量為15975.24萬戶, 如此多的股民熱衷於炒股,首先拋開炒股技術不說, 那麼多股票數據是不是非常難找, 找到之後是不是看著密密麻麻的數據是不是頭都大了?今天帶大家爬取雪球平臺的股票數據, 並且實現數據可視化先看下效果圖