统计学3——数据的图表表示
统计学3——数据的图表表示
数据的图表表示是统计学中的重要环节,通过图表可以直观地展示数据的分布特征和规律。本文将详细介绍数据预处理、分类图表和数值型图表等内容,帮助读者掌握数据可视化的基本方法和技巧。
知识结构
内容精读
数据预处理
采集到的数据往往不能直接进行分析,还需要进行审核、筛选、排序等初步操作。
数据审核
就是检查数据中是否存在错误。主要包括完整性和准确性两个方面,完整性主要是检查应调查的单位或个体是否有遗漏;准确性则主要检查数据的真伪和是否存在异常值。对于二手数据,还应检查数据的时效性和适用性。
数据筛选
根据研究需要的某项特征筛选出符合条件的某类数据。
数据排序
按一定的顺序将数据排序,以便研究者通过浏览数据发现一些明显的特征或趋势。数据排序还有助于数据的检查纠错。
分类图表
条形图
import matplotlib.pyplot as plt
# 准备数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [10, 20, 15, 25]
# 创建条形图
plt.bar(categories, values, width=0.3)
# 显示图形
plt.show()
帕累托图
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.arange(1, 11)
y = 2**x
# 创建帕累托图
plt.figure()
plt.bar(x, y)
# 设置标题和轴标签
plt.title('Pascal\'s Triangle')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 显示图形
plt.show()
饼图
import matplotlib.pyplot as plt
# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
# 设置颜色
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
# 设置图表中的图例
explode = (0, 0, 0, 0) # 切片控制
# 画饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
# 确保饼图是圆的
plt.axis('equal')
# 显示图表
plt.show()
环形图
import matplotlib.pyplot as plt
# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
# 设置颜色
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
# 设置图表中的图例
explode = (0.1, 0, 0, 0) # 仅 "爆炸" 第一个切片
# 画饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140, wedgeprops=dict(width=0.3))
# 确保饼图是圆的
plt.axis('equal')
# 显示图表
plt.show()
复合图表
折线图和柱状图复合
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
matplotlib.rcParams['axes.unicode_minus'] = False
# 示例数据
x = np.arange(10)
y_line = np.random.rand(10) * 10 # 折线图数据
y_bar = np.random.rand(10) * 10 # 柱状图数据
fig, ax1 = plt.subplots(figsize=(10, 6))
# 绘制柱状图
ax1.bar(x, y_bar, color='b', alpha=0.6, label='柱状图数据')
ax1.set_xlabel('X轴')
ax1.set_ylabel('柱状图值', color='b')
ax1.tick_params(axis='y', labelcolor='b')
# 创建第二个y轴,共享x轴
ax2 = ax1.twinx()
ax2.plot(x, y_line, color='r', marker='o', linestyle='-', label='折线图数据')
ax2.set_ylabel('折线图值', color='r')
ax2.tick_params(axis='y', labelcolor='r')
# 添加图例
fig.legend(loc='upper right', bbox_to_anchor=(0.85, 0.85))
# 标题和网格
plt.title('折线图和柱状图复合图')
ax1.grid(True)
plt.show()
数值型图表
折线图
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
# 创建折线图
plt.plot(x, y)
# 设置图表标题
plt.title('折线图示例')
# 设置x轴和y轴的标签
plt.xlabel('x轴')
plt.ylabel('y轴')
# 显示图表
plt.show()
直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成模拟数据
data = np.random.randn(1000)
# 创建直方图
plt.hist(data, bins=30, color='green', edgecolor='black')
# 设置标题和轴标签
plt.title('Histogram of Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图形
plt.show()
茎叶图
import numpy as np
import matplotlib.pyplot as plt
plt.stem(np.sin(np.arange(10)))
plt.show()
箱线图
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
data = np.random.normal(0, 1, 1000)
# 创建箱线图
plt.boxplot(data)
# 显示图形
plt.show()
散点图
import matplotlib.pyplot as plt
# 假设x和y是已经准备好的数据列表或数组
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 创建散点图
plt.scatter(x, y)
# 显示图表
plt.show()
气泡图
import matplotlib.pyplot as plt
# 数据
x = [5, 10, 15, 20, 25]
y = [10, 20, 25, 30, 35]
sizes = [20, 50, 80, 200, 500] # 气泡大小
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'purple']
# 画气泡图
plt.scatter(x, y, s=sizes, c=colors, alpha=0.5)
# 添加标签
plt.xlabel('X ')
plt.ylabel('Y ')
# 显示图表
plt.show()
雷达图
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [4, 3, 2, 5, 4]
# 标签数量
num_vars = len(labels)
# 计算角度
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()
# 使雷达图封闭
values += values[:1]
angles += angles[:1]
# 画雷达图
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.fill(angles, values, color='lightcoral', alpha=0.25)
ax.plot(angles, values, color='lightcoral', linewidth=2)
# 设置标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(labels)
# 显示图表
plt.show()
名词解释
频数分布
频数是落在某一特定类别或组中的数据个数。按照某种标志(性质或数量)将数据分成若干组,分别统计各组数据的频数,并把各个类别及落在其中的相应频数全部列出,并用表格形式表现出来,称为频数分布。
列联表
列联表是由两个或两个以上变量交叉分布的频数分布表。二维的列联表称为交叉表。
比率
比率是样本或总体中不同类别数值之间的比值,由于比率不是部分与整体之间的对比关系,因而比值可能大于1。
组距分组
组距分组是将全部变量值一次划分为若干区间,将一个区间的变量值作为一组;适用于变量值较多或连续型变量。在组距分组中,一个组的最小值称为下限,最大值称为上限;组距为一组上限与下限之差。组距相等称为等距分组,组距不等称为不等距分组。
组中值
组中值是指每一组中下限值与上限值中间的值,即组中值=(下限值+上限值)÷2,反映各组数据的一般水平。(必要假定条件:各组数据在本组内呈均匀分布或在组中值两侧呈对称分布。)
集中趋势
集中趋势又称“数据的中心位置”、“集中量数”等。它是一组数据的代表值。集中趋势的概念就是平均数的概念,它对总体的某一特征具有代表性,表明所研究的理论现象在一定时间、空间条件下的共同性质和一般水平。
小结
图表的选择不是固定的,对于不同的研究问题,数据的分布规律也不同。选择合适的图表对数据进行展示,既可以提高数据的可视性,也可以帮助研究人员探索初步的研究方向。