案例数据:https://cloud.189.cn/t/aYbUv2JbEzUn
一、python数据挖掘相应扩展库
扩展库 | 简介 |
NumPy | 提供数组支持以及相应的高效的处理函数 |
SciPy | 提供矩阵支持以及矩阵相关的计算模块 |
Matplotlib | 可视化、作图工具 |
pandas | 数据分析、探索工具 |
scikit-learn | 回归、分类、聚类等强大的机器学习库 |
Keras | 深度学习,建立神经网络以及深度学习模型 |
二、数据特征分析
2.1 统计量分析:用统计指标对定量数据进行统计描述
2.1.1 集中趋势:均值、中位数、众数、分位数
均值 | 所有数据的平均值 |
中位数 | 数值从小到大排列,位于中间的那个 |
众数 | 数据集中出现最频繁的值 |
四分位数 | 所有值从小到大排列,第一个分割点是下四分位数,第二个分割点是中位数,第三个分割点是上四分位数 |
2.1.2 离中趋势:数据离散程度的衡量
标准差 | 衡量数据偏离均值的程度,值越大数据越离散,越小越聚拢 |
方差 | 标准差的平方 |
2.2 数据分布:偏态与峰态
2.2.1 偏度(平均值的偏):统计数据分布偏斜方向程度
正态
正偏
负偏
2.2.2 峰度:反映尖锐度或平坦度 ,以正态分布为零作为标准,正峰度表示相对尖锐的分布,负峰度表示相对平坦的分布
三、常用方法
方法 | 功能 |
mean() | 算数平均数 |
sum() | 计算样本总和 |
var() | 计算样本方差 |
std() | 计算样本标准差 |
corr() | 计算样本Spearman(Pearson)相关系数矩阵 |
skew() | 计算样本偏度(三阶矩) |
kurt() | 计算样本峰度(四阶矩) |
describe() | 样本基本描述 |
median() | 计算中位数 |
quantile() | 求分位数,q=0.25/0.5/0.75 |
mode() | 求众数 |
四、单一列数值分析
# 导入包
import pandas as pd
import seaborn as sns
# 读取数据
df=pd.read_csv("./data/HR.csv")
# 拿到 satisfaction_level 数据
s = df["satisfaction_level"]
# 查看null异常值
s[s.isnull()]
# 查看异常值具体行信息
df[df['satisfaction_level'].isnull()]
# 删除空值
s = s.dropna()
# 填充空值
# s = s.fillna()
s.describe()
# ----------------------
# 拿到 last_evaluation 数据
s2 = df["last_evaluation"]
# 查看描述
s2.describe()
# 正偏:大部分数据比平均数小;负偏:大部分数据比平均数大
s2.skew()
# 正值:比正太分布陡峭;负值:比正太分布平坦
s2.kurt()
# 去除异常值
s2 = s2[s2<1]
s2
# ---------------------
# 或者用四分位数去除离群值
s3 = df['last_evaluation']
q_low = s3.quantile(q=0.25)
q_high = s3.quantile(q=0.75)
q_interval = q_high-q_low
k = 1.5
s3 = s3[s3<q_high+k*q_interval][s3>q_low-k*q_interval]
s3.describe()
# -------------------
# 得到 number_project 数据
s4 = df["number_project"]
# 查看详情
s4.describe()
# 偏度、峰度查看
print("skew",s4.skew())
print("kurt",s4.kurt())
# 统计 参数:normalize=True:出现次数构成比例
s4.value_counts(normalize=True).sort_index()
# 得到 average_monthly_hours
s5 = df["average_monthly_hours"]
s5.describe()
# --------------------------------
# 剔除异常值
s5 = s5[s5<s5.quantile(0.75)+1.5*(s5.quantile(0.75)-s5.quantile(0.25))][s5>s5.quantile(0.25)-1.5*(s5.quantile(0.75)-s5.quantile(0.25))]
s5.describe()
# 某个区间内出现多少次
np.histogram(s5.values,bins=10)
# 自定义间隔
np.histogram(s5,bins=np.arange(s5.min(),s5.max()+10,10))
# ------------------------------
# 对比分析
df.loc[:,["last_evaluation","department"]].groupby("department").mean()