为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。
(以下练习题来源于《统计学—基于Python》。联系获取原始数据。)
练习题
为了研究不同地区的消费者对网上购物的满意度,随机抽取东部、中部和西部的1000名消费者进行调查,得到的结果如下表所示。 绘制以下图形并进行分析。
(1)根据东部地区的满意度数据,绘制简单条形图、帕累托图和饼图。
(2)根据东部地区、中部地区和西部地区的满意度数据,绘制并列条形图、推叠条形图和环形图。
Python代码与绘图
(1)根据东部地区的满意度数据,绘制简单条形图、帕累托图和饼图。
# (1)根据东部地区的满意度数据,绘制简单条形图、帕累托图和饼图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Heiti TC']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('exercise3_1.csv')
plt.subplots(1, 3, figsize = (20, 5)) # 设置子图和图形大小
# 图(a)东部地区满意度的简单条形图
plt.subplot(131)
plt.barh(y = df['满意度'], width = df['东部'], alpha = 0.6) # 绘制水平条形图
plt.xlabel('消费者人数', size = 12)
plt.ylabel('满意度', size = 12)
plt.title('(a)东部地区满意度的条形图', size = 15)
plt.xlim(0, 150) # 设置x轴的范围
# 图(b)东部地区满意度的帕累托图
# 处理数据
df_p = df.sort_values(by = '东部', ascending = False) # 按东部地区消费者人数降序排序数据框
p = 100*df_p['东部'].cumsum()/df_p['东部'].sum() # 计算累计百分比
df_p['累计百分比'] = p
# 绘制直方图
ax = plt.subplot(132)
ax.bar(df_p['满意度'], df_p['东部'], color = 'steelblue') # 绘制条形图
ax.set_ylabel('消费者人数', size = 12) # 设置y轴标签
ax.set_xlabel('满意度', size = 12) # 设置x轴标签
# 绘制帕累托曲线
ax2 = ax.twinx() # 与条形图共享坐标轴
ax2.plot(df_p['满意度'], df_p['累计百分比'], color = 'C1', marker = 'D', ms = 7) # 绘制折线图
ax2.set_ylabel('累计百分比(%)', size = 12) # 设置y轴标签
plt.title('(b)东部地区满意度的帕累托图', size = 15)
# 图(c)东部地区满意度的3D饼图
plt.subplot(133)
p1 = plt.pie(df['东部'], labels = df['满意度'], autopct = '%1.2f%%',
shadow = True, # 绘制立体带阴影的饼图
explode = (0.11, 0, 0, 0, 0)) # 设置某一块与中心的距离
plt.title('(c)东部地区满意度的3D饼图', size = 15)
(2)根据东部地区、中部地区和西部地区的满意度数据,绘制并列条形图、推叠条形图和环形图。
#(2)根据东部地区、中部地区和西部地区的满意度数据,绘制并列条形图、推叠条形图和环形图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Heiti TC']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('exercise3_1.csv')
plt.subplots(1, 3, figsize = (20, 5)) # 设置子图和图形大小
# 图(a)并列条形图
ax1 = plt.subplot(131) # 设置子图1
df.plot(kind = 'bar', stacked = False, width = 0.8, ax = ax1) # 绘制并列条形图
plt.xlabel('满意度', size = 12)
plt.ylabel('消费者人数', size = 12)
plt.xticks(range(5), df['满意度'], rotation = 0) # 添加x轴标签并设置旋转角度
plt.title('(a)并列条形图', fontsize = 13, color = 'black')
# 图(b)堆叠条形图
ax2 = plt.subplot(132) # 设置子图2
df.plot(kind = 'bar', stacked = True, width = 0.5, ax = ax2) # 绘制堆叠条形图
plt.xlabel('满意度', size = 12)
plt.ylabel('消费者人数', size = 12)
plt.xticks(range(5), df['满意度'], rotation = 0) # 添加x轴标签并设置旋转角度
plt.title('(b)堆叠条形图', fontsize = 13, color = 'black')
# 图(c)多样本嵌套环形图
plt.subplot(133) # 设置子图3
colors = ['red', 'yellow', 'slateblue', 'lawngreen', 'magenta', 'green', 'orange', 'cyan', 'pink', 'gold'] # 设置颜色向量
p1 = plt.pie(df['东部'], labels = df['满意度'], autopct = '%1.2f%%',
radius = 1, pctdistance = 0.9, # 半径为1,标签距圆心距离为0.9
colors = colors,
wedgeprops = dict(linewidth = 1.2, width = 0.3, edgecolor = 'w'))
p2 = plt.pie(df['西部'], autopct = '%1.2f%%',
radius = 0.75, pctdistance = 0.85, # 半径为0.75,标签距圆心距离为0.85
colors = colors,
wedgeprops = dict(linewidth = 1.2, width = 0.3, edgecolor = 'w'))
p3 = plt.pie(df['中部'], autopct = '%1.2f%%',
radius = 0.5, pctdistance = 0.7, # 半径为0.5,标签距圆心距离为0.7
colors = colors,
wedgeprops = dict(linewidth = 1.2, width = 0.3, edgecolor = 'w'))
plt.title('(c)多样本嵌套环形图', fontsize = 13, color = 'black')
# plt.tight_layout()
都读到这里了,不妨关注、点赞一下吧!