Plreamente icreate_animations offline no Jupyter Notebook
Estou tentando replicareste tutorial traçado em um bloco de notas Jupyter com um conjunto de dados que corresponde ao dado no exemplo, eu apenas tive que alterar o nome de uma coluna. A questão aqui é que estar offline o comando
py.icreate_animations(figure)
que no modo notebook offline se torna
icreate_animations(figure)
não é reconhecido. Além disso, se eu simplesmente tentar o comando iplot (figura), que eu uso para gráficos estáticos, um erro muito longo é gerado:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-27-b81a66612f63> in <module>()
38 figure['layout']['sliders'] = [sliders_dict]
39
---> 40 iplot(figure)
//anaconda/lib/python2.7/site-packages/plotly/offline/offline.pyc in iplot(figure_or_data, show_link, link_text, validate, image, filename, image_width, image_height, config)
330 config.setdefault('linkText', link_text)
331
--> 332 figure = tools.return_figure_from_figure_or_data(figure_or_data, validate)
333
334 # Though it can add quite a bit to the display-bundle size, we include
//anaconda/lib/python2.7/site-packages/plotly/tools.pyc in return_figure_from_figure_or_data(figure_or_data, validate_figure)
1383
1384 try:
-> 1385 graph_objs.Figure(figure)
1386 except exceptions.PlotlyError as err:
1387 raise exceptions.PlotlyError("Invalid 'figure_or_data' argument. "
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs)
1159
1160 def __init__(self, *args, **kwargs):
-> 1161 super(Figure, self).__init__(*args, **kwargs)
1162 if 'data' not in self:
1163 self.data = Data(_parent=self, _parent_key='data')
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs)
375 d = {key: val for key, val in dict(*args, **kwargs).items()}
376 for key, val in d.items():
--> 377 self.__setitem__(key, val, _raise=_raise)
378
379 def __dir__(self):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __setitem__(self, key, value, _raise)
430
431 if self._get_attribute_role(key) == 'object':
--> 432 value = self._value_to_graph_object(key, value, _raise=_raise)
433 if not isinstance(value, (PlotlyDict, PlotlyList)):
434 return
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, key, value, _raise)
541 # this can be `None` when `_raise == False`
542 return GraphObjectFactory.create(key, value, _raise=_raise,
--> 543 _parent=self, _parent_key=key)
544
545 def help(self, attribute=None, return_help=False):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs)
791 class_name = graph_reference.OBJECT_NAME_TO_CLASS_NAME.get(object_name)
792 if class_name in ['Figure', 'Data', 'Frames']:
--> 793 return globals()[class_name](*args, **kwargs)
794 else:
795 kwargs['_name'] = object_name
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs)
156
157 for index, value in enumerate(list(*args)):
--> 158 value = self._value_to_graph_object(index, value, _raise=_raise)
159
160 if isinstance(value, PlotlyBase):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, index, value, _raise)
1291 return value
1292 return super(Frames, self)._value_to_graph_object(index, value,
-> 1293 _raise=_raise)
1294
1295 def to_string(self, level=0, indent=4, eol='\n',
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, index, value, _raise)
221 return GraphObjectFactory.create(item, _raise=_raise,
222 _parent=self,
--> 223 _parent_key=index, **value)
224 except exceptions.PlotlyGraphObjectError:
225 if i == len(items) and _raise:
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs)
797 return PlotlyList(*args, **kwargs)
798 else:
--> 799 return PlotlyDict(*args, **kwargs)
800
801
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs)
375 d = {key: val for key, val in dict(*args, **kwargs).items()}
376 for key, val in d.items():
--> 377 self.__setitem__(key, val, _raise=_raise)
378
379 def __dir__(self):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __setitem__(self, key, value, _raise)
430
431 if self._get_attribute_role(key) == 'object':
--> 432 value = self._value_to_graph_object(key, value, _raise=_raise)
433 if not isinstance(value, (PlotlyDict, PlotlyList)):
434 return
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, key, value, _raise)
541 # this can be `None` when `_raise == False`
542 return GraphObjectFactory.create(key, value, _raise=_raise,
--> 543 _parent=self, _parent_key=key)
544
545 def help(self, attribute=None, return_help=False):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs)
791 class_name = graph_reference.OBJECT_NAME_TO_CLASS_NAME.get(object_name)
792 if class_name in ['Figure', 'Data', 'Frames']:
--> 793 return globals()[class_name](*args, **kwargs)
794 else:
795 kwargs['_name'] = object_name
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs)
156
157 for index, value in enumerate(list(*args)):
--> 158 value = self._value_to_graph_object(index, value, _raise=_raise)
159
160 if isinstance(value, PlotlyBase):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, index, value, _raise)
1059 return GraphObjectFactory.create(item, _raise=_raise,
1060 _parent=self,
-> 1061 _parent_key=index, **value)
1062
1063 def get_data(self, flatten=False):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs)
797 return PlotlyList(*args, **kwargs)
798 else:
--> 799 return PlotlyDict(*args, **kwargs)
800
801
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs)
375 d = {key: val for key, val in dict(*args, **kwargs).items()}
376 for key, val in d.items():
--> 377 self.__setitem__(key, val, _raise=_raise)
378
379 def __dir__(self):
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __setitem__(self, key, value, _raise)
400 if key.endswith('src'):
401 if key in self._get_valid_attributes():
--> 402 value = graph_objs_tools.assign_id_to_src(key, value)
403 return super(PlotlyDict, self).__setitem__(key, value)
404
//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs_tools.pyc in assign_id_to_src(src_name, src_value)
254 if src_id == '':
255 err = exceptions.COLUMN_NOT_YET_UPLOADED_MESSAGE
--> 256 err.format(column_name=src_value.name, reference=src_name)
257 raise exceptions.InputError(err)
258 return src_id
AttributeError: 'str' object has no attribute 'name'
Então, alguém sabe como fazer esse enredo no modo offline?
EDIT: eu envio o código inteiro:
import pandas as pd
import numpy as np
from __future__ import division
import plotly.plotly as py
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
from plotly.graph_objs import *
init_notebook_mode()
from plotly.grid_objs import Grid, Column
from plotly.tools import FigureFactory as FF
dataset=pd.read_csv('gdp_mod_copia.csv')
years_from_col = set(dataset['year'])
years_ints = sorted(list(years_from_col))
years = [str(year) for year in years_ints]
# make list of continents
continents = []
for continent in dataset['continent']:
if continent not in continents:
continents.append(continent)
columns = []
# make grid
for year in years:
for continent in continents:
dataset_by_year = dataset[dataset['year'] == int(year)]
dataset_by_year_and_cont = dataset_by_year[dataset_by_year['continent'] == continent]
for col_name in dataset_by_year_and_cont:
# each column name is unique
column_name = '{year}+{continent}+{header}_grid'.format(
year=year, continent=continent, header=col_name
)
a_column = Column(list(dataset_by_year_and_cont[col_name]), column_name)
columns.append(a_column)
grid = Grid(columns)
figure = {
'data': [],
'layout': {},
'frames': [],
'config': {'scrollzoom': True}
}
# fill in most of layout
figure['layout']['xaxis'] = {'range': [30, 85], 'title': 'Life Expectancy', 'gridcolor': '#FFFFFF'}
figure['layout']['yaxis'] = {'title': 'GDP per Capita', 'type': 'log', 'gridcolor': '#FFFFFF'}
figure['layout']['hovermode'] = 'closest'
figure['layout']['plot_bgcolor'] = 'rgb(223, 232, 243)'
figure['layout']['slider'] = {
'args': [
'slider.value', {
'duration': 400,
'ease': 'cubic-in-out'
}
],
'initialValue': '2007',
'plotlycommand': 'animate',
'values': years,
'visible': True
}
figure['layout']['updatemenus'] = [
{
'buttons': [
{
'args': [None, {'frame': {'duration': 500, 'redraw': False},
'fromcurrent': True, 'transition': {'duration': 300, 'easing': 'quadratic-in-out'}}],
'label': 'Play',
'method': 'animate'
},
{
'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate',
'transition': {'duration': 0}}],
'label': 'Pause',
'method': 'animate'
}
],
'direction': 'left',
'pad': {'r': 10, 't': 87},
'showactive': False,
'type': 'buttons',
'x': 0.1,
'xanchor': 'right',
'y': 0,
'yanchor': 'top'
}
]
sliders_dict = {
'active': 0,
'yanchor': 'top',
'xanchor': 'left',
'currentvalue': {
'font': {'size': 20},
'prefix': 'Year:',
'visible': True,
'xanchor': 'right'
},
'transition': {'duration': 300, 'easing': 'cubic-in-out'},
'pad': {'b': 10, 't': 50},
'len': 0.9,
'x': 0.1,
'y': 0,
'steps': []
}
custom_colors = {
'Asia': 'rgb(171, 99, 250)',
'Europe': 'rgb(230, 99, 250)',
'Africa': 'rgb(99, 110, 250)',
'Americas': 'rgb(25, 211, 243)',
#'Oceania': 'rgb(9, 255, 255)'
'Oceania': 'rgb(50, 170, 255)'
}
col_name_template = '{year}+{continent}+{header}_grid'
year = 2007
for continent in continents:
data_dict = {
'xsrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='GDP_per_capita'
)),
'ysrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='Life_satisfaction'
)),
'mode': 'markers',
'textsrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='country'
)),
'marker': {
'sizemode': 'area',
'sizeref': 200000,
'sizesrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='Total_population'
)),
'color': custom_colors[continent]
},
'name': continent
}
figure['data'].append(data_dict)
for year in years:
frame = {'data': [], 'name': str(year)}
for continent in continents:
data_dict = {
'xsrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='GDP_per_capita'
)),
'ysrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='Life_satisfaction'
)),
'mode': 'markers',
'textsrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='country'
)),
'marker': {
'sizemode': 'area',
'sizeref': 200000,
'sizesrc': grid.get_column_reference(col_name_template.format(
year=year, continent=continent, header='Total_population'
)),
'color': custom_colors[continent]
},
'name': continent
}
frame['data'].append(data_dict)
figure['frames'].append(frame)
slider_step = {'args': [
[year],
{'frame': {'duration': 300, 'redraw': False},
'mode': 'immediate',
'transition': {'duration': 300}}
],
'label': year,
'method': 'animate'}
sliders_dict['steps'].append(slider_step)
figure['layout']['sliders'] = [sliders_dict]
icreate_animations(figure)
e uma amostra do conjunto de dados:
,country,continent,year,Country_code,Total_population,Life_satisfaction,GDP_per_capita
62,Afghanistan,Asia,2008,AFG,29839994.0,3.723589897,1298.14315888
63,Afghanistan,Asia,2009,AFG,30577756.0,4.401778221,1531.17399272
64,Afghanistan,Asia,2010,AFG,31411743.0,4.75838089,1614.25500126
65,Afghanistan,Asia,2011,AFG,32358260.0,3.83171916,1660.73985618
66,Afghanistan,Asia,2012,AFG,33397058.0,3.782937527,1839.27357928
67,Afghanistan,Asia,2013,AFG,34499915.0,3.572100401,1814.15582533
167,Albania,Europe,2007,ALB,3169665.0,4.634251595,8447.88228539
169,Albania,Europe,2009,ALB,3192723.0,5.485469818,9524.60981095
170,Albania,Europe,2010,ALB,3204284.0,5.268936634,9927.13514733
171,Albania,Europe,2011,ALB,3215988.0,5.867421627,10207.7006745
172,Albania,Europe,2012,ALB,3227373.0,5.510124207,10369.7616592
173,Albania,Europe,2013,ALB,3238316.0,4.550647736,10504.0930888
242,Algeria,Africa,2010,DZA,35468208.0,5.46356678,12870.2162376
243,Algeria,Africa,2011,DZA,35980193.0,5.317194462,12989.9549601
244,Algeria,Africa,2012,DZA,36485828.0,5.604595661,13161.566464
451,Angola,Africa,2011,AGO,19618432.0,5.589000702,5911.25433387
452,Angola,Africa,2012,AGO,20162517.0,4.360249996,5998.63860099