python + pyecharts + wordcloud数据可视化

之前的文章写到了requests + 多进程对Boss直聘网的职位进行爬取,这次就对之前爬取的数据,进行可视化分析。

  • Boss直聘网爬虫的文章在这里:

https://blog.csdn.net/weixin_42350948/article/details/82288076


进入正题:本篇文章主要讲python + pyecharts + wordcloud对爬取的数据进行数据分析以及可视化展示:


上代码:
1、首先是各个包的导入以及,job_analysis类的的初始化:

import pyecharts 
import pymongo
import os
import jieba.analyse
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator,STOPWORDS
class job_analysis():
    def __init__(self):
        self.client = pymongo.MongoClient("192.168.186.128:27017")
        self.boss_db = self.client['Boss2']
        self.coll = self.boss_db['boss_python']
        #windows下为__file__,linux下为__name__
        self.file = os.path.dirname(__name__)
        self.city_list = ['北京','上海','广州','深圳','杭州','天津','西安','苏州','武汉','厦门','长沙','成都','郑州','重庆']
        self.experience_list = ['应届生','经验不限','1年以内','1-3年','3-5年','5-10年','10年以上']
        self.SZ_region_list = ['南山区','罗湖区','龙华区','盐田区','宝安区','龙岗区','福田区']

2、然后对数据库中的数据进行分类统计,包括各热门城市的数据数量,平均工资,要求工作经验进行统计:

统计各市的数据数量
    def get_AnalysisNum(self):
        AnalysisNum_list = []
        for index,region in enumerate(self.city_list):
            print(region)
            num = self.coll.find({"job_address":region}).count()
            AnalysisNum_list.append(num)
            print(region,num)
        return (self.city_list,AnalysisNum_list)

    #统计各市的平均工资
    def get_Avg_Salary(self):
        Avg_Salary_list = []
        for index,region in enumerate(self.city_list):
            Avg_Salary_dic = self.coll.aggregate([{'$match':{'job_address':region}},{'$group':{'_id':'$job_address','counter':{'$sum':1},'avg_Salary':{'$avg':'$job_salary'}}}])
            #print(int(list(Avg_Salary)[0]['avg_Salary']))
            #这个地方Avg_Salary是迭代式,取完就没有了
            avg_salary = round(list(Avg_Salary_dic)[0]['avg_Salary'],2)
            Avg_Salary_list.append(avg_salary)
           # print(region,salary)
        return(self.city_list,Avg_Salary_list)

3、最后是对分类统计的数据进行可视化展示,主要运用了pyecharts和wordcloud库,部分代码如下:

    # 展示条形图
    def show_Bar(self,title,attr,value,path):
        bar = pyecharts.Bar(background_color='white')
        #bar.add(title,attr,value,is_convert=False, is_label_show=True, label_text_size=18, is_random=True)
        #热门城市
        #label_color=[]放在后面就只设置条形图的颜色 yaxis_max=350,
        bar.add(title,attr,value,is_label_show=True,legend_text_size=18,label_text_color=["#000"],xaxis_label_textcolor='#000',yaxis_label_textcolo='#000',is_random=True,xaxis_line_width=1.5,yaxis_line_width=1.5)
        bar.render(path=os.path.join(self.file,path))    
    # 展示饼图
    def show_Pie(self, title, attr, value,path):
        from pyecharts import Pie
        pie = Pie(title,background_color='#fff')
        #legend_top='center'图裂位于上下中间位置,radius为半径
        pie.add(title,attr,value,radius=[40, 75],legend_top='center',is_label_show=True,legend_orient='vertical',legend_pos="left")
        pie.render(os.path.join(self.file,path))
        #pie.render()


    def showWorkCloud(self,content,image_filename,font_filename,out_filename):
        #d = os.path.dirname(__file__)
        # content = open(path.join(d, filename), 'rb').read()
        # 基于TF-IDF算法的关键字抽取, topK返回频率最高的几项, 默认值为20, withWeight为是否返回关键字的权重
        tags = jieba.analyse.extract_tags(content, topK=100, withWeight=False)
        text = " ".join(tags)
        print(os.path.join(self.file, image_filename))
        # 需要显示的背景图片
        img = imread(os.path.join(self.file,image_filename))
        # 指定中文字体, 不然会乱码的
        wc = WordCloud(
                       # 解决显示口字型乱码问题
                       font_path=os.path.join(self.file,font_filename),
                       # 背景颜色
                       background_color='#fff',
                       # 词云形状,
                       mask=img,
                       # 允许最大词汇
                       max_words=450,
                       # 最大号字体,如果不指定则为图像高度
                       max_font_size=100,
                       # 画布宽度和高度,如果设置了msak则不会生效
                       # width=600,
                       # height=400,
                       margin=2,
                       #使用内置的屏蔽词,再添加'苟利国
                       #stopwords=STOPWORDS.add('岗位职责','岗位描述'),
                       # 词语水平摆放的频率,默认为0.9.即竖直摆放的频率为0.1
                       prefer_horizontal=0.9,
                       # 为每个词返回一个PIL颜色
                       random_state=42
                       )
        wc.generate(text)
        # 基于彩色图像生成相应彩色
        img_color = ImageColorGenerator(img)
        # 显示图片
        plt.imshow(wc)
        # 绘制词云
        plt.figure()
        plt.imshow(wc.recolor(color_func=img_color))
        # 关闭坐标轴
        plt.axis("off")
        #plt.show()
        wc.to_file(os.path.join(self.file, out_filename))

最后得到了数据可视化图:

1.各城市样本数量

这里写图片描述
2.各城市Python职位平均工资

这里写图片描述
3. 各城市python要求的工作经验占比

这里写图片描述

4.深圳各区python职位数量占比

这里写图片描述
5.深圳市对python职位的经验要求

这里写代码片

6.对岗位职责,岗位描述等关键词生成的词云

这里写图片描述


数据可视化还有很多可以施展的地方,这里仅仅作为一个展示,具体其他的可以参照pyecharts的官方文档:https://mp.csdn.net/mdeditor


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值