嗨~我是小鱼,一个不太厉害混迹编程界的老学姐

今天分享一个超级厉害的模块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模块实现通过中文名字识别性别