Python數(shù)據(jù)分析:統(tǒng)計(jì)分析教程_第1頁
Python數(shù)據(jù)分析:統(tǒng)計(jì)分析教程_第2頁
Python數(shù)據(jù)分析:統(tǒng)計(jì)分析教程_第3頁
Python數(shù)據(jù)分析:統(tǒng)計(jì)分析教程_第4頁
Python數(shù)據(jù)分析:統(tǒng)計(jì)分析教程_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python數(shù)據(jù)分析:統(tǒng)計(jì)分析教程1數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理是數(shù)據(jù)分析流程中的關(guān)鍵步驟,它確保數(shù)據(jù)的質(zhì)量和適用性,為后續(xù)的統(tǒng)計(jì)分析和建模奠定基礎(chǔ)。本章節(jié)將深入探討數(shù)據(jù)預(yù)處理的三個(gè)核心方面:數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)集成。1.1數(shù)據(jù)清洗數(shù)據(jù)清洗涉及識(shí)別和糾正數(shù)據(jù)集中的錯(cuò)誤、不一致和缺失值。這一步驟對(duì)于提高數(shù)據(jù)質(zhì)量至關(guān)重要,因?yàn)椴桓蓛舻臄?shù)據(jù)可能導(dǎo)致分析結(jié)果的偏差。1.1.1示例:處理缺失值假設(shè)我們有一個(gè)包含用戶信息的數(shù)據(jù)集,其中某些用戶的年齡信息缺失。importpandasaspd

importnumpyasnp

#創(chuàng)建示例數(shù)據(jù)集

data={'Name':['Alice','Bob','Charlie','David'],

'Age':[25,np.nan,30,np.nan],

'City':['NewYork','LosAngeles','Chicago','Houston']}

df=pd.DataFrame(data)

#打印原始數(shù)據(jù)

print("原始數(shù)據(jù):")

print(df)

#使用平均年齡填充缺失值

mean_age=df['Age'].mean()

df['Age'].fillna(mean_age,inplace=True)

#打印處理后的數(shù)據(jù)

print("\n處理后的數(shù)據(jù):")

print(df)1.1.2示例:去除重復(fù)記錄數(shù)據(jù)集中可能包含重復(fù)的記錄,這會(huì)影響分析的準(zhǔn)確性。#創(chuàng)建示例數(shù)據(jù)集,包含重復(fù)記錄

data={'Name':['Alice','Bob','Alice','David'],

'Age':[25,30,25,35],

'City':['NewYork','LosAngeles','NewYork','Houston']}

df=pd.DataFrame(data)

#打印原始數(shù)據(jù)

print("原始數(shù)據(jù):")

print(df)

#去除重復(fù)記錄

df.drop_duplicates(inplace=True)

#打印處理后的數(shù)據(jù)

print("\n處理后的數(shù)據(jù):")

print(df)1.2數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換是將數(shù)據(jù)從一種格式或結(jié)構(gòu)轉(zhuǎn)換為另一種,以滿足分析或建模的需要。這包括數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)標(biāo)準(zhǔn)化和數(shù)據(jù)編碼等。1.2.1示例:數(shù)據(jù)類型轉(zhuǎn)換假設(shè)我們有一個(gè)數(shù)據(jù)集,其中的日期字段被錯(cuò)誤地存儲(chǔ)為字符串格式。#創(chuàng)建示例數(shù)據(jù)集

data={'Name':['Alice','Bob','Charlie'],

'DateOfBirth':['1995-01-01','1990-05-15','1985-12-31']}

df=pd.DataFrame(data)

#打印原始數(shù)據(jù)

print("原始數(shù)據(jù):")

print(df)

#將日期字段轉(zhuǎn)換為日期類型

df['DateOfBirth']=pd.to_datetime(df['DateOfBirth'])

#打印處理后的數(shù)據(jù)

print("\n處理后的數(shù)據(jù):")

print(df)1.2.2示例:數(shù)據(jù)標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)化是將數(shù)據(jù)縮放到一個(gè)特定的范圍,如0到1之間,這對(duì)于某些機(jī)器學(xué)習(xí)算法是必要的。#創(chuàng)建示例數(shù)據(jù)集

data={'Name':['Alice','Bob','Charlie'],

'Income':[50000,120000,80000]}

df=pd.DataFrame(data)

#打印原始數(shù)據(jù)

print("原始數(shù)據(jù):")

print(df)

#使用MinMaxScaler進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化

fromsklearn.preprocessingimportMinMaxScaler

scaler=MinMaxScaler()

df['Income']=scaler.fit_transform(df[['Income']])

#打印處理后的數(shù)據(jù)

print("\n處理后的數(shù)據(jù):")

print(df)1.3數(shù)據(jù)集成數(shù)據(jù)集成是從多個(gè)數(shù)據(jù)源中合并數(shù)據(jù),以創(chuàng)建一個(gè)統(tǒng)一的數(shù)據(jù)視圖。這在處理來自不同系統(tǒng)或格式的數(shù)據(jù)時(shí)特別有用。1.3.1示例:合并兩個(gè)數(shù)據(jù)集假設(shè)我們有兩個(gè)數(shù)據(jù)集,一個(gè)包含用戶的基本信息,另一個(gè)包含用戶的購買歷史。#創(chuàng)建用戶基本信息數(shù)據(jù)集

data1={'UserID':[1,2,3],

'Name':['Alice','Bob','Charlie']}

df1=pd.DataFrame(data1)

#創(chuàng)建用戶購買歷史數(shù)據(jù)集

data2={'UserID':[1,2,4],

'Product':['Apple','Banana','Cherry']}

df2=pd.DataFrame(data2)

#打印原始數(shù)據(jù)集

print("用戶基本信息數(shù)據(jù)集:")

print(df1)

print("\n用戶購買歷史數(shù)據(jù)集:")

print(df2)

#使用左連接合并兩個(gè)數(shù)據(jù)集

df=pd.merge(df1,df2,on='UserID',how='left')

#打印合并后的數(shù)據(jù)集

print("\n合并后的數(shù)據(jù)集:")

print(df)以上示例展示了如何使用Python的Pandas庫進(jìn)行數(shù)據(jù)預(yù)處理,包括數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)集成。這些步驟是確保數(shù)據(jù)質(zhì)量、提高分析準(zhǔn)確性和效率的基礎(chǔ)。2Python基礎(chǔ)統(tǒng)計(jì)分析2.1描述性統(tǒng)計(jì)描述性統(tǒng)計(jì)是數(shù)據(jù)分析的基礎(chǔ),它涉及使用數(shù)值和圖表來總結(jié)和描述數(shù)據(jù)集的特征。在Python中,pandas庫提供了強(qiáng)大的工具來處理數(shù)據(jù),而numpy和scipy則提供了統(tǒng)計(jì)計(jì)算功能。2.1.1示例:計(jì)算數(shù)據(jù)集的均值、中位數(shù)和標(biāo)準(zhǔn)差假設(shè)我們有一個(gè)數(shù)據(jù)集,包含了一個(gè)班級(jí)學(xué)生的數(shù)學(xué)成績,我們將使用pandas和numpy來計(jì)算均值、中位數(shù)和標(biāo)準(zhǔn)差。importpandasaspd

importnumpyasnp

#創(chuàng)建數(shù)據(jù)

data={'Scores':[85,90,78,92,88,76,95,89,82,80]}

#轉(zhuǎn)換為DataFrame

df=pd.DataFrame(data)

#計(jì)算均值

mean=df['Scores'].mean()

#計(jì)算中位數(shù)

median=df['Scores'].median()

#計(jì)算標(biāo)準(zhǔn)差

std_dev=df['Scores'].std()

print(f"均值:{mean}")

print(f"中位數(shù):{median}")

print(f"標(biāo)準(zhǔn)差:{std_dev}")2.1.2解釋均值:所有數(shù)值的平均值,這里是84.6。中位數(shù):將數(shù)值按順序排列后位于中間的數(shù),這里是88.0。標(biāo)準(zhǔn)差:衡量數(shù)值的離散程度,這里是5.54。2.2概率分布概率分布描述了隨機(jī)變量可能取值的概率。在Python中,scipy.stats模塊提供了多種概率分布的函數(shù)。2.2.1示例:正態(tài)分布的可視化我們將使用scipy.stats和matplotlib來可視化一個(gè)正態(tài)分布。importnumpyasnp

importmatplotlib.pyplotasplt

fromscipy.statsimportnorm

#設(shè)置參數(shù)

mu,sigma=0,0.1

x=np.linspace(norm.ppf(0.01,mu,sigma),norm.ppf(0.99,mu,sigma),100)

#生成正態(tài)分布

y=norm.pdf(x,mu,sigma)

#繪制圖形

plt.plot(x,y)

plt.title('正態(tài)分布')

plt.xlabel('值')

plt.ylabel('概率密度')

plt.show()2.2.2解釋正態(tài)分布:也稱為高斯分布,是一種連續(xù)概率分布,其圖形呈鐘形曲線。參數(shù):mu是均值,sigma是標(biāo)準(zhǔn)差。ppf函數(shù):百分點(diǎn)函數(shù),用于計(jì)算分布的特定分位數(shù)。pdf函數(shù):概率密度函數(shù),用于計(jì)算給定值的概率密度。2.3假設(shè)檢驗(yàn)假設(shè)檢驗(yàn)是一種統(tǒng)計(jì)方法,用于基于樣本數(shù)據(jù)來測(cè)試關(guān)于總體參數(shù)的假設(shè)。在Python中,scipy.stats提供了多種假設(shè)檢驗(yàn)的函數(shù)。2.3.1示例:t檢驗(yàn)假設(shè)我們有兩個(gè)班級(jí)的數(shù)學(xué)成績數(shù)據(jù),我們想測(cè)試這兩個(gè)班級(jí)的平均成績是否有顯著差異。importnumpyasnp

fromscipy.statsimportttest_ind

#創(chuàng)建數(shù)據(jù)

class1_scores=np.array([85,90,78,92,88,76,95,89,82,80])

class2_scores=np.array([80,85,75,90,88,78,92,81,83,79])

#進(jìn)行t檢驗(yàn)

t_stat,p_value=ttest_ind(class1_scores,class2_scores)

print(f"t統(tǒng)計(jì)量:{t_stat}")

print(f"p值:{p_value}")2.3.2解釋t檢驗(yàn):用于比較兩個(gè)獨(dú)立樣本的平均數(shù)是否相同。t統(tǒng)計(jì)量:衡量兩組數(shù)據(jù)均值差異的大小。p值:表示在原假設(shè)為真的情況下,觀察到當(dāng)前樣本數(shù)據(jù)或更極端數(shù)據(jù)的概率。如果p值小于0.05,我們通常會(huì)拒絕原假設(shè),認(rèn)為兩組數(shù)據(jù)的均值有顯著差異。通過這些示例,我們可以看到Python在進(jìn)行基礎(chǔ)統(tǒng)計(jì)分析時(shí)的強(qiáng)大功能,從簡(jiǎn)單的描述性統(tǒng)計(jì)到復(fù)雜的概率分布和假設(shè)檢驗(yàn),Python都能提供有效的工具和庫來支持。3使用Pandas進(jìn)行數(shù)據(jù)分析3.1Pandas數(shù)據(jù)結(jié)構(gòu)Pandas是一個(gè)強(qiáng)大的Python數(shù)據(jù)分析庫,它提供了兩種主要的數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。3.1.1SeriesSeries是一個(gè)一維的數(shù)組,可以保存任何數(shù)據(jù)類型(整數(shù)、字符串、浮點(diǎn)數(shù)、Python對(duì)象等)。它類似于一維的NumPy數(shù)組,但更靈活,可以有軸標(biāo)簽(即索引)。示例代碼importpandasaspd

#創(chuàng)建一個(gè)Series

data=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

print(data)

#輸出:

#a1

#b2

#c3

#d4

#e5

#dtype:int643.1.2DataFrameDataFrame是一個(gè)二維的表格型數(shù)據(jù)結(jié)構(gòu),它包含一個(gè)或多個(gè)Series對(duì)象。它可以看作是一個(gè)字典的字典,其中的鍵是列名,值是Series對(duì)象。DataFrame可以保存多種類型的數(shù)據(jù),并且每一列可以有不同的數(shù)據(jù)類型。示例代碼#創(chuàng)建一個(gè)DataFrame

data={

'Name':pd.Series(['Tom','James','Ricky','Vin','Steve']),

'Age':pd.Series([25,26,25,23,30]),

'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20])

}

df=pd.DataFrame(data)

print(df)

#輸出:

#NameAgeRating

#0Tom254.23

#1James263.24

#2Ricky253.98

#3Vin232.56

#4Steve303.203.2數(shù)據(jù)篩選與排序Pandas提供了多種方法來篩選和排序數(shù)據(jù),這對(duì)于數(shù)據(jù)分析來說是非常重要的。3.2.1數(shù)據(jù)篩選數(shù)據(jù)篩選可以通過布爾索引、loc和iloc方法來實(shí)現(xiàn)。示例代碼#布爾索引篩選

print(df[df['Age']>25])

#輸出:

#NameAgeRating

#1James263.24

#4Steve303.20

#使用loc方法篩選

print(df.loc[df['Name']=='Tom'])

#輸出:

#NameAgeRating

#0Tom25數(shù)據(jù)排序數(shù)據(jù)排序可以通過sort_values和sort_index方法來實(shí)現(xiàn)。示例代碼#按Age列排序

print(df.sort_values(by='Age'))

#輸出:

#NameAgeRating

#3Vin232.56

#0Tom254.23

#2Ricky253.98

#1James263.24

#4Steve303.20

#按索引排序

print(df.sort_index())

#輸出:

#NameAgeRating

#0Tom254.23

#1James263.24

#2Ricky253.98

#3Vin232.56

#4Steve303.203.3數(shù)據(jù)聚合與分組數(shù)據(jù)聚合和分組是數(shù)據(jù)分析中的關(guān)鍵步驟,Pandas提供了groupby方法來實(shí)現(xiàn)這一功能。3.3.1數(shù)據(jù)分組groupby方法可以按照一個(gè)或多個(gè)列來分組數(shù)據(jù)。示例代碼#按Name列分組

grouped=df.groupby('Name')

print(grouped['Age'].mean())

#輸出:

#Name

#James26.0

#Ricky25.0

#Steve30.0

#Tom25.0

#Vin23.0

#Name:Age,dtype:float643.3.2數(shù)據(jù)聚合數(shù)據(jù)聚合可以通過agg方法來實(shí)現(xiàn),它可以應(yīng)用多個(gè)函數(shù)到分組后的數(shù)據(jù)上。示例代碼#對(duì)分組后的數(shù)據(jù)應(yīng)用多個(gè)函數(shù)

grouped=df.groupby('Name')

print(grouped['Age'].agg(['mean','sum','count']))

#輸出:

#meansumcount

#Name

#James26.0261

#Ricky25.0251

#Steve30.0301

#Tom25.0251

#Vin23.0231通過上述示例,我們可以看到Pandas如何簡(jiǎn)化數(shù)據(jù)處理和分析的過程。從創(chuàng)建數(shù)據(jù)結(jié)構(gòu)到篩選、排序和聚合數(shù)據(jù),Pandas提供了直觀且強(qiáng)大的工具,使得數(shù)據(jù)分析變得更加高效和容易。4數(shù)據(jù)可視化4.1Matplotlib基礎(chǔ)繪圖Matplotlib是一個(gè)用于Python的2D繪圖庫,它能夠以多種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。Matplotlib可以繪制線圖、散點(diǎn)圖、直方圖、柱狀圖、餅圖等,是Python數(shù)據(jù)可視化中最基礎(chǔ)且強(qiáng)大的工具之一。4.1.1示例:繪制簡(jiǎn)單線圖importmatplotlib.pyplotasplt

importnumpyasnp

#創(chuàng)建數(shù)據(jù)

x=np.linspace(0,10,100)

y=np.sin(x)

#創(chuàng)建圖形

plt.figure(figsize=(10,5))

#繪制線圖

plt.plot(x,y,label='sin(x)',color='blue')

#添加標(biāo)題和標(biāo)簽

plt.title('SinusoidalWave')

plt.xlabel('x-axis')

plt.ylabel('y-axis')

#添加圖例

plt.legend()

#顯示圖形

plt.show()描述:此示例展示了如何使用Matplotlib繪制一個(gè)簡(jiǎn)單的正弦波線圖。首先,我們導(dǎo)入了必要的庫,然后使用numpy創(chuàng)建了x和y軸的數(shù)據(jù)。接著,我們?cè)O(shè)置了圖形的大小,使用plot函數(shù)繪制了線圖,并通過title,xlabel,和ylabel函數(shù)添加了標(biāo)題和軸標(biāo)簽。最后,我們使用legend函數(shù)添加了圖例,并通過show函數(shù)顯示了圖形。4.2Seaborn統(tǒng)計(jì)繪圖Seaborn是基于Matplotlib的一個(gè)Python數(shù)據(jù)可視化庫,它提供了更高級(jí)的接口用于繪制統(tǒng)計(jì)圖形。Seaborn的設(shè)計(jì)目標(biāo)是讓圖形的繪制更加直觀,同時(shí)提供更豐富的默認(rèn)樣式,使得生成的圖形更加美觀。4.2.1示例:使用Seaborn繪制箱形圖importseabornassns

importmatplotlib.pyplotasplt

importpandasaspd

#創(chuàng)建數(shù)據(jù)

data={'Category':['A','B','A','B','A','B','A','B'],

'Values':[1,2,3,4,5,6,7,8]}

df=pd.DataFrame(data)

#創(chuàng)建箱形圖

plt.figure(figsize=(10,6))

sns.boxplot(x='Category',y='Values',data=df)

#添加標(biāo)題和標(biāo)簽

plt.title('BoxPlotofCategories')

plt.xlabel('Category')

plt.ylabel('Values')

#顯示圖形

plt.show()描述:在這個(gè)示例中,我們使用Seaborn繪制了一個(gè)箱形圖,用于展示不同類別的數(shù)據(jù)分布。首先,我們創(chuàng)建了一個(gè)簡(jiǎn)單的數(shù)據(jù)集,然后將其轉(zhuǎn)換為PandasDataFrame。接著,我們?cè)O(shè)置了圖形的大小,并使用boxplot函數(shù)繪制了箱形圖。我們通過title,xlabel,和ylabel函數(shù)添加了標(biāo)題和軸標(biāo)簽,最后使用show函數(shù)顯示了圖形。4.3數(shù)據(jù)可視化最佳實(shí)踐數(shù)據(jù)可視化不僅僅是生成圖形,更重要的是如何有效地傳達(dá)信息。以下是一些數(shù)據(jù)可視化最佳實(shí)踐:選擇合適的圖表類型:根據(jù)數(shù)據(jù)的性質(zhì)和你想要傳達(dá)的信息,選擇最合適的圖表類型。清晰的標(biāo)簽和標(biāo)題:確保每個(gè)軸都有清晰的標(biāo)簽,并為圖形添加一個(gè)描述性的標(biāo)題。使用顏色增強(qiáng)可讀性:合理使用顏色可以幫助區(qū)分不同的數(shù)據(jù)系列,但應(yīng)避免使用過多或過于鮮艷的顏色。避免圖表雜亂:去除不必要的元素,如網(wǎng)格線、邊框和背景,以保持圖表的清晰和簡(jiǎn)潔。使用圖例和注釋:當(dāng)圖表包含多個(gè)數(shù)據(jù)系列時(shí),使用圖例來區(qū)分它們。對(duì)于復(fù)雜的圖表,添加注釋以幫助解釋關(guān)鍵點(diǎn)。確保數(shù)據(jù)的準(zhǔn)確性:在可視化數(shù)據(jù)之前,確保數(shù)據(jù)的清洗和預(yù)處理工作已經(jīng)完成,避免展示錯(cuò)誤或誤導(dǎo)性的信息。遵循這些最佳實(shí)踐,可以確保你的數(shù)據(jù)可視化既美觀又具有信息傳達(dá)的有效性。5高級(jí)統(tǒng)計(jì)方法5.1回歸分析5.1.1原理回歸分析是一種預(yù)測(cè)建模技術(shù),主要用于探索一個(gè)或多個(gè)自變量與一個(gè)因變量之間的關(guān)系。在Python中,我們通常使用statsmodels或scikit-learn庫來進(jìn)行回歸分析?;貧w分析可以分為線性回歸、多元回歸、邏輯回歸等多種類型,其中線性回歸是最基礎(chǔ)的形式,它假設(shè)自變量與因變量之間存在線性關(guān)系。5.1.2內(nèi)容線性回歸示例假設(shè)我們有一組數(shù)據(jù),表示房屋面積與價(jià)格之間的關(guān)系,我們想要通過線性回歸來預(yù)測(cè)房屋價(jià)格。importnumpyasnp

importpandasaspd

importstatsmodels.apiassm

#創(chuàng)建示例數(shù)據(jù)

data={

'area':[1000,1500,2000,2500,3000],

'price':[200000,300000,350000,400000,500000]

}

df=pd.DataFrame(data)

#添加常數(shù)項(xiàng)

df['intercept']=1

#定義模型

model=sm.OLS(df['price'],df[['intercept','area']])

#擬合模型

results=model.fit()

#輸出結(jié)果

print(results.summary())在這個(gè)例子中,我們首先導(dǎo)入了必要的庫,然后創(chuàng)建了一個(gè)包含房屋面積和價(jià)格的DataFrame。我們添加了一個(gè)常數(shù)項(xiàng),這是因?yàn)榫€性回歸模型通常包含一個(gè)截距項(xiàng)。然后,我們使用statsmodels庫中的OLS(普通最小二乘法)來定義模型,并使用fit方法來擬合模型。最后,我們打印出模型的摘要,這將顯示模型的系數(shù)、R平方值、P值等統(tǒng)計(jì)信息。5.2時(shí)間序列分析5.2.1原理時(shí)間序列分析是統(tǒng)計(jì)學(xué)中的一種方法,用于分析隨時(shí)間變化的數(shù)據(jù)序列。在Python中,pandas庫提供了強(qiáng)大的時(shí)間序列處理功能,而statsmodels庫則提供了多種時(shí)間序列模型,如ARIMA、季節(jié)性分解等。時(shí)間序列分析的目標(biāo)通常包括預(yù)測(cè)未來值、檢測(cè)趨勢(shì)和季節(jié)性、以及模型的診斷和驗(yàn)證。5.2.2內(nèi)容ARIMA模型示例假設(shè)我們有一組表示某商品每月銷售量的時(shí)間序列數(shù)據(jù),我們想要使用ARIMA模型來預(yù)測(cè)未來的銷售量。importpandasaspd

importstatsmodels.apiassm

#加載數(shù)據(jù)

sales=pd.read_csv('sales_data.csv',index_col='date',parse_dates=True)

#定義ARIMA模型

model=sm.tsa.ARIMA(sales,order=(1,1,0))

#擬合模型

results=model.fit()

#預(yù)測(cè)未來值

forecast=results.get_forecast(steps=12)

#輸出預(yù)測(cè)結(jié)果

print(forecast.summary_frame())在這個(gè)例子中,我們首先加載了包含銷售數(shù)據(jù)的CSV文件,并將其索引設(shè)置為日期,以便pandas能夠正確處理時(shí)間序列數(shù)據(jù)。然后,我們定義了一個(gè)ARIMA模型,其中order參數(shù)表示自回歸項(xiàng)、差分項(xiàng)和移動(dòng)平均項(xiàng)的階數(shù)。我們使用fit方法來擬合模型,并使用get_forecast方法來預(yù)測(cè)未來12個(gè)月的銷售量。最后,我們打印出預(yù)測(cè)結(jié)果的摘要。5.3聚類分析5.3.1原理聚類分析是一種無監(jiān)督學(xué)習(xí)方法,用于將數(shù)據(jù)集中的對(duì)象分組到不同的簇中,使得簇內(nèi)的對(duì)象彼此相似,而簇間的對(duì)象差異較大。在Python中,scikit-learn庫提供了多種聚類算法,如K-means、層次聚類、DBSCAN等。聚類分析在市場(chǎng)細(xì)分、圖像分析、生物信息學(xué)等領(lǐng)域有廣泛的應(yīng)用。5.3.2內(nèi)容K-means聚類示例假設(shè)我們有一組客戶數(shù)據(jù),包含客戶的年齡和收入,我們想要使用K-means聚類算法來將客戶分為不同的群體。importnumpyasnp

importpandasaspd

fromsklearn.clusterimportKMeans

importmatplotlib.pyplotasplt

#創(chuàng)建示例數(shù)據(jù)

data={

'age':[25,30,35,40,45,50,55,60,65,70],

'income':[25000,30000,35000,40000,45000,50000,55000,60000,65000,70000]

}

df=pd.DataFrame(data)

#定義K-means模型

kmeans=KMeans(n_clusters=2)

#擬合模型

kmeans.fit(df)

#預(yù)測(cè)聚類標(biāo)簽

labels=kmeans.predict(df)

#輸出聚類中心

print(kmeans.cluster_centers_)

#可視化聚類結(jié)果

plt.scatter(df['age'],df['income'],c=labels)

plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s=300,c='red')

plt.xlabel('Age')

plt.ylabel('Income')

plt.show()在這個(gè)例子中,我們首先創(chuàng)建了一個(gè)包含客戶年齡和收入的DataFrame。然后,我們定義了一個(gè)K-means模型,其中n_clusters參數(shù)表示我們想要將數(shù)據(jù)分為幾個(gè)簇。我們使用fit方法來擬合模型,并使用predict方法來預(yù)測(cè)每個(gè)數(shù)據(jù)點(diǎn)的聚類標(biāo)簽。我們打印出聚類中心,并使用matplotlib庫來可視化聚類結(jié)果,其中不同的顏色表示不同的簇,紅色的點(diǎn)表示聚類中心。6統(tǒng)計(jì)建模與機(jī)器學(xué)習(xí)6.1線性模型6.1.1原理線性模型是統(tǒng)計(jì)建模與機(jī)器學(xué)習(xí)中最基礎(chǔ)的模型之一,它假設(shè)輸出變量(目標(biāo))與輸入變量(特征)之間存在線性關(guān)系。線性模型可以分為線性回歸和邏輯回歸,分別用于連續(xù)值預(yù)測(cè)和分類預(yù)測(cè)。線性回歸線性回歸的目標(biāo)是找到一個(gè)線性函數(shù),使得預(yù)測(cè)值與實(shí)際值之間的差異最小。這個(gè)差異通常用損失函數(shù)(如均方誤差)來衡量。模型通過最小化損失函數(shù)來學(xué)習(xí)參數(shù)。邏輯回歸邏輯回歸用于分類問題,尤其是二分類問題。它使用Sigmoid函數(shù)將線性組合的輸出轉(zhuǎn)換為概率值,然后根據(jù)概率值進(jìn)行分類。6.1.2示例:線性回歸假設(shè)我們有一組房價(jià)數(shù)據(jù),我們想通過房屋的大?。ㄆ椒矫祝﹣眍A(yù)測(cè)房價(jià)。importnumpyasnp

importpandasaspd

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.linear_modelimportLinearRegression

fromsklearn.metricsimportmean_squared_error

#創(chuàng)建示例數(shù)據(jù)

data={

'size':[50,60,70,80,90,100,110,120,130,140],

'price':[100000,120000,140000,160000,180000,200000,220000,240000,260000,280000]

}

df=pd.DataFrame(data)

#劃分?jǐn)?shù)據(jù)集

X=df['size'].values.reshape(-1,1)

y=df['price'].values

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#訓(xùn)練模型

model=LinearRegression()

model.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=model.predict(X_test)

#評(píng)估模型

mse=mean_squared_error(y_test,y_pred)

print(f'MeanSquaredError:{mse}')6.1.3示例:邏輯回歸假設(shè)我們有一組數(shù)據(jù),表示學(xué)生的學(xué)習(xí)時(shí)間與是否通過考試的關(guān)系,我們使用邏輯回歸來預(yù)測(cè)學(xué)生是否能通過考試。importnumpyasnp

importpandasaspd

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.linear_modelimportLogisticRegression

fromsklearn.metricsimportaccuracy_score

#創(chuàng)建示例數(shù)據(jù)

data={

'study_hours':[1,2,3,4,5,6,7,8,9,10],

'passed_exam':[0,0,0,0,1,1,1,1,1,1]

}

df=pd.DataFrame(data)

#劃分?jǐn)?shù)據(jù)集

X=df['study_hours'].values.reshape(-1,1)

y=df['passed_exam'].values

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#訓(xùn)練模型

model=LogisticRegression()

model.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=model.predict(X_test)

#評(píng)估模型

accuracy=accuracy_score(y_test,y_pred)

print(f'Accuracy:{accuracy}')6.2決策樹與隨機(jī)森林6.2.1原理決策樹是一種樹形結(jié)構(gòu)的模型,用于分類和回歸任務(wù)。它通過遞歸地分割數(shù)據(jù)集,基于特征值來做出決策。隨機(jī)森林則是由多個(gè)決策樹組成的集合模型,通過集成學(xué)習(xí)提高預(yù)測(cè)的準(zhǔn)確性和穩(wěn)定性。決策樹決策樹的構(gòu)建過程包括選擇最佳特征進(jìn)行分割,遞歸地構(gòu)建子樹,直到滿足停止條件。常用的決策樹算法有ID3、C4.5和CART。隨機(jī)森林隨機(jī)森林通過構(gòu)建多個(gè)決策樹并進(jìn)行投票(分類)或平均(回歸)來做出最終預(yù)測(cè)。每個(gè)決策樹在訓(xùn)練時(shí)使用數(shù)據(jù)集的隨機(jī)子集和特征的隨機(jī)子集,這增加了模型的多樣性。6.2.2示例:決策樹假設(shè)我們有一組天氣數(shù)據(jù),我們想通過天氣條件來預(yù)測(cè)是否進(jìn)行戶外活動(dòng)。importpandasaspd

fromsklearn.treeimportDecisionTreeClassifier

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportaccuracy_score

#創(chuàng)建示例數(shù)據(jù)

data={

'outlook':['sunny','sunny','overcast','rain','rain','rain','overcast','sunny','sunny','rain','sunny','overcast','overcast','rain'],

'temperature':[85,80,83,70,68,59,64,72,69,75,75,72,81,71],

'humidity':[85,90,86,96,80,70,68,95,70,80,70,90,75,91],

'windy':['FALSE','TRUE','FALSE','FALSE','FALSE','TRUE','TRUE','FALSE','FALSE','FALSE','TRUE','FALSE','TRUE','TRUE'],

'play':['NO','NO','YES','YES','YES','NO','YES','NO','YES','YES','YES','YES','YES','NO']

}

df=pd.DataFrame(data)

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

df['outlook']=df['outlook'].map({'sunny':0,'overcast':1,'rain':2})

df['windy']=df['windy'].map({'FALSE':0,'TRUE':1})

#劃分?jǐn)?shù)據(jù)集

X=df.drop('play',axis=1)

y=df['play']

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#訓(xùn)練模型

model=DecisionTreeClassifier()

model.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=model.predict(X_test)

#評(píng)估模型

accuracy=accuracy_score(y_test,y_pred)

print(f'Accuracy:{accuracy}')6.2.3示例:隨機(jī)森林使用相同的天氣數(shù)據(jù),我們使用隨機(jī)森林來預(yù)測(cè)是否進(jìn)行戶外活動(dòng)。importpandasaspd

fromsklearn.ensembleimportRandomForestClassifier

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportaccuracy_score

#創(chuàng)建示例數(shù)據(jù)

data={

'outlook':['sunny','sunny','overcast','rain','rain','rain','overcast','sunny','sunny','rain','sunny','overcast','overcast','rain'],

'temperature':[85,80,83,70,68,59,64,72,69,75,75,72,81,71],

'humidity':[85,90,86,96,80,70,68,95,70,80,70,90,75,91],

'windy':['FALSE','TRUE','FALSE','FALSE','FALSE','TRUE','TRUE','FALSE','FALSE','FALSE','TRUE','FALSE','TRUE','TRUE'],

'play':['NO','NO','YES','YES','YES','NO','YES','NO','YES','YES','YES','YES','YES','NO']

}

df=pd.DataFrame(data)

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

df['outlook']=df['outlook'].map({'sunny':0,'overcast':1,'rain':2})

df['windy']=df['windy'].map({'FALSE':0,'TRUE':1})

#劃分?jǐn)?shù)據(jù)集

X=df.drop('play',axis=1)

y=df['play']

X_train,X_test,y_t

溫馨提示

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

評(píng)論

0/150

提交評(píng)論