Python爬取招聘信息构造字典进行分词生成统计图可视化

首先我们先看看数据吧

数据是最近按周期爬取的, 有效数据18000
在这里插入图片描述 目的: 我们的目的是要知道关于Python就业有哪些需要用到的技术, 比如说后端是Flask用的多还是Django或者Tornado用的比较多, 深度学习框架是TensorFlow用的多还是caffe或是Mxnet等等…

首先我们要构造分词字典

  ls_add = ['SQL', 'C++', 'HADOOP', 'JAVA', 'R', 'SAS', 'SPARK', 'HIVE', 'ABTEST',
                       'MYSQL', 'MATLAB', 'FLASK', 'REDIS', 'MONGODB', 'DJANGO', 'TENSORFLOW', 'CAFFE',
                       'MXNET', 'KERAS', 'SELENIUM', 'APPIUM', 'NUMPY', 'REQUEST', 'HTML',
                       'CSS', 'SCRAPY', 'JAVASCRIPT', 'NGINX', 'SOCKETNODEJS', 'APACHE',
                       'PANDAS', 'MATPLOTLIB', 'VUE', 'WEBMAGIC', 'NUTCH', 'HERITRIX', 'LINUX',
                       'CENTOS', 'UBUNTU', '机器学习', '深度学习', 'MEMCACHE', 'GIT', 'SVN', 'TORNADO', 'UNIX',
                       'ORACLE', 'DOCKER', 'CODEREVIEW', 'ABACONDA', '后端', '测试', 'SQLALCHEMY', 'RABBITMQ',
                       'DB2', 'TOMCAT', 'SCRUM', 'POSTGRESQL', 'SWARM', 'KUBERNETES', '推荐系统', '用户画像',
                       '人工智能', 'CELERY', 'JSON', 'SHELL', 'HBASE', 'KAFKA', 'XPATH', 'REQUESTS',
                       'BOOTSTRAP', 'HTTP', 'TCP', 'UDP', 'HTTPS', '数据分析', '数据挖掘', 'UNITTEST',
                       "JWT", "GO", "OCTAVE", "爬虫"]

然后进行分词处理(这里我直接上封装好的代码了)

import re
import jieba
import pandas as pd


class DataAnalyze(object):

    def __init__(self):
        self.data = pd.read_csv("E:\\数据集\\招聘信息数据\\9月19\\test1.csv")
        self.data.dropna()
        self.data = self.data.dropna(axis=0)
        self.ls_add = ['SQL', 'C++', 'HADOOP', 'JAVA', 'R', 'SAS', 'SPARK', 'HIVE', 'ABTEST',
                       'MYSQL', 'MATLAB', 'FLASK', 'REDIS', 'MONGODB', 'DJANGO', 'TENSORFLOW', 'CAFFE',
                       'MXNET', 'KERAS', 'SELENIUM', 'APPIUM', 'NUMPY', 'REQUEST', 'HTML',
                       'CSS', 'SCRAPY', 'JAVASCRIPT', 'NGINX', 'SOCKETNODEJS', 'APACHE',
                       'PANDAS', 'MATPLOTLIB', 'VUE', 'WEBMAGIC', 'NUTCH', 'HERITRIX', 'LINUX',
                       'CENTOS', 'UBUNTU', '机器学习', '深度学习', 'MEMCACHE', 'GIT', 'SVN', 'TORNADO', 'UNIX',
                       'ORACLE', 'DOCKER', 'CODEREVIEW', 'ABACONDA', '后端', '测试', 'SQLALCHEMY', 'RABBITMQ',
                       'DB2', 'TOMCAT', 'SCRUM', 'POSTGRESQL', 'SWARM', 'KUBERNETES', '推荐系统', '用户画像',
                       '人工智能', 'CELERY', 'JSON', 'SHELL', 'HBASE', 'KAFKA', 'XPATH', 'REQUESTS',
                       'BOOTSTRAP', 'HTTP', 'TCP', 'UDP', 'HTTPS', '数据分析', '数据挖掘', 'UNITTEST',
                       "JWT", "GO", "OCTAVE", "爬虫"]

    @staticmethod
    def find_kind(data):
        """
        传进来技术点 返回类别
        :param data: 技术点
        :return: 所属类别
        """
        kinds = [{"操作系统": ["LINUX", "CENTOS", "UBUNTU", "UNIX"]},
                 {"语言相关": ["C++", "JAVA", "GO", "SQL", "R", "JAVASCRIPT", "SHELL"]},
                 {"大数据": ["HADOOP", "SAS", "SPARK", "HIVE", "ABTEST", "KAFKA"]},
                 {"数据库": ["ORACLE", "MYSQL", "REDIS", "MONGODB", "DB2", "HBASE", "POSTGRESQL"]},
                 {"后端相关": ["FLASK", "DJANGO", "TORNADO", "APACHE", "TOMCAT", "SQLALCHEMY"]},
                 {"数据科学": ["TENSORFLOW", "CAFFE", "MXNET", "KERAS", "NUMPY", "PANDAS", "MATLAB", "MATPLOTLIB"]},
                 {"自动化测试": ["SELENIUM", "APPIUM", "UNITTEST"]},
                 {"前端相关": ["REQUEST", "HTML", "CSS", "NODEJS", "VUE", "JSON", "BOOTSTRAP"]},
                 {"爬虫框架": ["SCRAPY", "XPATH", "REQUESTS", "WEBMAGIC", "NUTCH", "HERITRIX", "JWT"]},
                 {"分布式相关": ["NGINX", "Celery", "MEMCACHE", "RABBITMQ", "SWARM"]},
                 {"通信协议": ["TCP", "UDP", "HTTP", "HTTPS"]},
                 {"版本控制": ["GIT", "SVN", "ABACONDA"]},
                 {"热门技术": ["后端", "测试", "爬虫", "数据分析", "数据挖掘", "人工智能"]},
                 {"人工智能": ["机器学习", "深度学习", "推荐系统", "用户画像"]}
                 ]
        kind = None
        for _dict in kinds:
            for x, y in _dict.items():
                if data in y:
                    kind = x
                    break

        if kind is None:
            kind = "其他"
        return kind

    @staticmethod
    def data_clear(data):
        """
        清洗数据
        :param data:
        :return: 处理后的数据
        """
        t = "".join(data['content'].tolist())
        t = t.upper()
        # pattern = re.compile(r'\d[.|\.|、]')
        pattern1 = re.compile(r'\s')
        # t = re.sub(pattern, '', t)
        t = re.sub(pattern1, '', t)
        for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~【】◆,;、。()':
            t = t.replace(ch, "")
        t = t.replace('\xa0', '')

        words = jieba.lcut(t)
        counts = {}
        for word in words:
            counts[word] = counts.get(word, 0) + 1

        return counts

    def update_dict(self):
        """
        更新词库
        :return:
        """
        for i in self.ls_add:
            jieba.add_word(i)

    def extract_run(self):
        """
        提取数据
        :return: 提取后的数据 pandas.DataFrame类型
        """
        temp_data = list()
        self.update_dict()
        for x, y in self.data_clear(self.data).items():
            if x in self.ls_add:
                if x == "测试":  # 测试工程师简介重复率比较高导致数据不准确直接取一半
                    y = y / 2
                temp_data.append([x.lower().title(), y, self.find_kind(x.upper())])

        _data = pd.DataFrame(temp_data, columns=["title", "num", "kind"])
        _data.to_csv("9-2_.csv", encoding="utf_8_sig")
        return _data


if __name__ == '__main__':
    D = DataAnalyze()
    data_ = D.extract_run()

程序会自动生成一个文件

在这里插入图片描述

数据已经处理完成接下来就是可视化了(先看看效果)
  1. 我们看到招聘中常常要求我们在熟练使用Python还需要SQL Java等

    在这里插入图片描述
  2. 操作系统热度, 看来主流还是Linux(ubantu归类错了)
    在这里插入图片描述
    在这里插入图片描述
  3. 数据库热度
    在这里插入图片描述
    在这里插入图片描述
  4. 爬虫热门框架
    在这里插入图片描述
    在这里插入图片描述
  5. 通信协议
    在这里插入图片描述
    在这里插入图片描述
  6. 分布式相关(Nginx这么热)
    在这里插入图片描述
    在这里插入图片描述
  7. 数据科学相关及深度学习框架在这里插入图片描述在这里插入图片描述
  8. 词云图(新加的)
    在这里插入图片描述
好了剩下的就不在此展示了
部分招聘(4000左右)数据可视化成品分析源码下载链接:

数据集等下载地址

发布了18 篇原创文章 · 获赞 15 · 访问量 2790

猜你喜欢

转载自blog.csdn.net/qq_42768234/article/details/101748946