Help: Plotly graph Error 0

#1

I am trying to use Plotly to plot a scatter plot with linear regression instead of matplotlib
using Python.

I followed this guide:

I ended up with the following code:

import plotly as py
import plotly.graph_objs as go

import numpy as np
from sklearn import linear_model
from plotly import tools

py.offline.init_notebook_mode(connected=True)

Create linear regression object

regr = linear_model.LinearRegression()

Train the model using the training sets

regr.fit(X_train,y_train)

def data_to_plotly(x):
k = []

for i in range(0, len(x)):
    k.append(x[i][0])
    
return k

p1 = go.Scatter(x=data_to_plotly(X_test),
y=y_test,
mode=‘markers’,
marker=dict(color=‘black’)
)

p2 = go.Scatter(x=data_to_plotly(X_test),
y=regr.predict(X_test),
mode=‘lines’,
line=dict(color=‘blue’, width=3)
)

layout = go.Layout(xaxis=dict(ticks=’’, showticklabels=False,
zeroline=False),
yaxis=dict(ticks=’’, showticklabels=False,
zeroline=False),
showlegend=False, hovermode=‘closest’)

fig = go.Figure(data=[p1, p2], layout=layout)

py.offline.iplot(fig)

I get the following error:


KeyError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2656 try:
-> 2657 return self._engine.get_loc(key)
2658 except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 0

During handling of the above exception, another exception occurred:

KeyError Traceback (most recent call last)
in
27 return k
28
—> 29 p1 = go.Scatter(x=data_to_plotly(X_test),
30 y=y_test,
31 mode=‘markers’,

in data_to_plotly(x)
23
24 for i in range(0, len(x)):
—> 25 k.append(x[i][0])
26
27 return k

~\Anaconda3\lib\site-packages\pandas\core\frame.py in getitem(self, key)
2925 if self.columns.nlevels > 1:
2926 return self._getitem_multilevel(key)
-> 2927 indexer = self.columns.get_loc(key)
2928 if is_integer(indexer):
2929 indexer = [indexer]

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2657 return self._engine.get_loc(key)
2658 except KeyError:
-> 2659 return self._engine.get_loc(self._maybe_cast_indexer(key))
2660 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
2661 if indexer.ndim > 1 or indexer.size > 1:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 0

How do i resolve this error?

#2

In my opinion it has nothing to do with plotly but with how you read the data in your function

it looks like you have a probleme here:

How does your input data X_test look like ?

#3

It looks like this now:

image

#4

It looks like your input data is a pandas Dataframe with only one column. Plotly is perfectly capable of handling it directly without using your data_to_plotly(x) function.

like this:

p1 = go.Scatter(x=X_test['Explained by: GDP per capita'], ...

or like this:

p1 = go.Scatter(x=X_test.iloc[:,0], ...