如何利用Python预测科沃斯股票价格预测

用 Python 写了个简单的股票量化交易框架
大奖章|量化投资|量化交易平台|交易接口|金融数据
用 Python 写了个简单的股票量化交易框架
85人已关注
集成了以前写的 [easytrader]() 和 [easyquotation](https://)
[Github 地址]() 欢迎 `star` 和 `fork`
因为行情的获取用到了 `async / await` 所以暂时只支持 `Python3.5`
支持 佣金宝 和 华泰 两家券商的自动登录和买卖。
使用的是新浪的免费行情,大概一秒钟推送一次 所有的 3000 多只股票的实时数据。
也可以自己引入 tushare 这个免费的财经信息获取包 或者 引入 wind
其中的事件驱动引擎 和 策略模板 是模仿的 vnpy 的框架
编写非常简单,因为功能比较有限。可以查看下面的 `策略_Demo1`
# 引入策略模板
from easyquant import StrategyTemplate
class Strategy(StrategyTemplate):
&& &# 主要实现下面这个 `strategy` 函数就可以了
& & def strategy(self, event):
& & & & &&&:param event event.data 为所有股票的信息,结构如下
& & & & {';:
& & & & {'ask1': '0.493',
& & & & &'ask1_volume': '75500',
& & & & &'ask2': '0.494',
& & & & &'ask2_volume': ';,
& & & & &'ask3': '0.495',
& & & & &'ask3_volume': ';,
& & & & &'ask4': '0.496',
& & & & &'ask4_volume': ';,
& & & & &'ask5': '0.497',
& & & & &'ask5_volume': ';,
& & & & &'bid1': '0.492',
& & & & &'bid1_volume': ';,
& & & & &'bid2': '0.491',
& & & & &'bid2_volume': ';,
& & & & &'bid3': '0.490',
& & & & &'bid3_volume': ';,
& & & & &'bid4': '0.489',
& & & & &'bid4_volume': ';,
& & & & &'bid5': '0.488',
& & & & &'bid5_volume': ';,
& & & & &'buy': '0.492',
& & & & &'close': '0.499',
& & & & &'high': '0.494',
& & & & &'low': '0.489',
& & & & &'name': '华宝油气',
& & & & &'now': '0.493',
& & & & &'open': '0.490',
& & & & &'sell': '0.493',
& & & & &'turnover': '',
& & & & &'volume': '1'}}
& & & & &&&
& & & & # 使用 self.user 来操作账户,使用 self.user.buy() / self.user.sell() 来买卖,用法同 easytrader 用法
& & & & # 使用 self.log.info('message') 来打印你所需要的 log
& & & & print('\n\n策略1触发')
& & & & print('行情数据: 万科价格: ', event.data[';])
& & & & print('检查持仓')
& & & & print(self.user.balance)
& & & & print('\n')
运行之后基本是下面这样
启动主引擎
[ 14:05:36.649599] INFO: main_engine.py: 加载策略: 策略 1_Demo
[ 14:05:36.650250] INFO: main_engine.py: 加载策略: 策略 2_Demo
[ 14:05:36.650713] INFO: main_engine.py: 加载策略完毕
触发每秒定时计时器
策略 1 触发
行情数据: 万科价格: &{'ask4': 0.0, 'ask1': 0.0, 'bid2_volume': 0, 'bid3': 0.0, 'bid5_volume': 0, 'name': '万 &科A', 'ask4_volume': 0, 'close': 24.43, 'volume': 0.0, 'ask3_volume': 0, 'bid5': 0.0, 'bid1': 0.0, 'ask2': 0.0, 'bid4_volume': 0, 'high': 0.0, 'ask5': 0.0, 'bid4': 0.0, 'ask5_volume': 0, 'turnover': 0, 'ask2_volume': 0, 'sell': 0.0, 'open': 0.0, 'bid3_volume': 0, 'bid2': 0.0, 'bid1_volume': 0, 'buy': 0.0, 'ask3': 0.0, 'low': 0.0, 'now': 0.0, 'ask1_volume': 0}
[{'asset_balance': 2758.98, 'market_value': 2740.9, 'enable_balance': 18.08, 'current_balance': 18.08, 'money_name': '人民币', 'fetch_balance': 18.08, 'money_type': '0'}]
策略 2 触发
行情数据: 华宝油气 {'ask4': 0.5, 'ask1': 0.497, 'bid2_volume': 4594100, 'bid3': 0.494, 'bid5_volume': 851300, 'name': '华宝油气', 'ask4_volume': , 'close': 0.5, 'volume': 9, 'ask3_volume': , 'bid5': 0.492, 'bid1': 0.496, 'ask2': 0.498, 'bid4_volume': 313700, 'high': 0.501, 'ask5': 0.501, 'bid4': 0.493, 'ask5_volume': , 'turnover': , 'ask2_volume': , 'sell': 0.497, 'open': 0.5, 'bid3_volume': 997500, 'bid2': 0.495, 'bid1_volume': 5507952, 'buy': 0.496, 'ask3': 0.499, 'low': 0.495, 'now': 0.497, 'ask1_volume': }
[{'asset_balance': 2758.98, 'market_value': 2740.9, 'enable_balance': 18.08, 'current_balance': 18.08, 'money_name': '人民币', 'fetch_balance': 18.08, 'money_type': '0'}]
浏览数(40526)
这个是群主@食灯鬼&发布的么,点赞一个,好东西居然没人关注,大奖章现在人气不行了一文教你如何用Python预测股票价格
翻译 | AI科技大本营(rgznai100)
参与 | 刘畅
编辑 | 周翔
【AI科技大本营导读】最近,A股尤其是上证指数走势凌厉,让营长有种身在牛市中的错觉。然而大盘天天涨,营长账户中还是那几百万,甚至还有所缩水。夜深人静的时候,营长常常会点着一支烟,思索到底有没有一个完美的算法,可以预测股价的涨跌,这样就可以早日实现财务自由,走向人生巅峰。这时,一篇外国友人的文章成功引起了营长的注意,看完后备受启发,所以我们将其编译后,分享给大家。
友情提醒:股市有风险,投资需谨慎。
对数据科学家来说,预测证券市场走势是一项非常有诱惑力的工作,当然,他们这样做的目的很大程度上并不是为了获取物质回报,而是为了挑战自己。证券市场起起伏伏、变幻莫测,试想一下,如果在这个市场里存在一些我们或者我们的模型可以学习到的既定模式,让我们可以打败那些商科毕业的操盘手,将是多么美妙。当然,当我一开始使用加性模型(additive model)来做时间序列预测时,我不得不先用模拟盘来验证我的模型在股票市场上的表现。
一众挑战者们都希望在每日收益率上能够跑赢市场,但是大多数都失败了,我也未能幸免。不过,在这个过程中也学到了大量Python相关知识,包括面向对象编程、数据处理、建模、以及可视化等等。同时,我也认清了一个道理,不要在每日收益率上锱铢必较,学会容忍适当的短期亏损,放长线才能钓大鱼。
一天与三十年对比结果:你宁愿把钱投在哪里?
在任何任务中(不只是数据科学),当我们没有取得立竿见影的成效时,我们都有三个选择:
1. 调整结果,让我们看起来像是成功了
2. 隐藏结果,所以没有人会注意到
3. 公开我们所有的结果和方法,以便其他人(以及我们自己)可以从中吸取经验和教训
显然,不管站在个人还是社会层面,方案三都是最佳选择,但它同时也是最需要勇气去实践的。我可以选择性地公布结果,比如当我的模型能够带来丰厚的利润回报时,我也可以掩盖失败的事实,假装自己从来没有在这项工作上花过时间。这似乎是很天真的想法!我们之所以能够进步是因为不断重复失败——学习这个过程,而不仅仅是之前的成功。而且,为有难度的任务编写Python代码而付出的努力也并不应该白费!
这篇文章记录了我使用Python开发的“stock explorer”工具——Stocker的预测功能。此前,我曾展示了如何使用Stocker进行分析,并且将完整的代码贴在GitHub上,以方便大家。
Github代码地址:
https://github.com/WillKoehrsen/Data-Analysis/tree/master/stocker
▌实现预测的Stocker工具
Stocker是一款用于探索股票情况的Python工具。一旦我们安装了所需的库(查看文档),我们可以在脚本的同一文件夹中启动一个Jupyter Notebook,并导入Stocker类:
现在可以访问这个类了。我们通过传递任一有效的股票代码(粗体是输出)来创建一个Stocker类的对象:
根据上面的输出结果,我们有20年的亚马逊每日股票数据可以用来探索! Stocker对象是建立在Quandl金融库上,而且拥有3000多只股票可以使用。我们可以使用plot_stock函数来绘制一个简单的历史股价图:
Stocker的分析功能可以用来发现数据中的整体趋势和模式,但我们将重点关注预测股票未来的价格上。Stocker中的预测功能是使用一个加性模型来实现的,该模型将时间序列视为季节性(如每日、每周和每月)的整体趋势组合。Stocker使用Facebook开发的智能软件包进行加性建模,用一行代码就可以创建模型并进行预测:
注意,表示预测结果的绿线包含了相对应的置信区间,这代表在模型预测的不确定性。在这种情况下,如果将置信区间宽度设置为80%,这意味着我们预计这个范围将包含实际值的可能性为80%。置信区间将随着时间进一步扩大,这是因为随着预测时间距离现有数据的时间越来越远,预测值将面临更多的不确定性。任何时候我们做这样的预测,都必须包含一个置信区间。尽管大多数人倾向于一个确定的值,但我们的预测结果必须反映出我们生活在一个充满不确定性的世界!
任何人都可以做股票预测:简单地选择一个数字,而这就是你的估测(我可能是错的,但我敢肯定,这是华尔街所有人都会做的)。为了让我们的模型具有可信度,我们需要评估它的准确性。Stocker工具中有许多用于评估模型准确度的方法。
▌评估预测结果
为了计算准确率,我们需要一个测试集和一个训练集。我们需要知道测试集的答案,也就是实际的股价,所以我们将使用过去一年的历史数据(本例中为2017年)。训练时,我们不选用的数据来作为训练集。监督学习的基本思想是模型从训练集中学习到数据中的模式和关系,然后能够在测试数据上正确地重现结果。
我们需要量化我们的准确率,所以我们使用了测试集的预测结果和实际值,我们计算的指标包括测试集和训练集的美元平均误差、正确预测价格变化趋势的时间百分比、以及实际价格落在预测结果80%置信区间内的时间百分比。所有这些计算都由Stocker自动完成,而且可视化效果很好:
可以看到,预测结果真是糟糕透了,还不如直接抛硬币。如果我们根据这个预测结果来投资,那么我们最好是买买彩票,这样比较明智。但是,不要放弃这个模型,第一个模型通常比较糟糕,因为我们使用的是默认参数(称为超参数)。如果我们最初的尝试不成功,那么我们可以调整这些参数来获得一个更好的模型。在Prophet模型中有许多不同的参数设置需要调整,最重要的是变点先验尺度(changepoint prior scale),它控制着模型在数据趋势上的偏移量。
▌变点先验(Changepoint Prior)的选择
变点代表时间序列从增加到减少,或者从缓慢增加到越来越快(反之亦然)。它们出现在时间序列变化率最大的地方。变点先验尺度表示在模型中给予变点的偏移量。这是用来控制过度拟合与欠拟合的(也被称为偏差与方差间的权衡)。
一个更高的先验能创造一个更多变点权重和更具弹性的模型,但这可能会导致过拟合,因为该模型将严格遵守训练数据的规律,而不能将它泛化到新的测试数据中。降低先验会减少模型的灵活性,而这又可能会导致相反的问题:欠拟合,当我们的模型没有完全遵循训练数据,而没有学习到底层模式时,这种情况就会发生。如何找出适当的参数以达到正确的平衡,这更多的是一个工程问题而不是理论问题,在这里,我们只能依靠经验结果。Stocker类有两种不同的方式来选择适当的先验:可视化和量化。 我们可以从可视化方法开始:
在这里,我们使用三年的数据进行训练,然后显示了六个月的预测结果。我们没有量化这里的预测结果,因为我们只是试图去理解变点先验值的作用。这个图表很好地说明了过拟合与欠拟合!代表最小先验的蓝线与代表训练数据的黑线值并不是非常接近,就好像它有自己的一套模式,并在数据的附近随便选了一条路线。相比之下,代表最大先验的黄线,则与训练观察结果非常贴近。变点先验的默认值是0.5,它落在两个极值之间的某处。
我们还要注意先验值不同带来的不确定性(阴影区间)方面的差异。最小的先验值在训练数据上表现有最大的不确定性,但在测试数据上的不确定性却是最小。相比之下,最大的先验值在训练数据上具有最小的不确定性,但在测试数据上却有最大的不确定性。先验值越高,对训练数据的拟合就越好,因为它紧跟每次的观察值。但是,当使用测试数据时,过拟合模型就会因为没有任何数据点来定位而迷失掉。由于股票具有相当多的变化性,我们可能需要比默认模型更灵活的模型,这样才能够捕捉尽可能多的模式信息。
现在我们对先验值带来的影响有了一个概念,我们可以使用训练集和验证集对数值进行评估:
在这里,我们必须注意到,我们的验证集和测试集是不一样的数据。如果它们是一样的,那么我们会得到在测试数据上效果最好的模型,但是它只是在测试数据上过拟合了,而我们的模型也不能用于现实世界的数据。总的来说,就像在数据科学中通常所做的那样,我们正在使用三组不同的数据:训练集()、验证集(2016)和测试集(2017)。
我们用四个指标来评估四个先验值:训练误差、训练范围(置信区间)、测试误差和测试范围(置信区间),所有的值都以美元为单位。正如我们在图中看到的那样,先验值越高,训练误差越低,训练数据的不确定性越低。我们也可以看到,更高的先验能降低我们的测试错误。为了在测试集上获得更高的准确率,作为交换,随着先验的增长,我们在测试数据上得到了更大范围的不确定性。
Stocker先验验证还可以通过两条线来阐述这些点:
基于不同变点先验尺度下,训练和测试准确性曲线和不确定性曲线
既然最高的先验值产生了最低的测试误差率,我们应该尝试再增加先验值来看看是否能得到更好的结果。我们可以通过在验证中加入其它值的方法来优化我们的搜索:
改进后的训练和测试曲线
当先验值为0.5时,测试集的错误率将最小化。因此我们将重新设置Stocker对象的变点先验值。
我们可以调整模型的其他参数,比如我们期望看到的模式,或者模型使用的训练数据。找到最佳组合只需要重复上述过程,并使用一些不同的值。请随意尝试任意的参数!
▌评估改进的模型
现在我们的模型已经优化好了,我们可以再次评估它:
现在看起来好多了! 这显示了模型优化的重要性。使用默认值可以提供第一次合理猜测,但是我们需要确定,我们正在使用正确的模型“设置”,就像我们试图通过调整平衡和淡入淡出来优化立体声的声音那样(很抱歉引用了一个过时的例子)。
▌玩转股票市场
股票预测是一个有趣的实践,但真正的乐趣在于观察这些预测结果在实际市场中会发挥多好的作用。使用evaluate_prediction函数,我们可以在评估期间使用我们的模型“玩一玩”股票市场。我们将使用模型预测给出的策略,与我们在整个期间简单地购买和持有股票的策略进行一个对比。
我们的策略规则很简单,如下:
1、当模型预测股价会上涨的那一天,我们开始买入,并在一天结束时卖出。当模型预测股价下跌时,我们就不买入任何股票;
2、如果我们购买股票的价格在当天上涨,那么我们就把股票上涨的幅度乘以我们购买的股票的数量;
3、如果我们购买的股票价格下跌,我们就把下跌的幅度乘以股票的数量,计作我们的损失。
在整个评估期间,也就是2017年,我们每天以这样的方式进行股票操作。将股票的数量添加进模型回馈里面,Stocker就会以数字和图表显示的方式告诉我们这个策略是如何进行的:
上图告诉了我们一个非常宝贵的策略:买入并持有!虽然我们可以在策略上再作出相当大的调整,但更好的选择是长期投资。
我们可以尝试其他的测试时间段,看看有没有什么时候我们的模型给出的策略能胜过买入和持有的方法。我们的策略是比较保守的,因为当我们预测市场下跌的时候我们不进行操作,所以当股票下跌的时候,我们期待有比持有策略更好的方法。
一直用虚拟货币实验
我就知道我们的模型可以做到这一点!不过,我们的模型只有在已经有了当天的数据时才能战胜市场,也就是说还只是事后诸葛亮。
▌对股票未来价格的预测
现在我们有了一个像样的模型,然后就可以使用predict_future()函数来对股票未来价格的进行预测。
预测接下来10天和100天的股票价格趋势
这个模型和大多数“专业人士”一样,总体上看好Amazon这支股票。另外,我们按照预期做出的估计,不确定性会进一步增加。实际上,如果我们使用这个模型策略进行交易,那我们每天都可以训练一个新的模型,并且提前预测最多一天的价格。
虽然我们可能没有从Stocker工具中获得丰厚的收益,但是重点在于开发过程而不是最终结果! 在我们尝试之前,我们实际上不知道自己是否能解决这样一个问题,就算最终失败,也好过从不尝试!任何有兴趣检查代码或使用Stocker工具的人,都可以在GitHub上找到代码。(https://github.com/WillKoehrsen/Data-Analysis/tree/master/stocker)
作者 | William Koehrsen
原文 | https://towardsdatascience.com/stock-prediction-in-python-b
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点如何利用Python技术评估苹果公司股价
要点抢先看
1.csv数据的读取
2.利用常用函数获取均值、中位数、方差、标准差等统计量
3.利用常用函数分析价格的加权均值、收益率、年化波动率等常用指标 4.处理数据中的日期
我们最后会介绍一下NumPy库中的一些非常实用和常用的函数方法。
要知道,NumPy的常用数学和统计分析的函数非常多,如果我们一个一个的分散来讲,一来非常枯燥,二来呢也记不住,就仿佛又回到了昏昏欲睡的课堂,今天我们用一个背景例子来串联一下这些零散的知识点。
我们通过分析苹果公司的股票价格,来串讲NumPy的常用函数用法
我们在我们文件的同级目录下放置数据文件AAPL.csv,用excel文件可以打开看看里面是什么样的:
依次是日期,收盘价、成交量、开盘价、最高价和最低价 在CSV文件中,每一列数据数据是被&,&隔开的,为了突出重点简化程序,我们把第一行去掉,就像下面这样
首先,我们读取&收盘价&和&成交量&这两列,即第1列和第2列(csv也是从第0列开始的)
import numpy as np &
c, v = np.loadtxt('AAPL.csv', delimir=',', usecols=(1,2), unpack=True)
[178.02178.65178.44179.97181.72179.98176.94175.03176.67 & 176.82176.21175. & &178.12178.39178.97175.5 & 172.5 & 171.07 & 171.85172.43172.99167.37164.34162.71156.41155.15159.54 & 163.03156.49160.5 & 167.78167.43166.97167.96171.51171.11 & 174.22177.04177. & &178.46179.26179.1 & 176.19177.09175.28 & 174.29174.33174.35175. & &173.03172.23172.26169.23171.08 & 170.6 & 170.57175.01175.01174.35174.54176.42]
[...... & ...... & ...... & ...... & ...... & ...... & ...... & ...... & ...... & ...... & .]
这样,我们就完成了第一个任务,将csv数据文件中存储的数据,读取到我们两个ndarray数组c和v中了。
接下来,我们小试牛刀,对收盘价进行最简单的数据处理,求取他的平均值。
第一种,非常简单,就是我们最常见到的算数平均值
import numpy as np &
c, v = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,2), unpack=True)
mean_c = np.mean(c)print(mean_c)
第二种,是加权平均值,我们用成交量来加权平均价格
即,用成交量的值来作为权重,某个价格的成交量越高,该价格所占的权重就越大。
import numpy as np &
c, v = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,2), unpack=True)
vwap = np.average(c, weights=v)
print(vwap)
再来说说取值范围,找找最大值和最小值
我们找找收盘价的最大值和最小值,以及最大值和最小值之间的差异
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
print(np.max(c))
print(np.min(c))
print(np.ptp(c))
接下来我们进行简单的统计分析
我们先来求取收盘价的中位数
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
print(np.max(c))
print(np.min(c))
print(np.median(c))
另外一个我们关心的统计量就是方差,方差能够体现变量变化的程度。在我们的例子中,方差还可以告诉我们投资风险的大小。那些股价变动过于剧烈的股票一定会给持有者带来麻烦
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
print(np.var(c))
我们回顾一下方差的定义,方差指的是各个数据与所有数据算数平均数的离差平方和的均值
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
print(np.mean((c - c.mean())**2))
上下对比一下,看看,结果是一模一样的。
现在我们来看看每天的收益率,这个计算式子很简单:
diff函数时用数组的第N项减第N-1项,得到一个n-1项的一维数组。本例中我们注意到数组中日期越近的收盘价,数组索引越小,因此得取一个相反数,综上代码:
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
returns =-np.diff(c)/c[1:]
print(returns)
[-0.0.-0.-0.0096302 & 0.0. & 0.-0.-0.0.0.-0.-0.-0.0.0.0173913 & 0.-0.-0.-0.0.0335783 & 0.0.0. & 0.-0.-0.0214071 & 0.-0.-0. & 0.0.-0.-0.0206985 & 0.-0.-0.0159286 & 0.-0.-0.0.0.-0.0.0.-0.-0.-0. & 0.0.-0.0.-0.0.0028136 & 0.-0.-0. & & & & &0.-0.-0.]
然后观察一下每日收益的标准差,就可以看看收益的波动大不大了:
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
returns =-np.diff(c)/c[1:]
print(np.std(returns))
如果我们想看看哪些天的收益率是正的,很简单,还记得where语句吗,拿来使用吧
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
returns =-np.diff(c)/c[1:]
print(np.where(returns&0))
(array([1,4,5,6,9,10,14,15,16,20,21,22,23,24,27,30,31,34,37,40,41,43,44,48,49,51,53,54,57], dtype=int64),)
专业上我们对价格变动可以用一个叫做&波动率&的指标进行度量。计算历史波动率时需要用到对数收益率,对数收益率很简单,就是
我们简单的看一下下面的代码
import numpy as np &
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)
logreturns =-np.diff(np.log(c))
volality = np.std(logreturns)/ np.mean(logreturns)
annual_volatility = volatility / np.sqrt(1./252.)
print(volatility)
print(annual_volatility)
这里我们再强调一点就是:sqrt方法中应用了除法计算,这里必须使用浮点数进行运算。月度波动率也是同理用1./12.即可
我们可以常常会发现,在数据分析的过程中,对于日期的处理和分析也是一个很重要的内容。
我们先试图用老办法来从csv文件中把日期数据读出来
import numpy as np &
dates,c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(0,1), unpack=True)
Traceback(most recent call last):
File&E:/12homework/12homework.py&, line 2,in
& &dates,c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(0,1), unpack=True)
File&C:\Python34\lib\site-packages\numpy\lib\npyio.py&, line 930,in loadtxt
& &items =[conv(val)for(conv, val)in zip(converte, vals)]
File&C:\Python34\lib\site-packages\numpy\lib\npyio.py&, line 930,in
& &items =[conv(val)for(conv, val)in zip(converters, vals)]
File&C:\Python34\lib\site-packages\numpy\lib\npyio.py&, line 659,in floatconv
& &returnfloat(x)
ValueError: could not convert string to float: b''
我们发现他报错了,错误信息是不能将一个字节类型的对象转换为浮点类型对象。原因是因为NumPy是面向浮点数运算的,那么我们对症下药,对日期字符串进行一些转换处理。
我们先假定日期是一个字符串类型(下载的网络数据中往往是将字符串通过utf-8编码成字节码,这个可以见第一季中字符编码相关内容的介绍)
import numpy as np import datetime &
strdate =''
d = datetime.datetime.strptime(strdate,'%Y/%m/%d')
print(type(d))
&class'datetime.datetime'&
2017-03-1600:00:00
通过python标准库中的datetime函数包,我们通过指定匹配的格式%Y/%m/%d
将日期字符串转换为了datetime类型对象,Y大写匹配完整的四位数记年,y小写就是两位数,例如17。
datetime对象有一个date方法,把datetime对象中的time部分去掉,变成一个纯的日期,再调用weekday可以转换为一周中的第几天,这里是从周日开始算起的。
import numpy as np import datetime
strdate =''
d = datetime.datetime.strptime(strdate,'%Y/%m/%d')
print(d.date())
print(d.date().weekday())
2018-03-164
最后,我们回到这份苹果公司股价的csv文件,来做一个综合分析,来看看周几的平均收盘价最高,周几的最低:
import numpy as np import datetime &
def datestr2num(bytedate):
& &return datetime.datetime.strptime(
& & & & & & & & &bytedate.decode('utf-8'),'%Y/%m/%d').date().weekday()
dates,c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(0,1),
& & & & & & & & & converters={0: datestr2num}, unpack=True)
averages = np.zeros(5)
for i in range(5): & &
& &index = np.where(dates == i) & &
& &prices = np.take(c, index) & &
& &avg = np.mean(prices) & &
& &averages[i]= avg &print(&Day {} prices: {},avg={}&.format(i,prices,avg))
top = np.max(averages)
top_index = np.argmax(averages)
bot = np.min(averages)
bot_index = np.argmin(averages)
print('highest:{}, top day is {}'.format(top,top_index))
print('lowest:{},bottom day is {}'.format(bot,bot_index))
Day0 prices:[[181.72176.82178.97162.71156.49167.96177. & &174.35176.42]],avg=172.34
Day1 prices:[[179.97176.67178.39171.85164.34163.03166.97177.04176.19 & &174.33172.26170.57174.54]],avg=172.24
Day2 prices:[[178.44175.03178.12171.07167.37159.54167.43174.22179.1 & &174.29172.23170.6 & 174.35]],avg=172.63
Day3 prices:[[178.65176.94175. & &172.5 & 172.99155.15167.78171.11179.26 & &175.28173.03171.08175.01]],avg=172.52
Day4 prices:[[178.02179.98176.21175.5 & 172.43156.41160.5 & 171.51178.46 & &177.09175. & &169.23175.01]],avg=172.73
highest:172.24, top day is1
lowest:172.63,bottom day is2
简要的再分析一下:由于从csv中读取的数据类型为bytes,所以我们写了一个转换函数,先将bytes类型的日期数据进行解码(字符串编解码详见第一季),然后再用上一段程序介绍的方法转换为一个表示周几的数字
而np.loadtxt函数中的参数converters={0: datestr2num},就是说针对第一列的数据,我们利用这个转换函数将其转化为一个数字,并将这个整形元素构成的数组赋值给dates变量。
后面的处理就很简单了,用循环依次取出每个工作日的收盘价构成的数组,对其求平均值。然后得到周一到周五,五个平均值的最大值、最小值。
最后我们再介绍两个实用函数,一个是数组的裁剪函数,即把比给定值还小的值设置为给定值,比给定值大的值设置为给定上限
import numpy as np &
a = np.arange(5)
print(a.clip(1,3))
第二个是一个筛选函数,返回一个根据给定条件筛选后得到的结果数组
import numpy as np &
a = np.arange(5)
print(a.compress(a &2))
这一小节中,我们利用NumPy的一些实用函数,对苹果公司的股价进行了一些非常非常简单的分析,目的是通过这个实例来串讲一下这些实用的数据处理函数。
其实NumPy的功能非常非常多,远不止这些,但是没有必要去一个一个学。并且另一方面,NumPy的方法都过于原始和底层,虽然功能很丰富,但是使用起来也很繁杂。这里我们为大家打一个基础,后面的章节就不会再一一介绍里面的各种函数了。后面我要介绍基于NumPy之上的一些更高层的方法库,功能更强大,使用也更简单。
原文标题:用Python分析苹果公司股价数据
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先
无论是好是坏,苹果公司都有着保持封闭式产品生态系统的声誉。自从乔布斯和沃兹成立公司以来,就一直是这样....
综述,机器学习的自学简单来说分为三个步骤
前期:知识储备包括数学知识,机器学习经典算法知识,编程技....
苹果预计将在今年发布三款iPhone手机,全新的iPhone的屏幕尺寸分别是5.8英寸、6.1英寸和....
据市场调研公司IDC于7月31日发布的报告显示,今年第二季度全球智能手机出货总量达到3.42亿部,较....
7月31日,Synaptics发布新闻稿,宣布已终止与Dialog半导体之间的并购谈判。同一时间,D....
8月1日,市场研究机构IDC最新发布的报告显示,今年二季度,苹果公司八年来首次跌落全球两大智能手机制....
随着苹果HomePod进入,尽管占有6%的份额,但仅今年正是开售,凭借在全球拥有十几亿的果粉,销量有....
顺络电子表示,2018年上半年,公司实施"产品开发、市场开拓双驱动机制"发展战略,将市场需求同公司技....
6.1寸和6.5寸新 iPhone 视频上手
知名泄密大神 @OnLeaks 分享了一段 6....
作为全世界最赚钱的公司之二,苹果与三星常常被用于比较。在三星电子公布2018年第二季度报后,苹果也公....
8月3日,华为2018年上半年消费者业务业绩沟通会上,余承东今天公布的数据显示,上半年华为累计出货智....
无论是好是坏,苹果公司都有着保持封闭式产品生态系统的声誉。自从乔布斯和沃兹成立公司以来,就一直是这样....
同此前的多个财季一样,美洲地区依然是苹果营收最高的地区,该季其在这一地区营收245.42亿美元,去年....
苹果发布 iPhone X,并基于3D 结构光技术推出了名为“Face ID”的新功能用于日常解锁和....
当SIM进化到eSIM、iSIM的时候,显然不再仅凭借“勤劳的双手”咔嚓一剪就能满足技术演进的需求,....
据The Verge北京时间8月3日报道,全球平板电脑市场一直在滑坡,事实上,它已经连续15个季度呈....
来自韩国ET News的一份新报告显示,LG正在与“全球OEM”合作,为其传统合作伙伴生产可折叠面板....
巴西网站(iHelpBR)在IOS模拟器中发现,iOS 已经支持在
像素的分辨率....
8月3日消息 北京时间8月3日凌晨,美股周四收盘,苹果公司市值终于突破$0 美元大关,正式成为首家市值破万亿美元的科...
北京时间8月3日消息,苹果在今天成为历史上首个市值超过1万亿美元的公司。在北京时间8月3日晚间,苹果....
当我们对一个系统进行渗透时,如果你忽略了防火墙的存在,那么就会为我们的测试带来诸多的麻烦。因此在开始....
总的来看,排名前五的厂商合力拿下了全球66.8%的市场份额,而且除了三星的市场份额出现下滑之外,其他....
8月1日消息,据国外媒体报道,高通要求英特尔提供其被苹果2018年版iPhone使用芯片的技术文档和....
苹果今晨公布的第三财季财报超预期,实现533亿美元的营收,并很有望在未来几个月成为万亿美元市值俱乐部....
今天手机圈最大的新闻无疑是第二大智能手机厂商的易主——华为手机出货量在今年第二季度超越苹果,并且将市....
8月2日,苹果公布的截止到日第三财季财报超预期,实现533亿美元的营收,苹果公司第....
IEEE Spectrum发布了最新的第五届年度编程语言交互排行榜!Python不但雄踞第一,在综合....
据外媒报道,市场调研公司IDC周二发布报告称,今年第二季度全球智能手机出货总量达到3.42亿部,较去年同期的3.482亿部下...
广达说,不评论客户与单一产品。代工大厂私下表示,供应链必须先确认Apple Watch的料号,与美国....
本书没有从理论角度来揭示机器学习算法背后的数学原理,而是通过“原理简述+问题实例+ 实际代码+运行效....
值得一提的是,iPhone越来越稳定的情况下,苹果的服务部门也在逐渐走强,其包括来自互联网服务、应用....
从设备功能的角度来看,苹果一直坚持将iPad这样的触屏设备与Mac电脑分开的立场。换句话说,这意味着....
由此可见,苹果终于意识到了双卡双待功能的必要性,并专门为中国市场做出了调整。目前在国内,Apple ....
本书是计算机视觉编程的权威实践指南,依赖Python 语言讲解了基础理论与算法,并通过大量示例细致分....
越来越多的手机在模仿苹果手机,为有别于其它手机,苹果8和X系列推出了无线充功能,很多果粉们开启全新充....
苹果要进军VR/AR领域已经不是什么秘密了,但是关于苹果一直以来在这方面的进展如何我们却知道的不多。....
今年第二季度,华为超越了苹果公司,成为全球第二大智能机制造商。按市场份额计算,这是苹果自2010年以....
虽然我们的图像目前是RBG格式,但是我们应该探索在不同的颜色空间,如HSL或HSV中进行可视化,看看....
万万没想到,在工程师的手中,我们可以用机器学习搭建自己的音以决策树为例,这是一种常见的机器学习算法,....
8月1日消息,苹果(NASDAQ:AAPL)今天公布了截至6月30日的2018财年第三财季财报。报告....
虽然苹果目前尚未确认推出AR可穿戴设备的计划,但这一系列迹象都表明了这是必然的事情。除了来自分析师的....
苹果公司日前诞生了一项新专利,那就是成功研发出“电子设备之间的感应充电”,该功能被应用在MacBoo....
据FT中文网报道,苹果增长最快的部门可能被卷入美国总统唐纳德·特朗普(Donald Trump)最近....
7月31日,按照惯例,每逢每年9月份,苹果都会更新换代,而在此前的两个月内,也是国产手机集结推陈出新....
有爆料人在推特上传了苹果近月即将发布的手机模型,并指出6.5寸新iphone将维持双镜头,但6.1寸....
对于销量,国产四巨头一直很高调。华为、小米和OV掌握了国内手机市场相当一部分份额。
每年的秋季,苹果将会召开发布会,发布年度新机。 上半年国产手机的消息引爆各大媒体,消息不断,相对来说....
根据曝光基本可以确定,苹果今年将发布三款iPhone,包括两款OLED屏幕版本和一款LCD屏幕版本。....
根据此前爆料,苹果预计将在今年发布三款iPhone手机,分别是包括5.8英寸、6.5英寸的OLED屏....
苹果公司本周公布上季财报,分析师警告,苹果成长最快的Apple Watch、AirPods耳机及Ho....
苹果和谷歌都在研究采用智能织物技术的未来产品及服装。IDC预测到2021年它将成为继Apple Wa....
苹果将在下一代iPhone上放弃使用高通调制解调器(MODEM)。放弃长期以来处于诉讼关系的高通,取....
用Python完成项目,编写的代码量更少,代码简短可读性强,团队协作开发时读别人的代码速度会非常快,使工作变得更加高效。优雅做...
1、搭建环境
下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。
下载gcc-arm-none-eabi,...
谈到在web应用领域,除了Python的语法,Django是Python后台一个最重要的框架,那么,什么是软件框架呢?举个简单的例子,对于...
我已经尝试过,用OPENMV直接发送一给串口助手,串口助手可以接受到,用STM32自己的TX给RX写信息,改变某一引脚的电...
& && &函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常...
近几年各种深度学习框架涌现,大家可能很难从众多的深度学习框架中选择一个合适的框架进行学习。对于深度学习的初学者,或者觉得...
昨天,Python 之父 Guido van Rossum 在 Python 邮件组里发邮称,他将退出 Python 核心决策层,而转居幕后。
Python 被抛...
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QFont,QIcon#QtWi...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-

我要回帖

更多关于 科沃斯股票价格预测 的文章

 

随机推荐