目录
文章目录
- 列方程: 3 x + 3.2 y = 118.4 3.5 x + 3.6 y = 135.2 3x + 3.2y = 118.4\\ 3.5x + 3.6y = 135.2 3x+3.2y=118.43.5x+3.6y=135.2 表示成矩阵相乘: $$ \left[ \begin{array}{ccc} 3 & 3.2 \\ 3.5 & 3.6 \\ \end{array} \right] \times \left[ \begin{array}{ccc} x \\ y \\ \end{array} \right]
- 这一组方程表示为矩阵相乘格式: $$ \left[ \begin{array}{ccc} x{_1} & 1\\ x{_2} & 1\\ x{_3} & 1 \\ x{_n} & 1 \\ \end{array} \right ] \times \left[ \begin{array}{ccc} k\\ b\\ \end{array} \right ]
七、数值型数据描述统计
数值型数据描述统计概论
数据分析思想中重要的一环就是统计学分析,这涉及到常见统计学指标的运用及分析,需要数据分析师掌握相关统计学知识。
常见指标主要有:
- 算数平均值
- 加权平均值
- 最值、中位数
- 频数、众数
- 四分位数
- 方差、标准差
- …
1. 算数平均值(arithmetic mean)
样本中的每个值都是真值与误差的和,算数平均值表示对真值的无偏估计。
数学表示
样本: S = [ s 1 , s 2 , s 3 , … , s n ] S = [s_1, s_2, s_3, …, s_n] S=[s1,s2,s3,…,sn]
算数平均值: M e a n = ( s 1 + s 2 + s 3 + . . . + s n ) n Mean = \frac{(s_1 + s_2 + s_3 + ... + s_n)}{n} Mean=n(s1+s2+s3+...+sn)
python表示
数据集
S = [s1, s2, s3, ..., sn]
样本中的每个值都是真值与误差的和。
算数平均值:
mean = (s1 + s2 + s3 + ... + sn) / n
求算数平均值的函数和方法
Numpy 中使用mean 函数
import numpy
numpy.mean(数据数组, axis=轴, dtype=数据类型)
Pandas 中 的Series 和 DataFrame 都使用 mean 方法
import pandas
s = pandas.Series(...)
s.mean()
df = pandas.DataFrame(...)
df.mean([axis=轴]))
示例
# 测试数据
data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
import numpy
print(numpy.mean(data)) # 求所有
print(numpy.mean(data, axis=0)) # 轴0行(垂直方向)
print(numpy.mean(data, axis=1)) # 轴1行(水平方向)
import pandas
s = pandas.Series([1, 2, 3, 4])
print(s.mean())
df = pandas.DataFrame(data)
print(df.mean()) # 等同于 df.mean(axis=0)
print(df.mean(axis=0))
print(df.mean(axis=1))
2. 加权平均值(weighted average)
求平均值时,考虑不同样本的重要性,赋予不同的权重。
样本: S = [ s 1 , s 2 , s 3 , … , s n ] S = [s_1, s_2, s_3, …, s_n] S=[s1,s2,s3,…,sn]
权重: W = [ w 1 , w 2 , w 3 , … , w n ] W =[w_1, w_2, w_3, …, w_n] W=[w1,w2,w3,…,wn]
加权平均值:
a = s 1 w 1 + s 2 w 2 + . . . + s n w n w 1 + w 2 + . . . + w n a = \frac{s_1w_1 + s_2w_2 + ... + s_nw_n}{w_1+w_2+...+w_n} a=w1+w2+...+wns1w1+s2w2+...+snwn
求加权平均值的函数
a = numpy.average(数据数组, weights=权重数组, axis=轴)
示例
import numpy
# 一维数据
data = [1, 2, 3]
weight = [10, 5, 1]# 权重
print(numpy.average(data)) # 求所有
print(numpy.average(data, weights=weight)) # 求所有
# 二维数据
data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
weight = [
[10, 10, 10],
[20, 20, 20],
[30, 30, 30],
] # 权重
import numpy
print(numpy.average(data)) # 求所有
print(numpy.average(data, weights=weight)) # 求所有
print(numpy.average(data, axis=0)) # 轴0行(垂直方向),权重默认全为1
print(numpy.average(data, weights=weight, axis=0)) # 轴0行(垂直方向)
print(numpy.average(data, weights=weight, axis=1)) # 轴1行(水平方向)
3. 最值
最值分析即求一组数据的最小值、最大值、极差等数据指标,结合业务进行分析的方法
极差
是指在一组数据中最大值和最小值的差值。
numpy提供了一些求最值的API:
求最大值/最小值/极差
np.max/min/ptp(a, axis=轴) # axis 省略代表所有数据求最大
# 或
a.max/min/ptp(axis=轴) # a 为 ndarray 数组
求最大值索引 / 最小值索引
np.argmax/argmin(a, axis=轴) # axis 省略代表所有数据求最大
# 或
a.argmax/argmin(axis=轴) # a 为 ndarray 数
示例
import numpy as np
data = np.array([
[4, 9, 3],
[1, 5, 6],
[2, 7, 8]
])
print(data)
# 计算 全部最小值:
mymin = data.min()
# 计算 行方向 最小值:
mymin = data.min(axis=0)
# 计算 列方向 最小值:
mymin = data.min(axis=1)
print(mymin)
# 求极差
myptp = data.ptp()
myptp = data.ptp(axis=0)
myptp = data.ptp(axis=1)
myptp = np.ptp(data, axis=1)
print(myptp)
将两个同维数组中对应元素中最大/最小元素构成一个新的数组
np.maximum(a, b)
np.minimum(a, b)
示例
import numpy as np
a = np.array([
[4, 9, 3],
[1, 5, 6],
[2, 7, 8]
])
b = np.array([
[1, 5, 2],
[4, 8, 9],
[3, 7, 6]
])
mymax = np.maximum(a, b)
print(mymax)
pandas提供了一些求最值的API:
求最大值/最小值/极差
Series.max/min()
# 或
DataFrame.max/min(axis=轴)
求最大值索引 / 最小值索引
Series.idxmax/dixmin(axis=轴)
# 或
DataFrame.idxmax/idxmin(axis=轴) # 返回最大值的行标签
4. 中位数
将多个样本按照大小排序,取中间位置的元素。
若样本数量为奇数,中位数为最中间的元素即 3000
# 如下数据中位数为3000
[1, 2000, 3000, 4000, 10000000]
若样本数量为偶数,中位数为最中间的两个元素的平均值
# 如下数据中位数为3500
[1,2000,3000,4000,5000,10000000]
numpy求中位数的API:
numpy.median(a, axis=轴) # 求 数组a 的中位数
pandas求中位数的API:
Series.median(axis=轴)
# 或
DataFrame.median(axis=轴)
示例
import pandas as pd
import numpy as np
# 读取 JSON 文件的内容
data = pd.read_json("ratings.json")
print(data)
# 获取每个人评分的中位数
mymedian = data.median()
# 获取每部电影评分的中位数
mymedian = data.median(axis=1)
print(mymedian)
# 用numpy 获取每个人评分的中位数
arr = data.values # arr 绑定 ndarray 数组
mymedian = np.median(arr, axis=0)
print(mymedian)
day07
5. 频数与众数
频数指一组数据中各离散值出现的次数。
众数是指一组数据中出现次数最多的值。
示例:
import numpy as np
import pandas as pd
# Series 的 value_counts() 方法求频数
data = np.array(['bmw', 'bmw', 'bz', 'audi', 'bz', 'bmw'])
cars = pd.Series(data)
vc = cars.value_counts() # 频数
print(vc)
# Series 的 mode() 方法求众数
mode = cars.mode() # 众数
print(mode)
6 .四分位数
所谓四分位数,即把数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
四分位数的三个位置:
- 第1四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
- 第2四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
- 第3四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
示例:
# 四分位数
import pandas as pd
data = pd.read_json("ratings.json")
print(data)
# 求取 四分位数
myquantile = data.quantile([.0, .25, .5, .75, 1.])
print(myquantile)
7. 标准差
标准差(Standard Deviation) ,中文又常称均方差,在概率统计中最常使用作为统计分布程度上的测量。
标准差能反映一个数据集的离散程度,是方差的算术平方根平均数相同的两组数据,标准差未必相同。
样本(sample):
S = [ s 1 , s 2 , s 3 , . . . , s n ] S = [s_1, s_2, s_3, ..., s_n] S=[s1,s2,s3,...,sn]
平均值:
m = s 1 + s 2 + s 3 + . . . + s n n m = \frac{s_1 + s_2 + s_3 + ... + s_n}{n} m=ns1+s2+s3+...+sn
离差(deviation):表示某组数据距离某个中心点的偏离程度
D = [ d 1 , d 2 , d 3 , . . . , d n ] d i = S i − m D = [d_1, d_2, d_3, ..., d_n]\\ d_i = S_i-m D=[d1,d2,d3,...,dn]di=Si−m
离差方:
Q = [ q 1 , q 2 , q 3 , . . . , q n ] q i = d i 2 Q = [q_1, q_2, q_3, ..., q_n]\\ q_i=d_i^2 Q=[q1,q2,q3,...,qn]qi=di2
总体方差(variance):
v = ( q 1 + q 2 + q 3 + . . . + q n ) n v = \frac{(q_1+q_2+q_3 + ... + q_n)}{n} v=n(q1+q2+q3+...+qn)
总体标准差(standard deviation):
s = v s = \sqrt{v} s=v