杭州数据分析师

# 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;
# * 大部分招聘数据分析的公司都会提供五险一金,公司位于拱墅区、滨江区、西溪、仓前的比较多。
# ## 不足
# * 数据量有限,会导致有些分析不准确
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值