统计学基础概念和方法_统计学的几个基本概念「建议收藏」

统计学基础概念和方法_统计学的几个基本概念「建议收藏」作者:xxw9485时间:2018/3/20来源:https://www.jianshu.com/p/dffdaf11bd4c下面将从具体的实例入手,用Python并结合统计学知识对数据进行探索分析,从而了解数据分析

统计学基础概念和方法_统计学的几个基本概念「建议收藏」"

作者:xxw9485
时间:2018/3/20
来源:https://www.jianshu.com/p/dffdaf11bd4c


下面将从具体的实例入手,用Python并结合统计学知识对数据进行探索分析,从而了解数据分析所用到的一些统计学概念。

前言

数据分析步骤

数据分析一般包括以下步骤:

  • 提出有价值的问题,好的问题就像是瞄准了正确的靶心,才能使后续的动作有意义。
  • 收集原始数据,数据来源可能是丰富多样的,格式也可能不尽相同。
  • 清洗数据,理顺杂乱的原始数据,并修正数据中的错误,这一步比较繁杂,但确是整个分析的基石。
  • 进行探索式分析,对整个数据集有个全面的认识,以便后续选择何种分析策略。
  • 分析数据,这里常常用到机器学习、数据挖掘、深度学习等算法。
  • 得出结论,可视化结果,并使用报告、图表等形式展现出来,与他人交流。

实例

  • 问题:当今美国社会中富人比一般人是更胖吗?
  • 数据:2015年的BRFSS调研数据
  • 重要指标:家庭收入水平income,用来区分富人和普通人;BMI指数,其定义是体重(kg)除以身高(m)的平方,用于衡量胖瘦。

统计学基础概念

总体VS样本

总体是我们感兴趣的目标的数据集。在我们关于“美国的富人会更胖吗”这个问题下,总体是全部美国人的数据,显然数据量非常庞大,难以全部获取。那么如何解决呢?于是就有了样本,即在总体中取一子集,我们使用的BRFSS数据集就是一个样本数据。可见总体往往是很大的,因为不可能完整获取有时只是概念上的,所以我们常常需要采用样本观测到的数据来推测总体的性质。当然,在有了大规模分布式存储和计算能力的今天,也许总体数据的取得也不再是难事了,这正是大数据的魅力所在。

参数VS统计量

用来描述总体特性的测量数称为总体的参数,而用来描述样本特性的测量数称为样本统计量。在我们的问题中,全体美国人BMI指数的平均值是参数,而BRFSS数据集中BMI指数的平均值则是统计量。统计学中时常使用样本的统计量来对总体参数进行估计,在后续讲到参数估计时我们会详细展开。

因果性VS相关性

统计学中常说相关性并不意味着因果性,而生活中我们却常常错把相关性的关系当成因果关系。比如公鸡总是在早上天亮的时候打鸣,那你能说是公鸡打鸣导致了天亮吗?

实验VS调研

那么在统计学中我们就得不到因果关系吗?也不是的。一般的调研数据得到的都是相关性关系,比如我们后续会研究的BRFSS调研数据。要想得到因果关系的证明,需要设计非常严格的实验才行。比如研究某项新药对某个疾病是否有疗效,就要设计一项统计学实验,其中又需要了解如下概念:

控制组VS对照组

首先需要将实验对象随机分为两组,控制组服用新药,对照组不服用新药。

独立变量VS依赖变量

是否服用新药是独立变量(independent variables),而观测到的服药后的疗效,是相应的依赖变量(dependent variables)。我们往往需要分析这两者的关系,来判断新药是否有疗效。

药物VS安慰剂

对于实验对象,也许他们因为心理上相信药物有效而产生好转的征兆,为了避免这类心理上的影响,两组实验对象都需要服药,只不过控制组服用的是真正需要测试的药物,而对照组服用的是没有效果的安慰剂而已。

双盲实验

不仅受试者会受到心理的干扰,实验的观察测量人员也会受到主观偏见的影响。所以在实验中,无论是实验对象还是实验人员,都不知道哪组是控制组,而哪组又是对照组,这被称为双盲实验。

数据采集与清洗

原始数据是ASCII格式的压缩包,需要采用pandas.read_fwf() 来读取。清洗时不仅要正确提取所需变量,还需要对数据进行恰当转换使之成为我们可以理解的量。下面将数据提取和清洗的代码存入brfss.py中。

import pandas as pd
import numpy as np

class FixedWidthVariables(object):
    """Represents a set of variables in a fixed width file."""

    def __init__(self, variables, index_base=0):
        """Initializes. variables: DataFrame index_base: are the indices 0 or 1 based? Attributes: colspecs: list of (start, end) index tuples names: list of string variable names """
        self.variables = variables

        # note: by default, subtract 1 from colspecs
        self.colspecs = variables[['start', 'end']] - index_base

        # convert colspecs to a list of pair of int
        self.colspecs = self.colspecs.astype(np.int).values.tolist()
        self.names = variables['name']

    def ReadFixedWidth(self, filename, **options):
        """Reads a fixed width ASCII file. filename: string filename returns: DataFrame """
        df = pd.read_fwf(filename,
                             colspecs=self.colspecs, 
                             names=self.names,
                             **options)
        return df



def ReadBrfss(filename='LLCP2015ASC.zip', compression='zip', nrows=None):
    """Reads the BRFSS data. filename: string compression: string nrows: int number of rows to read, or None for all returns: DataFrame """
    var_info = [
        ('sex', 120, 120, int),
        ('age', 1974, 1975, int),
        ('edu', 158, 158, int),
        ('marital', 157, 157, int),
        ('employ', 172, 172, int),
        ('income', 175, 176, int),        
        ('health', 90, 90, int),             
        ('bmi', 1988, 1991, int),
        ('height', 1980, 1982, int),
        ('weight', 1983, 1987, int),    
        ('exercise', 227, 227, int),
        ('workhour', 608, 609, int),
        ('exemin', 2119, 2123, int),
        ('fruit', 2050, 2050, int),
        ('vegetable', 2051, 2051,int),
    ]
    columns = ['name', 'start', 'end', 'type']
    variables = pd.DataFrame(var_info, columns=columns)
    variables.end += 1
    dct = FixedWidthVariables(variables, index_base=1)

    df = dct.ReadFixedWidth(filename, compression=compression, nrows=nrows)
    CleanBrfssFrame(df)
    return df


def CleanBrfssFrame(df):
    """Recodes BRFSS variables. df: DataFrame """
    # sex
    df.sex = df.sex.replace({
  
  1:'M', 2:'F'})

    # income
    df.income = df.income.replace({
  
  77:np.nan, 99:np.nan})

    # health
    df.health = df.health.replace({
  
  7:np.nan, 9:np.nan})

    # bmi
    df.bmi /= 100

    # height
    df.height /= 100

    # weight
    df.weight /= 100

    # exercise
    df.exercise = df.exercise.replace({
  
  1:True, 2:False, 7:np.nan, 9:np.nan})

    # workhour
    df.workhour = df.workhour.replace({
  
  97:np.nan, 98:0, 99:np.nan})

    # fruit
    df.fruit = df.fruit.replace({
  
  1:True, 2:False, 9:np.nan})

    # vegetable
    df.vegetable = df.vegetable.replace({
  
  1:True, 2:False, 9:np.nan})

今天的文章统计学基础概念和方法_统计学的几个基本概念「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85864.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注