UID569
现金0
在线时间0 小时
注册时间2018-1-31
黑狼菜鸟
- 积分
- 0
|
“社会科学中的数据可视化”第406篇推送
笔墨云 (tag cloud) 是一种关键词的视觉化体现方式,它经常被用来汇总形貌一篇文章中多次出现的笔墨信息。依据关键词的差别词频,我们可以赋予该词差别的字体巨细或颜色,因此笔墨云可以机动地依照该权重来刻画出整篇文章的内容重点地点。本次推送将先容怎样利用Python绘制出笔墨云。
获取文本
我们利用英语维基百科中的Python条目 (http://en.wikipedia.org/wiki/Python_(programming_language)) 作为文原来源,读者可以利用urllib库直接抓取网页上的笔墨内容;大概点击阅读原文,下载已经整理成txt格式的文本内容。下文将接纳第二种方式举行演示。
>>> with open('text.txt',encoding = 'utf-8') as f:... text_ori = f.read()...在我们的操纵中,text.txt文件就位于Python的运行目次下。假如text.txt文件在盘算机的别处,读者可以直接利用绝对路径来访问text.txt文件,即把上面代码的'text.txt'更换为文件的绝对路径。别的,保举利用with open as语句举行文件读取,如许的做法更加妥当。直接接纳open方式打开文件,大概会忘记关闭文件导致错误。
将笔墨整理成单词列表
我们先把文本中的空行删除,将每一非空段落生存在para列表中:
>>> text_new = text_ori.split('\n')>>> para = [i for i in text_new if i != '']接着我们使用正则表达式,将上面的para中的单词切出,天生一个新的列表:
>>> import re #导入正则表达式库>>> pattern = re.compile(r'(C\+\+)|([A-Za-z]+)') #匹配规则为:该段字符内容为C++或该段字符全部都由字母构成>>> words = [] #创建空列表,用来储存接下来匹配到的单词>>> for i in para: #遍历para中的每一行... word = re.findall(pattern,i) #举行匹配... for j in word: #遍历匹配出的效果列表... for k in j: #遍历效果列表中元组... if k != '': #假如元组中的元素不为空字符串... words.append(k) #就将该段字符认作为单词,参加words列表中...把列表中的一些助动词、冠词、系动词、介词等无实意的单词删除
>>> delete = ['a','in','if','through','an','the','on','from','above','for','behind','of','and','to','am','is','are','it','as','be','than','rather','or','that','has','have','by','such','do','any','all','many']>>> words_new = [i.lower() for i in words if i.lower() not in delete]我们在这里仅给出一个非常大略的虚词列表delete,读者可以根据本身必要举行增减。
统计词频
下面我们创建一个字典,其键为单词,键值为该单词出现的次数
>>> from collections import Counter #调用Python内置的collections模块中的Counter>>> counts = Counter(words_new).items() #运用Counter举行词频统计,生存为counts>>> counts_new = {word[0]:word[1] for word in counts if word[1]>5} #删除词频小于5的单词天生笔墨云
>>> from pytagcloud import create_tag_image, make_tags #导入天生笔墨云所需的库>>> from pytagcloud.lang.counter import get_tag_counts>>> tags = make_tags(counts_new.items(), maxsize=150) #将刚刚得到的词频代入,天生标签,设置标具名号的上限为150
>>> create_tag_image(tags, 'cloud.png', size=(900, 600), fontname='Lobster') #天生cloud.png,巨细为900*600,笔墨字体为Lobster
大概出现的错误及办理方式
- ModuleNotFoundError 未能找到相应模块
读者必要安装相应库才气举行笔墨云天生的操纵,本次推送用到的库包罗pygame、simplejson、pytagcloud。以pygame为例,Windows体系可以在cmd中使用pip3举行安装:
> pip3 install pygameOS X和Linux安装方式大抵雷同,这里不再赘述
- AttributeError: ‘dict’ object has no attribute ‘iteritems’ 属性错误
由于pytagcloud是基于Python 2.x创建的,内里的一些函数在Python 3.x中已被修改或删除,因此利用Python 3.x的用户在利用该库时会抛堕落误。读者可以在别的路径中安装Python 2.x版本,并设置相应的体系情况变量以办理该题目。
下面我们给出一种兼容Python 3.x的办理方案:
打开Python安装目次下的…\Lib\site-packages\pytagcloud\lang\counter.py。我们发现该py文件的末了一行用到了Python 2.x的iteritems()方法,该函数在Python 3.x中已被items()所替换,因此我们把
return sorted(counted.iteritems(), key=itemgetter(1), reverse=True)修改为
return sorted(counted.items(), key=itemgetter(1), reverse=True)即可办理题目
- 中文笔墨表现题目
由于pytagcloud并没有自带中笔墨体,以是假如要制作中文的笔墨云,必要导入额外的支持中文的ttf字体。详细方法如下:
- 打开…\Lib\site-packages\pytagcloud\fonts,将中笔墨体粘贴进去
- 找到同一目次下的fonts.json文件,以记事本方式打开,在文件末了的右方括号]之前新增
{
"name": "#此处填入字体名称",
"ttf": "#此处填入字体文件名,包罗文件拓展名",
"web": "none"
}
- 单词差别情势导致词频统计错误
同一个单词,如language,可以单数或复数情势出如今文中,而这两种情势理应被统计在一起,而非分别当做两个无关单词统计。雷同题目另有第三人称单数、已往式、已往分词、涉及’s的全部格等,这些题目本次推送的代码均没有办理,读者可以利用enchant及NLTK等库对单词举行判定,办理这些题目。
别的,部门代词并非虚词,有明白的指代对象,本次推送的算法大概漏算了这一部门的词频。一些天然语言处置惩罚的方法大概能资助办理这一题目,由于详细操纵方法过于复杂,感爱好的读者可以参考http://www.nltk.org/。
注:操纵平台为Python 3.6.3点击“阅读原文”获取上述操纵所用到的文本广受接待的微信公共账号“社会科学中的数据可视化”每周推送ArcGIS、Python、R、Stata等软件在社会科学各范畴中的运用实例及教程。本帐号由复旦大学经济学院陈硕传授及其团队负责。接待媒体及学界与我们睁开内容互助,接洽邮箱[email protected]。检察从前推送:点“社会科学中的数据可视化”并选择“检察汗青消息”。征采帐号: SKSJKSH)或扫描二维码如下:
|
上一篇:Python教程:字符串下一篇:Python从入门到醒目全套视频教程、70+经典课本打包送!数据科学/呆板学习必 ...
|