探索Python岗位后面的奥秘
本文记录的是一个基于Job岗位的数据分析案例。
导入库
1 | import pandas as pd |
数据探索
导入数据
数据探索
In [3]:
1 | df.isnull().sum() |
Out[3]:
只有福利这个字段存在缺失值;
1 | 标题 0 |
In [4]:
1 | df.shape # 数据形状 |
Out[4]:
1 | (300, 9) |
In [5]:
1 | df.dtypes |
Out[5]:
1 | 标题 object |
数据中的字段全是字符串类型
地区分析
有的地区存在城市、区、地点,有的只有一个城市,需要单独处理。
In [6]:
1 | df1 = df[df["地区"].str.contains("·")] |
带有·的地区处理
In [7]:
1 | df1.head() |
1 | df1["地区"] = df1["地区"].str.split("·") |
通过列表的长度进行判断:
1 | df1["城市"] = df1["地区"].apply(lambda x: x[0]) |
不带有·的地区处理
In [10]:
1 | df2["城市"] = df2["地区"] # 只保留城市 |
数据合并df3
待分析的数据
In [12]:
1 | df3 = pd.concat([df1,df2], axis=0) |
地域分析
基于城市
In [13]:
1 | df4 = df3["城市"].value_counts().reset_index() |
1 | fig = px.bar(df4, x="城市",y="数量",text="数量") |
基于城市下的区(深圳、北京为例)
下面是北京的例子:
学历
岗位对不同学历的要求
1 | fig = px.pie(df7, |
薪酬分布
In [21]:
1 | df8 = df3["薪资"].value_counts() # 不同薪资的取值情况 |
Out[21]:
1 | 10-15K 20 |
薪资当中大部分都是月薪,但是也有按天的工资。并且薪资都有最大值和最小值,我们取每个薪资的均值,比如:10-15K,取12.5K。
另外如果日薪,先取均值,再乘以30,当做月薪。
In [22]:
1 | ## 日薪的数据 |
Out[22]:
1 | # 获取最大值和最小值 |
1 | for i in ["最低日薪", "最高日薪"]: |
本身就是月薪的数据处理:
1 | # 本身就是月薪处理df10;单位是K |
1 | df14 = df10.join(df13) |
1 | for i in ["最低月薪", "最高月薪"]: |
合并基于时薪和月薪的数据:
1 | fig = px.histogram(df16, |
人数(基于城市)
In [33]:
1 | df17 = df3["城市"].value_counts().reset_index() |
1 | fig = px.bar(df17, x="城市",y="人数",text="人数",color="人数") |
薪资的城市分布-箱型图
岗位名称
柱状图
In [37]:
1 | df18 = df15["标题"].value_counts().reset_index() |
1 | # 显示前20个 |
词云图
In [39]:
1 | title_list = df18["岗位"].tolist() |
In [40]:
1 | # 创建停用词list |
In [41]:
1 | information = pd.value_counts(useful_result).reset_index() |
绘制词云图:
1 | information_zip = [tuple(z) for z in zip(information_new["word"].tolist(), information_new["number"].tolist())] |