43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
import math
|
||
import numpy as np
|
||
from scipy import integrate
|
||
|
||
#历史数据处理
|
||
def handle_data(all_marks=[569,
|
||
570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,
|
||
595,596,597,598,599
|
||
]):#以列表形式传入省份所有考生的成绩[1,2,3]
|
||
a = np.mean(all_marks)#平均值
|
||
sigma = np.std(all_marks)#方差
|
||
print('a=',a,'sigma=',sigma)
|
||
return a,sigma
|
||
|
||
#等效分计算
|
||
def mark(a=584.0,sigma=8.94427190999916,per_mark=600):#a和sigma由上一个函数得出,per_mark为需要转化成等效成绩的高考分数
|
||
re_mark = 100 * ((per_mark - a) / sigma) + 500
|
||
if re_mark > 900:
|
||
re_mark = 900
|
||
elif re_mark < 100:
|
||
re_mark = 100
|
||
return re_mark
|
||
|
||
#录取概率
|
||
def P_get(uni_marks=[580,581,582,583,
|
||
584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599],per_mark=589): #以列表形式学校录取的所有考生的成绩
|
||
per_mark = mark(per_mark=per_mark)
|
||
re_uni_mark = [] #学校录取学生的等效分
|
||
for i in uni_marks:
|
||
re_uni_mark.append(mark(per_mark=i))
|
||
E = np.mean(re_uni_mark) #学校录取考生的等效分平均值即期望
|
||
S = np.std(re_uni_mark)
|
||
D = S ** 2 #样本方差
|
||
def p(x): #录取分数的概率密度函数
|
||
return (1/(D*(2*math.pi)**0.5))*((math.e)**(-((x-E)**2)/(2*D)))
|
||
P,err = integrate.quad(p,100,per_mark)
|
||
P = P*100
|
||
print('录取概率为',P)
|
||
return P
|
||
# num = 570
|
||
# while num < 600:
|
||
# print('分数为',num,'时','录取概率为',P_get(per_mark=num))
|
||
# num += 1 |