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では、このメソッドは無視されます.
例:
語群可視化:インストールモジュールwordcloud:pip install wordcloud
語雲は文字雲とも呼ばれ、テキストデータに出現する頻度の高い「キーワード」の視覚的な際立った表現であり、キーワードのレンダリングを形成して雲のようなカラー画像を形成し、テキストデータの主な表現意味を一目で理解することができる.
インストール完了後(コマンドライン使用方法)wordcloud_cli --text in.txt --imagefile out.png --mask in.png textは語群のソースで、maskは背景フレームワークで、imagefileが出力したファイルwordcloud_cli--helpサポートされているすべてのコマンドパラメータを表示
wordcloud生成語群の原理概要
wordcloud生成語クラウドの原理は複雑ではなく、大きく5つのステップに分かれています(具体的にはソースコードを自分で見ることができます):
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