博客專欄

        EEPW首頁 > 博客 > 用 Python 繪制了若干張詞云圖,驚艷了所有人

        用 Python 繪制了若干張詞云圖,驚艷了所有人

        發布人:AI科技大本營 時間:2022-08-19 來源:工程師 發布文章

        作者 | 俊欣

        來源 | 關于數據分析與可視化

        在數據可視化圖表中,詞云圖的應用隨處可見。它通常是對輸入的一段文字進行詞頻提取,然后以根據詞匯出現頻率的大小集中顯示高頻詞,簡潔直觀高效,今天小編就來分享一下在Python如何繪制出來精湛的詞云圖。


        圖片

        小試牛刀


        我們先來嘗試繪制一張簡單的詞云圖,用到的Python當中的wordcloud模塊來繪制,

        import jieba
        from wordcloud import WordCloud
        import matplotlib.pyplot as plt

        我們導入文本內容,并且去除掉一下換行符和空格,代碼如下

        text = open(r"明朝那些事兒.txt",encoding='utf8').read()
        text = text.replace('\n',"").replace("\u3000","")

        我們需要將其分成一個個的詞,這個時候就需要用到jieba模塊了,代碼如下

        text_cut = jieba.lcut(text)
        # 將分好的詞用某個符號分割開連成字符串
        text_cut = ' '.join(text_cut)

        當然了,得到的結果當中或許存在著不少我們不需要看的、無關緊要的內容,這個時候就需要用到停用詞了,我們可以自己來構建,也可以直接使用別人已經構建好的停詞表,這里小編采用的是后者,代碼如下

        stop_words = open(r"常見中文停用詞表.txt").read().split("\n")

        下面便是繪制詞云圖的核心代碼了

        word_cloud = WordCloud(font_path="simsun.ttc",  # 設置詞云字體
                               background_color="white"# 詞云圖的背景顏色
                               stopwords=stop_words) # 去掉的停詞
        word_cloud.generate(text_cut)
        word_cloud.to_file("1.png")

        output圖片這樣一張極其簡單的詞云圖算是做好了,當然我們可以給它添加一個背景圖片,例如下面這張圖片,圖片主要需要添加的代碼如下所示

        background = Image.open(r"5.png")
        graph = np.array(background)

        然后在WorCloud當中添加mask參數

        # 使用WordCloud生成詞云
        word_cloud = WordCloud(font_path="simsun.ttc",  # 設置詞云字體
                               background_color="white"# 詞云圖的背景顏色
                               stopwords=stop_words, # 去掉的停詞
                               mask=graph)
        word_cloud.generate(text_cut)
        word_cloud.to_file("1.png")

        output

        圖片


        圖片

        深度優化


        除此之外,還有另外一個模塊stylecloud繪制出來的詞云圖也是非常酷炫的,其中我們主要是用到下面這個函數

        gen_stylecloud(text=None,
                       icon_name='fas fa-flag',
                       colors=None,
                       palette='cartocolors.qualitative.Bold_5',
                       background_color="white",
                       max_font_size=200,
                       max_words=2000,
                       stopwords=True,
                       custom_stopwords=STOPWORDS,
                       output_name='stylecloud.png',
        )

        其中幾個常用的參數有

        • icon_name: 詞云圖的形狀
        • max_font_size: 最大的字號
        • max_words: 可以容納下的最大單詞數量
        • stopwords: 用于篩選常見的停用詞
        • custom_stopwords: 要是自建有停用詞表,可以拿來用
        • palette: 調色板

        我們來嘗試繪制一個詞云圖,代碼如下

        stylecloud.gen_stylecloud(text=text_cut,
                                  palette='tableau.BlueRed_6',
                                  icon_name='fas fa-apple-alt',
                                  font_path=r'田英章楷書3500字.ttf',
                                  output_name='2.png',
                                  stopwords=True,
                                  custom_stopwords=stop_words)

        output圖片其中的palette參數作為調色板,可以任意變換的,具體參考:https://jiffyclub.github.io/palettable/ 這個網站。

        圖片

        pyecharts


        最后我們來看一下如何用Pyecharts模塊來進行詞云圖的繪制,代碼如下

        from pyecharts import options as opts
        from pyecharts.charts import Page, WordCloud

        words = [
            ("皇帝", 10000),
            ("朱元璋", 6181),
            ("明朝", 4386),
            ("朝廷", 4055),
            ("明軍", 2467),
            ("士兵", 2244),
            ("張居正", 1868),
            ("王守仁", 1281)
        ]

        c = (
                WordCloud()
                .add("", words, word_size_range=[20, 100])
                .set_global_opts(title_opts=opts.TitleOpts(title="基本示例"))
            )

        c.render("1.html")

        output圖片出來的結果略顯簡單了,不過這里值得注意的是,pyecharts當中的WordCloud()方法傳入的數據是指定的詞語以及其出現的頻次,這個和之前的操作有所不同。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 算法

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 富平县| 岳阳市| 弥渡县| 军事| 安岳县| 双牌县| 施甸县| 沁源县| 鄂伦春自治旗| 盐城市| 沾益县| 锡林浩特市| 清水县| 富裕县| 青州市| 会同县| 华安县| 铅山县| 淮南市| 棋牌| 四平市| 柳河县| 永仁县| 资阳市| 双城市| 玉屏| 揭阳市| 湘西| 休宁县| 鲜城| 松溪县| 鹤庆县| 襄垣县| 兰考县| 武强县| 九寨沟县| 金秀| 泰兴市| 青浦区| 郴州市| 灵川县|