版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 線上課程設(shè)計(jì) 動(dòng)畫(huà)
- 藥學(xué)課程設(shè)計(jì)指南
- 機(jī)設(shè)課程設(shè)計(jì)的模板
- 網(wǎng)絡(luò)服務(wù)器配置課程設(shè)計(jì)
- 捅馬蜂窩課程設(shè)計(jì)
- 智能可穿戴手表課程設(shè)計(jì)
- 2024年職業(yè)生涯規(guī)劃教案篇
- 藥品檢驗(yàn)類(lèi)課程設(shè)計(jì)論文
- 2024年移動(dòng)智慧家庭工程師(高級(jí))資格認(rèn)證考試題庫(kù)-上(選擇題)
- 物流運(yùn)輸行業(yè)營(yíng)銷(xiāo)工作總結(jié)
- 佛山市順德區(qū)2023-2024學(xué)年四上數(shù)學(xué)期末質(zhì)量檢測(cè)模擬試題含答案
- 昆明市公交集團(tuán)車(chē)載視頻監(jiān)控平臺(tái)升級(jí)方案20191025
- 一流課程申報(bào)
- 高中體育特長(zhǎng)生名校報(bào)考路徑分析課件
- 主要建筑材料碳排放因子查詢(xún)表
- 建筑施工室內(nèi)裝飾設(shè)計(jì)施工圖講解
- 冠寓運(yùn)營(yíng)管理手冊(cè)
- 耳部銅砭刮痧技術(shù)評(píng)分標(biāo)準(zhǔn)
- 玻璃幕墻施工方案幕墻
- 抗精神疾病藥物與麻醉課件
- 數(shù)據(jù)庫(kù)原理與應(yīng)用課后習(xí)題答案李春葆 編
評(píng)論
0/150
提交評(píng)論