从51找工作网上爬去数据存储在51.txt中,分为4列,分别为职业,地址,工资最大值和工资最小值。计算: p(北京|java,min=1w)=p(北京)p(java|北京)p(min=1w|北京)
目的:
分别求出p(北京),p(java|北京),p(min=1w|北京) 这三个的概率

条件
问题一:找不到python
1.进入cmd命令
2.查看python安装路径:where python
(此方法通用)
问题二:怎么配置pandas
1.进入cmd命令
2.输入:pip install pandas
3.验证是否配置完成:
(1)在cmd下输入:python
(2)输入:import pandas,没有报错则完成
补充:numpy同理
错误记录:
先进入python,再配置pandas会出现错误为
File “”, line 1

SyntaxError: invalid syntax

代码

import pandas as pd
df = pd.read_csv(‘51.txt’, sep=’\t’)

#计算类别的先验概率, p(北京)
pc = df[‘addr’].value_counts() / df[‘addr’].size

#计算每个特征属性条件概率 ,p(java|北京)
pa = pd.crosstab(df[‘addr’], df[‘key’], margins=True).apply(lambda x:x/x[-1], axis=1)

#通过样本计算出均值和方差,也就是得到正态分布的密度函数,有了密度函数,就可以把值带入,算出某一点的密度函数的值。
import numpy as np
df2 = df.groupby(‘addr’).agg([np.mean, np.var])
df2[‘x’] = 1

from math import pi, exp, sqrt
def f(x, mean, var):
return exp(-(x-mean)**2/(2var))/sqrt(2pi*var)

df2[‘p_x_min’]=df2[[‘min’,‘x’]].apply(lambda x: f(x[‘x’], x[‘min’][‘mean’], x[‘min’][‘var’]), axis=1)
df2[‘p_x_max’]=df2[[‘max’,‘x’]].apply(lambda x: f(x[‘x’], x[‘max’][‘mean’], x[‘max’][‘var’]), axis=1)

(df2[‘p_x_min’]pcpa[‘java’]).argmax()
#这个地方会报错,所以把argmax()函数去掉就好了

from numpy import genfromtxt
#输出最大和最小值
x = genfromtxt(‘51.txt’, delimiter=’\t’, skip_header=True, usecols=(2,3))
x.shape
#输出地址
#乱码y = genfromtxt(‘51.txt’, delimiter=’\t’, skip_header=True, usecols=(1), dtype=str)
y=np.loadtxt(open(‘51.txt’, encording=‘utf8’),delimiter=’\t’, skiprows=True, usecols=(1), dtype=str)
y.shape
import numpy as np
np.unique(y)
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
#拟合数据
clf.fit(x, y)
print(clf.predict([[0.8, 1.2]]))
print(clf.predict_proba([[0.8, 1.2]]))
print(clf.predict_log_proba([[0.8, 1.2]]))
补充
1.pa = pd.crosstab(df[‘addr’], df[‘key’], margins=True).apply(lambda x:x/x[-1], axis=1)
apply函数是pandas里面所有函数中自由度最高的函数。
该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。
axis=1:概率横着相加为1
axis=0:概率竖着相加为0

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐