<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 8781字,需瀏覽 18分鐘

           ·

          2020-12-25 04:37

          點(diǎn)擊藍(lán)色“Python交流圈”關(guān)注我丫

          加個(gè)“星標(biāo)”,每天一起進(jìn)步一點(diǎn)點(diǎn)



          / 01 / 詞云圖


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


          詞云就是通過形成“關(guān)鍵詞云層”或“關(guān)鍵詞渲染”,對網(wǎng)絡(luò)文本中出現(xiàn)頻率較高的“關(guān)鍵詞”的視覺上的突出。


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


          本文通過對已獲取的京東商品評論數(shù)據(jù)進(jìn)行預(yù)處理、文本分詞、詞頻統(tǒng)計(jì)、詞云展示,熟悉制作詞云的基本方法。



          / 02 / stylecloud庫繪制詞云


          01 stylecloud簡介


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


          stylecloud也是一個(gè) python 繪制詞云的包,是一位數(shù)據(jù)科學(xué)家 Max Woolf 基于 wordcloud 優(yōu)化改良而成。


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



          安裝stylecloud庫。


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


          stylecloud具有以下特點(diǎn):


          • 為詞云提供(任意大?。┑膱D標(biāo)形狀(通過 Font Awesome 5.11.2 獲得)

          • 支持高級調(diào)色板(通過 palettable 實(shí)現(xiàn))

          • 為上述調(diào)色板提供直接梯度

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

          • 提供命令行接口


          02 蒙版圖片


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


          自己制作的蒙版圖片要么分辨率不統(tǒng)一,要么需要調(diào)整對比度,比較麻煩,stylecloud是直接使用 Font Awesome 這個(gè)現(xiàn)成的方案。


          網(wǎng)址鏈接:https://fontawesome.com/license/free


          在stylecloud \ static的文件夾下,有一個(gè) fontawesome.min 的 css 文件包含了大量的圖標(biāo),打開查看里面的內(nèi)容,發(fā)現(xiàn)其中包含很多圖標(biāo)的代碼。



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


          https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87?里面有詳細(xì)的圖標(biāo)介紹和分類。



          使用方法如下:



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


          03 配色


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


          palettable 網(wǎng)站:https://jiffyclub.github.io/palettable/



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


          04?繪制詞云


          gen_stylecloud() 主要參數(shù)如下:


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


          代碼如下。


          #?-*-?coding:?UTF-8?-*-
          """
          @Author ?:葉庭云
          @CSDN ???:https://yetingyun.blog.csdn.net/
          """

          from?stylecloud?import?gen_stylecloud
          import?jieba
          import?re
          import?random

          #?讀取數(shù)據(jù)
          with?open('datas.txt',?encoding='utf-8')?as?f:
          ????data?=?f.read()

          #?文本預(yù)處理??去除一些無用的字符???只提取出中文出來
          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",?"")???#?去掉讀取每一行數(shù)據(jù)的\n
          ????????stop_words.add(i)

          for?word?in?seg_list_exact:
          ????#?設(shè)置停用詞并去除單個(gè)詞
          ????if?word?not?in?stop_words?and?len(word)?>?1:
          ????????result_list.append(word)
          print(result_list)

          #?個(gè)人推薦使用的palette配色方案??效果挺好看
          #?colorbrewer.qualitative.Dark2_7
          #?cartocolors.qualitative.Bold_5
          #?colorbrewer.qualitative.Set1_8

          gen_stylecloud(
          ????text='?'.join(result_list),???????????????#?文本數(shù)據(jù)
          ????size=600,?????????????????????????????????#?詞云圖大小
          ????font_path=r'?C:\Windows\Fonts\msyh.ttc',???#?中文詞云??顯示需要設(shè)置字體
          ????output_name='詞云.png',???????????????????#?輸出詞云圖名稱
          ????icon_name='fas?fa-grin-beam',?????????????#?圖標(biāo)
          ????palette=cartocolors.qualitative.Bold_5????#?設(shè)置配色方案
          )


          運(yùn)行效果如下:




          / 03 / wordcloud庫繪制詞云


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


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


          wordcloud庫把詞云當(dāng)作一個(gè)WordCloud對象。


          • wordcloud.WordCloud( ) 代表一個(gè)文本對應(yīng)的詞云

          • 可以根據(jù)文本中詞語出現(xiàn)的頻率等參數(shù)繪制詞云

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


          配置對象參數(shù)。



          代碼實(shí)現(xiàn):


          #?-*-?coding:?UTF-8?-*-
          """
          @Author ?:葉庭云
          @CSDN ???:https://yetingyun.blog.csdn.net/
          """

          import?jieba
          import?collections
          import?re
          from?wordcloud?import?WordCloud
          import?matplotlib.pyplot?as?plt


          #?958條評論數(shù)據(jù)
          with?open('data.txt')?as?f:
          ????data?=?f.read()

          #?文本預(yù)處理??去除一些無用的字符???只提取出中文出來
          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",?"")???#?去掉讀取每一行數(shù)據(jù)的\n
          ????????stop_words.add(i)

          for?word?in?seg_list_exact:
          ????#?設(shè)置停用詞并去除單個(gè)詞
          ????if?word?not?in?stop_words?and?len(word)?>?1:
          ????????result_list.append(word)
          print(result_list)

          #?篩選后統(tǒng)計(jì)
          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',??#?設(shè)置背景顏色??默認(rèn)是black
          ????width=900,?height=600,
          ????max_words=100,????????????#?詞云顯示的最大詞語數(shù)量
          ????font_path='simhei.ttf',???#?設(shè)置字體??顯示中文
          ????max_font_size=99,?????????#?設(shè)置字體最大值
          ????min_font_size=16,?????????#?設(shè)置子圖最小值
          ????random_state=50???????????#?設(shè)置隨機(jī)生成狀態(tài),即多少種配色方案
          ).generate_from_frequencies(word_counts)

          #?顯示生成的詞云圖片
          plt.imshow(my_cloud,?interpolation='bilinear')
          #?顯示設(shè)置詞云圖中無坐標(biāo)軸
          plt.axis('off')
          plt.show()


          詞云圖:




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


          pyecharts是基于echarts的python庫,能夠繪制多種交互式圖表,和其他可視化庫不一樣,pyecharts支持鏈?zhǔn)秸{(diào)用。


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


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


          #?func?pyecharts.charts.WordCloud.add
          def?add(
          ????#?系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。
          ????series_name:?str,

          ????#?系列數(shù)據(jù)項(xiàng),[(word1,?count1),?(word2,?count2)]
          ????data_pair:?Sequence,

          ????#?詞云圖輪廓,有?'circle',?'cardioid',?'diamond',?'triangle-forward',?'triangle',?'pentagon',?'star'?可選
          ????shape:?str?=?"circle",

          ????#?自定義的圖片(目前支持?jpg,?jpeg,?png,?ico?的格式,其他的圖片格式待測試)
          ????#?該參數(shù)支持:
          ????#?1、 base64 (需要補(bǔ)充 data 頭);
          ????#?2、本地文件路徑(相對或者絕對路徑都可以)
          ????#?注:如果使用了 mask_image 之后第一次渲染會出現(xiàn)空白的情況,再刷新一次就可以了(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,

          ????#?旋轉(zhuǎn)單詞角度
          ????rotate_step:?Numeric?=?45,

          ????#?距離左側(cè)的距離
          ????pos_left:?types.Optional[str]?=?None,

          ????#?距離頂部的距離
          ????pos_top:?types.Optional[str]?=?None,

          ????#?距離右側(cè)的距離
          ????pos_right:?types.Optional[str]?=?None,

          ????#?距離底部的距離
          ????pos_bottom:?types.Optional[str]?=?None,

          ????#?詞云圖的寬度
          ????width:?types.Optional[str]?=?None,

          ????#?詞云圖的高度
          ????height:?types.Optional[str]?=?None,

          ????#?允許詞云圖的數(shù)據(jù)展示在畫布范圍之外
          ????is_draw_out_of_bound:?bool?=?False,

          ????#?提示框組件配置項(xiàng),參考?`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,
          )


          代碼實(shí)現(xiàn):


          #?-*-?coding:?UTF-8?-*-
          """
          @Author ?:葉庭云
          @CSDN ???:https://yetingyun.blog.csdn.net/
          """

          import?jieba
          import?collections
          import?re
          from?pyecharts.charts?import?WordCloud
          from?pyecharts.globals?import?SymbolType
          from?pyecharts?import?options?as?opts
          from?pyecharts.globals?import?ThemeType,?CurrentConfig


          CurrentConfig.ONLINE_HOST?=?'D:/python/pyecharts-assets-master/assets/'

          #?958條評論數(shù)據(jù)
          with?open('data.txt')?as?f:
          ????data?=?f.read()

          #?文本預(yù)處理??去除一些無用的字符???只提取出中文出來
          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",?"")???#?去掉讀取每一行數(shù)據(jù)的\n
          ????????stop_words.add(i)

          for?word?in?seg_list_exact:
          ????#?設(shè)置停用詞并去除單個(gè)詞
          ????if?word?not?in?stop_words?and?len(word)?>?1:
          ????????result_list.append(word)
          print(result_list)


          #?篩選后統(tǒng)計(jì)
          word_counts?=?collections.Counter(result_list)
          #?獲取前100最高頻的詞
          word_counts_top100?=?word_counts.most_common(100)
          #?可以打印出來看看統(tǒng)計(jì)的詞頻
          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")


          詞云圖:



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

          --End--


          近期熱門推薦?

          1、30 個(gè) Python 的最佳實(shí)踐、小貼士和技巧

          2、BOSS直聘變BOSS直約:在線招嫖太荒唐

          3、Shell 命令執(zhí)行可視化和告警工具

          4、打馬賽克就安全了嗎?AI消除馬賽克,GitHub開源項(xiàng)目上線三天收獲近7000星

          5、垃圾分類的正確姿勢?用 OpenCV 人工智能圖像識別技術(shù)來進(jìn)行

          6、Python 游戲編程之實(shí)現(xiàn)飛機(jī)大戰(zhàn)(含源代碼)

          7、用 Hypothesis 快速測試你的 Python 代碼

          8、別這樣直接運(yùn)行Python命令,否則電腦等于“裸奔”

          9、太sao了吧!微信可以改彩色昵稱了?。。?/a>

          10、同步與異步 Python 有何不同?

          關(guān)注公眾號,回復(fù)“001”
          領(lǐng)取Python入門+進(jìn)階+實(shí)戰(zhàn)開發(fā)92天全套視頻教程


          點(diǎn)贊最大的支持?

          瀏覽 99
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  苍井空电影一区二区三区 | 午夜看黄| 午夜在线成人视频 | 欧美在线免费播放不卡欧美 | 亚洲经典视频 |