角色(Role):你是一位数据分析专家,主要基于 Anaconda 平台中的 JupyterLab 进行数据分析,能够熟练运用 Python 处理和分析数据,快速制作专业的数据可视化图表。 任务(Task):我是一个数据分析新手,已经创建好了一个基于 Anaconda 的数据分析环境,接下来想要快速制作一批数据可视化的图表。 要求(Format):请你帮我用 Python 随机生成一个客户销售的数据集,其中包括客户姓名、性别、年龄、所在省份、最近购买时间、累计购买次数、累计购买金额,累计购买金额与次数的比例关系要合理。请教我怎么根据上面这个数据集,制作一批专业的数据可视化图表,要用中文显示标题和坐标轴标签,提前做好相关的设置,避免 Python 代码运行出错,详细介绍一步一步操作的方法。
如果你还没有搭建基于 Anaconda 的数据分析环境,可以扫描文末的二维码,订阅「数据化分析案例库」,查看怎么用 AI 创建高效的数据分析环境。
你可以对比不同 AI 的回复结果,并尝试在本地电脑的工作环境中运行,以选择一个相对较好的解决方案。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from faker import Faker
from datetime import datetime, timedelta
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 创建数据生成器
fake = Faker('zh_CN')
# 设置随机种子以确保可重复的结果
np.random.seed(0)
fake.random.seed(0)
# 生成数据集
data = {
'客户姓名': [fake.name() for _ in range(100)],
'性别': [fake.random.choice(['男', '女']) for _ in range(100)],
'年龄': np.random.randint(18, 70, size=100),
'所在省份': [fake.province() for _ in range(100)],
'最近购买时间': [fake.date_between(start_date='-2y', end_date='today') for _ in range(100)],
'累计购买次数': np.random.randint(1, 20, size=100),
'累计购买金额': np.random.normal(loc=1000, scale=500, size=100) # 假设平均每次购买金额为1000元,标准差为500元
}
# 累计购买金额与累计购买次数的合理比例
data["累计购买金额"] = [round(times * np.random.uniform(500, 800), 2) for times in data["累计购买次数"]]
# 创建 DataFrame
df = pd.DataFrame(data)
# 转换日期格式
df['最近购买时间'] = pd.to_datetime(df['最近购买时间'])
# 计算累计购买金额与次数的比例
df['购买金额/次数'] = df['累计购买金额'] / df['累计购买次数']
# 数据可视化
# 1. 性别分布
gender_distribution = df['性别'].value_counts()
plt.figure(figsize=(8, 8))
plt.pie(gender_distribution, labels=gender_distribution.index, autopct='%1.1f%%', colors=['#5799c6', '#e7b362'])
plt.title('客户性别分布')
plt.show()
# 2. 年龄分布
sns.histplot(df['年龄'], kde=False)
plt.title('客户年龄分布')
plt.xlabel('年龄')
plt.ylabel('数量')
plt.show()
# 3. 购买次数分布
sns.histplot(df['累计购买次数'], kde=False)
plt.title('客户累计购买次数分布')
plt.xlabel('累计购买次数')
plt.ylabel('数量')
plt.show()
# 4. 购买金额分布
sns.histplot(df['累计购买金额'], kde=False)
plt.title('客户累计购买金额分布')
plt.xlabel('累计购买金额')
plt.ylabel('数量')
plt.show()
# 5. 购买金额与次数的比例
sns.scatterplot(x='累计购买次数', y='累计购买金额', data=df)
plt.title('累计购买金额与次数的比例关系')
plt.xlabel('累计购买次数')
plt.ylabel('累计购买金额')
plt.show()
请根据上面的省份数据,用 pyecharts 绘制一张 Map 热力数据地图,显示每个省份的累计销售金额,图中不要显示省份名称。
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ChartType
# 计算每个省份的累计购买金额
data = df.groupby('所在省份')['累计购买金额'].sum()
# 创建 Map 图实例
map = (
Map()
.add("累计购买金额", # 系列名称
[list(z) for z in zip(data.index, data)], # 地图上的区域名称和对应的值
"china" # 地图类型
)
.set_global_opts(
title_opts=opts.TitleOpts(title="中国各省份销售额分布图"), # 图表标题
visualmap_opts=opts.VisualMapOpts(max_=data.max()) # 视觉映射
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False) # 设置标签不显示
)
)
map.render("中国各省份销售额分布图.html")
交互式的热力数据地图如下:
运行之后,打开「中国各省份销售额分布图.html」这个文件,就能看到一张
↑ 点击此卡片关注 ↑