Pythonデータ可視化:WordCloud語群の構築

8062 ワード

WordCloud公式ドキュメント:https://amueller.github.io/word_cloud/index.htmlWordCloudGitHubアドレス:https://github.com/amueller/word_cloudPythonは非常に重要な可視化ライブラリです.wordcloud語クラウドライブラリを理解してください.https://www.bilibili.com/video/av26266917無料のワードクラウド(word cloud)を生成するオンラインツール:https://segmentfault.com/a/1190000016827687python語群wordcloud入門:https://blog.csdn.net/tanzuozhev/article/details/50789226Pythonサードパーティライブラリwordcloud(語群)の迅速な入門と進級:https://blog.csdn.net/qq_34337272/article/details/79552929
 
語群可視化:インストールモジュールwordcloud:pip install wordcloud
 
  • 語雲
  • とは
    語雲は文字雲とも呼ばれ、テキストデータに出現する頻度の高い「キーワード」の視覚的な際立った表現であり、キーワードのレンダリングを形成して雲のようなカラー画像を形成し、テキストデータの主な表現意味を一目で理解することができる.
     
  • 準備作業:
  • python開発環境、wordcloud、jieba、matplotlib、numpy、PILなどのライブラリファイルをインストールします.
     
    インストール完了後(コマンドライン使用方法)wordcloud_cli --text in.txt --imagefile out.png --mask in.png textは語群のソースで、maskは背景フレームワークで、imagefileが出力したファイルwordcloud_cli--helpサポートされているすべてのコマンドパラメータを表示
     
    wordcloud生成語群の原理概要
    wordcloud生成語クラウドの原理は複雑ではなく、大きく5つのステップに分かれています(具体的にはソースコードを自分で見ることができます):
  • 1.wordcloudでワードクラウドを作成する場合は、まずテキストデータを分詞しprocess_を使用します.text()メソッド、このステップの主なタスクは、無効語
  • を除去することです.
  • 2.第2のステップは、各語がテキストに現れる頻度を計算し、ハッシュテーブルを生成することです.ワード周波数は、1つのワードの重要性を決定するために使用される
  • 3.ワード周波数の数値に比例して1つのピクチャのレイアウトを生成し、クラスIntegralOccupancyMapはこのワードクラウドのアルゴリズムであり、ワードクラウドのデータ可視化方式の核心である.生成語の色、位置、方向等
  • 4.最後に、対応する語周波数で語群レイアウト図に画像を生成し、コアメソッドはgenerate_from_frequencies、generate()でもgenerate_でもfrom_text()はgenerate_に最終的に使用されます.from_frequencies 
  • 語群上の各語のシェーディングを完了し、デフォルトはランダムシェーディング
  • である.
  • 5.語の各種の増強機能の多くはwordcloudの構造関数によって実現することができ、中には22のパラメータが提供され、自分で拡張することもできる.

  •  
    wordcloud.WordCloudクラスのパラメータの説明
    class wordcloud.WordCloud(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9,mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None,background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling=0.5, regexp=None, collocations=True,colormap=None, normalize_plurals=True)
    パラメータfont_path:string//フォントパス、表示するフォントを表示する必要があるフォントパス+接尾辞名を書きます.例えば:font_path='黒体ttf’フォント内の文字の表示が指定されていなければwidth:int(default=400)/出力のキャンバス幅は、デフォルトで400ピクセルheight:int(default=200)/出力のキャンバス高さは、デフォルトで200ピクセルprefer_horizontal:float(default=0.90)/語水平方向レイアウトの出現頻度、デフォルト0.9(したがって語垂直方向レイアウトの出現頻度は0.1)mask:nd-array or None(default=None)/パラメータが空の場合、2 Dマスクを使用して語群を描画します.maskが空でない場合、設定された幅の高さは無視され、マスク形状はmaskに置き換えられます.scale:float(default=1)/キャンバスをスケールで拡大し、1.5に設定すると長さと幅が元のキャンバスの1.5倍になります.    min_font_size:int(default=4)/表示される最小フォントサイズfont_Step:int(default=1)/フォントステップ長、ステップ長が1より大きい場合は演算が速くなりますが、結果に大きな誤差が生じる可能性があります.    max_words:number(default=200)/表示する語の最大個数stopwords:set of strings or None//マスクが必要な語を設定し、空の場合は内蔵STOPWORDS background_を使用color:color value(default=“black”)//background_color='white、背景色は白.    max_font_size:int or None(default=None)//最大フォントサイズmode:string(default=”RGB”)//パラメータが“RGBA”でbackground_colorが空でない場合、背景は透明です.    relative_scaling:float(default=.5)/ワード周波数とフォントサイズの関連性color_func:callable,default=None//新しい色の関数を生成し,空の場合selfを用いる.color_func regexp:string or None(optional)/正規表現で入力されたテキストを区切るcollocations:bool,default=True//2つの単語の組み合わせが含まれているかcormap:string or matplotlib cormap,default="viridis"//各単語にランダムに色を割り当てるfuncでは、このメソッドは無視されます.
     
    例:
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Author      : 
    # @File        : test.py
    # @Software    : PyCharm
    # @description : XXX
    
    
    import jieba
    from os import path
    import matplotlib.pyplot as plt
    import numpy as np
    from PIL import Image
    from scipy.misc import imread
    from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
    
    
    def test_1():
        """
                   
        :return:
        """
        f = open("e:/shijing_guanju.txt", "r")
        t = f.read()
        f.close()
        ls = jieba.lcut(t)
    
        txt = " ".join(ls)
        w = WordCloud(
            width=1000, height=700,
            background_color="white",
            # font_path="MSYH.ttc"  #           ,         。    MSYH.ttc(    )
            font_path="simsun.ttc"  #         ,       
        )
        w.generate(txt)
        w.to_file("e:/word_cloud_1.png")  #        ,word_cloud_1.png
    
    
    def test_2():
        """
                  
        :return:
        """
        mask = imread("e:/china_map.jpg")  #       china_map.jpg
        excludes = {}
        f = open("e:/shijing_guanju.txt", "r")
    
        t = f.read()
        f.close()
        ls = jieba.lcut(t)
        txt = " ".join(ls)
    
        w = WordCloud(
            width=550, height=500,
            background_color="white",
            font_path="simsun.ttc",  #           ,         。    MSYH.ttc(    )
            mask=mask
        )
    
        w.generate(txt)
        w.to_file("e:/word_cloud_2.png")  #        ,word_cloud_1.png
    
    
    def test_3():
    
        #       
        abel_mask = np.array(Image.open("/home/djh/PycharmProjects/source/test.jpg"))
    
        #           
        text_from_file_with_apath = open('/home/djh/PycharmProjects/source/a.txt').read()
    
        #   jieba             
        word_list_after_jieba = jieba.cut(text_from_file_with_apath, cut_all=True)
        wl_space_split = " ".join(word_list_after_jieba)
        # my_word_cloud = WordCloud().generate(wl_space_split)       
        my_word_cloud = WordCloud(
            background_color='white',   #       
            mask=abel_mask,             #       
            max_words=200,              #          
            stopwords=STOPWORDS,        #      
            font_path='/home/djh/win_font/simkai.ttf',  #       ,          
            max_font_size=50,      #        
            random_state=30,       #             ,         
            scale=.5
        ).generate(wl_space_split)
    
        #           
        image_colors = ImageColorGenerator(abel_mask)
        # my_word_cloud.recolor(color_func=image_colors)
    
        #         
        plt.imshow(my_word_cloud)
        plt.axis("off")
        plt.show()
    
    
    def test_4():
        """
               
        :return:
        """
        f = open(u'txt/AliceEN.txt', 'r').read()
        wordcloud = WordCloud(background_color="white", width=1000, height=860, margin=2).generate(f)
    
        # width,height,margin        
        #      font_path        
        # background_color         ,       
    
        plt.imshow(wordcloud)
        plt.axis("off")
        plt.show()
    
        wordcloud.to_file('test.png')
        #     ,                     mask   
    
    
    def test_5():
        """
               
        :return:
        """
        d = path.dirname(__file__)
    
        # Read the whole text.
        text = open(path.join(d, 'alice.txt')).read()
    
        # read the mask / color image taken from
        # http://jirkavinse.deviantart.com/art/quot-Real-Life-quot-Alice-282261010
        alice_coloring = np.array(Image.open(path.join(d, "alice_color.png")))
    
        #      
        stopwords = set(STOPWORDS)
        stopwords.add("said")
    
        #       mask           
        wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
                       stopwords=stopwords, max_font_size=40, random_state=42)
        # generate word cloud
        wc.generate(text)
    
        # create coloring from image
        image_colors = ImageColorGenerator(alice_coloring)
    
        # show
        #     mask    ,                
        plt.imshow(wc, interpolation="bilinear")
        plt.axis("off")
        plt.figure()
        # recolor wordcloud and show
        # we could also give color_func=image_colors directly in the constructor
        #                   
        #                              
        plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
        plt.axis("off")
        plt.figure()
        plt.imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
        plt.axis("off")
        plt.show()
    
    
    if __name__ == '__main__':
        test_1()
        # test_2()
        # test_3()
        # test_4()
        # test_5()
        pass