Python数据分析基础与应用(微课版) 教案 模块9 应用与实战_第1页
Python数据分析基础与应用(微课版) 教案 模块9 应用与实战_第2页
Python数据分析基础与应用(微课版) 教案 模块9 应用与实战_第3页
Python数据分析基础与应用(微课版) 教案 模块9 应用与实战_第4页
Python数据分析基础与应用(微课版) 教案 模块9 应用与实战_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python数据分析基础与应用模块模块9数据分析与可视化综合实战【应用与实战】【任务9-1】分析城市气温数据【任务描述】数据源为Excel文件“长沙市天气数据.xlsx”,该Excel文件共有7个字段分别为:日期、最高气温、最低气温、天气、风向、风力、空气质量指数,共有365条气温记录数据。编写程序对城市气温数据进行审阅、预处理、可视化展示与分析。【任务实现】在JupyterNotebook开发环境中创建t9-01.ipynb,然后在单元格中编写以下代码与输出对应的结果。1.导入模块代码如下:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromcollectionsimportCounterplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False2.导入数据代码如下:path='.\data\长沙市天气数据.xlsx'weatherDf=pd.read_excel(path,converters={'日期':str})3.数据审阅(1)输出前5行数据代码如下weatherDf.head()输出结果如下:(2)输出后5行数据代码如下:weatherDf.tail()输出结果如下:(3)查看各列的数据类型代码如下:weatherDf.dtypes输出结果如下:日期object最高气温object最低气温object天气object风向object风力object空气质量指数objectdtype:object(4)查看数据集的基本信息代码如下:weatherD()输出结果如下:<class'pandas.core.frame.DataFrame'>RangeIndex:365entries,0to364Datacolumns(total7columns):#ColumnNon-NullCountDtype0日期365non-nullobject1最高气温365non-nullobject2最低气温365non-nullobject3天气365non-nullobject4风向365non-nullobject5风力365non-nullobject6空气质量指数365non-nullobjectdtypes:object(7)memoryusage:20.1+KB4.数据预处理(1)替换掉温度的后缀°代码如下:weatherDf.loc[:,"最高气温"]=weatherDf["最高气温"].str.replace("°","").astype('int32')weatherDf.loc[:,"最低气温"]=weatherDf["最低气温"].str.replace("°","").astype('int32')weatherDf.head()输出结果如下:(2)查询最低温度低于0度的前5行列表代码如下:weatherDf[weatherDf["最低气温"]<0].head()输出结果如下:(3)查看前3行数据代码如下:print('-'*21,'输出前三行的数据','-'*21)weatherDf.head(3)输出结果如下:(4)查看数字列统计结果代码如下:print('-'*2,'查看数值类型列的统计结果','-'*2)weatherDf.describe()输出结果如下:(5)统计数字列的平均值、最大值和最小值代码如下:print(weatherDf['最高气温'].mean())print(weatherDf['最高气温'].max())print(weatherDf['最低气温'].min())输出结果如下:23.0602739726027440-4(6)唯一性去重唯一性去重一般不用于数值列,而是用于枚举、分类列。代码如下:print('-'*25,'唯一去重性','-'*25)print(weatherDf['天气'].unique())print(weatherDf['风向'].unique())print(weatherDf['风力'].unique())(7)按值计数代码如下:print('-'*25,'按值计数','-'*25)print(weatherDf['天气'].value_counts())print(weatherDf['风向'].value_counts())print(weatherDf['风力'].value_counts())(8)分离“空气质量指数”列数据代码如下:aqiDf=weatherDf['空气质量指数'].astype(str).str.split("",1,expand=True)weatherDf.loc[:,'空气质量指数']=aqiDf[0]weatherDf['空气质量等级']=aqiDf[1]weatherDf.head(3)输出结果如下:(9)添加一列数据“aqiLevel”代码如下:defspaqi(aqi):aqilist=[]forstrinaqi:ifstr=='优':aqiLevel=1elifstr=='良':aqiLevel=2elifstr=='轻度':aqiLevel=3elifstr=='中度':aqiLevel=4elifstr=='重度':aqiLevel=5aqilist.append(aqiLevel)aqiser=pd.Series(aqilist)returnaqiserweatherDf['aqiLevel']=spaqi(weatherDf['空气质量等级'])weatherDf['空气质量指数']=weatherDf['空气质量指数'].astype('int32')weatherDf.head(3)输出结果如下:(10)分享“日期”列数据与转换为日期格式代码如下: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()输出结果如下:5.数据可视化(1)绘制2021年长沙市AQI(空气质量指数)全年走势图代码如下:importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsefig,ax=plt.subplots(figsize=(20,15))ax.plot(df2['日期'],df2['空气质量指数'])ax.set(xlabel='日期',ylabel='AQI指数',title='2021年长沙市AQI(空气质量指数)全年走势图')ax.grid()fig.savefig("长沙AQI.png")plt.show()输出结果如图9-1所示。图9-12021年长沙市AQI(空气质量指数)全年走势图(2)绘制2021年长沙空气质量指数季度箱形图代码如下: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['空气质量指数']),np.array(q2['空气质量指数']),np.array(q3['空气质量指数']),np.array(q4['空气质量指数']),]labels=['第一季度','第二季度','第三季度','第四季度']fig,ax1=plt.subplots(figsize=(6,5))bplot1=ax1.boxplot(all_data,vert=True,patch_artist=True,labels=labels)ax1.set_title('2021年长沙市空气质量指数季度箱形图')colors=['pink','lightblue','lightgreen','grey']forpatch,colorinzip(bplot1['boxes'],colors):patch.set_facecolor(color)ax1.yaxis.grid(True)ax1.set_ylabel('空气质量指数')fig.savefig("2021年长沙空气质量指数季度箱形图.png")plt.show()输出结果如图9-2所示。图9-22021年长沙空气质量指数季度箱形图(3)绘制2021年1月长沙空气质量饼图代码如下:air_quality=['良','优','良','轻度','重度','中度','良','良','良','良','良','良','轻度','轻度','中度','轻度','良','良','良','良','轻度','轻度','轻度','轻度','良','轻度','轻度','轻度','轻度','优','轻度']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('长沙市2021年1月空气质量')plt.legend()fig.savefig("2021年1月长沙空气质量饼图.png")plt.show()输出结果如图9-3所示。图9-32021年1月长沙空气质量饼图6.数据分析(1)复杂条件查询组合条件使用&符号合并,每个条件判断都得带括号。①查询最高温度小于40度,并且最低温度大于15度,并且是晴天、空气指数为优的列表代码如下:weatherDf[(weatherDf["最高气温"]<=40)&(weatherDf["最低气温"]>=15)&(weatherDf["天气"]=='晴')&(weatherDf["aqiLevel"]==1)]使用df.query方法可以简化查询。使用df.query方法实现类似功能的代码如下:weatherDf.query("最高气温<=40&最低气温>=15&天气=='晴'&aqiLevel==1")输出结果如下:②查询最低温度低于-10度的列表代码如下:weatherDf.query("最高气温>35").head()输出结果如下:③查询温差大于15度的列表代码如下:weatherDf.query("最高气温-最低气温>=15").head()输出结果如下:④使用外部的变量查询两个指定温度之间的列表代码如下:high_temperature=20low_temperature=10weatherDf.query("最高气温<=@high_temperature&最低气温>=@low_temperature").head()输出结果如下:(2)计算协方差代码如下:print(weatherDf['最高气温'].cov(weatherDf['最低气温']))print(weatherDf['最高气温'].cov(weatherDf['空气质量指数']))print(weatherDf['最低气温'].cov(weatherDf['空气质量指数']))输出结果如下:74.24263886798134-152.876253198856-163.91504591299108(3)查看协方差矩阵代码如下:print('-'*20,'协方差矩阵','-'*20)weatherDf.cov()输出结果如下:(4)计算相关系数①查看相关系数矩阵代码如下:weatherDf.corr()输出结果②查看空气质量指数和最高温度的相关系数代码如下:weatherDf['空气质量指数'].corr(weatherDf['最高气温'])输出结果如下:-0.4316817605342009③查看空气质量指数和最低温度的相关系数代码如下:weatherDf['空气质量指数'].corr(weatherDf['最低气温'])输出结果如下:-0.5164511143419311④查看空气质量指数和温度差的相关系数代码如下:weatherDf['空气质量指数'].corr(weatherDf['最高气温']-weatherDf['最低气温'])输出结果如下:0.07500360963052113【任务9-2】分析网上商城订单数据【任务描述】数据源为Excel文件“order_report.xlsx”,该Excel文件共收集了发生在一个月内的28010条数据,共有以下7列数据:订单编号、总金额(即订单总金额)、实际支付金额(即在已付款的情况下:总金额-退款金额;在未付款的情况下,则金额为0)、收货地址(即各个省份)、订单创建时间(即下单时间)、订单付款时间(即付款时间)、退款金额(即付款后申请退款的金额。如无付过款,退款金额为0)编写程序以行业常见指标对订单数据进行综合分析,包括以下方面的内容。①订单每个环节的转化转化率。②订单成交的时间(按天)趋势(按实际成交)。【任务实现】在JupyterNotebook开发环境中创建t9-02.ipynb,然后在单元格中编写以下代码与输出对应的结果。1.导入模块代码如下:importpandasaspdimportnumpyasnpimportdatetimeimportmatplotlib.pyplotasplt%matplotlibinlinefrompyecharts.chartsimportFunnelfrompyechartsimportoptionsasoptsplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False2.导入数据代码如下:df=pd.read_excel(r'.\data\order_report.xlsx')df.head()输出结果如下:3.数据审阅(1)检查字段名是否正确如果字段名包含多余字符,可以使用srtip()函数直接删除。代码如下:df.columns输出结果如下:Index(['订单编号','总金额','实际支付金额','收货地址','订单创建时间','订单付款时间','退款金额'],dtype='object')(2)使用info()函数查看数据各字段的详细信息代码如下:()输出结果如下:3.数据预处理数据预处理主要包括数据重复值、缺失值、异常值处理。(1)重复值统计代码如下:df.duplicated().sum()输出结果如下:0(2)缺失值统计代码如下:df.isnull().sum()输出结果如下:订单编号0总金额0实际支付金额0收货地址0订单创建时间0订单付款时间3923退款金额0dtype:int64对于缺失值,订单付款时间缺失3923个,因为实际付款金额无缺失,所以时间缺失值暂不做处理,属正常现象。当然也可以补充‘0’做缺失值填充。4.数据可视化展示(1)统计各字段数量通过创建字典来输出最终的统计表格,包含总订单数、付款订单数、到款订单数和全额到款订单数。其中“到款订单数”、“全额款订单数”均是在“付款订单”数据集的基础上进行筛选的。代码如下:dict_convs=dict()key='总订单数'dict_convs[key]=len(df)key='付款订单数'df_payed=df[df['订单付款时间'].notnull()]dict_convs[key]=len(df_payed)key='到款订单数'df_trans=df_payed[df_payed['实际支付金额']!=0]dict_convs[key]=len(df_trans)key='全额到款订单数'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='订单数').to_frame()df_convs输出结果如下:dict字典创建后,通过一维表pd.Series(dict_convs,name='订单数').to_frame()转化为列表形式呈现。(2)计算总体转化率通过对整个订单数量的统计,计算各环节占总订单数的比例,构建总体转化率(每个环节除以总订单数),并形成漏斗图。代码如下:name='总体转化率'total_convs=df_convs['订单数']/df_convs.loc['总订单数','订单数']*100df_convs[name]=total_convs.apply(lambdax:round(x,0))loc()按照“index=行标签”进行取行,iloc()按照“索引=行号”取行。输出结果如下:(3)绘制总体转化率漏斗图代码如下:name='总体转化率'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/>{b}:{c}%'))funnel.set_global_opts(title_opts=opts.TitleOpts(title=name),)funnel.render_notebook()输出结果如图9-4所示。图9-4总体转化率漏斗图(4)计算单一环节转化率通过“下一环节”占“上一环节总量”的比重,得到单一环节的转化率。name='单一环节转化率'single_convs=df_convs['订单数'].shift()df_convs[name]=single_convs.fillna(df_convs.loc['总订单数','订单数'])df_convs[name]=round((df_convs['订单数']/df_convs[name]*100),0)df_convs输出结果如下:(5)绘制单一环节转化率漏斗图代码如下:name='单一环节转化率'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/>{b}:{c}%'))funnel.set_global_opts(title_opts=opts.TitleOpts(title=name))funnel.render_notebook()输出结果如图9-5所示。图9-5单一环节转化率漏斗图从漏斗图可以看出,在总体转化率中,付款向到款的转化环节,其转化率较低;在单一环节中,也可以到同样的结论。此处说明收款的周期可能被拉长,有可能是客户的确认收货时间过长导致。5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论