# coding: utf-8 # ## 目录 # * 连接数据库 # * 获取job表及company表的信息并进行清洗 # * 分析职位工资 # * 分析职位所处行业 # * 分析学历、工作经验与工资的关系 # * 分析公司待遇、位置及招聘要求 # In[50]: #导入所用模块 import pandas as pd #读取数据库 from sqlalchemy import create_engine import pymysql #制作词云模块 from wordcloud import WordCloud from scipy.misc import imread #绘图模块 import seaborn as sns import matplotlib import matplotlib.pyplot as plt from pyecharts import Geo get_ipython().run_line_magic('matplotlib', 'inline') #设置绘图背景和字体 sns.set(color_codes=True) sns.set_palette("Set1") matplotlib.rc('font',**{'family':'SimHei'})#解决中文乱码问题 plt.style.use('ggplot') # In[51]: #由于python 3 不支持MySQLdb,所以这里将文件中的MySQLdb,改为pymysql,所以需要pip install mysqlclient(下载mysqlclient包) engine = create_engine('mysql://root:harui95599==@localhost:3306/lagou?charset=utf8') # ### ** job表 ** # In[78]: job = pd.read_sql('job',engine) job.head() # In[53]: job.shape # In[54]: #把city中得全改成杭州 job['city']=job['city'].replace('杭','杭州') job['city']=job['city'].replace('州','杭州') # In[55]: sum(job.duplicated()) #job中无重复职位数据 # In[56]: job.info() # ### ** company表 ** # In[57]: #company表 company = pd.read_sql('company',engine) company.head() # In[58]: company.shape # In[59]: sum(company.duplicated()) #company中无重复职位数据 # In[60]: company.info() # ** 去除实习岗位 ** # In[61]: job.drop(job[job.jobname.str.contains('实习')].index,inplace=True) job.jobname.str.contains('实习').any() #查看是否还存在实习岗位 # ## ** 1.查看数据分析的工资分布 ** # In[62]: #对工资水平划分high\low,lower() 方法转换字符串中所有大写字符为小写 job['lowS'] = job['salary'].apply(lambda x: x.lower().split('-')[0].replace('k','')).astype(int)*1000 job['highS'] = job['salary'].apply(lambda x: x.lower().split('-')[1].replace('k','')).astype(int)*1000 job['avgS'] = job['lowS']+(job['highS']-job['lowS'])/4 job['avgS'].dtype # In[63]: #薪酬分析 plt.figure(figsize=(10,5)) sns.distplot(job['avgS'],color="r",kde=False) #柱形图 plt.title('整体薪酬分布状况'); # * 从上图可以看出工资集中在20000左右,整体偏左分布,也可能由于数据量偏少导致工资水平较高。 # In[64]: #删除40000以上的过高数值 job = job[job['avgS']<40000] #对杭州平均薪资的描述统计 job.groupby('city')['avgS'].describe() # In[65]: #用图形展示 plt.figure(figsize=(14,5)) sns.boxplot(x='city',y='avgS',data=job,color="r") #箱线图 plt.title('杭州的平均薪水') # ## ** 2.查看数据分析主要集中在哪些行业 ** # In[66]: df = company[['companyid','company_name','industry','scale']].merge(job[['jobid','company_id','avgS']],left_on='companyid',right_on='company_id') df.tail() # In[67]: industry_df = pd.DataFrame(df.industry.apply(lambda x: x.replace(' ,',' ').replace(',',' ').replace('、',' ').strip().split(' ')).tolist()) industry_df_new = industry_df.stack().reset_index().rename(columns={'level_0':'df_index',0:'industry_name'}) industry_df_new.drop('level_1', axis=1, inplace=True) industry_df_new.tail() # In[68]: tt = df.merge(industry_df_new,right_on='df_index',left_index=True) tt['industry_name'].value_counts().plot.bar(figsize =(10,4),title=('数据分析师的需求行业分布')); # * 从上图可以看出,大部分数据分析的工作集中在移动互联网、金融、电子商务、数据服务等行业。 # ## ** 3.查看数据分析的学历与工资的关系 ** # In[69]: plt.figure(figsize=(14,5)) sns.boxplot(x='education',y='avgS',data=job,color="r") plt.title('不同学历之间的薪水差异'); # * 可以发现随着学历的提高,薪资也相对越高。可能样本量有限,学历为有限的数据存在一定偏误。 # ## ** 4.查看数据分析的工作经验与工资的关系 ** # In[70]: plt.figure(figsize=(14,5)) sns.boxplot(x="expirence", y="avgS", data=job) sns.stripplot(x='expirence',y='avgS',data=job,jitter=True, color ='.3') plt.title('不同工作经验之间的薪水差异'); # In[71]: job['workyear'] = job['expirence'].str.findall(r'\d+') #正则表达式 def avg_year(i): m = 0 if len(i) == 0: m = 0 elif len(i) == 1: m = int(i[0]) else: m = sum(list(map(int,i)))/2 return m job['workyear'] = job['workyear'].apply(avg_year) job['workyear'].value_counts() #查看有多少种不同取值,每种几个 # In[72]: sns.regplot(x='workyear',y='avgS',data=job,x_jitter=.1,) #线性回归图 plt.title('工作年限与薪酬的拟合关系') # * 从上两张图可以发现,随着工作经验的增加,薪资也越高。 # ## ** 5.查看数据分析的技能标签与公司待遇 ** # In[73]: #词云制作函数 def wordclouds(s): text = '' for line in job[s]: text = text+' '+line.strip().replace(',',' ') color_mask = imread('C:/Users/Administrator/Desktop/qqq.png') wordcloud = WordCloud( width=1000,height=600, font_path = 'simhei.ttf', background_color = 'white', mask = color_mask, max_words = 1000, max_font_size = 100, collocations=False ).generate(text) wordcloud.to_file('{}.png'.format(s)) plt.imshow(wordcloud) plt.axis("off") plt.show() # In[74]: #技能标签 wordclouds('labels') # In[76]: #地理位置 wordclouds("address") # In[77]: #地理位置 job['address'].value_counts().plot.bar(figsize =(10,4),title=('公司地理位置分布')); # In[75]: #待遇 wordclouds('treatment') # ## 总结 # * 在杭州,数据分析方面的工资一般在20000左右; # * 数据分析的工作集中在移动互联网、金融、电子商务、数据服务等行业; # * 相对来说,学历越高,工作经验越多,工资也越高; # * 数据分析的工作大部分集中在数据挖掘、股票期权方面,需要用到SQL,Hadoop; # * 大部分招聘数据分析的公司都会提供五险一金,公司位于拱墅区、滨江区、西溪、仓前的比较多。 # ## 不足 # * 数据量有限,会导致有些分析不准确
杭州数据分析师
最新推荐文章于 2018-12-04 07:32:02 发布