单变量描述统计
单变量描述统计分析按照变量的测量层次,可以分为无序类别变量的描述统计分析、有序类别变量的描述统计分析以及数值变量的描述统计分析。
单变量描述统计的维度
无序类别变量的描述统计
适用于无序类别变量的描述统计方法,有次数分布、比例、比率、图示和对比值等。
次数分布
次数分布(frequency distribution),就是变量中每一个值的出现次数。通过次数分布,可以看出变量中不同取值的多少。不同规模样本中的次数分布不能直接比较。
次数分布的Python实现
使用value_counts()
函数,可以计算指定变量的次数分布。
SPSS实现
在数据视图
选中变量,按右键,选择描述统计
即可。
比例
比例(proporitions) 就是将每个类别的次数 \(f\) 除以总数\(N\)。公式为:\(P = \dfrac{f}{N}\)。通过计算比例,可使不同样本规模的总数成为同一个基数,即都是1
。
Python实现
使用value_counts(normalize=True)
,可以算出指定变量不同取值的比例。
SPSS实现
在数据视图
选中变量,按右键,选择描述统计
即可。
比率
比率(rates)就是把比例的基数变大,使读者更容易领会。社会科学中最常用的比率是百分率(%
),在汇报结果时,通常保留1
到2
位小数。
Python实现
使用数组的基本运算,即可得到比率值。例如df['政治面貌'].value_counts(normalize=True).values * 100
。
SPSS实现
在数据视图
选中变量,按右键,选择描述统计
即可。
类别数据可视化
在社会科学中多使用柱状图和饼图描述无序类别变量。
柱状图
柱状图(bar chart)是一种通过柱形的长度来表现数据大小的一种常用图表类型。
Python实现
……#导入包,打开文件等代码省略
……
…… # 生成x、y轴方向的坐标
= df['政治面貌'].value_counts().index
x = df['政治面貌'].value_counts(normalize=True).values * 100
y # 创建图
= plt.subplots()
fig, ax # 绘制柱状图
= ax.bar(x, y)
rects1 # 设置x轴变量名称
'政治面貌')
ax.set_xlabel(# 设置y轴最大值
=100)
ax.set_ylim(ymax# 在柱上方显示对应的值
="%.1f", padding=3)
ax.bar_label(rects1, fmt# 显示图形
plt.show()
可以将上述代码写成一个函数,方便以后重复使用。
饼图
饼图(pie chart)是一个圆形平面按照数值比例分割的图。
Python实现
= plt.subplots()
fig, ax2 = df['政治面貌'].value_counts().index
labels ='%1.1f%%', labels=labels, textprops=dict(color="w"))
ax2.pie(y, autopct plt.show()
有序类别变量的描述统计
适用于无序类别变量的描述统计方法,如次数分布、比例、比率、柱状图、饼图,也适用于有序类别变量。还有针对有序类别变量的描述统计方法:累计次数、累加百分率。
累加次数
累加次数(cumlulative frequencies),简写cf
,就是把次数逐级相加起来。分为两种,一种是向上累加,一种是向下累加。累加次数的作用是使我们容易知道某值以下或者以上的次数总和。
Python实现
借助于value_counts
方法和cumsum
方法,可以实现对累加次数的计算。
import pandas as pd
from pyreadstat import pyreadstat
= pyreadstat.read_sav(r'国家认同数据清理后.sav',apply_value_formats=True,formats_as_ordered_category=True)
df, metadata = df['会打多少分'].value_counts(sort=False)
result = pd.DataFrame(result)
df_result '累计求和'] = result.values.cumsum() df_result[
SPSS实现
累加百分比
累加百分比(cumulative percentages),简写c%
,就是将各级的百分率数值逐级相加。
Python实现
'累计百分比(%)'] = result['百分比'].values.cumsum() result[
SPSS实现
数值变量的描述统计
数值变量可以使用有序类别变量的累加次数和累加百分比。
使用累加百分比描述数值变量
将数值变量按照一定规则分组,使用cut
方法将数值变量转化为有序类别变量,然后按照有序类别变量的描述统计进行。
Python实现
'星级'] = pd.cut(df['average'],
df[=[0, 2, 4, 6, 8, 10],
bins=['一星', '二星', '三星', '四星', '五星'])
labels= df['星级'].value_counts(sort=False)
result '累计百分比(%)'] = result.values.cumsum() df_result[
SPSS实现
使用直方图对数值变量的分布进行可视化
可以使用直方图对数值变量的分布进行可视化分析,还可观察数值变量中异常值的分布情况。
Python实现
"""
引入包,读取数据文件的代码参考其他图形
"""
= plt.subplots()
fig, ax
ax.hist('average'],
df["""设定组距"""
=[0, 2, 4, 6, 8, 10],
bins=0.5,
linewidth="white",
edgecolor )
SPSS实现
集中趋势
集中趋势就是找出一个数值来代表变量的数值分布,以反映资料的集结情况,可以根据这个值来估计或预测每个研究对象(即个案)的数值。
众值
众值的概念及实现见无序类别变量的描述统计中的众值。
中位值
中位值(median)就是在一个序列中的中央位置之值。中位值具有估计和预测的意义,以中位值去估计变量的数值,所犯的错误总数是最少的。中位值的计算公式是\(median=\dfrac{n+1}{2}\)。其中\(n\)是个案数目。
Python实现
"""
使用median方法,可计算出变量的中位数。
"""
'average'].median()
df["""
输出结果为9.0
"""
均值
均值(mean)是将变量的各个数值相加起来求取平均值。计算公式为\(\bar{x}=\dfrac{\sum{x}}{n}\)。其中\(n\)表示全部个案数目,\(\sum{x}\)表示各个个案数值之和。以均值估计数值变量的资料,错误最小。
Python实现
"""
使用mean方法,可计算出变量的平均数。
"""
'average'].mean()
df["""
输出结果为8.9
"""
离散趋势
离散趋势是用来表示个案与个案之间差异情况的描述统计方法。与集中趋势测量具有互相补充的作用。
四分位差
四分位差(interquartile range)是将个案由低到高排列,然后分为四个等分,第一个四分位置的值(Q1)与第三个四分位置的值(Q3)的差异,就是四分位差。四分位值越大,表示中位值的代表性就越小。
Python实现
"""
使用quantile方法,可计算出变量的分位值。
"""
'average'].quantile([0.25,0.5,0.75])
df["""
输出结果为:
0.25 8.45
0.50 9.00
0.75 9.20
Name: average, dtype: float64
"""
标准差
标准差(standard deviation),是将各数值\(x\)与其均值\(\bar{x}\)之差的平方和除以全部个案数目\(n\),然后取其平方根。公式为\(S=\sqrt{\dfrac{\sum{(x-\bar{x})^2}}{n}}\)。标准差的意义就是以均值预测各个个案的数值,所犯错误的大小。
Python实现
"""
使用std方法,可计算出变量的标准差。
"""
'average'].std()
df["""
输出结果为:
0.7621411592991403
"""
分布
偏度
偏度(Skewness)是描述分布偏离对称性程度的一个特征数。当偏度大于0时,称该分布右偏或正偏。当偏度小于0时,该分布左偏或负偏。
偏态说的是有一边的尾巴更厚,相当于某一边加了异常值。异常值对均值影响大,对中位数影响微小,对众数无影响。
峰度
峰度(Kurtosis)又称峰态系数,表征概率密度分布曲线在平均值处峰值高低的特征数,即是描述总体中所有取值分布形态陡缓程度的统计量。直观看来,峰度反映了峰部的尖度。这个统计量需要与正态分布(也叫常态分布)相比较。