Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)-第7章二維碼案例_第1頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)-第7章二維碼案例_第2頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)-第7章二維碼案例_第3頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)-第7章二維碼案例_第4頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)-第7章二維碼案例_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章案例案例1:預(yù)測廣告投放與用戶增長關(guān)系1.案例背景在大型促銷活動(dòng)前一天上午,業(yè)務(wù)方獲取了一些數(shù)據(jù),希望能夠利用這些數(shù)據(jù)進(jìn)行UV數(shù)的預(yù)測。然而,他們提出的限制條件是必須在一個(gè)小時(shí)內(nèi)給出結(jié)果,因此需要快速響應(yīng)。在上述場景和需求下,我們發(fā)現(xiàn)這次數(shù)據(jù)工作具有以下特點(diǎn):這是一個(gè)回歸任務(wù),旨在預(yù)測UV數(shù)值。由于時(shí)間緊迫,任務(wù)重要,無法進(jìn)行深入的數(shù)據(jù)探索、算法選擇和參數(shù)調(diào)優(yōu)等工作,因此必須在有限時(shí)間內(nèi)獲得盡可能好的結(jié)果。本次工作不注重中間過程,只要求輸出最終結(jié)果。在實(shí)施時(shí),我們的基本思路是選擇一些常見且效果較好的算法和模型。由于無法進(jìn)行深入的數(shù)據(jù)集分析,因此在特征預(yù)處理和特征工程方面不會投入過多精力。2.數(shù)據(jù)源概述數(shù)據(jù)源包括網(wǎng)站分析和廣告系統(tǒng),共有93條記錄和5個(gè)字段,無缺失值,具體如下:MONEY:廣告費(fèi)用,數(shù)值型。TYPE:廣告類型,字符串型。SIZE:廣告尺寸,字符串型。PROMOTION:促銷賣點(diǎn),字符串型。UV:獨(dú)立訪客數(shù)量,數(shù)值型。根據(jù)數(shù)據(jù)信息,需要對TYPE、SIZE和PROMOTION進(jìn)行OneHotEncode轉(zhuǎn)換,以便進(jìn)行距離計(jì)算。由于MONEY與其他字段的量綱不同,需要進(jìn)行標(biāo)準(zhǔn)化處理。3.案例過程第一部分導(dǎo)入庫1importpandasaspd2importnumpyasnp3fromsklearn.linear_modelimportRidge4fromsklearn.decompositionimportPCA5fromsklearn.preprocessingimportOrdinalEncoder,OneHotEncoder,MinMaxScaler6fromsklearn.pipelineimportPipeline7fromsklearn.model_selectionimportcross_val_score8fromsklearn.metricsimportmake_scorer,mean_absolute_error,mean_squared_error,median_absolute_error代碼1導(dǎo)入pandas庫,將其重命名為pd,用于數(shù)據(jù)處理和分析。pandas庫用來讀取和處理數(shù)據(jù)。代碼2導(dǎo)入numpy庫,將其重命名為np,用于數(shù)值計(jì)算。numpy庫提供了豐富的數(shù)學(xué)函數(shù)和數(shù)組操作。代碼3導(dǎo)入Ridge線性回歸模型,用于回歸分析。Ridge模型可以用于處理回歸問題。代碼4導(dǎo)入PCA主成分分析模型,用于降維。PCA模型可以將高維數(shù)據(jù)降低到較低維度。代碼5導(dǎo)入OrdinalEncoder、OneHotEncoder和MinMaxScaler預(yù)處理模塊,用于數(shù)據(jù)預(yù)處理。OrdinalEncoder用于對有序分類特征進(jìn)行編碼,OneHotEncoder用于對無序分類特征進(jìn)行編碼,MinMaxScaler用于對數(shù)據(jù)進(jìn)行縮放。代碼6導(dǎo)入Pipeline模塊,用于構(gòu)建數(shù)據(jù)處理和建模的流水線。Pipeline可以將多個(gè)處理步驟封裝成一個(gè)模型。代碼7導(dǎo)入cross_val_score函數(shù),用于交叉驗(yàn)證評估模型性能。cross_val_score可以幫助評估模型的泛化能力。代碼8導(dǎo)入make_scorer函數(shù)和一些評估指標(biāo),如mean_absolute_error、mean_squared_error和median_absolute_error,用于模型評估。make_scorer可以將評估指標(biāo)轉(zhuǎn)換為可用于模型選擇的函數(shù)。第二部分讀取數(shù)據(jù)9ad_data=pd.read_excel('二維碼案例.xlsx',sheet_name='案例1')10print(ad_data.head())代碼9使用pd.read_excel方法讀取名為'二維碼案例.xlsx'的Excel文件中的數(shù)據(jù),并將其存儲在名為ad_data的DataFrame中。sheet_name='案例1'指定要讀取的工作表名稱為'案例1'。代碼10使用print(ad_data.head())打印出ad_dataDataFrame的前幾行數(shù)據(jù),以便查看讀取的數(shù)據(jù)是否正確。.head()方法默認(rèn)顯示前5行數(shù)據(jù),可以通過傳遞參數(shù)指定顯示的行數(shù)。結(jié)果如下:MONEYTYPESIZEPROMOTIONUV028192banner308*388秒殺68980139275banner308*388秒殺78875234512不確定600*90打折81400324430橫幅480*360滿贈(zèng)80624423811banner308*388秒殺65562第三部分?jǐn)?shù)據(jù)預(yù)處理11cols=['TYPE','SIZE','PROMOTION']12cate_model=Pipeline([('ode',OrdinalEncoder()),('ohe',OneHotEncoder(categories='auto',sparse=False))])13cate_data=cate_model.fit_transform(ad_data[cols])14num_model=MinMaxScaler()15num_data=num_model.fit_transform(ad_data[['MONEY']])代碼11定義一個(gè)列表cols,包含要在數(shù)據(jù)中使用的特征列的名稱,包括'TYPE'、'SIZE'和'PROMOTION'。代碼12創(chuàng)建一個(gè)數(shù)據(jù)處理流水線cate_model,該流水線包括兩個(gè)步驟:使用OrdinalEncoder對分類特征進(jìn)行編碼,然后使用OneHotEncoder對編碼后的特征進(jìn)行獨(dú)熱編碼。categories='auto'指定OneHotEncoder自動(dòng)識別分類特征的類別,sparse=False表示不生成稀疏矩陣。代碼13使用cate_model.fit_transform(ad_data[cols])對ad_data中的cols列進(jìn)行處理,將處理后的結(jié)果存儲在cate_data中。代碼14創(chuàng)建一個(gè)MinMaxScaler對象num_model,用于對數(shù)值特征進(jìn)行縮放處理。代碼15使用num_model.fit_transform(ad_data[['MONEY']])對ad_data中的'MONEY'列進(jìn)行縮放處理,將處理后的結(jié)果存儲在num_data中。第四部分生成最終模型為x和y16x=np.hstack((cate_data,num_data))17y=ad_data['UV']代碼16使用np.hstack((cate_data,num_data))將經(jīng)過處理的分類特征數(shù)據(jù)cate_data和數(shù)值特征數(shù)據(jù)num_data水平堆疊起來,形成特征矩陣x。這樣處理后的特征矩陣x包含了所有的特征信息,可以用于建立模型。代碼17將ad_data中的'UV'列提取出來,作為目標(biāo)變量y。'UV'列通常代表用戶訪問量(UserVisits),可能是該案例中的一個(gè)重要指標(biāo)。y是一個(gè)一維數(shù)組,包含了對應(yīng)每個(gè)樣本的目標(biāo)變量值。第五部分模型訓(xùn)練18pipe_model=Pipeline([('pca',PCA(n_components=0.85)),('ridge',Ridge())])19pipe_model.fit(x,y)代碼18創(chuàng)建一個(gè)機(jī)器學(xué)習(xí)流水線pipe_model,該流水線包含兩個(gè)步驟:首先使用PCA進(jìn)行特征降維,保留主成分累計(jì)貢獻(xiàn)率達(dá)到85%的特征;然后使用Ridge回歸模型進(jìn)行建模。PCA的n_components參數(shù)設(shè)置為0.85表示要保留的主成分累計(jì)貢獻(xiàn)率為85%。代碼19使用pipe_model.fit(x,y)對特征矩陣x和目標(biāo)變量y進(jìn)行擬合,建立模型。這一步完成后,模型就可以用于預(yù)測和分析了。第六部分模型評估20metrics=[mean_absolute_error,mean_squared_error,median_absolute_error]21columns=[i.__name__foriinmetrics]22scores=[cross_val_score(pipe_model,x,y,cv=3,scoring=make_scorer(i),n_jobs=-1)foriinmetrics]23reg_pd=pd.DataFrame(scores,index=columns).T.round(1)24print(reg_pd)代碼20定義了一個(gè)列表metrics,其中包含了三個(gè)評估指標(biāo)函數(shù)mean_absolute_error、mean_squared_error和median_absolute_error。代碼21創(chuàng)建了一個(gè)列表columns,其中包含了metrics中每個(gè)評估指標(biāo)函數(shù)的名稱,通過i.__name__可以獲取函數(shù)的名稱。代碼22使用列表推導(dǎo)式對每個(gè)評估指標(biāo)函數(shù)進(jìn)行交叉驗(yàn)證評估,將結(jié)果存儲在scores列表中。cross_val_score函數(shù)用于對模型進(jìn)行交叉驗(yàn)證評估,scoring=make_scorer(i)表示使用對應(yīng)的評估指標(biāo)函數(shù)進(jìn)行評分,cv=3表示使用3折交叉驗(yàn)證,n_jobs=-1表示使用所有可用的CPU核心進(jìn)行計(jì)算。代碼23創(chuàng)建一個(gè)DataFramereg_pd,將交叉驗(yàn)證的評分結(jié)果存儲在其中。pd.DataFrame(scores,index=columns).T.round(1)將scores列表轉(zhuǎn)換為DataFrame,并對結(jié)果進(jìn)行轉(zhuǎn)置(.T)和四舍五入保留一位小數(shù)(.round(1)),最終存儲在reg_pd中。代碼24使用print(reg_pd)打印出交叉驗(yàn)證的評分結(jié)果,包括每個(gè)評估指標(biāo)的評分。結(jié)果如下:mean_absolute_errormean_squared_errormedian_absolute_error019730.9525925497.117314.5118386.2515772059.314552.2213681.2342763446.19461.1為了更好地對比評估結(jié)果,可以使用柱形圖評估,代碼如下:25reg_pd.plot(kind='bar',figsize=(10,4),logy=True,title='不同交叉檢驗(yàn)結(jié)果對比')代碼25使用reg_pd.plot(kind='bar',figsize=(10,4),logy=True,title='不同交叉檢驗(yàn)結(jié)果對比')對交叉驗(yàn)證的評分結(jié)果進(jìn)行條形圖可視化。kind='bar'表示繪制條形圖,figsize=(10,4)指定圖形的尺寸為寬度10英寸、高度4英寸,logy=True表示對y軸取對數(shù)以更好地展示數(shù)據(jù)的差異,title='不同交叉檢驗(yàn)結(jié)果對比'表示設(shè)置圖形的標(biāo)題為“不同交叉檢驗(yàn)結(jié)果對比”。具體結(jié)果如下:圖不同交叉檢驗(yàn)結(jié)果對比通過對不同數(shù)據(jù)集下的交叉驗(yàn)證結(jié)果進(jìn)行數(shù)據(jù)和圖形對比,發(fā)現(xiàn)三個(gè)指標(biāo)的差異有一定幅度的波動(dòng),尤其是第三次波動(dòng)較大。這表明模型對數(shù)據(jù)的適應(yīng)性較差,可能會影響最終結(jié)果的輸出。提示模型本身的穩(wěn)定性或魯棒性效果一般。要提高模型效果,可以采取以下方法,例如,增加數(shù)據(jù)量級、增加特征預(yù)處理內(nèi)容、調(diào)節(jié)PCA中主成分的閾值、調(diào)整嶺回歸的各項(xiàng)參數(shù)等。。第七部分預(yù)測新數(shù)據(jù)26data_new=pd.read_csv('二維碼案例1-預(yù)測數(shù)據(jù).txt')27cate_data_new=cate_model.transform(data_new[cols])28num_data_new=num_model.transform(data_new[['MONEY']])29x_new=np.hstack((cate_data_new,num_data_new))30print(pipe_model.predict(x_new).round(0))代碼26使用pd.read_csv('二維碼案例1-預(yù)測數(shù)據(jù).txt')讀取名為'二維碼案例1-預(yù)測數(shù)據(jù).txt'的文本文件中的數(shù)據(jù),并將其存儲在名為data_new的DataFrame中。代碼27使用之前創(chuàng)建的分類特征處理模型cate_model對data_new中的cols列進(jìn)行處理,將處理后的結(jié)果存儲在cate_data_new中。代碼28使用之前創(chuàng)建的數(shù)值特征處理模型num_model對data_new中的'MONEY'列進(jìn)行處理,將處理后的結(jié)果存儲在num_data_new中。代碼29使用np.hstack((cate_data_new,num_data_new))將經(jīng)過處理的分類特征數(shù)據(jù)cate_data_new和數(shù)值特征數(shù)據(jù)num_data_new水平堆疊起來,形成特征矩陣x_new。代碼30使用pipe_model.predict(x_new).round(0)對特征矩陣x_new進(jìn)行預(yù)測,并將預(yù)測結(jié)果四舍五入保留為整數(shù),并打印出來。結(jié)果如下:[87256.77482.80914.77305.81213.80256.77289.]4.獲得廣告UV量通過上述預(yù)測得到的結(jié)果可以直接提供給業(yè)務(wù)部門使用。業(yè)務(wù)部門可以基于預(yù)測的UV值制定廣告目標(biāo),并與營銷平臺進(jìn)行商務(wù)談判與合作等。需要注意的是,由于回歸預(yù)測得到的結(jié)果是浮點(diǎn)型,因此需要將其轉(zhuǎn)換為整數(shù)才能使用。案例2:預(yù)測客戶購買意向1.案例背景在這個(gè)案例中,業(yè)務(wù)部門希望數(shù)據(jù)部門對轉(zhuǎn)化用戶進(jìn)行分析,找出轉(zhuǎn)化用戶的典型特征,即哪些特征對于轉(zhuǎn)化用戶最重要,并針對這些特征采取特定的業(yè)務(wù)動(dòng)作。同時(shí),還需要對一些新用戶進(jìn)行預(yù)測,得出他們轉(zhuǎn)化的可能性和是否會轉(zhuǎn)化。根據(jù)需求,這次數(shù)據(jù)工作的特點(diǎn)如下:需要進(jìn)行特征提取的分析工作,目標(biāo)是得出特征的重要性。需要預(yù)測用戶的轉(zhuǎn)化概率和轉(zhuǎn)化標(biāo)簽。經(jīng)過梳理后,決定使用決策樹的分類算法來實(shí)現(xiàn)這些目標(biāo)。2.數(shù)據(jù)源概述數(shù)據(jù)源包括促銷活動(dòng)系統(tǒng)和CRM系統(tǒng),共有725條記錄和12個(gè)字段,其中含有缺失值,具體如下:USER_ID:用戶ID。LIMIT_INFOR:用戶購買范圍限制類型,分類型數(shù)值索引。CAMPAIGN_TYPE:用戶對應(yīng)的促銷活動(dòng)的類型,分類型數(shù)值索引。CAMPAIGN_LEVEL:用戶對應(yīng)的促銷活動(dòng)的等級,分類型數(shù)值索引。PRODUCT_LEVEL:活動(dòng)對應(yīng)的產(chǎn)品等級,分類型數(shù)值索引。RESOURCE_AMOUNT:商品資源對應(yīng)的備貨數(shù)量,以千為單位,數(shù)值型。EMAIL_RATE:用戶歷史上的email打開率,浮點(diǎn)型。PRICE:商品對應(yīng)的價(jià)格,數(shù)值型。DISCOUNT_RATE:商品對應(yīng)的折扣率,浮點(diǎn)型。HOUR_RESOUCES:商品資源售賣的時(shí)間,以小時(shí)計(jì),數(shù)值型。CAMPAIGN_FEE:商品對應(yīng)的促銷活動(dòng)費(fèi)用。ORDERS:是否會產(chǎn)生訂單轉(zhuǎn)化,轉(zhuǎn)化為1,否則為0。從數(shù)據(jù)信息中可以看出,ORDERS為目標(biāo)字段;LIMIT_INFOR、CAMPAIGN_TYPE、CAMPAIGN_LEVEL、PRODUCT_LEVEL、RESOURCE_AMOUNT為分類型變量,雖然是數(shù)值型索引,但不是連續(xù)性屬性,后續(xù)處理時(shí)需要注意;其余字段為數(shù)值型字段。3.案例過程第一部分導(dǎo)入庫1importpandasaspd2fromsklearn.treeimportDecisionTreeClassifier3fromsklearn.model_selectionimporttrain_test_split4fromsklearn.metricsimportaccuracy_score,f1_score,precision_score,recall_score代碼1導(dǎo)入pandas庫并將其重命名為pd,用于數(shù)據(jù)處理和分析。代碼2導(dǎo)入Scikit-learn庫中的DecisionTreeClassifier決策樹分類器模型,用于分類任務(wù)。代碼3導(dǎo)入Scikit-learn庫中的train_test_split函數(shù),用于將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。代碼4導(dǎo)入Scikit-learn庫中的accuracy_score、f1_score、precision_score和recall_score等評估指標(biāo),用于評估分類模型的性能。第二部分讀取原始數(shù)據(jù)5tree_data=pd.read_excel('二維碼案例.xlsx',sheet_name='案例2',index_col='USER_ID')6x,y=tree_data.iloc[:,:-1],tree_data.iloc[:,-1]7print(tree_data.head(1))代碼5使用pd.read_excel('二維碼案例.xlsx',sheet_name='案例2',index_col='USER_ID')讀取名為'二維碼案例.xlsx'的Excel文件中的數(shù)據(jù),并將其存儲在名為tree_data的DataFrame中。sheet_name='案例2'表示讀取的工作表名稱為'案例2',index_col='USER_ID'表示將'USER_ID'列作為索引列。代碼6使用tree_data.iloc[:,:-1]選取除最后一列外的所有列作為特征x,使用tree_data.iloc[:,-1]選取最后一列作為目標(biāo)變量y。這里使用了iloc方法根據(jù)索引位置選取數(shù)據(jù)。代碼7使用print(tree_data.head(1))打印出tree_dataDataFrame的第一行數(shù)據(jù),以便查看讀取的數(shù)據(jù)是否正確。.head(1)方法表示只顯示第一行數(shù)據(jù)。打印輸出結(jié)果如下:LIMIT_INFORCAMPAIGN_TYPECAMPAIGN_LEVELPRODUCT_LEVELUSER_ID10601RESOURCE_AMOUNTEMAIL_RATEPRICEDISCOUNT_RATEHOUR_RESOUCESUSER_ID110.08140.00.8393CAMPAIGN_FEEORDERSUSER_ID18881第三部分特征預(yù)處理8null_val=x.isnull().any(axis=0)9print(null_val[null_val==True])10x=x.fillna(x.mean())11x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=.3,random_state=0)代碼8使用x.isnull().any(axis=0)檢查特征矩陣x中是否存在缺失值,并將結(jié)果存儲在null_val中。axis=0表示沿著列的方向檢查是否存在缺失值。代碼9使用print(null_val[null_val==True])打印出存在缺失值的列的信息。null_val==True用于篩選出存在缺失值的列,并將其打印出來。上述代碼輸出結(jié)果如下:PRICETruedtype:bool代碼10使用x.fillna(x.mean())將缺失值填充為該列的均值。這里采用了均值填充的方式處理缺失值。代碼11使用train_test_split(x,y,test_size=.3,random_state=0)將數(shù)據(jù)集劃分為訓(xùn)練集和測試集,其中test_size=.3表示將30%的數(shù)據(jù)分配給測試集,random_state=0表示設(shè)置隨機(jī)種子以確保每次運(yùn)行時(shí)劃分結(jié)果的一致性。將劃分好的訓(xùn)練集特征x_train、測試集特征x_test、訓(xùn)練集目標(biāo)變量y_train和測試集目標(biāo)變量y_test存儲在相應(yīng)的變量中。第四部分訓(xùn)練模型12model_tree=DecisionTreeClassifier(max_depth=4,class_weight='balanced')13model_tree.fit(x_train,y_train)14pre_y=model_tree.predict(x_test)代碼12創(chuàng)建一個(gè)決策樹分類器模型model_tree,其中max_depth=4表示限制決策樹的最大深度為4,class_weight='balanced'表示使用類別平衡的方式處理樣本權(quán)重,以解決樣本不平衡的問題。代碼13使用model_tree.fit(x_train,y_train)對訓(xùn)練集進(jìn)行擬合,建立決策樹模型。代碼14使用model_tree.predict(x_test)對測試集進(jìn)行預(yù)測,得到預(yù)測結(jié)果pre_y。第五部分模型評估15metrics=[accuracy_score,precision_score,recall_score,f1_score]16scores=[i(y_test,pre_y)foriinmetrics]17columns=[i.__name__foriinmetrics]18scores_pd=pd.DataFrame(scores,index=columns).T19print(scores_pd)代碼15創(chuàng)建一個(gè)包含準(zhǔn)確率(accuracy_score)、精確率(precision_score)、召回率(recall_score)和F1分?jǐn)?shù)(f1_score)等評估指標(biāo)的列表metrics。代碼16使用列表推導(dǎo)式[i(y_test,pre_y)foriinmetrics]計(jì)算模型在測試集上的準(zhǔn)確率、精確率、召回率和F1分?jǐn)?shù),并將結(jié)果存儲在列表scores中。代碼17創(chuàng)建一個(gè)包含評估指標(biāo)名稱的列表columns,其中每個(gè)元素為對應(yīng)評估指標(biāo)的函數(shù)名。代碼18使用pd.DataFrame(scores,index=columns).T創(chuàng)建一個(gè)DataFrame,行為不同的評估指標(biāo),列為各指標(biāo)在測試集上的得分。代碼19使用print(scores_pd)打印出各評估指標(biāo)在測試集上的得分情況。打印結(jié)果如下:accuracy_scoreprecision_scorerecall_scoref1_score00.7798170.7520660.8348620.791304從結(jié)果可以看出,模型的基本效果不錯(cuò),各項(xiàng)指標(biāo)都超過75%,這僅僅是在做了缺失值填充,而沒有做任何數(shù)據(jù)預(yù)處理、模型調(diào)優(yōu)等的操作基礎(chǔ)上達(dá)到的效果。第六部分展示特征重要性20feature_pd=pd.Series(model_tree.feature_importances_,index=x.columns)21feature_pd.sort_values().plot(kind='barh',figsize=(10,4),title='特征重要性評估')代碼20創(chuàng)建一個(gè)Series對象feature_pd,其中包含了模型model_tree中特征的重要性評估結(jié)果。model_tree.feature_importances_表示決策樹模型中各個(gè)特征的重要性,index=x.columns表示將特征名稱作為索引。代碼21使用feature_pd.sort_values().plot(kind='barh',figsize=(10,4),title='特征重要性評估')繪制水平條形圖,展示各個(gè)特征的重要性評估結(jié)果。水平條形圖可以直觀地比較各個(gè)特征的重要性大小。代碼執(zhí)行后,結(jié)果如圖所示。圖7-2分類模型特征重要性根據(jù)結(jié)果顯示,EMAIL_RATE是影響用戶轉(zhuǎn)化最大的因素,其次是CAMPAIGN_FEE、DISCOUNT_RATE、HOUR_RESOURCES等因素。第七部分重新訓(xùn)練模型22model_tree.fit(x,y)23new_data=pd.read_csv('二維碼案例2-預(yù)測數(shù)據(jù).txt',index_col='USER_ID')24print(model_tree.predict(new_data))25proba_data=pd.DataFrame(model_tree.predict_proba(new_data),columns=model_tree.classes_)26print(proba_data)代碼22使用model_tree.fit(x,y)對整個(gè)數(shù)據(jù)集進(jìn)行擬合,建立最終的決策樹模型。代碼23使用pd.read_csv('二維碼案例2-預(yù)測數(shù)據(jù).txt',index_col='USER_ID')讀取新的預(yù)測數(shù)據(jù),其中index_col='USER_ID'表示將USER_ID列作為索引。代碼24使用model_tree.predict(new_data)對新數(shù)據(jù)進(jìn)行預(yù)測,得到預(yù)測結(jié)果并打印出來。代碼25使用model_tree.predict_proba(new_data)計(jì)算模型對新數(shù)據(jù)的預(yù)測概率,然后將結(jié)果轉(zhuǎn)換為DataFrame格式,列名為模型的類別(model_tree.classes_),并打印出來。代碼結(jié)果如下:[000000]0100.6072610.39273910.6072610.39273920.7105070.28949330.6072610.39273940.7105070.28949350.7105070.2894934.分析用戶的轉(zhuǎn)化可能性預(yù)測用戶轉(zhuǎn)化可以選擇predict和predict_proba兩種方法。它們的區(qū)別在于:predict用于預(yù)測用戶最終結(jié)果類別屬于哪一類,如屬于第一類還是第二類;predict_proba方法預(yù)測得到的結(jié)果是用戶屬于每一類的概率,有幾個(gè)預(yù)測類別就有幾列預(yù)測概率。一般情況下,用戶屬于哪個(gè)類別基于50%的基準(zhǔn)閾值進(jìn)行劃分。在本案例中,當(dāng)屬于0這個(gè)類別的概率大于50%時(shí),則分類為0,否則分類為1。這兩種方法一般結(jié)合起來看。predict得到的分類結(jié)合說明了用戶的分類,而predict_proba則說明了用戶有多大程度上屬于這一類。例如,90%的概率和60%的概率雖然在predict會得到相同的預(yù)測結(jié)果,但是90%的概率在程度上要遠(yuǎn)高于另一個(gè),即顯示出“非常確認(rèn)”的可信度。根據(jù)結(jié)果,第一行是附件csv文件中每個(gè)用戶的轉(zhuǎn)化預(yù)測結(jié)果,反映這些用戶都不會轉(zhuǎn)換。后續(xù)的數(shù)據(jù)框包含兩列結(jié)果,分別是類別為0和1的概率。結(jié)果顯示,每個(gè)用戶在轉(zhuǎn)化可能性上都是“比較確信”不會轉(zhuǎn)化,因?yàn)槠錇?的概率約為60%~70%左右。雖然比50%基準(zhǔn)值高,但也沒有達(dá)到80%甚至以上的“非常確認(rèn)”的程度。案例3:用戶分層分析1.案例背景某天,業(yè)務(wù)部門向數(shù)據(jù)部門提供了一些關(guān)于用戶的數(shù)據(jù),但他們苦于沒有找到分析的切入點(diǎn)。他們希望數(shù)據(jù)部門通過分析為他們提供一些啟示,或者提供后續(xù)分析或業(yè)務(wù)思考的建議?;谏鲜鰣鼍昂托枨螅覀兲釤挶敬畏治龅男枨笕缦拢哼@是一次探索性數(shù)據(jù)分析的任務(wù),且業(yè)務(wù)方?jīng)]有任何先驗(yàn)經(jīng)驗(yàn)給到數(shù)據(jù)部門。分析結(jié)果將用于業(yè)務(wù)的知識啟發(fā)或后續(xù)分析的深入應(yīng)用。雖然業(yè)務(wù)部門沒有明說,但是直接做數(shù)據(jù)統(tǒng)計(jì)和基本展示類的探索性分析,那種方式業(yè)務(wù)方完全自己可以實(shí)現(xiàn),因此如果數(shù)據(jù)部門再做類似的事情,那么輸出的價(jià)值會大打折扣。業(yè)務(wù)希望得到的是他們自己無法認(rèn)知到,且自身無法實(shí)現(xiàn)的數(shù)據(jù)知識。經(jīng)過基本分析后,在做探索性的分析上,除了基本描述性統(tǒng)計(jì)分析、類似數(shù)據(jù)透視表的匯總分析和多個(gè)維度的交叉分析等業(yè)務(wù)方基本都已經(jīng)可以掌握。在這個(gè)領(lǐng)域,數(shù)據(jù)分析師還可以選擇的是聚類分析,這個(gè)技能由于其帶有算法類應(yīng)用,業(yè)務(wù)無法自己直接有效應(yīng)用和分析。因此,本示例將使用sklearn做聚類分析。2.數(shù)據(jù)源概述數(shù)據(jù)源來自CRM,包含1000條記錄和5個(gè)字段,無缺失值,具體如下:USER_ID:用戶ID,整數(shù)型,用于唯一標(biāo)識用戶。AVG_ORDERS:平均訂單數(shù)量,浮點(diǎn)型。AVG_MONEY:平均訂單價(jià)值,浮點(diǎn)型。IS_ACTIVE:活躍狀態(tài),用0和1表示,數(shù)值型。SEX:性別,用0和1表示男女,數(shù)值型。根據(jù)以上數(shù)據(jù)源的描述,我們需要注意以下幾點(diǎn):用戶ID列不應(yīng)參與特征計(jì)算。IS_ACTIVE和SEX雖然是分類型變量,但由于使用0和1表示,可直接參與計(jì)算。如果使用不同的數(shù)值來表示不同的類別,則需要額外處理。AVG_ORDERS和AVG_MONEY具有不同的量綱,直接計(jì)算相似度會受到量綱影響,因此需要進(jìn)行量綱歸一化或標(biāo)準(zhǔn)化處理。3.案例過程第一部分導(dǎo)入庫1importpandasaspd#panda庫2fromsklearn.preprocessingimportMinMaxScaler#標(biāo)準(zhǔn)化庫3fromsklearn.clusterimportKMeans#導(dǎo)入sklearn聚類模塊4fromsklearn.metricsimportsilhouette_score#效果評估模塊代碼1導(dǎo)入pandas庫,用于數(shù)據(jù)處理和分析。代碼2導(dǎo)入MinMaxScaler類,用于數(shù)據(jù)標(biāo)準(zhǔn)化。代碼3導(dǎo)入KMeans類,用于KMeans聚類分析。代碼4導(dǎo)入silhouette_score函數(shù),用于評估聚類效果第二部分讀取數(shù)據(jù)5cluster_data=pd.read_excel('二維碼案例.xlsx',sheet_name='案例3',index_col='USER_ID')6print(cluster_data.head(3))代碼5使用pandas的read_excel函數(shù)從名為'二維碼案例.xlsx'的Excel文件中讀取數(shù)據(jù),并將數(shù)據(jù)存儲在名為cluster_data的DataFrame中。在讀取數(shù)據(jù)時(shí),指定了要讀取的工作表名稱為'案例3',并將'USER_ID'列作為索引列。代碼6使用print函數(shù)打印cluster_dataDataFrame的前3行數(shù)據(jù),以查看讀取的數(shù)據(jù)是否正確。打印輸出結(jié)果如下:AVG_ORDERSAVG_MONEYIS_ACTIVESEXUSER_ID13.5840.431124.7141.160133.8039.4900第三部分?jǐn)?shù)據(jù)預(yù)處理7scaler=MinMaxScaler()8scaled_features=scaler.fit_transform(cluster_data)9print(scaled_features[:2,:])代碼7創(chuàng)建一個(gè)名為scaler的MinMaxScaler對象,用于對數(shù)據(jù)進(jìn)行最小-最大標(biāo)準(zhǔn)化。代碼8使用scaler對象的fit_transform方法對cluster_data中的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,并將處理后的結(jié)果存儲在scaled_features中。代碼9使用print函數(shù)打印scaled_features中的前兩行數(shù)據(jù)的所有列,以查看標(biāo)準(zhǔn)化處理后的數(shù)據(jù)。輸出結(jié)果如下:[[0.642004770.625916871.1.][0.911694510.804400980.1.]]第四部分用戶聚類10model_kmeans=KMeans(n_clusters=3,random_state=0)#建立聚類模型對象11model_kmeans.fit(scaled_features)#訓(xùn)練聚類模型代碼10創(chuàng)建一個(gè)名為model_kmeans的KMeans聚類模型對象,將要分為3個(gè)簇(n_clusters=3),并設(shè)置隨機(jī)種子為0(random_state=0)。代碼11使用fit方法訓(xùn)練model_kmeans對象,將標(biāo)準(zhǔn)化后的特征數(shù)據(jù)scaled_features傳入模型進(jìn)行訓(xùn)練,以便模型學(xué)習(xí)數(shù)據(jù)的聚類模式。提示設(shè)置random_state參數(shù)可以確保算法在不同運(yùn)行中產(chǎn)生相同的隨機(jī)種子,從而避免由于隨機(jī)初始值的不同而導(dǎo)致的聚類結(jié)果差異。這在測試效果和優(yōu)化時(shí)非常重要。第五部分模型評估12n_samples,n_features=cluster_data.shape13print('samples:%d\tfeatures:%d'%(n_samples,n_features))14silhouette=silhouette_score(scaled_features,model_kmeans.labels_,metric='euclidean')15print('silhouettescore:',silhouette)代碼12使用shape屬性獲取cluster_data的行數(shù)和列數(shù),分別賦值給n_samples和n_features變量。代碼13使用print函數(shù)打印樣本數(shù)和特征數(shù),格式化輸出為'samples:%d\tfeatures:%d'。代碼14使用silhouette_score函數(shù)計(jì)算標(biāo)準(zhǔn)化后的特征數(shù)據(jù)scaled_features在KMeans聚類模型model_kmeans的分組結(jié)果labels_下的輪廓系數(shù)。指定距離度量方式為歐氏距離(metric='euclidean')。代碼15使用print函數(shù)打印計(jì)算得到的輪廓系數(shù)silhouette。結(jié)果如下:samples:1000 features:4silhouettescore:0.6195004474672415以上結(jié)果表明聚類效果良好。通常情況下,輪廓系數(shù)大于0.5表示聚類質(zhì)量較好。判斷聚類效果優(yōu)劣的基本原則是不同類別之間是否具有顯著的區(qū)分效果。第六部分組合原始數(shù)據(jù)與標(biāo)簽16kmeans_labels=pd.DataFrame(model_kmeans.labels_,index=cluster_data.index,columns=['labels'])17kmeans_data=pd.concat((cluster_data,kmeans_labels),axis=1)18print(kmeans_data.head(3))代碼16創(chuàng)建一個(gè)名為kmeans_labels的DataFrame,其中包含KMeans模型model_kmeans對數(shù)據(jù)集cluster_data進(jìn)行聚類后的標(biāo)簽,索引與原始數(shù)據(jù)集相同,列名為'labels'。代碼17使用concat函數(shù)將原始數(shù)據(jù)集cluster_data和聚類標(biāo)簽數(shù)據(jù)集kmeans_labels沿列方向合并,得到一個(gè)包含原始數(shù)據(jù)及聚類標(biāo)簽的新數(shù)據(jù)集kmeans_data。代碼18使用print函數(shù)打印合并后的kmeans_data的前3行數(shù)據(jù),以查看添加標(biāo)簽后的數(shù)據(jù)集。結(jié)果如下:AVG_ORDERSAVG_MONEYIS_ACTIVESEXlabelsUSER_ID13.5840.4311224.7141.1601233.8039.49000第七部分基于聚類群組匯總特征19radar_gb=kmeans_data.groupby('labels',as_index=False).mean()20print(radar_gb)代碼19使用groupby方法將kmeans_data按照'labels'列進(jìn)行分組,并計(jì)算每個(gè)分組的均值;as_index=False參數(shù)表示不將分組鍵作為索引,而是保留為列。最后將計(jì)算得到的結(jié)果存儲在radar_gb變量中。代碼20使用print函數(shù)打印這些分組的均值,以查看每個(gè)簇的特征平均值。結(jié)果如下:labelsAVG_ORDERSAVG_MONEYIS_ACTIVESEX003.97012040.0064070.0000000.0113.97136839.9968691.0000000.0222.05599438.9997030.5192881.0為了更好地顯示不同群組的效果,可通過柱形圖對比,代碼如下:21radar_gb.plot(kind='bar',x='labels',y=['AVG_ORDERS','AVG_MONEY','IS_ACTIVE','SEX'],figsize=(10,4),logy=True,title='不同聚類分組結(jié)果對比')代碼21使用plot方法繪制柱狀圖,展示不同聚類分組的特征平均值對比。具體設(shè)置如下:kind='bar'表示繪制柱狀圖。x='labels'表示將'labels'列作為x軸數(shù)據(jù)。y=['AVG_ORDERS','AVG_MONEY','IS_ACTIVE','SEX']表示選擇'AVG_ORDERS'、'AVG_MONEY'、'IS_ACTIVE'和'SEX'列作為y軸數(shù)據(jù),即要展示的特征。figsize=(10,4)設(shè)置圖形的尺寸為寬度10、高度4。logy=True表示使用對數(shù)刻度繪制y軸。title='不同聚類分組結(jié)果對比'設(shè)置圖形的標(biāo)題為'不同聚類分組結(jié)果對比'。代碼執(zhí)行后,結(jié)果如圖所示:圖7-1不同用戶群組特征對比在這一步,我們已經(jīng)獲得了每個(gè)群組的用戶特征信息。4.用戶特征分析通過打印數(shù)據(jù)和圖表,對比不同群組的特征,可以分析出用戶的各種類別情況。Labels值為0(命名為A組)的群組特征是平均訂單量和平均訂單價(jià)值較低,活躍度一般,主要是男性用戶。Labels值為1(命名為B組)的群組特征是平均訂單量和平均訂單價(jià)值較高,活躍度低(甚至是不活躍),主要是女性用戶。Labels值為2(命名為C組)的群組特征是平均訂單量和平均訂單價(jià)值比B組略低,活躍度很高,主要是女性用戶。這三類群體代表了整個(gè)公司的三種人群行為特征,各類人群之間差異明顯。不同人群的價(jià)值重點(diǎn)也不同,A組整體表現(xiàn)一般,B組側(cè)重于訂單貢獻(xiàn),而C組在訂單和行為方面表現(xiàn)更加均衡且積極。通過雷達(dá)圖顯示了不同群組的差異性,有助于輔助數(shù)據(jù)分析。案例4:用結(jié)巴分詞提取熱門評論關(guān)鍵詞1.案例背景用戶評論是消費(fèi)者對企業(yè)商品、服務(wù)、品牌等方面的信息反饋。這些評論往往包含豐富的關(guān)鍵特征,反映了消費(fèi)者的特定傾向和喜好。因此,分析用戶評論并提取關(guān)鍵字是了解用戶真實(shí)反饋、分析用戶特征的有效方式。本案例使用結(jié)巴分詞技術(shù),對《Python數(shù)據(jù)分析與數(shù)據(jù)化運(yùn)營》一書的用戶評論進(jìn)行關(guān)鍵字提取,并通過詞云展示這些關(guān)鍵字。2.數(shù)據(jù)源概述數(shù)據(jù)源直接通過爬蟲從外部網(wǎng)站獲取,保存在名為“二維碼案例4.txt”的文件中。共有141條評論記錄,每條記錄包含一段用戶評論文本。例如:goodpython處理大數(shù)據(jù)確實(shí)有優(yōu)勢,開始學(xué)習(xí)python了。案例講解…3.案例過程第一部分導(dǎo)入庫1frompyecharts.chartsimportWordCloud2frompyechartsimportoptionsasopts3importpandasaspd4fromjieba.analyseimportextract_tags代碼1導(dǎo)入WordCloud類,用于創(chuàng)建詞云圖。代碼2導(dǎo)入options模塊,并將其重命名為opts,用于設(shè)置詞云圖的樣式和配置選項(xiàng)。代碼3導(dǎo)入pandas庫并將其重命名為pd,用于數(shù)據(jù)處理,可能用于加載和處理文本數(shù)據(jù)。代碼4導(dǎo)入extract_tags函數(shù),用于從文本中提取關(guān)鍵詞。第二部分讀取數(shù)據(jù)5withopen('二維碼案例4.txt',encoding='utf8')asfn:6comment_data=fn.read()7print(comment_data[:50])代碼5使用with語句打開名為'二維碼案例4.txt'的文件,并指定使用'utf8'編碼打開文件。代碼6將文件中的內(nèi)容讀取到變量comment_data中。代碼7打印comment_data變量中的前50個(gè)字符,用于查看文件內(nèi)容的一部分。結(jié)果如下:goodpython處理大數(shù)據(jù)確實(shí)有優(yōu)勢,開始學(xué)習(xí)python了。案例講解幫朋友買的,希望能派提示在自然語言相關(guān)的讀取操作中,數(shù)據(jù)源通常包括爬蟲爬取的HTML源代碼、本地文本文件以及數(shù)據(jù)庫中的文本字段等。由于文本內(nèi)容的特殊性,一般都會將讀取的內(nèi)容轉(zhuǎn)換為字符串或列表,然后再進(jìn)行后續(xù)的預(yù)處理。因此,使用Pandas直接讀取非結(jié)構(gòu)化文本的應(yīng)用場景比較少。第三部分提取評論關(guān)鍵字8tags_pairs=extract_tags(comment_data,topK=50,withWeight=True,allowPOS=['n','v','a'])9print(tags_pairs[:10])代碼8使用extract_tags函數(shù)從comment_data中提取關(guān)鍵詞,設(shè)置提取的關(guān)鍵詞數(shù)量為topK=50,并返回帶有權(quán)重的關(guān)鍵詞對。還指定了允許的詞性為名詞('n')、動(dòng)詞('v')、形容詞('a')。代碼9打印tags_pairs中的前10個(gè)關(guān)鍵詞對,用于查看提取的關(guān)鍵詞和對應(yīng)的權(quán)重。有關(guān)結(jié)巴分詞支持的常用詞性分類,如表所示。表常用結(jié)巴分詞詞性分類標(biāo)簽含義標(biāo)簽含義標(biāo)簽含義標(biāo)簽含義n普通名詞f方位名詞s處所名詞t時(shí)間nr人名ns地名nt機(jī)構(gòu)名nw作品名nz其他專名v普通動(dòng)詞vd動(dòng)副詞vn名動(dòng)詞a形容詞ad副形詞an名形詞d副詞m數(shù)量詞q量詞r代詞p介詞c連詞u助詞xc其他虛詞w標(biāo)點(diǎn)符號PER人名LOC地名ORG機(jī)構(gòu)名TIME時(shí)間上述代

溫馨提示

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

評論

0/150

提交評論