python数据可视化技巧的100个练习 --33. 生成分布数据的山脊线图
重要性★★★★☆
难度★★★☆☆
您的任务是分析一家公司每月进行的客户满意度评分的分布情况。
该公司希望可视化过去 12 个月这些评分的变化情况。
您的任务是创建一个山脊线图,显示每个月的客户满意度评分分布。
为过去 12 个月生成合成数据,并使用山脊线图进行可视化。
【数据生成代码示例】
import numpy as npimport pandas as pd# 为过去 12 个月生成客户满意度评分的合成数据months = pd.date_range('2023-07-01', periods=12, freq='M').strftime('%Y-%m').tolist()data = [np.random.normal(loc=75, scale=10, size=200) for _ in months]# 创建 DataFramedf = pd.DataFrame({month: scores for month, scores in zip(months, data)})df = df.melt(var_name='Month', value_name='Satisfaction')
【图表答案】
【代码答案】
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 为过去 12 个月生成客户满意度评分的合成数据months = pd.date_range('2023-07-01', periods=12, freq='ME').strftime('%Y-%m').tolist()data = [np.random.normal(loc=75, scale=10, size=200) for _ in months]# 创建 DataFramedf = pd.DataFrame({month: scores for month, scores in zip(months, data)})df = df.melt(var_name='Month', value_name='Satisfaction')# 绘制山脊线图plt.figure(figsize=(10, 8))sns.violinplot(x='Satisfaction', y='Month', data=df, density_norm='width', inner=None)plt.title('过去 12 个月客户满意度评分的山脊线图')plt.xlabel('满意度评分')plt.ylabel('月份')plt.show()
首先,我们导入必要的库:numpy、pandas、matplotlib.pyplot 和 seaborn。
Numpy 和 pandas 用于数据处理,而 matplotlib 和 seaborn 用于数据可视化。
首先,我们为过去 12 个月生成客户满意度评分的合成数据。
我们使用 pd.date_range 创建月份列表,并将其格式化为字符串。
然后,对于每个月,我们使用 np.random.normal 生成 200 个随机满意度评分,这些评分遵循均值为 75、标准差为 10 的正态分布。
接下来,我们从生成的数据创建一个 pandas DataFrame。
DataFrame 中的每一列代表一个月,每一行代表一个满意度评分。
然后,我们使用 melt 函数将 DataFrame 转换为适合绘图的长格式。
melt 函数创建了两个列:“月份”和“满意度”,这是 seaborn 绘图函数所需的。
最后,我们使用 seaborn 的 violinplot 函数创建一个山脊线图。
我们将 x 轴设置为“Satisfaction”,y 轴设置为“Month”。
scale='width' 参数确保小提琴的宽度具有可比性。
我们使用 inner=None 去掉小提琴的内部部分,使图表看起来更整洁。
设置好图表的标题和轴标签后,我们使用 plt.show() 显示图表。
【小知识】
山脊线图适用于可视化多个类别或时间段内变量的分布。
它们特别有助于显示分布随时间的演变。
Seaborn 的 violinplot 常用于创建山脊线图,因为它提供了数据密度的清晰表示。
调整 violinplot 函数中的 scale 参数可以帮助有效比较不同的分布。