数据分析小案例:招聘数据可视化,查看领域最需技术~ ...

打印 上一主题 下一主题

主题 952|帖子 952|积分 2856

前言

嗨喽~大家好呀,这里是魔王呐
在前一章:让我们用python来采集数据看看找工作都要会什么吧~
我们讲了如何采集zhaopin网站数据,现在~
我们来把数据可视化,更好的查看在自己领域最需的技术是什么~
下面,我们直接上代码~
代码提供者:青灯教育-自游老师
代码
  1. import pandas as pd
  2. from pyecharts.charts import *
  3. from pyecharts import options as opts
  4. import re
  5. from pyecharts.globals import ThemeType
  6. from pyecharts.commons.utils import JsCode
复制代码
  1. # 读取数据
  2. df = pd.read_csv("招聘数据.csv")
  3. df.head()
复制代码
  1. df.info()
复制代码
  1. df['薪资'].unique()
  2. df['bottom']=df['薪资'].str.extract('^(\d+).*')
  3. df['top']=df['薪资'].str.extract('^.*?-(\d+).*')
  4. df['top'].fillna(df['bottom'],inplace=True)
  5. df['commision_pct']=df['薪资'].str.extract('^.*?·(\d{2})薪')
  6. df['commision_pct'].fillna(12,inplace=True)
  7. df['commision_pct']=df['commision_pct'].astype('float64')
  8. df['commision_pct']=df['commision_pct']/12
  9. df.dropna(inplace=True)
  10. df['bottom'] = df['bottom'].astype('int64')
  11. df['top'] = df['top'].astype('int64')
  12. df['平均薪资'] = (df['bottom']+df['top'])/2*df['commision_pct']
  13. df['平均薪资'] = df['平均薪资'].astype('int64')
  14. df.head()
复制代码
  1. df['薪资'] = df['薪资'].apply(lambda x:re.sub('.*千/月', '0.3-0.7万/月', x))
  2. df["薪资"].unique()
复制代码
  1. df['bottom'] = df['薪资'].str.extract('^(.*?)-.*?')
  2. df['top'] = df['薪资'].str.extract('^.*?-(\d\.\d|\d)')
  3. df.dropna(inplace=True)
  4. df['bottom'] = df['bottom'].astype('float64')
  5. df['top'] = df['top'].astype('float64')
  6. df['平均薪资'] = (df['bottom']+df['top'])/2 * 10
  7. df.head()
复制代码
  1. mean = df.groupby('学历')['平均薪资'].mean().sort_values()
  2. x = mean.index.tolist()
  3. y = mean.values.tolist()
  4. c = (
  5.     Bar()
  6.     .add_xaxis(x)
  7.     .add_yaxis(
  8.         "学历",
  9.         y
  10.     )
  11.     .set_global_opts(title_opts=opts.TitleOpts(title="不同学历的平均薪资"),datazoom_opts=opts.DataZoomOpts())
  12.     .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  13. )
  14. c.render_notebook()
复制代码
  1. color_js = """new echarts.graphic.LinearGradient(0, 1, 0, 0,
  2.     [{offset: 0, color: '#63e6be'}, {offset: 1, color: '#0b7285'}], false)"""
  3. color_js1 = """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
  4.                             offset: 0,
  5.                             color: '#ed1941'
  6.                         }, {
  7.                             offset: 1,
  8.                             color: '#009ad6'
  9.                         }], false)"""
  10. dq = df.groupby('城市')['职位'].count().to_frame('数量').sort_values(by='数量',ascending=False).reset_index()
  11. x_data = dq['城市'].values.tolist()[:20]
  12. y_data = dq['数量'].values.tolist()[:20]
  13. b1 = (
  14.         Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK,bg_color=JsCode(color_js1),width='1000px',height='600px'))
  15.         .add_xaxis(x_data)
  16.         .add_yaxis('',
  17.                    y_data ,
  18.                    category_gap="50%",
  19.                    label_opts=opts.LabelOpts(
  20.                         font_size=12,
  21.                         color='yellow',
  22.                         font_weight='bold',
  23.                         font_family='monospace',
  24.                         position='insideTop',  
  25.                         formatter = '{b}\n{c}'  
  26.                     ),
  27.                   )
  28.         .set_series_opts(
  29.             itemstyle_opts={
  30.                 "normal": {
  31.                     "color": JsCode(color_js),
  32.                     "barBorderRadius": [15, 15, 0, 0],
  33.                     "shadowColor": "rgb(0, 160, 221)",
  34.                 }
  35.             }
  36.         )
  37.         .set_global_opts(
  38.             title_opts=opts.TitleOpts(title='招 聘 数 量 前 20 的 城 市 区 域',
  39.                                        title_textstyle_opts=opts.TextStyleOpts(color="yellow"),
  40.                                        pos_top='7%',pos_left = 'center'
  41.                                      ),
  42.             legend_opts=opts.LegendOpts(is_show=False),
  43.             xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
  44.             yaxis_opts=opts.AxisOpts(name="",
  45.                                      name_location='middle',
  46.                                      name_gap=40,
  47.                                      name_textstyle_opts=opts.TextStyleOpts(font_size=16)),
  48.                          datazoom_opts=[opts.DataZoomOpts(range_start=1,range_end=50)]
  49.                         )
  50.     )
  51. b1.render_notebook()
复制代码
  1. boss = df['学历'].value_counts()
  2. x = boss.index.tolist()
  3. y = boss.values.tolist()
  4. data_pair = [list(z) for z in zip(x, y)]
  5. c = (
  6.     Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
  7.     .add(
  8.         series_name="学历需求占比",
  9.         data_pair=data_pair,
  10.         label_opts=opts.LabelOpts(is_show=False, position="center", color="rgba(255, 255, 255, 0.3)"),
  11.     )
  12.     .set_series_opts(
  13.         tooltip_opts=opts.TooltipOpts(
  14.             trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  15.         ),
  16.         label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
  17.     )
  18.     .set_global_opts(
  19.         title_opts=opts.TitleOpts(
  20.             title="学历需求占比",
  21.             pos_left="center",
  22.             pos_top="20",
  23.             title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
  24.         ),
  25.         legend_opts=opts.LegendOpts(is_show=False),
  26.     )
  27.     .set_colors(["#D53A35", "#334B5C", "#61A0A8", "#D48265", "#749F83"])
  28. )
  29. c.render_notebook()
复制代码
  1. boss = df['经验'].value_counts()
  2. x = boss.index.tolist()
  3. y = boss.values.tolist()
  4. data_pair = [list(z) for z in zip(x, y)]
  5. c = (
  6.     Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
  7.     .add(
  8.         series_name="经验需求占比",
  9.         data_pair=data_pair,
  10.         label_opts=opts.LabelOpts(is_show=False, position="center", color="rgba(255, 255, 255, 0.3)"),
  11.     )
  12.     .set_series_opts(
  13.         tooltip_opts=opts.TooltipOpts(
  14.             trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  15.         ),
  16.         label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
  17.     )
  18.     .set_global_opts(
  19.         title_opts=opts.TitleOpts(
  20.             title="经验需求占比",
  21.             pos_left="center",
  22.             pos_top="20",
  23.             title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
  24.         ),
  25.         legend_opts=opts.LegendOpts(is_show=False),
  26.     )
  27.     .set_colors(["#D53A35", "#334B5C", "#61A0A8", "#D48265", "#749F83"])
  28. )
  29. c.render_notebook()
复制代码
  1. boss = df['公司领域'].value_counts()
  2. x = boss.index.tolist()
  3. y = boss.values.tolist()
  4. data_pair = [list(z) for z in zip(x, y)]
  5. c = (
  6.     Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
  7.     .add(
  8.         series_name="公司领域占比",
  9.         data_pair=data_pair,
  10.         label_opts=opts.LabelOpts(is_show=False, position="center", color="rgba(255, 255, 255, 0.3)"),
  11.     )
  12.     .set_series_opts(
  13.         tooltip_opts=opts.TooltipOpts(
  14.             trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  15.         ),
  16.         label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
  17.     )
  18.     .set_global_opts(
  19.         title_opts=opts.TitleOpts(
  20.             title="公司领域占比",
  21.             pos_left="center",
  22.             pos_top="20",
  23.             title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
  24.         ),
  25.         legend_opts=opts.LegendOpts(is_show=False),
  26.     )
  27.     .set_colors(["#D53A35", "#334B5C", "#61A0A8", "#D48265", "#749F83"])
  28. )
  29. c.render_notebook()
复制代码
  1. from pyecharts import options as opts
  2. from pyecharts.charts import Pie
  3. from pyecharts.faker import Faker
  4. boss = df['经验'].value_counts()
  5. x = boss.index.tolist()
  6. y = boss.values.tolist()
  7. data_pair = [list(z) for z in zip(x, y)]
  8. c = (
  9.     Pie()
  10.     .add("", data_pair)
  11.     .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
  12.     .set_global_opts(title_opts=opts.TitleOpts(title="经验要求占比"))
  13.     .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
  14. )
  15. c.render_notebook()
复制代码
  1. from pyecharts import options as opts
  2. from pyecharts.charts import Pie
  3. from pyecharts.faker import Faker
  4. boss = df['经验'].value_counts()
  5. x = boss.index.tolist()
  6. y = boss.values.tolist()
  7. data_pair = [list(z) for z in zip(x, y)]
  8. c = (
  9.     Pie()
  10.     .add(
  11.         "",
  12.         data_pair,
  13.         radius=["40%", "55%"],
  14.         label_opts=opts.LabelOpts(
  15.             position="outside",
  16.             formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",
  17.             background_color="#eee",
  18.             border_color="#aaa",
  19.             border_width=1,
  20.             border_radius=4,
  21.             rich={
  22.                 "a": {"color": "#999", "lineHeight": 22, "align": "center"},
  23.                 "abg": {
  24.                     "backgroundColor": "#e3e3e3",
  25.                     "width": "100%",
  26.                     "align": "right",
  27.                     "height": 22,
  28.                     "borderRadius": [4, 4, 0, 0],
  29.                 },
  30.                 "hr": {
  31.                     "borderColor": "#aaa",
  32.                     "width": "100%",
  33.                     "borderWidth": 0.5,
  34.                     "height": 0,
  35.                 },
  36.                 "b": {"fontSize": 16, "lineHeight": 33},
  37.                 "per": {
  38.                     "color": "#eee",
  39.                     "backgroundColor": "#334455",
  40.                     "padding": [2, 4],
  41.                     "borderRadius": 2,
  42.                 },
  43.             },
  44.         ),
  45.     )
  46.     .set_global_opts(title_opts=opts.TitleOpts(title="python招聘经验要求"))
  47.    
  48. )
  49. c.render_notebook()
复制代码
  1. gsly = df['公司领域'].value_counts()[:10]
  2. x1 = gsly.index.tolist()
  3. y1 = gsly.values.tolist()
  4. c = (
  5.     Bar()
  6.     .add_xaxis(x1)
  7.     .add_yaxis(
  8.         "公司领域",
  9.         y1
  10.     )
  11.     .set_global_opts(title_opts=opts.TitleOpts(title="公司领域"),datazoom_opts=opts.DataZoomOpts())
  12.     .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  13. )
  14. c.render_notebook()
复制代码
  1. gsgm = df['公司规模'].value_counts()[1:10]
  2. x2 = gsgm.index.tolist()
  3. y2 = gsgm.values.tolist()
  4. c = (
  5.     Bar()
  6.     .add_xaxis(x2)
  7.     .add_yaxis(
  8.         "公司规模",
  9.         y2
  10.     )
  11.     .set_global_opts(title_opts=opts.TitleOpts(title="公司规模"),datazoom_opts=opts.DataZoomOpts())
  12.     .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  13. )
  14. c.render_notebook()
复制代码
  1. import stylecloud
  2. from PIL import Image
  3. welfares = df['福利'].dropna(how='all').values.tolist()
  4. welfares_list = []
  5. for welfare in welfares:
  6.     welfares_list += welfare.split(',')
  7. pic_name = '福利词云.png'
  8. stylecloud.gen_stylecloud(
  9.     text=' '.join(welfares_list),
  10.     font_path='msyh.ttc',
  11.     palette='cartocolors.qualitative.Bold_5',
  12.     max_font_size=100,
  13.     icon_name='fas fa-yen-sign',
  14.     background_color='#212529',
  15.     output_name=pic_name,
  16.     )
  17. Image.open(pic_name)
复制代码
效果(部分)

 
 

 
 

 

 
 
 
 
 
 
 
 
 
 


 
 尾语

成功没有快车道,幸福没有高速路。
幸福是可以通过学习来获得的,尽管它不是我们的母语。
——励志语录
本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦

对啦!!记得三连哦~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表