← 返回首页

项目05:销售数据可视化

学习数据可视化基础,理解数据洞察

📊 数据集预览

使用 retail_orders 数据集,为可视化做准备。

retail_orders.csv(前5行)

🎯 学习目标

  • 理解数据可视化的重要性
  • 学习准备可视化数据
  • 掌握数据聚合与排序
  • 理解图表类型选择
  • 培养数据洞察力

📚 知识点讲解

什么是数据可视化?

数据可视化是将数据转换为图形或图表的过程,帮助我们:

  • 快速理解数据模式和趋势
  • 发现数据中的异常值和规律
  • 有效地传达数据洞察
  • 支持数据驱动的决策
💡 小贴士:好的可视化应该简洁清晰,避免过度装饰,让数据自己说话

一、准备可视化数据

1.1 计算衍生指标

为可视化计算关键指标,如总销售额。

# 计算每行的总销售额
df['total_sales'] = df['quantity'] * df['price']

print(df[['product', 'quantity', 'price', 'total_sales']].head())

1.2 数据聚合

按维度聚合数据,准备柱状图或饼图数据。

# 按产品聚合总销售额
product_sales = df.groupby('product')['total_sales'].sum()

print('各产品销售总额:')
print(product_sales.sort_values(ascending=False))

1.3 计算占比

计算各部分占整体的比例,适合饼图展示。

# 计算各地区销售占比
region_sales = df.groupby('region')['total_sales'].sum()
region_percent = region_sales / region_sales.sum() * 100

print('各地区销售占比:')
print(region_percent.round(1))

二、数据排序与筛选

2.1 按指标排序

找出最受欢迎或表现最好的项目。

# 按销量降序排序
product_qty = df.groupby('product')['quantity'].sum()
sorted_products = product_qty.sort_values(ascending=False)

print('产品销量排行:')
print(sorted_products)

2.2 使用 idxmax() 找最大值

快速找到最大值对应的索引。

# 找出销售额最高的产品
df['total_sales'] = df['quantity'] * df['price']
product_sales = df.groupby('product')['total_sales'].sum()

top_product = product_sales.idxmax()
max_sales = product_sales.max()

print(f'销售额最高的产品: {top_product}, 销售额: {max_sales}')

三、创建交叉表

3.1 使用 unstack() 创建矩阵

将分组结果转换为宽格式,适合热力图。

# 创建产品与地区的交叉表
df['total_sales'] = df['quantity'] * df['price']
cross_sales = df.groupby(['product', 'region'])['total_sales'].sum().unstack()

print('产品地区销售矩阵:')
print(cross_sales)
⚠️ 注意:unstack() 将多层索引转换为列,缺失值会显示为 NaN

3.2 计算描述统计

了解数据分布特征。

# 计算价格和数量的描述统计
print('数量统计:')
print(df['quantity'].describe())
print('\n价格统计:')
print(df['price'].describe())

💻 代码实战

在下方代码编辑器中编写并运行完整的数据可视化准备代码:

05-visualization/main.py
点击"运行代码"按钮执行

📋 总代码运行框

整合本项目的所有代码,可以一次性运行查看完整结果。

综合代码编辑器
点击"运行代码"查看输出...

参考答案

import pandas as pd

df = pd.read_csv('retail_orders.csv')

df['total_sales'] = df['quantity'] * df['price']

product_sales = df.groupby('product')['total_sales'].sum()
region_sales = df.groupby('region')['total_sales'].sum()
region_percent = region_sales / region_sales.sum() * 100

cross_sales = df.groupby(['product', 'region'])['total_sales'].sum().unstack()