数据科学引论-Python之道 第6课数据统计初步 一、描述性统计 我们来看看描述性统计。举个例子,如果有人问你勒布朗詹姆斯是不是一位 优秀的运动员,你该如何回答呢?也许你可以去观看他所有的比赛,但是詹姆斯 在NBA已经效力了超过13年了,他每年都要打80多场比赛,显然看完他所有 的比赛是一个不切实际的做法,那么有没有其他方式来回答这个问题呢? 有,例如我们可以用詹姆斯的场均得分来描述他的表现,这就是被称为描述 性统计,或者是总结性统计的一个例子。也就是说,我们把大量的原生数据总结 为了一个数字。詹姆斯每一场平均得分达到了27.01,他确实是一个优秀的运动 员,所以我们看到描述性统计就是要给出有关数据集的一个基本特性的描述,它 是对大样本的数据做出的一个简短总结,给出了这个数据集的一种度量。 我们怎样才能得到对数据的描述性总结呢?例如,我们可以像刚才一样,给 出平均值,也可以给出数据集的中位值或者标准差等等。不管用哪种方式来对数 据作出描述性的总结,实际上都是在对数据进行理解,探究它内在的属性和本质。 但是描述性统计也有它的局限性,例如,我们拿詹姆斯和姚明做比较,詹姆斯的 场均得分达到了27.01,而姚明的场均得分只有19分,那么是不是我们就可以 说詹姆斯是比姚明更优秀的运动员?其实很难说,为什么呢?如果我们考察不同 的维度,可以看到,詹姆斯的场均篮板只有7.2,而姚明的场均篮板数达到了9.2。 从这个方面来看,姚明的表现会显得更好,所以我们说不同的统计视角会产生不 同的结果,如果再考虑到其他的因素,比如商业市场潜力,那么这个度量就会更 加复杂,所以描述性统计具有它的局限性
数据科学引论-P瀌瀇濻瀂瀁 之道 第 6 课 数据统计初步 一、描述性统计 我们来看看描述性统计。举个例子,如果有人问你勒布朗詹姆斯是不是一位 优秀的运动员,你该如何回答呢?也许你可以去观看他所有的比赛,但是詹姆斯 在 NBA 已经效力了超过 13 年了,他每年都要打 80 多场比赛,显然看完他所有 的比赛是一个不切实际的做法,那么有没有其他方式来回答这个问题呢? 有,例如我们可以用詹姆斯的场均得分来描述他的表现,这就是被称为描述 性统计,或者是总结性统计的一个例子。也就是说,我们把大量的原生数据总结 为了一个数字。詹姆斯每一场平均得分达到了 27.01,他确实是一个优秀的运动 员,所以我们看到描述性统计就是要给出有关数据集的一个基本特性的描述,它 是对大样本的数据做出的一个简短总结,给出了这个数据集的一种度量。 我们怎样才能得到对数据的描述性总结呢?例如,我们可以像刚才一样,给 出平均值,也可以给出数据集的中位值或者标准差等等。不管用哪种方式来对数 据作出描述性的总结,实际上都是在对数据进行理解,探究它内在的属性和本质。 但是描述性统计也有它的局限性,例如,我们拿詹姆斯和姚明做比较,詹姆斯的 场均得分达到了 27.01,而姚明的场均得分只有 19 分,那么是不是我们就可以 说詹姆斯是比姚明更优秀的运动员?其实很难说,为什么呢? 如果我们考察不同 的维度,可以看到,詹姆斯的场均篮板只有 7.2,而姚明的场均篮板数达到了 9.2。 从这个方面来看,姚明的表现会显得更好,所以我们说不同的统计视角会产生不 同的结果,如果再考虑到其他的因素,比如商业市场潜力,那么这个度量就会更 加复杂,所以描述性统计具有它的局限性
如何得到一个数据集的描述性统计呢?pandas库上提供了一个叫describe 的方法,它会记自动地计算出一个数据集上的数据点的总数,也就是不包含NaN 值的所有有效的数据的个数,给出数据集的标准差四分位值,四分位值包括1/4 位值,中位值和3/4位值,还有极值也就是最大值和最小值。所有的这些统计当 中NaN的值都会被自动跳过。 df.describe() Unnamed: symboling normalized. wheel- length width height curb-weight engine. bore stroke 0 losses base size count201.000000201.000000164.000000201.000000201.000000201.000000201.000000 201.000000 201.000000201.000000201.000000 mean100.0000000.840796 122.000000 98.797015 174.20099565.88905553.766667 2555.666657126.8756223.3191543.256766 std58.1678611.254802 35.442168 6.056365 12.3221752.1014712.447822 517.29672741.5468340.2801300.316049 min0.000000-2.000000 65.000000 85.600000 141.10000060.30000047.800000 1488.00000061.0000002.5400002.070000 25%50.0000000.000000 NaN 94.500000 166.80000064.10000052.000000 2169.00000098.0000003.1500003.110000 50% 100.0000001.000000 NaN 97.000000 173.20000065.50000054.100000 2414.000000 120.0000003.310000 3.290000 75% 150.0000002.000000 NaN 102.400000 183.50000066.60000055.500000 2926.000000 141.0000003.580000 3.410000 max 200.0000003.000000 255.000000 120.900000208.10000072.000000 59.800000 4055.000000326.0000003.940000 4.170000 这是我们看到的一个例子,这张表格给出的是对汽车的一个描述。我们用26 种属性来描述汽车,每一个属性都有一定的取值范围。如果我们在样例数据集上 调用pandas的describe的方法就会得到一张表。这张表大家其实并不陌生,因 为在第四课我们讲二氧化碳排放的例子中,在加载数据以后的DataFrame上调 用describe的方法得到过类似的一个表格。 二、平均值&中位值&标准方差 最常用的刻画数据特性的指标就是算术平均值,算术平均值就是一组数字的 平均值。它的计算公式非常简单,就是将这一组数字累加以后除以数字的个数。 算术平均值描述的是数据集的集中趋势,例如,勒布朗詹姆斯有的时候发挥欠佳, 他的得分比较少,就是用红颜色表示的在数轴左侧的数据,但在有些场次他的发 挥又超常,得分非常高,就是用绿颜色表示的在数轴右侧的数据。在大多数情况 下,他发挥正常,也就是在数轴中间这一组用蓝色表示的数据
如何得到一个数据集的描述性统计呢?瀃濴瀁濷濴瀆 库上提供了一个叫 濷濸瀆濶瀅濼濵濸 的方法,它会记自动地计算出一个数据集上的数据点的总数,也就是不包含 N濴N 值的所有有效的数据的个数,给出数据集的标准差四分位值,四分位值包括 1/4 位值,中位值和 3/4 位值,还有极值也就是最大值和最小值。所有的这些统计当 中 N濴N 的值都会被自动跳过。 这是我们看到的一个例子,这张表格给出的是对汽车的一个描述。我们用 26 种属性来描述汽车,每一个属性都有一定的取值范围。如果我们在样例数据集上 调用 瀃濴瀁濷濴瀆 的 濷濸瀆濶瀅濼濵濸 的方法就会得到一张表。这张表大家其实并不陌生,因 为在第四课我们讲二氧化碳排放的例子中,在加载数据以后的 D濴瀇濴F瀅濴瀀濸 上调 用 濷濸瀆濶瀅濼濵濸 的方法得到过类似的一个表格。 二、平均值&中位值&标准方差 最常用的刻画数据特性的指标就是算术平均值,算术平均值就是一组数字的 平均值。它的计算公式非常简单,就是将这一组数字累加以后除以数字的个数。 算术平均值描述的是数据集的集中趋势,例如,勒布朗詹姆斯有的时候发挥欠佳, 他的得分比较少,就是用红颜色表示的在数轴左侧的数据,但在有些场次他的发 挥又超常,得分非常高,就是用绿颜色表示的在数轴右侧的数据。在大多数情况 下,他发挥正常,也就是在数轴中间这一组用蓝色表示的数据
文=∑资=1xn(x1++xw) -●●● 如果我们对所有的数据求平均值,就会得到一个基本上位于发挥正常的这个 区间当中的一个值,它刻画了詹姆斯每一场得分的一个集中趋势。在pandas上 计算平均值会非常简单,在组装好的DataFrame对象上调用mean函数就会得 到每一列上面的平均值。 import pandas as pd df=pd.DataFrame('c1':【1,2,3],'c2':[1,2,100],'c3':[100,200,300]},index-=['a','b','e]) df.head() c1 c2 c3 a1 100 b22 200 c3100300 df.mean() cl 2,000000 34,333333 200.000000 dtype:float64 平均值有一些问题,让我们通过一个例子来说明。假设我们想计算正在一家 正餐厅就餐的人群的平均收入,如果现在有十位顾客,每一位顾客的收入都是1 万美元,我们求平均值就会得到人均收入就是1万美元。这时候1万美元这个数 字就准确客观地刻画了在这家餐厅中正在就餐的顾客的净资产。但是如果这个时 候比尔盖茨走进了一家饭店,那么由于他的身家达到了856亿美元,所以他一个 人就会将整个餐厅当中的人均收入拉高到将近80亿美元,显然对于这家餐厅来 说,80亿美元的人均收入并不具备代表性,也就是说,我们需要一种新的用来 度量数据分布的中间值的方法。 这时就可以用到中位值。中位值作为一种度量数据分布的中间值的方法,对
如果我们对所有的数据求平均值,就会得到一个基本上位于发挥正常的这个 区间当中的一个值,它刻画了詹姆斯每一场得分的一个集中趋势。在 瀃濴瀁濷濴瀆 上 计算平均值会非常简单,在组装好的 D濴瀇濴F瀅濴瀀濸 对象上调用 瀀濸濴瀁 函数就会得 到每一列上面的平均值。 平均值有一些问题,让我们通过一个例子来说明。假设我们想计算正在一家 正餐厅就餐的人群的平均收入,如果现在有十位顾客,每一位顾客的收入都是 1 万美元,我们求平均值就会得到人均收入就是 1 万美元。这时候 1 万美元这个数 字就准确客观地刻画了在这家餐厅中正在就餐的顾客的净资产。但是如果这个时 候比尔盖茨走进了一家饭店,那么由于他的身家达到了 856 亿美元,所以他一个 人就会将整个餐厅当中的人均收入拉高到将近 80 亿美元,显然对于这家餐厅来 说,80 亿美元的人均收入并不具备代表性,也就是说,我们需要一种新的用来 度量数据分布的中间值的方法。 这时就可以用到中位值。中位值作为一种度量数据分布的中间值的方法,对
于一组数字来说,中位值就是有一半的数字小于它,另外一半数字大于它的那个 数字。例如,在包含奇数个数字的集合中,中位值就是将这一组数字从小到大排 列好,位于最中间的数字,而在包含偶数个数字的集合中,中位值是将这一组数 据从小到大排列好之后,位于最中间的两个数据的平均值。 中位数有什么好处呢?当数据当中出现离群值时,它能够更准确地刻画数据 的集中趋势。例如,对于包含100、4、2、1、7这五个元素数据集,其中有四个 数据都是小于10的,只有一个数据是远远大于10的100,那么一百就是一个离 群值。我们把这组数字从小到大排列之后,中位置就是位于最中间的4。很显然, 4准确地刻画▣了这一组数据的集中趋势。 平均值和中位值描述的都是数据集的集中趋势,如果数据是对称的,也就是 说在数据集当中没有离群值,那么平均值和中位置就基本相同。但是当数据集中 出现离群值时,它会显着地改变平均值,但是对中位值的影响要小得多。例如, 在前面的餐厅例子中,由于比尔盖茨走进了餐厅,他把平均值显著地抬高了,得 到的人均收入达到了近80亿美元。但是,他走进这家餐厅之后,数据集的中位 值仍然是1万美元,相对于80亿美元来说,1万美元更准确地刻画了这11位用 户的数据的集中趋势,所以在这个时候我们看到中位置要优于平均值。我们看到 80亿美元这个值比1万美元这个值要差很多,也就是说,对于这个例子而言,1 万美元的中位值是对餐厅人群净资产的一种更好的表示形式。在pandas库中, 计算中位置也很简单,在组装好的DataFrame对象上调用median方法,它就会 对每一列的数据计算中位值。我们现在来观察C2这一列,它包含一个离群值100 但是中位值计算出来是20,就比前面我们用平均值计算时C2这一列的平均值 34.333333要准确得多,也就更好地反映了C2这一列的数据的集中趋势
于一组数字来说,中位值就是有一半的数字小于它,另外一半数字大于它的那个 数字。例如,在包含奇数个数字的集合中,中位值就是将这一组数字从小到大排 列好,位于最中间的数字,而在包含偶数个数字的集合中,中位值是将这一组数 据从小到大排列好之后,位于最中间的两个数据的平均值。 中位数有什么好处呢?当数据当中出现离群值时,它能够更准确地刻画数据 的集中趋势。例如,对于包含 100、4、2、1、7 这五个元素数据集,其中有四个 数据都是小于 10 的,只有一个数据是远远大于 10 的 100,那么一百就是一个离 群值。我们把这组数字从小到大排列之后,中位置就是位于最中间的 4。很显然, 4 准确地刻画了这一组数据的集中趋势。 平均值和中位值描述的都是数据集的集中趋势,如果数据是对称的,也就是 说在数据集当中没有离群值,那么平均值和中位置就基本相同。但是当数据集中 出现离群值时,它会显着地改变平均值,但是对中位值的影响要小得多。例如, 在前面的餐厅例子中,由于比尔盖茨走进了餐厅,他把平均值显著地抬高了,得 到的人均收入达到了近 80 亿美元。但是,他走进这家餐厅之后,数据集的中位 值仍然是 1 万美元,相对于 80 亿美元来说,1 万美元更准确地刻画了这 11 位用 户的数据的集中趋势,所以在这个时候我们看到中位置要优于平均值。我们看到 80 亿美元这个值比 1 万美元这个值要差很多,也就是说,对于这个例子而言,1 万美元的中位值是对餐厅人群净资产的一种更好的表示形式。在 瀃濴瀁濷濴瀆 库中, 计算中位置也很简单,在组装好的 D濴瀇濴F瀅濴瀀濸 对象上调用 瀀濸濷濼濴瀁 方法,它就会 对每一列的数据计算中位值。我们现在来观察 C2 这一列,它包含一个离群值 100, 但是中位值计算出来是 2.0,就比前面我们用平均值计算时 C2 这一列的平均值 34.333333 要准确得多,也就更好地反映了 C2 这一列的数据的集中趋势
import pandas as pd df=pd.DataFrame({'c1':【1,2,3],c2':【1,2,100],'c3:[100,200,300】J,index=['a',"b','c']) df.head() c1 c2 c3 a11100 b22200 c3100300 df.median() cl 2.0 c2 2.0 c3 200.0 dtype:float64 平均值的另一个问题靠样本方差来解决,这个问题是什么呢?我们举一个例 子,现在有两组人,他们的体重数据分别是在下面表示的这八个数据。 A 150 152 148 150 B 9 8 292291 可以看到,对于第一组人来说,他们的体重比较接近,而对于第二组人来说 他们体重的差异非常大,但是如果我们用平均值来表示,就会发现这两组人的平 均体重都是150,用平均值是无法体现出这两组人明显的这种差异性,样本方差 可以帮助我们来区分这两组人的差异,样本方差度量的是数据的分布范围。它的 计算方式是先计算出两组数据的平均值,然后将数据中每一个数字都和这个平均 值进行比较,他们的差的平方累加起来以后再除以数据的个数就是方差。 N SN(x) = (xn-)2 n=1
平均值的另一个问题靠样本方差来解决,这个问题是什么呢?我们举一个例 子,现在有两组人,他们的体重数据分别是在下面表示的这八个数据。 可以看到,对于第一组人来说,他们的体重比较接近,而对于第二组人来说, 他们体重的差异非常大,但是如果我们用平均值来表示,就会发现这两组人的平 均体重都是 150,用平均值是无法体现出这两组人明显的这种差异性,样本方差 可以帮助我们来区分这两组人的差异,样本方差度量的是数据的分布范围。它的 计算方式是先计算出两组数据的平均值,然后将数据中每一个数字都和这个平均 值进行比较,他们的差的平方累加起来以后再除以数据的个数就是方差