数据分析基础理论与实践(一)

基础统计术语

集中趋势

数据聚拢位置的衡量,也就是数据聚拢在哪里

  1. 均值
    • 一般用于衡量连续值,尤其是分布均匀的连续值
  2. 中位数
    • 衡量一些存在异常值的集中趋势,其实就是二分位数
  3. 众数
    • 衡量一些离散值
  4. 分位数
    • 最常用的是四分位数
      在这里插入图片描述

离中趋势

数据内部的差异水平的衡量

  1. 标准差
    在这里插入图片描述

  2. 方差(标准差的平方)

  3. 极差

分布形态

数据图表化后呈现出来的形态

  1. 正态分布
  2. 左偏分布
    • 数据集中在右边,数据整体是向左偏的
  3. 右偏分布
    • 数据集中在左边,数据整体是向右偏的

偏态系数

数据平均值偏离状态的衡量,通常一个对称性的分布的中位数和平均值是相近的,但通常数据不是对称分布的,这样的分布就是有偏态的分布

在这里插入图片描述

  • 均值大于中位数就是正偏,反之就是负偏

峰态系数

是数据分布集中强度的衡量,值越大,顶就会越尖,越小分布就越平缓

在这里插入图片描述

  • 正态分布是峰态系数为3左右
  • 一个分布的峰态系数和3相差大于2,基本可以判断为不是正态分布

简单抽样理论

分为无放回抽样和有放回抽样

  • 有放回抽样

    • 平均误差计算公式

      在这里插入图片描述

    • 估计总体时抽样数目的确定

      在这里插入图片描述

  • 无放回抽样

    • 平均误差计算公式

      在这里插入图片描述

    • 估计总体时抽样数目的确定

      在这里插入图片描述

数据分类

  • 定类(类别)数据
    • 根据事物离散、无差别属性进行分类
    • 比如城市分类,无法给城市进行排序
  • 定序(顺序)数据
    • 可以界定数据大小,但不能测定差值
    • 比如高收入与低收入人群
  • 定距(间隔)数据
    • 可以界定大小的同时,可以测定差值,但没有绝对零点,数据乘除是没有意义的
    • 比如温度,我们不能说20°是10°的两倍热
  • 定比(比率)数据
    • 可以界定数据大小、可测差值、有绝对零点
    • 身高体重等等,大部分都是定比数据

单属性分析

异常值分析

  1. 连续异常值
    在这里插入图片描述

  2. 离散异常值

    • 离散属性定义范围以外的所有值均属于异常值
  3. 知识异常值

    • 超乎知识理解范围内的值,比如人身高10m

对比分析

通过比较的方式达到认识和了解数据的方法

比什么?

  1. 绝对数比较
    • 身高、体重等已经存在的数据
  2. 相对数比较
    • 通过某种方式计算或联合出来的新数据,这就是相对数

怎么比?

  1. 时间
    • 和去年销量进行比较
  2. 空间
    • 不同城市、不同地区比较
  3. 经验与计划
    • 与历史上的经验数据比较
    • 与预计的排期进行比较

结构分析

相当于对比分析中,比例相对数的比较

  1. 静态分析
    • 分析总体中个组成成分的比例
  2. 动态分析
    • 分析在某一个维度上(如时间)总体组成成分的变化趋势等等

分布分析

  1. 直接获得概率分布
  2. 是否是正态分布或其他已经存在的分布
  3. 极大似然估计法

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

b1ackc4t

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值