2017-02-02 7 views
0

これは宿題ではなく、自己学習のためで、私は大学院生です。 私はPythonとmatplotlibの新人です。私は自分の仕事の一部をすぐにプロットするためにmatplotlibが必要になるので、自分自身にクラッシュコースを提供しようとしています。私は現在、いくつかのYoutubeのチュートリアルに従って両方について少し学びたいと思っています。このコードが私のために動かない理由を理解する必要があります。なぜなら、残りのチュートリアルではこのコードを実行する必要があるからです。Python 3.5.2インターネットからデータをロード

このコードはチュートリアルから直接コピーされていますが、私は失敗しますが、ビデオ作成者の方にはうってつけです。私は、ビデオのものと無関係に構文を何度も再確認し、同様の問題を抱える人々のために働くいくつかのソリューションをコメントセクションで試しました。

違いは、Pythonの人々のバージョンから来たようです。 Mineは現在Python 3.5.2です。 コードは、Webからストックデータを取り出し、時間をPythonに適した形式に変換してグラフ化することになっています。 誰かが私のpythonバージョンのためにこれをどうやって得るのか考えていますか?私はプロットについて学ぶために私の本来の目的を継続することができますか?

変更インポートurllibはこの小さな変更は明らかに他の人のために働いている

import urllib.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() 

    AttributeError: module'urllib' has no attribute 'urlopen' 

例:次のエラーが生成さ

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') 

さまざまなバージョンの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チュートリアルの全体のポイントは、どの(インターネットから株価データを引き出し、それをプロットした後、さらにチュートリアルは、それが生成するグラフをカスタマイズするためのものであることです私が何を学びたいか)。チュートリアルでは、現在の変換で何が起こっているのか分からない場合、その変換で起こっていることを理解していないということは、それを修正することができません!
だから、どんな助けでも本当に感謝しています。 ありがとう!

+0

* *、*「それは私のために失敗した」「コードが実行されません」 *どうしてですか?間違いはありますか?その場合は、* complete *エラーメッセージを表示してください。予期しない結果が生じるか?そうであれば、結果を表示または説明し、あなたが期待したことを説明してください。 –

+0

'import urllib'を' import urllib.request'に変更しただけでなく、 'urllib.request.urlopen'を' urllib.urlopen'に変更したと言っています。それはコピー貼り付けの間違いですか?また、コードが失敗した場合、*あなたは何のエラー*を受け取りますか、または予期される結果の代わりに何が起こりますか? – Adalee

+0

私が言ったように、私はPythonには新しく、なんらかの理由でもエラーを見ることはできません。スクリプトをダブルクリックして実行すると、すぐにプロンプ​​トが開き、その後すぐに閉じてエラーを読むことができます。だからはい "それは私のために失敗する"。私がエラーを見ることができたなら、私はそれを投稿したでしょう。結果はまったく生成されません。私は今まで問題なくファイルからデータをプロットしてきました。結果は、x軸の日付とy軸の終了株価のグラフでなければなりません。プロンプト/エラー画面は、エラーを読み取るのに十分な長さではなく、1秒間隔で開き、再び閉じます。 – beeeepmeeeep

答えて

0

これはノートブックで動作します。

1 -

import six.moves.urllib as url 

2でimport文を交換 - 方法

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

3をurlopen呼び出すためにエイリアスを使用する - 最後の行

の初めにすべての白のスペースを削除
graph_data('TSLA') 

書かれているとおり、メソッド呼び出しはメソッド自体の中にあり、したがって決してcal l。

また、URLが不正で、HTTP 404コンテンツが見つかりませんというエラーが生成されます。 HTTPでは、リクエストパラメータは ";"ではなく "&"を使用して区切られます。

ただすべてを変更します。 &を使用しても問題は解決しないため、API呼び出しにもエラーがあります。これは古いチュートリアルのように見えますが、YahooのApiはもうこれほど似ていません。

こっち見てください、それは関与少しだが、これはあなたが探しているまさにです:

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

+0

ありがとう、私はそれを見ています! – beeeepmeeeep

+0

動画が投稿された日付は2015年7月だったので、それほど古いとは思われません。グラフをカスタマイズするためのチュートリアルの残りの部分は、このデータセットを使用したこの1つのスクリプトに基づいています。 – beeeepmeeeep

+0

私は実際にurllibの変更に関するあなたの提案に取り組んでいます、ありがとう!完全性のために、私はURL行の '*'も削除しなければならないと付け加えたいと思っています:stock_price_url = 'http://chartapi.finance.yahoo.com/*instrument/1.0/'+stock+'/chartdata;私が追加した「type = quote; range = 10y/csv」は、アンチウィルスがエラーを引き起こしている可能性があるという理由で追加されたものです(私はかなりの提案をしていました!私はurllibのインポートを修正しました。 – beeeepmeeeep

関連する問題