理论铺垫:
-
集中趋势(数据聚拢的衡量)
- 均值:连续值的 中位数:异样值 衡量集中趋势 分位数:和其他几个值综合使用 众数:离散值
Q1 = (n+1) * 0.25
Q2 = (n+1) * 0.5
Q3 = (n + 1) * 0.75
- 均值:连续值的 中位数:异样值 衡量集中趋势 分位数:和其他几个值综合使用 众数:离散值
离中趋势
越小 表示数据越聚拢 越大 数据越离散
-
查看正态分布表
正态分布表
-
数据分布
- 偏态与峰度
- 偏态系数与峰态系数
- 偏态:数据偏离正态的衡量 偏:平均值的偏
- 正常:中位数和均值将接近 甚至相等 但是数据不一定对称分布 中位数和均值有差别
coefficient of skew:
S为正 正偏 表示均值偏大 - 负偏 均值小
-
Kurtosis coefficient(峰态系数) 数据分布集中强度衡量 一般是3 若有个分布相差>2 判断不是正态分布了:
K方分布χ2分布:设 X1,X2,......Xn相互独立, 都服从标准正态分布N(0,1), 则称随机变量所服从的分布为自由度为 n 的χ2分布
t分布 :设X1服从标准正态分布N(0,1),X2服从自由度为n的χ2分布,且X1、X2相互独立,则称变量t=X1/(X2/n)1/2 所服从的分布为自由度为n的t分布。
F分布 :设X1服从自由度为m的χ2分布,X2服从自由度为n的χ2分布,且X1、X2相互独立,则称变量F=(X1/m)/(X2/n)所服从的分布为F分布,其中第一自由度为m,第二自由度为n
-
抽样理论(全量检验无法实现
可以完全随机抽样 等差距抽样 分类分层抽样 会有误差 重复抽样 不重复抽样- 抽样误差与精度
- 抽样平均误差计算公式:
- 重复抽样(放回抽样): :总体方差 N:总体个数 n:抽样个数
- 不重复抽样
- 估计总体时抽样数目的确定:
- 重复抽样:
- 不重复抽样:
- : 总体方差 : 取到标准差相对于正值的距离 均值 + - 2范围 :需要控制的方差
- 抽样误差与精度
-
example:
- 保证在 95.45% 2 - 2 ,2 + 2
- 无放回抽样
编码实现
- pandas有两个类型 dataframe(组成df的每一列数据:series) & series
- 两种结构形式一样 可以共用
type(df)
Out[10]: pandas.core.frame.DataFrame
type(df["satisfaction_level"])
Out[11]: pandas.core.series.Series
#平均数
df.mean()
Out[12]:
satisfaction_level 0.612839
last_evaluation 67.373732
number_project 3.802693
average_monthly_hours 201.041728
time_spend_company 3.498067
Work_accident 0.144581
left 0.238235
promotion_last_5years 0.021264
dtype: float64
type(df.mean())
Out[13]: pandas.core.series.Series
df["satisfaction_level"].mean()
Out[14]: 0.6128393333333343
#中位数
df.median()
Out[15]:
satisfaction_level 0.64
last_evaluation 0.72
number_project 4.00
average_monthly_hours 200.00
time_spend_company 3.00
Work_accident 0.00
left 0.00
promotion_last_5years 0.00
dtype: float64
df["satisfaction_level"].median()
Out[16]: 0.64
#四分位数
df.quantile(q=0.25)
Out[17]:
satisfaction_level 0.44
last_evaluation 0.56
number_project 3.00
average_monthly_hours 156.00
time_spend_company 3.00
Work_accident 0.00
left 0.00
promotion_last_5years 0.00
Name: 0.25, dtype: float64
df["satisfaction_level"].quantile(q=0.25)
Out[18]: 0.44
#众数 表示出现最多的两个数字都显示
df.mode()
Out[19]:
satisfaction_level last_evaluation ... department salary
0 0.1 0.55 ... sales low
1 NaN NaN ... NaN NaN
[2 rows x 10 columns]
df["satisfaction_level"].mode()
Out[20]:
0 0.1
dtype: float64
df["department"].mode()
Out[21]:
0 sales
dtype: object
#类型 series
type(df["department"].mode())
Out[22]: pandas.core.series.Series
#离中趋势
df.std()
Out[23]:
satisfaction_level 0.248623
last_evaluation 8164.407524
number_project 1.232733
average_monthly_hours 49.941815
time_spend_company 1.460053
Work_accident 0.351689
left 0.426018
promotion_last_5years 0.144267
dtype: float64
df["satisfaction_level"].std()
Out[24]: 0.24862338135945417
#variance
df["satisfaction_level"].var()
Out[25]: 0.06181358575860858
#sum
df.sum()
Out[26]:
satisfaction_level 9192.59
last_evaluation 1.01074e+06
number_project 57048
average_monthly_hours 3016028
time_spend_company 52478
Work_accident 2169
left 3574
promotion_last_5years 319
department salessalessalessalessalessalessalessalessaless...
salary lowmediummediumlowlowlowlowlowlowlowlowlowlowl...
dtype: object
#离散数据将其连接起来了
df["satisfaction_level"].sum()
Out[27]: 9192.59
#偏态系数 skew
df.skew()
Out[28]:
satisfaction_level -0.476438
last_evaluation 122.482652
number_project 0.337774
average_monthly_hours 0.053225
time_spend_company 1.853530
Work_accident 2.021481
left 1.229057
promotion_last_5years 6.637677
dtype: float64
# 负偏 平均值高于
df["satisfaction_level"].skew()
Out[29]: -0.47643761717258093
#峰态系数 kurt -0.67比正态系数稍微平缓一些
df["satisfaction_level"].kurt()
Out[30]: -0.6706959323886252
#分布函数 scipy
import scipy.stats as ss
ss.norm
Out[32]: <scipy.stats._continuous_distns.norm_gen at 0x23ed69af550>
ss.norm.stats(moments="mvsk")
Out[33]: (array(0.), array(1.), array(0.), array(0.))
# mean var skew kurt 对应的四个值显示
#输入横坐标 输出纵坐标的值 分布函数在0上面的值
ss.norm.pdf(0.0)
Out[34]: 0.3989422804014327
# ppf: input [0-1] 的累计值
ss.norm.ppf(0.9)
Out[35]: 1.2815515655446004
#表示 从-无穷 到 1.28累计的值为0.9
#cdf 从-无穷到2 累计概率为输出值
ss.norm.cdf(2)
Out[36]: 0.9772498680518208
# [-2S , +2S] 累计概率 标准差
ss.norm.cdf(2) - ss.norm.cdf(-2)
Out[37]: 0.9544997361036416
#n个符合正态分布的数字
ss.norm.rvs(size=20)
Out[38]:
array([ 1.18630174, 0.64605501, 1.49520852, 0.57141885, -1.19143881,
1.21875141, 0.40884864, 0.32411045, 1.59943188, -1.29002259,
-0.23528032, -0.30643705, 0.61237353, 1.27531641, -0.54063283,
1.23197941, 1.3667812 , -0.36843242, 0.37077125, -1.10467065])
# k^2分布
# t分布
#f分布
ss.chi2
Out[39]: <scipy.stats._continuous_distns.chi2_gen at 0x23ed69d10b8>
ss.t
Out[40]: <scipy.stats._continuous_distns.t_gen at 0x23ed6a42cf8>
ss.f
Out[41]: <scipy.stats._continuous_distns.f_gen at 0x23ed69e1940>
#抽样
df.sample(n=10)
Out[42]:
satisfaction_level last_evaluation ... department salary
8281 0.21 0.55 ... technical low
9649 0.47 0.65 ... hr low
4390 0.93 0.76 ... technical medium
10068 0.87 0.66 ... product_mng low
14199 0.49 0.49 ... product_mng high
7347 0.30 0.47 ... sales low
10073 0.23 0.87 ... accounting high
10017 0.89 0.84 ... sales medium
14409 0.10 0.89 ... technical low
7897 0.78 0.87 ... technical medium
[10 rows x 10 columns]
#frac = 0.001 抽样比例
df.sample(frac=0.001)
Out[44]:
satisfaction_level last_evaluation ... department salary
14319 0.71 0.87 ... hr medium
3719 0.57 0.45 ... technical medium
2638 0.69 0.61 ... technical medium
13826 0.87 0.89 ... marketing low
4412 0.55 0.93 ... management low
3567 0.53 0.85 ... technical medium
6082 0.80 0.40 ... support high
11682 0.58 0.67 ... technical medium
8142 0.90 0.74 ... support medium
4939 0.69 0.59 ... support medium
6995 0.18 0.46 ... support medium
13304 0.45 0.63 ... management medium
14695 0.38 0.52 ... sales low
8362 0.76 0.94 ... technical medium
1440 0.82 0.93 ... product_mng medium
[15 rows x 10 columns]
#series 也可以抽样
df["satisfaction_level"].sample(15)
Out[45]:
170 0.81
14508 0.40
5922 0.64
6839 0.64
14231 0.11
8370 0.23
3000 0.24
2972 0.22
9851 0.67
7634 0.75
14174 0.90
1412 0.46
5797 0.21
13864 0.65
12813 0.59
Name: satisfaction_level, dtype: float64
建议打开官网 随用随查
数据分类
-
定类(类别):根据事务离散、无差别属性进行的分类(区分类别 就是定类数据)
- 性质:类别之间无差距 (性别 民族都是定类数据) 不能说一个民族和其他民族之间距离有大有小
-
定序(顺序):可以界定数据的大小 但不能测定差值
- 数据间有差距 但是无法测定 只能在形式上表示一下 收入低中高
-
定距(间隔):可以界定数据大小的同时 可测定差值 但无绝对零点
- 鉴定大小同时 也可测定差值 但是没有绝对零点 - 乘法 除法 比例没有意义 (摄氏温度 无意义)
-
定比(比率):可以界定数据大小 可测定差值 有绝对零点
- 身高 长度 乘除有意义
单属性分析
1.异常值分析:离散异常值 连续异常值 常识异常值
连续异常值
- k取值的不同 测定的异常值也不一样 k=1.5 临近边界的值 属于中等异常 k = 3 属于非常异常
- 异常值的危害 : 让本可以代表属性的值 失去去意义
- 连续异常值:可以 舍弃 也可以取边界异常值进行代替 不同业务中 需要用不同的情况进行合适处理
离散异常值
- 离散异常值: Nan or 将收入分类:中高低 出现其他的string 属于离散异常值
- 可以直接舍弃 或者当成一个单独的异常值并用标记标定出来 将其与其他值进行区分
知识异常值
-
身高:5m 超出常识了
2.对比分析:绝对数与相对数,时间、空间、理论维度比较(通过对比达到认识与了解数据的事实的方法) 对比分析是宽范围的分析方法 有简单的复合因子分析
1.比什么
- 绝对数比较 : 绝对的数字 比较收入 评分 身高
- 相对数比较:把几个关联值联合起来进行比较 联合种类多
- 结构:part:entirety rate 考试通过率
- 比例:use different part of value in totality to compare e.g. three traditional industries' rate:agriculture industry service's rate
- 比较:同一时空下相似或同质指标进行相比 e.g. 不同时期下的价格 不同互联网公司间的待遇水平
- 动态: 有物理量在里面 比如:用户增速
-
强度相对数:性质不同 但有相互联系的属性进行联合 : GDP 人均GDP 粮食密度
2.怎么比
时间维度: 对比分析法用的比较多的维度 现在和过去比 过去和以前比 can infer the future 同比:this year June 和去年同期进行比较 环比:compare to May this year
空间维度:逻辑
经验与计划: 经验比较:失业率达到多少会暴乱 而将国家的失业率与之进行比较 计划:工作要排期 做的工作与排期进行比较
3.结构分析:各组成部分的分布于规律(可看作比例相对数的比较 重点研究一个物体的总体结构的相关与差异性)
- 静态结构分析
- 直接分析总体的组成 e,g 直接分析每个产业的百分比例 可以将产业结构和其他国家进行比较日本 美国
- 动态结构分析
- 以时间为轴分析变化趋势 e.g. 三大结构的占比 一五计划 - 十一五计划产业变化
4.分布分析:数据分布频率的显式分析
-
直接获得概率分布
- 得到一系列数 并将其排列 得到的分布千奇百怪 ,但这就是其分布 该分布可能有意义 在对比过后又意义 也可能没有意义 与分析者的分析目的有关 可能和其他属性进行复合分析才有关联
- 或者进行比较 或者复合分析得到的分布才有意义
-
是不是正态分布
- 如果是正态分布 可以用对应公式进行整体均值的分布
- 用均值 方差 可以快速定位 某具体值对应相对于整体的位置
- 判断是否是正态分布 使用假设检验的方法
- 判断不是正态分布 偏态 峰态系数定位= 3 若大于2 则不是
- 极大似然:相似程度的衡量 给出一串数字 知道属于正态分布 就一定有 可以确定mean var 使其在确定的正态分布下这几个点的取值的和或积在刚才的均值方差下最大
-
可以求 t f k^2分布下的极大似然 哪个大 就是哪个分布
-
satisfaction_level的分析
#判断异常值
sl_s = df["satisfaction_level"]
sl_s.isnull()
Out[7]:
0 False
1 False
2 False
3 False
.....
sl_s[sl_s.isnull()]
Out[8]:
14999 NaN
15000 NaN
Name: satisfaction_level, dtype: float64
#查看具体情况
df[df["satisfaction_level"].isnull()]
Out[10]:
satisfaction_level last_evaluation ... department salary
14999 NaN 0.52 ... support low
15000 NaN 999999.00 ... sale low
[2 rows x 10 columns]