自制字节上万条招聘信息搜索网站,好玩!

简介: 自制字节上万条招聘信息搜索网站,好玩!

在前面的文章中,我们已经成功抓取了字节跳动上万条招聘信息,简单看了看,要求不是一般的高。说实话,大厂的招聘信息,应该都是比较严谨的,什么意思,就是说,如果你想进大厂,那么其对应岗位的招聘要求基本可以确定为你复习或者能力的要求,只有达到招聘信息中的要求,一般来说才能够达到其找人的基准线上,后面至于是否能进得去,就要看其他方面的实力了,当然还需要一点点运气!

看下面的文章,回顾字节岗位抓取详细过程

实战|Python爬取字节跳动1W+招聘信息

下面我们就一起来简单分析下,字节跳动招聘信息当中的相关情况

微目录:

1、数据分析

2、基于 Plotly Dash 制作岗位分析网站

数据总体

先来看看抓取到的数据整体长什么样

可以看到整体数据还是挺规整的,只有job_category列,需要处理下,便于后面的分析

def deal_job_category(data):
    if '-' in data:
        return data.split('-')[0]
    elif '/' in data:
        return data.split('/')[0]
    else:
        return data
df['new_job'] = df['job_category'].apply(deal_job_category)

我们新增一列,用于储存处理后的岗位类别

岗位地域分布

先来看看总体岗位的地域分布情况

c = (
    Bar({"theme": ThemeType.MACARONS})
    .add_xaxis(df['city_info'].value_counts().index.tolist()[:10])
    .add_yaxis("字节岗位分布", df['city_info'].value_counts().values.tolist()[:10])
    .set_global_opts(
        title_opts={"text": "萝卜大杂烩制作", "subtext": "来源:字节跳动招聘网站"}
    )
)
c.render_notebook()

通过 Pyecharts 可以非常方便的制作优美的图表,而且代码异常的简洁

可以看到北京的岗位远远高于其他地区的岗位数量,这也是正常,毕竟是首都,人才多呀!

之后是上海、深圳、杭州以及广州,这也正好符合当今中国互联网发展的城市排名,我们还看到新加坡居然也有100+岗位在招聘,看来字节的海外计划一直在进行,从未停下过!

各城市岗位分析

接下来我们分析下几个主要城市的岗位情况

北京

先来看下北京的岗位类别分布

c = (
    Bar({"theme": ThemeType.MACARONS})
    .add_xaxis(df[df['city_info'] == '北京']['new_job'].value_counts().index.tolist()[:10])
    .add_yaxis("北京岗位类别分布", df[df['city_info'] == '北京']['new_job'].value_counts().values.tolist()[:10])
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts={"text": "萝卜大杂烩制作", "subtext": "来源:字节跳动招聘网站"}
    )
)
c.render_notebook()


可以看到,作为一家技术驱动的公司,研发岗位还是最多的,不过也作为一家“抖音”公司,运营岗位也是遥遥领先啊

再来看一下岗位性质的,当前只分为社招和实习生了

c = (
    Pie({"theme": ThemeType.MACARONS})
    .add(
        series_name="岗位性质",
        data_pair=[list(z) for z in zip(df[df['city_info'] == '北京']['recruit_type'].value_counts().index.tolist(), df[df['city_info'] == '北京']['recruit_type'].value_counts().values.tolist())],
        # nrosetype="radius",
        # radius="55%",
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="岗位性质",
            pos_left="center",
            pos_top="20",
            title_textstyle_opts=opts.TextStyleOpts(color="black"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.render_notebook()


社招人数达到了3000+,真的是大批量招人啊,不知道在如此大需求下,招人的要求能不能降低些呢!

其他城市

下面是其他城市的情况,貌似每个城市都是研发最多哦

c = (
    Bar({"theme": ThemeType.MACARONS})
    .add_xaxis(df[df['city_info'] == '上海']['new_job'].value_counts().index.tolist()[:10])
    .add_yaxis("上海岗位类别分布", df[df['city_info'] == '上海']['new_job'].value_counts().values.tolist()[:10])
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts={"text": "萝卜大杂烩制作", "subtext": "来源:字节跳动招聘网站"}
    )
)
c.render_notebook()


各岗位分析

接下来我们再进行不同岗位的分析,这里主要分析岗位的描述和要求,基本上制作一下词云,就可以看出不同岗位的要求区别了

研发

我们还是使用jieba来进行分词处理

df_yanfa = df[df['new_job'] == '研发']
df_yanfa_des = df_yanfa['description'].values.tolist()
comment = jieba.lcut(str(df_yanfa_des), cut_all=False)
words = ' '.join(comment)
counts = {}
excludes = {",",":","“","。","”","、",";"," ","!", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
            "?"," ", ",", "'", "[", "]", "@ ", "的", "与", "是", "n4", "@", "n", "/", "-", "the", "回复", "_",
           "都", "to", "相关", "人", "有", "说", "吗", "在", "啊", "吧", "还", "呢", "被", "和", "没", "字节", "这", "…",
           "跳动", "能", "\\", ".", "and", "n2", "n3", "等"}
for word in comment:
    if word not in excludes:
        counts[word] = counts.get(word,0)+1
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse = True)
for i in range(15):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

然后制作词云图

c = (
    WordCloud()
    .add(
        "",
        items,
        word_size_range=[20, 100],
        textstyle_opts=opts.TextStyleOpts(font_family="cursive"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="研发岗位描述"))
)
c.render_notebook()


在这里可能还不太容易看出研发岗位的要求,那么再来分析岗位要求呢

在这里就可以清楚的看出“熟悉”,“经验”,“扎实”,“良好”等词语占比还是蛮大的,不过话又说回来,哪家公司的招聘要求上不是这么写的呢。等到你实际进入公司后,要做的事情是什么又是另一回事了!

运营

这里直接给出词云图,大家自行体会吧

至于其他岗位的分析,就留给大家自行探索啦

下面进入 Plotly Dash 的搭建部分

Dash 简介

其实 Dash 是一门非常好的用于搭建个人 BI 系统的工具,整体是基于 Plotly 和 Flask,可以很快的完成个性化的 BI 网站创建。

比如下面的几行代码,就可以快速在网页上展示可交互的图表

# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import pandas as pd
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
df = pd.DataFrame({
    "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
    "Amount": [4, 1, 2, 2, 4, 5],
    "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
app.layout = html.Div(children=[
    html.H1(children='Hello Dash'),
    html.Div(children='''
        Dash: A web application framework for Python.
    '''),
    dcc.Graph(
        id='example-graph',
        figure=fig
    )
])
if __name__ == '__main__':
    app.run_server(debug=True)

此时我们在浏览器中打开本地的8050端口,就可以看到如下的网站

搭建我们的字节岗位BI系统

哈哈哈,这里暂且称我们搭建的网站为BI系统吧。

因为这个不是 Dash 的教程,所以一些 Dash 用法和概念就不再赘述了。

首先读取我们抓取岗位之后保存的文件,然后初始化 Dash app

df = pd.read_csv('bytedance_jobs.csv')
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

接下来通过 Dash 的 layout 来进行页面布局

app.layout = html.Div(
    [
        html.H4(children='字节跳动招聘信息分析'),
        html.Div(
            [
                html.Div([
                    dcc.Dropdown(
                            id='recruit-type',
                            options=[{'label': i, 'value': i} for i in ['社招', '日常实习生']],
                            value='社招'
                        ),
                ], style={'width': '100px', 'float': 'left'}),
                html.Div([
                    dcc.Dropdown(
                            id='job-type',
                            options=[{'label': i, 'value': i} for i in ['研发', '产品', '运营', '设计', '市场', '职能']],
                            value='研发'
                        ),
                ], style={'width': '100px', 'float': 'left'}),
                html.Div(
                            [
                            dcc.Input(id='City', value='', type='text', placeholder='城市'),
                                ]
                        ),
            ]
        ),
        dash_table.DataTable(
            id='table-id',
            columns=[{"name": i, "id": i} for i in df.columns],
            page_size=20,
            style_table={'height': '300px', 'overflowY': 'auto'},
            fixed_rows={'headers': True},
        ),
        html.Div(
            [],
            style={'height': '50px'}
        ),
        html.Div(
            id='graph-container',
            className="",
            style={'float': 'center'},
        )
    ]
)

这样,我创建了两个下拉框,一个输入框以及一个 Dash 的 DataTable 组件,还有一个 id 为 graph-container 的 div,是用来放置图表的,页面如下

再接下来就是回调函数的编写了。

@app.callback(
    Output('table-id', 'data'),
    Input('City', 'value'),
    Input('recruit-type', 'value'),
    Input('job-type', 'value')
)
def update_input(city_value, recruit_value, jobtype_value):
    if all([city_value, recruit_value, jobtype_value]):
        df_new = df[(df['city_info'] == city_value) & (df['recruit_type'] == recruit_value) & (
            df['job_category'].str.contains(jobtype_value))]
        return df_new.to_dict('records')
    elif all([city_value, recruit_value]):
        df_new = df[(df['city_info'] == city_value) & (df['recruit_type'] == recruit_value)]
        return df_new.to_dict('records')
...

这里代码没有截全,因为这里的判断比较长,不知道有没有更加 Pythonic 的写法~

代码的主要作用就是监听下拉框和输入框的 value,如果有变动,则同步更新表格数据

下面我们继续编写图表的回调函数

@app.callback(
    Output('graph-container', "children"),
    Input('table-id', "data"))
def update_graph(rows):
    dff = pd.DataFrame(rows)
    if rows:
        return html.Div(
            [
                dcc.Graph(
                    id='job_category',
                    figure={
                        "data": [
                            {
                                "x": dff['city_info'].value_counts().index.tolist()[:20],
                                "y": dff['city_info'].value_counts().values.tolist()[:20],
                                "type": "bar",
                                "marker": {"color": "#0074D9"},
                            }
                        ],
                        "layout": {
                            "xaxis": {"automargin": True},
                            "yaxis": {"automargin": True},
                            "height": 250,
                            "margin": {"t": 10, "l": 10, "r": 10}
                        },
                    },
                )
            ]
        )
    else:
        return

可以看到,通过 Dash 来制作图表还是太方便了,而且与 Pandas 的结合实在是完美

现在我们页面整体效果如下:

通过上面的100左右代码,我们就完成了一个最为基本的岗位分析网站,下面来看看效果吧

最终效果图

页面是土了点,毕竟调试页面,美化网站,还是需要些功底的,萝卜我暂时还是玩不来呀!

好了,今天的分享就到这里。

相关文章
|
6月前
|
小程序
支付宝搜索「品牌直达」怎么玩?看这几位“神”操作
支付宝搜索「品牌直达」怎么玩?看这几位“神”操作
73 11
|
6月前
|
数据采集 Java API
百度搜索:蓝易云【Java爬虫与Python爬虫有什么区别】
综上所述,Java爬虫和Python爬虫在语言特性、代码复杂性、生态系统、并发处理和执行性能等方面存在一些区别。选择使用哪种爬虫工具取决于具体的需求、项目要求和个人技术偏好。
70 0
|
11月前
|
Dubbo NoSQL Java
炸裂!阿里内部10W字面试手册,竟在GitHub访问量破百万
所谓 “金三银四”,是找工作的最佳季节。跳槽,你动心了吗? 年后返工往往伴随着离职大潮,相信有不少程序员朋友都想在金三银四这个招聘黄金期里找到一份更加心仪的工作。优秀的面试技巧往往能让大家事半功倍,了解面试题、良好的简历和提问套路,也是面试者突围而出的关键。还有时间,建议耐心读完全文,充分准备去拿到你的Dream Offer。
谷歌搜索留痕怎么做?有没内容限制?
因为量很大,比如我生成100万个页面,总会有几千甚至几万收录的,当然有一个前提是,你必须有自己的蜘蛛池。
490 0
谷歌搜索留痕怎么做?有没内容限制?
谷歌外推留痕,谷歌搜索留痕快速收录怎么做出来的?
首先:要开始在别人的网站来做谷歌留痕,利用留痕技术快速生产多个页面。
665 0
谷歌外推留痕,谷歌搜索留痕快速收录怎么做出来的?
抽签软件免费提供,代码开源,可用作抽奖、课堂抽背、游戏分组等活动场合,可以直接下载
抽签软件免费提供,代码开源,可用作抽奖、课堂抽背、游戏分组等活动场合,可以直接下载
694 1
抽签软件免费提供,代码开源,可用作抽奖、课堂抽背、游戏分组等活动场合,可以直接下载
怎样才能让百度搜索到自己的csdn博客?
怎样才能让百度搜索到自己的csdn博客?
142 0
怎样才能让百度搜索到自己的csdn博客?
|
Web App开发 移动开发 前端开发
关于h5纯网页(非微信环境)扫二维码扫码实现的探索研究
关于h5纯网页(非微信环境)扫二维码扫码实现的探索研究
1047 0
关于h5纯网页(非微信环境)扫二维码扫码实现的探索研究
|
分布式计算 大数据 Hadoop
【合集】想要轻松玩转阿里云?这里干货请收下!
在这里你可以寻找你想要的所有干货,带你一图了解阿里云!
289 0
【合集】想要轻松玩转阿里云?这里干货请收下!
|
存储 XML 自然语言处理
还在为数据搜索慢而烦恼吗?看过来
还在为数据搜索慢而烦恼吗?看过来
131 0
还在为数据搜索慢而烦恼吗?看过来