数据清洗(一):拉勾网数据分析案例

1.导入数据

# 导入相应的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline 
#  %matplotlib inline  在这个notebook里显示图片
df = pd.read_csv('data/2.lagou/lagou_recruitment.csv')
df.head()
Unnamed: 0 岗位名称 公司名称 城市 地点 薪资 基本要求 公司状况 岗位技能 公司福利
0 0 数据分析师 名片全能王 上海 [静安区] 10k-20k 10k-20k 经验1-3年 / 本科 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应”
1 1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 10k-20k 经验不限 / 本科 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好”
2 2 数据分析 51JOB 上海 [浦东新区] 8k-15k 8k-15k 经验1-3年 / 本科 移动互联网,企业服务 / 上市公司 / 2000人以上 SPSS 数据运营 数据库 “五险一金 周末双休 年终福利”
3 3 2521BK-数据分析师 陆金所 上海 [浦东新区] 13k-26k 13k-26k 经验1-3年 / 本科 金融 / B轮 / 2000人以上 大数据 金融 MySQL Oracle 算法 “五险一金,节日福利,带薪年假”
4 4 数据分析师 天天拍车 上海 [虹桥] 10k-15k 10k-15k 经验1-3年 / 大专 移动互联网,电商 / D轮及以上 / 2000人以上 数据分析 数据库 “五险一金,带薪年假,做五休二”

2.把没有用的unnamed删除掉

# 方法一:删除
df.drop(columns="Unnamed: 0",inplace=True)
df.head(2)
岗位名称 公司名称 城市 地点 薪资 基本要求 公司状况 岗位技能 公司福利
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 10k-20k 经验1-3年 / 本科 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应”
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 10k-20k 经验不限 / 本科 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好”
#方法二:导入的时候,将其作为索引
pd.read_csv('data/2.lagou/lagou_recruitment.csv',index_col=0).head(2)
岗位名称 公司名称 城市 地点 薪资 基本要求 公司状况 岗位技能 公司福利
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 10k-20k 经验1-3年 / 本科 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应”
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 10k-20k 经验不限 / 本科 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好”

3.初步数据探索

# 查看表格形状
df.shape
(1638, 9)
# 查看所有特证名
df.columns
# 大致了解所有的列名
# 查看列名左右是否有空格,如果有空格可以用strip方法去除空格
Index(['岗位名称', '公司名称', '城市', '地点', '薪资', '基本要求', '公司状况', '岗位技能', '公司福利'], dtype='object')
# 查看整体信息
df.info()

RangeIndex: 1638 entries, 0 to 1637
Data columns (total 9 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   岗位名称    1638 non-null   object
 1   公司名称    1638 non-null   object
 2   城市      1638 non-null   object
 3   地点      1638 non-null   object
 4   薪资      1638 non-null   object
 5   基本要求    1638 non-null   object
 6   公司状况    1638 non-null   object
 7   岗位技能    1637 non-null   object
 8   公司福利    1638 non-null   object
dtypes: object(9)
memory usage: 115.3+ KB

4.城市数据统计

city_num = df.城市.value_counts()
city_num
北京    450
上海    405
深圳    291
广州    170
杭州    128
成都     43
武汉     42
南京     26
厦门     16
佛山     13
长沙     12
苏州     10
重庆      9
天津      8
西安      8
福州      7
Name: 城市, dtype: int64
# 正常显示中文 window
plt.rcParams['font.family'] = ['simhei'] 
plt.rcParams['font.family'] = ['Arial Unicode MS']
city_num.plot(kind='bar'      # 绘图的类别
              ,figsize=(8,5)  # 画布的大小,长8宽5
              ,fontsize=12    # 字体的大小
              ,rot=45         # 标签旋转的角度
             );  

数据清洗(一):拉勾网数据分析案例_第1张图片

5.使用Pyecharts绘制柱状图

# 导入柱状图的包
from pyecharts.charts import Bar
from pyecharts import options as opts
list(city_num.index)
['北京',
 '上海',
 '深圳',
 '广州',
 '杭州',
 '成都',
 '武汉',
 '南京',
 '厦门',
 '佛山',
 '长沙',
 '苏州',
 '重庆',
 '天津',
 '西安',
 '福州']
# 创建实例
b = Bar()
# 添加x轴数据、列表
b.add_xaxis(list(city_num.index))
# 添加y轴数据、列表
b.add_yaxis('工作数量',list(city_num))
# 添加标题
b.set_global_opts(title_opts=opts.TitleOpts(title="数据分析工作地区分布"))
b.render('数据分析工作地区分布_1.html')
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\数据分析工作地区分布_1.html'

6.使用Pyecharts绘制地理图

from pyecharts import options as opts
from pyecharts.charts import Geo
city_num.to_dict().items()
dict_items([('北京', 450), ('上海', 405), ('深圳', 291), ('广州', 170), ('杭州', 128), ('成都', 43), ('武汉', 42), ('南京', 26), ('厦门', 16), ('佛山', 13), ('长沙', 12), ('苏州', 10), ('重庆', 9), ('天津', 8), ('西安', 8), ('福州', 7)])
list(zip(city_num.index,city_num.values))
[('北京', 450),
 ('上海', 405),
 ('深圳', 291),
 ('广州', 170),
 ('杭州', 128),
 ('成都', 43),
 ('武汉', 42),
 ('南京', 26),
 ('厦门', 16),
 ('佛山', 13),
 ('长沙', 12),
 ('苏州', 10),
 ('重庆', 9),
 ('天津', 8),
 ('西安', 8),
 ('福州', 7)]
c = Geo()   # 先实例地理图
c.add_schema(maptype='china')                                  # 绘制中国地图
city_num_dict = city_num.to_dict()                             # 转换成字典
city_num_dict.items()                                          # 字典的items功能、打包键值对
c.add('城市工作数量',city_num_dict.items())                    # 添加数据
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))   # 关闭维度标签
c.set_global_opts(visualmap_opts=opts.VisualMapOpts()
                  ,title_opts=opts.TitleOpts(title="城市标记")) # 配置地图显示类型和标题
c.render('全国城市工作数量_1.html')                             # 保存图片
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\全国城市工作数量_1.html'

7.去除重复值

df.shape
df.duplicated().sum()  # 查看重复值的数量
df[df.duplicated()]    # 查看重复值的数据
# 原地删除 去除重复值,当两条数据完全一样时,删除后面的数据
df.drop_duplicates(inplace=True)
# 查看操作是否删除
df.shape
(1609, 9)

8.将公司要求拆分成两列:工作年限、学历要求

df.head(2)
岗位名称 公司名称 城市 地点 薪资 基本要求 公司状况 岗位技能 公司福利
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 10k-20k 经验1-3年 / 本科 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应”
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 10k-20k 经验不限 / 本科 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好”
temp = df.基本要求.str.split('/')
df['工作年限'] = temp.map(lambda x:x[0])
df['学历要求'] = temp.map(lambda x:x[1])
# del df['基本要求']
df.head()
岗位名称 公司名称 城市 地点 薪资 基本要求 公司状况 岗位技能 公司福利 工作年限 学历要求
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 10k-20k 经验1-3年 / 本科 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 10k-20k 经验1-3年 本科
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 10k-20k 经验不限 / 本科 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好” 10k-20k 经验不限 本科
2 数据分析 51JOB 上海 [浦东新区] 8k-15k 8k-15k 经验1-3年 / 本科 移动互联网,企业服务 / 上市公司 / 2000人以上 SPSS 数据运营 数据库 “五险一金 周末双休 年终福利” 8k-15k 经验1-3年 本科
3 2521BK-数据分析师 陆金所 上海 [浦东新区] 13k-26k 13k-26k 经验1-3年 / 本科 金融 / B轮 / 2000人以上 大数据 金融 MySQL Oracle 算法 “五险一金,节日福利,带薪年假” 13k-26k 经验1-3年 本科
4 数据分析师 天天拍车 上海 [虹桥] 10k-15k 10k-15k 经验1-3年 / 大专 移动互联网,电商 / D轮及以上 / 2000人以上 数据分析 数据库 “五险一金,带薪年假,做五休二” 10k-15k 经验1-3年 大专
# 改变错误的列名,字典的key是现在的列名, 字典的value 是要改变的列名
df.rename(columns={'基本要求':'公司要求'},inplace=True)
df.head(2)
岗位名称 公司名称 城市 地点 薪资 公司要求 公司状况 岗位技能 公司福利 工作年限 学历要求
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 10k-20k 经验1-3年 / 本科 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 10k-20k 经验1-3年 本科
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 10k-20k 经验不限 / 本科 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好” 10k-20k 经验不限 本科
df['公司要求'].values[0].split(' ')[3]
'本科'
# 对公司要求这一列, 使用空格进行分割,分割结果为四列,命名为 temp
temp = df.公司要求.str.split(' ')
temp[:5]
0    [10k-20k, 经验1-3年, /, 本科]
1      [10k-20k, 经验不限, /, 本科]
2     [8k-15k, 经验1-3年, /, 本科]
3    [13k-26k, 经验1-3年, /, 本科]
4    [10k-15k, 经验1-3年, /, 大专]
Name: 公司要求, dtype: object
# 使用 map函数映射方法,进行操作
df['工作年限'] = temp.map(lambda x : x[1])  
# 在做循环的时候,map和apply可以互换
df['学历要求'] = temp.apply(lambda x : x[-1])
# 把公司要求这一列删除掉
df.pop('公司要求')
df.head(2)
岗位名称 公司名称 城市 地点 薪资 公司状况 岗位技能 公司福利 工作年限 学历要求
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 移动互联网 / D轮及以上 / 150-500人 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k 金融 / 上市公司 / 500-2000人 SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科

9.将公司级别拆分成三列

df.公司状况
0          移动互联网 / D轮及以上 / 150-500人
1             金融 / 上市公司 / 500-2000人
2       移动互联网,企业服务 / 上市公司 / 2000人以上
3                 金融 / B轮 / 2000人以上
4        移动互联网,电商 / D轮及以上 / 2000人以上
                   ...             
1633          数据服务,硬件 / A轮 / 15-50人
1634      移动互联网,消费生活 / 未融资 / 15-50人
1635       文娱丨内容 / 上市公司 / 500-2000人
1636        移动互联网 / 未融资 / 500-2000人
1637     移动互联网,金融 / 不需要融资 / 2000人以上
Name: 公司状况, Length: 1609, dtype: object
df[['行业','融资','人数']] = df.公司状况.str.split('/ ',expand = True)
del df['公司状况']
df.head()
岗位名称 公司名称 城市 地点 薪资 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数
0 数据分析师 名片全能王 上海 [静安区] 10k-20k 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人
1 数据分析师 奇虎360金融 上海 [张江] 10k-20k SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人
2 数据分析 51JOB 上海 [浦东新区] 8k-15k SPSS 数据运营 数据库 “五险一金 周末双休 年终福利” 经验1-3年 本科 移动互联网,企业服务 上市公司 2000人以上
3 2521BK-数据分析师 陆金所 上海 [浦东新区] 13k-26k 大数据 金融 MySQL Oracle 算法 “五险一金,节日福利,带薪年假” 经验1-3年 本科 金融 B轮 2000人以上
4 数据分析师 天天拍车 上海 [虹桥] 10k-15k 数据分析 数据库 “五险一金,带薪年假,做五休二” 经验1-3年 大专 移动互联网,电商 D轮及以上 2000人以上
# df.公司状况.str.split(' ',expand = True)
# temp = df.公司状况.str.split('/')
# df['行业'] = temp.map(lambda x:x[0])
# df['融资'] = temp.map(lambda x:x[1])
# df['人数'] = temp.map(lambda x:x[2])
# del df['公司状况']
# df.pop('公司状况')
# df.head(2)
import matplotlib
matplotlib.__version__
pd.__version__
'1.0.5'

10.去除公司地点括号

# 去除掉两边的括号
df.地点 = df.地点.str.replace('[','').str.replace(']','')
df.head(2)
岗位名称 公司名称 城市 地点 薪资 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数
0 数据分析师 名片全能王 上海 静安区 10k-20k 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人
1 数据分析师 奇虎360金融 上海 张江 10k-20k SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人

11.对薪资这一个特征做一个简单的分析

df.薪资.values
array(['10k-20k', '10k-20k', '8k-15k', ..., '6k-7k', '10k-15k', '4k-6k'],
      dtype=object)
temp = df.薪资.str.replace('k','000').str.replace('K','000')
df[['最高薪资','最低薪资']]=temp.str.split('-',expand = True)
df.info()

Int64Index: 1609 entries, 0 to 1637
Data columns (total 14 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   岗位名称    1609 non-null   object
 1   公司名称    1609 non-null   object
 2   城市      1609 non-null   object
 3   地点      1609 non-null   object
 4   薪资      1609 non-null   object
 5   岗位技能    1608 non-null   object
 6   公司福利    1609 non-null   object
 7   工作年限    1609 non-null   object
 8   学历要求    1609 non-null   object
 9   行业      1609 non-null   object
 10  融资      1609 non-null   object
 11  人数      1609 non-null   object
 12  最高薪资    1609 non-null   object
 13  最低薪资    1609 non-null   object
dtypes: object(14)
memory usage: 188.6+ KB
df.最低薪资 = df.最低薪资.astype('int64')
df.最高薪资 = df.最高薪资.astype('int64')
df.平均薪资=(df.最高薪资+df.最低薪资)/2
:3: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
  df.平均薪资=(df.最高薪资+df.最低薪资)/2
# 把字符变成数字:把k替换成000
df.薪资.value_counts()
temp = df.薪资.str.replace('k','000').str.replace('K','000')
df['最低薪资'] = temp.str.split('-').map(lambda x:x[0])
df['最高薪资'] = temp.str.split('-').map(lambda x:x[1])
df.info()
df.head(2)

Int64Index: 1609 entries, 0 to 1637
Data columns (total 14 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   岗位名称    1609 non-null   object
 1   公司名称    1609 non-null   object
 2   城市      1609 non-null   object
 3   地点      1609 non-null   object
 4   薪资      1609 non-null   object
 5   岗位技能    1608 non-null   object
 6   公司福利    1609 non-null   object
 7   工作年限    1609 non-null   object
 8   学历要求    1609 non-null   object
 9   行业      1609 non-null   object
 10  融资      1609 non-null   object
 11  人数      1609 non-null   object
 12  最高薪资    1609 non-null   object
 13  最低薪资    1609 non-null   object
dtypes: object(14)
memory usage: 188.6+ KB
岗位名称 公司名称 城市 地点 薪资 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资
0 数据分析师 名片全能王 上海 静安区 10k-20k 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000
1 数据分析师 奇虎360金融 上海 张江 10k-20k SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人 20000 10000
# 把薪资改变成整数型
df.最低薪资 = df.最低薪资.astype('int64')
df.最高薪资 = df.最高薪资.astype('int64')
df.info()
df.head(2)

Int64Index: 1609 entries, 0 to 1637
Data columns (total 14 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   岗位名称    1609 non-null   object
 1   公司名称    1609 non-null   object
 2   城市      1609 non-null   object
 3   地点      1609 non-null   object
 4   薪资      1609 non-null   object
 5   岗位技能    1608 non-null   object
 6   公司福利    1609 non-null   object
 7   工作年限    1609 non-null   object
 8   学历要求    1609 non-null   object
 9   行业      1609 non-null   object
 10  融资      1609 non-null   object
 11  人数      1609 non-null   object
 12  最高薪资    1609 non-null   int64 
 13  最低薪资    1609 non-null   int64 
dtypes: int64(2), object(12)
memory usage: 188.6+ KB
岗位名称 公司名称 城市 地点 薪资 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资
0 数据分析师 名片全能王 上海 静安区 10k-20k 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000
1 数据分析师 奇虎360金融 上海 张江 10k-20k SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人 20000 10000

1. 生成一列平均薪资列

df['平均薪资'] = (df.最低薪资 + df.最高薪资) / 2
df.pop('薪资')
df.head(2)
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
0 数据分析师 名片全能王 上海 静安区 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000 15000.0
1 数据分析师 奇虎360金融 上海 张江 SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人 20000 10000 15000.0

2. 看一下行业平均薪资

df.describe() 
最高薪资 最低薪资 平均薪资
count 1609.000000 1609.000000 1609.000000
mean 24277.812306 14047.855811 19162.834058
std 12365.415226 7020.373474 9572.235760
min 1000.000000 1000.000000 1000.000000
25% 15000.000000 10000.000000 12500.000000
50% 25000.000000 15000.000000 20000.000000
75% 30000.000000 18000.000000 24000.000000
max 100000.000000 60000.000000 75000.000000
df.平均薪资.plot(kind='density',grid=True,figsize=(12,5) #  grid网格
             ,xlim=(0,60000)                             # x轴的刻度范围
             ,xticks=np.arange(0,60000,3000)             # x轴的刻度线
            );

数据清洗(一):拉勾网数据分析案例_第2张图片

3.对不同城市的薪资分别进行统计

# 对不同的城市进行统计
city_salary = df.groupby(by='城市').mean()
df.groupby('城市').mean()
最高薪资 最低薪资 平均薪资
城市
上海 25545.679012 14676.543210 20111.111111
佛山 25076.923077 14000.000000 19538.461538
北京 27649.411765 15957.647059 21803.529412
南京 17653.846154 10615.384615 14134.615385
厦门 22062.500000 12437.500000 17250.000000
天津 12750.000000 8250.000000 10500.000000
广州 19841.176471 11670.588235 15755.882353
成都 15000.000000 8837.209302 11918.604651
杭州 22906.250000 13656.250000 18281.250000
武汉 17476.190476 10190.476190 13833.333333
深圳 25756.097561 14714.285714 20235.191638
福州 15000.000000 8428.571429 11714.285714
苏州 18400.000000 10700.000000 14550.000000
西安 11500.000000 7375.000000 9437.500000
重庆 13888.888889 7888.888889 10888.888889
长沙 12000.000000 7916.666667 9958.333333
city_salary[:5]
最高薪资 最低薪资 平均薪资
城市
上海 25545.679012 14676.543210 20111.111111
佛山 25076.923077 14000.000000 19538.461538
北京 27649.411765 15957.647059 21803.529412
南京 17653.846154 10615.384615 14134.615385
厦门 22062.500000 12437.500000 17250.000000
city_salary.sort_values('平均薪资',ascending=False) 
# 对平均薪资进行降序排列
最高薪资 最低薪资 平均薪资
城市
北京 27649.411765 15957.647059 21803.529412
深圳 25756.097561 14714.285714 20235.191638
上海 25545.679012 14676.543210 20111.111111
佛山 25076.923077 14000.000000 19538.461538
杭州 22906.250000 13656.250000 18281.250000
厦门 22062.500000 12437.500000 17250.000000
广州 19841.176471 11670.588235 15755.882353
苏州 18400.000000 10700.000000 14550.000000
南京 17653.846154 10615.384615 14134.615385
武汉 17476.190476 10190.476190 13833.333333
成都 15000.000000 8837.209302 11918.604651
福州 15000.000000 8428.571429 11714.285714
重庆 13888.888889 7888.888889 10888.888889
天津 12750.000000 8250.000000 10500.000000
长沙 12000.000000 7916.666667 9958.333333
西安 11500.000000 7375.000000 9437.500000
city_list = city_salary.sort_values('平均薪资',ascending=False).index
city_list
Index(['北京', '深圳', '上海', '佛山', '杭州', '厦门', '广州', '苏州', '南京', '武汉', '成都', '福州',
       '重庆', '天津', '长沙', '西安'],
      dtype='object', name='城市')

4. 统计薪资的多个统计值

# 对不同的城市进行统计
df.groupby(by='城市')['平均薪资'].agg(['max','min','median','mean'])
max min median mean
城市
上海 75000.0 1500.0 20000.0 20111.111111
佛山 37500.0 10500.0 17500.0 19538.461538
北京 65000.0 3000.0 22000.0 21803.529412
南京 45000.0 2500.0 12500.0 14134.615385
厦门 31500.0 7000.0 15000.0 17250.000000
天津 17500.0 6000.0 9750.0 10500.000000
广州 40000.0 2500.0 15000.0 15755.882353
成都 30000.0 2500.0 11500.0 11918.604651
杭州 70000.0 3000.0 17000.0 18281.250000
武汉 30000.0 2500.0 12500.0 13833.333333
深圳 65000.0 1000.0 20000.0 20235.191638
福州 20000.0 7000.0 11500.0 11714.285714
苏州 30000.0 7500.0 11750.0 14550.000000
西安 17500.0 4000.0 8000.0 9437.500000
重庆 22500.0 5000.0 8000.0 10888.888889
长沙 14000.0 5000.0 10750.0 9958.333333

5. 使用pyecharts绘制箱线图

# 存成嵌套的列表
from pyecharts.charts import Boxplot
df[df.城市 == "北京"]['平均薪资']
418    14000.0
419    18000.0
420    14000.0
421    10500.0
422    20000.0
        ...   
863    30000.0
864    20000.0
865    30000.0
866    45000.0
867     9000.0
Name: 平均薪资, Length: 425, dtype: float64
# 北上广深四大城市平均薪资箱型图
beijing = df[df.城市 == "北京"]['平均薪资']
shanghai = df[df.城市 == "上海"]['平均薪资']
guangzhou = df[df.城市 == "广州"]['平均薪资']
shenzhen = df[df.城市 == "深圳"]['平均薪资']

# 绘制箱型图
box = Boxplot()                              # 实例化一个箱型图对象
box.add_xaxis(['北京','上海','广州','深圳']) # 添加x坐标标签
box.add_yaxis("平均薪资",box.prepare_data([beijing,shanghai,guangzhou,shenzhen])) # 添加 y轴数据、用 prepare_data进行处理
box.set_global_opts(title_opts=opts.TitleOpts(title="四大城市平均薪资分布"))      # 图片标题
box.render('四大城市平均薪资箱线图.html')    # 保存图片
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\四大城市平均薪资箱线图.html'
# 所有城市平均薪资箱型图
temp_list = []
for i in city_list:
    temp_list.append(df[df.城市 == i]['平均薪资'])
# 绘制箱型图
box = Boxplot()                    # 实例化一个箱型图对象
box.add_xaxis(list(city_list))     # 添加x坐标标签
box.add_yaxis("平均薪资",box.prepare_data(temp_list))                        # 添加 y轴数据,用 prepare_data进行处理
box.set_global_opts(title_opts=opts.TitleOpts(title="所有城市平均薪资分布")) # 图片标题
box.render('所有城市平均薪资箱线图.html')                                    # 保存图片
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\所有城市平均薪资箱线图.html'
beijing[:2]
418    14000.0
419    18000.0
Name: 平均薪资, dtype: float64
box.prepare_data([beijing,shanghai,guangzhou,shenzhen])
[[3000.0, 16000.0, 22000.0, 26500.0, 65000.0],
 [1500.0, 14000.0, 20000.0, 25000.0, 75000.0],
 [2500.0, 9500.0, 15000.0, 20000.0, 40000.0],
 [1000.0, 12500.0, 20000.0, 24000.0, 65000.0]]
# 绘制所有城市平均薪资箱线图
city_salary = df.groupby(by='城市').mean()                              # 对不同的城市进行统计
city_list = city_salary.sort_values('平均薪资',ascending=False).index  # 从统计结果中提取出城市列表
temp = []  #  初始化空列表
for i in city_list: # 对每个城市进行遍历
    print(i)
    temp.append(df[df.城市 == i]['平均薪资']) 
# 利用布尔序列提取出该城市的薪资数据,并把数据添加到列表中
北京
深圳
上海
佛山
杭州
厦门
广州
苏州
南京
武汉
成都
福州
重庆
天津
长沙
西安
len(temp)
16
temp[:3]
[418    14000.0
 419    18000.0
 420    14000.0
 421    10500.0
 422    20000.0
         ...   
 863    30000.0
 864    20000.0
 865    30000.0
 866    45000.0
 867     9000.0
 Name: 平均薪资, Length: 425, dtype: float64,
 1301    15000.0
 1302    12000.0
 1303    12000.0
 1304    16500.0
 1305    22500.0
          ...   
 1587    37500.0
 1588    47500.0
 1589    22500.0
 1590    40000.0
 1591    25000.0
 Name: 平均薪资, Length: 287, dtype: float64,
 0      15000.0
 1      15000.0
 2      11500.0
 3      19500.0
 4      12500.0
         ...   
 400    20000.0
 401    22500.0
 402    30000.0
 403    10500.0
 404    25000.0
 Name: 平均薪资, Length: 405, dtype: float64]
box.prepare_data(temp)
[[3000.0, 16000.0, 22000.0, 26500.0, 65000.0],
 [1000.0, 12500.0, 20000.0, 24000.0, 65000.0],
 [1500.0, 14000.0, 20000.0, 25000.0, 75000.0],
 [10500.0, 11500.0, 17500.0, 25750.0, 37500.0],
 [3000.0, 11500.0, 17000.0, 24625.0, 70000.0],
 [7000.0, 11625.0, 15000.0, 21875.0, 31500.0],
 [2500.0, 9500.0, 15000.0, 20000.0, 40000.0],
 [7500.0, 9125.0, 11750.0, 18500.0, 30000.0],
 [2500.0, 9750.0, 12500.0, 17875.0, 45000.0],
 [2500.0, 9000.0, 12500.0, 16750.0, 30000.0],
 [2500.0, 8500.0, 11500.0, 15000.0, 30000.0],
 [7000.0, 8000.0, 11500.0, 15000.0, 20000.0],
 [5000.0, 5750.0, 8000.0, 17750.0, 22500.0],
 [6000.0, 8500.0, 9750.0, 12250.0, 17500.0],
 [5000.0, 6875.0, 10750.0, 12500.0, 14000.0],
 [4000.0, 5875.0, 8000.0, 12875.0, 17500.0]]
np.array(box.prepare_data(temp)).shape # 查看数据形状
(16, 5)
box = Boxplot()                                  # 实例化一个箱型图对象
box.add_xaxis(list(city_list))                   # 添加x坐标数据, 城市
box.add_yaxis("平均薪资",box.prepare_data(temp)) # 添加y轴数据,用prepare_data 进行处理
box.set_global_opts(title_opts=opts.TitleOpts(title="所有城市平均薪资分布")) # 图片标题
box.render('所有城市平均薪资箱线图.html')                                    # 保存图片
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\所有城市平均薪资箱线图.html'

6. 练习: 根据工作年限的不同,统计平均薪资的箱线图

df.head(2)
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
0 数据分析师 名片全能王 上海 静安区 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000 15000.0
1 数据分析师 奇虎360金融 上海 张江 SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人 20000 10000 15000.0
work_list = df.工作年限.value_counts().index[:-1]
temp_list = []
for i in work_list:
    temp_list.append(df[df.工作年限 == i]['平均薪资'])
box = Boxplot()                                         # 实例化一个箱型图对象
box.add_xaxis(list(work_list))                          # 添加x坐标数据, 城市
box.add_yaxis("平均薪资",box.prepare_data(temp_list )) # 添加y轴数据,用prepare_data 进行处理
box.set_global_opts(title_opts=opts.TitleOpts(title="所有城市平均薪资分布")) # 图片标题
box.render('所有城市平均薪资箱线图.html')                                    # 保存图片
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\所有城市平均薪资箱线图.html'
df.工作年限.value_counts()
经验3-5年     673
经验1-3年     432
经验5-10年    221
经验不限       178
经验应届毕业生     75
经验1年以下      28
经验10年以上      2
Name: 工作年限, dtype: int64
temp = df.工作年限.value_counts().index
temp
Index(['经验3-5年', '经验1-3年', '经验5-10年', '经验不限', '经验应届毕业生', '经验1年以下', '经验10年以上'], dtype='object')
df[df.工作年限 == temp[0]]['平均薪资']
empty = []
# 对类别循环
for i in temp:
    print(i)
    empty.append(df[df.工作年限 == i]['平均薪资'])
empty[1] 
经验3-5年
经验1-3年
经验5-10年
经验不限
经验应届毕业生
经验1年以下
经验10年以上





0       15000.0
2       11500.0
3       19500.0
4       12500.0
6       10000.0
         ...   
1626    11500.0
1628     9000.0
1629    10000.0
1635     6500.0
1636    12500.0
Name: 平均薪资, Length: 432, dtype: float64
box = Boxplot()           # 实例化一个箱型图对象
box.add_xaxis(list(temp)) # 添加x坐标数据, 城市
box.add_yaxis("平均薪资",box.prepare_data(empty)) # 添加y轴数据,用prepare_data 进行处理
box.reversal_axis()                       # 翻转XY轴
box.set_global_opts(title_opts=opts.TitleOpts(title="工作年限平均薪资分布")) # 图片标题
box.render('工作年限平均薪资箱线图.html') # 保存图片
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\工作年限平均薪资箱线图.html'
df[df['工作年限']=='经验10年以上']
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
1241 商业数据分析总监 网易 杭州 长河 电商 移动互联网 SQLServer Hive 数据分析 算法 “跨境电商,薪酬有竞争力” 经验10年以上 本科 电商 上市公司 2000人以上 80000 60000 70000.0
1414 4721FP-智慧法律-资深数据分析专家 平安智慧城 深圳 南山区 数据分析 “五险一金,绩效奖金,高温补贴,定期体检” 经验10年以上 本科 移动互联网 不需要融资 2000人以上 30000 15000 22500.0

7. 研究一下各地区最高薪资是什么工作

max_salary = df.groupby(by='城市')['平均薪资'].min()
df_res = pd.DataFrame()
# for i,j in list(zip(max_salary.index,max_salary.values)): 
for i,j in max_salary.to_dict().items():
    temp_series = df[(df["城市"]  == i) & (df["平均薪资"] == j)] # 拿出每一次循环的数据库
    df_res = pd.concat([df_res,temp_series],axis=0)              # 将每次拿出的数据框拼接到df_res
max_salary.sort_values(ascending=False,inplace=True)
max_salary
城市
佛山    10500.0
苏州     7500.0
福州     7000.0
厦门     7000.0
天津     6000.0
长沙     5000.0
重庆     5000.0
西安     4000.0
杭州     3000.0
北京     3000.0
武汉     2500.0
成都     2500.0
广州     2500.0
南京     2500.0
上海     1500.0
深圳     1000.0
Name: 平均薪资, dtype: float64
max_salary.index
Index(['佛山', '苏州', '福州', '厦门', '天津', '长沙', '重庆', '西安', '杭州', '北京', '武汉', '成都',
       '广州', '南京', '上海', '深圳'],
      dtype='object', name='城市')
max_salary.values
array([10500.,  7500.,  7000.,  7000.,  6000.,  5000.,  5000.,  4000.,
        3000.,  3000.,  2500.,  2500.,  2500.,  2500.,  1500.,  1000.])
df.平均薪资 == 75000.
0       False
1       False
2       False
3       False
4       False
        ...  
1633    False
1634    False
1635    False
1636    False
1637    False
Length: 1609, dtype: bool
df.城市 == '上海'
0        True
1        True
2        True
3        True
4        True
        ...  
1633    False
1634    False
1635    False
1636    False
1637    False
Name: 城市, Length: 1609, dtype: bool
((df.城市 == '上海') & (df.平均薪资 == 75000.)).sum()
1
df[(df.城市 == '上海') & (df.平均薪资 == 75000.)]
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
367 高级数据分析总监 靖琪 上海 虹口区 电商 工具软件 “公司实力强,成长空间大,福利待遇好” 经验5-10年 本科 移动互联网 天使轮 50-150人 100000 50000 75000.0
list(zip(max_salary.index,max_salary.values))
[('佛山', 10500.0),
 ('苏州', 7500.0),
 ('福州', 7000.0),
 ('厦门', 7000.0),
 ('天津', 6000.0),
 ('长沙', 5000.0),
 ('重庆', 5000.0),
 ('西安', 4000.0),
 ('杭州', 3000.0),
 ('北京', 3000.0),
 ('武汉', 2500.0),
 ('成都', 2500.0),
 ('广州', 2500.0),
 ('南京', 2500.0),
 ('上海', 1500.0),
 ('深圳', 1000.0)]
[*zip(max_salary.index,max_salary.values)] 
# 这里的*代表解压缩,在某种情况下等同于list()
[('佛山', 10500.0),
 ('苏州', 7500.0),
 ('福州', 7000.0),
 ('厦门', 7000.0),
 ('天津', 6000.0),
 ('长沙', 5000.0),
 ('重庆', 5000.0),
 ('西安', 4000.0),
 ('杭州', 3000.0),
 ('北京', 3000.0),
 ('武汉', 2500.0),
 ('成都', 2500.0),
 ('广州', 2500.0),
 ('南京', 2500.0),
 ('上海', 1500.0),
 ('深圳', 1000.0)]
df_m = pd.DataFrame()
for i,j in zip(max_salary.index,max_salary.values):
    df_c = df[(df.城市==i)&(df.平均薪资==j)]
    df_m = pd.concat([df_m,df_c])
df_m.head(2)
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
409 数据分析师 美的电商 佛山 顺德区 电商 大数据 数据分析 数据运营 SPSS 商业 “不打卡 团队年轻 领导nice” 经验3-5年 本科 电商 上市公司 2000人以上 13000 8000 10500.0
1608 数据分析师 迈科网络 苏州 工业园区 通信/网络设备 “公司核心技术岗位,发展空间大” 经验1年以下 本科 数据服务 上市公司 15-50人 10000 5000 7500.0

8. 练习:提取出各城市最低薪资的招聘信息

min_salary = df.groupby('城市')['平均薪资'].min()
min_salary 

list(zip(min_salary.index,min_salary.values))

df_res = pd.DataFrame()
for i,j in zip(min_salary.index,min_salary.values):
    temp_series = df[(df.城市 == i) & (df.平均薪资 == j)]
    df_res = pd.concat([df_res,temp_series],axis = 0)
min_salary.to_dict().items()
# =zip(min_salary.index,min_salary.values)
dict_items([('上海', 1500.0), ('佛山', 10500.0), ('北京', 3000.0), ('南京', 2500.0), ('厦门', 7000.0), ('天津', 6000.0), ('广州', 2500.0), ('成都', 2500.0), ('杭州', 3000.0), ('武汉', 2500.0), ('深圳', 1000.0), ('福州', 7000.0), ('苏州', 7500.0), ('西安', 4000.0), ('重庆', 5000.0), ('长沙', 5000.0)])
# 1.提取出各城市的最低薪资
min_salary = df.groupby('城市')['平均薪资'].min()

# 2.对最低薪资进行降序排序
min_salary.sort_values(ascending=False,inplace=True)

# 3.循环提取各城市的最低薪资招聘信息
df_t = pd.DataFrame()
for i,j in zip(min_salary.index,min_salary.values):
    df_one = df[(df.城市==i)&(df.平均薪资==j)]
    df_t = pd.concat([df_t,df_one])
df_t.shape
(24, 14)
df_t.head()
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
409 数据分析师 美的电商 佛山 顺德区 电商 大数据 数据分析 数据运营 SPSS 商业 “不打卡 团队年轻 领导nice” 经验3-5年 本科 电商 上市公司 2000人以上 13000 8000 10500.0
1608 数据分析师 迈科网络 苏州 工业园区 通信/网络设备 “公司核心技术岗位,发展空间大” 经验1年以下 本科 数据服务 上市公司 15-50人 10000 5000 7500.0
1596 数据分析师 戎易商智(北京)科技有限公司 福州 五四路 移动互联网 SQL 数据库 数据分析 SPSS “周末双休,五险一金,员工旅游,生日福利” 经验1-3年 本科 移动互联网,数据服务 未融资 15-50人 8000 6000 7000.0
906 软件开发工程师(数据分析) 福建天闻 厦门 集美区 大数据 “五险一金、带薪年假” 经验1-3年 本科 数据服务,教育 未融资 15-50人 8000 6000 7000.0
916 金融数据分析师 投中信息 天津 滨海新区 VC 数据分析 行业研究 分析师 “全勤奖 饭补 车补 下午茶 年终奖” 经验不限 本科 金融 D轮及以上 150-500人 8000 4000 6000.0

9 分析异常数据

def func(data,column):
    high = data[column].mean() + 3 * data[column].std()
    low = data[column].mean() - 3* data[column].std()
    res_df = data[(data[column] > high) | (data[column]< low)]
    return res_df
func(df,"平均薪资")
func(df,"最高薪资")
func(df,'最低薪资')
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
147 数据分析与建模专家 招商银行信用卡中心 上海 浦东新区 数据分析 数据架构 “职位晋升 福利待遇好 工作氛围好” 经验5-10年 本科 金融 上市公司 2000人以上 65000 40000 52500.0
364 安全数据分析平台高级开发工程师 上海瑞阙文化发展有限公司 上海 黄浦区 安全 “弹性工作,提供晚餐” 经验1-3年 本科 移动互联网,金融 不需要融资 150-500人 80000 40000 60000.0
367 高级数据分析总监 靖琪 上海 虹口区 电商 工具软件 “公司实力强,成长空间大,福利待遇好” 经验5-10年 本科 移动互联网 天使轮 50-150人 100000 50000 75000.0
744 数据分析师/数据科学家 滴滴 北京 西北旺 Hadoop 数据挖掘 MySQL “数据精确,老大nb,汇报线简单” 经验5-10年 本科 汽车丨出行 不需要融资 2000人以上 60000 40000 50000.0
762 数据分析总监 发现旅行 北京 朝阳区 数据分析 “扁平化管理,氛围超好,地位重要,待遇优厚” 经验5-10年 本科 旅游 B轮 50-150人 80000 50000 65000.0
1206 数据分析总监 多准大数据 杭州 西溪 大数据 电商 数据分析 “缴纳五险一金,带薪年假,出国旅游,培训” 经验5-10年 本科 数据服务,广告营销 A轮 50-150人 50000 40000 45000.0
1241 商业数据分析总监 网易 杭州 长河 电商 移动互联网 SQLServer Hive 数据分析 算法 “跨境电商,薪酬有竞争力” 经验10年以上 本科 电商 上市公司 2000人以上 80000 60000 70000.0
1450 数据分析总监 深圳白骑士大数据有限公司 深圳 科技园 金融 算法 数据挖掘 数据分析 “平台好,创新型,发展迅速,股权期权” 经验5-10年 硕士 企业服务,金融 A轮 50-150人 65000 38000 51500.0
1455 资深数据分析师(J11772) 货拉拉 深圳 上梅林 BI 商业 数据分析 “发展空间大” 经验5-10年 本科 移动互联网,消费生活 C轮 2000人以上 70000 50000 60000.0
1504 商业数据分析师 (003969) vivo 深圳 宝安区 移动互联网 “弹性工作,股票期权,大数据平台 千万用户” 经验3-5年 本科 硬件 未融资 2000人以上 80000 50000 65000.0
1512 数据分析高级工程师 腾讯 深圳 前海 数据分析 Hadoop Spark 数据挖掘 “腾讯平台 福利待遇好 技术成长” 经验3-5年 本科 社交 上市公司 2000人以上 70000 40000 55000.0
1514 商业数据分析师 vivo 深圳 宝安区 移动互联网 “股票期权,精英团队,弹性工作” 经验3-5年 本科 硬件 未融资 2000人以上 80000 50000 65000.0
1538 数据分析总监 万顺赢 深圳 科技园 医疗健康 工具软件 “中国知名企业,福利好” 经验5-10年 硕士 移动互联网,金融 未融资 150-500人 80000 45000 62500.0
a = df.平均薪资.mean() + 3 * df.平均薪资.std()
a
47879.54133696899
b = df.平均薪资.mean() - 3 * df.平均薪资.std()
b
-9553.873220126236
df[df.平均薪资 > a]
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
147 数据分析与建模专家 招商银行信用卡中心 上海 浦东新区 数据分析 数据架构 “职位晋升 福利待遇好 工作氛围好” 经验5-10年 本科 金融 上市公司 2000人以上 65000 40000 52500.0
201 数据分析leader 上海腾聘 上海 张江 移动互联网 “发展空间,薪资给力,期权” 经验5-10年 本科 移动互联网,数据服务 B轮 50-150人 65000 35000 50000.0
364 安全数据分析平台高级开发工程师 上海瑞阙文化发展有限公司 上海 黄浦区 安全 “弹性工作,提供晚餐” 经验1-3年 本科 移动互联网,金融 不需要融资 150-500人 80000 40000 60000.0
367 高级数据分析总监 靖琪 上海 虹口区 电商 工具软件 “公司实力强,成长空间大,福利待遇好” 经验5-10年 本科 移动互联网 天使轮 50-150人 100000 50000 75000.0
744 数据分析师/数据科学家 滴滴 北京 西北旺 Hadoop 数据挖掘 MySQL “数据精确,老大nb,汇报线简单” 经验5-10年 本科 汽车丨出行 不需要融资 2000人以上 60000 40000 50000.0
762 数据分析总监 发现旅行 北京 朝阳区 数据分析 “扁平化管理,氛围超好,地位重要,待遇优厚” 经验5-10年 本科 旅游 B轮 50-150人 80000 50000 65000.0
1241 商业数据分析总监 网易 杭州 长河 电商 移动互联网 SQLServer Hive 数据分析 算法 “跨境电商,薪酬有竞争力” 经验10年以上 本科 电商 上市公司 2000人以上 80000 60000 70000.0
1450 数据分析总监 深圳白骑士大数据有限公司 深圳 科技园 金融 算法 数据挖掘 数据分析 “平台好,创新型,发展迅速,股权期权” 经验5-10年 硕士 企业服务,金融 A轮 50-150人 65000 38000 51500.0
1455 资深数据分析师(J11772) 货拉拉 深圳 上梅林 BI 商业 数据分析 “发展空间大” 经验5-10年 本科 移动互联网,消费生活 C轮 2000人以上 70000 50000 60000.0
1466 数据分析专家 字节跳动 深圳 南山区 数据分析 “扁平管理,过亿用户,职业大牛” 经验不限 本科 文娱丨内容 C轮 2000人以上 70000 35000 52500.0
1504 商业数据分析师 (003969) vivo 深圳 宝安区 移动互联网 “弹性工作,股票期权,大数据平台 千万用户” 经验3-5年 本科 硬件 未融资 2000人以上 80000 50000 65000.0
1512 数据分析高级工程师 腾讯 深圳 前海 数据分析 Hadoop Spark 数据挖掘 “腾讯平台 福利待遇好 技术成长” 经验3-5年 本科 社交 上市公司 2000人以上 70000 40000 55000.0
1514 商业数据分析师 vivo 深圳 宝安区 移动互联网 “股票期权,精英团队,弹性工作” 经验3-5年 本科 硬件 未融资 2000人以上 80000 50000 65000.0
1538 数据分析总监 万顺赢 深圳 科技园 医疗健康 工具软件 “中国知名企业,福利好” 经验5-10年 硕士 移动互联网,金融 未融资 150-500人 80000 45000 62500.0
def get_three_std_data(df):
    """提取疑似异常数据进行分析"""
    mean = df.平均薪资.mean()
    std = df.平均薪资.std()
    a = df.平均薪资.mean() + 3 * df.平均薪资.std()
    b = df.平均薪资.mean() - 3 * df.平均薪资.std()
    result = df[(df.平均薪资 > a) | (df.平均薪资 < b)]
    return result
get_three_std_data(df).shape
(14, 14)
df_all = get_three_std_data(df)
df_all[df.城市=='北京'] 
:2: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  df_all[df.城市=='北京']
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
744 数据分析师/数据科学家 滴滴 北京 西北旺 Hadoop 数据挖掘 MySQL “数据精确,老大nb,汇报线简单” 经验5-10年 本科 汽车丨出行 不需要融资 2000人以上 60000 40000 50000.0
762 数据分析总监 发现旅行 北京 朝阳区 数据分析 “扁平化管理,氛围超好,地位重要,待遇优厚” 经验5-10年 本科 旅游 B轮 50-150人 80000 50000 65000.0
get_three_std_data(df[df.城市 == "北京"])
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
744 数据分析师/数据科学家 滴滴 北京 西北旺 Hadoop 数据挖掘 MySQL “数据精确,老大nb,汇报线简单” 经验5-10年 本科 汽车丨出行 不需要融资 2000人以上 60000 40000 50000.0
762 数据分析总监 发现旅行 北京 朝阳区 数据分析 “扁平化管理,氛围超好,地位重要,待遇优厚” 经验5-10年 本科 旅游 B轮 50-150人 80000 50000 65000.0

10. 根据学历统计薪资

df.学历要求.value_counts()
本科    1332
不限     109
大专      89
硕士      78
博士       1
Name: 学历要求, dtype: int64
# 学历分组统计薪资
df.groupby('学历要求').mean().sort_values(by='平均薪资',ascending=False)
最高薪资 最低薪资 平均薪资
学历要求
博士 60000.000000 35000.000000 47500.000000
硕士 27474.358974 15692.307692 21583.333333
本科 24875.375375 14390.390390 19632.882883
不限 22807.339450 13146.788991 17977.064220
大专 13932.584270 8348.314607 11140.449438

12.单独提取出北京的数据进行分析

# 将北京的数据过滤出来, 使用.copy创建成副本
df_beijing = df[df.城市 == "北京"].copy()
df_beijing.地点.value_counts()
朝阳区     82
海淀区     76
望京      44
中关村     20
西北旺     14
        ..
石景山区     1
八角       1
国贸       1
西苑       1
燕莎       1
Name: 地点, Length: 68, dtype: int64
df_beijing['地点'].values
array(['苏州街', '海淀区', '大屯', '太平桥', '海淀区', '西北旺', '朝阳区', '海淀区', '和平里',
       '海淀区', '酒仙桥', '朝阳区', '五道口', '海淀区', '西直门', '西二旗', '海淀区', '大山子',
       '朝阳区', '苏州街', '北太平庄', '朝阳区', '西二旗', '大山子', '西三旗', '中关村', '海淀区',
       '亦庄', '朝阳区', '海淀区', '上地', '中关村', '中关村', '五道口', '西城区', '上地', '朝阳区',
       '宣武门', '西二旗', '朝阳区', '海淀区', '朝阳区', '三元桥', '东四', '中关村', '海淀区', '望京',
       '团结湖', '海淀区', '亚运村', '中关村', '东城区', '朝阳区', '朝阳区', '西直门', '朝阳区',
       '朝阳区', '朝阳区', '朝阳区', '酒仙桥', '海淀区', '东城区', '西城区', '望京', '亦庄', '海淀区',
       '中关村', '团结湖', '海淀区', '海淀区', '望京', '小关', '朝阳区', '朝阳区', '海淀区', '东城区',
       '海淀区', '朝阳区', '朝阳区', '西北旺', '望京', '望京', '西北旺', '海淀区', '朝阳区', '东四',
       '朝阳区', '海淀区', '海淀区', '上地', '朝阳区', '朝阳区', '朝阳区', '海淀区', '团结湖',
       '大望路', '望京', '海淀区', '大望路', '石佛营', '朝阳区', '海淀区', '和平里', '清河', '上地',
       '海淀区', '三里河', '海淀区', '望京', '朝阳区', '朝阳区', '三元桥', '三里屯', '朝阳区',
       '朝阳区', '中关村', '朝阳区', '望京', '海淀区', '海淀区', '海淀区', '东城区', '朝阳区',
       '海淀区', '海淀区', '西北旺', '朝阳区', '西北旺', '海淀区', '北太平庄', '望京', '朝阳区',
       '团结湖', '上地', '海淀区', '上地', '西北旺', '望京', '小关', '丰台区', '东城区', '朝阳区',
       '海淀区', '望京', '酒仙桥', '国贸', '酒仙桥', '亚运村', '海淀区', '朝阳区', '北京大学', '上地',
       '酒仙桥', '北京大学', '朝外', '中关村', '大望路', '中关村', '朝阳区', '望京', '太平桥', '望京',
       '朝阳区', '海淀区', '朝阳门', '望京', '雍和宫', '朝阳区', '东四', '石佛营', '海淀区', '望京',
       '朝阳区', '东四', '望京', '望京', '东城区', '中关村', '海淀区', '华贸', '西三旗', '西三旗',
       '亮马桥', '朝阳区', '海淀区', '酒仙桥', '朝阳区', '海淀区', '望京', '朝阳区', '东城区',
       '学院路', '朝阳区', '团结湖', '四惠', '酒仙桥', '朝阳区', '望京', '北京大学', '朝阳区',
       '中关村', '望京', '昌平区', '东城区', '望京', '酒仙桥', '学院路', '朝阳区', '西城区', '酒仙桥',
       '大望路', '中关村', '小关', '朝阳区', '望京', '朝阳区', '大望路', '海淀区', '昌平区', '海淀区',
       '朝阳区', '西三旗', '西北旺', '望京', '东四', '八大处', '望京', '东四', '大山子', '三元桥',
       '东坝', '西北旺', '燕莎', '海淀区', '海淀区', '雍和宫', '望京', '十里堡', '学院路', '中关村',
       '月坛', '团结湖', '海淀区', '大山子', '朝阳区', '海淀区', '北京大学', '朝阳区', '海淀区',
       '西北旺', '海淀区', '八角', '望京', '望京', '学院路', '来广营', '望京', '大望路', '中关村',
       '朝阳区', '朝阳区', '海淀区', '北京大学', '海淀区', '昌平区', '万泉河', '海淀区', '望京',
       '海淀区', '望京', '望京', '酒仙桥', '朝阳区', '五道口', '西三旗', '中关村', '中关村', '朝阳区',
       '海淀区', '朝阳区', '望京', '中关村', '延庆区', '百子湾', '建国门', '中关村', '海淀区', '亦庄',
       '安定门', '北苑', '望京', '望京', '海淀区', '朝阳区', '百子湾', '安贞', '西二旗', '望京',
       '望京', '上地', '朝阳区', '朝阳区', '朝阳区', '西北旺', '朝阳区', '北苑', '朝外', '海淀区',
       '朝阳区', '亮马桥', '双井', '安贞', '学院路', '望京', '双井', '朝外', '酒仙桥', '大山子',
       '知春路', '朝阳区', '朝阳区', '海淀区', '朝阳区', '大山子', '海淀区', '朝阳区', '大山子',
       '朝阳区', '海淀区', '小关', '西三旗', '昌平区', '望京', '朝阳区', '奥运村', '朝阳区', '海淀区',
       '朝阳区', '海淀区', '五道口', '海淀区', '上地', '四惠', '朝阳区', '大兴区', '学院路', '朝外',
       '朝阳区', '朝阳区', '朝阳区', '海淀区', '西二旗', '清河', '海淀区', '十里堡', '大屯', '望京',
       '海淀区', '朝阳区', '朝阳区', '西北旺', '朝阳区', '望京', '上地', '海淀区', '海淀区', '朝阳区',
       '朝阳区', '奥运村', '太阳宫', '西苑', '西二旗', '科技园区', '朝阳公园', '西二旗', '朝阳区',
       '太平桥', '大山子', '团结湖', '西北旺', '海淀区', '海淀区', '建外大街', '雍和宫', '望京',
       '海淀区', '海淀区', '永顺', '四惠', '大兴区', '安定门', '五道口', '安定门', '大屯', '东坝',
       '海淀区', '海淀区', '亦庄', '十里堡', '朝阳区', '海淀区', '朝阳区', '朝阳区', '中关村',
       '海淀区', '大屯', '望京', '朝阳门', '中关村', '上地', '海淀区', '大兴区', '大兴区', '石景山区',
       '西北旺', '五道口', '东城区', '望京', '潘家园', '西北旺', '海淀区', '朝阳门', '望京', '朝阳门',
       '大屯'], dtype=object)
# 对北京的地区进行去重
#方式一:
list(set(df_beijing['地点'].values))
#方式二:
df_beijing.地点.value_counts().index
#方法三:
np.unique(df_beijing.地点)
#方法四:
df_beijing.地点.drop_duplicates()
418     苏州街
419     海淀区
420      大屯
421     太平桥
423     西北旺
       ... 
816    朝阳公园
825    建外大街
830      永顺
856    石景山区
861     潘家园
Name: 地点, Length: 68, dtype: object
loc = np.unique(df_beijing.地点)
loc
array(['万泉河', '三元桥', '三里屯', '三里河', '上地', '东四', '东坝', '东城区', '中关村', '丰台区',
       '五道口', '亚运村', '亦庄', '亮马桥', '八大处', '八角', '北京大学', '北太平庄', '北苑',
       '十里堡', '华贸', '双井', '和平里', '四惠', '团结湖', '国贸', '大兴区', '大屯', '大山子',
       '大望路', '太平桥', '太阳宫', '奥运村', '学院路', '安定门', '安贞', '宣武门', '小关', '延庆区',
       '建国门', '建外大街', '昌平区', '月坛', '望京', '朝外', '朝阳公园', '朝阳区', '朝阳门',
       '来广营', '永顺', '海淀区', '清河', '潘家园', '燕莎', '百子湾', '知春路', '石佛营', '石景山区',
       '科技园区', '苏州街', '西三旗', '西二旗', '西北旺', '西城区', '西直门', '西苑', '酒仙桥',
       '雍和宫'], dtype=object)
[plt.cm.tab10(i/float(len(loc))) for i in range(len(loc))]
# 小数的指定对应色卡,颜色渐变过渡数值,气泡的颜色不一样,每一个气泡对应一个地区
[(0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.8392156862745098, 0.15294117647058825, 0.1568627450980392, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.8901960784313725, 0.4666666666666667, 0.7607843137254902, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0)]
[*enumerate(loc)]
[(0, '万泉河'),
 (1, '三元桥'),
 (2, '三里屯'),
 (3, '三里河'),
 (4, '上地'),
 (5, '东四'),
 (6, '东坝'),
 (7, '东城区'),
 (8, '中关村'),
 (9, '丰台区'),
 (10, '五道口'),
 (11, '亚运村'),
 (12, '亦庄'),
 (13, '亮马桥'),
 (14, '八大处'),
 (15, '八角'),
 (16, '北京大学'),
 (17, '北太平庄'),
 (18, '北苑'),
 (19, '十里堡'),
 (20, '华贸'),
 (21, '双井'),
 (22, '和平里'),
 (23, '四惠'),
 (24, '团结湖'),
 (25, '国贸'),
 (26, '大兴区'),
 (27, '大屯'),
 (28, '大山子'),
 (29, '大望路'),
 (30, '太平桥'),
 (31, '太阳宫'),
 (32, '奥运村'),
 (33, '学院路'),
 (34, '安定门'),
 (35, '安贞'),
 (36, '宣武门'),
 (37, '小关'),
 (38, '延庆区'),
 (39, '建国门'),
 (40, '建外大街'),
 (41, '昌平区'),
 (42, '月坛'),
 (43, '望京'),
 (44, '朝外'),
 (45, '朝阳公园'),
 (46, '朝阳区'),
 (47, '朝阳门'),
 (48, '来广营'),
 (49, '永顺'),
 (50, '海淀区'),
 (51, '清河'),
 (52, '潘家园'),
 (53, '燕莎'),
 (54, '百子湾'),
 (55, '知春路'),
 (56, '石佛营'),
 (57, '石景山区'),
 (58, '科技园区'),
 (59, '苏州街'),
 (60, '西三旗'),
 (61, '西二旗'),
 (62, '西北旺'),
 (63, '西城区'),
 (64, '西直门'),
 (65, '西苑'),
 (66, '酒仙桥'),
 (67, '雍和宫')]
df.loc[df.地点=='万泉河',:]
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
705 数据分析工程师(可视化方向) 一起考教师 北京 万泉河 教育 可视化 “五险一金、晋升空间大、弹性工作、扁平管理” 经验1-3年 本科 移动互联网,教育 B轮 150-500人 12000 10000 11000.0
# 绘制气泡图
plt.figure(figsize=(6,4),dpi=100)  # 创建画布,figsize画布的大小,dpi清晰度

colors = [plt.cm.tab10(i/float(len(loc))) for i in range(len(loc))] # 设定每一个气泡的颜色列表

for i,d in enumerate(loc):          # 位置和值
    data = df.loc[df.地点==d,:]     # 如果d=三里屯 则data为三里屯的数据
    if data.shape[0]>6:             # 设定条件:数据的个数大于6行的时候,才划气泡
        plt.scatter(i,data.shape[0] # 画点图的函数plt.scatter,i为x的数据,y=data.shape[0]行数
                    ,c=np.array(colors[i]).reshape(1,-1) # 对应颜色,上文色卡
                    ,s=data.shape[0]*50      # 行数*50 作为气泡的大小。alpha气泡对应底色的对比度
                    ,alpha=.6)               # 绘制气泡图  当气泡之间有重合时,可以设小点
        plt.text(i,data.shape[0],d,fontdict={'size':8,'color':'b'} # 添加文本注释,指气泡中的文字,size为字的大小,color为字的颜色,d为气泡真实值
                 ,horizontalalignment='center'  # 地点文字在气泡水平位置
                 ,verticalalignment='center'
                )  # 添加文本注释
        
# 添加装饰
plt.xticks(fontsize=10) # x轴的刻度标签大小为10
plt.yticks(fontsize=10) # y轴的刻度标签大小为10
plt.xlim(0,70)         # 设置x轴的刻度范围
plt.ylim(0,100)        # 设置y轴的刻度范围
plt.title("北京市不同区所需数据分析师数量", fontsize=12) # 设置图片标题,fontsize标题的大小
plt.legend() # 显示图例
plt.show();
No handles with labels found to put in legend.

数据清洗(一):拉勾网数据分析案例_第3张图片

df_beijing.行业.value_counts()[:10]
金融           46
文娱丨内容        43
移动互联网        36
移动互联网,金融     29
消费生活         29
电商           17
房产家居         17
教育           16
数据服务         15
汽车丨出行        14
Name: 行业, dtype: int64
df.行业.str.contains('移动互联网').sum()
df.行业.str.contains('电商').sum()
237
# 统计移动互联网公司数量
df_beijing[df_beijing.行业.str.contains('移动互联网')].shape
(151, 14)
# 统计房地产公司数量
df_beijing[df_beijing.行业.str.contains('房')].shape
(17, 14)
# 统计金融公司数量
df_beijing[df_beijing.行业.str.contains('金融')].shape
(87, 14)
df.岗位技能
0       大数据 移动互联网 Hive Hadoop Spark
1                           SQL 数据库
2                     SPSS 数据运营 数据库
3            大数据 金融 MySQL Oracle 算法
4                          数据分析 数据库
                   ...             
1633                       大数据 数据分析
1634                      移动互联网 大数据
1635                        市场 数据分析
1636          架构师 Python 爬虫工程师 机器学习
1637                      数据挖掘 数据分析
Name: 岗位技能, Length: 1609, dtype: object

13.绘制岗位技能词云

了解一下,数据分析这个行业,对什么技能要求最多

# 把岗位技能拼接到一起
s = df.岗位技能.str.cat(sep=" ")
work_str = df.岗位技能.str.cat(sep=" ") # 字符串的方法,将岗位技能拼接成一个整体的字符串
skill_list = work_str.split(" ")
skill_set = set(skill_list)
res_dict = {}
for i in skill_set:
    res_dict[i] = skill_list.count(i)
sorted(res_dict.items(),key=lambda x:x[1],reverse=True)
[('数据分析', 1145),
 ('大数据', 308),
 ('SQL', 279),
 ('电商', 207),
 ('数据运营', 183),
 ('移动互联网', 175),
 ('BI', 167),
 ('数据挖掘', 159),
 ('数据库', 125),
 ('商业', 115),
 ('SPSS', 100),
 ('MySQL', 93),
 ('可视化', 89),
 ('金融', 64),
 ('数据处理', 58),
 ('教育', 48),
 ('游戏', 48),
 ('新零售', 46),
 ('互联网金融', 43),
 ('Hive', 42),
 ('SQLServer', 42),
 ('算法', 40),
 ('广告营销', 33),
 ('风控', 29),
 ('Hadoop', 28),
 ('企业服务', 25),
 ('本地生活', 25),
 ('数据仓库', 25),
 ('增长黑客', 23),
 ('运营', 23),
 ('医疗健康', 21),
 ('ETL', 20),
 ('社交', 17),
 ('分析师', 16),
 ('银行', 16),
 ('市场分析', 14),
 ('视频', 14),
 ('Spark', 14),
 ('数据架构', 13),
 ('房产服务', 12),
 ('汽车', 12),
 ('行业分析', 12),
 ('云计算', 11),
 ('信息安全', 11),
 ('物流', 11),
 ('通信/网络设备', 11),
 ('Java', 11),
 ('工具软件', 10),
 ('其他', 10),
 ('风险分析', 9),
 ('Oracle', 9),
 ('数据库开发', 9),
 ('DBA', 9),
 ('借贷', 8),
 ('旅游', 8),
 ('直播', 7),
 ('分析', 7),
 ('用户增长', 7),
 ('机器学习', 7),
 ('产品', 7),
 ('产品策划', 6),
 ('保险', 6),
 ('营销策略', 6),
 ('用户运营', 5),
 ('媒体', 5),
 ('电商运营', 5),
 ('数据', 5),
 ('弹性工作', 5),
 ('市场竞争分析', 5),
 ('产品运营', 5),
 ('策略设计', 5),
 ('信贷风险管理', 5),
 ('消费者分析', 5),
 ('征信', 5),
 ('滴滴', 5),
 ('审核', 4),
 ('NLP', 4),
 ('Scala', 4),
 ('岗位晋升', 4),
 ('策略运营', 4),
 ('产品设计', 4),
 ('市场', 4),
 ('财务', 3),
 ('项目管理', 3),
 ('Python', 3),
 ('MongoDB', 3),
 ('分类信息', 3),
 ('风险管理', 3),
 ('智能硬件', 3),
 ('行业研究', 3),
 ('建模', 3),
 ('扁平管理', 3),
 ('营销', 3),
 ('内容运营', 3),
 ('效果跟踪', 3),
 ('支付', 3),
 ('SEO', 3),
 ('绩效奖金', 3),
 ('技能培训', 3),
 ('节日礼物', 3),
 ('股票期权', 2),
 ('搜索', 2),
 ('带薪年假', 2),
 ('定期体检', 2),
 ('人工智能', 2),
 ('用户研究', 2),
 ('推广', 2),
 ('内容', 2),
 ('信用产品', 2),
 ('理财', 2),
 ('深度学习', 2),
 ('体育', 2),
 ('需求分析', 2),
 ('架构师', 2),
 ('Redis', 2),
 ('年度旅游', 2),
 ('数据审核', 2),
 ('游戏运营', 2),
 ('网站分析', 2),
 ('基金', 2),
 ('投资/融资', 2),
 ('数字营销', 2),
 ('风险评估', 2),
 ('网店推广', 2),
 ('DB2', 2),
 ('服务器端', 2),
 ('目标管理', 2),
 ('后端', 2),
 ('地图', 1),
 ('资产/项目评估', 1),
 ('安全', 1),
 ('SaaS', 1),
 ('年底双薪', 1),
 ('人力资源', 1),
 ('外企', 1),
 ('售后', 1),
 ('APP推广', 1),
 ('就近租房补贴', 1),
 ('团队建设', 1),
 ('技术支持', 1),
 ('新媒体运营', 1),
 ('管理规范', 1),
 ('天猫运营', 1),
 ('决策能力', 1),
 ('人事', 1),
 ('售前', 1),
 ('市场推广', 1),
 ('数据压缩', 1),
 ('增长黑客(GrowthHacking)', 1),
 ('零食水果供应', 1),
 ('大厨定制三餐', 1),
 ('名企保面试', 1),
 ('区块链', 1),
 ('KPI考核', 1),
 ('战略管理', 1),
 ('解决方案', 1),
 ('会计', 1),
 ('技术管理', 1),
 ('产品经理', 1),
 ('跨境电商', 1),
 ('资信评估', 1),
 ('一手内推信息', 1),
 ('运维', 1),
 ('资产管理', 1),
 ('供应链', 1),
 ('用户', 1),
 ('专项奖金', 1),
 ('交互设计', 1),
 ('产销协调', 1),
 ('证券/期货', 1),
 ('Linux/Unix', 1),
 ('客服', 1),
 ('上市', 1),
 ('精准高效对接', 1),
 ('理财顾问', 1),
 ('猎头专业服务', 1),
 ('互相营销', 1),
 ('领导好', 1),
 ('营销管理', 1),
 ('新闻|出版', 1),
 ('VC', 1),
 ('广告创意', 1),
 ('hadoop', 1),
 ('后台', 1),
 ('PKI', 1),
 ('分布式', 1),
 ('软件开发', 1),
 ('整合营销', 1),
 ('核查', 1),
 ('校对', 1),
 ('淘宝运营', 1),
 ('社会化营销', 1),
 ('尽职调查', 1),
 ('信用管理', 1),
 ('爬虫工程师', 1),
 ('广告协调', 1),
 ('渠道', 1),
 ('成本', 1),
 ('外汇', 1),
 ('HR', 1),
 ('商业产品', 1),
 ('SEM', 1)]
jineng_list = s.split(' ')
jineng_list
['大数据',
 '移动互联网',
 'Hive',
 'Hadoop',
 'Spark',
 'SQL',
 '数据库',
 'SPSS',
 '数据运营',
 '数据库',
 '大数据',
 '金融',
 'MySQL',
 'Oracle',
 '算法',
 '数据分析',
 '数据库',
 '分析师',
 '电商',
 '大数据',
 '数据分析',
 'SQL',
 '数据库',
 '电商',
 '商业',
 '数据分析',
 '专项奖金',
 '带薪年假',
 '弹性工作',
 '管理规范',
 'BI',
 '商业',
 'SQL',
 '数据分析',
 '目标管理',
 'KPI考核',
 '决策能力',
 '战略管理',
 '数据分析',
 '可视化',
 'SQL',
 '电商',
 '企业服务',
 '商业',
 '数据分析',
 '大数据',
 '金融',
 '数据分析',
 '数据分析',
 '新零售',
 '大数据',
 '商业',
 '广告营销',
 '移动互联网',
 '数据分析',
 '数据挖掘',
 'MySQL',
 '大数据',
 '企业服务',
 'SQL',
 '数据分析',
 '金融',
 '大数据',
 '数据分析',
 '数据运营',
 '数据库',
 'SQL',
 '数据分析',
 '大数据',
 '数据分析',
 '数据分析',
 '数据处理',
 'SQLServer',
 '大数据',
 '电商',
 '数据分析',
 '移动互联网',
 '教育',
 '数据分析',
 '大数据',
 '机器学习',
 '数据挖掘',
 '大数据',
 '金融',
 '数据分析',
 '数据处理',
 '算法',
 '数据分析',
 '广告营销',
 '企业服务',
 '商业',
 '数据分析',
 'DBA',
 '游戏',
 '数据分析',
 'SQL',
 '社交',
 '大数据',
 'BI',
 '数据库',
 '增长黑客',
 '数据分析',
 '互联网金融',
 'SQL',
 '数据分析',
 '电商',
 '金融',
 '数据挖掘',
 '数据分析',
 '医疗健康',
 '数据分析',
 'SPSS',
 '金融',
 'SQL',
 '数据库',
 '社交',
 '数据分析',
 '大数据',
 '移动互联网',
 'SQL',
 '数据分析',
 '游戏',
 'SQL',
 'SPSS',
 '数据分析',
 '互联网金融',
 '数据分析',
 'BI',
 '商业',
 '数据分析',
 '信贷风险管理',
 '风控',
 '风险分析',
 '数据分析',
 '数据运营',
 '数据库',
 '新零售',
 '物流',
 '数据分析',
 '电商',
 '移动互联网',
 '数据分析',
 '大数据',
 '数据挖掘',
 '数据分析',
 '大数据',
 '可视化',
 'SPSS',
 '数据分析',
 '电商',
 '本地生活',
 '数据分析',
 '数据库',
 '数据运营',
 '可视化',
 '社交',
 '移动互联网',
 '年底双薪',
 '节日礼物',
 '技能培训',
 '绩效奖金',
 '数据分析',
 '数据分析',
 '大数据',
 '商业',
 'BI',
 '可视化',
 '数据分析',
 '数据库',
 '数据分析',
 'SQL',
 '大数据',
 '数据分析',
 'SPSS',
 '云计算',
 '大数据',
 '数据分析',
 'BI',
 '数据分析',
 'SQL',
 '数据分析',
 'MySQL',
 '数据分析',
 '运营',
 '数据分析',
 '数据挖掘',
 '数据分析',
 'BI',
 '风控',
 '数据分析',
 '移动互联网',
 '数据分析',
 '电商',
 'MySQL',
 '新零售',
 '电商',
 'BI',
 'SQL',
 '数据分析',
 '数据库',
 '电商',
 'BI',
 '数据分析',
 '数据运营',
 'SQL',
 'SQL',
 '数据库',
 '数据运营',
 'SPSS',
 '大数据',
 '征信',
 '数据分析',
 'SPSS',
 '广告营销',
 '数据分析',
 '数字营销',
 '金融',
 '大数据',
 'BI',
 '可视化',
 '数据库',
 '电商',
 '企业服务',
 '可视化',
 'SQL',
 '数据运营',
 '大数据',
 '金融',
 '商业',
 '数据分析',
 '大数据',
 '互联网金融',
 '数据分析',
 '大数据',
 'BI',
 '数据分析',
 '电商',
 '大数据',
 '数据分析',
 'SQL',
 '数据分析',
 '移动互联网',
 '本地生活',
 'BI',
 '数据分析',
 'SQL',
 '数据库',
 '内容',
 'Java',
 '数据分析',
 '数据分析',
 '本地生活',
 '新零售',
 '数据分析',
 '数据运营',
 'BI',
 'SQL',
 '大数据',
 '移动互联网',
 '数据分析',
 '数据分析',
 '数据运营',
 'SQL',
 'SPSS',
 '旅游',
 '大数据',
 'ETL',
 'Hive',
 '数据分析',
 '数据处理',
 '移动互联网',
 '教育',
 '数据分析',
 '数据运营',
 'Spark',
 '大数据',
 '数据分析',
 '新零售',
 '教育',
 '移动互联网',
 '数据分析',
 '数据运营',
 'SQL',
 '电商',
 '新零售',
 '数据分析',
 '数据挖掘',
 '数据分析',
 'Hive',
 'BI',
 '可视化',
 '数据分析',
 'SQL',
 '大数据',
 '其他',
 'ETL',
 'DB2',
 '数据分析',
 '信息安全',
 '机器学习',
 '建模',
 '算法',
 '大数据',
 '数据分析',
 'Hive',
 '风控',
 '数据分析',
 '游戏',
 '大数据',
 'MySQL',
 'Hadoop',
 'Spark',
 '数据分析',
 '银行',
 '借贷',
 '数据分析',
 'SQL',
 '电商',
 '商业',
 'SQL',
 'MySQL',
 '数据挖掘',
 '数据分析',
 '数据分析',
 '电商',
 '数据挖掘',
 '数据分析',
 '数据处理',
 'MySQL',
 '互联网金融',
 '风控',
 '分析师',
 '信用产品',
 '数据分析',
 '数据分析',
 'SQL',
 '旅游',
 '移动互联网',
 '数据分析',
 '数据库',
 '数据分析',
 'SQL',
 '数据运营',
 '金融',
 '商业',
 'BI',
 '可视化',
 '数据分析',
 'SPSS',
 'SQL',
 '数据库',
 '数据分析',
 '数据分析',
 'SPSS',
 '数据分析',
 '数据分析',
 '银行',
 'MySQL',
 '数据分析',
 '风控',
 '信贷风险管理',
 '金融',
 '通信/网络设备',
 'Hive',
 '数据分析',
 '大数据',
 '移动互联网',
 '大数据',
 '数据分析',
 'SQL',
 '电商',
 '移动互联网',
 '数据分析',
 'SQL',
 'BI',
 '数据分析',
 '数据运营',
 '电商',
 '移动互联网',
 '数据分析',
 '企业服务',
 '大数据',
 '数据运营',
 '可视化',
 '数据库',
 '数据分析',
 '数据分析',
 '数据库',
 'SQL',
 '移动互联网',
 '移动互联网',
 '金融',
 '数据分析',
 'SQL',
 '电商',
 '新零售',
 '数据分析',
 '数据分析',
 '数据仓库',
 '数据库开发',
 '电商',
 'BI',
 '数据分析',
 '移动互联网',
 '商业',
 'BI',
 '数据分析',
 'BI',
 '可视化',
 '数据运营',
 '数据分析',
 '数据分析',
 'MySQL',
 'Hadoop',
 '教育',
 '移动互联网',
 'SQL',
 'BI',
 '数据分析',
 '数据架构',
 'BI',
 '可视化',
 '数据分析',
 '数据运营',
 '数据分析',
 'MySQL',
 '游戏',
 '大数据',
 '数据挖掘',
 '数据分析',
 '数据分析',
 '数据库',
 '数据分析',
 '数据运营',
 '大数据',
 '移动互联网',
 '数据分析',
 '大数据',
 '金融',
 '数据分析',
 'SQL',
 'BI',
 '商业',
 'Hadoop',
 'MySQL',
 '数据挖掘',
 '信息安全',
 '数据分析',
 '数据库',
 'SQL',
 '教育',
 '数据分析',
 '数据运营',
 'SQL',
 '大数据',
 '数据分析',
 '数据分析',
 '数据运营',
 '数据库',
 'SQL',
 '大数据',
 '数据分析',
 '数据处理',
 '数据分析',
 '电商',
 '新零售',
 '电商',
 '数据挖掘',
 '数据分析',
 '算法',
 '电商',
 'BI',
 'SPSS',
 '互联网金融',
 'SQLServer',
 '数据分析',
 '数据挖掘',
 'MySQL',
 '大数据',
 '数据分析',
 '数据库',
 'SPSS',
 '数据分析',
 '数据分析',
 'MySQL',
 '数据分析',
 '新零售',
 '数据分析',
 '数据分析',
 '商业',
 '数据分析',
 'SQL',
 '数据分析',
 '电商',
 '医疗健康',
 'MySQL',
 '数据分析',
 'BI',
 '数据分析',
 '数据分析',
 'BI',
 '数据分析',
 '可视化',
 '电商',
 '企业服务',
 'BI',
 '数据分析',
 'SQL',
 '数据运营',
 '电商',
 '大数据',
 '汽车',
 '数据分析',
 'SQL',
 '移动互联网',
 '数据分析',
 '大数据',
 '数据分析',
 '数据分析',
 '数据运营',
 '金融',
 'BI',
 '数据分析',
 '数据运营',
 '商业',
 '互联网金融',
 'SQL',
 '商业',
 '数据分析',
 'SPSS',
 '移动互联网',
 '数据分析',
 '大数据',
 '电商',
 '本地生活',
 '数据分析',
 'BI',
 '商业',
 '数据分析',
 '数据分析',
 '可视化',
 'SQL',
 '数据分析',
 '数据库',
 '电商',
 '社交',
 '数据分析',
 '数据处理',
 '数据分析',
 '本地生活',
 '汽车',
 '数据分析',
 'SQL',
 '商业',
 '商业',
 '数据分析',
 '增长黑客',
 '数据分析',
 'SQL',
 'BI',
 '可视化',
 '数据分析',
 '移动互联网',
 '电商',
 '大数据',
 '电商',
 '数据分析',
 '数据挖掘',
 '数据分析',
 '数据处理',
 '大数据',
 '金融',
 '数据挖掘',
 '数据分析',
 '数据分析',
 'SQL',
 '数据库',
 '电商',
 'SQL',
 '数据分析',
 '可视化',
 '建模',
 '深度学习',
 '机器学习',
 '数据挖掘',
 '银行',
 '数据挖掘',
 '数据分析',
 '数据分析',
 '电商',
 '商业',
 'BI',
 '可视化',
 '数据分析',
 '数据分析',
 '房产服务',
 '移动互联网',
 '可视化',
 '数据分析',
 '数据运营',
 '商业',
 'SQL',
 '数据分析',
 '大数据',
 '数据挖掘',
 'Hadoop',
 '数据分析',
 '大数据',
 '数据分析',
 '数据分析',
 'SQLServer',
 '数据处理',
 '大数据',
 '媒体',
 '数据挖掘',
 '数据分析',
 '游戏',
 '企业服务',
 '数据分析',
 '行业分析',
 '大数据',
 '数据分析',
 'SQL',
 'BI',
 '可视化',
 '数据分析',
 'hadoop',
 '风控',
 '风险管理',
 '风险评估',
 '大数据',
 '数据分析',
 'SQL',
 '数据分析',
 'Hive',
 'MySQL',
 '数据分析',
 '电商',
 '数据分析',
 '旅游',
 '数据分析',
 'SPSS',
 '游戏',
 '数据分析',
 '商业',
 '移动互联网',
 '数据分析',
 '数据运营',
 '移动互联网',
 '数据分析',
 '数据分析',
 '数据分析',
 '金融',
 '数据挖掘',
 '数据分析',
 '数据分析',
 '数据运营',
 '数据分析',
 '风控',
 '策略设计',
 '电商',
 '移动互联网',
 '数据分析',
 '数据挖掘',
 '数据分析',
 '电商',
 '教育',
 '数据分析',
 'MySQL',
 'Redis',
 '大数据',
 'BI',
 '数据分析',
 'SQL',
 '可视化',
 '数据分析',
 'SPSS',
 '新零售',
 '物流',
 '数据分析',
 'Hive',
 '数据处理',
 '数据分析',
 'BI',
 '数据分析',
 '数据库',
 'DBA',
 '大数据',
 '数据挖掘',
 '算法',
 '大数据',
 'MySQL',
 '电商',
 'BI',
 '可视化',
 '数据分析',
 'SQL',
 '移动互联网',
 '增长黑客',
 '数据分析',
 '数据运营',
 '大数据',
 '新零售',
 '数据分析',
 '移动互联网',
 'MySQL',
 '数据分析',
 '大数据',
 '数据分析',
 '数据分析',
 '新零售',
 '电商',
 '数据分析',
 'MySQL',
 '数据仓库',
 '广告创意',
 '广告协调',
 '数据分析',
 '广告营销',
 '数据分析',
 '数据分析',
 '移动互联网',
 '商业',
 '数据分析',
 '增长黑客',
 '可视化',
 '大数据',
 '数据分析',
 '数据分析',
 'SPSS',
 'SQL',
 '数据分析',
 'SQL',
 '数据库',
 '医疗健康',
 '数据分析',
 '大数据',
 '金融',
 '数据分析',
 '移动互联网',
 '媒体',
 '商业',
 '数据分析',
 '银行',
 '数据分析',
 'SPSS',
 '电商',
 '大数据',
 '商业',
 'SQL',
 '数据分析',
 '其他',
 '数据分析',
 '运营',
 '内容运营',
 '新零售',
 '本地生活',
 'BI',
 '数据分析',
 '数据分析',
 '数据分析',
 '市场',
 '游戏',
 'BI',
 '数据分析',
 '教育',
 '电商',
 '大数据',
 '数据分析',
 '后端',
 '服务器端',
 '电商',
 '分析',
 '移动互联网',
 'BI',
 '数据分析',
 '数据库',
 '房产服务',
 '企业服务',
 'BI',
 '可视化',
 '数据库',
 '电商',
 '数据分析',
 'SQL',
 '数据库',
 '数据运营',
 '数据分析',
 '数据分析',
 '移动互联网',
 '风控',
 '游戏',
 '数据分析',
 'SPSS',
 'BI',
 '数据分析',
 '数据分析',
 '大数据',
 '电商',
 '移动互联网',
 '数据分析',
 'BI',
 '增长黑客(GrowthHacking)',
 '数据分析',
 '数据分析',
 '医疗健康',
 '移动互联网',
 '大数据',
 '移动互联网',
 '移动互联网',
 '大数据',
 '数据分析',
 '商业',
 'BI',
 '数据库',
 '视频',
 '产品策划',
 '智能硬件',
 '数据分析',
 'MySQL',
 '数据分析',
 '数据仓库',
 '数据处理',
 '风险分析',
 '风控',
 '移动互联网',
 '大数据',
 '风控',
 '分析师',
 '策略设计',
 '大数据',
 'BI',
 '数据分析',
 'SPSS',
 '金融',
 '算法',
 '数据挖掘',
 '数据分析',
 '数据分析',
 '大数据',
 '数据分析',
 '电商',
 '数据分析',
 'MySQL',
 '数据处理',
 '电商',
 'SQLServer',
 '数据分析',
 '数据分析',
 '数据运营',
 '电商',
 'SPSS',
 '数据分析',
 '数据分析',
 '商业',
 '大数据',
 '算法',
 '数据挖掘',
 '数据分析',
 '大数据',
 '商业',
 'BI',
 '可视化',
 '数据分析',
 '医疗健康',
 '数据分析',
 'BI',
 '游戏',
 '数据分析',
 '数据挖掘',
 '增长黑客',
 'BI',
 '可视化',
 '征信',
 '保险',
 '数据分析',
 'SQL',
 '大数据',
 '数据分析',
 'SPSS',
 '数据分析',
 '市场分析',
 '营销策略',
 '运营',
 'SEM',
 'SEO',
 '数据分析',
 '金融',
 '移动互联网',
 '风控',
 '信用产品',
 '电商',
 '移动互联网',
 '商业',
 'BI',
 '数据分析',
 '数据库',
 '银行',
 '数据分析',
 '教育',
 '数据分析',
 '大数据',
 '教育',
 '数据分析',
 'SPSS',
 '电商',
 '数据挖掘',
 '数据架构',
 '算法',
 '数据分析',
 'SQL',
 '大数据',
 '数据分析',
 '房产服务',
 'BI',
 '数据分析',
 'SQL',
 '运营',
 'BI',
 '商业',
 '可视化',
 '数据分析',
 '广告营销',
 '汽车',
 '营销',
 '数据分析',
 '行业分析',
 '市场分析',
 '目标管理',
 '大数据',
 '数据挖掘',
 '大数据',
 '数据分析',
 '数据挖掘',
 '电商',
 '移动互联网',
 'ETL',
 'Spark',
 '数据仓库',
 '数据分析',
 'Hadoop',
 '数据分析',
 'Hive',
 '大数据',
 '大数据',
 '数据挖掘',
 '数据分析',
 '数据分析',
 '数据分析',
 'SQL',
 '数据分析',
 '数据运营',
 'SPSS',
 '数据分析',
 '电商',
 '移动互联网',
 '数据分析',
 '数据挖掘',
 '数据处理',
 '算法',
 'Hive',
 '数据分析',
 '消费者分析',
 '市场分析',
 '数据挖掘',
 '数据分析',
 '银行',
 '解决方案',
 '新零售',
 '数据分析',
 '电商',
 'SQL',
 '数据分析',
 '风控',
 '数据分析',
 '数据挖掘',
 'NLP',
 '算法',
 'BI',
 '数据分析',
 '电商',
 '移动互联网',
 '数据分析',
 '数据库开发',
 'SQLServer',
 '安全',
 '大数据',
 '数据分析',
 '电商',
 '工具软件',
 '数据分析',
 '用户运营',
 '数据分析',
 '数据分析',
 '数据分析',
 '企业服务',
 '工具软件',
 '数据挖掘',
 '数据架构',
 '数据仓库',
 ...]
jineng_list.count('大数据')
308
# set集合专门用于去重
jineng_set = set(jineng_list)
len(jineng_set)
202
jineng_set.remove('数据分析') 
# 移除数据分析这个技能
len(jineng_set)
201
# 对每一个词进行统计,统计在jineng_list 里面出现了多少次
empty_list = [] # 用于储存统计结果
for i in jineng_set:
    empty_list.append( (i, jineng_list.count(i)))
empty_list
[('地图', 1),
 ('资产/项目评估', 1),
 ('教育', 48),
 ('安全', 1),
 ('股票期权', 2),
 ('SaaS', 1),
 ('用户运营', 5),
 ('Hadoop', 28),
 ('风险分析', 9),
 ('年底双薪', 1),
 ('分析师', 16),
 ('互联网金融', 43),
 ('房产服务', 12),
 ('搜索', 2),
 ('人力资源', 1),
 ('社交', 17),
 ('审核', 4),
 ('财务', 3),
 ('外企', 1),
 ('带薪年假', 2),
 ('市场分析', 14),
 ('银行', 16),
 ('直播', 7),
 ('媒体', 5),
 ('电商运营', 5),
 ('售后', 1),
 ('项目管理', 3),
 ('APP推广', 1),
 ('就近租房补贴', 1),
 ('企业服务', 25),
 ('ETL', 20),
 ('Hive', 42),
 ('定期体检', 2),
 ('SPSS', 100),
 ('团队建设', 1),
 ('数据', 5),
 ('人工智能', 2),
 ('用户研究', 2),
 ('分析', 7),
 ('弹性工作', 5),
 ('NLP', 4),
 ('市场竞争分析', 5),
 ('数据库', 125),
 ('技术支持', 1),
 ('Python', 3),
 ('新媒体运营', 1),
 ('推广', 2),
 ('管理规范', 1),
 ('内容', 2),
 ('MongoDB', 3),
 ('医疗健康', 21),
 ('汽车', 12),
 ('产品策划', 6),
 ('工具软件', 10),
 ('产品运营', 5),
 ('天猫运营', 1),
 ('决策能力', 1),
 ('Scala', 4),
 ('人事', 1),
 ('数据运营', 183),
 ('本地生活', 25),
 ('信用产品', 2),
 ('行业分析', 12),
 ('售前', 1),
 ('市场推广', 1),
 ('数据压缩', 1),
 ('大数据', 308),
 ('增长黑客(GrowthHacking)', 1),
 ('零食水果供应', 1),
 ('大厨定制三餐', 1),
 ('移动互联网', 175),
 ('分类信息', 3),
 ('名企保面试', 1),
 ('保险', 6),
 ('策略设计', 5),
 ('区块链', 1),
 ('KPI考核', 1),
 ('理财', 2),
 ('增长黑客', 23),
 ('战略管理', 1),
 ('解决方案', 1),
 ('数据仓库', 25),
 ('深度学习', 2),
 ('会计', 1),
 ('技术管理', 1),
 ('产品经理', 1),
 ('信贷风险管理', 5),
 ('跨境电商', 1),
 ('Oracle', 9),
 ('数据库开发', 9),
 ('风控', 29),
 ('资信评估', 1),
 ('借贷', 8),
 ('一手内推信息', 1),
 ('运维', 1),
 ('资产管理', 1),
 ('风险管理', 3),
 ('智能硬件', 3),
 ('岗位晋升', 4),
 ('体育', 2),
 ('供应链', 1),
 ('游戏', 48),
 ('用户', 1),
 ('需求分析', 2),
 ('SQL', 279),
 ('架构师', 2),
 ('广告营销', 33),
 ('专项奖金', 1),
 ('行业研究', 3),
 ('交互设计', 1),
 ('旅游', 8),
 ('MySQL', 93),
 ('数据挖掘', 159),
 ('Redis', 2),
 ('建模', 3),
 ('年度旅游', 2),
 ('扁平管理', 3),
 ('产销协调', 1),
 ('算法', 40),
 ('新零售', 46),
 ('DBA', 9),
 ('营销', 3),
 ('用户增长', 7),
 ('证券/期货', 1),
 ('策略运营', 4),
 ('Linux/Unix', 1),
 ('客服', 1),
 ('消费者分析', 5),
 ('上市', 1),
 ('征信', 5),
 ('精准高效对接', 1),
 ('数据审核', 2),
 ('游戏运营', 2),
 ('理财顾问', 1),
 ('网站分析', 2),
 ('视频', 14),
 ('数据处理', 58),
 ('滴滴', 5),
 ('云计算', 11),
 ('内容运营', 3),
 ('猎头专业服务', 1),
 ('机器学习', 7),
 ('互相营销', 1),
 ('产品设计', 4),
 ('领导好', 1),
 ('基金', 2),
 ('Spark', 14),
 ('营销管理', 1),
 ('新闻|出版', 1),
 ('VC', 1),
 ('SQLServer', 42),
 ('广告创意', 1),
 ('市场', 4),
 ('hadoop', 1),
 ('后台', 1),
 ('PKI', 1),
 ('电商', 207),
 ('投资/融资', 2),
 ('数字营销', 2),
 ('效果跟踪', 3),
 ('支付', 3),
 ('信息安全', 11),
 ('风险评估', 2),
 ('分布式', 1),
 ('软件开发', 1),
 ('数据架构', 13),
 ('营销策略', 6),
 ('物流', 11),
 ('SEO', 3),
 ('绩效奖金', 3),
 ('整合营销', 1),
 ('网店推广', 2),
 ('核查', 1),
 ('产品', 7),
 ('校对', 1),
 ('淘宝运营', 1),
 ('社会化营销', 1),
 ('BI', 167),
 ('尽职调查', 1),
 ('信用管理', 1),
 ('其他', 10),
 ('通信/网络设备', 11),
 ('DB2', 2),
 ('爬虫工程师', 1),
 ('服务器端', 2),
 ('广告协调', 1),
 ('运营', 23),
 ('渠道', 1),
 ('目标管理', 2),
 ('成本', 1),
 ('外汇', 1),
 ('可视化', 89),
 ('商业', 115),
 ('技能培训', 3),
 ('HR', 1),
 ('金融', 64),
 ('节日礼物', 3),
 ('商业产品', 1),
 ('后端', 2),
 ('Java', 11),
 ('SEM', 1)]
# 导入词云图的包
from pyecharts.charts import Page, WordCloud
c = (
    WordCloud()   # 生成实例
    .add("岗位技能",empty_list,word_size_range=[20,100],shape="triangle")
    .set_global_opts(title_opts=opts.TitleOpts(title="岗位技能词云图"))
    )
c.render('岗位技能1.html')
'C:\\Users\\Administrator\\Desktop\\python\\机器学习案例汇总\\1.python数据清洗可视化\\岗位技能1.html'

14.对数据做特征处理转换

  1. 数据编码
  2. 数据离散化
  3. 哑变量(One-hot编码)
  4. 数据的标准化 0-1标准化, 普通标准化
  5. 降维(把方差太小的特征删除,PCA压缩降维)

1. 将无法带入模型的特征删除

df.head(2)
岗位名称 公司名称 城市 地点 岗位技能 公司福利 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
0 数据分析师 名片全能王 上海 静安区 大数据 移动互联网 Hive Hadoop Spark “免费早晚餐、扁平化管理、免费零食供应” 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000 15000.0
1 数据分析师 奇虎360金融 上海 张江 SQL 数据库 “发展范围广 薪资高 福利好” 经验不限 本科 金融 上市公司 500-2000人 20000 10000 15000.0
# 把清洗好的数据保存下来
# df.to_csv('data_analysis_clean.csv')
# 生成一个副本,备份,防止数据被破坏
df_copy = df.copy()
df.drop(columns=['公司名称','公司福利'],inplace=True)
df.head(2)
岗位名称 城市 地点 岗位技能 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000 15000.0
1 数据分析师 上海 张江 SQL 数据库 经验不限 本科 金融 上市公司 500-2000人 20000 10000 15000.0

2.对分类数据进行编码

df.工作年限.value_counts()
经验3-5年     673
经验1-3年     432
经验5-10年    221
经验不限       178
经验应届毕业生     75
经验1年以下      28
经验10年以上      2
Name: 工作年限, dtype: int64
d = {"经验不限":0,
    '经验应届毕业生':1,
    "经验1年以下":2,
    "经验1-3年":3,
    "经验3-5年":4,
    "经验5-10年":5,
    "经验10年以上":6}
df.工作年限[:5]
0    经验1-3年
1      经验不限
2    经验1-3年
3    经验1-3年
4    经验1-3年
Name: 工作年限, dtype: object
df.工作年限.map(d)[:5]
0    3
1    0
2    3
3    3
4    3
Name: 工作年限, dtype: int64
df['经验编码'] = df.工作年限.map(d)
df.head()
岗位名称 城市 地点 岗位技能 工作年限 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资 经验编码
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 经验1-3年 本科 移动互联网 D轮及以上 150-500人 20000 10000 15000.0 3
1 数据分析师 上海 张江 SQL 数据库 经验不限 本科 金融 上市公司 500-2000人 20000 10000 15000.0 0
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 经验1-3年 本科 移动互联网,企业服务 上市公司 2000人以上 15000 8000 11500.0 3
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 经验1-3年 本科 金融 B轮 2000人以上 26000 13000 19500.0 3
4 数据分析师 上海 虹桥 数据分析 数据库 经验1-3年 大专 移动互联网,电商 D轮及以上 2000人以上 15000 10000 12500.0 3
# 删除工作年限
df.drop(columns='工作年限',axis=1,inplace=True)
df.head()
岗位名称 城市 地点 岗位技能 学历要求 行业 融资 人数 最高薪资 最低薪资 平均薪资 经验编码
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 本科 移动互联网 D轮及以上 150-500人 20000 10000 15000.0 3
1 数据分析师 上海 张江 SQL 数据库 本科 金融 上市公司 500-2000人 20000 10000 15000.0 0
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 本科 移动互联网,企业服务 上市公司 2000人以上 15000 8000 11500.0 3
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 本科 金融 B轮 2000人以上 26000 13000 19500.0 3
4 数据分析师 上海 虹桥 数据分析 数据库 大专 移动互联网,电商 D轮及以上 2000人以上 15000 10000 12500.0 3

15.练习

把公司规模进行编码(即人数)

df.人数.values
array(['150-500人', '500-2000人', '2000人以上', ..., '500-2000人', '500-2000人',
       '2000人以上'], dtype=object)
# 去除空格
df['人数'] = df['人数'].apply(lambda x: x.strip())
df.人数.values
array(['150-500人', '500-2000人', '2000人以上', ..., '500-2000人', '500-2000人',
       '2000人以上'], dtype=object)
df.人数.value_counts()
2000人以上      596
500-2000人    364
150-500人     326
50-150人      219
15-50人        86
少于15人         18
Name: 人数, dtype: int64
d1 = {"少于15人":0,
    '15-50人':1,
    "50-150人":2,
    "150-500人":3,
    "500-2000人":4,
    "2000人以上":5}
df['公司规模'] = df.人数.map(d1)
# 删除人数这一列
del df['人数']
df.head()
岗位名称 城市 地点 岗位技能 学历要求 行业 融资 最高薪资 最低薪资 平均薪资 经验编码 公司规模
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 本科 移动互联网 D轮及以上 20000 10000 15000.0 3 3
1 数据分析师 上海 张江 SQL 数据库 本科 金融 上市公司 20000 10000 15000.0 0 4
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 本科 移动互联网,企业服务 上市公司 15000 8000 11500.0 3 5
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 本科 金融 B轮 26000 13000 19500.0 3 5
4 数据分析师 上海 虹桥 数据分析 数据库 大专 移动互联网,电商 D轮及以上 15000 10000 12500.0 3 5

1. 使用sklearn进行编码

from sklearn import preprocessing 
encoder = preprocessing.LabelEncoder()
encoder.fit_transform(df.学历要求.values)
array([3, 3, 3, ..., 3, 3, 3])
#  编码顺序
encoder.classes_
# 编码顺序按照首字母排序
array(['不限', '博士', '大专', '本科', '硕士'], dtype=object)
df['学历编码'] = encoder.fit_transform(df.学历要求.values)
df.学历要求.value_counts()
本科    1332
不限     109
大专      89
硕士      78
博士       1
Name: 学历要求, dtype: int64
df.学历编码.value_counts()
3    1332
0     109
2      89
4      78
1       1
Name: 学历编码, dtype: int64

2. 分类变量的独热编码

import sklearn
sklearn.__version__
'0.23.1'
from sklearn.preprocessing import OneHotEncoder
onehot = OneHotEncoder()
df.学历要求.values.reshape(1,-1)
array([['本科', '本科', '本科', ..., '本科', '本科', '本科']], dtype=object)
df.学历要求.values.reshape(-1,1)
array([['本科'],
       ['本科'],
       ['本科'],
       ...,
       ['本科'],
       ['本科'],
       ['本科']], dtype=object)
df.学历要求.isnull().sum()
0
df.学历要求.value_counts()
本科    1332
不限     109
大专      89
硕士      78
博士       1
Name: 学历要求, dtype: int64
onehot.fit_transform(df.学历要求.values.reshape(-1,1)).toarray()
array([[0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.],
       ...,
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.]])
# 对数据进行转换,toarray()转换成数组
data = onehot.fit_transform(df['学历要求'].values.reshape(-1,1)).toarray()
data
array([[0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.],
       ...,
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 1., 0.]])
# 第一步: 先转换成DataFrame
temp = pd.DataFrame(data)
temp
0 1 2 3 4
0 0.0 0.0 0.0 1.0 0.0
1 0.0 0.0 0.0 1.0 0.0
2 0.0 0.0 0.0 1.0 0.0
3 0.0 0.0 0.0 1.0 0.0
4 0.0 0.0 1.0 0.0 0.0
... ... ... ... ... ...
1604 0.0 0.0 1.0 0.0 0.0
1605 0.0 0.0 0.0 0.0 1.0
1606 0.0 0.0 0.0 1.0 0.0
1607 0.0 0.0 0.0 1.0 0.0
1608 0.0 0.0 0.0 1.0 0.0

1609 rows × 5 columns

# 拼接两个数据
pd.concat([df,temp],axis=1).head()
岗位名称 城市 地点 岗位技能 学历要求 行业 融资 最高薪资 最低薪资 平均薪资 经验编码 公司规模 学历编码 0 1 2 3 4
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 本科 移动互联网 D轮及以上 20000.0 10000.0 15000.0 3.0 3.0 3.0 0.0 0.0 0.0 1.0 0.0
1 数据分析师 上海 张江 SQL 数据库 本科 金融 上市公司 20000.0 10000.0 15000.0 0.0 4.0 3.0 0.0 0.0 0.0 1.0 0.0
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 本科 移动互联网,企业服务 上市公司 15000.0 8000.0 11500.0 3.0 5.0 3.0 0.0 0.0 0.0 1.0 0.0
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 本科 金融 B轮 26000.0 13000.0 19500.0 3.0 5.0 3.0 0.0 0.0 0.0 1.0 0.0
4 数据分析师 上海 虹桥 数据分析 数据库 大专 移动互联网,电商 D轮及以上 15000.0 10000.0 12500.0 3.0 5.0 2.0 0.0 0.0 1.0 0.0 0.0
df[['学历要求','行业']].info()

Int64Index: 1609 entries, 0 to 1637
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   学历要求    1609 non-null   object
 1   行业      1609 non-null   object
dtypes: object(2)
memory usage: 117.7+ KB
onehot.fit_transform(df[['学历要求','行业']]).toarray().shape
(1609, 121)
df.head()
岗位名称 城市 地点 岗位技能 学历要求 行业 融资 最高薪资 最低薪资 平均薪资 经验编码 公司规模 学历编码
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 本科 移动互联网 D轮及以上 20000 10000 15000.0 3 3 3
1 数据分析师 上海 张江 SQL 数据库 本科 金融 上市公司 20000 10000 15000.0 0 4 3
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 本科 移动互联网,企业服务 上市公司 15000 8000 11500.0 3 5 3
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 本科 金融 B轮 26000 13000 19500.0 3 5 3
4 数据分析师 上海 虹桥 数据分析 数据库 大专 移动互联网,电商 D轮及以上 15000 10000 12500.0 3 5 2
len(df.岗位技能[0].split(' '))
5
df['技能数'] = df.岗位技能.str.split(' ')
df1 = df[~df['技能数'].isnull()]
df1.loc[:,'技能数'] = df1.技能数.apply(lambda x:len(x))
df1.head()
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:966: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.obj[item] = s
岗位名称 城市 地点 岗位技能 学历要求 行业 融资 最高薪资 最低薪资 平均薪资 经验编码 公司规模 学历编码 技能数
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 本科 移动互联网 D轮及以上 20000 10000 15000.0 3 3 3 5
1 数据分析师 上海 张江 SQL 数据库 本科 金融 上市公司 20000 10000 15000.0 0 4 3 2
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 本科 移动互联网,企业服务 上市公司 15000 8000 11500.0 3 5 3 3
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 本科 金融 B轮 26000 13000 19500.0 3 5 3 5
4 数据分析师 上海 虹桥 数据分析 数据库 大专 移动互联网,电商 D轮及以上 15000 10000 12500.0 3 5 2 2
df.融资.value_counts()
上市公司      399
不需要融资     376
D轮及以上     188
B轮        169
C轮        167
A轮        145
未融资       137
天使轮        28
Name: 融资, dtype: int64
encoder1 = preprocessing.LabelEncoder()
df1.loc[:,'融资状况'] = encoder1.fit_transform(df1.融资.values)
df1.head()
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:845: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.obj[key] = _infer_fill_value(value)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:966: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.obj[item] = s
岗位名称 城市 地点 岗位技能 学历要求 行业 融资 最高薪资 最低薪资 平均薪资 经验编码 公司规模 学历编码 技能数 融资状况
0 数据分析师 上海 静安区 大数据 移动互联网 Hive Hadoop Spark 本科 移动互联网 D轮及以上 20000 10000 15000.0 3 3 3 5 3
1 数据分析师 上海 张江 SQL 数据库 本科 金融 上市公司 20000 10000 15000.0 0 4 3 2 4
2 数据分析 上海 浦东新区 SPSS 数据运营 数据库 本科 移动互联网,企业服务 上市公司 15000 8000 11500.0 3 5 3 3 4
3 2521BK-数据分析师 上海 浦东新区 大数据 金融 MySQL Oracle 算法 本科 金融 B轮 26000 13000 19500.0 3 5 3 5 1
4 数据分析师 上海 虹桥 数据分析 数据库 大专 移动互联网,电商 D轮及以上 15000 10000 12500.0 3 5 2 2 3

3 保存结果

# 删除已经处理好的列
df2 = df1.drop(columns=['岗位技能','学历要求','融资'],axis=1)
# 保存表
df2.to_csv('lagou_data_clean.csv',encoding='utf-8')

你可能感兴趣的:(python,python)