Python数据分析实战项目后端转 Rust 的萌新ID 第一程序员——名字大人很菜暂时。正在跟所有权和生命周期死磕日常记录 Rust 学习路上的踩坑经验和啊哈时刻代码片段保证能跑。保持学习保持输出。欢迎大佬们轻喷也欢迎同好一起进步。前言最近在学习 Rust 的同时我也在巩固 Python 的数据分析技能。作为一个从后端转 Rust 的萌新我认为数据分析是一项非常重要的技能无论是在后端开发还是其他领域都能发挥重要作用。今天我就来分享一个 Python 数据分析的实战项目希望能帮到和我一样的萌新们。项目背景我们将分析一个电商平台的销售数据了解销售趋势、用户行为和产品表现为业务决策提供数据支持。数据准备首先我们需要准备数据。这里我们使用一个模拟的电商销售数据集包含以下字段order_id订单IDcustomer_id客户IDorder_date订单日期product_id产品IDproduct_name产品名称category产品类别price产品价格quantity购买数量total_amount订单总金额payment_method支付方式shipping_address收货地址环境搭建我们需要安装以下库pandas用于数据处理和分析numpy用于数值计算matplotlib用于数据可视化seaborn用于高级数据可视化jupyter用于交互式数据分析可以使用以下命令安装pip install pandas numpy matplotlib seaborn jupyter数据分析流程1. 数据加载和预处理首先我们需要加载数据并进行预处理import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 # 加载数据 df pd.read_csv(sales_data.csv) # 查看数据基本信息 print(df.info()) # 查看数据前几行 print(df.head()) # 检查缺失值 print(df.isnull().sum()) # 处理缺失值 df df.dropna() # 转换数据类型 df[order_date] pd.to_datetime(df[order_date]) # 添加新列 df[year] df[order_date].dt.year df[month] df[order_date].dt.month df[day] df[order_date].dt.day2. 数据探索性分析接下来我们进行数据探索性分析了解数据的基本特征# 统计描述 print(df.describe()) # 销售趋势分析 sales_by_date df.groupby(order_date)[total_amount].sum() plt.figure(figsize(12, 6)) sales_by_date.plot() plt.title(每日销售趋势) plt.xlabel(日期) plt.ylabel(销售额) plt.show() # 月度销售趋势 sales_by_month df.groupby([year, month])[total_amount].sum().reset_index() sales_by_month[date] pd.to_datetime(sales_by_month[[year, month]].assign(day1)) plt.figure(figsize(12, 6)) sns.lineplot(xdate, ytotal_amount, datasales_by_month) plt.title(月度销售趋势) plt.xlabel(日期) plt.ylabel(销售额) plt.show() # 产品类别销售分析 sales_by_category df.groupby(category)[total_amount].sum().sort_values(ascendingFalse) plt.figure(figsize(12, 6)) sales_by_category.plot(kindbar) plt.title(各产品类别销售额) plt.xlabel(产品类别) plt.ylabel(销售额) plt.xticks(rotation45) plt.show() # 产品销售分析 top_10_products df.groupby(product_name)[total_amount].sum().sort_values(ascendingFalse).head(10) plt.figure(figsize(12, 6)) top_10_products.plot(kindbar) plt.title(销售额前10的产品) plt.xlabel(产品名称) plt.ylabel(销售额) plt.xticks(rotation45) plt.show() # 支付方式分析 payment_method_count df.groupby(payment_method)[order_id].count() plt.figure(figsize(10, 6)) plt.pie(payment_method_count, labelspayment_method_count.index, autopct%1.1f%%) plt.title(支付方式分布) plt.show() # 客户购买行为分析 customer_purchase df.groupby(customer_id)[total_amount].agg([count, sum, mean]).rename(columns{count: 购买次数, sum: 总消费, mean: 平均消费}) plt.figure(figsize(12, 6)) sns.histplot(customer_purchase[购买次数], bins20) plt.title(客户购买次数分布) plt.xlabel(购买次数) plt.ylabel(客户数) plt.show() plt.figure(figsize(12, 6)) sns.histplot(customer_purchase[总消费], bins20) plt.title(客户总消费分布) plt.xlabel(总消费) plt.ylabel(客户数) plt.show()3. 数据深度分析现在我们进行更深入的分析发现数据中的模式和规律# 客户价值分析 # 计算客户生命周期价值 (CLV) # 这里简化计算使用总消费作为CLV customer_clv df.groupby(customer_id)[total_amount].sum().sort_values(ascendingFalse) # 客户分层 top_20_percent int(len(customer_clv) * 0.2) top_customers customer_clv.head(top_20_percent) print(f前20%客户数量: {top_20_percent}) print(f前20%客户消费占比: {top_customers.sum() / customer_clv.sum():.2f}) # 产品关联分析 # 计算产品之间的关联度 from itertools import combinations from collections import defaultdict # 构建购物篮 baskets df.groupby(order_id)[product_name].apply(list).tolist() # 计算产品对的出现次数 product_pairs defaultdict(int) for basket in baskets: if len(basket) 2: for pair in combinations(set(basket), 2): product_pairs[tuple(sorted(pair))] 1 # 转换为DataFrame product_pairs_df pd.DataFrame.from_dict(product_pairs, orientindex, columns[count]).reset_index() product_pairs_df[[product1, product2]] pd.DataFrame(product_pairs_df[index].tolist(), indexproduct_pairs_df.index) product_pairs_df product_pairs_df.drop(index, axis1) product_pairs_df product_pairs_df.sort_values(count, ascendingFalse) print(产品关联度前10:) print(product_pairs_df.head(10)) # 销售预测 # 使用移动平均法进行销售预测 from statsmodels.tsa.holtwinters import SimpleExpSmoothing # 准备数据 sales_series sales_by_date # 拟合模型 model SimpleExpSmoothing(sales_series).fit(smoothing_level0.6, optimizedFalse) # 预测未来7天 forecast model.forecast(7) # 可视化预测结果 plt.figure(figsize(12, 6)) plt.plot(sales_series.index, sales_series.values, label实际销售额) plt.plot(forecast.index, forecast.values, label预测销售额, linestyle--) plt.title(销售额预测) plt.xlabel(日期) plt.ylabel(销售额) plt.legend() plt.show()4. 数据可视化和报告最后我们将分析结果进行可视化并生成一份分析报告# 生成综合分析报告 import io from PIL import Image # 创建一个HTML报告 report_html !DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title电商销售数据分析报告/title style body { font-family: Arial, sans-serif; margin: 20px; } h1 { color: #333; } h2 { color: #555; } .section { margin-bottom: 30px; } .chart { margin: 20px 0; } table { border-collapse: collapse; width: 100%; margin: 20px 0; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } /style /head body h1电商销售数据分析报告/h1 div classsection h21. 数据概览/h2 p本次分析基于电商平台的销售数据包含订单信息、客户信息、产品信息等。/p p数据量{total_orders} 条订单记录/p p时间范围{start_date} 至 {end_date}/p p总销售额¥{total_sales:.2f}/p p客户数量{total_customers} 位/p p产品种类{total_products} 种/p /div div classsection h22. 销售趋势分析/h2 p从销售趋势图可以看出销售额呈现[上升/下降/稳定]趋势。/p div classchart img srcdata:image/png;base64,{sales_trend_chart} alt销售趋势图 /div /div div classsection h23. 产品分析/h2 p销售额最高的产品类别是 {top_category}占总销售额的 {top_category_percent:.2f}%。/p p销售额最高的产品是 {top_product}销售额为 ¥{top_product_sales:.2f}。/p div classchart img srcdata:image/png;base64,{category_chart} alt产品类别销售图 /div div classchart img srcdata:image/png;base64,{product_chart} alt产品销售图 /div /div div classsection h24. 客户分析/h2 p前20%的客户贡献了 {top_customer_percent:.2f}% 的销售额体现了帕累托法则80/20法则。/p div classchart img srcdata:image/png;base64,{customer_chart} alt客户消费分布图 /div /div div classsection h25. 支付方式分析/h2 p最常用的支付方式是 {top_payment_method}占比 {top_payment_percent:.2f}%。/p div classchart img srcdata:image/png;base64,{payment_chart} alt支付方式分布图 /div /div div classsection h26. 产品关联分析/h2 p最常一起购买的产品组合是/p table tr th产品1/th th产品2/th th共同购买次数/th /tr {product_pairs_table} /table /div div classsection h27. 销售预测/h2 p基于历史数据预测未来7天的销售额/p div classchart img srcdata:image/png;base64,{forecast_chart} alt销售预测图 /div /div div classsection h28. 结论与建议/h2 p1. strong销售策略/strong重点关注销售额高的产品类别和产品加大促销力度。/p p2. strong客户策略/strong针对高价值客户提供个性化服务和专属优惠提高客户忠诚度。/p p3. strong产品策略/strong基于产品关联分析优化产品布局和推荐系统提高交叉销售。/p p4. strong库存管理/strong根据销售趋势和预测合理安排库存避免积压和缺货。/p p5. strong支付方式/strong优化支付流程支持更多便捷的支付方式提高转化率。/p /div /body /html # 生成图表并转换为base64 import base64 # 销售趋势图 plt.figure(figsize(12, 6)) sales_by_date.plot() plt.title(每日销售趋势) plt.xlabel(日期) plt.ylabel(销售额) buf io.BytesIO() plt.savefig(buf, formatpng) buf.seek(0) sales_trend_chart base64.b64encode(buf.read()).decode(utf-8) plt.close() # 产品类别销售图 plt.figure(figsize(12, 6)) sales_by_category.plot(kindbar) plt.title(各产品类别销售额) plt.xlabel(产品类别) plt.ylabel(销售额) plt.xticks(rotation45) buf io.BytesIO() plt.savefig(buf, formatpng) buf.seek(0) category_chart base64.b64encode(buf.read()).decode(utf-8) plt.close() # 产品销售图 plt.figure(figsize(12, 6)) top_10_products.plot(kindbar) plt.title(销售额前10的产品) plt.xlabel(产品名称) plt.ylabel(销售额) plt.xticks(rotation45) buf io.BytesIO() plt.savefig(buf, formatpng) buf.seek(0) product_chart base64.b64encode(buf.read()).decode(utf-8) plt.close() # 客户消费分布图 plt.figure(figsize(12, 6)) sns.histplot(customer_purchase[总消费], bins20) plt.title(客户总消费分布) plt.xlabel(总消费) plt.ylabel(客户数) buf io.BytesIO() plt.savefig(buf, formatpng) buf.seek(0) customer_chart base64.b64encode(buf.read()).decode(utf-8) plt.close() # 支付方式分布图 plt.figure(figsize(10, 6)) plt.pie(payment_method_count, labelspayment_method_count.index, autopct%1.1f%%) plt.title(支付方式分布) buf io.BytesIO() plt.savefig(buf, formatpng) buf.seek(0) payment_chart base64.b64encode(buf.read()).decode(utf-8) plt.close() # 销售预测图 plt.figure(figsize(12, 6)) plt.plot(sales_series.index, sales_series.values, label实际销售额) plt.plot(forecast.index, forecast.values, label预测销售额, linestyle--) plt.title(销售额预测) plt.xlabel(日期) plt.ylabel(销售额) plt.legend() buf io.BytesIO() plt.savefig(buf, formatpng) buf.seek(0) forecast_chart base64.b64encode(buf.read()).decode(utf-8) plt.close() # 产品关联表 product_pairs_table for _, row in product_pairs_df.head(10).iterrows(): product_pairs_table ftrtd{row[product1]}/tdtd{row[product2]}/tdtd{row[count]}/td/tr # 填充报告数据 total_orders len(df) start_date df[order_date].min().strftime(%Y-%m-%d) end_date df[order_date].max().strftime(%Y-%m-%d) total_sales df[total_amount].sum() total_customers df[customer_id].nunique() total_products df[product_name].nunique() top_category sales_by_category.index[0] top_category_percent (sales_by_category.iloc[0] / total_sales) * 100 top_product top_10_products.index[0] top_product_sales top_10_products.iloc[0] top_customer_percent (top_customers.sum() / customer_clv.sum()) * 100 top_payment_method payment_method_count.idxmax() top_payment_percent (payment_method_count.max() / payment_method_count.sum()) * 100 # 生成最终报告 final_report report_html.format( total_orderstotal_orders, start_datestart_date, end_dateend_date, total_salestotal_sales, total_customerstotal_customers, total_productstotal_products, top_categorytop_category, top_category_percenttop_category_percent, top_producttop_product, top_product_salestop_product_sales, top_customer_percenttop_customer_percent, top_payment_methodtop_payment_method, top_payment_percenttop_payment_percent, sales_trend_chartsales_trend_chart, category_chartcategory_chart, product_chartproduct_chart, customer_chartcustomer_chart, payment_chartpayment_chart, product_pairs_tableproduct_pairs_table, forecast_chartforecast_chart ) # 保存报告 with open(sales_analysis_report.html, w, encodingutf-8) as f: f.write(final_report) print(分析报告已生成sales_analysis_report.html)项目总结通过这个实战项目我们学习了如何使用 Python 进行数据分析包括数据加载和预处理使用 pandas 加载数据处理缺失值转换数据类型。数据探索性分析使用 pandas 进行数据统计使用 matplotlib 和 seaborn 进行数据可视化。数据深度分析进行客户价值分析、产品关联分析和销售预测。生成分析报告将分析结果整理成 HTML 报告方便查看和分享。技术栈总结数据处理pandas, numpy数据可视化matplotlib, seaborn时间序列分析statsmodels报告生成HTML, base64后续优化方向数据质量进一步提高数据质量处理异常值和重复值。分析深度使用更高级的分析方法如聚类分析、分类分析等。模型优化使用更复杂的预测模型如 ARIMA、LSTM 等。交互性使用 dash 或 streamlit 构建交互式分析应用。实时分析搭建实时数据分析系统实时监控销售情况。结论Python 是一门非常适合数据分析的语言它拥有丰富的库和工具可以帮助我们快速、高效地进行数据分析。作为一个从后端转 Rust 的萌新我认为数据分析是一项非常重要的技能无论是在后端开发还是其他领域都能发挥重要作用。通过这个实战项目我不仅巩固了 Python 数据分析的技能也对数据驱动决策有了更深刻的理解。我相信在未来的工作中这些技能将帮助我更好地解决问题做出更明智的决策。保持学习保持输出今天的 Python 数据分析实战项目文章就到这里希望对大家有所帮助。欢迎在评论区分享你的经验和问题我们一起进步参考资料Pandas 官方文档Matplotlib 官方文档Seaborn 官方文档Statsmodels 官方文档Python 数据分析入门后端转 Rust 的萌新ID 第一程序员——名字大人很菜暂时。正在跟所有权和生命周期死磕日常记录 Rust 学习路上的踩坑经验和啊哈时刻代码片段保证能跑。保持学习保持输出。欢迎大佬们轻喷也欢迎同好一起进步。