基于Python的大数据分析基础(十)---词云(wordcloud)

9 词云

工 具库结巴+wordcloud:
    pip3 install jieba
    pip3 install wordcloud

 9.1.jieba分词: 

    这里的分词主要是真多中文分词(Chinese Word Segmentation)
   1.jieba 分词的主要用法:
    jieba.cut(s,cut_all=True)
        参数: s 需要分词的文本
              cut_all  是否采用全模式,True采用
              不写cut_all 默认精确模式
    jieba.cut_for_search(s)
              粒度较细,适合搜索引擎构建倒排索引

    两者返回的都是generator迭代器(for循环 或 list()强转)

  2.jieba.load_userdict(file_name)
    file_name 为文件类对象或自定义词典的路径
    词典格式:一个词占一行,每一行为词语、[词频]、[词性]三部分,空格隔开,顺序不可颠倒
            词频越高,成词概率越高,词性

# -*- coding: UTF-8 -*-
'''
@Author :Jason
这里的分词主要是真多中文分词(Chinese Word Segmentation)
1.jieba 分词的主要用法:
    jieba.cut(s,cut_all=True)
        参数: s 需要分词的文本
              cut_all  是否采用全模式,True采用
              不写cut_all 默认精确模式
    jieba.cut_for_search(s)
              粒度较细,适合搜索引擎构建倒排索引

    两者返回的都是generator迭代器(for循环 或 list()强转)

2.jieba.load_userdict(file_name)
    file_name 为文件类对象或自定义词典的路径
    词典格式:一个词占一行,每一行为词语、[词频]、[词性]三部分,空格隔开,顺序不可颠倒
            词频越高,成词概率越高,词性

'''
import jieba
from collections import Counter
from pprint import pprint

class JiebaFunc(object):
    def cut(self):
        seg_list = jieba.cut("南京今天的天气是多云转小雨,有点冷!",cut_all=True)
        print("全模式:","# ".join(seg_list))
        #全模式: 南京# 今天# 的# 天气# 是# 多云# 转小# 小雨# # # 有点# 冷# #
        print("精确模式:","# ".join(jieba.cut("南京今天的天气是多云转小雨,有点冷!",cut_all=False)))
        #精确模式: 南京# 今天# 的# 天气# 是# 多云# 转# 小雨# ,# 有点# 冷# !
    def cut_for_search(self):
        print("cut_for_search:","# ".join(list(jieba.cut_for_search("南京今天的天气是多云转小雨,有点冷!"))))
        #cut_for_search: 南京# 今天# 的# 天气# 是# 多云# 转# 小雨# ,# 有点# 冷# !
    def termFrequency(self):
        text = open(r'./files/content.txt',encoding="utf-8").read()
        # pprint(Counter(text).most_common(10)) #从结果看出没有过滤的话很多都是一个字的没有意思的词
        '''
        [('【', 116),
         ('】', 116),
         ('标', 106),
         ('题', 106),
         ('\n', 104),
         (':', 102),
         ('"', 100),
         ('>', 100),
         ('学', 98),
         (',', 76)]
        '''
        len_text = [x for x in jieba.cut(text) if len(x)>2]
        pprint(Counter(len_text).most_common(10))
        '''
        [('中北大学', 28),
         ('毕业生', 12),
         ('2016', 10),
         ('跳蚤市场', 10),
         ('校园网', 8),
         ('怎么样', 8),
         ('毕业典礼', 4),
         ('文艺晚会', 4),
         ('隆重举行', 4),
         ('越来越', 4)]
        '''
    def load_userdict(self):
        txt = "欧阳娜娜是一名很优秀的足球运动员,带领中国足球拿下了巴西世界杯的第一个冠军,第二次进入世界排名前32强。因此被破例升为创新办主任"
        # pprint("# ".join(jieba.cut(txt)))
        #('欧阳# 娜娜# 是# 一名# 很# 优秀# 的# 足球# 运动员# ,# 带领# 中国# 足球# 拿下# 了# 巴西# 世界杯# 的# 第一个# 冠军# '',# 第二次# 进入# 世界排名# 前# 32# 强')
        jieba.load_userdict("./files/user_dict.txt")
        pprint("# ".join(jieba.cut(txt))) #这里有点奇怪
        #('欧阳# 娜娜# 是# 一名# 很# 优秀# 的# 足球# 运动员# ,# 带领# 中国# 足球# 拿下# 了# 巴西# 世界杯# 的# 第一个# 冠军# '
        # ',# 第二次# 进入# 世界排名# 前# 32# 强# 。# 因此# 被# 破例# 升# 为# 创新办# 主任')

if __name__ == "__main__":
    JB = JiebaFunc()
    JB.load_userdict()

9.2 词云wordcloud

wordcloud的基本用法

wordcloud.WordCloud(font_path = None ,#字体路劲,如 font_path="黑体.ttf"
                        width=400 , #输出画布宽度,默认400像素
                        height=200 , #输出画布高度,默认200像素
                        margin=2 , #画布偏移,词语边缘距离,默认2像素
                        ranks_only = None , #是否只用词频排序而不是实际词频统计值,默认None
                        prefer_horizontal= 0.9,#float,词语水平方向排版出现的频率
                        mask = None , #None二维遮罩,
                        scale = 1, #float,按比例进行放大画布
                        color_func = None , #callable,default=None,生成新颜色的函数,如果为空,则使用slef.color_func
                        max_words = 200 ,#默认200,要显示词的最大数
                        min_font_size= 4,#显示最小的字体大小
                        stopwords = None , #屏蔽不展示的词,
                        random_state = None , #
                        background_color = "black", #背景颜色,默认黑色
                        max_font_size = None , #最大字体大小
                        font_step =l , #字体步长
                        mode = "RGB", #默认RGB,当参数为RGBA并且bk_colot不为空,背景为透明
                        relative_scaling=0.5 , #词频和字体大小的关联性
                        regexp=None, #使用正则表达式分割
                        collocations=True, #是否包括两个词的搭配
                        colormap=None, #给每个单词随机分配颜色,若指定颜色,该方法忽略
                        normalize_plurals=True #是否移除单词末尾的's',默认True
                        )
关于词云的方法:
    generate(text) #根据文本生成词云
    fit_words(frequencies) #根据词频生成词云
    generate_from_frequencies(frequencies[,]) #根据词频生成词云
    to_file(filename) #输出到文件
    to_array()  #转化为numpy array
# -*- coding: UTF-8 -*-
'''
@Author :Jason
@Date   :2019/11/19 12:30
@Desc   :Crate By Jason
'''
import jieba
from wordcloud import WordCloud
from matplotlib import pyplot as plt

s1 = open("./files/Text.txt",encoding="utf-8",errors="ignore").read()

word_list = [" ".join(jieba.cut(s1))]
# print(word_list)
new_text = " ".join(word_list)
print(new_text)
wordcloud = WordCloud(font_path="simhei.ttf",background_color="black").generate(new_text)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

 初步图像如图:

                               

                                                                     文本词云图

9.3 背景轮廓词云图

# -*- coding: UTF-8 -*-
'''
@Author :Jason
'''
import jieba
from wordcloud import WordCloud,STOPWORDS
from PIL import Image
from scipy.misc import imread
import matplotlib.pyplot as plt

content = list(open("./files/Text.txt",encoding="utf-8"))

new_text = " ".join([' '.join(jieba.cut(sentence=sentence)) for sentence in content])

pac_mask = imread('./files/1.png')
wordcloud = WordCloud(font_path="simhei.ttf",background_color="black",max_words=2000,mask=pac_mask).generate(new_text)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
wordcloud.to_file("./files/词云轮廓.png")

背景图

                                

背景轮廓词云图:

                             

选图不好,换了张图,结果背景轮廓词云图如下:

                               

9.4 根据词频生成词云

# -*- coding: UTF-8 -*-
'''
@Author :Jason
'''
import jieba
from PIL import Image
from wordcloud import WordCloud,STOPWORDS
from scipy.misc import imread
from collections import Counter
import matplotlib.pyplot as plt

content = open("./files/Text.txt",encoding="utf-8")

word_list = [" ".join(jieba.cut(sentence=sentence)) for sentence in list(content)]
new_text = " ".join(word_list)
con_words = [x for x in jieba.cut(new_text) if len(x) > 2]
frequencies = Counter(con_words).most_common()
frequencies = dict(frequencies)
pac_mask = imread("./files/1.png")

wordcloud = WordCloud(font_path="simhei.ttf",background_color="white",max_words=2000,mask=pac_mask).fit_words(frequencies)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

wordcloud.to_file("./files/词频生成词云.png")

词频生成的词云图:

                           

对比背景轮廓图,可以看出词云中的字体还是有很大的区别的。 

参照:《基于Python的大数据分析基础及实战》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值