-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
詞云圖總結(jié)(詞云圖分析)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于詞云圖總結(jié)的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來(lái)看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、如何生成詞云圖——兔牙詞云
作為一名從業(yè)多年的數(shù)據(jù)分析師,我常常需要使用詞云圖來(lái)展示我的分析結(jié)果,因此我一直在尋找一款好用的詞云圖生成工具,之前用過好幾個(gè),要么是自定義功能太少,要么不支持中文,要么不夠?qū)I(yè),真正能用的基本可以說沒有。最近總算找到一款不錯(cuò)的工具,是IOS平臺(tái)的APP,名叫【兔牙詞云】,是我用過的最好用最專業(yè)的的詞云圖工具,沒有之一,特來(lái)推薦并記錄一下。如果需要,App Store搜索 “兔牙詞云” 即可。
首先來(lái)看一下【兔牙詞云】的強(qiáng)大功能:
1.根據(jù)單詞或者短語(yǔ)生成詞云圖,這也是大多數(shù)其他詞云生成工具的功能,不足為奇。
2.從文章提取內(nèi)容,首先兔牙詞云會(huì)對(duì)文章進(jìn)行分詞,計(jì)算詞頻之后生成詞云圖,這個(gè)功能就很專業(yè)了,對(duì)于我們這些數(shù)據(jù)分析師太有用了。
3.從網(wǎng)頁(yè)提取內(nèi)容,只要輸入網(wǎng)址,兔牙詞云APP會(huì)自動(dòng)分析網(wǎng)頁(yè)內(nèi)容,提取有用文字,分詞后計(jì)算詞頻生成詞云圖,這個(gè)功能十分專業(yè),對(duì)于分析公眾號(hào)文章、新聞、微博等都十分有用。
4.有很多自定義的設(shè)置,可以根據(jù)自己的需要選擇字體、形狀、背景顏色、字體顏色、詞語(yǔ)大小、詞語(yǔ)密度等。
5.生成的詞云圖可以保存到本地相冊(cè),也可以通過社交APP分享給好友,我們項(xiàng)目組里互相分享很方便。
兔牙詞云有豐富的自定義選項(xiàng),可以個(gè)性化詞云圖,但是,最為吸引我的,還是它專業(yè)的功能,尤其它可以對(duì)文本內(nèi)容分詞之后,計(jì)算詞頻,根據(jù)詞頻結(jié)果生成詞云圖,這個(gè)功能算是比較特有的,而且通過我們項(xiàng)目組的測(cè)試,兔牙詞云的分詞功能可以自動(dòng)發(fā)現(xiàn)新詞,例如:我們項(xiàng)目組在做近年選秀節(jié)目的分析的時(shí)候,兔牙詞云可以自動(dòng)發(fā)現(xiàn)新詞 “青你” ,因?yàn)樽罱肚啻河心?》這檔選秀節(jié)目比較火;還有在做奶茶相關(guān)的市場(chǎng)調(diào)研的時(shí)候,兔牙詞云可以自動(dòng)分解出一些奶茶產(chǎn)品名。這對(duì)于我們數(shù)據(jù)分析人員做輿情分析和市場(chǎng)調(diào)研的時(shí)候太有幫助了。
另外,兔牙詞云在一次更新之后,會(huì)自動(dòng)過濾無(wú)意義的詞,這對(duì)于精準(zhǔn)化研究意義重大。
如果要讓我評(píng)價(jià)【兔牙詞云】這個(gè)APP的話,那就是兩個(gè)詞:好用!專業(yè)!
由于項(xiàng)目保密需要,我不便貼出我們項(xiàng)目組使用【兔牙詞云】生成的詞云圖,我就厚著臉皮盜取一下官方截圖吧,大家可以看一下其生成效果:
二、如何生成關(guān)鍵詞云圖?
可以利用一個(gè)在線的制作工具,地址是 http://www.tagxedo.com/app.html.打開這個(gè)網(wǎng)站以后,如果你的瀏覽器沒有 Sliverlight 它會(huì)提示你安裝,那么就安裝一下.默認(rèn)就可以看到一個(gè)詞云圖,Tagxedo 就是做這個(gè)的.Color,Theme 都是可以選擇和調(diào)整的.但是最重要的是 Shape 形狀,你可以選擇里面自帶的字體,地圖,蘋果或者飛機(jī)等等,也可以點(diǎn)擊下方的 Add Image 把自己需要的圖片放上去編輯.默認(rèn)的效果就已經(jīng)出來(lái)了,但是里面的文字哪里來(lái)?點(diǎn)擊 Load 里面有兩個(gè)選擇,一個(gè)是輸入一個(gè)鏈接,它會(huì)自動(dòng)加載該地址中的網(wǎng)頁(yè)然后自動(dòng)做分類統(tǒng)計(jì);第二個(gè)是可以自己輸入拷貝一段文字,它根據(jù)輸入的文字做分類統(tǒng)計(jì).最后點(diǎn)擊不需要的關(guān)鍵字就可以了.
三、詞云圖中的虛詞怎么刪除
論文中的插圖在一定程度上影響著評(píng)審人對(duì)于論文質(zhì)量的評(píng)價(jià),并且人文社科類論文通常需要進(jìn)行大量文字分析,詞云圖可以通過高亮或放大詞頻數(shù)較高的關(guān)鍵詞,來(lái)突出顯示所選文字材料中的重點(diǎn)。本文以指定搜索詞的百度結(jié)果頁(yè)為例,制作一張?jiān)~云圖。
1.導(dǎo)入庫(kù)
import requests,lxml
from bs4 import BeautifulSoup
import csv,jieba,wordcloud,paddle
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
這里用到的庫(kù)主要分為三個(gè)部分:
1. 對(duì)百度結(jié)果進(jìn)行爬蟲操作,主要用到 requests、lxml、BeautifulSoup
2.對(duì)爬蟲結(jié)果進(jìn)行分詞,主要用到 csv、jieba、paddle
3.對(duì)分詞結(jié)果進(jìn)行詞云繪制,主要用到 wordcloud、numpy、matplotlib、PIL
如果不確定自己設(shè)備里是否有上述的庫(kù)文件,可以在命令行中執(zhí)行安裝操作,有的話會(huì)提示已安裝,沒有的話會(huì)自動(dòng)安裝:
pip install 目標(biāo)庫(kù)
2.網(wǎng)址處理
本文用到的搜索信息是“基層治理”和“兩鄰理論”,在網(wǎng)址處理環(huán)節(jié),需要先構(gòu)建出每一頁(yè)的鏈接:
base_url = " https://www.baidu.com/s?tn=news&ie=utf-8&word=兩鄰+\"基層\"&pn="
urls = [base_url+str(i) for i in range(0,291,10)]
print(urls)
out:
[' https://www.baidu.com/s?tn=news&ie=utf-8&word=%E4%B8%A4%E9%82%BB+%22%E5%9F%BA%E5%B1%82%22&pn=0'
...
' https://www.baidu.com/s?tn=news&ie=utf-8&word=%E4%B8%A4%E9%82%BB+%22%E5%9F%BA%E5%B1%82%22&pn=290']
首先是構(gòu)建一個(gè) base_url,tn 參數(shù)設(shè)置為 news 代表“資訊”欄目,word 代表搜索詞,pn 參數(shù)代表頁(yè)數(shù),但是并不能直接序列設(shè)置。通過網(wǎng)址觀察可以發(fā)現(xiàn),第一頁(yè)的 pn 為 0,第二頁(yè)的 pn 為 10,所以通過range函數(shù)構(gòu)造一個(gè)序列,從 0 開始,步長(zhǎng)為 10,總共爬取 30 頁(yè)。
3.文章網(wǎng)址匯總
因?yàn)榫W(wǎng)址數(shù)量并不大,所以直接以字典加列表的方式存儲(chǔ):
results =[]
for url in urls:
res = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'})
soup = BeautifulSoup(res.text,'lxml')
for i in soup.find_all("h4"):
try:
result = {
"title":i.a["aria-label"][3:],
"url":i.a["href"]
}
results.append(result)
print(result)
except:
print(url)
out:
{'title': '沈陽(yáng)市和平區(qū):以“百千萬(wàn)”黨員志愿服務(wù)踐行“兩鄰”理念_綜合...', 'url': 'https://lszhdj.lndj.gov.cn/portaluploads/html/site-5/info/42600.html'}
{'title': '渾南區(qū)五三街道召開“兩鄰學(xué)堂”啟動(dòng)儀式 暨“奮斗者..._手機(jī)網(wǎng)易網(wǎng)', 'url': 'https://3g.163.com/local/article/HDAIO22104229BRM.html'}
....
{'title': '【兩鄰生活】黨建引領(lǐng) 錨定難點(diǎn) 沈北新區(qū)散體樓合圍治理破“四難...', 'url': 'http://society.sohu.com/a/547395443_121123868'}
{'title': '“兩鄰”理念推動(dòng)基層治理 鐵西區(qū)物業(yè)管理實(shí)現(xiàn)新突破(一):黨建...', 'url': 'http://liaomedia.net/index.php?m=Index&c=Content&a=index&cid=51&aid=2785'}
第一步主要使用 requests 庫(kù)的 get 方法,獲取網(wǎng)頁(yè)內(nèi)容,然后通過 BeautifulSoup 的網(wǎng)頁(yè)解析功能,將網(wǎng)頁(yè)以 lxml 形式格式化,以方便網(wǎng)頁(yè)子節(jié)點(diǎn)的獲取。
第二步主要是在網(wǎng)頁(yè)中獲取文章網(wǎng)址,通過網(wǎng)頁(yè)源代碼信息可以發(fā)現(xiàn),文章鏈接在 h4 標(biāo)簽下,所以可以通過 find_all 方法獲取所有 h4 節(jié)點(diǎn),然后通過 for 循環(huán),讀取每個(gè) h4 標(biāo)簽中的信息并處理。
<h4 class="news-title_1YtI1 ">
<a href="https://www.sohu.com/a/551186753_121123868"
aria-label="標(biāo)題:【兩鄰生活】道義街道:“暖心三部曲”奏響“為民服務(wù)主旋律...">
道義街道:“暖心三部曲”奏響“為民服務(wù)主旋律...
</a>
</h4>
觀察 h4 標(biāo)簽下的 a 標(biāo)簽,新聞標(biāo)題存在于 aria-label 標(biāo)簽下,新聞鏈接存在于 href 標(biāo)簽下,所以在 result 字典里,直接讀取 a 標(biāo)簽下的上述兩個(gè)屬性即可。
第三步把存有每條新聞的 result 字典放進(jìn) results 列表中即可。
4.確定每個(gè)網(wǎng)站的新聞數(shù)量
首先需要確定鏈接中的網(wǎng)站:
websites=[]
for i in results:
websites.append(i["url"].split('/')[2])
對(duì)鏈接進(jìn)行分詞,網(wǎng)址結(jié)構(gòu)為 https://www.x.x/x ,以 “/” 為分詞,第三個(gè)元素為主網(wǎng)址,python 列表從 0 開始,所以第三個(gè)元素的序列為 2。將每篇文章的主網(wǎng)址放進(jìn) websites 列表中。
from collections import Counter
counter = Counter(websites)
print(counter)
out:
Counter({'baijiahao.baidu.com': 40, 'mp.weixin.qq.com': 40, 'www.sohu.com': 22,
'weibo.com': 15, 'view.inews.qq.com': 15, 'news.syd.com.cn': 14, 'www.lndj.gov.cn': 10, '3g.163.com': 10, 'new.qq.com': 8, 'lszhdj.lndj.gov.cn': 8, 'xw.qq.com': 7, 'finance.sina.com.cn': 5, 'www.fx361.com': 4, 'www.meipian.cn': 4, 'liaoning.news.163.com': 4, 'www.shenyang.gov.cn': 4, 'www.163.com': 4, 'k.sina.com.cn': 3, 'society.sohu.com': 3, 'www.ln.chinanews.com.cn': 3, 'liaoning.nen.com.cn': 3, 'liaomedia.net': 2, 'finance.sina.cn': 2, 'neunews.neu.edu.cn': 2, 'mzj.shenyang.gov.cn': 2, 'ln.people.com.cn': 2, 'www.doc88.com': 2, 'cpu.baidu.com': 2, 'www.mca.gov.cn': 1, 'djyj.12371.cn': 1, 'rmh.pdnews.cn': 1, 'www.rmlt.com.cn': 1, 'heping.nen.com.cn': 1, 'www.syyh.gov.cn': 1, 'www.qlwb.com.cn': 1, 'card.weibo.com': 1, 'www.renrendoc.com': 1, 'wap.eastmoney.com': 1, 'gov.sohu.com': 1, 'www.xhzaixian.cn': 1, 'app.myzaker.com': 1, 'www.sinatec.ln.cn': 1, 'www.hunnan.gov.cn': 1, 'www.12371.cn': 1, 'ex.chinadaily.com.cn': 1, 'news.lnd.com.cn': 1, 'www.xyshjj.cn': 1, 'mini.eastday.com': 1, 'k.sina.cn': 1, 'www.360doc.com': 1, 'www.lnminjin.gov.cn': 1, 'news.sohu.com': 1, 'www.zhangqiaokeyan.com': 1, 'www.spp.gov.cn': 1, 'www.chinanews.com': 1, 'cj.sina.cn': 1, 'm.chinanews.com': 1, 'news.cnhubei.com': 1, 'shenyang.creb.com.cn': 1, 'zhuanlan.zhihu.com': 1, 'xysy.shenyang.gov.cn': 1, 'finance.nen.com.cn': 1, 'dy.163.com': 1, 'ln.cri.cn': 1, 'www.chinanews.com.cn': 1})
然后對(duì)網(wǎng)站進(jìn)行計(jì)數(shù),這里用到的是 Counter,可以直接將列表中的元素分組計(jì)數(shù)。可以發(fā)現(xiàn)新聞數(shù)量最多的網(wǎng)站分別是“百度百家號(hào)”、“微信公眾號(hào)”、“搜狐新聞”、“微博”,這里選用前三個(gè)網(wǎng)站,具體實(shí)踐過程可以根據(jù)不同網(wǎng)站的新聞數(shù)量占比酌情選擇。
5.為每個(gè)網(wǎng)站編寫規(guī)則
def get_website_info(url):
result = []
p =[]
Aresult = []
website=url.split('/')[2]
target_web = ['baijiahao.baidu.com','new.qq.com','mp.weixin.qq.com','news.sohu.com','www.sohu.com']
try:
if website in target_web:
res = requests.get(url,headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.70'})
soup = BeautifulSoup(res.text,'lxml')
if website == "baijiahao.baidu.com":
p = soup.find_all("p")
elif website == "new.qq.com":
p = soup.find_all(class_="one-p")
elif website == "mp.weixin.qq.com":
p = soup.find("div", {"id": "js_content"})
elif website == "news.sohu.com" or "www.sohu.com":
p = soup.find_all("article",class_="article")
for i in p:
if i.text != "":
result.append(i.text)
Aresult = "".join(result)
except:
return result
return Aresult
由于抓取的內(nèi)容是文字信息,且所在的網(wǎng)站無(wú)明顯反爬策略,所以只需要找出文章所在的位置即可,方法跟第三小節(jié)中的一樣,只需要找出相關(guān)的 html 標(biāo)簽即可。
百家號(hào)的文章存在于p標(biāo)簽內(nèi);騰訊新聞的文章存在于 class 為 one-p 的 p 標(biāo)簽內(nèi);微信公眾號(hào)的文章存在于 id 為 js_content 的 div 標(biāo)簽內(nèi);搜狐有兩個(gè)相關(guān)的網(wǎng)站,但是網(wǎng)頁(yè)結(jié)構(gòu)都是一樣的,文章存在于 class 為 article 的 p 標(biāo)簽內(nèi)。
此處只指定了數(shù)量排名靠前的網(wǎng)站的抓取策略,其余的網(wǎng)站會(huì)自動(dòng)過濾并返回空信息。
6.將所有文章寫入 csv 文件中
countt = 0
with open("webinfo.csv","w",newline="",encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["title","url","content"])
for i in results:
c = get_website_info(i["url"])
time.sleep(2)
if c != "":
content = c
w = {
"title":i["title"],
"url":i["url"],
"content":c
}
writer.writerow([w["title"],w["url"],w["content"]])
countt += 1
if countt % 10 == 0:
print("已完成{}條".format(countt))
f.close()
out:
'已完成10條'
'已完成20條'
'已完成30條'
....
'已完成270條'
這一步是為了把文章內(nèi)容保存在文件中,避免下一步繪制詞云時(shí)操作不當(dāng)丟失變量信息。
countt 變量是用來(lái)計(jì)算已經(jīng)寫入了多少條文章,每寫入一條就 +1。寫入 csv 文件時(shí),用的 csv.writer,以及 writer.writerow,前者是用來(lái)生成一個(gè)可寫入對(duì)象,后者可以將數(shù)據(jù)按行寫入文件。
在寫入數(shù)據(jù)時(shí),先把標(biāo)題、鏈接和新聞內(nèi)容合并成字典,然后以字典的形式按行寫入,這樣就能把整體的新聞數(shù)據(jù)以符合數(shù)據(jù)表的形式存儲(chǔ),如果后續(xù)對(duì)此數(shù)據(jù)表有可視化操作或者其他自定義操作的話,會(huì)更加的方便。
當(dāng)然也可以直接把所有新聞按順序?qū)懭?,不按照這種結(jié)構(gòu)化的數(shù)據(jù)處理,即:
countt = 0
with open("webinfo.csv","w",newline="",encoding="utf-8-sig") as f:
writer = csv.writer(f)
# writer.writerow(["title","url","content"])
for i in results:
c = get_website_info(i["url"])
time.sleep(2)
if c != "":
# content = c
# w = {
# "title":i["title"],
# "url":i["url"],
# "content":c
# }
# writer.writerow([w["title"],w["url"],w["content"]])
writer.writerow(c)
countt += 1
if countt % 10 == 0:
print("已完成{}條".format(countt))
f.close()
其中 # 代表注釋,即運(yùn)行時(shí)不執(zhí)行此行代碼。
寫入數(shù)據(jù)時(shí),open 方法里的 w 參數(shù)指的是寫入,純寫入,即打開文件后,不管文件里之前有沒有數(shù)據(jù),都會(huì)從 0 開始寫入數(shù)據(jù)。這里因?yàn)橹粚懭胍淮?,所以用?w 模式,如果需要多次寫入,可以用 a,即“追加寫入”模式。
中間的 time.sleep(2) 指的是在此處暫停 2 秒,因?yàn)槌绦蜻\(yùn)行速度很快,get_website_info 方法的用途是爬取網(wǎng)頁(yè)內(nèi)容,如果中間不進(jìn)行停止的話很容易會(huì)被網(wǎng)站判定為爬蟲程序,進(jìn)而阻止數(shù)據(jù)獲取,所以需要在每爬完一個(gè)網(wǎng)站后暫停 2 秒,這個(gè)時(shí)間和位置可以根據(jù)實(shí)際情況自己調(diào)整。
7.分詞處理
#讀取 webinfo.csv
p_list = []
with open("webinfo.csv","r",encoding="utf-8-sig") as f:
reader = csv.reader(f)
for i in reader:
if i[0] == "title":
continue
else:
p_list.append(i[2])
f.close()
#將文章分詞
p_list_2 = []
paddle.enable_static()
jieba.enable_paddle()
for i in p_list:
seg_list = jieba.cut(i, cut_all=False)#精確模式,即盡可能保留名詞
p_list_2.append(" ".join(seg_list))
#讀取停用詞并刪除
with open("baidu_stopwords.txt","r",encoding="utf-8-sig") as stopwords:
stop_words = [i.strip() for i in stopwords.readlines()]
data_1 = ''
for i in p_list_2:
for j in i:
if j not in stop_words:
data_1 += j
首先需要讀取上一小節(jié)的 csv 文件,在 open 方法中,之前寫入時(shí)用的是 w,這里需要用到 r,即 read。由于上一節(jié)在寫入文件時(shí)候,是結(jié)構(gòu)化寫入,所以在讀取的時(shí)候,也需要層層讀取。第一步用 csv.reader 生成一個(gè)可讀取的對(duì)象,第二步開始讀取上述 csv 文件,先省略第一行,從第二行開始讀取,因?yàn)槊恳恍械慕Y(jié)構(gòu)都是標(biāo)題、網(wǎng)址、文章內(nèi)容,所以讀的時(shí)候只需要讀每一行的第 3 個(gè)元素就行了。然后把所有文章添加到一個(gè)列表中。
然后需要對(duì)所有文章進(jìn)行分詞,用到的是 jieba 庫(kù),在用 jieba 庫(kù)之前,需要開啟 paddle,即 paddle.enable_static(),然后在 jieba 中啟用 paddle。分詞時(shí)的主要操作,就是把一段文本分割成單個(gè)的詞匯,即 jieba.cut,然后把分詞后的內(nèi)容匯總在一起,這里都匯總在了 p_list_2 里,查看一下 p_list_2 的內(nèi)容就能發(fā)現(xiàn)分詞結(jié)果了。
[in ] print(p_list_2)
[out]
['社會(huì) 治理 是 在 執(zhí)政黨 領(lǐng)導(dǎo) 下 由 政府 組織 主導(dǎo) 、 吸納 社會(huì) 組織 等 多方面 治理 主體 參與 、 對(duì) 社會(huì) 公共事務(wù) 進(jìn)行 的 治理 活動(dòng) , 是 黨 在 治國(guó) 理政 理念 升華 后 對(duì) 社會(huì) 建設(shè) 提出 的 基本 要求 。 '
....
'強(qiáng)調(diào) 社會(huì) 治理 參與 主體 、 方法 、 路徑 等 在 智能化 技術(shù) 支撐 下 的 實(shí)現(xiàn) 效果 , “ 兩鄰 ” 理念 下 , 從 智能化 基層 社會(huì) 治理 建設(shè) 的 基本 內(nèi)容 要求 入手 , 在 規(guī)劃 建設(shè) 、 制度 建設(shè) 、 資源 建設(shè) 、 開放 應(yīng)用 、 平臺(tái) 建設(shè) 、 人才 建設(shè)']
最后一步需要進(jìn)行停用詞的刪除,從上述的分解結(jié)果可以發(fā)現(xiàn)有很多無(wú)意義的虛詞,如“是”、“由”、“上”、“下”、“的”、“在”等等,所以需要進(jìn)行停用詞刪除,常用的停用詞庫(kù)有百度、四川大學(xué)、哈工大等,這里使用的是百度停用詞表。去除停用詞的主要邏輯就是從已分詞的列表中剔除掉停用詞表中的詞。剔除后我們?cè)佥敵鲆幌?data_1 就可以發(fā)現(xiàn)不同之處了:
[out]
['社會(huì) 治理 執(zhí)政黨 領(lǐng)導(dǎo) 下 政府 組織 主導(dǎo) 、 吸納 社會(huì) 組織 方面 治理 主體 參 、 社會(huì) 公共事務(wù) 進(jìn)行 治理 活動(dòng) , 黨 治國(guó) 理政 理念 升華 后 社會(huì) 建設(shè) 提出 基 求 。
....
強(qiáng)調(diào) 社會(huì) 治理 參 主體 、 方法 、 路徑 智化 技術(shù) 支撐 下 實(shí)現(xiàn) 效果 , 兩鄰 理念 下, 智化 基層 社會(huì) 治理 建設(shè) 基 內(nèi)容 求 入手 , 規(guī)劃 建設(shè) 、 制度 建設(shè) 、 資源 建設(shè) 、 開放 應(yīng) 、 平臺(tái) 建設(shè) 、 人才 建設(shè)']
8.詞云繪制
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
font = r'C:\Windows\Fonts\SIMLI.ttf'; # 自定義字體
py_mask = np.array(Image.open('LN.png')) # 詞云基準(zhǔn)圖
img_colors = ImageColorGenerator(py_mask) # 讀取顏色
# 輸入wordcloud
wc1 = WordCloud(
mask = py_mask,
font_path=font,
background_color="white").generate(data_1)
wc1.recolor(color_func=img_colors) # 上色
plt.imshow(wc1, interpolation='bilinear')
plt.axis('off') # 關(guān)閉坐標(biāo)軸
plt.show() # 輸出圖片
wc1.to_file('wordcloud.png') # 生成文件
繪制詞云的時(shí)候需要先導(dǎo)入上方的幾個(gè)庫(kù),具體可以看第一節(jié)的介紹內(nèi)容
在主體部分,第一步是導(dǎo)入自己要使用的字體,Windows 系統(tǒng)的字體一般存放在上述路徑中,也可以自己從字體網(wǎng)站下載,然后運(yùn)行代碼的時(shí)候只需要把該字體的路徑填好就可以了。
第二步是對(duì)詞云基準(zhǔn)圖進(jìn)行解析,這里選用的是遼寧省的地圖,圖片如下方所示。
2
遼寧省地圖
在選取基準(zhǔn)圖的時(shí)候要注意,圖片上白色區(qū)域是不會(huì)被讀取的,也就是說詞云只會(huì)顯示在白色區(qū)域以外,所以如果有形狀要求的話盡量選擇白底色的圖片。首先使用 Image 打開圖片,然后將圖片轉(zhuǎn)為 numpy 數(shù)據(jù)類型,此時(shí)的 numpy 數(shù)據(jù)為三維數(shù)據(jù),第一、第二維數(shù)據(jù)為像素位置,第三維數(shù)據(jù)為顏色。
[in ] print(Image.open('LN.png'))
[out] '<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1418x906 at 0x21DB3157730>'
[in ] print(py_mask.shape)
[out] '(906, 1418, 4)'
讀取完基準(zhǔn)圖后通過 ImageColorGenerator 讀取圖片的顏色信息,以用于最后詞云圖上色。
第三步則是詞云的繪制,使用的是 WordCloud,其中需要設(shè)置的是參數(shù)有:
mask:詞云形狀,即之前讀取的詞云基準(zhǔn)圖;
font_path:字體文件路徑,即一開始設(shè)置的 font 變量;
background_color:背景顏色,通常設(shè)置為白色,可自己調(diào)節(jié)。
繪制完詞云需要進(jìn)行上色,通過`WordCloud.recolor(color_func=img_colors)` 上色,img_colors 就是之前從圖片中讀取的顏色信息。
下一步需要將詞云信息轉(zhuǎn)換為圖片,使用的是 matplotlib.pyplot.plt.imshow,具體步驟為 plt.imshow(wc1, interpolation='bilinear'),第一個(gè)參數(shù)為詞云信息,第二個(gè)參數(shù)是插值算法,這里的 bilinear 指的是雙線性插值,目的是讓詞云內(nèi)的文字圖像更加平滑,也可以使用其他算法,詳細(xì)內(nèi)容可以參見官方文檔:Interpolations for imshow/matshow。
最后就是對(duì) plt() 的細(xì)化,包括隱藏坐標(biāo)軸、在信息輸出欄中輸出圖片和保存圖片。
test-2
詞云
提示:在詞云繪制完成后,如果發(fā)現(xiàn)仍有一些多余的詞,可以重新將這些詞添加進(jìn)停用詞表中重新生成新詞云。
test-3
調(diào)整停用詞后
以上,僅作為學(xué)習(xí)分享,歡迎進(jìn)行交流探討,如果文中有錯(cuò)誤也歡迎聯(lián)系我修正,十分感謝,聯(lián)系方式已經(jīng)貼在下面的 Blog 里了。
這是我的 Blog:songyp0505 ,歡迎交流,及本文原文頁(yè):基層治理爬蟲及詞云。
songyp0505
songyp0505
閱讀 更多文章。
在 freeCodeCamp 免費(fèi)學(xué)習(xí)編程。 freeCodeCamp 的開源課程已幫助 40,000 多人獲得開發(fā)者工作。開始學(xué)習(xí)
freeCodeCamp 是捐助者支持的 501(c)(3) 條款下具有免稅資格的慈善組織(稅號(hào):82-0779546)。
我們的使命:幫助人們免費(fèi)學(xué)習(xí)編程。我們通過創(chuàng)建成千上萬(wàn)的視頻、文章和交互式編程課程——所有內(nèi)容向公眾免費(fèi)開放——來(lái)實(shí)現(xiàn)這一目標(biāo)。學(xué)員在世界各地自發(fā)成立數(shù)千個(gè) freeCodeCamp 學(xué)習(xí)小組。
所有給 freeCodeCamp 的捐款都將用于我們的教育項(xiàng)目,購(gòu)買服務(wù)器和其
四、文字云、詞云生成器都能用來(lái)做什么?
文字云、詞云生成器,最常用就是做ppt,2016年輯思維跨年演唱會(huì)的詞云文字墻就是用詞云生成器做的
還可以做招聘海報(bào)、網(wǎng)站信息輪播圖、頭像、書籍封面
用到最多的還有大文本分析,用作數(shù)據(jù)關(guān)鍵詞可視化。
其實(shí)一款軟件就可以幫助你實(shí)現(xiàn)所有詞云能做的詞云圖,微詞云生成器!
以上就是關(guān)于詞云圖總結(jié)相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
網(wǎng)絡(luò)關(guān)鍵詞云怎么看(怎么看全網(wǎng)關(guān)鍵詞云)
網(wǎng)絡(luò)爬蟲關(guān)鍵詞抓取(網(wǎng)絡(luò)爬蟲關(guān)鍵詞抓取詞云圖)
景觀設(shè)計(jì)兒童美術(shù)課程(景觀設(shè)計(jì)兒童畫)