R for statisticsData science

数据分析统计学必知 —— 描述性统计之基本的统计量

2021-12-10  本文已影响0人  python与数据分析

统计学是数据分析的基石,也是数据分析师的根本。学了统计学,你会发现很多时候的分析并不靠谱。比如很多人都喜欢用平均数去分析一个事物的结果,但是这往往是粗糙的,不准确的。如果学了统计学,那么我们就能以更多更科学的角度看待数据。用统计学作为数据分析的支撑和方向,使得分析结果更加有底气。本文主要分享描述性统计理论结合对应的python实现方式,更好的帮助大家将统计学应用到实际工作中。

文章目录

什么是描述性统计

描述性统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间关系进行评估和描述的方法。

一、描述性统计——位置度量【数据集中在哪里】

1、平均值
import pandas as pd

df = pd.DataFrame([3000,4000,4500,5000,5500,6000,20000],columns=['salary'])
df.mean()

缺点:极易受异常值的影响
解决:结尾均值或者取中位数

df[df['salary'].isin([df['salary'].min(),df['salary'].max()])==False].mean()
平均值的两个误区 !

①加权平均:给平台用户打分(近三个月的消费频次R,消费间隔F、消费金额M)

df_user = pd.DataFrame({'user_id':[1,2,3,4,5],'R':[3,6,7,10,7],'F':[10,5,9,2,6],'M':[5000,6500,7000,3500,100]})
df_user

这时我们要和业务沟通,可以依据业务经验给这三个维度一个权重值,注意权重总和为1
假如现在的权重值是【0.2,0.3.0.5】

将用户ID 为 1 用户的F值提升了1倍,总的评分才上升了3,这样的结果明显不够准确,这是大家很容易忽略的一点,造成这个问题的原因是因为量纲不一致,RF和M的值相差过大。可以通过对原始数据进行标准化和归一化解决。

# 标准化
#x 代表每个值,data代表一组数据
def standardization(x,data):
    value = (x - data.mean())/(data.std())
    return value
# 归一化1
def normalization1(x,data):
    value = (x - data.min())/(data.max() - data.min())
    return value
# 归一化2
def normalization2(x,data):
    value = (x - data.mean())/(data.max() - data.min())
    return value
df_user['old'] = df_user['R']*0.2+df_user['F']*0.3+df_user['M']*0.5
df_user['new']=(df_user['R'].map(lambda x:standardization(x,df_user['R'])))*0.2+(df_user['F'].map(lambda x:standardization(x,df_user['F']))*0.3+
                                                                               (df_user['M'].map(lambda x:standardization(x,df_user['M'])))*0.5)
df_user

通过标准化数据会发现,ID是1 的用户排名变成了第二,虽然消费金额不高,但是消费频次是最高的,所以对应评分是高的。标准化和归一化主要的目的,是帮助我们解决量纲不一致的问题,加权平均之前要解决量纲不一致问题,而加权平均应用场景是打分,用来做精准营销和广告投放等。

②均值使用的误区
第一天,有10 个用户,共充值了50块钱,人均充值了5块钱
第二天,有15个用户,共充值了90块钱,人均充值了6块钱
第三天,有8个用户,总共充值了64块钱,人均充值了8块钱
问这三天的日平均消费金额是多少?

2、中位数

将数据从小到大排序,取中间的数(偶数:中间两个数的平均值)

中位数代表一个样本,种群和概率分布中的一个数值,将其划分为上下相等两部分,中位数和均值越接近,说明异常值较少。

3、众数

出现次数最多的数(占比例最大,适用于非数值型数据)

4、数据分布
5、百分位数和四分位数

解决数据如何散布再从最小值到最大值的区间上的信息,第p个百分位数,表示至少有p%的观测值小于或者等于该值,且至少有(100-p)%的观测值大于或者等于该值

解释:至少有51%的观测值小于或等于5030,至少有49%的观测值大于5030
四分位数:第一四分位数Q1,第二四分位数Q2,第三四分位数 Q3
Q1 = 25%百分位数
Q2 = 50%百分位数 = 中位数
Q3 = 75%百分位数

二、描述性统计——变异程度度量【解决数据集中或分散程度怎么样】

1、标准差

标准差是一组数值自平均值分散开来的程度的一种测量概念。一个较大的标准差,代表大部分的数值和平均值差距较大;一个较小的标准差,代表这些数值和平均值接近。



df2 = pd.DataFrame({'A':[20,30,25,35,35],'B':[10,50,55,15,20],'C':[15,30,40,45,20]})
print('A的历史平均分:',df2['A'].mean())
print('B的历史平均分:',df2['B'].mean())
print('C的历史平均分:',df2['C'].mean())
print('A的标准差:',np.std(df2['A']))
print('B的标准差:',np.std(df2['B']))
print('C的标准差:',np.std(df2['C']))

结论:标准差越小,代表发挥越稳定,选A。

2、极差

极差 = 最大值 - 最小值 , 极易受到异常值的影响

3、四分位间距
4、偏度(Skewness)

偏度是统计数据分布偏斜方向和程度的度量,是统计数据分布的非对称程度的数字特征。

5、峰度(Kurtosls)

峰度是指次数分布曲线顶峰的尖顶程度,是次数分布的又一重要特征,通常以正态
分布为标准。

# random.randn 生成标准正态分布
d = list(np.random.randn(10000))
data = pd.Series(d)
data.plot(kind='hist',density=True,edgecolor='black')
data.plot(kind='kde',color='red')
print('偏度',data.skew())
print('峰度',data.kurtosis())

结果说明:峰度和偏度接近于0,说明数据是服从正态分布的对称分布曲线。

6、单变量探索
①五|八数概括法

最小值、第一分位数、正位数、第三四分位数、最大值

②直方图

③箱线图
统计学:怎么做异常值检测?

异常值:有时数据集包含一个或多个数值异常大或异常小的观测值,这样的极端值称为异常值。
①Ksigma法
②箱线图法(用的多)

Ksigma法
[mean - 2*std,mean + 2*std]

所有的数据中,至少有8/9(或88.9%)的数据位于平均数3个标准差范围内。
所有的数据中,至少有24/25(或96%)的数据位于平均数5个标准差范围内。

def Ksigma(k,data_list):
    error_list = []
    avg = np.mean(data_list)
    std = np.std(data_list)
    t_up = avg - k*std
    t_down = avg + k*std
    print('上限',t_up,'下限',t_down)
    
    for i in data_list:
        if (i<t_up ) or (i>t_down):
            error_list.append(i)
    return error_list

3sigma虽然是常用的,但是存在一定的缺点:①数据是服从正态分布的或者近正态分布②输出的正常区间容易受异常值影响,而导致结果不准。
如何检验是否是正态分布:峰度和偏度接近0

箱线图法

能弥补Ksigma的缺点
①计算第一分位数Q1 和 第三分位数Q3
②计算IQR = Q3 -Q1
③输出正常区间[Q1-1.5IQR,Q3+1.5IQR]

def NumOutlier(data_list):
    error_list = []
    iqr = np.quantile(data_list,0.75) -  np.quantile(data_list,0.25)
    t_up = np.quantile(data_list,0.25)-1.5*iqr
    
    t_down = np.quantile(data_list,0.75)+1.5*iqr
    print('上限',t_up,'下限',t_down)
    
    for i in data_list:
        if (i<t_up ) or (i>t_down):
            error_list.append(i)
    return error_list
异常值的常用处理方法
7、双变量探索
①散点图
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'SimHei'

sca = pd.read_excel(r'C:\Users\cherich\Desktop\test_datas.xlsx',sheet_name='时长与成绩')
ti = sca['时长']
score = sca['成绩']
plt.figure(figsize=(6,4),dpi=80)
plt.scatter(ti,score,s=100,c='#6699ff',marker='*')
plt.title('学习时长和成绩之间的关系',fontsize=20,pad=10)
plt.xlabel('时长')
plt.ylabel('成绩')
plt.show()
②皮尔逊相关系数

案例:成绩和学习时长之间的关系,应如何计算?
第一步:观察是否有线性关系
第二步:看是否有异常值
第三步:看标准差是否为0

第四步:计算相关系数


结果说明:极强相关怎么理解?最终计算出的结果是一个概率值,本案例中可以理解为影响成绩的因素 92% 是和学习时长有关。

③ 斯皮尔曼相关系数

定序型变量:具有内在固有大小或者高低循序,一般用数字和字符来表示。如职称有高、中、低,用1,2,3表示;比如年龄段有老、中、青,用A、B、C来表示。

如何选择相关系数
如何判定相关还是因果关系?

相关:是两个或两个以上变量之间互相影响的的程度,核心是互为相关,同时存在没有先后顺序。
因果:前一个事件对后一个事件的作用和强度,核心点是有先后顺序的。
相关关系和因果关系的判断依据:因果关系是一定(粗暴理解相关系数为1),相关关系是一个概率问题。

8、双变量离散程度的度量——变异系数

应用场景:当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大或者量纲不同时,使用标准差不合适,此时就应该消除测量尺度和量纲的影响,而变异系数就能做到这一点,它是原始数据标准差与原始数据平均数的比。
公式:标准差/平均数

以上主要介绍了集中趋势的度量、离散程度的度量、分布形态的度量。当业务人员/老板拿到一堆数据,丢到你面前,让你分析。这时你不会不知所措,也不会不知道从哪一步开始整理这些数据。你可以通过概括性的度量指标,来帮我们从更科学的角度发现数据问题,开展数据分析工作。

最后,感觉文章对你有帮助的小伙伴,记得点赞、关注噢!

上一篇 下一篇

猜你喜欢

热点阅读