首页 / 资讯中心 / 文章详情

15_综合实战全流程

15_综合实战全流程 ★ FEATURED ARTICLE
前面把数据采集、Pandas分析、可视化基础都拆开讲了。这最后一篇串起来——模拟真实场景从拿到一份原始CSV开始走完读取、清洗、分析、可视化最后产出有结论的报告。假设你是电商数据分析师老板扔给你半年销售数据“你看看出个分析。”第一步先看看数据长什么样拿到数据第一件事不是分析是先摸清基本情况。importpandasaspdimportnumpyasnpimportseabornassnsimportmatplotlib.pyplotaspltimportmatplotlib matplotlib.rcParams[font.sans-serif][SimHei,Microsoft YaHei,PingFang SC]matplotlib.rcParams[axes.unicode_minus]Falsesns.set_theme(stylewhitegrid,fontSimHei)np.random.seed(42)n1000datespd.date_range(2026-01-01,2026-06-30,freqD)categories[食品,服装,数码,美妆,家居]avg_price{食品:80,服装:200,数码:800,美妆:150,家居:350}dfpd.DataFrame({订单号:[fORD{str(i).zfill(6)}foriinrange(1,n1)],下单时间:np.random.choice(dates,n),品类:np.random.choice(categories,n),数量:np.random.randint(1,5,n),支付状态:np.random.choice([已支付,已支付,已支付,已退款,待支付],n),用户等级:np.random.choice([普通会员,银卡,金卡,钻石],n,p[0.5,0.25,0.15,0.1]),所在地区:np.random.choice([华东,华南,华北,华中,西南,其他],n),})forcatincategories:maskdf[品类]cat df.loc[mask,单价]np.random.normal(avg_price[cat],avg_price[cat]*0.2,mask.sum()).round(2)df[订单金额](df[数量]*df[单价]).round(2)df[月份]df[下单时间].dt.month.astype(str)月# 真实场景df pd.read_csv(销售数据.csv, parse_dates[下单时间])快速摸底print(df.shape,df.head(),df.info(),df.describe())forcolin[品类,支付状态,用户等级,所在地区]:print(df[col].value_counts())回答三个问题数据量多大各列什么类型、有空值吗分类列值分布偏不偏这步别省——一上来就画图画到一半才发现空值、类型错前面全白干。第二步数据清洗1. 只看已支付订单df_paiddf[df[支付状态]已支付].copy()print(f清洗后{len(df_paid)}条有效订单)2. 检查异常值print(df_paid[订单金额].describe())print(df_paid.nlargest(5,订单金额)[[订单号,品类,数量,单价,订单金额]])print(df_paid.nsmallest(5,订单金额)[[订单号,品类,数量,单价,订单金额]])真实场景可能碰到单价为0或负数录入错误、金额特别大B端或测试数据、空值删/填均值/单独标记。3. 时间格式确认df_paid.loc[:,星期]df_paid[下单时间].dt.day_name()df_paid.loc[:,是否周末]df_paid[下单时间].dt.dayofweek5清洗完后面所有分析都基于这份df_paid。第三步先看大盘——整体趋势怎么样分析从大到小。第一个问题整体销售走势是涨是跌daily_salesdf_paid.groupby(下单时间)[订单金额].sum().reset_index()daily_sales.columns[日期,销售额]daily_sales[7日均值]daily_sales[销售额].rolling(7).mean()fig,axplt.subplots(figsize(11,5))ax.plot(daily_sales[日期],daily_sales[销售额],color#91d5ff,linewidth1,alpha0.7,label每日销售额)ax.plot(daily_sales[日期],daily_sales[7日均值],color#ff4d4f,linewidth2.5,label7日移动平均)ax.set_title(2026年上半年每日销售额走势,fontsize15,fontweightbold,locleft,pad12)ax.set_ylabel(销售额元)ax.legend(locupper left,frameonFalse)ax.grid(alpha0.3,linestyle--)sns.despine()plt.tight_layout()plt.show()每日销售额波动大7日移动平均把波动平滑掉整体走向一目了然。这张图看整体升还是降有无周期性波动有无异常高峰低谷突然爆或塌要记下来挖原因——大促系统bug数据问题按月再汇总看更宏观monthlydf_paid.groupby(月份)[订单金额].agg([sum,count,mean]).round(2)monthly.columns[总销售额,订单数,客单价]monthlymonthly.reindex([1月,2月,3月,4月,5月,6月])print(monthly)数字也得看光看图容易有视觉误差。第四步拆结构——钱都是从哪来的第二个问题销售额由哪些品类、地区、用户构成品类贡献category_salesdf_paid.groupby(品类)[订单金额].agg([sum,count]).round(2)category_sales.columns[销售额,订单数]category_salescategory_sales.sort_values(销售额,ascendingFalse)category_sales[占比](category_sales[销售额]/category_sales[销售额].sum()*100).round(1)print(category_sales)画张图更直观fig,axesplt.subplots(1,2,figsize(13,5))sns.barplot(datacategory_sales,xcategory_sales.index,y销售额,axaxes[0],paletteSet2,huecategory_sales.index,legendFalse)axes[0].set_title(各品类销售额对比,fontsize13)axes[0].set_ylabel(销售额元);axes[0].set_xlabel()fori,vinenumerate(category_sales[销售额]):axes[0].text(i,v500,f{v/10000:.1f}万,hacenter,fontsize9)sns.barplot(datacategory_sales,xcategory_sales.index,y订单数,axaxes[1],paletteSet2,huecategory_sales.index,legendFalse)axes[1].set_title(各品类订单数对比,fontsize13)axes[1].set_ylabel(订单数);axes[1].set_xlabel()fori,vinenumerate(category_sales[订单数]):axes[1].text(i,v5,str(v),hacenter,fontsize9)foraxinaxes:sns.despine(axax);ax.grid(axisy,alpha0.3,linestyle--)plt.suptitle(品类销售结构分析,fontsize15,fontweightbold,y1.02)plt.tight_layout()plt.show()销售额和订单数两个维度一起看才知道品类真实角色销售额高订单少高价值品类销售额低订单多流量品类两个都高明星品类两个都低边缘品类。用户等级结构level_salesdf_paid.groupby(用户等级)[订单金额].agg([sum,count]).round(2)level_sales.columns[销售额,订单数]level_sales[客单价](level_sales[销售额]/level_sales[订单数]).round(2)print(level_sales.sort_values(销售额,ascendingFalse))这组数据判断高价值用户贡献——比如钻石会员只占10%却贡献30%销售额就是经典二八法则。第五步挖关系——什么因素影响了销售这是分析最有价值的部分——从描述是什么走向探索为什么。客单价和用户等级有关系吗plt.figure(figsize(8,5))order[普通会员,银卡,金卡,钻石]sns.boxplot(datadf_paid,x用户等级,y订单金额,orderorder,paletteBlues,width0.6)plt.title(不同用户等级的订单金额分布,fontsize14)plt.ylabel(订单金额元);plt.xlabel()sns.despine()plt.tight_layout()plt.show()等级越高客单价越高的趋势很明显。但注意是相关不是因果——是等级高所以花得多还是花得多所以等级高光看图回答不了但知道关系存在就有了下一步方向。周末和工作日有差别吗weekend_salesdf_paid.groupby(是否周末)[订单金额].agg([mean,count])weekend_sales.columns[平均客单价,订单数]weekend_sales.index[工作日,周末]print(weekend_sales)数值变量关系全景corrdf_paid[[数量,单价,订单金额]].corr()plt.figure(figsize(6,5))sns.heatmap(corr,annotTrue,fmt.2f,cmapRdBu_r,vmin-1,vmax1,center0,squareTrue,linewidths0.5)plt.title(数值变量相关性,fontsize14,pad12)plt.tight_layout()plt.show()真实运行效果整条分析链路真跑一遍控制台关键输出如下587 条已支付订单、总销售额约 46.2 万元数码品类占比近半与正文分析一致。第六步出结论——把发现串成故事分析不能停在一堆图表上最后要回答所以呢。例如整体情况上半年销售额总体上升6月达峰值主因XXX品类结构数码贡献最大销售额但订单量仅第三属高客单价品类食品订单最多但销售额低是引流品类用户结构钻石会员占比小却贡献高销售额二八效应明显会员体系有效运营建议周末单量高就加大周末营销增速快的品类增加SKU和推广高价值会员做好留存思路统一先总后分先描述后解释最后落到行动建议。写在最后整个系列收尾从第1篇requests入门到这第15篇综合实战走完了完整路径01-05数据采集、06-10 Pandas分析、11-14数据可视化、15综合实战。这个系列不是教你记住所有参数而是建立认知框架拿到一份数据知道第一步干什么、每步有什么工具、大概会遇到什么坑。后面做项目遇到具体问题再查具体用法就行但框架必须先有。数据分析光看学不会——找一份你自己工作或生活里的数据从头到尾走一遍流程哪怕只是分析自己的账单收获也比看十篇文章大。动手去做比什么都强。梅雅达编程工作室 · Python数据实战系列第15篇完师傅领进门修行在个人。后面有项目了随时回来翻。
阅读完成 · 觉得有帮助?
咨询建站