嗨~我是小鱼,一个不太厉害混迹编程界的老学姐
今天分享一个超级厉害的模块PyQ5,学过编程的都了解过这个小工具吧?不仅可以生成艺术签名还可以让电脑自己哼唱歌曲。今天我们利用这个pyq5这个小工具和贝叶斯公式来做一个非常有意思且无聊的小项目:利用PyQ5制作一个根据名字来辨别性别。
一、PyQ5简介
这样一个强大的模块PyQt5是由Riverbank Computing开发,绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。Qt库是一套非常棒的GUI库。
PyQt5PyQt5是作为一套Python模块实现的。他已经超过620个类和6000个函数与方法。他是一个运行在所有主流操作系统上的多平台组件,包括Unix,Windows和Mac OS。PyQt5是双重许可的。开发者可以选择GPL和商业许可。
二、PyQt5安装
sudo pip3 install pyqt5
我们可以使用pip3安装PyQt5。
三、PyQt5模块
PyQt5的类被分成了多个模块,包括下面的:
QtCore
QtGui
QtWidgets
QtMultimedia
QtBluetooth
QtNetwork
QtPositioning
Enginio
QtWebSockets
QtWebKit
QtWebKitWidgets
QtXml
QtSvg
QtSql
QtTest
QtCore
PyQt4和PyQt5的不同点:
PyQt5是不对PyQt4向后兼容的;在PyQt5上有很多重大的改变。然而,使旧的编码适应新的库是并不困难的。不同点如下:
Python模块已经被重新组织了。一些模块已经被丢弃了(QtScript),其他的已经被分成子模块了(QtGui,QtWebkit)。新的模块已经被引入了,包括QtBluetooth,QtPositioning或Enginio。
PyQt5仅仅支持新形势的信号和槽处理。SIGNAL()和SLOT()的调用已经不被支持了。
在Qt v5.0中被标注过时的API,在PyQt5中已经不被支持了。
四、项目原理简介
先来简单介绍一下贝叶斯公式吧,然后再来说代码实现。
1、贝叶斯公式
英国数学家贝叶斯 ( Thomas Bayes 1702-1763 ) 发展,用来描述两个条件概率之间的关系,比如 P(A|B) 和 P(B|A)。按照乘法法则:P(A∩B)=P(A)*P(B|A)=P(B)*P(A|B),可以立刻导出。
如上公式也可变形为:P(B|A)=P(A|B)*P(B)/P(A)
例如:一座别墅在过去的 20 年里一共发生过 2 次被盗,别墅的主人有一条狗,狗平均每周晚上叫 3 次,在盗贼入侵时狗叫的概率被估计为 0.9,问题是:在狗叫的时候发生入侵的概率是多少?
我们假设 A 事件为狗在晚上叫,B 为盗贼入侵,则 P(A) = 3 / 7,P(B)=2/(20·365)=2/7300,P(A | B) = 0.9,按照公式很容易得出结果:P(B|A)=0.9*(2/7300)/(3/7)=0.00058
综合上面的结论,贝叶斯公式:
实际应用到我们的姓名猜测性别中的话,其实就是求:
显然,我们有:
2、代码
这里我们已知每个汉字在男性名字和女性名字中出现的频率:
我们可以假设他们是独立的,例如:
def genderprob(name, probs, type_='male'):
assert type_ in ['male', 'female']
if type_ == 'male':
p = self.male_total / self.total
for c in name:
p *= probs.get(c, (0, 0))[0]
else:
p = self.female_total / self.total
for c in name:
p *= probs.get(c, (0, 0))[1]
return p
还是以刘亦菲为例:
P(女性) = 女性姓名出现的次数 / 总出现次数
P(刘|女) = 刘在女性姓名中出现的次数 / 女性姓名出现的总次数
分母在做除法的时候可以约去,所以不用算,即:
male_prob = genderprob(name, self.name_probs, 'male')
female_prob = genderprob(name, self.name_probs, 'female')
result = {'male': male_prob / (male_prob + female_prob), 'female': female_prob / (male_prob + female_prob)}
五、可视化界面
然后利用PyQt5给这个姓名预测性别的小模型做个简单的可视化界面:
源代码私聊获取~
在实操过程中有问题的可以进群咨询,交流群:954526228(注意进群暗号是:小鱼)
里面还有适合小白新手的全套资料给到大家~
快来和小鱼一起成长进步吧!
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
更多推荐
快乐学习!Python趣味练手项目:PyQ5模块实现通过中文名字识别性别
发布评论