pyecharts添加文字_超燃的文字云效果,用Python就能輕松get!

8d8701113b8c02e94a0f30f7f975b524.gif

本文轉載自公眾號:數據森麟(ID:shujusenlin)

作者:葉庭云

鏈接:https://blog.csdn.net/fyfugoyfa

/ 01 / 詞云圖

詞云圖是一種用來展現高頻關鍵詞的可視化表達,通過文字、色彩、圖形的搭配,產生有沖擊力地視覺效果,而且能夠傳達有價值的信息。

詞云就是通過形成“關鍵詞云層”或“關鍵詞渲染”,對網絡文本中出現頻率較高的“關鍵詞”的視覺上的突出。

詞云圖過濾掉大量的文本信息,使瀏覽網頁者只要一眼掃過文本就可以領略文本的主旨。

本文通過對已獲取的京東商品評論數據進行預處理、文本分詞、詞頻統計、詞云展示,熟悉制作詞云的基本方法。

/ 02 / stylecloud庫繪制詞云

01 stylecloud簡介

對自己而言,平時用 python 制作詞云主要使用wordcloud,如果在可視化的過程還要用 pyecharts 繪制其他圖,那么詞云也干脆就用pyecharts制作了。

stylecloud也是一個 python 繪制詞云的包,是一位數據科學家 Max Woolf 基于 wordcloud 優化改良而成。

并添加了一些更有用的功能,從而讓使用者更易創作出獨特并且顏值頗高的詞云。

9a87e25fda5ea8f560cc76695b62b35f.png

安裝stylecloud庫。

pip?install?stylecloud?-i?http://pypi.douban.com/simple?--trusted-host?pypi.douban.com

stylecloud具有以下特點:

  • 為詞云提供(任意大小)的圖標形狀(通過 Font Awesome 5.11.2 獲得)

  • 支持高級調色板(通過 palettable 實現)

  • 為上述調色板提供直接梯度

  • 支持讀取文本文件,或預生成的 CSV 文件(包含單詞和數字)

  • 提供命令行接口

02 蒙版圖片

影響詞云顏值的問題之一就是蒙版圖片的生成。

自己制作的蒙版圖片要么分辨率不統一,要么需要調整對比度,比較麻煩,stylecloud是直接使用 Font Awesome 這個現成的方案。

網址鏈接:https://fontawesome.com/license/free

在stylecloud \ static的文件夾下,有一個 fontawesome.min 的 css 文件包含了大量的圖標,打開查看里面的內容,發現其中包含很多圖標的代碼。

ce827afeb7bf5a4e614f2ca1a3b263a9.png

這種 css 層疊樣式表,咱也看不懂、也不知道咋用呀,多虧有中文網站分門別類羅列了圖標的樣子和名字。

https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87 里面有詳細的圖標介紹和分類。

adf30e8bec3f8b61dc6927d675bd2013.gif

使用方法如下:

2f779ea18810f62c359bfef6252466ab.png

比如要使用蘋果商標的蒙版圖片,樣式前綴 fab,以 fa-為前綴的名稱 fa-apple,設置icon_name參數,icon_name='fab fa-apple'即可。

03 配色

配色是影響詞云顏值的又一大問題。stylecloud同樣找到了比較好的方案,配色方案使用高級調色板 palettable 來實現。

palettable 網站:https://jiffyclub.github.io/palettable/

825c5fa7a0b319ab6ccf7dbb6bc27860.gif

我們可以通過修改參數 palette='配色方案' 來達到更改自己的詞云配色。

04?繪制詞云

gen_stylecloud() 主要參數如下:

text:輸入文本,最好在直接調用函數時使用。
file_path:輸入文本/CSV 的文件路徑
icon_name:stylecloud 形狀的圖標名稱(如 fas fa-grin-beam),[default: fas fa-flag]
palette:控制調色方案,stylecloud的調色方案調用了palettable,這是一個非常實用的模塊,其內部收集了數量驚人的大量的經典調色方案,默認為 cartocolors.qualitative.Bold_5
output_name:stylecloud 的輸出文本名。[default: stylecloud.png]
gradient:梯度方向,(其默認值是?None,如果它的值不是?None,則?stylecloud?使用了方向性梯度)[default:?None]
size:控制輸出圖像文件的分辨率(因為stylecloud默認輸出方形圖片,所以size傳入的單個整數代表長和寬),默認為512
font_path:stylecloud 所用字體 .ttf 文件的路徑。[default: uses included Staatliches font]
random_state:控制單詞和顏色的隨機狀態
background_color:字符串,控制詞云圖底色,可傳入顏色名稱或16進制色彩,默認為?white
max_font_size:stylecloud 中的最大字號?[default:?200]
max_words:stylecloud 可包含的最大單詞數?[default:?2000]
stopwords:bool型,控制是否開啟去停用詞功能,默認為True,調用自帶的英文停用詞表
custom_stopwords:傳入自定義的停用詞List,配合stopwords共同使用

代碼如下。

#?-*-?coding:?UTF-8?-*-"""
@Author ?:葉庭云
@CSDN ???:https://yetingyun.blog.csdn.net/
"""from?stylecloud?import?gen_stylecloudimport?jiebaimport?reimport?random#?讀取數據with?open('datas.txt',?encoding='utf-8')?as?f:
????data?=?f.read()#?文本預處理??去除一些無用的字符???只提取出中文出來
new_data?=?re.findall('[\u4e00-\u9fa5]+',?data,?re.S)
new_data?=?"/".join(new_data)#?文本分詞
seg_list_exact?=?jieba.cut(new_data,?cut_all=True)
result_list?=?[]with?open('stop_words.txt',?encoding='utf-8')?as?f:
????con?=?f.readlines()
????stop_words?=?set()for?i?in?con:
????????i?=?i.replace("\n",?"")???#?去掉讀取每一行數據的\n
????????stop_words.add(i)for?word?in?seg_list_exact:#?設置停用詞并去除單個詞if?word?not?in?stop_words?and?len(word)?>?1:
????????result_list.append(word)
print(result_list)#?個人推薦使用的palette配色方案??效果挺好看#?colorbrewer.qualitative.Dark2_7#?cartocolors.qualitative.Bold_5#?colorbrewer.qualitative.Set1_8
gen_stylecloud(
????text='?'.join(result_list),???????????????#?文本數據
????size=600,?????????????????????????????????#?詞云圖大小
????font_path=r'?C:\Windows\Fonts\msyh.ttc',???#?中文詞云??顯示需要設置字體
????output_name='詞云.png',???????????????????#?輸出詞云圖名稱
????icon_name='fas?fa-grin-beam',?????????????#?圖標
????palette=cartocolors.qualitative.Bold_5????#?設置配色方案
)

運行效果如下:

e06af51a237c62f03bbe4a13cc913396.png

/ 03 / wordcloud庫繪制詞云

wordcloud是優秀的詞云展示第三方庫 可以在命令行通過pip安裝。

pip?install?wordcloud?-i?http://pypi.douban.com/simple?--trusted-host?pypi.douban.com

wordcloud庫把詞云當作一個WordCloud對象。

  • wordcloud.WordCloud( ) 代表一個文本對應的詞云

  • 可以根據文本中詞語出現的頻率等參數繪制詞云

  • 繪制詞云的形狀,尺寸和顏色都可以設定

配置對象參數。

13ec362cc53e934772bdef83818f489c.png

代碼實現:

#?-*-?coding:?UTF-8?-*-"""
@Author ?:葉庭云
@CSDN ???:https://yetingyun.blog.csdn.net/
"""import?jiebaimport?collectionsimport?refrom?wordcloud?import?WordCloudimport?matplotlib.pyplot?as?plt#?958條評論數據with?open('data.txt')?as?f:
????data?=?f.read()#?文本預處理??去除一些無用的字符???只提取出中文出來
new_data?=?re.findall('[\u4e00-\u9fa5]+',?data,?re.S)
new_data?=?"?".join(new_data)#?文本分詞
seg_list_exact?=?jieba.cut(new_data,?cut_all=True)
result_list?=?[]with?open('stop_words.txt',?encoding='utf-8')?as?f:
????con?=?f.readlines()
????stop_words?=?set()for?i?in?con:
????????i?=?i.replace("\n",?"")???#?去掉讀取每一行數據的\n
????????stop_words.add(i)for?word?in?seg_list_exact:#?設置停用詞并去除單個詞if?word?not?in?stop_words?and?len(word)?>?1:
????????result_list.append(word)
print(result_list)#?篩選后統計
word_counts?=?collections.Counter(result_list)#?獲取前100最高頻的詞
word_counts_top100?=?word_counts.most_common(100)
print(word_counts_top100)#?繪制詞云
my_cloud?=?WordCloud(
????background_color='white',??#?設置背景顏色??默認是black
????width=900,?height=600,
????max_words=100,????????????#?詞云顯示的最大詞語數量
????font_path='simhei.ttf',???#?設置字體??顯示中文
????max_font_size=99,?????????#?設置字體最大值
????min_font_size=16,?????????#?設置子圖最小值
????random_state=50???????????#?設置隨機生成狀態,即多少種配色方案
).generate_from_frequencies(word_counts)#?顯示生成的詞云圖片
plt.imshow(my_cloud,?interpolation='bilinear')#?顯示設置詞云圖中無坐標軸
plt.axis('off')
plt.show()

詞云圖:

1b499bca64bfce6c04dcf4159d6f759c.png

/ 04 /?pyecharts庫的WordCloud繪制詞云

pyecharts是基于echarts的python庫,能夠繪制多種交互式圖表,和其他可視化庫不一樣,pyecharts支持鏈式調用。

也就是說添加圖表元素、修改圖表配置,只需要簡單的調用組件即可。

#?class?pyecharts.charts.WordCloudclass?WordCloud(
????#?初始化配置項,參考?`global_options.InitOpts`
????init_opts:?opts.InitOpts?=?opts.InitOpts()
)

#?func?pyecharts.charts.WordCloud.adddef?add(
????#?系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。
????series_name:?str,
????#?系列數據項,[(word1,?count1),?(word2,?count2)]
????data_pair:?Sequence,
????#?詞云圖輪廓,有?'circle',?'cardioid',?'diamond',?'triangle-forward',?'triangle',?'pentagon',?'star'?可選
????shape:?str?=?"circle",
????#?自定義的圖片(目前支持?jpg,?jpeg,?png,?ico?的格式,其他的圖片格式待測試)
????#?該參數支持:
????#?1、 base64 (需要補充 data 頭);
????#?2、本地文件路徑(相對或者絕對路徑都可以)
????#?注:如果使用了 mask_image 之后第一次渲染會出現空白的情況,再刷新一次就可以了(Echarts 的問題)
????#?Echarts?Issue:?https://github.com/ecomfe/echarts-wordcloud/issues/74
????mask_image:?types.Optional[str]?=?None,
????#?單詞間隔
????word_gap:?Numeric?=?20,
????#?單詞字體大小范圍
????word_size_range=None,
????#?旋轉單詞角度
????rotate_step:?Numeric?=?45,
????#?距離左側的距離
????pos_left:?types.Optional[str]?=?None,
????#?距離頂部的距離
????pos_top:?types.Optional[str]?=?None,
????#?距離右側的距離
????pos_right:?types.Optional[str]?=?None,
????#?距離底部的距離
????pos_bottom:?types.Optional[str]?=?None,
????#?詞云圖的寬度
????width:?types.Optional[str]?=?None,
????#?詞云圖的高度
????height:?types.Optional[str]?=?None,
????#?允許詞云圖的數據展示在畫布范圍之外
????is_draw_out_of_bound:?bool?=?False,
????#?提示框組件配置項,參考?`series_options.TooltipOpts`
????tooltip_opts:?Union[opts.TooltipOpts,?dict,?None]?=?None,
????#?詞云圖文字的配置
????textstyle_opts:?types.TextStyle?=?None,
????#?詞云圖文字陰影的范圍
????emphasis_shadow_blur:?types.Optional[types.Numeric]?=?None,
????#?詞云圖文字陰影的顏色
????emphasis_shadow_color:?types.Optional[str]?=?None,
)

代碼實現:

#?-*-?coding:?UTF-8?-*-"""
@Author ?:葉庭云
@CSDN ???:https://yetingyun.blog.csdn.net/
"""import?jiebaimport?collectionsimport?refrom?pyecharts.charts?import?WordCloudfrom?pyecharts.globals?import?SymbolTypefrom?pyecharts?import?options?as?optsfrom?pyecharts.globals?import?ThemeType,?CurrentConfig
CurrentConfig.ONLINE_HOST?=?'D:/python/pyecharts-assets-master/assets/'#?958條評論數據with?open('data.txt')?as?f:
????data?=?f.read()#?文本預處理??去除一些無用的字符???只提取出中文出來
new_data?=?re.findall('[\u4e00-\u9fa5]+',?data,?re.S)??#?只要字符串中的中文
new_data?=?"?".join(new_data)#?文本分詞--精確模式分詞
seg_list_exact?=?jieba.cut(new_data,?cut_all=True)
result_list?=?[]with?open('stop_words.txt',?encoding='utf-8')?as?f:
????con?=?f.readlines()
????stop_words?=?set()for?i?in?con:
????????i?=?i.replace("\n",?"")???#?去掉讀取每一行數據的\n
????????stop_words.add(i)for?word?in?seg_list_exact:#?設置停用詞并去除單個詞if?word?not?in?stop_words?and?len(word)?>?1:
????????result_list.append(word)
print(result_list)#?篩選后統計
word_counts?=?collections.Counter(result_list)#?獲取前100最高頻的詞
word_counts_top100?=?word_counts.most_common(100)#?可以打印出來看看統計的詞頻
print(word_counts_top100)
word1?=?WordCloud(init_opts=opts.InitOpts(width='1350px',?height='750px',?theme=ThemeType.MACARONS))
word1.add('詞頻',?data_pair=word_counts_top100,
??????????word_size_range=[15,?108],?textstyle_opts=opts.TextStyleOpts(font_family='cursive'),
??????????shape=SymbolType.DIAMOND)
word1.set_global_opts(title_opts=opts.TitleOpts('商品評論詞云圖'),
??????????????????????toolbox_opts=opts.ToolboxOpts(is_show=True,?orient='vertical'),
??????????????????????tooltip_opts=opts.TooltipOpts(is_show=True,?background_color='red',?border_color='yellow'))
word1.render("商品評論詞云圖.html")

詞云圖:

70bbd8e5b9558f67970aad2c756b53f8.gif

用pyecharts繪制的詞云圖渲染在網頁上,具有交互效果,還有很多的配置參數可以設置讓詞云圖看起來更美觀。

戀習Python

49235f0b079d2a45e2b97ac3f020f53e.png

關注戀習Python,Python都好練好文章,我在看??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539007.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

同步關鍵詞synchronized

概述 synchronized是java中的一個關鍵字,也就是說是Java語言內置的特性。 synchronized( 一個任意的對象(鎖) ){ 代碼塊中放操作共享數據的代碼。 } public synchronized int getIndex() {return 1;}public static synchronized int getN…

python連接mysql用哪個模塊_Python連接MySQL數據庫之pymysql模塊使用

Python3連接MySQL本文介紹Python3連接MySQL的第三方庫--PyMySQL的基本使用。PyMySQL介紹PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。Django中也可以使用PyMySQL連接MySQL數據庫。PyMySQL安裝pip install pymysql連接數據…

mysql 創建視圖 主鍵_MySQL數據庫基礎操作命令,本文助你更上一層樓!

今天介紹的是關于Mysql數據庫一些操作的基礎命令用戶與權限創建用戶mysql>create user test identified by BaC321#; 修改密碼5.5版本及以前的命令mysql>set password for testpassowrd(!1A2#3); 5.6及以上命令mysql>update mysql.user set authentication_stringpass…

mysql 聚合函數 怎么用在條件里_MySql 中聚合函數增加條件表達式的方法

Mysql 與聚合函數在一起時候where條件和having條件的過濾時機where 在聚合之前過濾當一個查詢包含了聚合函數及where條件&#xff0c;像這樣的情況select max(cid) from t where t.id<999這時候會先進行過濾&#xff0c;然后再聚合。先過濾出ID《999的記錄&#xff0c;再查找…

drbd(三):drbd的狀態說明

1.幾種獲取狀態信息的方法 drbd有很多獲取信息的方式。在drbd84和之前的版本&#xff0c;大多都使用cat /proc/drbd來獲取信息&#xff0c;多數情況下&#xff0c;這個文件展示的信息對于管理和維護drbd來說已經足夠。 例如以下是drbd84上兩個volume的節點狀態信息&#xff1a;…

Lock的lock()方法

ReentrantLock是JDK唯一實現了Lock接口的類 lock() 是平常使用得最多的一個方法&#xff0c;就是用來獲取鎖。如果鎖已被其他線程獲取&#xff0c;則進行等待。 由于在前面講到如果采用Lock&#xff0c;必須主動去釋放鎖&#xff0c;并且在發生異常時&#xff0c;不會自動釋放鎖…

Lock的tryLock()方法

概述 tryLock()方法是有返回值的&#xff0c;它表示用來嘗試獲取鎖&#xff0c;如果獲取成功&#xff0c;則返回true&#xff0c;如果獲取失敗&#xff08;即鎖已被其他線程獲取&#xff09;&#xff0c;則返回false&#xff0c;這個方法無論如何都會立即返回。在拿不到鎖時不…

python requests庫詳解_python的requests庫詳解

快速上手迫不及待了嗎&#xff1f;本頁內容為如何入門 Requests 提供了很好的指引。其假設你已經安裝了 Requests。如果還沒有&#xff0c;去安裝一節看看吧。首先&#xff0c;確認一下&#xff1a;Requests 已安裝Requests 是最新的讓我們從一些簡單的示例開始吧。發送請求使用…

python QTreeWidgetItem下面有幾個子tree_python-nlp ch1筆記:nlp的基礎應用、高級應用、python優勢、nltk環境搭建...

本帖是對(印度)Jalaj Thanaki作品《python自然語言處理》的翻譯、縮減及改編~nlp的基礎應用NLP是AI的子分支&#xff0c;其相關概念可以用于以下專家系統中&#xff1a;語音識別系統問答系統機器翻譯文本摘要情感分析基于模板的聊天機器人文本分類主題分割nlp的高級應用理解自然…

C#使用ListView更新數據出現閃爍解決辦法

C#使用ListView更新數據出現閃爍解決辦法 在使用vs自動控件ListView控件時候&#xff0c;更新里面的部分代碼時候出現閃爍的情況 如圖&#xff1a; 解決以后&#xff1a; 解決辦法使用雙緩沖&#xff1a;添加新類繼承ListView 對其重寫 1 public class DoubleBufferListView : …

Lock的tryLock(long time, TimeUnit unit)方法

概述 tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的&#xff0c;只不過區別在于這個方法在拿不到鎖時會等待一定的時間&#xff0c;在時間期限之內如果還拿不到鎖&#xff0c;就返回false。如果一開始拿到鎖或者在等待期間內拿到了鎖&#xff0c;則返回true。…

python語音識別的第三方庫_python標準庫+內置函數+第三方庫: 7.音頻處理

python標準庫內置函數第三方庫 欲善其事&#xff0c;必先利其器 這其器必是python的標準庫內置函數&#xff0c;話說許多第三方庫&#xff0c; 也是對標準庫的使用&#xff0c;進行封裝&#xff0c;使得使用起來更方便。 這些庫以使用場景來分類: 7、音頻處理 音頻處理主要適用…

SperingBoot+vue文件上傳下載預覽

上傳文件&#xff1a; 前端&#xff1a; 整個過程&#xff0c;就是在使用FormData 添加 上File&#xff08;這個Blob&#xff09;&#xff0c;并且key要和后臺的名字對應上在點擊上傳按鈕開始上傳之前&#xff0c;使用了URL.createObjectURL(File)創建blobUrl&#xff0c;給了…

keepalived腦裂問題查找

在自己環境做keepalivedredis實驗時&#xff0c;當重啟了備用redies機器后&#xff0c;發現兩臺redies主機都拿到了VIP [plain] view plaincopy [rootredis2 ~]# ip addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopbac…

python 多線程并行 矩陣乘法_python實現簡單的并行矩陣乘法

python實現簡單的并行矩陣乘法python實現簡單的并行矩陣乘法本文采用的矩陣乘法方式是利用一個矩陣的行和二個矩陣的列相乘時不會互相影響。假設A(m,n)表示矩陣的m行&#xff0c;n列。那么C(m,m)A(m,n) * B(n,m) &#xff1a;計算C矩陣時候分解成&#xff1a;process-1&#xf…

停止Java線程,小心interrupt()方法

轉自http://www.blogjava.NET/jinfeng_wang/archive/2008/04/27/196477.html ---------------------------------------------------------------------------------------------------- 程序是很簡易的。然而&#xff0c;在編程人員面前&#xff0c;多線程呈現出了一組新的難…

python輸入數學表達式并求值_用Python3實現表達式求值

一、題目描述 請用 python3編寫一個計算器的控制臺程序&#xff0c;支持加減乘除、乘方、括號、小數點&#xff0c;運算符優先級為括號>乘方>乘除>加減&#xff0c;同級別運算按照從左向右的順序計算。 二、輸入描述 數字包括"0123456789"&#xff0c;小數點…

mac上的mysql管理工具sequel pro

https://blog.csdn.net/wan_zaiyunduan/article/details/54909389 以前用過Plsql、Navicat、Workbench&#xff0c;現在換到mac上&#xff0c;用了現在這一款管理工具&#xff0c;很好用&#xff0c;所以推薦給大家。 完整的MySQL支持 Sequel Pro是一個快速,易于使用的Mac數據庫…

報錯 classes 拒絕訪問_3種方式“移除”快速訪問;為什么移除?你懂的...

Windows 10 在文件資源管理器中引入了"快速訪問"這個功能&#xff0c;每當打開文件資源管理器窗口時&#xff0c;您都會看到常用文件夾和最近訪問的文件的列表&#xff0c;這個功能雖然方便了日常使用&#xff0c;可能會提高工作效率&#xff0c;但是如果是公司的電腦…

java set是重復_java算法題,set內出現重復元素

題目將數字 1…9 填入一個33 的九宮格中&#xff0c;使得格子中每一橫行和的值全部相等&#xff0c;每一豎列和的值全部相等。請你計算有多少種填數字的方案。這個是計蒜客上面的一個模擬題&#xff0c;我采用暴力。public class _3 {/** 將數字 1…9 填入一個33 的九宮格中&am…