理论铺垫
集中趋势:均值、中位数与分位数、众数
均值用于衡量连续值,分布较为规律连续值
中位数用于存在异常值较大或较小的数据
众数主要用于离散值集中趋势衡量
分位数从小到大排列 每几个一组
四分位数:
Q1的位置=(n+1)*0.25
Q2的位置=(n+1)*0.5
Q3的位置=(n+1)*0.75
例如:
1 2 3 4 5 6 7
1 2 2.5 3 4 5 6 7 7.5 8 9
离中趋势:标准差、方差
数据分布:偏态与峰态、正态分布与三大分布
平均值的偏
偏态分布:
偏态系数:为正为正偏 均值较大 为负为负偏 均值较小
峰态系数:数据分布集中强度
越集中 峰值越高
正态分布与三大分布:
正态分布公式:
卡方分布
T分布:
F分布:
抽样理论:抽样误差、抽样精度
抽样平均误差计算公式:
重复(有放回)不重复(无放回)
估计总体时抽样数目的确定:
例子:
从鱼塘不同部位(有放回抽样)
2-2*0.07~2+2*0.07
1.86~2.14
也是有放回抽样,这里的Z是2
代码实现:
import pandas as pd 引入pandas
df=pd.read_csv("./data/HR.csv")导入数据
type(df)
<class 'pandas.core.frame.DataFrame'>
type(df["satisfaction_level"])查看某数据列类型
<class 'pandas.core.series.Series'>
df.mean() 求均值
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())查看均值类型
<class 'pandas.core.series.Series'>
df["satisfaction_level"].mean() 直接利用数据列求均值
0.6128393333333333
df.median() 查看中位数
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() 查看某列数据中位数
0.64
df.quantile(q=0.25) 查看分位数 q=0.25为四分位数
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) 查看某列数据四分位数
0.44
df.mode() 查看众数(有可能有缺省值)因为众数可能不唯一
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() 查看某列数据众数
0 0.1
dtype: float64
type(df["department"].mode()) 查看众数数据类型
<class 'pandas.core.series.Series'>
df.std() 查看标准差
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() 查看某列标准差
0.24862338135944925
df.var() 查看方差
satisfaction_level 6.181359e-02
last_evaluation 6.665755e+07
number_project 1.519630e+00
average_monthly_hours 2.494185e+03
time_spend_company 2.131754e+00
Work_accident 1.236854e-01
left 1.814911e-01
promotion_last_5years 2.081307e-02
dtype: float64
df["satisfaction_level"].var() 查看某列数据方差
0.061813585758606134
df.sum() 求和
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() 某列数据求和
9192.59
df.skew() 查看偏态系数
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() 查看某列数据偏态系数
-0.47643761717258093
如果偏态系数为负值,则均值偏小
df.kurt() 查看峰态系数
satisfaction_level -0.670696
last_evaluation 15001.999987
number_project -0.495810
average_monthly_hours -1.135016
time_spend_company 4.774353
Work_accident 2.086664
left -0.489485
promotion_last_5years 42.064357
dtype: float64
df["satisfaction_level"].kurt() 查看某列数据峰态系数
-0.6706959323886252
比正太分布较为平坦
import scipy.stats as ss 导入统计包
ss.norm 正态分布 是一个对象
<scipy.stats._continuous_distns.norm_gen object at 0x000001CF06E8F748>
ss.norm.stats(moments="mvsk") 同时查看 均值 方差 偏态系数 峰态系数
(array(0.), array(1.), array(0.), array(0.))
ss.norm.pdf(0.0) 查看横坐标为0时的坐标系中对应的纵坐标的值
0.3989422804014327
ss.norm.ppf(0.9) 从负无穷到几积分为0.9时的值 在坐标轴上
1.2815515655446004
ss.norm.cdf(2) 从负无穷积分为2累计概率为几
0.9772498680518208
ss.norm.cdf(2)-ss.norm.cdf(-2) 正2倍标准差减去负2倍标准差 中间的累计概率
0.9544997361036416
ss.norm.rvs(size=10) 得到10个符合正态分布的数
array([-0.03231961, 0.22159262, 0.15233949, -0.04985474, -1.29952828,
0.49948724, -0.27321615, 0.25641671, -1.42843903, -0.58849264])
ss.chi2 得到卡方分布
<scipy.stats._continuous_distns.chi2_gen object at 0x000001CF06EEE128>
ss.t 得到t分布
<scipy.stats._continuous_distns.t_gen object at 0x000001CF06F5C780>
ss.f 得到f分布
<scipy.stats._continuous_distns.f_gen object at 0x000001CF06EF4860>
df.sample(10) 抽样10条
satisfaction_level last_evaluation ... department salary
2309 0.62 0.60 ... sales low
7605 0.96 0.95 ... support medium
10525 0.75 0.53 ... product_mng low
7733 0.92 0.80 ... sales low
1146 0.80 0.95 ... support low
752 0.37 0.57 ... product_mng low
2792 0.96 0.92 ... technical medium
6591 0.80 0.91 ... accounting medium
4369 0.84 0.97 ... sales low
3085 0.63 0.76 ... hr low
[10 rows x 10 columns]
df.sample(frac=0.001) 抽样占数据比0.001
satisfaction_level last_evaluation ... department salary
4199 0.98 0.51 ... marketing medium
4498 0.85 0.58 ... IT medium
2831 0.49 0.96 ... marketing medium
14138 0.58 0.76 ... sales low
9835 0.51 0.85 ... IT high
8200 0.21 0.49 ... hr low
8682 0.33 0.51 ... support medium
10409 0.40 0.58 ... accounting low
3670 0.49 0.92 ... marketing low
11366 0.76 0.80 ... sales medium
8059 0.84 0.73 ... support low
9640 0.64 0.55 ... sales low
12365 0.91 0.87 ... technical low
12619 0.43 0.51 ... sales low
11753 0.50 0.73 ... IT medium
[15 rows x 10 columns]
课程学习地址:https://coding.imooc.com/class/185.html
统计数据:HR.csv 提取码: ys2t