2017-02-02 5 views
0

Прежде всего, это не домашнее задание, это для самостоятельного обучения, я аспирант. Я новичок в Python и matplotlib, и я пытаюсь дать себе крутой курс, потому что мне понадобится matplotlib, чтобы заговорить некоторые из моих собственных работ довольно скоро. В настоящее время я пытаюсь немного узнать о них, следуя инструкциям Youtube, и я, похоже, застрял. Мне нужно выяснить, почему этот код не будет работать для меня, потому что мне нужно, чтобы он продолжался в остальных учебниках.Python 3.5.2 загрузка данных из интернета

Этот код был скопирован непосредственно из учебника, за которым я слежу, но он не работает для меня, но работает для создателя видео. Я повторно проверил синтаксис бесчисленное количество раз против того, что было в видео, а также попробовал некоторые из решений, которые работали для людей, имеющих аналогичные проблемы в разделе комментариев.

Кажется, что различия исходят от версий python от людей. В настоящее время Mine Python 3.5.2. Код должен вытащить данные о запасах из Интернета, преобразовать время в дружественный 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' 

Примеры попыток исправить проблему:

изменения импорта 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 

PS весь смысл учебника является тянуть данные о запасах из Интернета и построить его, а затем дополнительные учебники для настройки графика он производит (Который что я хочу узнать). Преобразование даты больше в стороне, и преподаватель говорит, что, если вы не понимаете, что происходит с конверсией, это хорошо на данный момент - но проблема в том, что не понимание того, что происходит с конверсией, m не в состоянии это исправить!
Так что любая помощь была бы действительно оценена. Спасибо большое!

+0

* «код не будет работать» *, * «он не для меня» * Так что же происходит? Вы получили сообщение об ошибке? Если это так, пожалуйста, покажите сообщение об ошибке * complete *. Вызывает ли он неожиданный результат? Если да, покажите или объясните результат и объясните, что вы ожидали. –

+0

Вы говорите, что вы изменили 'import urllib' на' import urllib.request', но также и что вы изменили 'urllib.request.urlopen' на' urllib.urlopen' в коде. Это ошибка при копировании? Кроме того, если код не работает, * какая ошибка * вы получаете или что происходит вместо ожидаемого результата? – Adalee

+0

Как я уже сказал, я новичок в Python, и по какой-то причине я не вижу ошибки. Когда я дважды нажимаю на мой скрипт, чтобы запустить его, приглашение открывается на мгновение, а затем слишком быстро закрывается, чтобы я мог прочитать какую-либо ошибку. Так что да, «мне это не удается». Если бы я смог увидеть ошибку, я бы разместил ее. Это не дает никакого результата. Я делаю вывод данных из файлов до сих пор без проблем. Результатом должен быть график с датами по оси x и ценой закрытия акций по оси y. Экран подсказки/ошибки открывается в течение секунды секунды, недостаточно долго, чтобы прочитать ошибку и снова закрывается. – beeeepmeeeep

ответ

0

Это работает в записной книжке.

1 - заменить оператор импорта с

import six.moves.urllib as url 

2 - использовать псевдоним для вызова urlopen методу

source_code = url.request.urlopen(stock_price_url).read().decode() 

3 - удалить все пробелы в начале последней строки

graph_data('TSLA') 

Как написано, вызов метода находится внутри самого метода, поэтому никогда не следует л.

Кроме того, Url искажен и генерирует HTTP 404 Content, не найденную ошибку. В HTTP параметры запроса разделяются с использованием «&», а не «;».

Просто меняя все; с & не исправляет проблему, так что в вызове API также есть ошибка. Это похоже на старый учебник, yahoo Api уже не такой.

Посмотрите здесь, это усложнится, но это именно то, что ваш ищете:

https://www.udacity.com/course/machine-learning-for-trading--ud501

+0

Спасибо, я посмотрю на это! – beeeepmeeeep

+0

Ну, дата, когда видео было опубликовано, было июль 2015 года, поэтому, похоже, она не так уж и старая. Весьма раздражающе, хотя остальные учебники для настройки графиков основаны на этом сценарии с этим набором данных. – beeeepmeeeep

+0

Я действительно получил его работу с вашим предложением об изменении urllib, спасибо вам большое! Для полноты я хотел бы добавить, что мне также пришлось удалить «*» в строке url: stock_price_url = 'http://chartapi.finance.yahoo.com/*instrument/1.0/'+stock+'/chartdata; type = quote; range = 10y/csv ', который я добавил из-за того, что кто-то предположил, что их антивирус может вызвать ошибку (я в значительной степени пытался предложить какое-либо предложение!), однако даже с удалением кода код не работал до Я исправил импорт urllib. – beeeepmeeeep

Смежные вопросы