当前位置:首页>python>python数据可视化技巧的100个练习 -- 11. 客户数据的 3D 散点图

python数据可视化技巧的100个练习 -- 11. 客户数据的 3D 散点图

  • 2026-10-11 06:49:22
python数据可视化技巧的100个练习 -- 11. 客户数据的 3D 散点图
重要性★★★★☆
难度★★★☆☆
一家零售公司希望在 3D 空间中可视化其客户数据,以便更好地了解客户年龄、年度消费和忠诚度积分之间的关系。
你的任务是使用 Python 创建一个 3D 散点图来表示这些数据。
公司为你提供了以下要求:
为 100 位客户生成随机数据,包含以下属性:
年龄:18 至 80 岁
年度消费:100 至 10,000 美元
忠诚度积分:0 至 1000 分
创建一个 3D 散点图,其中:
X 轴表示年龄
Y 轴表示年度消费
Z 轴表示忠诚度积分
每个点代表一个客户。
根据年龄组为点分配不同颜色:
18-30 岁:红色
31-50 岁:绿色
51-80 岁:蓝色
为图表添加适当的标签、标题和图例。
确保图表视觉上吸引人且易于解读。
你的代码应在单个脚本中包含数据生成和可视化。
专注于 Python 中高效的数据操作和可视化技术。

【数据生成代码示例】

import numpy as npnp.random.seed(42)age = np.random.randint(18, 81, 100)spending = np.random.uniform(100, 10001, 100)loyalty = np.random.randint(0, 1001, 100)

【图表答案】

【代码答案】

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D np.random.seed(42) age = np.random.randint(18, 81, 100) spending = np.random.uniform(100, 10001, 100) loyalty = np.random.randint(0, 1001, 100) fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # 根据年龄组定义颜色colors = ['red' if a <= 30 else 'green' if a <= 50 else 'blue' for a in age] scatter = ax.scatter(age, spending, loyalty, c=colors, s=50, alpha=0.6) ax.set_xlabel('年龄') ax.set_ylabel('年度消费(美元)') ax.set_zlabel('忠诚度积分') ax.set_title('客户数据的 3D 散点图') # 创建图例legend_elements = [plt.Line2D([0], [0], marker='o', color='w', label='18-30', markerfacecolor='r', markersize=10), plt.Line2D([0], [0], marker='o', color='w', label='31-50', markerfacecolor='g', markersize=10), plt.Line2D([0], [0], marker='o', color='w', label='51-80', markerfacecolor='b', markersize=10)] ax.legend(handles=legend_elements, title='年龄组') plt.tight_layout() plt.show()
这段代码创建了一个 3D 散点图,以根据年龄、年度消费和忠诚度积分可视化客户数据。
让我们逐步分析代码并解释关键概念:
数据生成:
  • 我们使用 NumPy 的随机函数为 100 位客户生成数据。
  • np.random.randint() 用于年龄和忠诚度积分(整数值)。
  • np.random.uniform() 用于年度消费(浮点值)。
  • np.random.seed(42) 确保随机数据的可重复性。
导入库:
  • NumPy(np)用于数值运算和数据生成。
  • Matplotlib(plt)用于创建图表。
  • mpl_toolkits.mplot3d 中的 Axes3D 用于 3D 绘图功能。
创建 3D 图表:
  • fig = plt.figure(figsize=(10, 8)) 创建一个指定大小的新图形。
  • ax = fig.add_subplot(111, projection='3d') 向图形添加一个 3D 子图。
  • 颜色分配:
  • 我们使用列表推导式根据年龄组分配颜色。
  • 这为每位客户创建了一个颜色字符串列表('red'、'green' 或 'blue')。
绘制数据:
  • ax.scatter() 用于创建 3D 散点图。
  • 它接受 x、y 和 z 坐标(年龄、消费、忠诚度)以及颜色列表。
  • s=50 设置标记的大小,alpha=0.6 使它们略微透明。
  • 设置标签和标题:
  • ax.set_xlabel()、ax.set_ylabel() 和 ax.set_zlabel() 设置轴标签。
  • ax.set_title() 设置图表标题。
创建图例:
  • 我们使用 plt.Line2D() 创建自定义图例元素。
  • 每个元素代表一个年龄组及其对应的颜色。
  • ax.legend() 将图例添加到图表中,并带有标题。
完成并显示图表:
  • plt.tight_layout() 调整图表布局,防止重叠。
  • plt.show() 显示最终图表。
  • 这段代码展示了 Python 数据可视化的几个重要概念:
  • 使用 Matplotlib 进行 3D 绘图
  • 使用 NumPy 生成随机数据
  • 根据条件对数据点进行颜色编码
  • 创建自定义图例
  • 正确标记轴和标题
生成的可视化图表便于解读客户年龄、消费和忠诚度积分之间的关系,颜色编码提供了额外的信息维度。

【小知识】

3D 散点图适用于可视化三个变量之间的关系,但数据量较大时可能会显得杂乱。
Matplotlib 的 3D 绘图功能在 2010 年发布的 1.0.0 版本中引入。
mpl_toolkits.mplot3d 模块作为 Matplotlib 2D 绘图功能的扩展,提供了 3D 绘图工具。
使用 3D 图表时,要考虑观看角度,因为从某些角度可能会遮挡一些数据点。
散点图中的 alpha 参数控制点的透明度,有助于可视化重叠的数据点。
本例中用于颜色分配的列表推导式是创建 Python 列表的强大且简洁的方法,通常比传统的 for 循环更高效。
numpy.random.seed() 函数对于科学计算和数据科学中的可重复性至关重要,确保随机数生成可以在不同运行或不同用户之间复制。
尽管 3D 图表在视觉上可能很吸引人,但它们并不总是传达信息的最有效方式。有时,多个 2D 图表或其他可视化技术可能更合适,具体取决于数据和你想要传达的信息。

最新文章

随机文章