Python 3.5.2从互联网

时间:2017-02-02 15:33:08

标签: python python-3.x numpy matplotlib

首先这不是作业,而是自学,我是研究生。 我是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本教程的重点是从互联网上提取股票数据并绘制它,然后进一步的教程用于自定义它产生的图形(这是我想要学习的)。日期转换更多的是一个旁边,导师说,如果你不明白转换现在发生了什么 - 但问题是不了解转换的原因是为什么我'我无法解决它!
所以任何帮助都会非常感激。 非常感谢!

1 个答案:

答案 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