Python 数据分析与可视化实战:从数据清洗到图表呈现

[复制链接]
发表于 2025-6-27 06:42:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目录
一、数据采集与初步探索
二、数据清洗的七种武器
1. 缺失值处理计谋
2. 异常值检测与修正
3. 数据范例转换技巧
三、数据转换的邪术工坊
1. 透视表与交叉表
2. 窗口函数实战
3. 文本数据处理
四、可视化呈现的艺术
1. 根本图表进阶用法
2. 高级可视化方案
3. 可视化计划原则
五、实战案例:电商用户行为分析
1. 业务场景
2. 分析流程
3. 关键发现
六、部署与交付


一、数据采集与初步探索

在真实场景中,数据往往以"脏乱差"的形态出现。某电商平台的用户行为日志日志可能包含缺失的商品ID、异常的点击时间戳,甚至混杂测试数据。面临这样的原始数据,我们首先需要建立数据探查的"三板斧":
  1. import pandas as pd
  2.  
  3. # 读取CSV文件时自动推断数据类型
  4. df = pd.read_csv('sales_data.csv', parse_dates=['order_date'])
  5.  
  6. # 基础信息概览
  7. print(df.info())        # 内存占用、非空值统计
  8. print(df.describe())    # 数值列统计指标
  9. print(df.head(3))       # 预览前3行结构
复制代码
通过这三行代码,可以快速获取数据全貌。当发现order_date列存在NaT(缺失时间戳)时,需要结合业务场景判断:是数据采集遗漏,还是用户未完成付出的中间状态?

二、数据清洗的七种武器

1. 缺失值处理计谋

  1. # 删除策略:当某列缺失率超过80%时
  2. df.dropna(thresh=len(df)*0.2, axis=1, inplace=True)
  3.  
  4. # 填充策略:时间序列用前向填充
  5. df['price'].fillna(method='ffill', inplace=True)
  6.  
  7. # 业务填充:用户年龄用中位数,地区用众数
  8. df['age'].fillna(df['age'].median(), inplace=True)
  9. df['region'].fillna(df['region'].mode()[0], inplace=True)
复制代码
2. 异常值检测与修正

  1. # 3σ原则检测数值异常
  2. z_scores = (df['price'] - df['price'].mean()) / df['price'].std()
  3. df = df[(z_scores > -3) & (z_scores < 3)]
  4.  
  5. # 箱线图可视化辅助判断
  6. import seaborn as sns
  7. sns.boxplot(x=df['price'])
复制代码
3. 数据范例转换技巧

  1. # 字符串转分类变量
  2. df['product_category'] = df['product_category'].astype('category')
  3.  
  4. # 拆分复合字段
  5. df[['province', 'city']] = df['location'].str.split('/', expand=True)
  6.  
  7. # 时间戳特征工程
  8. df['hour'] = df['order_time'].dt.hour
  9. df['weekday'] = df['order_time'].dt.weekday
复制代码
三、数据转换的邪术工坊

1. 透视表与交叉表

  1. # 构建销售透视表
  2. pivot = df.pivot_table(
  3.     index='region', 
  4.     columns='product_category',
  5.     values='amount',
  6.     aggfunc='sum',
  7.     fill_value=0
  8. )
  9.  
  10. # 交叉表分析用户行为
  11. cross = pd.crosstab(
  12.     df['device_type'],
  13.     df['purchase_flag'],
  14.     normalize='index'
  15. )
复制代码
2. 窗口函数实战

  1. # 计算移动平均销量
  2. df['rolling_avg'] = df.groupby('product_id')['sales'].transform(
  3.     lambda x: x.rolling(7, min_periods=1).mean()
  4. )
  5.  
  6. # 排名函数应用
  7. df['sales_rank'] = df.groupby('region')['sales'].rank(ascending=False)
复制代码
3. 文本数据处理

  1. # 正则表达式清洗
  2. df['clean_comment'] = df['raw_comment'].str.replace(r'[^a-zA-Z0-9\s]', '')
  3.  
  4. # 词频统计基础
  5. from collections import Counter
  6. word_counts = Counter(' '.join(df['clean_comment']).split())
复制代码
四、可视化呈现的艺术

1. 根本图表进阶用法

  1. import matplotlib.pyplot as plt
  2.  
  3. # 双Y轴组合图表
  4. fig, ax1 = plt.subplots(figsize=(10,6))
  5. ax1.plot(df['date'], df['sales'], 'b-', label='销售额')
  6. ax2 = ax1.twinx()
  7. ax2.plot(df['date'], df['conversion_rate'], 'r--', label='转化率')
  8.  
  9. # 动态标注极值点
  10. max_idx = df['sales'].idxmax()
  11. ax1.annotate(f'峰值: {df.loc[max_idx,"sales"]}',
  12.             xy=(max_idx, df.loc[max_idx,"sales"]),
  13.             xytext=(max_idx-3, df.loc[max_idx,"sales"]*0.9),
  14.             arrowprops=dict(arrowstyle='->'))
复制代码
2. 高级可视化方案

  1. import plotly.express as px
  2.  
  3. # 交互式热力图
  4. fig = px.density_heatmap(
  5.     df, 
  6.     x='order_hour', 
  7.     y='day_of_week',
  8.     z='order_count',
  9.     title='订单时间分布热力图'
  10. )
  11. fig.show()
  12.  
  13. # 桑基图展示用户流转
  14. fig = px.sankey(
  15.     df,
  16.     node={'label': ['访问','加购','下单','支付'],
  17.           'color': ['lightblue','lightgreen','orange','red']},
  18.     source=[0,0,1,1,2],
  19.     target=[1,2,2,3,3],
  20.     value=[800,200,150,50,100]
  21. )
复制代码
3. 可视化计划原则



  • 色彩方案:利用ColorBrewer等工具选择色盲友爱配色
  • 字体选择:西文用Arial/Helvetica,中文用思源黑体
  • 图表尺寸:根据展示媒介调整,PPT推荐16:9,A4陈诉用5:3
  • 动态效果:交互式图表添加悬停提示、范围筛选器
五、实战案例:电商用户行为分析

1. 业务场景

某电商平台发现转化率下降,需要从用户行为数据中定位题目。数据集包含200万条用户行为日志日志,字段包罗用户ID、商品ID、行为范例(点击/收藏/加购/购买)、时间戳等。
2. 分析流程

  1. # 数据读取优化
  2. df = pd.read_parquet('user_behavior.parquet', engine='pyarrow')
  3.  
  4. # 行为路径分析
  5. behavior_flow = df.groupby(['user_id'])['behavior_type'].apply(
  6.     lambda x: '/'.join(x.unique())
  7. ).value_counts().sort_index()
  8.  
  9. # 漏斗转化计算
  10. funnel = df[df['behavior_type'].isin(['click','cart','buy'])].groupby(
  11.     'session_id'
  12. )['behavior_type'].agg(lambda x: '/'.join(x)).value_counts()
  13.  
  14. # 绘制漏斗图
  15. from pyecharts.charts import Funnel
  16. funnel = Funnel()
  17. funnel.add("转化路径", 
  18.            [list(z) for z in zip(funnel.index, funnel.values)],
  19.            sort_="descending",
  20.            label_opts={"position": "inside"})
  21. funnel.render("conversion_funnel.html")
复制代码
3. 关键发现



  • 移动端用户加购转化率比PC端低15%
  • 夜间22-24点的点击购买转化率最高
  • 商品详情页加载时间超过3秒会导致30%的用户流失
六、部署与交付



  • 自动化陈诉:利用Jupyter Notebook的nbconvert生成HTML陈诉
  • 仪表盘开辟:将关键图表集成到Streamlit/Dash应用
  • 数据API:用FastAPI封装分析逻辑,提供实时查询接口
  • 文档编写:利用Markdown记录分析逻辑,插入可交互图表
通过这种从数据采集到可视化交付的完整链路,即使面临TB级电商数据,也能高效完成从数据清洗到业务洞察的全流程。关键在于将每个处理步骤封装成可复用的函数模块,共同适当的自动化工具,使数据分析真正成为业务决策的加速器。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表