数据探索
文章目录
1. 查询
query
-
df.query(‘查询条件’)
df.query('col1 == 某个值') df.query('col1 == [值1,值2]')
2. 统计分析
2.1 描述统计
2.1.1均值、中位数描述
se.mean(axis=1) # 求行的均值
se.median()
plt.vlines(se.mean(),ymin=0,ymax=3,linewidth=5) # 绘制均值垂直线
plt.vlines(se.median()ymin=0,ymax=3,linewidth=3,color='red') # 绘制红色中位数线
2.1.2 分布描述
-
.describe()
df['col'].describe()
-
.quantile()
df['col'].quantile([0.5,0.75]) # 返回中位数和第三分位数
-
df['col'].var() # 方差 df['col'].std() # 标准差
2.1.3 MAD
-
MAD = median( |X_i - median(X)| )
-
abs_median_devs = abs(df['col'] - df['col'].median()) abs_median_devs.median() * 1.4826
2.1.4 偏度、峰度
-
偏度
- 是统计数据分布偏斜方向和程度的度量
- 是统计数据分布非对称程度的数字特征
- 右偏:长尾巴在右边
df['col'].skew() # 大于0-右偏
-
峰度
- 表征概率密度分布曲线在平均值出峰值高低的特征数
- 峰度高-看起来很尖
import scipy.stats as stats stats.kurtosis(数据集变量)
1 集中趋势
-
df['col'].mean() # 均值 df['Age'].median() # 中位数 df['Age'].describe() # 描述统计 df['Age'].describe(percentiles=[0.5,0.75]) # 分位数求:中位数和第三分位数 df['Age'].quantile(0.5) # 分位数 df.mode() # 众数 df['Age'].mode() # 众数
2 离中趋势
-
df['Age'].std() # 标准差 df['Age'].var() # 方差 df.sum() # 注意离散数据的求和
3 数据分布
-
df.skew() # 偏态系数 df.kurt() # 峰度系数:这里设定正态分布的峰度为0
分布函数的生成
-
分布函数的生成
import scipy.stats as ss
-
正态分布
# 查看其性质: ss.norm.stats(moments='mvsk') # m:均值、v:方差、s:偏态系数、k:峰态系数 # 生成正态分布集 ss.norm.rvs(size=1000) # 1000个符合正态分布的数字 ss.norm.pdf(x=) # 指定横坐标,返回纵坐标的值:分布函数在x上的值 ss.norm.ppf(0.9) # 从负无穷大到 所求的值,其累积值为0.9 ss.norm.cdf(2) # 从-无穷,到x=2,求其累计概率
-
卡方分布
ss.chi2
-
t分布
ss.t
-
f分布
ss.f
抽样
-
df.sample(n=10) # 抽取10个 df.sample(frac=0.01) # 抽样1% df['col'].sample(n=10) # 抽样10个
2.2 点估计与置信区间
2.3 概率分布
2.4 检验
2.5 卡方检验
2.6 ANOVA
2.7 AB测试
2.8 态分布
按数据类型选分析方式
自变量x | 因变量Y | 检验方式 |
---|---|---|
连续 | 分类 | 方差分析 |
分类 | 连续 | 方差分析 |
分类 | 分类 | 卡方检验 |
连续 | 连续 | 相关性分析 |
3. 估计
3.1 点估计
- 样本对总体进行点估计
- 有偏差
-
数值类型集
-
点估计
# 构建总体 np.random.seed(2019) salary_1 = scipy.stats.poisson.rvs(mu = 2000, size = 10000) salary_2 = scipy.stats.poisson.rvs(mu = 3000, size = 15000) salary_all = np.concatenate((salary_1,salary_2)) salary_all.mean() # 抽样(样本) sample_salary = np.random.choice(salary_all,size=500) sample_salary.mean() - salary_all.mean()
-
-
分类数据集
-
点估计
import random random.seed(2019) a = (['doctor']*10000 +\ ['teacher']*25000 +\ ['farmer']*50000 +\ ['engineer']*25000 +\ ['other']*25000) demo_sample = random.sample(a,1000) for b in set(a): print(b + '标题一:') print(demo_sample.count(a)/1000) # 每种职业在样本中的占比 print(b + '标题二:') print(a.count(b)/135000) # 每种职业在总体中的占比
-
3.2 中心极限定理
-
sampling distribution符合正态分布
-
重复采样2000次
np.random.seed(2020) sample_point = [] for x in range(2000): sample = np.random.choice(salary_all,size=500) sample_point.append(sample.mean()) # 可视化 pd.DataFrame(sample_point).plot(kind='density', # 概率密度图 figsize=(9,9), xlim=(2000,3000) ) # 总体 与 重复采样后均值 比较 salary_all.mean() - np.array(sample_point).mean()
3.3 置信区间
-
展现的是这个参数的真实值有一定概率落在测量结果周围的程度
-
-
:关键值
-
:总体的标准差
-
:样本的开平方根
-
By 儒冠多误身 2019/04/21