版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python數(shù)據(jù)分析基礎(chǔ)與應(yīng)用模塊模塊9數(shù)據(jù)分析與可視化綜合實(shí)戰(zhàn)【應(yīng)用與實(shí)戰(zhàn)】【任務(wù)9-1】分析城市氣溫?cái)?shù)據(jù)【任務(wù)描述】數(shù)據(jù)源為Excel文件“長(zhǎng)沙市天氣數(shù)據(jù).xlsx”,該Excel文件共有7個(gè)字段分別為:日期、最高氣溫、最低氣溫、天氣、風(fēng)向、風(fēng)力、空氣質(zhì)量指數(shù),共有365條氣溫記錄數(shù)據(jù)。編寫(xiě)程序?qū)Τ鞘袣鉁財(cái)?shù)據(jù)進(jìn)行審閱、預(yù)處理、可視化展示與分析?!救蝿?wù)實(shí)現(xiàn)】在JupyterNotebook開(kāi)發(fā)環(huán)境中創(chuàng)建t9-01.ipynb,然后在單元格中編寫(xiě)以下代碼與輸出對(duì)應(yīng)的結(jié)果。1.導(dǎo)入模塊代碼如下:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromcollectionsimportCounterplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False2.導(dǎo)入數(shù)據(jù)代碼如下:path='.\data\長(zhǎng)沙市天氣數(shù)據(jù).xlsx'weatherDf=pd.read_excel(path,converters={'日期':str})3.?dāng)?shù)據(jù)審閱(1)輸出前5行數(shù)據(jù)代碼如下weatherDf.head()輸出結(jié)果如下:(2)輸出后5行數(shù)據(jù)代碼如下:weatherDf.tail()輸出結(jié)果如下:(3)查看各列的數(shù)據(jù)類型代碼如下:weatherDf.dtypes輸出結(jié)果如下:日期object最高氣溫object最低氣溫object天氣object風(fēng)向object風(fēng)力object空氣質(zhì)量指數(shù)objectdtype:object(4)查看數(shù)據(jù)集的基本信息代碼如下:weatherD()輸出結(jié)果如下:<class'pandas.core.frame.DataFrame'>RangeIndex:365entries,0to364Datacolumns(total7columns):#ColumnNon-NullCountDtype0日期365non-nullobject1最高氣溫365non-nullobject2最低氣溫365non-nullobject3天氣365non-nullobject4風(fēng)向365non-nullobject5風(fēng)力365non-nullobject6空氣質(zhì)量指數(shù)365non-nullobjectdtypes:object(7)memoryusage:20.1+KB4.?dāng)?shù)據(jù)預(yù)處理(1)替換掉溫度的后綴°代碼如下:weatherDf.loc[:,"最高氣溫"]=weatherDf["最高氣溫"].str.replace("°","").astype('int32')weatherDf.loc[:,"最低氣溫"]=weatherDf["最低氣溫"].str.replace("°","").astype('int32')weatherDf.head()輸出結(jié)果如下:(2)查詢最低溫度低于0度的前5行列表代碼如下:weatherDf[weatherDf["最低氣溫"]<0].head()輸出結(jié)果如下:(3)查看前3行數(shù)據(jù)代碼如下:print('-'*21,'輸出前三行的數(shù)據(jù)','-'*21)weatherDf.head(3)輸出結(jié)果如下:(4)查看數(shù)字列統(tǒng)計(jì)結(jié)果代碼如下:print('-'*2,'查看數(shù)值類型列的統(tǒng)計(jì)結(jié)果','-'*2)weatherDf.describe()輸出結(jié)果如下:(5)統(tǒng)計(jì)數(shù)字列的平均值、最大值和最小值代碼如下:print(weatherDf['最高氣溫'].mean())print(weatherDf['最高氣溫'].max())print(weatherDf['最低氣溫'].min())輸出結(jié)果如下:23.0602739726027440-4(6)唯一性去重唯一性去重一般不用于數(shù)值列,而是用于枚舉、分類列。代碼如下:print('-'*25,'唯一去重性','-'*25)print(weatherDf['天氣'].unique())print(weatherDf['風(fēng)向'].unique())print(weatherDf['風(fēng)力'].unique())(7)按值計(jì)數(shù)代碼如下:print('-'*25,'按值計(jì)數(shù)','-'*25)print(weatherDf['天氣'].value_counts())print(weatherDf['風(fēng)向'].value_counts())print(weatherDf['風(fēng)力'].value_counts())(8)分離“空氣質(zhì)量指數(shù)”列數(shù)據(jù)代碼如下:aqiDf=weatherDf['空氣質(zhì)量指數(shù)'].astype(str).str.split("",1,expand=True)weatherDf.loc[:,'空氣質(zhì)量指數(shù)']=aqiDf[0]weatherDf['空氣質(zhì)量等級(jí)']=aqiDf[1]weatherDf.head(3)輸出結(jié)果如下:(9)添加一列數(shù)據(jù)“aqiLevel”代碼如下:defspaqi(aqi):aqilist=[]forstrinaqi:ifstr=='優(yōu)':aqiLevel=1elifstr=='良':aqiLevel=2elifstr=='輕度':aqiLevel=3elifstr=='中度':aqiLevel=4elifstr=='重度':aqiLevel=5aqilist.append(aqiLevel)aqiser=pd.Series(aqilist)returnaqiserweatherDf['aqiLevel']=spaqi(weatherDf['空氣質(zhì)量等級(jí)'])weatherDf['空氣質(zhì)量指數(shù)']=weatherDf['空氣質(zhì)量指數(shù)'].astype('int32')weatherDf.head(3)輸出結(jié)果如下:(10)分享“日期”列數(shù)據(jù)與轉(zhuǎn)換為日期格式代碼如下:df2=weatherDf.copy()df2[['日期','星期']]=df2['日期'].str.split('',2,expand=True)df2.loc[:,'日期']=pd.to_datetime(df2.loc[:,'日期'],format='%Y-%m-%d',errors='coerce')df2.sort_values('日期',inplace=True)df2.head()輸出結(jié)果如下:5.?dāng)?shù)據(jù)可視化(1)繪制2021年長(zhǎng)沙市AQI(空氣質(zhì)量指數(shù))全年走勢(shì)圖代碼如下:importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsefig,ax=plt.subplots(figsize=(20,15))ax.plot(df2['日期'],df2['空氣質(zhì)量指數(shù)'])ax.set(xlabel='日期',ylabel='AQI指數(shù)',title='2021年長(zhǎng)沙市AQI(空氣質(zhì)量指數(shù))全年走勢(shì)圖')ax.grid()fig.savefig("長(zhǎng)沙AQI.png")plt.show()輸出結(jié)果如圖9-1所示。圖9-12021年長(zhǎng)沙市AQI(空氣質(zhì)量指數(shù))全年走勢(shì)圖(2)繪制2021年長(zhǎng)沙空氣質(zhì)量指數(shù)季度箱形圖代碼如下:importnumpyasnpdf2['quarters']=df2['日期'].dt.quarterq1=df2[df2.quarters==1]q2=df2[df2.quarters==2]q3=df2[df2.quarters==3]q4=df2[df2.quarters==4]all_data=[np.array(q1['空氣質(zhì)量指數(shù)']),np.array(q2['空氣質(zhì)量指數(shù)']),np.array(q3['空氣質(zhì)量指數(shù)']),np.array(q4['空氣質(zhì)量指數(shù)']),]labels=['第一季度','第二季度','第三季度','第四季度']fig,ax1=plt.subplots(figsize=(6,5))bplot1=ax1.boxplot(all_data,vert=True,patch_artist=True,labels=labels)ax1.set_title('2021年長(zhǎng)沙市空氣質(zhì)量指數(shù)季度箱形圖')colors=['pink','lightblue','lightgreen','grey']forpatch,colorinzip(bplot1['boxes'],colors):patch.set_facecolor(color)ax1.yaxis.grid(True)ax1.set_ylabel('空氣質(zhì)量指數(shù)')fig.savefig("2021年長(zhǎng)沙空氣質(zhì)量指數(shù)季度箱形圖.png")plt.show()輸出結(jié)果如圖9-2所示。圖9-22021年長(zhǎng)沙空氣質(zhì)量指數(shù)季度箱形圖(3)繪制2021年1月長(zhǎng)沙空氣質(zhì)量餅圖代碼如下:air_quality=['良','優(yōu)','良','輕度','重度','中度','良','良','良','良','良','良','輕度','輕度','中度','輕度','良','良','良','良','輕度','輕度','輕度','輕度','良','輕度','輕度','輕度','輕度','優(yōu)','輕度']data_count=Counter(air_quality)labels=data_count.keys()datas=data_count.values()colors=['red','tomato','turquoise','#228fbd','#cbc547']fig=plt.figure()plt.pie(datas,labels=labels,colors=colors,startangle=180,shadow=True,autopct='%.2f%%')plt.title('長(zhǎng)沙市2021年1月空氣質(zhì)量')plt.legend()fig.savefig("2021年1月長(zhǎng)沙空氣質(zhì)量餅圖.png")plt.show()輸出結(jié)果如圖9-3所示。圖9-32021年1月長(zhǎng)沙空氣質(zhì)量餅圖6.?dāng)?shù)據(jù)分析(1)復(fù)雜條件查詢組合條件使用&符號(hào)合并,每個(gè)條件判斷都得帶括號(hào)。①查詢最高溫度小于40度,并且最低溫度大于15度,并且是晴天、空氣指數(shù)為優(yōu)的列表代碼如下:weatherDf[(weatherDf["最高氣溫"]<=40)&(weatherDf["最低氣溫"]>=15)&(weatherDf["天氣"]=='晴')&(weatherDf["aqiLevel"]==1)]使用df.query方法可以簡(jiǎn)化查詢。使用df.query方法實(shí)現(xiàn)類似功能的代碼如下:weatherDf.query("最高氣溫<=40&最低氣溫>=15&天氣=='晴'&aqiLevel==1")輸出結(jié)果如下:②查詢最低溫度低于-10度的列表代碼如下:weatherDf.query("最高氣溫>35").head()輸出結(jié)果如下:③查詢溫差大于15度的列表代碼如下:weatherDf.query("最高氣溫-最低氣溫>=15").head()輸出結(jié)果如下:④使用外部的變量查詢兩個(gè)指定溫度之間的列表代碼如下:high_temperature=20low_temperature=10weatherDf.query("最高氣溫<=@high_temperature&最低氣溫>=@low_temperature").head()輸出結(jié)果如下:(2)計(jì)算協(xié)方差代碼如下:print(weatherDf['最高氣溫'].cov(weatherDf['最低氣溫']))print(weatherDf['最高氣溫'].cov(weatherDf['空氣質(zhì)量指數(shù)']))print(weatherDf['最低氣溫'].cov(weatherDf['空氣質(zhì)量指數(shù)']))輸出結(jié)果如下:74.24263886798134-152.876253198856-163.91504591299108(3)查看協(xié)方差矩陣代碼如下:print('-'*20,'協(xié)方差矩陣','-'*20)weatherDf.cov()輸出結(jié)果如下:(4)計(jì)算相關(guān)系數(shù)①查看相關(guān)系數(shù)矩陣代碼如下:weatherDf.corr()輸出結(jié)果②查看空氣質(zhì)量指數(shù)和最高溫度的相關(guān)系數(shù)代碼如下:weatherDf['空氣質(zhì)量指數(shù)'].corr(weatherDf['最高氣溫'])輸出結(jié)果如下:-0.4316817605342009③查看空氣質(zhì)量指數(shù)和最低溫度的相關(guān)系數(shù)代碼如下:weatherDf['空氣質(zhì)量指數(shù)'].corr(weatherDf['最低氣溫'])輸出結(jié)果如下:-0.5164511143419311④查看空氣質(zhì)量指數(shù)和溫度差的相關(guān)系數(shù)代碼如下:weatherDf['空氣質(zhì)量指數(shù)'].corr(weatherDf['最高氣溫']-weatherDf['最低氣溫'])輸出結(jié)果如下:0.07500360963052113【任務(wù)9-2】分析網(wǎng)上商城訂單數(shù)據(jù)【任務(wù)描述】數(shù)據(jù)源為Excel文件“order_report.xlsx”,該Excel文件共收集了發(fā)生在一個(gè)月內(nèi)的28010條數(shù)據(jù),共有以下7列數(shù)據(jù):訂單編號(hào)、總金額(即訂單總金額)、實(shí)際支付金額(即在已付款的情況下:總金額-退款金額;在未付款的情況下,則金額為0)、收貨地址(即各個(gè)省份)、訂單創(chuàng)建時(shí)間(即下單時(shí)間)、訂單付款時(shí)間(即付款時(shí)間)、退款金額(即付款后申請(qǐng)退款的金額。如無(wú)付過(guò)款,退款金額為0)編寫(xiě)程序以行業(yè)常見(jiàn)指標(biāo)對(duì)訂單數(shù)據(jù)進(jìn)行綜合分析,包括以下方面的內(nèi)容。①訂單每個(gè)環(huán)節(jié)的轉(zhuǎn)化轉(zhuǎn)化率。②訂單成交的時(shí)間(按天)趨勢(shì)(按實(shí)際成交)?!救蝿?wù)實(shí)現(xiàn)】在JupyterNotebook開(kāi)發(fā)環(huán)境中創(chuàng)建t9-02.ipynb,然后在單元格中編寫(xiě)以下代碼與輸出對(duì)應(yīng)的結(jié)果。1.導(dǎo)入模塊代碼如下:importpandasaspdimportnumpyasnpimportdatetimeimportmatplotlib.pyplotasplt%matplotlibinlinefrompyecharts.chartsimportFunnelfrompyechartsimportoptionsasoptsplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False2.導(dǎo)入數(shù)據(jù)代碼如下:df=pd.read_excel(r'.\data\order_report.xlsx')df.head()輸出結(jié)果如下:3.?dāng)?shù)據(jù)審閱(1)檢查字段名是否正確如果字段名包含多余字符,可以使用srtip()函數(shù)直接刪除。代碼如下:df.columns輸出結(jié)果如下:Index(['訂單編號(hào)','總金額','實(shí)際支付金額','收貨地址','訂單創(chuàng)建時(shí)間','訂單付款時(shí)間','退款金額'],dtype='object')(2)使用info()函數(shù)查看數(shù)據(jù)各字段的詳細(xì)信息代碼如下:()輸出結(jié)果如下:3.?dāng)?shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理主要包括數(shù)據(jù)重復(fù)值、缺失值、異常值處理。(1)重復(fù)值統(tǒng)計(jì)代碼如下:df.duplicated().sum()輸出結(jié)果如下:0(2)缺失值統(tǒng)計(jì)代碼如下:df.isnull().sum()輸出結(jié)果如下:訂單編號(hào)0總金額0實(shí)際支付金額0收貨地址0訂單創(chuàng)建時(shí)間0訂單付款時(shí)間3923退款金額0dtype:int64對(duì)于缺失值,訂單付款時(shí)間缺失3923個(gè),因?yàn)閷?shí)際付款金額無(wú)缺失,所以時(shí)間缺失值暫不做處理,屬正常現(xiàn)象。當(dāng)然也可以補(bǔ)充‘0’做缺失值填充。4.?dāng)?shù)據(jù)可視化展示(1)統(tǒng)計(jì)各字段數(shù)量通過(guò)創(chuàng)建字典來(lái)輸出最終的統(tǒng)計(jì)表格,包含總訂單數(shù)、付款訂單數(shù)、到款訂單數(shù)和全額到款訂單數(shù)。其中“到款訂單數(shù)”、“全額款訂單數(shù)”均是在“付款訂單”數(shù)據(jù)集的基礎(chǔ)上進(jìn)行篩選的。代碼如下:dict_convs=dict()key='總訂單數(shù)'dict_convs[key]=len(df)key='付款訂單數(shù)'df_payed=df[df['訂單付款時(shí)間'].notnull()]dict_convs[key]=len(df_payed)key='到款訂單數(shù)'df_trans=df_payed[df_payed['實(shí)際支付金額']!=0]dict_convs[key]=len(df_trans)key='全額到款訂單數(shù)'df_trans_full=df_payed[df_payed['退款金額']==0]dict_convs[key]=len(df_trans_full)len(df_trans_full)df_convs=pd.Series(dict_convs,name='訂單數(shù)').to_frame()df_convs輸出結(jié)果如下:dict字典創(chuàng)建后,通過(guò)一維表pd.Series(dict_convs,name='訂單數(shù)').to_frame()轉(zhuǎn)化為列表形式呈現(xiàn)。(2)計(jì)算總體轉(zhuǎn)化率通過(guò)對(duì)整個(gè)訂單數(shù)量的統(tǒng)計(jì),計(jì)算各環(huán)節(jié)占總訂單數(shù)的比例,構(gòu)建總體轉(zhuǎn)化率(每個(gè)環(huán)節(jié)除以總訂單數(shù)),并形成漏斗圖。代碼如下:name='總體轉(zhuǎn)化率'total_convs=df_convs['訂單數(shù)']/df_convs.loc['總訂單數(shù)','訂單數(shù)']*100df_convs[name]=total_convs.apply(lambdax:round(x,0))loc()按照“index=行標(biāo)簽”進(jìn)行取行,iloc()按照“索引=行號(hào)”取行。輸出結(jié)果如下:(3)繪制總體轉(zhuǎn)化率漏斗圖代碼如下:name='總體轉(zhuǎn)化率'funnel=Funnel().add(series_name=name,data_pair=[list(z)forzinzip(df_convs.index,df_convs[name])],is_selected=True,label_opts=opts.LabelOpts(position='inside'))funnel.set_series_opts(tooltip_opts=opts.TooltipOpts(formatter='{a}<br/>:{c}%'))funnel.set_global_opts(title_opts=opts.TitleOpts(title=name),)funnel.render_notebook()輸出結(jié)果如圖9-4所示。圖9-4總體轉(zhuǎn)化率漏斗圖(4)計(jì)算單一環(huán)節(jié)轉(zhuǎn)化率通過(guò)“下一環(huán)節(jié)”占“上一環(huán)節(jié)總量”的比重,得到單一環(huán)節(jié)的轉(zhuǎn)化率。name='單一環(huán)節(jié)轉(zhuǎn)化率'single_convs=df_convs['訂單數(shù)'].shift()df_convs[name]=single_convs.fillna(df_convs.loc['總訂單數(shù)','訂單數(shù)'])df_convs[name]=round((df_convs['訂單數(shù)']/df_convs[name]*100),0)df_convs輸出結(jié)果如下:(5)繪制單一環(huán)節(jié)轉(zhuǎn)化率漏斗圖代碼如下:name='單一環(huán)節(jié)轉(zhuǎn)化率'funnel=Funnel().add(series_name=name,data_pair=[list(z)forzinzip(df_convs.index,df_convs[name])],is_selected=True,label_opts=opts.LabelOpts(position='inside'))funnel.set_series_opts(tooltip_opts=opts.TooltipOpts(formatter='{a}<br/>:{c}%'))funnel.set_global_opts(title_opts=opts.TitleOpts(title=name))funnel.render_notebook()輸出結(jié)果如圖9-5所示。圖9-5單一環(huán)節(jié)轉(zhuǎn)化率漏斗圖從漏斗圖可以看出,在總體轉(zhuǎn)化率中,付款向到款的轉(zhuǎn)化環(huán)節(jié),其轉(zhuǎn)化率較低;在單一環(huán)節(jié)中,也可以到同樣的結(jié)論。此處說(shuō)明收款的周期可能被拉長(zhǎng),有可能是客戶的確認(rèn)收貨時(shí)間過(guò)長(zhǎng)導(dǎo)致。5
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 47063-2026馬流感診斷技術(shù)
- 包材專業(yè)考試題目及答案
- 你比劃我猜6字題目及答案
- 聯(lián)衡中學(xué)考試題目及答案
- 蘇州三模高考數(shù)學(xué)題目及答案
- 細(xì)度模數(shù)計(jì)算題目及答案
- 辦公室值班交接班制度
- 采購(gòu)申請(qǐng)付款流程商討會(huì)議制度
- 道路巡查制度
- 初三的典型題目及答案語(yǔ)文
- 硅錳工藝培訓(xùn)
- 譯林版初中教材詞匯表(默寫(xiě)版)
- 藥流護(hù)理常規(guī)
- JJG 1132-2017熱式氣體質(zhì)量流量計(jì)
- 喜家德?tīng)I(yíng)銷方案
- 原發(fā)性纖毛運(yùn)動(dòng)障礙綜合征教學(xué)演示課件
- 月臺(tái)施工方案
- 高邊坡工程施工安全總體風(fēng)險(xiǎn)評(píng)估報(bào)告
- 白血病醫(yī)學(xué)知識(shí)培訓(xùn)
- 圓柱彈簧通用作業(yè)指導(dǎo)書(shū)
- 熱力學(xué)統(tǒng)計(jì)物理第三章
評(píng)論
0/150
提交評(píng)論