统计学是数据分析的基石,也是数据分析师的根本。学了统计学,你会发现很多时候的分析并不靠谱。比如很多人都喜欢用平均数去分析一个事物的结果,但是这往往是粗糙的,不准确的。如果学了统计学,那么我们就能以更多更科学的角度看待数据。用统计学作为数据分析的支撑和方向,使得分析结果更加有底气。本文主要分享描述性统计
理论结合对应的python实现方式,更好的帮助大家将统计学应用到实际工作中。
什么是描述性统计
描述性统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间关系进行评估和描述的方法。
一、描述性统计——位置度量【数据集中在哪里】
1、平均值
import pandas as pd
df = pd.DataFrame([3000,4000,4500,5000,5500,6000,20000],columns=['salary'])
df.mean()
缺点:极易受异常值的影响
解决:结尾均值或者取中位数
结尾均值
: 将数据进行从小到大排序后,按照一定比例去掉两端数据,只使用中间部分数据来取平均值。数据量大一般前后取5%,数据量少去头尾即可。
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的值相差过大。可以通过对原始数据进行标准化和归一化解决。
标准化(Standardization)
:将数据转换成均值为0,标准差为1的分布,并非一定是正态的,数值没有固定范围。
归一化1(Normalization)
:将一列数据变化到某个固定区间中,通常这个区间是【0,1】归一化2(Mean Normalization)
:范围【-1,1】,将分子的Xmin换成Xmean即可。
使用:若对数据范围有严格要求,用归一化(存在极端最大和最小值需要做截尾处理),其余用标准化。
# 标准化
#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 normali