Python数据分析招聘,python数据分析师招聘
1.要分析的数据
就是从智联招聘平台手动抓取的python数据分析岗位的信息。表中的关键词是薪资、学历、经验。为后续数据分析做准备。数据的部分屏幕截图,如所示
智联招聘平台爬上了python数据分析’的位置,总共有500多条记录,包括少量重复记录。考虑到数据量本身较小,这里就不筛选重复数据了。分别统计“学历”和“经历”这两个关键词,发现对应的频率如下:
发现学历一栏中“不限”和“中专”相对较少,打印内容显示“不限”工资接近“本科”,“中专”工资接近“大专”,没有太大差别。所以修改dataframe将“不限”改为“本科”,“中专”改为“大专”调用熊猫的replace()函数。
Details.replace({ 学历:不限 },本科,原地=真)details.replace ({ 学历:中专 },大专,原地=真)Details为原始数据表。请注意,如果您不想创建数据帧的副本,可以通过设置inplace=True来直接修改原始数据帧。
同样,“没经验”和“1年以内”的工资是“不限”接近经验的,也可以合并。
details . replace({ experience : experience }, unlimited ,inplace=True)#您可以这样做,因为它不影响数据的使用。details . replace({ experience : 1年以下 }, unlimited ,in place=true)“10年以上”,在此记录中
2.数据处理。
数据处理主要是把工资栏分开得到最低工资和最高工资,把最低工资的平均值和最高工资的平均值加到学历上。经验要求一样,工资“面议”。准备好薪资、学历、经验的关系。
首先,将同等学历和经验所需的数据分开,代码如下:
# data_whole是根据学历和经验选取的数据。
# data_salary是给出实际工资的数据。
# data_negia是薪资面议的数据。
数据_整体=数据[(数据[经验]==经验)(数据[学历]==学历)]数据_薪资=数据_整体[~数据_整体[薪资]]。isin([ negotiable ])]Data _ negia=Data _ whole[Data _ whole[ salary ]。isin ([negotiable])]在这里,有一些数据抓取时需要注意的地方。在抓取数据时,我们经常需要使用python自带的一个小函数strip(),用来去除一个字符串开头和结尾的空格或换行符。注意,它只能是一个字符串的开头和结尾,而不能是中间。Str.strip()。原因是我抢工资的时候“可议”后面加了个空格,就是我抢的数据是“可议”而不是“可议”。所以,我在判断isin([ negotiable])
下面的代码要根据具体抓取的数据进行分类讨论。我这里的数据,在同样的一组条件下,肯定会有薪资的记录,但不一定会有‘可议’薪资的记录,所以判断逻辑如下:
if len(data _ salary)0:data _ salary。reset _ index(drop=True,inplace=True) low_salary,high _ salary=split _ salary(data _ salary[ salary ].apply(get _ salary))数据_薪金。插入(3,”低_薪金,低_薪金)data_salary.insert(4,’高_薪金,高_薪金)salary=data_salary.drop(薪金,轴=1) #如果面议表中有数据if len(data _ negia)0:data _ negia。reset _ index(drop=True,inplace=True)data _ negia。插入(3,低_薪,四舍五入(低_薪。mean())data _ negia。插入(4,高_薪,四舍五入(高_薪。mean())工资=PD。concat([data _ salary,data_negia],axis=0,ignore _ index=True)薪金。drop(薪金,就地=真,轴=1)重要:数据_薪资。reset _ index(drop=True,inplace=True)这句代码很重要,如果不重新对数据_薪资()索引进行排序,数据_薪资是从数据_整体分离得到,索引并不会从0重新分布,而是保留数据_整体的索引。如果不重新排列索引,在将最低工资,最高工资新插入数据_薪资,因为最低(高)工资的索引是从0开始,与数据_薪资索引不一致,因此会插入失败。个人理解,dataframe.insert()必须两者索引严格保持一致才可以插入列成功。
# split_salary()函数,是分别得到最低工资,最高工资
# get_salary()是获取具体的最低工资,最高工资金额。代码如下:
def get _ salary(值):index _ sep=value。find(-)index _ end=value。查找(元)return int(value[0:index_sep]),int(value[index _ sep 1:index _ end])ef split _ salary(tuple _ list):try:if len(tuple _ list)0:low _ list=[]high _ list=[]for tup in tuple _ list:low=tup[0]high=tup[1]low _ list。追加(低)高_列表。附加(高)返回PD .系列(low_list),pd .系列(高_列表)除了例外:打印(分离得到最低最高公资时出错) 3.完整代码
导入熊猫为pddef read_csv(文件名):details=pd.read_csv(文件名,sep=,,编码= GB 18030 )详情。替换({ experience :无经验}, 不限,原地=真)#可以这样做,因为不影响数据使用细节。替换({ experience : 1年以下}, 不限,原地=真)#已经查看数据,并无区别details.replace({education :不限}, 本科,原地=真)详情。替换({ education :中专}, 大专,inplace=True) # 3-5年都有面议salart _ 3到5=PD。concat([handle _ no _ salary(details, 3-5年, 本科),handle_no_salary(详情, 3-5年, 硕士),handle_no_salary(详情, 3-5年, 大专)],axis=0,ignore_index=True) #经验不限的无面议salart _ no exper=PD。concat([handle _ no _ salary(details,不限, 本科),handle_no_salary(详情,不限, 硕士),handle_no_salary(详情,不限, 大专)],axis=0,ignore_index=True) # 5-10年,没有硕士salary _ 5到10=handle _ no _ salary(详细信息, 5-10年, 本科) # 1-3年,都有面议salary _ 1to 3=PD。concat([handle _ no _ salary(details, 1-3年, 本科),handle_no_salary(详情, 1-3年, 硕士),handle_no_salary(详情, 1-3年, 大专)],axis=0,ignore _ index=True)salary _ all=PD。concat([salart _ 3 to 5,salart_noexper,salary_5to10,salary_1to3],axis=0,ignore _ index=True)print(len(salary _ all))#把最低,最高公资填进去,并且把平均工资填进面议一栏def get _ salary(值):index _ sep=value。find(-)index _ end=value。查找(元)return int(value[0:index_sep]),int(value[index _ sep 1:index _ end])def split _ salary(tuple _ list):try:if len(tuple _ list)0:low _ list=[]high _ list=[]for tup in tuple _ list:low=tup[0]high=tup[1]low _ list。追加(低)高_列表。附加(高)返回PD .系列(low_list),pd .系列(高_列表)除了例外:打印(分离得到最低最高公资时出错)def handle _ no _薪金(数据,经验,学历):data_whole=data[(数据[经验]==经验)(数据[教育]==学历)] #剔除面议的工资,填进去data _ salary=data _ whole[~ data _ whole[薪金]。isin([面议])]data _ negia=data _ whole[data _ whole[薪金]。isin([面议])]if len(data _ salary)0:data _ salary。reset _ index(drop=True,inplace=True) low_salary,high _ salary=split _ salary(data _ salary[ salary ].apply(get _ salary))数据_薪金。插入(3,”低_薪金,低_薪金)data_salary.insert(4,’高_薪金,高_薪金)salary=data_salary.drop(薪金,轴=1) #如果面议表中有数据if len(data _ negia)0:data _ negia。reset _ index(drop=True,inplace=True)data _ negia。插入(3,低_薪,四舍五入(低_薪。mean())data _ negia。插入(4,高_薪,四舍五入(高_薪。mean())工资=PD。concat([data _ salary,data_negia],axis=0,ignore _ index=True)薪金。drop(薪金,到位=真,轴=1) #轴=0,按照列对齐,ignore_index=True,忽略两列表之前的索引,重新设置从0开始的索引# 在某些函数,必须指定轴,否则就会找不到一些索引而报错print(experience,len(data_whole),len(data_salary),len(data_negia),len(salary))返回薪水if _ _ name _ _= _ _ main _ _ :read _ CSV( relation。CSV )4。我是数据分析踏实的绿草,入手简单项目,围绕项目学习知识,是编程的最有效的途径。会遇到各种各样的问题,比如,因为事先不知道数据的分布特征,"本科","硕士","不限","中专","大专",只理所当然考虑了"本科","硕士"这两种情况。
因此,在进行数据处理之前,最好使用value_counts()函数来查看各列中不同值的大致分布情况。第一个有点乱,但是一个很大的进步。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。