在大数据和人工智能时代,数据科学和机器学习在许多科技领域都变得必不可少。处理数据的一个必要方面是能够直观地描述、总结和表示数据。Python 统计库是全面、流行且广泛使用的工具,可帮助处理数据。
对于数据的基础描述我们可以进行下面的操作:
整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。
描述性统计是关于描述和总结数据。
使用两种主要方法:
可以将描述性统计应用于一个或多个数据集或变量。当描述和总结单个变量时,执行单变量分析。当搜索一对变量之间的统计关系时,进行双变量分析。同样多变量分析同时涉及多个变量。
描述性统计分析需要理解的度量类型有:
在统计中总体是所有元素或项目的集合。总体通常很大,这使得它们不适合收集和分析数据。这就是为什么统计学家通常试图通过选择和检查该总体的代表性子集来对总体做出一些结论。
总体的这个子集称为样本。理想情况样本应在令人满意的程度上保留总体的基本统计特征。这样将能够使用样本来收集有关总体的结论。
异常值是与从样本或总体中获取的大多数数据显着不同的数据点。通常造成异常数据原因有数据的自然变化、观察系统行为的变化、数据收集错误。
异常值没有精确的数学定义。必须依靠经验、有关主题的知识和常识来确定数据点是否为异常值以及如何处理。
既然要做描述性统计分析,就一定要先学习统计学相关的基础内容,否则概念都不知道是无法下手操作的,甚至连对应的三方库都不知道哪里去找。
建议先看一下下面的内容之后回来看如何进行python操作,如果你已经对统计有初步的了解了可以跳过这个部分。
导入应用的三方包。
import math
import statistics
import numpy as np
import scipy.stats
import pandas as pd
随机创建一些数据,通常缺失值用 nan 表示。表示的方法有很多种,常用的有float('nan')、math.nan、np.nan。
x = [1.0, 5, 7.5, 4, 99.1]
x_with_nan = [1.0, 5, 7.5, math.nan, 4, 99.1]
同时创建 np.ndarray 和 pd.Series 对象。
两个 NumPy 数组(y和y_with_nan)和两个 Pandas Series(z和z_with_nan),这些都是一维值序列。
y, y_with_nan = np.array(x), np.array(x_with_nan)
z, z_with_nan = pd.Series(x), pd.Series(x_with_nan)
y
array([ 8. , 1. , 2.5, 4. , 28. ])
y_with_nan
array([ 8. , 1. , 2.5, nan, 4. , 28. ])
z
0 8.0
1 1.0
2 2.5
3 4.0
4 28.0
dtype: float64
z_with_nan
0 8.0
1 1.0
2 2.5
3 NaN
4 4.0
5 28.0
dtype: float64
集中趋势的度量显示数据集的中心值或中间值。有几种定义被认为是数据集的中心。
上述三种均值的实现方法可以参考下面这篇内容。
Mr数据杨:『迷你教程』数据分析师常用的三大均值统计方法0 赞同 · 0 评论文章
n = len(x)
if n % 2:
median_ = sorted(x)[round(0.5*(n-1))]
else:
x_ord, index = sorted(x), round(0.5 * n)
median_ = 0.5 * (x_ord[index-1] + x_ord[index])
median_
7.5
u = [2, 3, 2, 8, 12]
# 常规获取方式
mode_ = max((u.count(item), item) for item in set(u))[1]
# statistics.mode() 和 statistics.multimode()模式
mode_ = statistics.mode(u)
mode_ = statistics.multimode(u)
# scipy.stats.mode() 模式
u = np.array(u)
mode_ = scipy.stats.mode(u)
mode_
# Pandas Series对象.mode()模式
u= pd.Series(u)
u.mode()
# 常规获取方式
n = len(x)
mean_ = sum(x) / n
var_ = sum((item - mean_)**2 for item in x) / (n - 1)
# statistics.variance() 模式
var_ = statistics.variance(x)
var_ =statistics.variance(x_with_nan)
# np.var() 或.var() 模式 ddof(自由度)
var_ = np.var(y, ddof=1)
var_ = y.var(ddof=1)
var_ = np.nanvar(y_with_nan, ddof=1) # 跳过 nan 值
# Pandas Series对象.var()模式
z.var(ddof=1)
z_with_nan.var(ddof=1) # 默认跳过nan值
# 常规获取方式
std_ = var_ ** 0.5
# statistics.stdev() 模式,自动忽略 nan 值
std_ = statistics.stdev(x)
# np.std() 或.std() 模式 ddof(自由度)
var_ = np.std(y, ddof=1)
var_ = y.std(ddof=1)
var_ = np.std(y_with_nan, ddof=1) # 跳过 nan 值
# Pandas Series对象.std()模式
z.std(ddof=1)
z_with_nan.std(ddof=1) # 默认跳过nan值
"""
左偏分布(负偏态)中:mean(平均数)# Python 3.8+
# statistics.quantiles() 模式
x = [-5.0, -1.1, 0.1, 2.0, 8.0, 12.8, 21.0, 25.8, 41.0]
statistics.quantiles(x, n=2)
[8.0]
statistics.quantiles(x, n=4, method='inclusive')
[0.1, 8.0, 21.0]
# np.percentile() 模式
y = np.array(x)
np.percentile(y, 5)
np.percentile(y, 95)
np.percentile(y, [25, 50, 75])
np.median(y)
# np.nanpercentile() 忽略 nan值
y_with_nan = np.insert(y, 2, np.nan)
np.nanpercentile(y_with_nan, [25, 50, 75])
# pd.Series对象有方法.quantile()
z, z_with_nan = pd.Series(y), pd.Series(y_with_nan)
z.quantile(0.05)
z.quantile(0.95)
z.quantile([0.25, 0.5, 0.75])
z_with_nan.quantile([0.25, 0.5, 0.75])
# np.ptp() 模式
np.ptp(y)
np.ptp(z)
np.ptp(y_with_nan)
np.ptp(z_with_nan)
"""
不同的计算方式
max() 、min() # Python 标准库
amax() 、amin() # NumPy
nanmax() 、nanmin() # NumPy 忽略 nan
.max() 、 .min() # NumPy
.max() 、.min() # Pandas 默认忽略 nan 值
"""
# scipy.stats.describe() 模块
"""
nobs:数据集中的观察或元素的数量
minmax:具有数据集最小值和最大值的元组
mean:数据集的平均值
variance:数据集的方差
skewness:数据集的偏度
kurtosis:数据集的峰度
"""
result = scipy.stats.describe(y, ddof=1, bias=False)
# Series对象有方法.describe()
"""
count:数据集中的元素数量
mean:数据集的平均值
std:数据集的标准差
min和max:数据集的最小值和最大值
25%, 50%, and 75%:数据集的四分位数
"""
result = z.describe()
经常需要检查数据集中两个变量的对应元素之间的关系。假设有两个变量 和 ,具有相同数量的元素 。让 中的 ₁ 对应于 中的 ₁, 中的 ₂ 对应 中的 ₂ 以此类推。
数据对之间相关性的度量:
衡量数据集之间相关性的两个统计量是 协方差和相关系数。
x = list(range(-10, 11))
y = [0, 2, 2, 2, 2, 3, 3, 6, 7, 4, 7, 6, 6, 9, 4, 5, 5, 10, 11, 12, 14]
x_, y_ = np.array(x), np.array(y)
x__, y__ = pd.Series(x_), pd.Series(y_)
协方差,样本协方差是量化一对变量之间关系的强度和方向的度量。
# 纯 Python 中计算协方差
n = len(x)
mean_x, mean_y = sum(x) / n, sum(y) / n
cov_xy = (sum((x[k] - mean_x) * (y[k] - mean_y) for k in range(n))/ (n - 1))
# NumPy 具有cov()模块,直接返回协方差矩阵
cov_matrix = np.cov(x_, y_)
# PandasSeries 具有.cov()模块,计算协方差
cov_xy = x__.cov(y__)
cov_xy = y__.cov(x__)
相关系数
关于相关系数有三种不同的计算方式。
这里举例说明 连续数据 & 连续数据 的pearsonr相关系数计算方式。
# Python 计算相关系数
var_x = sum((item - mean_x)**2 for item in x) / (n - 1)
var_y = sum((item - mean_y)**2 for item in y) / (n - 1)
std_x, std_y = var_x ** 0.5, var_y ** 0.5
r = cov_xy / (std_x * std_y)
# scipy.stats.linregress()模块
result = scipy.stats.linregress(x_, y_)
r = result.rvalue
# scipy.stats具有pearsonr()模块
r, p = scipy.stats.pearsonr(x_, y_)
# Numpy具有np.corrcoef()模块
corr_matrix = np.corrcoef(x_, y_)
# Pandas的Series有.corr()模块
r = x__.corr(y__)
r = y__.corr(x__)
统计学家经常使用二维数据,其中包括数据库表、CSV 文件、Excel等电子表格。
关于这方面的数据处理应用内容会有很多,建议选择一个自己擅长的就可以了,比如使用DataFrame进行处理。
Mr数据杨:「Python 数据处理基础」数据预处理连续变量10种常用方法
Mr数据杨:「Python 数据处理基础」英文文本数据预处理操作的9种常用方法
Mr数据杨:「Python 数据处理基础」数据特征处理标准化和归一化应用
Mr数据杨:「Python 数据处理基础」数据重复值的统计和处理2种常用方法
Mr数据杨:「Python 数据处理基础」数据预处理离散变量5种常用方法
Mr数据杨:「Python 数据处理基础」数据的降维以及Scikit-learn实现的14种方式
Mr数据杨:「Python 数据处理基础」数据冲突和样本的选取和处理
Mr数据杨:「Python 数据处理基础」中文文本数据预处理操作的8种常用方法
Mr数据杨:「Python 数据处理基础」数据缺失值的可视化和处理8种常用方法
Mr数据杨:「Python 数据处理基础」数据离群值的可视化和处理5种常用方法
Mr数据杨:「Python 数据处理基础」数据特征处理离散化和二值化应用
数据可视化的方法库有很多之前也提到过,这里进行一个未来汇总起来的一个数据可视化内容列表。工作中需要的数据可视化库都再这里面能知道对应的制作方法。
数据可视化是可以让外行人通过图形的方式快速、直接的了解数据所表达的含义。
| 留言与评论(共有 0 条评论) “” |