赞
踩
思路:
1.主要分析的python资薪情况。而工资会有几种情况,如万/月;万/年;千/月;万以上/年;万以上/月;这明显就不方便我们分析。在这个我们统一转化为10k/月的形式进行分析。
2.明确目标,这里使用split,replace,lambda来进行数据清洗。
还是先上代码:
import pymysql import pandas as pda import numpy as npy import re import matplotlib.pylab as pyl import matplotlib.mlab as mlab import matplotlib.pyplot as plt #连接数据库 conn = pymysql.connect(host="127.0.0.1",user="root",passwd="lxw19961230",db="51job") sql = "select * from python_1" data = pda.read_sql(sql,conn) #筛选出有万和月的 wan_yue=[] #计数变量,统计万以上出现的次数 count1 = 0 data_money=data['money'].dropna() #统计万以上的数据 wan_yis=[] #统计万和年的数据 wan_nian=[] count3=0 for i in data_money: if '以上' in i and '月' in i: wan_yis.append(i) count1 += 1 continue if "年" in i and "万" in i and "以下" not in i and "以上" not in i: wan_nian.append(i) count3 += 1 continue if '月' in i and type(i)==str: if '万' in i: wan_yue.append(i) '''----------------------------------------------------------------------------------''' #字符串分割,去掉月,整理为 1-2万 的格式 wan_yue_split=[] for c in wan_yue: wan_yue_split.append(re.split('[-/]',c)) #最小值组成列表 minw=[] for e in wan_yue_split: minw.append(e[0]) #整理最小值格式,转化为以k为单位的数据(str类型) minww=[] for ff in minw: if len(ff)==1: ff=ff+'0' else: ff=ff.replace('.','') minww.append(ff) #minww求和,先转化为float类型 wan_yue_min = [] for hh in minww: hhh=float(hh) wan_yue_min.append(hhh) sum_wan_yue_min = sum(wan_yue_min) #所有工资最小值的平均值 wan_yue_min_avg=sum_wan_yue_min/(len(wan_yue_min)-count1) print("最低工资平均值(筛选的万/月,单位k):",wan_yue_min_avg) #最大值组成列表 maxw=list(map(lambda x:x[1].strip('万'),wan_yue_split)) #整理最大值格式,转化为以k为单位的数据(str类型) maxww=[] for f in maxw: if len(f)==1: f=f+'0' else: f=f.replace('.','') maxww.append(f) #maxww求和,先转化为float类型 wan_yue_max=[] for h in maxww: wan_yue_max.append(float(h)) sum_wanyue_max = sum(wan_yue_max) #所有工资最大值的平均值 wan_yue_max_avg=sum_wanyue_max/(len(maxww)-count1) print("最低工资平均值(筛选万/月,单位k):",wan_yue_max_avg) '''-------------------------------------------------------------------------------''' #万以上的数据(万以上/月) wan_yis_split=[] for i in wan_yis: wan_yis_split.append(i.replace("万以上/月","")) wan_yis_av=[] for j in wan_yis_split: wan_yis_av.append(float(j)) wan_yis_sum = sum(wan_yis_av) wan_yis_avg = wan_yis_sum/count1 print("万以上/月的平均工资为:",wan_yis_avg) '''-----------------------------------------------------------------------------''' #万和年的数据 wan_nian_split=[] #整理为20-30万的格式 for c in wan_nian: wan_nian_split.append(re.split('[-/]',c)) #最小值组成列表 minnn=[] for e in wan_nian_split: minnn.append(e[0]) #minnn求和,先转化为float类型 wan_nian_min = [] for hh in minnn: hhh=float(hh) wan_nian_min.append(hhh) sum_wan_nian_min = sum(wan_nian_min) #所有工资最小值的平均值,转化为多少万/月,方便比较 wan_nian_min_avg=sum_wan_nian_min/(count3*1.2) print("万/年的最低工资平均值(转化为万/月,单位k):",wan_nian_min_avg) #最大值组成列表 maxnn=list(map(lambda x:x[1].strip('万'),wan_nian_split)) #整理最大值格式,转化为以k为单位的数据(str类型) wan_nian_max=[] for f in maxnn: wan_nian_max.append(f) #wan_nian_max求和,先转化为float类型 wan_nian_max_av=[] for h in wan_nian_max: wan_nian_max_av.append(float(h)) sum_wanyue_max=sum(wan_nian_max_av) #所有工资最大值的平均值 wan_nian_max_avg=sum_wanyue_max/(count3*1.2) print("万/年的最高工资平均值(转化为万/月,单位k):",wan_nian_max_avg) '''------------------------------------------------------------------------------------''' #筛选出千和月的 qian_yue=[] count2 = 0 aa=data['money'].dropna() for j in aa: if '以下' in j: count2 += 1 continue if '月' in j and type(j)==str: if '千' in j: qian_yue.append(j) #分割字符 qian_yue_split=[] for n in qian_yue: qian_yue_split.append(re.split('[-/]',n)) #最小值列表 minq=[] for x in qian_yue_split: minq.append(x[0]) #最小求和,转化为float类型 qian_yue_min=[] for y in minq: qian_yue_min.append(float(y)) sum_qian_yue_min=sum(qian_yue_min) #求平均值 qian_yue_min_avg=sum_qian_yue_min/(len(qian_yue_min)-count2) print("最低工资平均值(筛选千/月,单位k):",qian_yue_min_avg) #最大值列表 v=list(map(lambda x:x[1].strip('千'),qian_yue_split)) qian_yue_max=[] for i in v: qian_yue_max.append(float(i)) sum_qian_yue_max=sum(qian_yue_max) qian_yue_max_avg=sum_qian_yue_max/(len(qian_yue_max)-count2) print("最高工资平均值(筛选千/月,单位k):",qian_yue_max_avg) '''-------------以上为各数据平均值分析---------------------''' #整合数据 #万/月,计算其平均值,存储到一个列表中 avg=[] for i in range(0,len(wan_yue_min)): avg.append((wan_yue_min[i]+wan_yue_max[i])/2) #万以上的整合入列表中 for i in range(0,len(wan_yis_av)): avg.append(wan_yis_av[i]) #将万/年整理进列表2.4=1.2*2 for i in range(0,len(wan_nian_min)): avg.append((wan_nian_min[i]+wan_nian_max_av[i])/2.4) #千/月整理进列表中 for i in range(0,len(qian_yue_min)): avg.append((qian_yue_min[i]+qian_yue_max[i])/2) '''-------------以上整理到一个列表中,方便分析--------------'''
代码思路:
1.首先利用if语句将各个工资情况,进行分类;
2.分析工资构造,如1-1.5万/月,可以发现有最高工资和最低工资
最低工资提取:
#字符串分割,去掉月,整理为 1-2万 的格式 wan_yue_split=[] for c in wan_yue: wan_yue_split.append(re.split('[-/]',c)) #最小值组成列表 minw=[] for e in wan_yue_split: minw.append(e[0]) #整理最小值格式,转化为以k为单位的数据(str类型) minww=[] for ff in minw: if len(ff)==1: ff=ff+'0' else: ff=ff.replace('.','') minww.append(ff)
最高工资提取:
#最大值组成列表
maxw=list(map(lambda x:x[1].strip('万'),wan_yue_split))
#整理最大值格式,转化为以k为单位的数据(str类型)
maxww=[]
for f in maxw:
if len(f)==1:
f=f+'0'
else:
f=f.replace('.','')
maxww.append(f)
3.将工资转化为float类型,同时可以计算一下平均工资,存到同一个列表中方便后续的可视化分析;
#整合数据
#万/月,计算其平均值,存储到一个列表中
avg=[]
for i in range(0,len(wan_yue_min)):
avg.append((wan_yue_min[i]+wan_yue_max[i])/2)
#万以上的整合入列表中
for i in range(0,len(wan_yis_av)):
avg.append(wan_yis_av[i])
#将万/年整理进列表2.4=1.2*2
for i in range(0,len(wan_nian_min)):
avg.append((wan_nian_min[i]+wan_nian_max_av[i])/2.4)
#千/月整理进列表中
for i in range(0,len(qian_yue_min)):
avg.append((qian_yue_min[i]+qian_yue_max[i])/2)
到这里基本的数据清洗可以告一段落了,可以进行数据分析,可视化
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。