<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 一鍵生成漂亮的生日快樂(lè)詞云!

          共 5858字,需瀏覽 12分鐘

           ·

          2021-08-02 09:12

          前段時(shí)間寫(xiě)了幾篇關(guān)于生成詞云的文章,其中包括:

          Python 情人節(jié)超強(qiáng)技能 導(dǎo)出微信聊天記錄生成詞云

          Python 繪制悼念的詞云蠟燭:
          https://pythondict.com/python-data-analyze/python-paint-mourn-candle/

          不過(guò)這幾篇文章的轉(zhuǎn)化對(duì)象都必須是多詞匯組成的,也就是說(shuō)他們生成詞云的條件是詞組必須夠多,只有一兩個(gè)詞的話無(wú)法生成完整詞云。

          最近遇到許多朋友有特殊的需求,他們只想把 【名字】和【生日快樂(lè)】?jī)蓚€(gè)詞組在一起,祝他人生日快樂(lè),不想弄太復(fù)雜的東西,基于前面兩篇文章是無(wú)法做到的。所以今天我們就來(lái)說(shuō)說(shuō)如何用這么少的詞匯生成漂亮的詞云。

          1.準(zhǔn)備



          開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。

          (可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

          (可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南

          請(qǐng)選擇以下任一種方式輸入命令安裝依賴
          1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
          2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
          3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

          pip install wordcloud == 1.5.0
          pip install scipy == 1.1.0
          pip install multidict == 4.5.2
          pip install matplotlib == 2.2.4
          pip install fire == 0.2.1
          pip install numpy == 1.16.4


          看到 Successfully installed xxx 則說(shuō)明安裝成功。或公眾號(hào)后臺(tái)回復(fù)生日快樂(lè)可獲得本文全部代碼,然后進(jìn)入文件夾,輸入一行命令安裝所有依賴:

          pip install -r requirements.txt


          如果你不想折騰代碼,安裝完依賴后,輸入以下命令就可以生成你的詞云:

          python birthday.py 圖片位置 對(duì)象姓名


          如:

          python birthday.py example.png 寶典哥


          2.編寫(xiě)代碼



          首先是引入詞云對(duì)象,并初始化【生日快樂(lè)】和對(duì)方姓名:

          words = multidict.MultiDict()
          # 生日快樂(lè)和姓名的權(quán)重必須先初始化兩個(gè)最大權(quán)重的
          words.add('生日快樂(lè)', 10)
          words.add(name, 12)


          細(xì)心的讀者可能發(fā)現(xiàn)了,我們?cè)谶@里用了MultiDict,這主要是因?yàn)閣ordcloud只允許接受【字典】數(shù)據(jù)結(jié)構(gòu),而Python內(nèi)置的字典不允許重復(fù)值,所以我們只能引入multidict模塊。

          然后是插入新的生日快樂(lè)詞云和對(duì)方姓名:

          # 隨意插入新的詞語(yǔ)
          for i in range(1000):
              words.add('生日', numpy.random.randint(1, 5))
              words.add('快樂(lè)', numpy.random.randint(1, 5))
              words.add(name, numpy.random.randint(1, 5))


          然后我們需要對(duì)圖片進(jìn)行一些處理,現(xiàn)在網(wǎng)絡(luò)上的圖片很多都包含一些雜色,因此需要把這些雜色去掉:

          def transform_format(val):
              """
              用于去除雜色

              Args:
                  val (list): RGB顏色組

              Returns:
                  list: 去除雜色后的組
              """

              if val[0] > 245 and val[1] > 245 and val[2] > 245:
                  val[0] = val[1] = val[2] = 255
                  return val
              else:
                  return val


          引入圖片,去除雜色:

          # 設(shè)定圖片
          bimg = imread(file)
          for color in range(len(bimg)):
              bimg[color] = list(map(transform_format, bimg[color]))
              
          wordcloud = WordCloud(
              background_color='white', mask=bimg,
              font_path='simhei.ttf'
          ).generate_from_frequencies(words)


          生成詞云并渲染:

          # 生成詞云
          bimgColors = ImageColorGenerator(bimg)

          # 渲染詞云
          plt.axis("off")
          plt.imshow(wordcloud.recolor(color_func=bimgColors))
          plt.savefig(name+'.png')
          plt.show()


          完整代碼如下:

          # coding:utf-8
          # Python 實(shí)用寶典
          # 2021/08/01
          import numpy
          import fire
          import multidict
          import matplotlib.pyplot as plt
          from scipy.misc import imread
          from wordcloud import WordCloud, ImageColorGenerator


          def transform_format(val):
              """
              用于去除雜色

              Args:
                  val (list): RGB顏色組

              Returns:
                  list: 去除雜色后的組
              """

              if val[0] > 245 and val[1] > 245 and val[2] > 245:
                  val[0] = val[1] = val[2] = 255
                  return val
              else:
                  return val


          def gen_happy_birthday_cloud(file, name):
              """
              生成生日快樂(lè)詞云

              Args:
                  file (str): 詞云背景圖
                  name (str)): 對(duì)方的姓名
              """

              words = multidict.MultiDict()
              # 生日快樂(lè)和姓名的權(quán)重必須先初始化兩個(gè)最大權(quán)重的
              words.add('生日快樂(lè)', 10)
              words.add(name, 12)

              # 隨意插入新的詞語(yǔ)
              for i in range(1000):
                  words.add('生日', numpy.random.randint(1, 5))
                  words.add('快樂(lè)', numpy.random.randint(1, 5))
                  words.add(name, numpy.random.randint(1, 5))

              # 設(shè)定圖片
              bimg = imread(file)
              for color in range(len(bimg)):
                  bimg[color] = list(map(transform_format, bimg[color]))

              wordcloud = WordCloud(
                  background_color='white', mask=bimg,
                  font_path='simhei.ttf'
              ).generate_from_frequencies(words)

              # 生成詞云
              bimgColors = ImageColorGenerator(bimg)

              # 渲染詞云
              plt.axis("off")
              plt.imshow(wordcloud.recolor(color_func=bimgColors))
              plt.savefig(name+'.png')
              plt.show()


          fire.Fire(gen_happy_birthday_cloud)

          3.整合一句運(yùn)行



          接下來(lái),我們使用上次提到的 一行命令實(shí)現(xiàn)功能 將這個(gè)功能打包成輸入命令就能運(yùn)行的程序,比如:

          python birthday.py 圖片 寶典哥


          嘛,在完整代碼最后面加一行語(yǔ)句就行了:

          import fire

          fire.Fire(gen_happy_birthday_cloud)


          當(dāng)然,別忘了還要import fire模塊。

          最后實(shí)驗(yàn)一下:

          python birthday.py example.png 寶典哥


          ?怎么樣,效果不錯(cuò)吧?喜歡的話記得點(diǎn)一個(gè)在看哦!


          如果你喜歡今天的Python 教程,請(qǐng)持續(xù)關(guān)注Python實(shí)用寶典,如果對(duì)你有幫助,麻煩在下面點(diǎn)一個(gè)贊/在看,有任何問(wèn)題都可以在下方留言,我們會(huì)耐心解答的!


          點(diǎn)擊下方閱讀原文可以獲取所有代碼和鏈接哦!

          Python實(shí)用寶典 (pythondict.com)

          不只是一個(gè)寶典

          歡迎關(guān)注公眾號(hào):Python實(shí)用寶典
          瀏覽 72
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  亚洲无码AV在线亚洲有码AV在线精品 | 日韩日屄视频在线免费观看 | 亚洲天堂av在线 亚洲天堂影音先锋 | 日韩国产在线看 | 亚州无码人妻 |