溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-23 09:48:02 來(lái)源:億速云 閱讀:172 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

數(shù)據(jù)預(yù)處理

數(shù)據(jù)預(yù)處理一方面是要提高數(shù)據(jù)的質(zhì)量,另一方面是要讓 數(shù)據(jù)更好地適應(yīng)特定的挖掘技術(shù)或工具。統(tǒng)計(jì)發(fā)現(xiàn),在數(shù)據(jù)挖掘的過(guò)程中,數(shù)據(jù)預(yù)處理工作量占到了整個(gè)過(guò)程的60%。

4.1、數(shù)據(jù)清洗

數(shù)據(jù)清洗主要是刪除原始數(shù)據(jù)集中的無(wú)關(guān)數(shù) 據(jù)、重復(fù)數(shù)據(jù),平滑噪聲數(shù)據(jù),篩選掉與挖掘主 題無(wú)關(guān)的數(shù)據(jù),處理缺失值、異常值等。

4.1.1、缺失值處理

處理缺失值的方法可分為3類(lèi):刪除記錄、 數(shù)據(jù)插補(bǔ)和不處理。其中常用的數(shù)據(jù)插補(bǔ)方法

表4-1常用的插補(bǔ)方法

插補(bǔ)方法方法描述
均值/中位數(shù)/眾數(shù)插補(bǔ)根據(jù)屬性值的類(lèi)型,用該屬性取值的平均數(shù)/中位數(shù)/眾數(shù)進(jìn)行插補(bǔ)
使用固定值將缺失的屬性值用一個(gè)常量替換。如廣州一個(gè)工廠(chǎng)普通外來(lái)務(wù)工人員的“基本工資”屬性的空缺值可以用2015年廣州市普通外來(lái)務(wù)工人員工資標(biāo)準(zhǔn)1895元/月,該 方法就是使用固定值
最近臨插補(bǔ)在記錄中找到與缺失樣本最接近的樣本的該屬性值插補(bǔ)
回歸方法對(duì)帶有缺失值的變量,根據(jù)已有數(shù)據(jù)和與其有關(guān)的其他變量(因變量)的數(shù)據(jù)建立擬合模型來(lái)預(yù)測(cè)缺失的屬性值
插值法插值法是利用已知點(diǎn)建立合適的插值函數(shù)f(x),未知值由對(duì)應(yīng)點(diǎn)X,求出的函數(shù)值f(xi),近似代替

如果通過(guò)簡(jiǎn)單的刪除小部分記錄達(dá)到既定的目標(biāo),那么刪除含有缺失值的記錄的方法是最有效的。然而,這種方法卻有很大的局限性。它是以減少歷史數(shù)據(jù)來(lái)?yè)Q取數(shù)據(jù)的完備,會(huì)造成資源的大量浪費(fèi),將丟棄了大量隱藏在這些記錄中的信息。尤其在數(shù)據(jù)集本來(lái)就包含很少記錄的情況下,刪除少量記錄可能會(huì)嚴(yán)重影響到分析結(jié)果的客觀性和正確性。一些模型可以將缺失值視作一種特殊的取值,允許直接在含有缺失值的數(shù)據(jù)上進(jìn)行建模。

本節(jié)重點(diǎn)介紹拉格朗日插值法和牛頓插值法。其他的插值方法還有Hermite插值、分段插值、樣條插值法等。

牛頓插值法也是多項(xiàng)式插值,但采用了另一種構(gòu)造插值多項(xiàng)式的方法,與拉格朗日插值相比,具有承襲性和易于變動(dòng)節(jié)點(diǎn)的特點(diǎn)。從本質(zhì)上來(lái)說(shuō),兩者給出的結(jié)果是一樣的(相同 次數(shù)、相同系數(shù)的多項(xiàng)式),只不過(guò)表示的形式不同。因此,在Python的Scipy庫(kù)中,只提 供了拉格朗日插值法的函數(shù)(因?yàn)閷?shí)現(xiàn)上比較容易),如果需要牛頓插值法,則需要自行編寫(xiě)

代碼清單4-1,用拉格朗日法進(jìn)行插補(bǔ)

# -*- coding:utf-8 -*-
#拉格朗日插值代碼
import pandas as pd #導(dǎo)入數(shù)據(jù)分析庫(kù)Pandas
from scipy.interpolate import lagrange #導(dǎo)入拉格朗日插值函數(shù)

inputfile = '../data/catering_sale.xls' #銷(xiāo)量數(shù)據(jù)路徑
outputfile = '../tmp/sales.xls' #輸出數(shù)據(jù)路徑

data = pd.read_excel(inputfile) #讀入數(shù)據(jù)
data[u'銷(xiāo)量'][(data[u'銷(xiāo)量'] < 400) | (data[u'銷(xiāo)量'] > 5000)] = None #過(guò)濾異常值,將其變?yōu)榭罩?

#自定義列向量插值函數(shù)
#s為列向量,n為被插值的位置,k為取前后的數(shù)據(jù)個(gè)數(shù),默認(rèn)為5
def ployinterp_column(s, n, k=5):
    y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數(shù)
    y = y[y.notnull()] #剔除空值
    return lagrange(y.index, list(y))(n) #插值并返回插值結(jié)果

#逐個(gè)元素判斷是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if (data[i].isnull())[j]: #如果為空即插值。
            data[i][j] = ployinterp_column(data[i], j)

data.to_excel(outputfile) #輸出結(jié)果,寫(xiě)入文件
4.1.1、異常值處理

在數(shù)據(jù)預(yù)處理時(shí),異常值是否剔除,需視具體情況而定,因?yàn)橛行┊惓V悼赡芴N(yùn)含著有 用的信息。異常值處理常用方法見(jiàn)表4-3。

表4-3異常值處理常用方法

異常值處理方法方法描述
刪除含有異常值的記錄直接將含有異常值的記錄刪除
視為缺失值將異常值視為缺失值,利用缺失值處理的方法進(jìn)行處理
平均值修正可用前后兩個(gè)觀測(cè)值的平均值修正該異常值
不處理直接在具有異常值的數(shù)據(jù)集上進(jìn)行挖掘建模

4.2、數(shù)據(jù)集成

數(shù)據(jù)挖掘需要的數(shù)據(jù)往往分布在不同的數(shù)據(jù)源中,數(shù)據(jù)集成就是將多個(gè)數(shù)據(jù)源合并存放 在一個(gè)一致的數(shù)據(jù)存儲(chǔ)(如數(shù)據(jù)倉(cāng)庫(kù))中的過(guò)程。

在數(shù)據(jù)集成時(shí),來(lái)自多個(gè)數(shù)據(jù)源的現(xiàn)實(shí)世界實(shí)體的表達(dá)形式是不一樣的,有可能不匹配,要考慮實(shí)體識(shí)別問(wèn)題和屬性冗余問(wèn)題,從而將源數(shù)據(jù)在最低層上加以轉(zhuǎn)換、提煉和集成。

4.2.1、實(shí)體識(shí)別

實(shí)體識(shí)別是指從不同數(shù)據(jù)源識(shí)別出現(xiàn)實(shí)世界的實(shí)體,它的任務(wù)是統(tǒng)一不同源數(shù)據(jù)的矛盾之處,常見(jiàn)形式如下。

(1 )同名異義
數(shù)據(jù)源A中的屬性ID和數(shù)據(jù)源B中的屬性ID分別描述的是菜品編號(hào)和訂單編號(hào),即 描述的是不同的實(shí)體。

(2) 異名同義
數(shù)據(jù)源A中的sales_dt和數(shù)據(jù)源B中的sales_date都是描述銷(xiāo)售日期的,即A. sales_dt= B. sales_date。

(3 )單位不統(tǒng)一

描述同一個(gè)實(shí)體分別用的是國(guó)際單位和中國(guó)傳統(tǒng)的計(jì)量單位。
檢測(cè)和解決這些沖突就是實(shí)體識(shí)別的任務(wù)。

4.2.2、冗余屬性識(shí)別

數(shù)據(jù)集成往往導(dǎo)致數(shù)據(jù)冗余,例如,

  1. 同一屬性多次出現(xiàn);

  2. 同一屬性命名不一致導(dǎo)致重復(fù)。

4.3、數(shù)據(jù)變換

數(shù)據(jù)變換主要是對(duì)數(shù)據(jù)進(jìn)行規(guī)范化處理,將數(shù)據(jù)轉(zhuǎn)換成“適當(dāng)?shù)摹毙问?,以適用于挖掘任務(wù)及算法的需要。

4.3.1、簡(jiǎn)單函數(shù)變換

簡(jiǎn)單函數(shù)變換是對(duì)原始數(shù)據(jù)進(jìn)行某些數(shù)學(xué)函數(shù)變換,常用的變換包括平方、開(kāi)方、取對(duì)數(shù)、差分運(yùn)算等。

簡(jiǎn)單的函數(shù)變換常用來(lái)將不具有正態(tài)分布的數(shù)據(jù)變換成具有正態(tài)分布的數(shù)據(jù)。

4.3.2、規(guī)范化

數(shù)據(jù)規(guī)范化(歸一化)處理是數(shù)據(jù)挖掘的一項(xiàng)基礎(chǔ)工作。不同評(píng)價(jià)指標(biāo)往往具有不同的量綱,數(shù)值間的差別可能很大,不進(jìn)行處理可能會(huì)影響到數(shù)據(jù)分析的結(jié)果。為了消除指標(biāo)之間的量綱和取值范圍差異的影響,需要進(jìn)行標(biāo)準(zhǔn)化處理,將數(shù)據(jù)按照比例進(jìn)行縮放,使之落 入一個(gè)特定的區(qū)域,便于進(jìn)行綜合分析。如將工資收入屬性值映射到[-1,1]或者[0,1]內(nèi)。

數(shù)據(jù)規(guī)范化對(duì)于基于距離的挖掘算法尤為重要。

(1)最小-最大規(guī)范化
最小-最大規(guī)范化也稱(chēng)為離差標(biāo)準(zhǔn)化,是對(duì)原始數(shù)據(jù)的線(xiàn)性變換,將數(shù)值值映射到[0,1]之間。

(2 )零-均值規(guī)范化
零-均值規(guī)范化也稱(chēng)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化,經(jīng)過(guò)處理的數(shù)據(jù)的均值為0,標(biāo)準(zhǔn)差為1。是當(dāng)前用得最多的數(shù)據(jù)標(biāo)準(zhǔn)化方法。

(3) 小數(shù)定標(biāo)規(guī)范化
通過(guò)移動(dòng)屬性值的小數(shù)位數(shù),將屬性值映射到[-1,1]之間,移動(dòng)的小數(shù)位數(shù)取決于屬性值絕對(duì)值的最大值。

代碼清單4-2數(shù)據(jù)規(guī)范化代碼

#-*- coding: utf-8 -*-
#數(shù)據(jù)規(guī)范化
import pandas as pd
import numpy as np

datafile = '../data/normalization_data.xls' #參數(shù)初始化
data = pd.read_excel(datafile, header = None) #讀取數(shù)據(jù)

(data - data.min())/(data.max() - data.min()) #最小-最大規(guī)范化
(data - data.mean())/data.std() #零-均值規(guī)范化
data/10**np.ceil(np.log10(data.abs().max())) #小數(shù)定標(biāo)規(guī)范化
4.3.3、連續(xù)屬性離散化

一些數(shù)據(jù)挖掘算法,特別是某些分類(lèi)算法(如ID3算法、Apriori算法等),要求數(shù)據(jù)是 分類(lèi)屬性形式。這樣,常常需要將連續(xù)屬性變換成分類(lèi)屬性,即連續(xù)屬性離散化。

  1. 離散化的過(guò)程

連續(xù)屬性的離散化就是在數(shù)據(jù)的取值范圍內(nèi)設(shè)定若干個(gè)離散的劃分點(diǎn),將取值范圍劃分為一些離散化的區(qū)間,最后用不同的符號(hào)或整數(shù)值代表落在每個(gè)子區(qū)間中的數(shù)據(jù)值。所以, 離散化涉及兩個(gè)子任務(wù):確定分類(lèi)數(shù)以及如何將連續(xù)屬性值映射到這些分類(lèi)值。

  1. 常用的離散化方法

常用的離散化方法有等寬法、等頻法和(一維)聚類(lèi)。

(1 )等寬法
將屬性的值域分成具有相同寬度的區(qū)間,區(qū)間的個(gè)數(shù)由數(shù)據(jù)本身的特點(diǎn)決定,或者由用 戶(hù)指定,類(lèi)似于制作頻率分布表。

(2 )等頻法
將相同數(shù)量的記錄放進(jìn)每個(gè)區(qū)間。

這兩種方法簡(jiǎn)單,易于操作,但都需要人為地規(guī)定劃分區(qū)間的個(gè)數(shù)。同時(shí),等寬法的缺點(diǎn)在于它對(duì)離群點(diǎn)比較敏感,傾向于不均勻地把屬性值分布到各個(gè)區(qū)間。有些區(qū)間包含許多數(shù)據(jù),而另外一些區(qū)間的數(shù)據(jù)極少,這樣會(huì)嚴(yán)重?fù)p壞建立的決策模型。等頻法雖然避免了上述問(wèn)題的產(chǎn)生,卻可能將相同的數(shù)據(jù)值分到不同的區(qū)間以滿(mǎn)足每個(gè)區(qū)間中固定的數(shù)據(jù)個(gè)數(shù)。

(3)基于聚類(lèi)分析的方法
一維聚類(lèi)的方法包括兩個(gè)步驟,首先將連續(xù)屬性的值用聚類(lèi)算法(如K-Means算法)進(jìn) 行聚類(lèi),然后再將聚類(lèi)得到的簇進(jìn)行處理,合并到一個(gè)簇的連續(xù)屬性值并做同一標(biāo)記。聚類(lèi)分析的離散化方法也需要用戶(hù)指定簇的個(gè)數(shù),從而決定產(chǎn)生的區(qū)間數(shù)。

代碼清單4-3數(shù)據(jù)離散化

#-*- coding: utf-8 -*-
#數(shù)據(jù)規(guī)范化
import pandas as pd

datafile = '../data/discretization_data.xls' #參數(shù)初始化
data = pd.read_excel(datafile) #讀取數(shù)據(jù)
data = data[u'肝氣郁結(jié)證型系數(shù)'].copy()
k = 4

d1 = pd.cut(data, k, labels = range(k)) #等寬離散化,各個(gè)類(lèi)比依次命名為0,1,2,3

#等頻率離散化
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1] #使用describe函數(shù)自動(dòng)計(jì)算分位數(shù)
w[0] = w[0]*(1-1e-10)
d2 = pd.cut(data, w, labels = range(k))


def cluster_plot(d, k): #自定義作圖函數(shù)來(lái)顯示聚類(lèi)結(jié)果
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用來(lái)正常顯示中文標(biāo)簽
    plt.rcParams['axes.unicode_minus'] = False #用來(lái)正常顯示負(fù)號(hào)

    plt.figure(figsize = (8, 3))
    for j in range(0, k):
        plt.plot(data[d==j], [j for i in d[d==j]], 'o')

    plt.ylim(-0.5, k-0.5)
    return plt


if __name__=='__main__':
    from sklearn.cluster import KMeans  # 引入KMeans

    kmodel = KMeans(n_clusters=k, n_jobs=4)  # 建立模型,n_jobs是并行數(shù),一般等于CPU數(shù)較好
    kmodel.fit(data.values.reshape((len(data), 1)))  # 訓(xùn)練模型
    c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0)  # 輸出聚類(lèi)中心,并且排序(默認(rèn)是隨機(jī)序的)
    w = c.rolling(2).mean().iloc[1:]  # 相鄰兩項(xiàng)求中點(diǎn),作為邊界點(diǎn)
    w = [0] + list(w[0]) + [data.max()]  # 把首末邊界點(diǎn)加上
    d3 = pd.cut(data, w, labels=range(k))

    cluster_plot(d1, k).show()
    cluster_plot(d2, k).show()
    cluster_plot(d3, k).show()
  • 等寬離散化結(jié)果
    python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些

  • 等頻離散化結(jié)果
    python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些

  • (一維)聚類(lèi)離散化結(jié)果
    python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些

4.3.4、屬性構(gòu)造

在數(shù)據(jù)挖掘的過(guò)程中,為了提取更有用的信息,挖掘更深層次的模式,提高挖掘結(jié)果的 精度,我們需要利用已有的屬性集構(gòu)造出新的屬性,并加入到現(xiàn)有的屬性集合中。

代碼清單4-4線(xiàn)損率屬性構(gòu)造

#-*- coding: utf-8 -*-
#線(xiàn)損率屬性構(gòu)造
import pandas as pd

#參數(shù)初始化
inputfile= '../data/electricity_data.xls' #供入供出電量數(shù)據(jù)
outputfile = '../tmp/electricity_data.xls' #屬性構(gòu)造后數(shù)據(jù)文件

data = pd.read_excel(inputfile) #讀入數(shù)據(jù)
data[u'線(xiàn)損率'] = (data[u'供入電量'] - data[u'供出電量'])/data[u'供入電量']

data.to_excel(outputfile, index = False) #保存結(jié)果
4.3.5、小波變換

小波變換的同是一種新型的數(shù)據(jù)分析工具,是近年來(lái)興起的信號(hào)分析手段。小波分析的理論和方法在信號(hào)處理、圖像處理、語(yǔ)音處理、模式識(shí)別、量子物理等領(lǐng)域得到越來(lái)越廣泛的應(yīng)用,它被認(rèn)為是近年來(lái)在工具及方法上的重大突破。小波變換具有多分辨率的特點(diǎn),在 時(shí)域和頻域都具有表征信號(hào)局部特征的能力,通過(guò)伸縮和平移等運(yùn)算過(guò)程對(duì)信號(hào)進(jìn)行多尺度 聚焦分析,提供了一種非平穩(wěn)信號(hào)的時(shí)頻分析手段,可以由粗及細(xì)地逐步觀察信號(hào),從中提取有用信息。

能夠刻畫(huà)某個(gè)問(wèn)題的特征量往往是隱含在一個(gè)信號(hào)中的某個(gè)或者某些分量中,小波變換 可以把非平穩(wěn)信號(hào)分解為表達(dá)不同層次、不同頻帶信息的數(shù)據(jù)序列,即小波系數(shù)。選取適當(dāng)?shù)男〔ㄏ禂?shù),即完成了信號(hào)的特征提取。下面將介紹基于小波變換的信號(hào)特征提取方法。

(1)基于小波變換的特征提取方法
基于小波變換的特征提取方法主要有:基于小波變換的多尺度空間能量分布特征提取、 基于小波變換的多尺度空間的模極大值特征提取、基于小波包變換的特征提取、基于適應(yīng)性小波神經(jīng)網(wǎng)絡(luò)的特征提取,詳見(jiàn)表4-5。

表4-5基于小波變換的特征提取方法

基于小波變換的特征提取方法方法描述
基于小波變換的多尺度空間 能量分布特征提取方法各尺度空間內(nèi)的平滑信號(hào)和細(xì)節(jié)信號(hào)能提供原始信號(hào)的時(shí)頻局域信息,特別 是能提供不同頻段上信號(hào)的構(gòu)成信息。把不同分解尺度上信號(hào)的能量求解出來(lái), 就可以將這些能量尺度順序排列,形成特征向量供識(shí)別用
基于小波變換的多尺度空間 的模極大值特征提取方法利用小波變換的信號(hào)局域化分析能力,求解小波變換的模極大值特性來(lái)檢測(cè) 信號(hào)的局部奇異性,將小波變換模極大值的尺度參數(shù)S、平移參數(shù),及其幅值作 為目標(biāo)的特征量
基于小波包變換的特征提取 方法利用小波分解,可將時(shí)域隨機(jī)信號(hào)序列映射為尺度域各子空間內(nèi)的隨機(jī)系數(shù) 序列,按小波包分解得到的最佳子空間內(nèi)隨機(jī)系數(shù)序列的不確定性程度最低, 將最佳子空間的嫡值及最佳子空間在完整二叉樹(shù)中的位置參數(shù)作為特征量,可 以用于目標(biāo)識(shí)別
基于適應(yīng)性小波神經(jīng)網(wǎng)絡(luò)的 特征提取方法基于適應(yīng)性小波神經(jīng)網(wǎng)絡(luò)的特征提取方法可以把信號(hào)通過(guò)分析小波擬合表示, 進(jìn)行特征提取

利用小波變換可以對(duì)聲波信號(hào)進(jìn)行特征提取,提取出可以代表聲波信號(hào)的向量數(shù)據(jù),即完成從聲波信號(hào)到特征向量數(shù)據(jù)的變換。

在Python中,Scipy本身提供了一些信號(hào)處理函數(shù),但不夠全面, 而更好的信號(hào)處理庫(kù)是PyWavelets (pywt)。

代碼清單4-5,小波變換特征提取代碼

#-*- coding: utf-8 -*-
#利用小波分析進(jìn)行特征分析

#參數(shù)初始化
inputfile= '../data/leleccum.mat' #提取自Matlab的信號(hào)文件

from scipy.io import loadmat #mat是MATLAB專(zhuān)用格式,需要用loadmat讀取它
mat = loadmat(inputfile)
signal = mat['leleccum'][0]

import pywt #導(dǎo)入PyWavelets
coeffs = pywt.wavedec(signal, 'bior3.7', level = 5)
#返回結(jié)果為level+1個(gè)數(shù)字,第一個(gè)數(shù)組為逼近系數(shù)數(shù)組,后面的依次是細(xì)節(jié)系數(shù)數(shù)組

4.4、數(shù)據(jù)規(guī)約

在大數(shù)據(jù)集上進(jìn)行復(fù)雜的數(shù)據(jù)分析和挖掘需要很長(zhǎng)的時(shí)間,數(shù)據(jù)規(guī)約產(chǎn)生更小但保持原數(shù)據(jù)完整性的新數(shù)據(jù)集。在規(guī)約后的數(shù)據(jù)集上進(jìn)行分析和挖掘?qū)⒏行省?/p>

數(shù)據(jù)規(guī)約的意義在于:

  • 降低無(wú)效、錯(cuò)誤數(shù)據(jù)對(duì)建模的影響,提高建模的準(zhǔn)確性;

  • 少量且具代表性的數(shù)據(jù)將大幅縮減數(shù)據(jù)挖掘所需的時(shí)間;

  • 降低儲(chǔ)存數(shù)據(jù)的成本。

4.4.1、屬性規(guī)約

屬性規(guī)約通過(guò)屬性合并來(lái)創(chuàng)建新屬性維數(shù),或者直接通過(guò)刪除不相關(guān)的屬性(維)來(lái)減少數(shù)據(jù)維數(shù),從而提高數(shù)據(jù)挖掘的效率、降低計(jì)算成本。屬性規(guī)約的目標(biāo)是尋找出最小的屬性子集并確保新數(shù)據(jù)子集的概率分布盡可能地接近原來(lái)數(shù)據(jù)集的概率分布。

python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些

逐步向前選擇、逐步向后刪除和決策樹(shù)歸納是屬于直接刪除不相關(guān)屬性(維)方法。主成分分析是一種用于連續(xù)屬性的數(shù)據(jù)降維方法,它構(gòu)造了原始數(shù)據(jù)的一個(gè)正交變換,新空間的基底去除了原始空間基底下數(shù)據(jù)的相關(guān)性,只需使用少數(shù)新變量就能夠解釋原始數(shù)據(jù)中的 大部分變異。在應(yīng)用中,通常是選出比原始變量個(gè)數(shù)少,能解釋大部分?jǐn)?shù)據(jù)中的變量的幾個(gè)新變量,即所謂主成分,來(lái)代替原始變量進(jìn)行建模。

計(jì)算主成分:
在Python中,主成分分析的函數(shù)位于Scikit-Leam下:

sklearn.decomposition.PCA(n_components = None,copy = True,whiten = False)

參數(shù)說(shuō)明:

(1) n_components

意義:PCA算法中所要保留的主成分個(gè)數(shù)n,也即保留下來(lái)的特征個(gè)數(shù)n。

類(lèi)型:int或者string,缺省時(shí)默認(rèn)為None,所有成分被保留。賦值為int,比如n_components =1將把原始數(shù)據(jù)降到一個(gè)維度。賦值為string,比如n_components =‘mle’,將自動(dòng)選取特征個(gè)數(shù)n,使得滿(mǎn)足所要求的方差百分比。

(2 ) copy

類(lèi)型:bool, True或者False,缺省時(shí)默認(rèn)為T(mén)rue。

意義:表示是否在運(yùn)行算法時(shí),將原始訓(xùn)練數(shù)據(jù)復(fù)制一份。若為T(mén)rue,則運(yùn)行PCA 算法后,原始訓(xùn)練數(shù)據(jù)的值不會(huì)有任何改變,因?yàn)槭窃谠紨?shù)據(jù)的副本上進(jìn)行運(yùn)算;若為 False,則運(yùn)行PCA算法后,原始訓(xùn)練數(shù)據(jù)的值會(huì)改,因?yàn)槭窃谠紨?shù)據(jù)上進(jìn)行降維計(jì)算。

(3 ) whiten

類(lèi)型:bool,缺省時(shí)默認(rèn)為False。

意義:白化,使得每個(gè)特征具有相同的方差。

使用主成分分析降維的程序如代碼清單4-6所示。

代碼清單4-6,主成分分析降維代碼

#-*- coding: utf-8 -*-
#主成分分析 降維
import pandas as pd

#參數(shù)初始化
inputfile = '../data/principal_component.xls'
outputfile = '../tmp/dimention_reducted.xls' #降維后的數(shù)據(jù)

data = pd.read_excel(inputfile, header = None) #讀入數(shù)據(jù)

from sklearn.decomposition import PCA

pca = PCA()
pca.fit(data)
print(pca.components_ )#返回模型的各個(gè)特征向量
print(pca.explained_variance_ratio_) #返回各個(gè)成分各自的方差百分比(貢獻(xiàn)率)

'''
方差百分比越大,說(shuō)明向量的權(quán) 重越大

當(dāng)選取前4個(gè)主成分時(shí),累計(jì)貢獻(xiàn)率已達(dá)到97.37%,說(shuō)明選取前3個(gè)主成分進(jìn)行計(jì)算已經(jīng)相當(dāng)不錯(cuò)了,
因此可以重新建立PCA模型,設(shè)置n_components=3,計(jì)算出成分結(jié)果。
'''
pca = PCA(n_components=3)
pca.fit(data)
low_d = pca.transform(data) #用它來(lái)降低維度
print(low_d)
pd.DataFrame(low_d).to_excel(outputfile) #保存結(jié)果
pca.inverse_transform(low_d) #必要時(shí)可inverse_transform()函數(shù)來(lái)復(fù)原數(shù)據(jù)
4.4.2、數(shù)值規(guī)約

數(shù)值規(guī)約指通過(guò)選擇替代的、較小的數(shù)據(jù)來(lái)減少數(shù)據(jù)量,包括有參數(shù)方法和無(wú)參數(shù)方法兩類(lèi)。有參數(shù)方法是使用一個(gè)模型來(lái)評(píng)估數(shù)據(jù),只需存放參數(shù),而不需要存放實(shí)際數(shù)據(jù),例如回歸(線(xiàn)性回歸和多元回歸)和對(duì)數(shù)線(xiàn)性模型(近似離散屬性集中的多維概率分布)。無(wú)參數(shù)方法就需要存放實(shí)際數(shù)據(jù),例如直方圖、聚類(lèi)、抽樣(采樣)。

4.5、Python主要數(shù)據(jù)預(yù)處理函數(shù)

表4-7 Python主要數(shù)據(jù)預(yù)處理函數(shù)

函數(shù)名函數(shù)功能所屬擴(kuò)展庫(kù)
interpolate一維、高維數(shù)據(jù)插值Scipy
unique去除數(shù)據(jù)中的重復(fù)元素,得到單值元素列表,它是對(duì)象的方法名Pandas/Numpy
isnull判斷是否空值Pandas
notnull判斷是否非空值Pandas
PCA對(duì)指標(biāo)變量矩陣進(jìn)行主成分分析Scikit-Leam
random生成隨機(jī)矩陣Numpy

(1 ) interpolate

1 ) 功能:interpolate是Scipy的一個(gè)子庫(kù),包含了大量的插值函數(shù),如拉格朗日插值、 樣條插值、高維插值等。使用前需要用from scipy.interpolate import *引入相應(yīng)的插值函數(shù), 讀者應(yīng)該根據(jù)需要到官網(wǎng)查找對(duì)應(yīng)的函數(shù)名。

2 ) 使用格式:f = scipy.interpolate.lagrange(x, y)。這里僅僅展示了一維數(shù)據(jù)的拉格朗日插值的命令,其中x,y為對(duì)應(yīng)的自變量和因變量數(shù)據(jù)。插值完成后,可以通過(guò)f(a)計(jì)算新的 插值結(jié)果。類(lèi)似的還有樣條插值、多維數(shù)據(jù)插值等,此處不一一展示。

(2) unique

1 ) 功能:去除數(shù)據(jù)中的重復(fù)元素,得到單值元素列表。它既是Numpy庫(kù)的一個(gè)函數(shù) (np.unique()),也是Series對(duì)象的一個(gè)方法。

2 ) 使用格式:

np.unique(D), D 是一維數(shù)據(jù),可以是 list、array、Series;
D.unique(), D 是 Pandas 的 Series 對(duì)象。

3 ) 實(shí)例:求向量A中的單值元素,并返回相關(guān)索引。

> D = pd.Series ([1, 1, 2, 3, 5])
> D.unique ()
array([1, 2, 3, 5], dtype=int64)
> np.unique (D)
array([1, 2, 3, 5], dtype=int64)

(3) isnull/ notnull

1 ) 功能:判斷每個(gè)元素是否空值/非空值。

2 ) 使用格式:D.isnull()/ D.notnull()。這里的D要求是Series對(duì)象,返回一個(gè)布爾 Series。可以通過(guò)D[D.isnull()]或D[D.notnull()]找出D中的空值/非空值。

(4) random

1 ) 功能:random是Numpy的一個(gè)子庫(kù)(Python本身也自帶了 random,但Numpy的更加強(qiáng)大),可以用該庫(kù)下的各種函數(shù)生成服從特定分布的隨機(jī)矩陣,抽樣時(shí)可使用。

2 ) 使用格式:

np.random.rand(k, m, n,…)生成一個(gè)k x m x n x…隨機(jī)矩陣,其元素均勻分布在區(qū) 間(0,1)上;

np.random.randn(k, m, n,…)生成一個(gè)k x m x n x …隨機(jī)矩陣,其元素服從標(biāo)準(zhǔn)正態(tài)分布。

(5) PCA

1 ) 功能:對(duì)指標(biāo)變量矩陣進(jìn)行主成分分析。使用前需要用from skleam.decomposition import PCA引入該函數(shù)。

2 ) 使用格式:model = PCA()。注意,Scikit-Leam下的PCA是一個(gè)建模式的對(duì)象,也 就是說(shuō),一般的流程是建模,然后是訓(xùn)練model.fit(D), D為要進(jìn)行主成分分析的數(shù)據(jù)矩陣, 訓(xùn)練結(jié)束后獲取模型的參數(shù),如.components_獲取特征向量,以及.explained_variance_ratio_獲取各個(gè)屬性的貢獻(xiàn)率等。

3 ) 實(shí)例:使用PCA()對(duì)一個(gè)10x4維的隨機(jī)矩陣進(jìn)行主成分分析。

from sklearn.decomposition import PCA

D = np.random.rand(10,4)
pca = PCA()
pca.fit (D)
PCA(copy=True, n_components=None, whiten=False)
pca. components_ #返回模型的各個(gè)特征向量
pca.explained_variance_ratio_ #返回各個(gè)成分各自的方差百分比

“python數(shù)據(jù)分析的知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI