《Python数据科学指南》——1.5 使用集合
本节书摘来自异步社区《Python数据科学指南》一书中的第1章,第1.5节,作者[印度] Gopi Subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 使用集合除了不能存在重复值,集合和列表十分相似。集合是无序的同类元素的集合,通常情况下,集合被用来删除列表中的重复值。集合支持交集、并集、差集和对称差等操作,这些操作在许多用例中都十分便于使用。
1.5.1 准备工作在这节中,我们会写一小段代码来帮助理解集合数据结构的不同用途。在这个实例里,我们将使用Jaccard系数来计算两句话的相似度,并对Jaccard系数进行详细的讲述,在后续的章节里,我们还会介绍相似的其他度量方法。先给Jaccard系数来一个简要的介绍:它是介于0到1的数值,1表示高相似度,它的计算方法基于两个集合中存在的共同元素数量。
1.5.2 操作方法让我们来看看创建和维护集合的Python代码。
# 1.初始化两个句子 st_1 = "dogs chase cats" st_2 = "dogs hate cats" # 2.从字符串中创建词的集合 st_1_wrds = set(st_1.split()) st_2_wrds = set(st_2.split()) # 3.找出每个集合中不重复的词总数,即词表大小 no_wrds_st_1 = len(st_1_wrds) no_wrds_st_2 = len(st_2_wrds) # 4.找出两个集合中共有的词,保存到列表中,并统计总数 cmn_wrds = st_1_wrds.intersection(st_2_wrds) no_cmn_wrds = len(st_1_wrds.intersection(st_2_wrds)) # 5.找出两个集合并集中不重复的词,保存到列表中,并统计总数 unq_wrds = st_1_wrds.union(st_2_wrds) no_unq_wrds = len(st_1_wrds.union(st_2_wrds)) # 6.计算Jaccard相似度 similarity = no_cmn_wrds / (1.0 * no_unq_wrds) # 7.打印输出 print "No words in sent_1 = %d"%(no_wrds_st_1) print "Sentence 1 words =", st_1_wrds print "No words in sent_2 = %d"%(no_wrds_st_2) print "Sentence 2 words =", st_2_wrds print "No words in common = %d"%(no_cmn_wrds) print "Common words =", cmn_wrds print "Total unique words = %d"%(no_unq_wrds) print "Unique words=",unq_wrds print "Similarity = No words in common/No unique words, %d/%d \ =%.2f"%(no_cmn_wrds,no_unq_wrds,similarity)1.5.3 工作原理
在第1步和第2步中,我们将两句话切分成多个词,并用set()函数创建了两个集合,set()函数可以将列表或者元组转为集合类型,请看下面的示例。
a =(1,2,1) set(a) set([1, 2]) b =[1,2,1] set(b) set([1, 2])
在这个示例中,a是一个元组,b是一个列表,通过set()函数,重复的元素被丢弃,并返回一个集合对象。st_1.split()和st_2.split()方法返回一个列表,我们将它传递给set函数来获取集合对象。
现在我们用Jaccard系数计算两个句子之间的相似度,并对Jaccard系数进行详细的讲述,在后续的章节里,我们还会在“相似度计算”部分介绍其他的度量方法。我们使用union()和intersection ()函数对集合进行操作来计算相似度。
我们在第4步执行了两个操作,第1个是intersection ()函数,由此我们找出了两个集合中的共有的词分别是“cats”和“dogs”,共有的词数量为2。接下来,我们用union()将两个集合进行并集,然后将不重复的那些词列出来,分别是:“cats”“hate”“dogs”和“chase”。这在自然语言处理中被称为词表。最后,我们在第6步中计算Jaccard系数,即两个集合共有的词数量与两个集合并集中不重复的词总数的比值。
输出的结果如下。
No words in sent_1 = 3 Sentence 1 words = set([cats, dogs, chase]) No words in sent_2 = 3 Sentence 2 words = set([cats, hate, dogs]) No words in common = 2 Common words = set([cats, dogs]) Total unique words = 4 Unique words= set([cats, hate, dogs, chase]) Similarity = No words in common/No unique words, 2/4 = 0.501.5.4 更多内容
我们在上面的实例中演示了集合的函数的用法。此外,你也可以从scikit-learn之类的库中使用内置函数。我们将尽可能多地使用这些函数,而不必自己亲自写那些集合的应用函数。
# 加载库 from sklearn.metrics import jaccard_similarity_score # 1.初始化两个句子 st_1 = "dogs chase cats" st_2 = "dogs hate cats" # 2.从字符串中创建词的集合 st_1_wrds = set(st_1.split()) st_2_wrds = set(st_2.split()) unq_wrds = st_1_wrds.union(st_2_wrds) a =[ 1 if w in st_1_wrds else 0 for w in unq_wrds ] b =[ 1 if w in st_2_wrds else 0 for w in unq_wrds] print a print b print jaccard_similarity_score(a,b)
输出的结果如下。
[1, 0, 1, 1] [1, 1, 1, 0] 0.5
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- 【Python成长之路】python 基础篇 -- 装饰器【华为云分享】
- scrapy笔记——python的时间转换
- Python集合类型详解(一)——集合定义与集合操作符
- Python语言学习:Python语言学习之python包/库package的简介(模块的封装/模块路径搜索/模块导入方法/自定义导入模块实现华氏-摄氏温度转换案例应用)、使用方法、管理工具之详细攻略
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
- 〖Python WEB 自动化测试实战篇③〗- python-selenium环境配置搭建
- 【python】批量高速获取 Instagram,一个简单的外国分享网站
- 【python】遇上COS美图怎么办?当然是大胆冲呀~
- python 网络聊天服务端
- Python自动化脚本:清空回收站的内容
- Python图像处理丨带你认识图像量化处理及局部马赛克特效
- Python编程:shelve模块-持久化python数据
- python基础7--集合
- python基础===如何在列表,字典,集合中根据条件筛选数据
- python中logging模块的一些简单用法
- python函数
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- Python判断字符串中是否是中英文文小技巧
- WSL2-Ubuntu中创建python虚拟环境
- 【Python实战】 ---- python 自带的 venv 虚拟环境更新 pip 失败
- Python地图可视化框架pygal.maps.world/和pyecharts
- 爬虫python request 官网教程