赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
29、布林带
28、指数移动平均线
27、简单移动平均线
26、真实波动幅度均值(ATR)
25、周汇总
24、日期分析
23、股票收益率
22、统计分析
21、取值范围:找到最大值和最小值
20、成交量加权平均价格(VWAP)
19、CSV 文件
18、文件读写
17、动手实践:数组的转换
16、数组的属性
15、数组的分割
14、数组的组合
13、动手实践:改变数组的维度
12、动手实践:多维数组的切片和索引
11、一维数组的索引和切片
10、动手实践:创建自定义数据类型
9、dtype 类的属性
8、自定义数据类型
7、字符编码
6、数据类型对象
5、NumPy 数据类型
4、选取数组元素
3、动手实践:创建多维数组
2、NumPy 数组对象
1、动手实践:向量加法
22、统计分析
资源编号:76367
人工智能
Numpy学习指南
热度:36
股票交易者对于收盘价的预测很感兴趣。常识告诉我们,这个价格应该接近于某种均值。算 数平均值和加权平均值都是在数值分布中寻找中心点的方法。然而,它们对于异常值(outlier) 既不鲁棒也不敏感。举例来说,如果我们有一个高达100万美元的收盘价,这将影响到我们的计 算结果。
股票交易者对于收盘价的预测很感兴趣。常识告诉我们,这个价格应该接近于某种均值。算 数平均值和加权平均值都是在数值分布中寻找中心点的方法。然而,它们对于异常值(outlier) 既不鲁棒也不敏感。举例来说,如果我们有一个高达100万美元的收盘价,这将影响到我们的计 算结果。 # 动手实践:简单统计分析 我们可以用一些阈值来除去异常值,但其实有更好的方法,那就是中位数。将各个变量值按 大小顺序排列起来,形成一个数列,居于数列中间位置的那个数即为中位数。例如,我们有1、2、 3、4、5这5个数值,那么中位数就是中间的数字3。下面是计算中位数的步骤。 ### (1) 计算收盘价的中位数。 你已经知道 如何从CSV文件中读取数据到数组中了,因此只需要复制一行代码并确保只获取收盘价数据即 可,如下所示: ``` c = np.loadtxt('data.csv', delimiter=',', usecols=(6,), unpack=True) ``` ### (2) 一个叫做median的函数将帮助我们找到中位数。 我们调用它并立即打印出结果。添加下 面这行代码: ``` print("median=", np.median(c)) ``` 这段代码的输出内容如下: ``` median = 352.055 ``` # (3) 既然这是我们首次使用median函数,我们来检查一下结果是否正确。 这可不是因为我 们多疑!当然,我们可以将整个数据文件浏览一遍并人工找到正确的答案,但那样太无趣了。 我们将对价格数组进行排序,并输出排序后居于中间位置的值,这也就是模拟了寻找中位数的 算法。msort函数可以帮我们完成第一步。我们将调用这个函数,获得排序后的数组,并输出 结果。 ``` sorted_close = np.msort(c) print(sorted_close) ``` 这段代码的输出内容如下: ``` [336.1 338.61 339.32 342.62 342.88 343.44 344.32 345.03 346.5 346.67 348.16 349.31 350.56 351.88 351.99 352.12 352.47 353.21 354.54 355.2 355.36 355.76 356.85 358.16 358.3 359.18 359.56 359.9 360. 363.13] ``` 太好了,代码生效了!现在,我们来获取位于中间的那个数字: ``` N = len(c) print('middle = ', sorted_close[(N - 1) // 2]) ``` 输出如下: ``` middle = 351.99 ``` ### (4) 咦,这个值和median函数给出的值不一样,这是怎么回事? 经过仔细观察我们发现, median函数返回的结果甚至根本没有在我们的数据文件里出现过。这就更奇怪了!在给NumPy 团队提交bug报告之前,我们先来看下文档。原来这个谜团很容易解开。原因就在于我们的简单 算法模拟只对长度为奇数的数组奏效。对于长度为偶数的数组,中位数的值应该等于中间那两个 数的平均值。因此,输入如下代码: ``` print('middle = ', (sorted_close[N // 2] + sorted_close[(N - 1) // 2]) / 2) ``` 输出结果如下: ``` middle = 352.055 ``` 成功了! ### (5) 另外一个我们关心的统计量就是方差。 方差能够体现变量变化的程度。在我们的例子中, 方差还可以告诉我们投资风险的大小。那些股价变动过于剧烈的股票一定会给持有者制造麻烦。 在NumPy中,计算方差只需要一行代码,看下面: ``` print('variance', np.var(c)) ``` 将给出如下结果: ``` variance 50.126517888888884 ``` ### (6) 既然我们不相信NumPy的函数,那就再次根据文档中方差的定义来复核一下结果。 注意, 这里方差的定义可能与你在统计学的书中看到的不一致,但这个定义在统计学上更为通用。 >方差是指各个数据与所有数据算术平均数的离差平方和除以数据个数所得 到的值。 一些书里面告诉我们,应该用数据个数减1去除离差平方和 ① 。 ``` print('variance from definition = ', np.mean((c - c.mean()) ** 2)) ``` >① 注意样本方差和总体方差在计算上的区别。总体方差是用数据个数去除离差平方和,而样本方差则是用样本数据 个数减1去除离差平方和,其中样本数据个数减1(即n-1)称为自由度。之所以有这样的差别,是为了保证样本 方差是一个无偏估计量。——译者注 输出结果如下: ``` variance from definition = 50.126517888888884 ``` 这正是我们希望得到的结果! # 刚才做了些什么 你可能已经注意到了一些新东西。我们直接在数组c上调用了mean方法c.mean(),是的, 没有写错。ndarray对象有mean方法,这将给你带来便利。从现在开始,记住这种用法是正确 无误的。示例代码可以在simplestats.py中找到。