探索性数据分析(Explore data analysis)

EDA一定程度上跟描述性数据分析重合,但范围要大于描述性数据分析

探索性数据分析:

不清楚数据长什么样
不知道数据里有什么
目标不甚明确:大目标清晰,中间途径不清晰
从数据中找到线索
EDA是一种方法论而不是特定技术

探索性数据分析的基本面:

定量分析展示
统计绘图与数据可视化

探索性数据分析的具体方法:
数据基本概况(统计定量分析)
缺失值展示与探索
异常值和离群点展示与探索
目标变量重点分析
自变量逐变量分析(数值型、分类型、文本特征)
自变量目标变量相关分析
统计绘图与可视化展示

统计绘图与数据可视化

现代统计图形(最常用)
柱状图/条形图:单变量/多变量
散点图:单变量/多变量
直方图:单变量,尤其是数值型目标变量的分布展示
箱线图:离散变量与连续变量的关系展示
折线图:单变量/多变量
密度图:和直方图联用

数据可视化技术

统计图形
R语言可视化:ggplot2
python可视化:matplotlib/seaborn/bokeh/plotly/wordcloud
web可视化:交互式绘图/echarts/javascript/D3.js
地图可视化

对于数据分析和机器学习而言,掌握前三个即可,重点在于各种统计图形。

拉勾网招聘数据特征工程探索网址


实例:招聘数据的探索性数据分析


一.读数据

1.1查看数据详情
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('./lagou_preprocessed.csv', encoding='gbk')
data.head()

拉勾数据分析网盘 拉勾网数据分析课程_拉勾数据分析网盘

# 数值型变量统计量描述
print(data.describe())

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_02

1.2薪水直方图
plt.hist(data['salary'])

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_03

# seaborn下的直方图
import warnings
warnings.filterwarnings('ignore')
sns.distplot(data['salary']);

拉勾数据分析网盘 拉勾网数据分析课程_数据_04

1.3计算目标变量值的偏度与峰度
from scipy import stats
# from scipy.stats import norm
print("Skewness: %f" % data['salary'].skew())
print("Kurtosis: %f" % data['salary'].kurt())

拉勾数据分析网盘 拉勾网数据分析课程_数据_05

1.4分类变量探索 分类值统计
cols = ['city', 'education', 'position_name', 'size', 'stage', 'work_year']
for col in cols:
    print(data[col].value_counts())

拉勾数据分析网盘 拉勾网数据分析课程_数据_06


拉勾数据分析网盘 拉勾网数据分析课程_拉勾数据分析网盘_07

二.绘图

绘制各个数据与薪资的关系图
2.1 城市与工资水平
#处理city变量,将计数少于30的划为其他
city_counts_df = pd.DataFrame()
city_counts_df['city'] = city_counts.index
city_counts_df['counts'] = data['city'].value_counts().values
city_counts_df
cities = ['北京', '上海', '广州', '深圳', '杭州', '成都', '武汉', '南京']
for i, j in enumerate(data['city']):
    if j not in cities:
        data['city'][i] = '其他'    
data['city'].value_counts()

拉勾数据分析网盘 拉勾网数据分析课程_拉勾数据分析网盘_08

from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 城市与工资水平
sns.boxplot(x = data['city'], y = data['salary'])
plt.title('城市与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_拉勾数据分析网盘_09

2.2 学历与工资水平
sns.boxplot(x = data['education'], y = data['salary'])
plt.title('学历与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_拉勾数据分析网盘_10

2.3 经验与工资水平
sns.boxplot(x = data['work_year'], y = data['salary'])
plt.title('经验与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_11

2.4企业发展阶段与工资水平
sns.boxplot(x = data['stage'], y = data['salary'])
plt.title('企业与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_12

2.5 企业规模与工资水平
sns.boxplot(x = data['size'], y = data['salary'])
plt.title('企业规模与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_数据_13

2.6 岗位与工资水平
sns.boxplot(x = data['position_name'], y = data['salary'])
plt.title('岗位与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_14

2.7 行业与工资水平
# 处理industry变量
for i, j in enumerate(data['industry']):
    if ',' not in j:
        data['industry'][i] = j
    else:
        data['industry'][i] = j.split(',')[0]
print(data['industry'].value_counts())

industries = ['移动互联网', '金融', '数据服务', '电子商务', '企业服务', '医疗健康', 'O2O', '硬件', '信息安全', '教育']
for i, j in enumerate(data['industry']):
    if j not in industries:
        data['industry'][i] = '其他'

#print(data['industry'].value_counts())

sns.boxplot(x = data['industry'], y = data['salary'])
plt.title('行业与工资水平')
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_15

三.数据advantage(待遇)的词云实现

3.1 获得文本
ADV = []
for i in data['advantage']:
    ADV.append(i)
    
ADV_text = ''.join(ADV)
ADV_text

拉勾数据分析网盘 拉勾网数据分析课程_ci_16

3.2jieba分词
import jieba
result = jieba.cut(ADV_text)
print("切分结果:  "+",".join(result))

拉勾数据分析网盘 拉勾网数据分析课程_数据_17

3.3 调节词语的词频
jieba.suggest_freq(('五险一金'), True)
jieba.suggest_freq(('六险一金'), True)
jieba.suggest_freq(('带薪年假'), True)
jieba.suggest_freq(('年度旅游'), True)
jieba.suggest_freq(('氛围好'), True)
jieba.suggest_freq(('技术大牛'), True)
jieba.suggest_freq(('免费三餐'), True)
jieba.suggest_freq(('租房补贴'), True)
jieba.suggest_freq(('大数据'), True)
jieba.suggest_freq(('精英团队'), True)
jieba.suggest_freq(('晋升空间大'), True)

result = jieba.cut(ADV_text)
print("切分结果:  "+",".join(result))

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_18

3.4 使用停用词
#读取标点符号库
f = open("./stopwords.txt", "r")
stopwords={}.fromkeys(f.read().split("\n"))
f.close()
#加载用户自定义词典
# jieba.load_userdict("./utils/jieba_user_dict.txt")
segs = jieba.cut(ADV_text)
mytext_list=[]
#文本清洗
for seg in segs:
    if seg not in stopwords and seg != " " and len(seg) != 1:
        mytext_list.append(seg.replace(" ", ""))
        
ADV_cloud_text = ",".join(mytext_list)
ADV_cloud_text

拉勾数据分析网盘 拉勾网数据分析课程_数据分析_19

3.5 词云实现
from wordcloud import WordCloud
wc = WordCloud(
    background_color="white", #背景颜色
    max_words=800, #显示最大词数
    font_path = r'C:\Windows\Fonts\STFANGSO.ttf',  
    min_font_size=15,
    max_font_size=80
    )
wc.generate(ADV_cloud_text)
wc.to_file("ADV_cloud.png")
plt.imshow(wc)
plt.show()

拉勾数据分析网盘 拉勾网数据分析课程_拉勾数据分析网盘_20