用python求一下平均数,众数,中位数,k百分位数
0.首先设置一下数据
import numpy as np
# 一个 取值0-10 大小为20 的整数数组
a = np.random.randint(0,10,size=(20))
1. 平均数
自己写的:
# 求平均数
def pingjun(a):
return sum(a)/len(a)
自带的方法:
np.mean(a)
a.mean()
2. 中位数
自己写的:
# 求中位数
def zhongwei(a):
b = sorted(a) # 排序
print(b)
if len(a)%2==1:
return b[int(len(a)/2)] # 向下取整
else:
return (b[int(len(a)/2)]+b[int(len(a)/2)-1])/2
自带的方法:
np.median(a)
a.median()
3.众数
自己写的:
# 求众数
# 这里我们就用字典来计算出现次数,也可以直接用set()去除重复元素直接作为字典的数值
def zhongshu(a):
x = {}
for i in a:
if i in x:
x[i] = x[i] + 1
else:
x[i] = 1
b = 0
key2 = 0
for key, value in x.items(): # 遍历字典
if value > b:
b = value
key2 = key
return key2
自带的方法:
# np.bincount(a),返回相对应坐标的出现次数
np.argmax(np.bincount(a))
4. k百分位数
自己写的:
def Kbaifen(a,k):
Nk = a.shape[0]
indices = 1 + (Nk - 1)*k/100.0 # 位置
a = sorted(a) # 排序
return a[int(indices)-1]+(indices - int(indices))*(a[int(indices)]-a[int(indices)-1])
自带的方法:
np.percentile(X,k,interpolation='linear') # 直接返回数值
5. 整体代码
import numpy as np
# 求平均值
def pingjun(a):
return sum(a)/len(a)
# 求中位数
def zhongwei(a):
b = sorted(a) # 排序
print(b)
if len(a)%2==1:
return b[int(len(a)/2)] # 向下取整
else:
return (b[int(len(a)/2)]+b[int(len(a)/2)-1])/2
# 求众数(可能有多个,这里随机返回一个)
# 这里我们就用字典来计算出现次数,也可以直接用set()去除重复元素直接作为字典的数值
def zhongshu(a):
x = {}
for i in a:
if i in x:
x[i] = x[i] + 1
else:
x[i] = 1
b = 0
key2 = 0
for key, value in x.items(): # 遍历字典
if value > b:
b = value
key2 = key
return key2
# 求k百分位数
def Kbaifen(a,k):
Nk = a.shape[0]
indices = 1 + (Nk - 1)*k/100.0 # 位置
a = sorted(a)
return a[int(indices)-1]+(indices - int(indices))*(a[int(indices)]-a[int(indices)-1])
a = np.random.randint(0,10,size=(20))
print(a)
print("平均数==================")
print(pingjun(a))
print(a.mean()) # 自带方法
print(np.mean(a))
print("中位数==================")
print(zhongwei(a))
print(np.median(a)) # 自带方法
print("众数===================")
print(zhongshu(a))
print(np.argmax(np.bincount(a))) # np.bincount(a),返回相对应坐标的出现次数
print("k百分位数===============")
print(Kbaifen(a,25))
print(np.percentile(a,25,interpolation='linear')) # 自带方法
结果:
[2 9 2 6 2 0 3 5 1 4 6 3 0 7 4 0 3 6 5 8]
平均数==================
3.8
3.8
3.8
中位数==================
[0, 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9]
3.5
3.5
众数===================
2
0
k百分位数===============
2.0
2.0
请多多关注我!!!谢谢!!!