版權(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é)成績(jī),我們將使用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é)成績(jī)數(shù)據(jù),我們想測(cè)試這兩個(gè)班級(jí)的平均成績(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ì)量:衡量?jī)山M數(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è)我們有一組房?jī)r(jià)數(shù)據(jù),我們想通過房屋的大?。ㄆ椒矫祝﹣眍A(yù)測(cè)房?jī)r(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)廢棄物再生利用行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 建造陽光房行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 尋呼服務(wù)行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 醫(yī)用眼罩產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 自動(dòng)人行道產(chǎn)品供應(yīng)鏈分析
- 機(jī)械式標(biāo)志產(chǎn)品供應(yīng)鏈分析
- 廢水處理工程行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 蒸化機(jī)細(xì)分市場(chǎng)深度研究報(bào)告
- 頭發(fā)護(hù)理研究行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 球囊導(dǎo)管用充氣裝置項(xiàng)目營(yíng)銷計(jì)劃書
- 國(guó)家開放大學(xué)電大行政管理畢業(yè)論文《提高行政效率的有效途徑及戰(zhàn)略意義》
- 酒店住宿水單01
- GB∕T 12691-2021 空氣壓縮機(jī)油
- 標(biāo)準(zhǔn)日本語初級(jí)單詞(上冊(cè))
- 初中美術(shù)6.靜物之美-課件-(2)ppt課件
- 完整版軟件工程網(wǎng)上購物系統(tǒng)
- 地理說題范例(課堂PPT)
- 表土剝離施工方案
- (高清正版)GB∕T2059-2017銅及銅合金帶材
- 煙塵煙氣連續(xù)自動(dòng)監(jiān)測(cè)系統(tǒng)復(fù)習(xí)總
- 論隧道施工對(duì)周圍樁基的影響與控制
評(píng)論
0/150
提交評(píng)論