Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 第9章 數(shù)據(jù)分析_第1頁(yè)
Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 第9章 數(shù)據(jù)分析_第2頁(yè)
Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 第9章 數(shù)據(jù)分析_第3頁(yè)
Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 第9章 數(shù)據(jù)分析_第4頁(yè)
Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 第9章 數(shù)據(jù)分析_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第9章數(shù)據(jù)分析Python數(shù)據(jù)分析與數(shù)據(jù)挖掘9.1統(tǒng)計(jì)分析描述性統(tǒng)計(jì)匯總統(tǒng)計(jì)參數(shù)估計(jì)與假設(shè)檢驗(yàn)相關(guān)性分析9.1.1描述性統(tǒng)計(jì)頻數(shù)分析集中趨勢(shì)分析離散程度分析其他頻數(shù)分析pandas.DataFrame.value_counts(subset

=

None,

normalize=

False,

sort=True,

ascending=

False)>>>df

#原始數(shù)據(jù)num_legs

num_wings>>>df.value_counts()

#統(tǒng)計(jì)df各系列數(shù)據(jù)取值的組合情況的頻次num_legs

num_wingsfalcon22402dog40641cat4001ant60221bee64dtype:int64falcon22dog40cat40ant60bee64頻數(shù)分析pandas.Series.value_counts(normalize=False,

sort=True,ascending=False,

bins=None,

dropna=True)>>>df

#原始數(shù)據(jù)num_legs

num_wings>>>df["num_legs"].unique()

#統(tǒng)計(jì)

"num_legs"的取值array([2,

4,

6],

dtype=int64)>>>df["num_legs"].value_counts(normalize=True)#統(tǒng)計(jì)取值頻次比例6

0.44

0.42

0.2Name:

num_legs,

dtype:

float64集中趨勢(shì)分析函數(shù)說(shuō)明.mean()計(jì)算數(shù)據(jù)中各系列的均值;.median()計(jì)算數(shù)據(jù)中各系列的中位數(shù)值;.mode()計(jì)算數(shù)據(jù)中各系列的眾數(shù)值;.quantile()計(jì)算數(shù)據(jù)中各系列的四(n)分位數(shù)值。集中趨勢(shì)分析>>>

df=pd.DataFrame(np.random.randint(1,100,(50,3)),columns=list("ABC"))>>>df.mean()

#計(jì)算各數(shù)據(jù)系列的均值A(chǔ)

48.32B

47.28C

48.54dtype:

float64>>>df.median()#計(jì)算各數(shù)據(jù)系列的中位數(shù)值A(chǔ)

47.5B

47.5C

55.0dtype:

float64>>>df["A"].mean()

#計(jì)算pandas.Series的均值48.32集中趨勢(shì)分析0.2529.7527.5021.750.5047.5047.5055.000.7576.7567.2573.001.0096.0099.0095.000

11

362

66dtype:

int32>>>df.quantile(q=[0.0,0.25,0.5,0.75,1.0])#計(jì)算各數(shù)據(jù)系列的四分位數(shù)A

B

C0.00

1.00

4.00

1.00>>>

df["A"].mode()#計(jì)算pandas.Series的眾數(shù)值>>>

df["A"].quantile(q=0.35)#計(jì)算特定分位數(shù)值離散程度分析函數(shù)說(shuō)明.max().min()計(jì)算數(shù)據(jù)中各系列的最大值和最小值.std

()計(jì)算數(shù)據(jù)中各系列的標(biāo)準(zhǔn)差值.mad()計(jì)算數(shù)據(jù)中各系列的平均絕對(duì)偏差.cov()計(jì)算數(shù)據(jù)中各系列的協(xié)方差值numpy.ptp()計(jì)算數(shù)據(jù)中各系列的極差值離散程度分析>>>df.std()#計(jì)算各數(shù)據(jù)系列的標(biāo)準(zhǔn)差值A(chǔ)

29.143165B

26.264774C

28.829697dtype:

float64969995dtype:

int32>>>

df.cov()A

B

CA

849.324082

-126.866939

63.599184B

-126.866939

689.838367

9.743673C

63.599184

9.743673

831.151429產(chǎn)生數(shù)據(jù)>>>

df=pd.DataFrame(np.random.randint(1,100,(50,3)),columns=list("ABC"))>>>

df.max()

#計(jì)算各數(shù)據(jù)系列的最大值

>>>

df.mad()

#計(jì)算各數(shù)據(jù)系列的平均絕對(duì)偏差A(yù)

24.6656B

21.1200C

25.3184dtype:

float64其他>>>

df.describe()A

B

Ccount

50.00000

50.000000

50.000000mean

56.90000

50.900000

45.680000std30.62562

30.125757

30.615749min1.00000

2.000000

2.00000025%39.00000

21.000000

17.25000050%57.00000

55.500000

41.00000075%84.00000

73.500000

74.750000max99.00000

99.000000

99.000000>>>

df.aggregate(np.max,

axis=0)999999dtype:

int32>>>

df.apply(np.median,

axis=0)A

57.0B

55.5C

41.0dtype:

float64匯總統(tǒng)計(jì)時(shí)序數(shù)據(jù)匯總resample交叉表crosstable分類(lèi)匯總groupby數(shù)據(jù)透視表pivot_table時(shí)序數(shù)據(jù)匯總resamplepandas.DataFrame.resample(rule,

axis=0,

closed=None,

label=None,convention="start",

kind=None,

loffset=None,

base=None,

on=None,level=None,

origin="start_day",

offset=None)>>>df.resample("3T").sum()

#按3個(gè)樣本進(jìn)行匯總A

B2000-01-01

00:00:00

7

82000-01-01

00:03:00

8

82000-01-01

00:06:00

2

3>>>

df.resample("4min").mean()

#按4分鐘進(jìn)行匯總A

B2000-01-01

00:00:00

2.0

3.0000002000-01-01

00:04:00

3.0

2.333333時(shí)序數(shù)據(jù)匯總resamplepandas.DataFrame.resample(rule,

axis=0,

closed=None,

label=None,convention="start",

kind=None,

loffset=None,

base=None,

on=None,level=None,

origin="start_day",

offset=None)>>>

df

=

pd.DataFrame(np.random.randint(1,5,(7,2)),pd.date_range("1/1/2000",periods=7,freq="T"),

list("AB"))>>>

dfA

B2000-01-01

00:00:00

3

32000-01-01

00:01:00

1

32000-01-01

00:02:00

3

22000-01-01

00:03:00

1

42000-01-01

00:04:00

3

22000-01-01

00:05:00

4

22000-01-01

00:06:00

2

3交叉表crosstablepandas.crosstab(index,columns,

values=None,

rownames=None,

colnames=None,aggfunc=None,

margins=False,

margins_name

="All",

dropna

=True,normalize=False)參數(shù)說(shuō)明index交叉表中的行的屬性(可以是多個(gè)屬性)columns交叉表中的列的屬性(可以是多個(gè)屬性)values進(jìn)行匯總的值或?qū)傩詒ownames交叉表行數(shù)據(jù)名稱(chēng)(如果設(shè)定為特定值,個(gè)數(shù)必須與所給的行變量個(gè)數(shù)匹配)colnames交叉表列數(shù)據(jù)名稱(chēng)(如果設(shè)定為特定值,個(gè)數(shù)必須與所給的列變量個(gè)數(shù)匹配)aggfunc匯總算法函數(shù),使用時(shí)必須設(shè)置values參數(shù)margins是否給出各行或列的匯總數(shù)據(jù),如小計(jì)和總計(jì)等。margins_name匯總行或列的名字(當(dāng)參數(shù)margins=True時(shí))。dropna是否剔除數(shù)據(jù)中全為NaN值的列normalize當(dāng)結(jié)果以百分比表示時(shí),數(shù)據(jù)的計(jì)算方法("all"或True表示對(duì)所有數(shù)據(jù)之和計(jì)算百分比;"index"或0表示按各行計(jì)算百分比;"columns"或1表示按各列計(jì)算百分比)。這時(shí),匯總行或列也以百分比表示。交叉表crosstable#讀入數(shù)據(jù)df

=

pd.read_csv("crosstab_data.csv")#創(chuàng)建交叉表ct

=

pd.crosstab([df.outlook,

df.windy],df.play,rownames=["OUTLOOK","WINDY"],colnames=["PLAY"],margins=True,margins_name="合計(jì)",normalize="index",dropna=True)print(ct)PLAY

no

yesOUTLOOK

WINDYovercast

False

0.142857

0.857143True

0.333333

0.666667rainysunny合計(jì)False

0.285714

0.714286True

0.666667

0.333333False

0.285714

0.714286True

0.500000

0.5000000.352941

0.647059分類(lèi)匯總groupbypandas.DataFrame.groupby(by=None,

axis=0,

level=None,

as_index

=True,

sort=True,

group_keys

=True,

squeeze,

observed

=False,

dropna:bool=True)參數(shù)說(shuō)明by數(shù)據(jù)中進(jìn)行分類(lèi)的屬性axis制定按行(axis=0)或按列(axis=1)進(jìn)行分類(lèi)level指定MultiIndex數(shù)據(jù)中進(jìn)行分類(lèi)的屬性的等級(jí)as_index在分類(lèi)結(jié)果中,是否將分類(lèi)屬性作為index,還是按如SQL查詢(xún)結(jié)果的形式輸出sort是否對(duì)分類(lèi)屬性進(jìn)行排序group_keys是否將分類(lèi)屬性設(shè)置為數(shù)據(jù)的indexobserved對(duì)Categorical屬性的分類(lèi)匯總,是否顯示有統(tǒng)計(jì)結(jié)果的項(xiàng),還是所有分類(lèi)匯總組合項(xiàng)(即結(jié)果中的統(tǒng)計(jì)值或?yàn)?)。dropna是否剔除分類(lèi)屬性結(jié)果為N/A的項(xiàng)分類(lèi)匯總groupbydf=pd.read_csv("groupby_data.csv",engine="python")#獲取數(shù)據(jù)gb=df.groupby(by=["outlook","windy"])#groupby處理avg=gb.mean()#分類(lèi)匯總均值

print(avg)temperature

humidityoutlook

windyovercast

False

78.000

81.0068.000

77.5068.750

87.0062.875

71.2576.000

76.25Truerainy

FalseTruesunny

FalseTrue80.000

79.20數(shù)據(jù)透視表pivot_tablepandas.pivot_table(data,

values=None,

index=None,

columns=None,aggfunc="mean",

fill_value=None,

margins=False,

dropna=True,margins_name="All",

observed=False)參數(shù)說(shuō)明data數(shù)據(jù)values進(jìn)行數(shù)值統(tǒng)計(jì)的數(shù)據(jù)系列index進(jìn)行分組統(tǒng)計(jì)的數(shù)據(jù)系列(grouper),數(shù)據(jù)透視表行標(biāo)簽。columns進(jìn)行匯總統(tǒng)計(jì)的數(shù)據(jù)系列,數(shù)據(jù)透視表列標(biāo)簽。aggfunc匯總統(tǒng)計(jì)的計(jì)算方法,可以是函數(shù)(默認(rèn)為numpy.mean)或函數(shù)列表,也可以是字典(key為進(jìn)行匯總統(tǒng)計(jì)的系列,value為所使用的函數(shù)或函數(shù)列表)。fill_value數(shù)據(jù)透視表結(jié)果數(shù)據(jù)中,代替缺失值的內(nèi)容或標(biāo)識(shí)。dropna是否剔除具有缺失值的數(shù)據(jù)observed是否顯示分類(lèi)(Categorical)型的grouper的所有取值,還是僅顯示有統(tǒng)計(jì)值的項(xiàng);數(shù)據(jù)透視表pivot_table#讀入數(shù)據(jù)df=pd.read_csv("pivot_data.csv",engine="python")#統(tǒng)計(jì)分析主客場(chǎng)勝負(fù)情況pivot1=pd.pivot_table(df,values=["對(duì)手"],aggfunc="count",index=["主客場(chǎng)","勝負(fù)"],observed=True)#分析主客場(chǎng)、不同勝負(fù)情況下,投籃數(shù)、命中、和得分三項(xiàng)指標(biāo)的情況pivot2=pd.pivot_table(df,values=["投籃數(shù)","命中","得分"],index=["主客場(chǎng)","勝負(fù)"],aggfunc=[np.sum,np.mean],margins=True,margins_name="總計(jì)")#分析與不同對(duì)手比賽,不同勝負(fù)情況下,主客場(chǎng)時(shí),助攻、得分、和籃板三項(xiàng)指標(biāo)的情況pivot3=pd.pivot_table(df,index=[u"對(duì)手",u"勝負(fù)"],columns=[u"主客場(chǎng)"],

values=["得分","助攻","籃板"],aggfunc=[np.mean],

fill_value=0)9.1.3參數(shù)估計(jì)與假設(shè)檢驗(yàn)正態(tài)性檢驗(yàn)方差齊次檢驗(yàn)T檢驗(yàn)F檢驗(yàn)卡方檢驗(yàn)概率密度函數(shù)估計(jì)正態(tài)性檢驗(yàn)scipy.stats.kstest(rvs,

cdf,

args=(),

N=20,

alternative="two-sided",mode="auto")import

numpy

as

npfrom

scipy.stats

import

kstest,

normnp.random.seed(1234)ks_res

=

kstest(np.random.normal(loc=5,

scale=3.0,

size=(500,)),cdf=norm.cdf,

args=(5,

3.0))print(ks_res)KstestResult(statistic=0.028471332239411007,

pvalue=0.801391977936581)方差齊次檢驗(yàn)方差齊次檢驗(yàn)的方法較多,可使用levene檢驗(yàn)、巴特勒特(bartlett)檢驗(yàn)、fligner檢驗(yàn)和K-S檢驗(yàn)等。scipy.stats.levene(sample1,

sample2,

...,

center="median",proportiontocut

=0.05)scipy.stats.bartlett(sample1,

sample2,

...)scipy.stats.fligner(sample1,

sample2,

...,

center="median",proportiontocut

=0.05)參數(shù)sample1,sample2,...為樣本數(shù)據(jù),可以是非等長(zhǎng)的一維數(shù)據(jù)序列;參數(shù)center為檢驗(yàn)時(shí)確定樣本均值的方法,可以是{"mean","median","trimmed"},分別表示計(jì)算均值、使用中位數(shù)和去掉異常值后求均值,分別適用于對(duì)稱(chēng)中拖尾、偏態(tài)和長(zhǎng)拖尾分布的情況;參數(shù)proportiontocut為當(dāng)center="trimmed"時(shí)去除異常值的比例。函數(shù)對(duì)輸入數(shù)據(jù)完成以方差齊次為H0的檢驗(yàn),輸出檢驗(yàn)統(tǒng)計(jì)值和p值。T檢驗(yàn)scipy.stats.ttest_1samp(a,

popmean,

axis=0,

nan_policy="propagate’)scipy.stats.ttest_ind(a,

b,

axis=0,

equal_var=True,nan_policy="propagate")scipy.stats.ttest_rel(a,

b,

axis=0,

nan_policy="propagate")參數(shù)說(shuō)明a,b為樣本的觀測(cè)值,可以同時(shí)檢驗(yàn)多數(shù)據(jù)序列popmean所要比較的總體均值,個(gè)數(shù)與數(shù)據(jù)序列的數(shù)目相同axis對(duì)多數(shù)據(jù)序列進(jìn)行組織的維度取向(為None則將參數(shù)a所指定的數(shù)據(jù)作為一個(gè)整體)nan_policyNaN值的處理方法,可以是{"propagate","raise","omit"},分別表示返回NaN值、拋出異常和忽略NaN值。equal_var設(shè)置是否采用T檢驗(yàn)(正態(tài),方差齊次),還是Welch檢驗(yàn)T檢驗(yàn)對(duì)樣本均值的差異是否顯著進(jìn)行檢驗(yàn)。分為單樣本檢驗(yàn)、兩獨(dú)立樣本檢驗(yàn)和配對(duì)樣本檢驗(yàn),可以分別使用scipy.stats擴(kuò)展庫(kù)中定義的ttest_1samp()、ttest_rel()和ttest_ind()函數(shù)來(lái)完成。T檢驗(yàn)from

scipy.stats

import

norm,

ttest_rel#產(chǎn)生數(shù)據(jù)np.random.seed(1245)rvs1

=

norm.rvs(loc=5,scale=10,size=500)rvs2

=

norm.rvs(loc=5,scale=10,size=500)

+

norm.rvs(scale=0.2,size=500)rvs3

=

norm.rvs(loc=8,scale=10,size=500)

+

norm.rvs(scale=0.2,size=500)#進(jìn)行t檢驗(yàn)

print(ttest_rel(rvs1,rvs2))print(ttest_rel(rvs1,rvs3))Ttest_relResult(statistic=-0.8695295811827474,

pvalue=0.3849755886170384)Ttest_relResult(statistic=-4.574970362842562,

pvalue=6.016847402752989e-06)F檢驗(yàn)使用scipy.stats中定義的f_oneway()函數(shù),可以完成長(zhǎng)度可不等的兩組或多組數(shù)據(jù)序列的

one-way

ANOVA檢驗(yàn),其H0假設(shè)為數(shù)據(jù)序列具有相同的均值。scipy.stats.f_oneway(*args,

axis=0)參數(shù)sample1,sample2,…為各組輸入數(shù)據(jù)序列;

參數(shù)axis指定輸入數(shù)據(jù)中進(jìn)行檢驗(yàn)的數(shù)據(jù)的軸向。函數(shù)返回檢驗(yàn)的統(tǒng)計(jì)值和p值。值的注意的是,ANOVA檢驗(yàn)有著樣本獨(dú)立、樣本來(lái)自正態(tài)分布總體和方差齊次的前提假設(shè),因此在檢驗(yàn)前,應(yīng)對(duì)此進(jìn)行檢驗(yàn)。scipy_f_oneway.py卡方檢驗(yàn)scipy.stats.chisquare(f_obs,

f_exp=None,

ddof=0,

axis=0)參數(shù)f_obs為各類(lèi)別的觀測(cè)頻率;參數(shù)f_exp為各類(lèi)別對(duì)應(yīng)的期望頻率值;參數(shù)ddof為自由度偏差,即在計(jì)算p-value時(shí)使用自由度為k-1-ddof的卡方分布;參數(shù)axis為數(shù)據(jù)序列的軸向。函數(shù)返回卡方檢驗(yàn)統(tǒng)計(jì)值和顯著性水平。from

scipy

import

statspips

=

[170,

168,

164,

169,

172,

157]chisq,

p

=

stats.chisquare(f_obs=pips,

f_exp

=

[1000/6]*6)print(chisq,

p)0.884

0.9713691536737348概率密度函數(shù)估計(jì)scipy.stats.gaussian_kde(dataset,

bw_method=None,

weights=None)參數(shù)說(shuō)明dataset進(jìn)行密度估計(jì)的一維或二維數(shù)據(jù)bw_method設(shè)置計(jì)算估計(jì)器帶寬的方法,可以是"scott"(默認(rèn)),"silverman",標(biāo)量常數(shù)(即為kde.factor)或函數(shù)(須以gaussian_kde實(shí)例作為唯一參數(shù),且返回一個(gè)標(biāo)量值);weights數(shù)據(jù)加權(quán)值,須與數(shù)據(jù)同階,默認(rèn)為均等加權(quán)概率密度函數(shù)估計(jì)from

scipy

import

statsdef

measure(n):#產(chǎn)生2組數(shù)據(jù)m1=np.random.normal(size=n)m2

=

np.random.normal(scale=0.5,

size=n)return

m1+m2,

m1-m2m1,

m2

=

measure(2000)xmin,

xmax

=

m1.min(),

m1.max()ymin,

ymax

=

m2.min(),

m2.max()#對(duì)數(shù)據(jù)進(jìn)行核密度估計(jì)X,

Y

=

np.mgrid[xmin:xmax:100j,

ymin:ymax:100j]positions

=

np.vstack([X.flatten(),

Y.flatten()])data

=

np.vstack([m1,

m2])kernel

=

stats.gaussian_kde(data)kernel.set_bandwidth(bw_method="silverman")Z

=

np.reshape(kernel(positions).T,

X.shape)相關(guān)性分析numpy.corrcoef(x,

y=None,

rowvar=True)pandas.DataFrame.corr(self,

method="pearson",

min_periods=1)參數(shù)rowvar決定以行或列為變量進(jìn)行相關(guān)系數(shù)計(jì)算;參數(shù)method規(guī)定所采用的計(jì)算相關(guān)系數(shù)的算法,可以是{"pearson","kendall","spearman"},分別表示皮爾森相關(guān)系數(shù)、Kendall

Tau相關(guān)系數(shù)和Spearman

rank相關(guān)系數(shù)。相關(guān)性分析data

=

pd.read_csv("地區(qū)經(jīng)濟(jì)發(fā)展競(jìng)爭(zhēng)力評(píng)價(jià).csv",index_col=0,engine="python",encoding="gb2312")#計(jì)算產(chǎn)生相關(guān)系數(shù)矩陣corr=data.corr()print(corr)#或者,使用numpy.corrcoef()corrcoef

=

np.corrcoef(data,

rowvar=False)#繪制相關(guān)系數(shù)矩陣熱力圖import

seaborn

as

snssns.heatmap(corr,annot=True)詞云wordcloud.WordCloud(font_path=None,

width=400,

height=200,margin=2,

ranks_only=None,prefer_horizontal=0.9,mask=None,

scale=1,color_func=None,

max_words=200,min_font_size=4,stopwords=None,random_state=None,background_color="black",max_font_size=None,font_step=1,

mode="RGB",relative_scaling=0.5,regexp=None,

collocations=True,colormap=None,normalize_plurals=True)參數(shù)說(shuō)明font_path字體路徑,如:font_path="黑體.ttf"。width,

height畫(huà)布尺寸,單位為像素。prefer_horizontal詞語(yǔ)水平方向排版出現(xiàn)的比例mask背景圖像scale畫(huà)布縮放比例min_font_size,max_font_size字體大小的最小值和最大值font_step字體大小變化步長(zhǎng)max_words顯示詞匯的最大個(gè)數(shù)stopwords停用詞列表,如果為空,則使用內(nèi)置的STOPWORDS。background_color背景顏色mode圖像模式(當(dāng)參數(shù)為“RGBA”且

background_color不為空時(shí),背景為透明)relative_scaling詞頻和字體大小的關(guān)聯(lián)性color_func顏色生成函數(shù)regexp正則表達(dá)式,用于分割輸入的文本。collocations是否包括兩個(gè)詞的搭配詞云-示例import

jiebafrom

wordcloud

import

WordCloud,STOPWORDS,ImageColorGenerator#讀取詞源文本with

open("cnword.txt")

as

f:text

=

f.read()f.close()#補(bǔ)充jieba分詞詞匯jieba.add_word("阿桑奇")#向jieba詞庫(kù)添加分詞詞匯,其將被處理為一個(gè)單詞cut_words=jieba.cut(text,cut_all=True)#構(gòu)建停用詞with

open("stopwords.txt")

as

f:stop_text

=

f.readline()while

stop_text:#stopwords文本中詞的格式是"一詞一行"stopwords=STOPWORDS.add(stop_text)stop_text

=

f.readline()f.close()stopwords=STOPWORDS.add("就是")#補(bǔ)充停用詞#創(chuàng)建詞云對(duì)象back_img=imread("CiYunBkgrd.jpg")#獲取背景圖片wc=WordCloud(font_path="simhei.ttf",#指定顯示的文字字體mask=back_img,#詞云背景,不為空時(shí),width和height會(huì)被忽略max_font_size=100,min_font_size=5,#字體大小stopwords=stopwords,#使用內(nèi)置的屏蔽詞,再添加特別停用詞max_words=500,#最大詞數(shù)background_color="white")#背景顏色wc.generate(text)#產(chǎn)生詞云線性回歸線性回歸sklearn.linear_model.LinearRegression(*,

fit_intercept=True,normalize=False,

copy_X=True,

n_jobs=None)參數(shù)說(shuō)明fit_intercept設(shè)置是否計(jì)算模型的截距normalize設(shè)置是否對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化copy_X設(shè)置是否另存X的副本,否則X將被改寫(xiě)n_jobs為處理多標(biāo)簽的海量數(shù)據(jù)時(shí)的任務(wù)數(shù)線性回歸from

sklearn.linear_model

import

LinearRegression#產(chǎn)生樣本數(shù)據(jù)X,

y

=

datasets.make_regression(n_samples=100,n_features=4,

n_targets=1,

noise=20,random_state=4)#建立模型,并進(jìn)行擬合LR

=

LinearRegression().fit(X,

y)#評(píng)估模型R2

=

LR.score(X,

y)print("模型奇異值:","\n%10s"%"singular=",LR.singular_)print("模型評(píng)估:\n%10s"%"R2=",R2,end="\n\n")#模型參數(shù)print("模型系數(shù):","\n%10s"%"coef=",LR.coef_,"\n%10s"%"intercept=",LR.intercept_,end="\n\n")print("模型階數(shù):\n%10s"%"rank=",LR.rank_,end="\n\n")模型評(píng)估:R2=0.9848578999295948模型系數(shù):coef=[68.13100405

6.5263157188.36953459

77.63245852]intercept

=

0.8749648992142802模型階數(shù):rank=4模型奇異值:singular=[11.19778943

10.361315198.99961285

8.5733943

]非線性回歸所在模塊名稱(chēng)說(shuō)明ensembleAdaBoostRegressor基于Adaboost方法的集成回歸BaggingRegressor基于袋裝方法的集成回歸ExtraTreesRegressor基于多隨機(jī)決策樹(shù)結(jié)果平均化的集成回歸GradientBoostingRegressor基于決策樹(shù)的梯度提升Boosting的集成回歸RandomForestRegressor基于隨機(jī)森林的集成回歸gaussian_processGaussianProcessRegressor高斯過(guò)程回歸svmSVR支持向量機(jī)回歸neighborsKNeighborsRegressorK近鄰回歸neural_networkMLPRegressor多層感知器回歸treeDecisionTreeRegressor決策樹(shù)回歸ExtraTreeRegressor用于ExtraTreesRegressor集成回歸中的ExtraTree回歸非線性回歸可視化的模型形態(tài),對(duì)不同算法進(jìn)行比較,并通過(guò)參數(shù)對(duì)模型進(jìn)行評(píng)估。models

=

[ExtraTreeRegressor(),ExtraTreesRegressor(),DecisionTreeRegressor(max_depth=4,

random_state=0),DecisionTreeRegressor(criterion="mae",

random_state=0),GradientBoostingRegressor(),AdaBoostRegressor(),GaussianProcessRegressor(),BaggingRegressor(),RandomForestRegressor(),KNeighborsRegressor(),SVR(),MLPRegressor(max_iter=1000,

random_state=0)]for

i

in

range(len(models)):model=models[i]#建模、擬合model.fit(X_train,y_train)y_pred=model.predict(X_test)#預(yù)測(cè)

print("%s=%.4f"%(model.

class

.

name

,model.score(X_train,y_train)))9.3

時(shí)間序列分析平穩(wěn)性檢驗(yàn)statsmodels.tsa.stattools.adfuller(x,

maxlag=None,regression="c",

autolag="AIC",

store=False,

regresults=False)參數(shù)說(shuō)明x為時(shí)間序列數(shù)據(jù);參數(shù)maxlag為測(cè)試中包含的最大滯后階數(shù)regression為回歸中的常數(shù)和趨勢(shì)項(xiàng)階數(shù),可以是"c","ct","ctt","nc"(c表示常數(shù)項(xiàng),第一個(gè)t表示有一次項(xiàng),第二個(gè)t表示有二次項(xiàng))autolag為需要自動(dòng)確定滯后階數(shù)時(shí)所采用的方法,可以是"AIC"(Akaike

InformationCriterion),"BIC"(Bayesian

Information

Criterion),"t-stat"(基于maxlag的T檢驗(yàn)顯著性方法),None(使用maxlag定義的滯后階數(shù)值)store設(shè)置是否隨ADF統(tǒng)計(jì)結(jié)果返回模型實(shí)例regresults設(shè)置是否返回完整的回歸結(jié)果平穩(wěn)性檢驗(yàn)-示例#計(jì)算時(shí)間序列的ADF,以檢驗(yàn)其平穩(wěn)性from

statsmodels.tsa.stattools

import

adfulleradf=adfuller(df["Open"],maxlag=20,regression="ctt")#生成

adfoutput(adf)#對(duì)數(shù)據(jù)序列進(jìn)行一階差分過(guò)程平穩(wěn)化處理diff=df["Open"].diff(1).dropna()adf_d=adfuller(diff,maxlag=7)#生成adf檢驗(yàn)結(jié)果print(""Open"1st

order

diffence:")output(adf_d)#繪制acf圖from

statsmodels.graphics.tsaplots

import

plot_acf,plot_pacfplot_acf(df["Open"],title="Open的自相關(guān)圖")#生成自相關(guān)圖plot_pacf(df["Open"],title="Open的偏自相關(guān)圖")#生成偏自相關(guān)圖ADF

=

-2.0204pvalue

=

0.2777critical

values:1%:

-3.48615%:

-2.885910%:

-2.5798自相關(guān)分析#繪制序列的自相關(guān)圖,和lag_plotpd.plotting.lag_plot(df[["Open"]],lag=1,c="b",label="lag=1")pd.plotting.autocorrelation_plot(df[["Open"]])#繪制經(jīng)過(guò)差分處理以后,序列的自相關(guān)圖,和lag_plotpd.plotting.lag_plot(df[["Open"]].diff(1).dropna(),lag=1,c="b",label="lag=1")#經(jīng)過(guò)差分處理后的序列的自相關(guān)圖pd.plotting.autocorrelation_plot(df[["Open"]].diff(1).dropna())趨勢(shì)、周期性和殘留分析from

statsmodels.tsa.seasonal

importseasonal_decompose#分解時(shí)間序列decomposition

=

seasonal_decompose(df["Open"],

period=7)#提取趨勢(shì)數(shù)據(jù)trend

=

decomposition.trend.dropna()#提取周期性數(shù)據(jù)seasonal

=

decomposition.seasonal.dropna()#提取殘差數(shù)據(jù)residual

=

decomposition.resid.dropna()移動(dòng)平均(MA)import

mplfinance

as

mplfma5=df[["Close"]].rolling(5).mean()#產(chǎn)生5日移動(dòng)平均數(shù)據(jù)ma10=df[["Close"]].rolling(10).mean()#產(chǎn)生10日移動(dòng)平均數(shù)據(jù)ma30=df[["Close"]].rolling(30).mean()#產(chǎn)生30日移動(dòng)平均數(shù)據(jù)plot5=mplf.make_addplot(ma5)plot10

=

mplf.make_addplot(ma10)plot30

=

mplf.make_addplot(ma30)colors

=

mplf.make_marketcolors(up="red",

down="cyan",edge="black",

wick="black",volume="blue")#設(shè)置線條色彩style=mplf.make_mpf_style(marketcolors=colors,gridaxis="both",gridstyle="-.")#設(shè)置繪圖屬性mplf.plot(df,

addplot=[plot5,plot10,plot30],type="candle",

style=style)自回歸模型(AR)statsmodels.tsa.AR(endog,

dates=None,

freq=None,

missing="none")參數(shù)說(shuō)明endog時(shí)間序列數(shù)據(jù);參數(shù)dates為datetime時(shí)間數(shù)據(jù)序列;;參數(shù)freq時(shí)間序列的頻率,如{"B","D","W","M","A","Q"}等missing數(shù)據(jù)中缺失值的處理方法,如{"none","drop","raise"}自回歸模型(AR)from

statsmodels.tsa.ar_model

import

AR

from

sklearn.metrics

import

mean_squared_error#選擇數(shù)據(jù)集中的"Open’數(shù)據(jù)序列,并劃分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集X=df["Open"]X_train,

X_test

=

X[:-20],

X[-20:]#創(chuàng)建自回歸模型,并進(jìn)行訓(xùn)練model=AR(X)

ar_result=model.fit()#預(yù)測(cè)測(cè)試X_ar1

=

model.predict(start=len(X)-20+1,

end=len(X),params=ar_result.params,

dynamic=False)X_ar1

=

pd.Series(X_ar1,

index=X.index[-20:])error

=

mean_squared_error(X_test,

X_ar1)print("Test

MSE:

%.3f"

%

error)#外推預(yù)測(cè)n=30X_ar2

=

model.predict(start=len(X),

end=len(X)+n-1,params=ar_result.params,

dynamic=True)X_ar2

=

pd.Series(X_ar2[-n:],

index

=

pd.date_range(X.index[-1],

periods=n,

freq="b"))自回歸滑動(dòng)平均模型(ARMA)參數(shù)說(shuō)明endog為時(shí)間序列數(shù)據(jù)dates為datetime時(shí)間數(shù)據(jù)序列freq為時(shí)間序列的頻率,如{"B","D","W","M","A","Q"}等missing為數(shù)據(jù)中缺失值的處理方法,如{"none","drop","raise"}ARMA(Autoregressive

Moving

Average)模型,可以理解為AR(p)自回歸模型和MA(q)移動(dòng)平均模型的結(jié)合。statsmodels.tsa.arima_model.ARMA(endog,

order,

exog=None,dates=None,

freq=None,

missing="none")自回歸滑動(dòng)平均模型(ARMA)#創(chuàng)建ARMA模型

order=(6,1)#(p,q)model

=

ARMA(X,

order=order)arma

=

model.fit()#使用模型結(jié)果的.predict()函數(shù),擬合模型X_pred

=

arma.predict(start=len(X)-20+1,

end=len(X),dynamic=False)X_pred.index

=

X.index[-20:]error

=

mean_squared_error(X_test,

X_pred)#使用模型結(jié)果的.predict()函數(shù),進(jìn)行out-of-smaple外推預(yù)測(cè)X_extrap=model.predict(start=len(X),end=len(X)+n-1,params=arma.params,

dynamic=True)X_extrap=pd.Series(X_extrap[-n:],index=pd.date_range(X.index[-1],periods=n,freq="b"))#繪制外推n個(gè)數(shù)據(jù)的圖形n

=

30X.reset_index(drop=True).plot()arma.plot_predict(X.shape[0]-order[0],

X.shape[0]+n,alpha=0.2,

plot_insample=False)差分自回歸移動(dòng)平均模型(ARIMA)差分自回歸移動(dòng)平均模型ARIMA(Auto

Regressive

Integrated

Moving

Average),也稱(chēng)為集成移動(dòng)平均自回歸模型。相對(duì)于ARMA,ARIMA對(duì)非平穩(wěn)時(shí)間序列增加了進(jìn)行差分預(yù)處理的過(guò)程,得到平穩(wěn)過(guò)程后再進(jìn)行建模。ARIMA是自回歸AR(p)、移動(dòng)平均MA(q)和差分預(yù)處理diff(d)的集成化處理模型。因此,相比于ARMA(p,q)的兩個(gè)階數(shù),ARIMA是一個(gè)表示為三階數(shù)ARIMA(p,d,q)的模型。statsmodels.tsa.arima_model.ARIMA(endog,

order,

exog=None,dates=None,

freq=None,

missing="none")order為階數(shù)(p,d,q),分別為AR參數(shù)、差分階數(shù)和MA參數(shù)差分自回歸移動(dòng)平

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論