基础统计术语
集中趋势
数据聚拢位置的衡量,也就是数据聚拢在哪里
- 均值
- 一般用于衡量连续值,尤其是分布均匀的连续值
- 中位数
- 衡量一些存在异常值的集中趋势,其实就是二分位数
- 众数
- 衡量一些离散值
- 分位数
- 最常用的是四分位数
- 最常用的是四分位数
离中趋势
数据内部的差异水平的衡量
-
标准差
-
方差(标准差的平方)
-
极差
分布形态
数据图表化后呈现出来的形态
- 正态分布
- 左偏分布
- 数据集中在右边,数据整体是向左偏的
- 右偏分布
- 数据集中在左边,数据整体是向右偏的
偏态系数
数据平均值偏离状态的衡量,通常一个对称性的分布的中位数和平均值是相近的,但通常数据不是对称分布的,这样的分布就是有偏态的分布
- 均值大于中位数就是正偏,反之就是负偏
峰态系数
是数据分布集中强度的衡量,值越大,顶就会越尖,越小分布就越平缓
- 正态分布是峰态系数为3左右
- 一个分布的峰态系数和3相差大于2,基本可以判断为不是正态分布
简单抽样理论
分为无放回抽样和有放回抽样
-
有放回抽样
-
平均误差计算公式
-
估计总体时抽样数目的确定
-
-
无放回抽样
-
平均误差计算公式
-
估计总体时抽样数目的确定
-
数据分类
- 定类(类别)数据
- 根据事物离散、无差别属性进行分类
- 比如城市分类,无法给城市进行排序
- 定序(顺序)数据
- 可以界定数据大小,但不能测定差值
- 比如高收入与低收入人群
- 定距(间隔)数据
- 可以界定大小的同时,可以测定差值,但没有绝对零点,数据乘除是没有意义的
- 比如温度,我们不能说20°是10°的两倍热
- 定比(比率)数据
- 可以界定数据大小、可测差值、有绝对零点
- 身高体重等等,大部分都是定比数据
单属性分析
异常值分析
-
连续异常值
-
离散异常值
- 离散属性定义范围以外的所有值均属于异常值
-
知识异常值
- 超乎知识理解范围内的值,比如人身高10m
对比分析
通过比较的方式达到认识和了解数据的方法
比什么?
- 绝对数比较
- 身高、体重等已经存在的数据
- 相对数比较
- 通过某种方式计算或联合出来的新数据,这就是相对数
怎么比?
- 时间
- 和去年销量进行比较
- 空间
- 不同城市、不同地区比较
- 经验与计划
- 与历史上的经验数据比较
- 与预计的排期进行比较
结构分析
相当于对比分析中,比例相对数的比较
- 静态分析
- 分析总体中个组成成分的比例
- 动态分析
- 分析在某一个维度上(如时间)总体组成成分的变化趋势等等
分布分析
- 直接获得概率分布
- 是否是正态分布或其他已经存在的分布
- 极大似然估计法
demo实践
以下为ipynb格式
#%%
import pandas as pd
df = pd.read_csv("./HR.csv")
df.head(10)
#%%
type(df)
#%%
type(df['satisfaction_level'])
#%% 平均值
df.mean()
#%%
df['satisfaction_level'].mean()
#%% 中位数
df.median()
#%%
df['satisfaction_level'].median()
#%% 四分位数
df.quantile(q=0.25)
#%% 众数
df.mode()
#%% 标准差
df.std()
#%% 方差
df.var()
#%% 求和
df.sum()
#%% 偏态系数
df.skew()
#%% 峰态系数 以正态分布为0为标准
df.kurt()
#%% 抽样
df.sample(n=10)
#%% 对satisfaction_level进行异常值分析
sl_s = df['satisfaction_level']
sl_s.isnull()
#%% 筛选出isnull的行
sl_s[sl_s.isnull()]
#%% 筛选出isnull的行
df[sl_s.isnull()]
#%% 丢弃nan 值
sl_s = sl_s.dropna()
sl_s
#%%
import numpy as np
np.histogram(sl_s.values, bins=np.arange(0, 1, 0.1))
#%%
sl_s.skew()
#%%
sl_s.median()
#%%
sl_s.mean()
#%%
le_s = df['last_evaluation']
le_s[le_s.isnull()]
#%%
le_s.mean()
#%%
le_s.std()
#%%
le_s.max()
#%%
le_s.skew()
#%%
le_s.kurt()
#%%
le_s[le_s>1]
#%%
le_s[le_s<=1]
#%%
q_low = le_s.quantile(q=0.25)
q_high = le_s.quantile(q=0.75)
q_interval = q_high - q_low
k = 1.5
#%%
le_s = le_s[(le_s > q_low-k*q_interval) & (le_s < q_high + k*q_interval)]
le_s
#%%
np.histogram(le_s.values, bins=np.arange(0, 1, 0.1))
#%%
le_s.mean()
#%%
np_s = df['number_project']
np_s[np_s.isnull()]
#%%
np_s.mean()
#%%
np_s.max()
#%%
np_s.min()
#%%
np_s.std()
#%%
np_s.skew()
#%%
np_s.value_counts()
#%%
np_s.value_counts(normalize=True).sort_values()
#%%
amh_s = df['average_monthly_hours']
amh_s
#%%
amh_s[amh_s.isnull()]
#%%
amh_s.mean()
#%%
amh_s[(amh_s > amh_s.quantile(q=0.25) - 1.5 * (amh_s.quantile(q=0.75) - amh_s.quantile(q=0.25))) & (amh_s < amh_s.quantile(q=0.75) + 1.5 * (amh_s.quantile(q=0.75) - amh_s.quantile(q=0.25)))]
#%%
len(amh_s)
#%%
np.histogram(amh_s.values, bins=10)
#%%
amh_s.value_counts(bins=np.arange(amh_s.min(), amh_s.max() + 10, 10))
#%%
df = df.dropna(axis=0, how="any")
df = df[df["last_evaluation"]<=1 & (df["salary"]!="nme") & (df["department"] != "sale")]
df
#%%
df.groupby("department").mean()
#%% 切片后分组求极差
df.loc[:, ["average_monthly_hours", "department"]].groupby("department")["average_monthly_hours"].apply(lambda x:x.max() - x.min())
#%% 画图
import matplotlib.pyplot as plt
plt.title("salary")
plt.xlabel("salary")
plt.ylabel("number")
plt.xticks(np.arange(len(df["salary"].value_counts())) + 0.5, df["salary"].value_counts().index)
plt.axis([0, 4, 0, 10000])
plt.bar(np.arange(len(df["salary"].value_counts())) + 0.5, df["salary"].value_counts(), width=0.5)
for x, y in zip(np.arange(len(df["salary"].value_counts())), df["salary"].value_counts()):
plt.text(x + 0.5, y, y, ha="center", va="bottom")
plt.show()
#%%
df["salary"].value_counts().index
#%%
df.to_csv("newHR.csv")
#%%
df.groupby(by="department").mean()