词云加显示条形图

import pandas as pd #数据库操作
import numpy as np
from collections import Counter

import matplotlib.pyplot as plt #绘图
import jieba
from scipy.misc import imread
from wordcloud import WordCloud #词云可视化
import matplotlib as mpl #配置字体
from pyecharts import Geo #地理图
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# 配置绘图风格
plt.rcParams["axes.labelsize"]=16 #axes是轴
plt.rcParams["xtick.labelsize"]=14 #xtick是刻度
plt.rcParams["ytick.labelsize"]=14
plt.rcParams["legend.fontsize"]=12#legend输出字怎么设置字体大小
plt.rcParams["figure.figsize"]=[15,15] #显示图像的最大范围
plt.title("智联招聘python岗位学历要求")
# plt.show()
#数据预览
df=pd.read_csv('all_results.csv',encoding='utf-8')
# 使用head查看前几行数据(默认是前5行),不过你可以指定前几行
# 使用tail查看后2行数据
#print df.tail(2)
#show_data=df.head(3)
#barh 横着的条形图
#下面进行计数统计,注意得到的是按照出现的频率降序排列
#value_counts还是一个顶级的pandas方法。可用于任何是数组或者序列
#rot 旋转刻度标签(0-360度)
# df['qualifications'].value_counts().plot(kind='barh', rot=0)
# plt.show()
#
# plt.title("智联招聘python岗位工作经验要求")
# df['job_experience'].value_counts().plot(kind='bar', rot=0,color='r')
# plt.show()
stopwords = ['PYTHON','python','Python','工程师','(',')','/'] # 停止词
finallist=[]
seg_list=list(df["job_description"])
info_attr = [x for x in jieba.cut(''.join(seg_list)) if len(x) >= 2 and x not in stopwords]  # 这里的x.word为词本身,x.flag为词性
print(Counter(info_attr).most_common(100))



# for seg in seg_list:
#         if seg not in stopwords and len(seg.strip())>1:
#             print(seg)
#             finallist.append(seg)
def get_topn_words(words, topn):
    c = Counter(words).most_common(topn)
    top_words_with_freq = {}
    with open('top{0}_words.txt'.format(topn), 'w+') as f:
        for x in c:
            f.write('{0},{1}\n'.format(x[0], x[1]))
            top_words_with_freq.setdefault(x[0], x[1])
    return top_words_with_freq
def generate_word_cloud(img_bg_path, top_words_with_freq, font_path, to_save_img_path, background_color='white'):
    # 读取背景图形
    img_bg = imread(img_bg_path)

    # 创建词云对象
    wc = WordCloud(font_path=font_path,  # 设置字体
                   background_color=background_color,  # 词云图片的背景颜色,默认为白色
                   max_words=100,  # 最大显示词数为1000
                   mask=img_bg,  # 背景图片蒙版
                   max_font_size=50,  # 字体最大字号
                   random_state=30,  # 字体的最多模式
                   width=1000,  # 词云图片宽度
                   margin=5,  # 词与词之间的间距
                   height=700)  # 词云图片高度

    # 用top_words_with_freq生成词云内容
    wc.generate_from_frequencies(top_words_with_freq)

    # 用matplotlib绘出词云图片显示出来
    plt.imshow(wc)
    plt.axis('off')
    plt.show()

    # 如果背景图片颜色比较鲜明,可以用如下两行代码获取背景图片颜色函数,然后生成和背景图片颜色色调相似的词云
    # img_bg_colors = ImageColorGenerator(img_bg)
    # plt.imshow(wc.recolor(color_func = img_bg_colors))

    # 将词云图片保存成图片
    wc.to_file(to_save_img_path)
generate_word_cloud('bg.jpg', get_topn_words(info_attr,500), 'yahei.ttf', 'santi_cloud.png')

  

posted @ 2018-03-06 22:51  公众号python学习开发  阅读(297)  评论(0编辑  收藏  举报