一、批量处理数据
1.读取文件,如下所示(参数:low_memory指确保数据类型不混淆;converters这里是将work_demand的数据类型转换为str类型)
df = pd.read_csv('C:\\Users\\独为我唱\\Desktop\\data_sum\\all.csv', encoding='gbk' , low_memory=False,converters={'work_demand':str})
id | job_name | work_demand | company_locale | company_name | guimo | job_salary | demand | |
0 | 1 | Java | Spring,MyBatis | 杭州 | 深圳市德科信息技术有限公司 | 1000-9999人 | 8千-1万 · 14薪 | 大专 |
1 | 2 | Java | Java,Spring,后端开发,MySQL | 杭州 | 上海井星信息科技有限公司 | 20-99人 | 1.5万-2.2万 | 大专 |
2.删除工作岗位中包含实习生的行数据,删除工作岗位为空的数据并更新
df = df[df['job_name'].str.contains('实习') ==False] #删除实习生
index = df['job_name'].notnull() #删除工作名为空的行
df = df[index]
df = df.reset_index(drop=True) #更新
3.提取薪资单位统一为K,只得到数字
a = df['job_salary'].copy()
for i in range(len(a)):
a[i] = a[i].replace('\t','').replace('\n','').replace('\r','').replace(' ','')
a[i] = re.sub(r'·(.*)','',a[i]) #剔除·后的信息
最终job_salary列的数据均为float型的平均值数字
二、数据可视化
1.展示Java各项技能占比
(1)先取出Java工作岗位的技能要求
a = df['work_demand'].str.split()
list1 = []
x = a.copy()
for i in range(len(x)):
if 'Java' in df['job_name'][i]:
list1 += x[i]
(2)再按逗号为分割,取出排名前六的数据,形成以字典为元素的列表
newlist = []
for ele in list1:
newlist += ele.split(',')
newlist = [x.strip() for x in newlist] #这两行是为了使原df的工作要求单个呈现以逗号分割
res = dict()
for a in set(newlist): #这里采取集合的方式,排除重复项
res[a] = newlist.count(a) #count方法是取出不同工作要求出现的次数
ll = sorted(res.items(),key=lambda item:item[1], reverse=True) #按从大到小排序每种技能的出现次数,items是以列表返回可遍历的(键, 值) 字典。
ll = ll[0:6] #取出list前6个值
(3)再将元素为字典的列表拆分,得到符合前端传值要求的类型
abi_num = []
abi_name = []
for i in range(len(list1)):
if i < 6:
abi_num.append(list1[i][1])
abi_name.append(list1[i][0])
abi_snum=[]
for i in range(len(abi_name)):
dict = {}
dict['value'] = abi_num[i]
dict['name'] = abi_name[i]
abi_snum.append(dict)
2.取出java在各地区的薪资图,一定将地区与工作类型java类分组
dff = df.loc[df['job_name'] == 'Java']
grouped2 = dff.groupby([df['job_name'], df['company_locale']])
#groupby函数主要的作用是进行数据的分组以及分组后地组内运算
a = grouped2['job_salary'].mean() #取出Java岗位在不同地区的平均值
a = a.map(lambda x: int(x)) #将得到的平均值全部化为int型
java_cities_price = a.values.tolist() #转换为列表类型
3.取出不同学历下的薪资值
gp = df.groupby('demand') #将学历和工作薪资分组,使用mean求出薪资平均值,并根据平均值排序
a = gp['job_salary'].mean().sort_values(ascending=False)
job_price_index = a.index.tolist() #使用两个列表分别保存学历名和其对应的薪资值
job_price = a.values.tolist()
for i in range(len(job_price)):
job_price[i] = int(job_price[i]) #取整
4.采用render方法将上述结果传递到前端页面的JavaScript中,采用生成JavaScript对象的方式渲染到浏览器上。最后采用echarts将数据可视化出来。详细代码见第一章。
参考链接
groupby函数详解:https://www.cnblogs.com/Yanjy-OnlyOne/p/11217802.html
https://blog.csdn.net/weixin_42782150/article/details/90716533
python中map函数和lambda函数:https://blog.csdn.net/weixin_43283397/article/details/95627104