2016-10-23 3 views
0

Я после этого учебника: https://www.youtube.com/watch?v=wfTABU8VeoY&list=PLQVvvaa0QuDfHt4XU7vTm22xDegR0v0fQ&index=7 для анализа данных с пандами, но когда я хочу запустить следующий кодпереполнения в Python с пандами

import datetime 
import pandas as pd 
from pandas import DataFrame 
import pandas.io.data 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

sp500 = pd.io.data.get_data_yahoo('%5EGSPC', start = datetime.datetime(2015, 10, 15), 
            end = datetime.datetime(2016, 10, 15)) 
sp500.to_csv('sp500.csv') 

df = pd.read_csv('sp500.csv', index_col = 'Date', parse_dates=True) 

df['H-L'] = df['High'] - df.Low 
df['100MA'] = pd.rolling_mean(df['Close'], 100) 
df['Difference'] = df['Close'].diff() 

threedee = plt.figure().gca(projection='3d') 
threedee.scatter(df.index, df['H-L'], df['Close']) 
threedee.set_xlabel('Index') 
threedee.set_zlabel('Close') 
threedee.set_ylabel('H-L') 

plt.show() 

Она производит как в Jupyter ноутбуке и PyCharm ошибки следующим образом:

OverflowError        Traceback (most recent call last)  
C:\Program Files\Anaconda2\lib\site-packages\IPython\core\formatters.py in __call__(self, obj) 
     305     pass 
     306    else: 
    --> 307     return printer(obj) 
     308    # Finally look for special method names 
     309    method = get_real_method(obj, self.print_method) 

C:\Program Files\Anaconda2\lib\site-packages\IPython\core\pylabtools.py in <lambda>(fig) 
    225 
    226  if 'png' in formats: 
--> 227   png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs)) 
    228  if 'retina' in formats or 'png2x' in formats: 
    229   png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs)) 

C:\Program Files\Anaconda2\lib\site-packages\IPython\core\pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs) 
    117 
    118  bytes_io = BytesIO() 
--> 119  fig.canvas.print_figure(bytes_io, **kw) 
    120  data = bytes_io.getvalue() 
    121  if fmt == 'svg': 

со многими другими различными путями, включая matplotlib.py и as on. Что случилось? Это не слишком много данных для загрузки, не так ли?

+1

Просьба показать полную трассировку и указать, какая строка в вашем скрипте вызывает «OverflowError». Было бы также полезно узнать, какую версию Pandas вы используете: 'pandas.io.data' не поддерживается в текущей версии. –

+0

Я приложил больше к Traceback к вопросу. Я использую ту же версию панд, что и в учебнике от Anaconda 2.7, чтобы работать более плавно. –

ответ

1

Вы пробовали заменить эту строку

threedee.scatter(df.index, df['H-L'], df['Close']) 

со следующим?

threedee.scatter(range(len(df.index)), df['H-L'], df['Close']) 

Вы рисуете временные метки как значения. Возможно, что matplotlib не понимает, какие числовые значения сохраняются.

Редактировать: к сожалению, этот обходной путь этого обходного пути превращает гакситы xaxis в числовой диапазон. Но мы всегда можем установить галочки вручную:

threedee.scatter(df.index, df['H-L'], df['Close']) 

renderer = fig.canvas.get_renderer() 
threedee.draw(renderer) 
old_xticks = [t.get_text() for t in threedee.xaxis.get_ticklabels()] 
new_xticks = [df.index[int(t)].strftime("%Y-%m-%d") 
       if t is not '' else '' for t in old_xticks] 
threedee.xaxis.set_ticklabels(new_xticks) 

threedee.set_xlabel('Index') 
threedee.set_zlabel('Close') 
threedee.set_ylabel('H-L') 

plt.show() 
+0

Я заменил линию, которую вы мне дали, и это работает! Но почему? –

+0

В следующий раз я буду читать документацию по версии. Большое спасибо! –

+0

@ StanislavJirák переполнение было вызвано тем, что каждый элемент этого 'df.index' был' Timestamp'. Если вы посмотрите на его представление значения, вы увидите, что, например, 'df.index [0] .value'' '1444867200000000000'! Вероятно, поэтому «matplotlib» пошевелился. –

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