统计学初步

for循环的赋值用法,极其精妙

  • 一个数组的每一个值增加500赋值给另一个空数组
    new_list = [ f + 500 for f in old_list]
  • 一个数组包含元素的排列顺序1,2,3,4,另一个数组为其内容的离散排列数组,需要得到离散数组中内容在数组1中编号组成的新数组。
survey_scale = ["none","a few","some","a lot"]
survey = ["none","some","a lot","a few","some"]
survey_number = [survey_scale.index(item) for item in survey]

Skew数据倾斜

  • 如果数据直方图集中在图像右侧,被称为消极倾斜


  • 如果数据集中在图像左侧,被称为积极倾斜


    image.png
  • 如果数据集中在直方图中部,被称为无倾斜


    image.png

为倾斜赋值
将数组数据赋值给倾斜对象

from scipy.stats import skew
positive_skew = skew(test_scores_positive)
negative_skew = skew(test_scores_negative)
no_skew = skew(test_scores_normal)
print(negative_skew,positive_skew,no_skew)

output
-0.6093247474592195 0.5376950498203763 0.0223645171350847

kurtosis峰态

  • 直方图分布均匀,被称为平峰态即platykurtic


    platykurtic
  • 直方图分布出现只有高耸点,所有数据几乎相同,被称为尖峰态即leptokurtic


    leptokurtic
  • 直方图所有值不低也不甚高,叫做常峰态即mesokurtic


    mesokurtic

负值分布代表平峰态,正值分布代表尖峰态,0值附近表示常峰态
峰态对象由数组赋值如下

from scipy.stats import kurtosis
kurt_platy = kurtosis(test_scores_platy)
kurt_lepto = kurtosis(test_scores_lepto)
kurt_meso = kurtosis(test_scores_meso)
print(kurt_platy,kurt_lepto,kurt_meso)

output
-0.9283967256161696 0.023335026722224317 -0.042791859857727044

modaility 模态

  • 直方图只有一个模式,称为单峰unimodal


    unimodal
  • 直方图有两个模式,称为双峰bimodal


    bimodal
  • 直方图多个模式,称为多峰multimodal


    multimodal

mean()
平均值是数组所有值求和后除以数组元素数量,求平均值plt展示方法,plt.axvline直接画一条垂直于X轴的线,标注平均值,求数组平均值则采用array.mean()
下面是求平均值并画图

mean_test_score = test_scores_normal.mean()
plt.axvline(mean_test_score)
mean平均数

median 中位数
中位数是数组排序,取中间一个数,或者两个数的mean,中位数对于特大或者特小数不敏感,即我们称之为outliers(异常值)的值。

  • 求中位数的方法需要调用numpy框架
    from numpy import median
    使用函数
    numpy.median(array)
    如下列为求positive数组平均值与中位数的对比
plt.hist(test_scores_positive)
positive_median = numpy.median(test_scores_positive)
positive_mean = test_scores_positive.mean()
plt.axvline(positive_median,color = "green")
plt.axvline(positive_mean,color = "red")
plt.show()
median中位数

方差 variance|标准差 Standard deviation

Variance

Standard deviation

求标准差的函数举例:求nab_stats数据表中mp列和ast列的标准差,求方差方法雷同

import numpy
def standard(column):
    mean = column.mean()
    a = 0
    for num in column:
        a += (num - mean) ** 2 / len(column)
    sigma = a ** (1/2)
    return sigma

mp_dev = standard(nba_stats["mp"])
ast_dev = standard(nba_stats["ast"])
print(mp_dev)
print(ast_dev)

output
896.32565278
130.883290708

正态分布 normal distribution
正态分布绘制需要依赖几率密度函数,需要加载norm模块中的pdf函数来实现,比如绘制从-10到10步进为0.1的图形内,平均值为0方差为2的正态分布图

import numpy as np
import matplotlib.pyplot as plt
# The norm module has a pdf function (pdf stands for probability density function)
from scipy.stats import norm

points2 = np.arange(-10,10,0.1)  
probabilities2 = norm.pdf(points,0,2)
plt.plot(points,probabilities2)
plt.show()
正态分布

求正态分布中距离mean多少个标准差内的比例问题的方法,思路可以转换为算出每一个值与mean的差值除以标准差,就能够得到一个所有值距离mean的标准差数量list,然后直接调用一个函数就能够计算出某个标准差内的数据比例是多少,具体代码如下

import numpy
def standard(column):  #求标准差的函数
    mean = sum(column)/len(column)
    a = 0
    for num in column:
        a += (num - mean) ** 2 / len(column)
    sigma = a ** (1/2)
    return sigma
wing_lengths = [36, 37, 38, 38, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 53, 53, 54, 55]

mean = sum(wing_lengths)/len(wing_lengths)
standard_deviation = standard(wing_lengths)

standard_deviations = [(item - mean)/standard_deviation for item in wing_lengths]  #关键步骤,求出了每个值跟mean差几个标准差的数组

def percentage(column,count):    #标准差数组在某个标准差数量内的比例函数
    num = len([item for item in column if item <= count and item >= -count])/len(wing_lengths)
    return num

within_one_percentage = percentage(standard_deviations,1)  #求一个标准差内的数据比例
within_two_percentage = percentage(standard_deviations,2)  #求两个标准差内的数据比例
within_three_percentage = percentage(standard_deviations,3)  #求三个标准差内的数据比例
print(within_one_percentage,within_two_percentage,within_three_percentage)

output
0.68 0.96 1.0

正相关positively correlated、负相关negative correlated、不相关uncorrelated

positively correlated

negative correlated

uncorrelated

使用离散图画法可明了观察出x轴与y轴两种变量的相关性

import matplotlib.pyplot as plt
plt.scatter(nba_stats["fga"], nba_stats["pts"])
plt.show()

相关系数 Pearson's r

需要import pearsonr 框架,求得两组serices数据对应的相关性值,r值取值范围为[-1,1],越接近[-1,0)为负相关,0为不相关,(0,1] 为正相关

from scipy.stats.stats import pearsonr
r_fta_pts, p_value = pearsonr(nba_stats["fta"],nba_stats["pts"])
print(r_fta_pts)
r_stl_pf, p_value = pearsonr(nba_stats["stl"],nba_stats["pf"])
print(r_stl_pf)

output
0.918978538402
0.737628216749

协方差 covariance

两个变量是相互独立的,但也有相似的方式。例如,当一个变量上升时,另一个变量也会上升。这就是所谓的协方差。协方差指的是不同的数字是如何相互变化的。

有两个变量可以相互改变的极限。这是因为每个变量都有自己的方差。这些方差为两个变量之间的协方差设定了最大的理论极限。换句话说,一组变量不能因均值而异,而这两个变量的均值各不相同。当两个变量以一种完全相同的方式变化时,两个变量可以达到最大可能的协方差(ux是x serices的mean值)


covariance

下面是举了两个column数据的协方差求法,先定义了一个求协方差公式

def covariance(column1,column2):
    mean1 = column1.mean()
    mean2 = column2.mean()
    cov = [(column1[i] -mean1)*(column2[i] - mean2) for i in range(len(column1))]     #核心语句,用range迭代生成cov数组
    cov_total = sum(cov)/len(column1)
    return cov_total

cov_stl_pf = covariance(nba_stats["stl"],nba_stats["pf"])
cov_fta_pts = covariance(nba_stats["fta"],nba_stats["pts"])
print(cov_stl_pf,cov_fta_pts)

Output
1823.35484805 56618.4139807

r值的实际计算方法

r值是实际协方差和最大可能正协方差的比值。

r值

计算标准差最终我们使用std()函数
nba_stats["pf"].std()
计算协方差我们是用numpy框架中cov函数进行计算
cov(nba_stats["pf"], nba_stats["stl"])[0,1]

下面是计算协方差的一个举例

from numpy import cov
r_fta_blk = cov(nba_stats["fta"],nba_stats["blk"])[0,1]/ (nba_stats["fta"].std() * nba_stats["blk"].std())#将协方差和两组column的标准差代入到公式中,就能得到r的值,即相关系数
r_ast_stl = cov(nba_stats["ast"],nba_stats["stl"])[0,1]/ (nba_stats["ast"].std() * nba_stats["stl"].std())
print(r_fta_blk,r_ast_stl)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容