大家好,欢迎来到IT知识分享网。
七、数值型数据统计
数值型数据描述统计概论
数据分析思想中重要的一环就是统计学分析,这涉及到常见统计学指标的运用及分析,需要数据分析师掌握相关统计学知识。
常见指标主要有:
- 算数平均值
- 加权平均值
- 最值、中位数
- 频数、众数
- 四分位数
- 方差、标准差
- …
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, ]
若样本数量为偶数,中位数为最中间的两个元素的平均值
# 如下数据中位数为3500 [1,2000,3000,4000,5000,]
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)
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 numpy as np L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] L2 = [1, 2, 3, 10, 100, 101, 102, 103] n1 = np.quantile(L1, [0.25, 0.5, 0.75]) print(n1) # [3. 5. 7.] n2 = np.quantile(L2, q=[0.25, 0.5, 0.75]
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141035.html