Python数据分析实战:从数据清洗到可视化全流程

📅 2026/7/16 17:55:12
Python数据分析实战:从数据清洗到可视化全流程
1. 项目概述这个Python数据分析实战项目系列的第一篇将带大家从零开始掌握数据分析的核心技能。不同于市面上那些只讲理论不落地的教程我们直接通过真实商业场景数据集手把手教你完成从数据清洗到可视化呈现的全流程。为什么选择Python作为数据分析工具简单来说就是瑞士军刀般的全能性。Python拥有pandas这样的数据处理神器matplotlib这样的可视化利器还有scikit-learn这样的机器学习库从简单的数据整理到复杂的预测建模都能搞定。更重要的是它的语法对新手极其友好不像R语言那样需要统计学背景也不像Java那样需要复杂的配置。2. 环境准备与工具配置2.1 Python环境安装建议直接安装Anaconda发行版它已经集成了数据分析所需的全部核心库。最新版的Anaconda可以从官网免费下载安装时记得勾选Add to PATH选项。安装完成后在命令行输入conda list检查是否包含以下关键包pandas (1.5.0)numpy (1.23.0)matplotlib (3.6.0)jupyter (1.0.0)2.2 Jupyter Notebook使用技巧数据分析师最爱的交互式工具非Jupyter Notebook莫属。启动方式很简单在Anaconda Navigator中点击启动或者命令行输入jupyter notebook。分享几个提高效率的快捷键ShiftEnter运行当前单元格EscM将单元格转为Markdown格式B在当前单元格下方新增单元格注意建议为每个项目单独创建虚拟环境避免包版本冲突。使用conda create -n myenv python3.9创建环境conda activate myenv激活环境。3. 数据集介绍与加载3.1 餐厅订单数据集我们使用一个真实的餐厅经营数据集包含以下关键字段order_id订单编号order_date下单日期时间item_name菜品名称quantity点餐数量product_price单品价格total_items订单总商品数payment_type支付方式数据集以CSV格式存储使用pandas加载只需一行代码import pandas as pd df pd.read_csv(restaurant_orders.csv, parse_dates[order_date])3.2 数据质量检查加载后立即执行这组检查命令print(df.shape) # 查看数据规模 print(df.info()) # 查看字段类型 print(df.isnull().sum()) # 检查缺失值 print(df.describe()) # 数值型字段统计常见问题处理方案日期格式混乱用pd.to_datetime()强制转换价格包含货币符号df[price] df[price].str.replace($,).astype(float)分类字段空格df[category] df[category].str.strip()4. 数据清洗实战4.1 处理缺失值根据业务场景选择适当策略删除整行df.dropna()填充默认值df.fillna(0)向前/向后填充df.fillna(methodffill)对于我们的餐厅数据菜品价格缺失可以直接删除因为无法进行后续分析df df.dropna(subset[product_price])4.2 异常值检测与处理使用箱线图快速定位异常值import matplotlib.pyplot as plt plt.boxplot(df[quantity]) plt.show()处理方案示例# 定义合理范围 q_low df[quantity].quantile(0.01) q_high df[quantity].quantile(0.99) # 过滤超出范围的值 df df[(df[quantity] q_low) (df[quantity] q_high)]4.3 数据转换技巧创建衍生字段往往能揭示更深层信息# 提取小时时段 df[hour] df[order_date].dt.hour # 计算订单总金额 df[total_amount] df[quantity] * df[product_price] # 菜品分类映射 category_map {汉堡:主食, 薯条:小食, 可乐:饮料} df[category] df[item_name].map(category_map)5. 探索性数据分析(EDA)5.1 基础统计分析使用pandas内置方法快速洞察数据# 各菜品销量TOP5 df[item_name].value_counts().head(5) # 支付方式占比 df[payment_type].value_counts(normalizeTrue) # 分时段平均消费金额 df.groupby(hour)[total_amount].mean()5.2 可视化分析销售趋势分析daily_sales df.resample(D, onorder_date)[total_amount].sum() daily_sales.plot(figsize(12,6), titleDaily Sales Trend) plt.ylabel(Total Sales) plt.show()热销商品分析top_items df[item_name].value_counts().head(10) top_items.plot(kindbarh, figsize(10,6)) plt.title(Top 10 Popular Items) plt.xlabel(Sales Count) plt.show()支付方式偏好pay_type df[payment_type].value_counts() plt.pie(pay_type, labelspay_type.index, autopct%1.1f%%) plt.title(Payment Method Distribution) plt.show()6. 深入业务分析6.1 客单价分析计算并可视化不同时间段的客单价变化order_totals df.groupby(order_id)[total_amount].sum() plt.hist(order_totals, bins30) plt.title(Order Value Distribution) plt.xlabel(Amount) plt.ylabel(Frequency) plt.show()6.2 菜品组合分析使用关联规则挖掘常一起购买的商品from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori # 按订单分组菜品 orders df.groupby(order_id)[item_name].apply(list).values.tolist() # 转换格式并应用Apriori算法 te TransactionEncoder() te_ary te.fit(orders).transform(orders) df_encoded pd.DataFrame(te_ary, columnste.columns_) frequent_itemsets apriori(df_encoded, min_support0.02, use_colnamesTrue)6.3 用户消费行为聚类使用RFM模型分析客户价值# 计算最近消费时间(R) snapshot_date df[order_date].max() pd.Timedelta(days1) rfm df.groupby(customer_id).agg({ order_date: lambda x: (snapshot_date - x.max()).days, order_id: count, total_amount: sum }) rfm.columns [recency, frequency, monetary] # 分箱处理 rfm[R] pd.qcut(rfm[recency], 5, labels[5,4,3,2,1]) rfm[F] pd.qcut(rfm[frequency], 5, labels[1,2,3,4,5]) rfm[M] pd.qcut(rfm[monetary], 5, labels[1,2,3,4,5]) rfm[RFM_Score] rfm[[R,F,M]].sum(axis1)7. 分析报告生成7.1 关键指标计算metrics { Total Sales: df[total_amount].sum(), Average Order Value: df.groupby(order_id)[total_amount].sum().mean(), Busiest Hour: df[hour].mode()[0], Most Popular Item: df[item_name].value_counts().idxmax() }7.2 自动化报告生成使用Jupyter Notebook的nbconvert工具jupyter nbconvert --to html --template full analysis.ipynb或者用Python创建PDF报告from fpdf import FPDF pdf FPDF() pdf.add_page() pdf.set_font(Arial, size12) pdf.cell(200, 10, txtRestaurant Analysis Report, ln1, alignC) pdf.output(restaurant_report.pdf)8. 项目扩展方向掌握了基础分析后可以尝试这些进阶方向预测模型使用时间序列预测未来销售额推荐系统基于用户历史订单推荐菜品库存优化根据销售规律制定采购计划促销效果分析对比活动前后的销售变化实际业务中数据分析从来不是一次性工作。建议设置定期自动运行脚本将分析结果通过邮件自动发送给相关决策者。可以使用Windows任务计划或Linux的cron定时执行Python脚本。