首先这不是作业,而是自学,我是研究生。 我是Python和matplotlib的新手,我正试图给自己一个速成课程,因为我很快就需要matplotlib来绘制我自己的一些工作。我正在尝试通过遵循一些Youtube教程来学习两者,我似乎已经陷入困境。我需要弄清楚为什么这段代码不会为我运行,因为我需要它继续学习其他教程。
此代码已直接从我正在关注的教程中复制,但它对我来说失败了,但适用于视频的创建者。我已经对视频中的语法进行了无数次语法重新检查,并尝试了一些解决方案,这些解决方案适用于在评论部分中遇到类似问题的人。
似乎差异来自人们的python版本。我的目前是Python 3.5.2。 该代码应该从Web提取股票数据,将时间转换为python友好格式,然后绘制图形。 有没有人知道如何为我的python版本做这个,所以我可以继续我的原始目标来学习绘图?
import matplotlib.pyplot as plt
import numpy as np
import urllib
import matplotlib.dates as mdates
def bytespdate2num(fmt, encoding='utf-8'):
strconverter = mdates.strpdate2num(fmt)
def bytesconverter(b):
s = b.decode(encoding)
return strconverter(s)
return bytesconverter
def graph_data(stock):
stock_price_url = 'http://chartapi.finance.yahoo.com/*instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'
source_code = urllib.urlopen(stock_price_url).read().decode()
stock_data = []
split_source = source_code.split('\n')
for line in split_source:
split_line = line.split(',')
if len(split_line) == 6:
if 'values' not in line:
stock_data.append(line)
date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data, delimiter =',', unpack=True, converters={0: bytespdate2num('%Y%m%d')})
plt.plot_date(date, closep)
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Load from file\nInteresting graph')
plt.legend()
plt.show()
graph_data('TSLA')
产生以下错误:
Traceback (most recent call last):
File "load_from_internet.py", line 35, in <module>
graph_data('TSLA')
File "load_from_internet.py", line 16, in graph_data
source_code = urllib.request.urlopen(stock_price_url).read().decode()
AttributeError: module'urllib' has no attribute 'urlopen'
尝试解决问题的示例:
将import urllib更改为
import urllib.request
这个小小的变化显然对其他人有不同版本的Python,但不适合我。我在urlib.request中遇到了一个不同的错误:
Traceback (most recent call last):
File "load_from_internet.py", line 35, in <module>
graph_data('TSLA')
File "load_from_internet.py", line 16, in graph_data
source_code = urllib.request.urlopen(stock_price_url).read().decode()
File "C:\Users\myfiles\Anaconda3\lib\urllib\request.py", line 163, in urlopen
File "C:\Users\myfiles\Anaconda3\lib\urllib\request.py", line 472, in open
File "C:\Users\myfiles\Anaconda3\lib\urllib\request.py", line 582, in http_response
File "C:\Users\myfiles\Anaconda3\lib\urllib\request.py", line 444, in _call_chain
File "C:\Users\myfiles\Anaconda3\lib\urllib\request.py", line 590, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
P.S本教程的重点是从互联网上提取股票数据并绘制它,然后进一步的教程用于自定义它产生的图形(这是我想要学习的)。日期转换更多的是一个旁边,导师说,如果你不明白转换现在发生了什么 - 但问题是不了解转换的原因是为什么我'我无法解决它!
所以任何帮助都会非常感激。
非常感谢!
答案 0 :(得分:0)
这适用于笔记本电脑。
1 - 用
替换import语句parallel -j4 -k 'echo {}; sleep 2' ::: {a..g}
2 - 使用别名来调用urlopen方法
import six.moves.urllib as url
3 - 删除最后一行开头的所有空格
source_code = url.request.urlopen(stock_price_url).read().decode()
在编写时,方法调用在方法本身内,因此从不调用。
此外,Url格式错误并生成HTTP 404内容未找到错误。在HTTP中,请求参数使用&#34;&amp;&#34;而不是&#34;;&#34;分隔。
改变一切;与&amp;但是,并没有解决问题,因此API调用中也存在错误。这看起来像一个旧的教程,雅虎Api不再像这样了。
看看这里,它有点牵扯,但这正是你所寻找的:
https://www.udacity.com/course/machine-learning-for-trading--ud501