python 用 pandas通过样本计算出均值和方差,得到正态分布的密度函数

**

python 用 pandas通过样本计算出均值和方差,得到正态分布的密度函数

**
求:P(add)*P(add|key)*p(add|key.min>=1)
import pandas as pd
import math

data=[]
with open(r’D:\666.txt’,‘r’)as f:

for each_line in f:
    (key,add,min,max)=each_line.split()
    data.append((key,add,min,max))

df=pd.DataFrame(data,columns=[‘key’,‘add’,‘min’,‘max’])
#计算类别的先验概率
pc=df[‘add’].value_counts()/df[‘add’].size
#value_counts()计算取这个地址的数目
#df[‘add’].size计算地址所在这一列的所有数目

#计算每个特征属性条件概率
pa1=pd.crosstab(df[‘add’], df[‘key’], margins=True).apply(lambda x:x/x[-1], axis=1)
#pd.crosstab(df[‘add’], df[‘key’], margins=True)计算该地址数下工作类型数目,margins=True计算总数
#x[-1]每组最后一个数 拿所有的数除最后一个数

pb1=pc[‘北京’]
ps1=pc[‘上海’]
pg1=pc[‘广州’]
psz1=pc[‘深圳’]

pb2=pa1[‘java’][‘北京’]
ps2=pa1[‘java’][‘上海’]
pg2=pa1[‘java’][‘广州’]
psz2=pa1[‘java’][‘深圳’]
###########min的计算(连续)
#u均值
#w方差
#df2=df.groupby(“add”).agg([np.mean,np.var])
#分别计算该地址下最小值和最大值的均值和方差

def u(add):
u_w=df[df[‘add’]==add]
u_w1=u_w[u_w[‘min’].astype(float)>=0]
return u_w1[‘min’].astype(float).mean()

def w(add):
u_w=df[df[‘add’]==add]
u_w1=u_w[u_w[‘min’].astype(float)>=0]
return u_w1[‘min’].astype(float).var()

ub=u(“北京”)
wb=w(“北京”)
us=u(“上海”)
ws=w(“上海”)
ug=u(“广州”)
wg=w(“广州”)
usz=u(“深圳”)
wsz=w(“深圳”)
#求密度函数
#x?
def f(mean,var):
return math.e**(-(1-mean)**2/(2var))/math.sqrt(2math.pi*var)

pb3=f(ub,wb)
ps3=f(us,ws)
pg3=f(ug,wg)
psz3=f(usz,wsz)

print(ub)
print(wb)
print(“p(北京|java.min>=1)=%f”%(pb1pb2pb3))
print(“p(上海|java.min>=1)=%f”%(ps1ps2ps3))
print(“p(广州|java.min>=1)=%f”%(pg1pg2pg3))
print(“p(深圳|java.min>=1)=%f”%(psz1psz2psz3))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值