精华内容
下载资源
问答
  • python绘制自定义形状词云

    千次阅读 2019-11-11 20:06:41
    利用python进行绘制词云 绘制词云的缘由: 在进相关主题分析的时候遇到了需要用到词云的地方。 情景:通过主题模型生成的主题分布是一系列的词分布,表现形式为“词和词对应的权重”。得到了主题分布以后想要通过...

    利用python进行绘制词云

    绘制词云的缘由:

    在进相关主题分析的时候遇到了需要用到词云的地方。
    情景:通过主题模型生成的主题分布是一系列的词分布,表现形式为“词和词对应的权重”。得到了主题分布以后想要通过这些词总结一下该主题的具体标签。因为结果中含有词和词对应的权重,所以想通过词云来更加直观的观察主题。
    注:在写该笔记的时候,参考了**简书《用Python实现一个词频统计(词云)图》**相关内容,并结合自己的数据情况做了修改和进一步尝试。

    python包准备:

    以下的python包是在本数据情况下使用的,参考的内容中有其他一些python包,用来做数据预处理使用。

    import numpy as np #用来将图片转换成数组
    import wordcloud #词云生成包
    from PIL import Image #词云形状图片处理包
    import matplotlib.pyplot as plt #python绘图包
    

    数据形式

    数据输出为列表形式,列表元素为元组,元组内容为主题序号、主题词分布。下面以topic 0为例。此处使用的不是词频,而是词的权重,意义相同。

    topic = (0, '0.134*"改装" + 0.054*"黑色" + 0.027*"求购" + 0.027*"位置" + 0.020*"更好" + 0.020*"减震" + 0.017*"自动挡" + 0.016*"实车" + 0.015*"发布" + 0.014*"周末" + 0.014*"一路" + 0.014*"回家" + 0.014*"刹车片" + 0.014*"无线" + 0.014*"模块" + 0.012*"咋样" + 0.011*"加个" + 0.011*"次" + 0.010*"行李架" + 0.009*"件" + 0.009*"帅" + 0.009*"刹车盘" + 0.009*"没人" + 0.009*"卡钳" + 0.008*"排气管"')
    

    进行预处理,转换成{词:权重,...} 的字典形式。

    word_dict = {}
    topic_ = topic[1].replace(' ','').replace('"','').split('+')
    for i in range(len(topic_)):
    	word_dict[topic_[i].split('*')[1]]=float(topic_[i].split('*')[0])
    print(word_dict) #输出字典查看一下形式
    
    {'改装': 0.134, '黑色': 0.054, '求购': 0.027, '位置': 0.027, '更好': 0.02, '减震': 0.02, '自动挡': 0.017, '实车': 0.016, '发布': 0.015, '周末': 0.014, '一路': 0.014, '回家': 0.014, '刹车片': 0.014, '无线': 0.014, '模块': 0.014, '咋样': 0.012, '加个': 0.011, '次': 0.011, '行李架': 0.01, '件': 0.009, '帅': 0.009, '刹车盘': 0.009, '没人': 0.009, '卡钳': 0.009, '排气管': 0.008}
    

    词云形状

    词云形状这里选择自定义,使用汽车形状如下图1.jpg
    在这里插入图片描述

    picture = np.arrany(Image.open('data/1.jpg')) #获取图片的三维数组表示
    word_cloud = wordcloud.WordCloud(
    	font_path='data/STXINGKA.TTF', #设置字体格式
    	mask = picture, #设置词云形状
    	max_words = 50, #设置最多显示词数
    	max_font_size = 100 #设置字体最大值)
    

    根据字典生成词云

    word_cloud.generate_from_frequencies(word_dict)
    image = word_cloud.to_image() #词云转换成图片
    image.show() #显示图片
    plt.axis('off')
    plt.imshow()
    plt.show() #plt的三行代码显示效果与image.show()相同
    

    得到的结果如图:
    在这里插入图片描述
    简单的词云图就完成了。

    参考:

    1. 用Python实现一个词频统计(词云)图 https://www.jianshu.com/p/28718ba04bc9?from=groupmessage
    展开全文
  • 如何用python自定义形状词云

    千次阅读 2020-06-17 16:28:39
    根据自定义形状和文本颜色构建图形词云,导入用户自定义词典,计算每个词出现的频率,并存入txt文件,然后根据词语出现的频率来决定字体放大或缩小的程度。 1.分词并统计词频。首先对分析的对象(即一段文本)进行...

    词云基于关键词出现的频率,可以直观地反映出一个文本、概念或想法中各个关键词的重要性大小。

    根据自定义的形状和文本颜色构建图形词云,导入用户自定义词典,计算每个词出现的频率,并存入txt文件,然后根据词语出现的频率来决定字体放大或缩小的程度。

    1.分词并统计词频。首先对分析的对象(即一段文本)进行分词,换句话说,就是把一句话拆成一个个词语。然后对词语重复出现的次数进行统计。
    2.根据词频绘图。根据词频统计结果,绘制词云,频率高的词字体更大。
    在这里插入图片描述
    在这里插入图片描述

    # coding:utf-8
    from os import path
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import colors
    from wordcloud import WordCloud, STOPWORDS
    from collections import Counter
    import jieba
    
    
    # 二值化处理
    def cv():
        im = Image.open("1.png")
        Lim = im.convert('L')
        threshold = 185
        table=[]
        for i in range(256):
            if i<threshold:
                table.append(0)
            else:
                table.append(1)
        bim = Lim.point(table, '1')
        bim.save('11.jpg')
    
    
    # 分词操作
    def WordSegment(text):
        jieba.load_userdict(path.join(path.dirname(__file__), 'userdict.txt'))  # 导入用户自定义词典
        # 计算每个词出现的频率,并存入txt文件
        jieba_word=jieba.cut(text,cut_all=False)  # cut_all是分词模式,True是全模式,False是精准模式,默认False
        data = []
        for word in jieba_word:
            data.append(word)
        dataDict = Counter(data)
        with open('词频统计.txt','w') as fw:
            for k,v in dataDict.items():
                fw.write("%s,%d\n" % (k,v))
        jieba_word=jieba.cut(text,cut_all=False) # cut_all是分词模式,True是全模式,False是精准模式,默认False
        seg_list=' '.join(jieba_word)
        return seg_list
    
    
    # 生成词云
    def Wordcloud(text):
        # 设置显示方式
        d=path.dirname(__file__)
        img = np.array(Image.open(path.join(d, "11.jpg")))
        font_path=path.join(d, "msyh.ttf")
        stopwords = set(STOPWORDS)
        color_list = ['#FF0000','#FF0000','#DC143C']  # 建立颜色数组
        colormap = colors.ListedColormap(color_list)  # 调用
        wc = WordCloud(background_color="white",  # 设置背景颜色
                       max_words=2000,  # 词云显示的最大词数
                       mask=img,  # 设置背景图片
                       stopwords=stopwords,  # 设置停用词
                       font_path=font_path,  # 兼容中文字体,不然中文会显示乱码
                       colormap=colormap,  # 设置颜色
                       )
        wc.generate(text)
        wc.to_file(path.join(d, "wordcloud3.jpg"))
        # 显示图像
        plt.imshow(wc, interpolation='bilinear')
        plt.axis("off")  # 关掉图像的坐标
        plt.show()
    
    
    if __name__ == '__main__':
        cv();
        d = path.dirname(__file__)
        text = open(path.join(d, '十九大报告全文.txt'), encoding="utf-8").read()
        # 若是中文文本,则先进行分词操作
        text = WordSegment(text)
        # 生成词云
        Wordcloud(text)
    
    

    代码中的文件资源:
    链接:https://pan.baidu.com/s/1lD1rGgrj4TPQAiRCjO0cDw
    提取码:xovn

    展开全文
  • 大家好~请问: 文本已经清洗和分词,词语带有权重 ...这种情况应该如何用python自定义形状词云图呢? 谢谢啦~~! ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570535238_367319.png)
  • 来源于:Python生成中文词云图 #添加自定义分词 import jieba from os import path #用来获取文档的路径 #词云 from PIL import Image import numpy as np import matplotlib.pyplot as plt #词云生成工具 fr...

    前两个代码来自于网上对于词云的处理,代码3是自己改进的内容。词云这玩意,有一个关键是要看自己的找的图片是否美观,因为生成的词云是以背景照片的形状为模板的,遇到非白色的像素才会显示出来,图片的颜色会自动影响词云本身的颜色属性。

    代码1

    来源于:Python生成中文词云图

    #添加自定义分词
    
    import jieba
    from os import path  #用来获取文档的路径
    
    #词云
    from PIL import Image
    import numpy as  np
    import matplotlib.pyplot as plt
    #词云生成工具
    from wordcloud import WordCloud,ImageColorGenerator
    #需要对中文进行处理
    import matplotlib.font_manager as fm
    
    #背景图
    bg=np.array(Image.open("tuoyuan.jpg"))
    
    #获取当前的项目文件加的路径
    d=path.dirname(__file__) 
    #读取停用词表
    stopwords_path='stopwords.txt'
    #添加需要自定以的分词
    # jieba.add_word("叶文洁")
    
    #读取要分析的文本
    text_path="ziranyuyan.txt"
    #读取要分析的文本,读取格式
    text=open(path.join(d,text_path),encoding="utf8").read()
    #定义个函数式用于分词
    def jiebaclearText(text):
        #定义一个空的列表,将去除的停用词的分词保存
        mywordList=[]
        #进行分词
        seg_list=jieba.cut(text,cut_all=False)
        #将一个generator的内容用/连接
        listStr='/'.join(seg_list)
        #打开停用词表
        f_stop=open(stopwords_path,encoding="utf8")
        #读取
        try:
            f_stop_text=f_stop.read()
        finally:
            f_stop.close()#关闭资源
        #将停用词格式化,用\n分开,返回一个列表
        f_stop_seg_list=f_stop_text.split("\n")
        #对默认模式分词的进行遍历,去除停用词
        for myword in listStr.split('/'):
            #去除停用词
            if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
                mywordList.append(myword)
        return ' '.join(mywordList)
    text1=jiebaclearText(text)
    #生成
    wc=WordCloud(
            background_color="white", #设置背景为白色,默认为黑色
            width=990,              #设置图片的宽度
            height=440,              #设置图片的高度
            margin=10,               #设置图片的边缘
    
        max_font_size=50,
        random_state=30,
        font_path='C:/Windows/Fonts/simkai.ttf'   #中文处理,用系统自带的字体
        ).generate(text1)
    #为图片设置字体
    my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
    #产生背景图片,基于彩色图像的颜色生成器
    image_colors=ImageColorGenerator(bg)
    #开始画图
    plt.imshow(wc)
    #为云图去掉坐标轴
    plt.axis("off")
    #画云图,显示
    #保存云图
    wc.to_file("tuoyuan3.png")
    

    代码2

    来源于:基于python的词云生成

    import jieba
    from os import path  #用来获取文档的路径
    
    #词云
    from PIL import Image
    import numpy as  np
    import matplotlib.pyplot as plt
    #词云生成工具
    from wordcloud import WordCloud,ImageColorGenerator
    #需要对中文进行处理
    import matplotlib.font_manager as fm
    
    #背景图
    bg=np.array(Image.open("man.jpg"))
    
    #获取当前的项目文件加的路径
    d=path.dirname(__file__) 
    #读取停用词表
    stopwords_path='stopwords.txt'
    #添加需要自定以的分词
    jieba.add_word("侯亮平")
    jieba.add_word("沙瑞金")
    jieba.add_word("赵东来")
    
    #读取要分析的文本
    text_path="人民的名义.txt"
    #读取要分析的文本,读取格式
    text=open(path.join(d,text_path),encoding="utf8").read()
    #定义个函数式用于分词
    def jiebaclearText(text):
        #定义一个空的列表,将去除的停用词的分词保存
        mywordList=[]
        #进行分词
        seg_list=jieba.cut(text,cut_all=False)
        #将一个generator的内容用/连接
        listStr='/'.join(seg_list)
        #打开停用词表
        f_stop=open(stopwords_path,encoding="utf8")
        #读取
        try:
            f_stop_text=f_stop.read()
        finally:
            f_stop.close()#关闭资源
        #将停用词格式化,用\n分开,返回一个列表
        f_stop_seg_list=f_stop_text.split("\n")
        #对默认模式分词的进行遍历,去除停用词
        for myword in listStr.split('/'):
            #去除停用词
            if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
                mywordList.append(myword)
        return ' '.join(mywordList)
    text1=jiebaclearText(text)
    #生成
    wc=WordCloud(
        background_color="white", 
        max_words=200,
        mask=bg,            #设置图片的背景
        max_font_size=60,
        random_state=42,
        font_path='C:/Windows/Fonts/simkai.ttf'   #中文处理,用系统自带的字体
        ).generate(text1)
    #为图片设置字体
    my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
    #产生背景图片,基于彩色图像的颜色生成器
    image_colors=ImageColorGenerator(bg)
    #开始画图
    plt.imshow(wc.recolor(color_func=image_colors))
    #为云图去掉坐标轴
    plt.axis("off")
    #画云图,显示
    plt.figure()
    #为背景图去掉坐标轴
    plt.axis("off")
    plt.imshow(bg,cmap=plt.cm.gray)
    
    #保存云图
    wc.to_file("man.png")
    

    代码3

    # #!/usr/bin/env python
    # #-*- coding:utf-8 -*-
    #
    import matplotlib.pyplot as plt
    from PIL import Image as image
    import jieba
    import numpy
    from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
    
    
    # todo 1 通过jieba工具将中文文本做处理,并返回指定格式的内容
    def chinese_jieba(text):
        wordlist_jieba = jieba.cut(text)
        text_jieba = ' '.join(wordlist_jieba)
        return text_jieba
    
    # todo 2 主函数
    def main(filename):
        with open(filename,'rb') as f:
            text = chinese_jieba(f.read().decode())
    
        bg = numpy.array(image.open("./image/cloudword.png"))      #  背景图,设置遮罩层
    
        stopwords = set(STOPWORDS)
        stopwords = stopwords.union(set(['经与', '失败']))   # 将不想在词云上出现的词,放入集合中,也就是设置固定词个数为0
    
        wordclod = WordCloud(
            background_color='white',  #  设置背景颜色,默认是黑色
            width=990,                  # 设置图片的宽度
            height=440,                 # 设置图片的高度
            margin=0,                  # 设置图片的边缘
            max_words=200,       # 关键字的个数
            max_font_size=80,    # 字体大小
            font_path='C:/Windows/Fonts/simkai.ttf' ,  # 设置中文识别
            mask=bg,        # 添加遮罩层,也就是设置词云形状
            stopwords=stopwords,  # 过滤固定的词
        ).generate(text)          # 将text里面所有的词统计,产生词云
    
        image_colors=ImageColorGenerator(bg)
        plt.imshow(wordclod.recolor(color_func=image_colors))
        # plt.imshow(wordclod)
        plt.axis('off')
        plt.show()
        wordclod.to_file('wordcloud.jpg')  # 保存图片
    
    
    # if __name__ == "__main__":
    #     filename = r'术语\user_dict.txt'
    #     main(filename)
    
    
    
    展开全文
  • 代码可直接运行,资源额外提供两种字体,25种词云形状素材
  • R语言绘制自定义形状词云

    千次阅读 2020-01-14 17:53:19
    R语言的wordcloud2绘制自定义形状词云图,为什么无法绘制,进行研究后,发现wordcloud2包在2018年1月3号后就无法再进行自定义词云图绘制了,但是:将包的版本换成到之前的老版本的wordcloud2版本包是可以重新绘制...

    R语言绘制自定义形状词云图方法

    程序结果如下:

    # 常规直接使用install.packages("wordcloud2")是无法进行自定义形状的词云图绘制,必须降低包的版本,使用之前的wordcloud2老版本原始包
    library(wordcloud2)
    batman = system.file("examples/3.png",package = "wordcloud2")
    ###读取形状图片,注意图片默认放在wordclou2的sample包中,浩彬老撕的路径如下:"d:/Program Files/R/R-3.3.0/library/wordcloud2/examples/batman.png"
    wordcloud2(demoFreq, figPath = batman, size = 1,color = "black")
    

    R语言绘制自定义形状词云图结果

    在这里插入图片描述
    .duibi 在这里插入图片描述

    为什么wordcloud2无法绘制自定义词云图

    原因:包版本不兼容更新
    wordcloud2包在2018年1月3号后就无法再进行自定义词云图绘制了,但是:将包的版本换成到之前的老版本的wordcloud2版本包是可以重新绘制自定义词云图的。可以直接官网在Old sources下载之前老版本的包然后离线安装这个包。
    在这里插入图片描述
    换回新的低版本wordcloud2_0.2.0即可绘制,旧版本包的地址:
    链接:https://pan.baidu.com/s/1w96BVe1mbiKraTpoqtLhEg
    提取码:19e9
    在这里插入图片描述

    wordcloud2包老版本安装方法

    安装旧版本包方法:先删除原来library中的wordcloud2包版本,然后手动从windows本地路径对包进行安装:其中,RGUI和RStudio都可以离线手动安装

    RGUI离线安装

    在这里插入图片描述

    RStudio离线安装

    在这里插入图片描述
    这次用的数据是wordcloud2的示例数据,当然我们也可以使用自定义数据

    读取形状图片,注意图片默认放在wordclou2的sample包中,路径如下:“D:/Program Files/R/R-3.3.0/library/wordcloud2/examples/batman.png”

    batman = system.file("examples/batman.png",package = "wordcloud2") ## batman.png图片可以放在wordclou2的examples目录下,也可以放在本地其它位置。
    wordcloud2(demoFreq, figPath = batman, size = 1,color = "black") ## demoFreq为系统自带数据集,该数据集可进行更换
    

    其中, 绘制词云图demoFreg即为所用的数据,figPath = batman为所用图片

    案例

    原始图

    在这里插入图片描述
    图:2.png

    词云自定义绘制结果

    library(wordcloud2)
    batman = system.file("examples/2.png",package = "wordcloud2")
    wordcloud2(demoFreq, figPath = batman, size = 1)
    

    在这里插入图片描述

    对比Python绘制自定义词云图结果

    参考资料1——python制作词云图:https://blog.csdn.net/moshanghuali/article/details/84667136
    参考资料2——Python绘制自定义词云图:https://blog.csdn.net/tandelin/article/details/103495605

    展开全文
  • python中文词云

    2020-11-21 17:56:19
    中文词云自定义形状 import jieba import wordcloud from imageio import imread file=open('xsd.txt','r') txt=file.read() ls=jieba.lcut(txt) file.close() ls=' '.join(ls) mk=imread('five.png') w=...
  • python英文词云

    2020-11-21 17:52:32
    英文词云自定义形状 import wordcloud from imageio import imread mk=imread('five.png') file=open('hamlet.txt','r') txt=file.read() file.close() w=wordcloud.WordCloud(mask=mk,background_color='white')...
  • Python自定义词云形状和文本颜色 ===================== 问题描述:制作词云图,根据蒙板图像确定词云形状,根据蒙板图像中像素的颜色确定词云图中相同位置上文字的颜色。 参考代码: Python资源...
  • 如何自己控制词云的颜色,形状,以及控制出现在词云里的词频呢? 见如下代码 from wordcloud import WordCloud import PIL.Image as image import numpy as np import jieba from matplotlib import colors # 分词 ...
  • 使用python绘制词云

    2019-10-08 18:32:49
    但是都不怎么完美,有些不支持中文,有的中文词频统计得莫名其妙、有的不支持自定义形状、所有的都不能自定义颜色 于是网上找了一下,决定用python绘制词云,主要用到的是wordcloud库,安装只需要pip isntall ...
  • Python词云

    千次阅读 2016-09-07 12:50:01
    但是这些工具都不太好用(有的不支持中文、有的中文词频统计得莫名其妙、有的不支持自定义形状、所有的都不能自定义颜色,尽管可能有一些主题可选)。想要深度定制,必须写代码啊。我们使用wordcloud包# -*- coding:...
  • 步骤 1.用到的库: import jieba from PIL import Image ...参数mask是来设置词云形状的,可以自定义设置,最好是已经填充好了颜色的图片,不然可能显示不出词云图。通过导入本地图片,用的背景图是这
  • 这个wordcloud包可以根据自己的需求自定义词云形状,然后词云其实逻辑比较简单,就是做词汇的词频统计,然后就是可视化的部分,但是如果自己去实现肯定是一个比较麻烦的事,这个包用着还不错,就是偶尔会有一点点...
  • 最近看到可视化的词云,看到网上也很多这样的工具,但是都不怎么完美,有些不支持中文,有的中文词频统计得莫名其妙、有的不支持自定义形状、所有的都不能自定义颜色,于是网上找了一下,决定用python绘制词云
  • from imageio import imread #导入特定形状,用户可以自定义其他图形,我这里导入了某人的照片,注意照片背景要为白色 mask = imread("cwz.png") #读取png图片 f = open("cwz.txt", "r", encoding="utf-8") #只读形
  • 可以使用 Font Awesome 提供的免费图标更改词云形状; 通过 palettable 更改调色板以自定义风格,更改背景颜色; 添加梯度使颜色按照特定方向流动。 1、基本说明 首先安装stylecloud和jieba库,...
  • python网络编程项目 根据豆瓣电影url获取电影的ID 如图url中的30306570就是电影《囧妈》的ID ...词云:(可自定义词云形状) 代码如下: #-* -coding=UTF-8 -*- from tkinter import * import urllib.request fr...
  • 选自Github机器之心编译stylecloud 是一个 Python 包,它基于流行的 word_cloud 包,并添加了一些有用的功能,从而创建出独特的词云。stylecloud ...
  • 选择文档(中文、英文均可)即可生成词云,支持自定义 停用词词典,支持自定义遮罩形状。 详细说明: “词云”就是数据可视化的一种形式,给出一段文本,根据文本中词语的出现频率而生成的一幅图像,从而过滤掉大量...
  • 对于编程高手,通过本课可以进一步熟悉Python的开源社区、计算生态、面向对象,自定义自己专属风格的词云词云的应用场景 会议记录 海报制作 PPT制作 生日表白 数据挖掘 情感分析 用户画像 微信聊天记录分析 微博...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

python词云自定义形状

python 订阅