在 Kaggle 上使用 Python 绘制地图:地图未显示

Posted

技术标签:

【中文标题】在 Kaggle 上使用 Python 绘制地图:地图未显示【英文标题】:Maps with Python on Kaggle: map not displayed 【发布时间】:2019-02-03 11:52:20 【问题描述】:

问题已更新 - 请参阅下面的编辑部分!

我正在处理Kaggle Dataset about the recent history of the Olympic Games。

我想在内核中添加一些地图,以使用 plotly 显示世界各地的金牌得主分布。

我使用了以下不显示输出的代码,您能帮忙吗?

import plotly.graph_objs as go 
from plotly.offline import init_notebook_mode,iplot
init_notebook_mode(connected=True)

data = dict(type = 'choropleth',
            locations = goldMedals['region'],
            locationmode = 'country names',
            colorscale = 'Viridis',
            reversescale = True,
            text= goldMedals['region'],
            z = goldMedals['region'],
            colorbar = 'title':'gold medals')

layout = dict(title = 'gold medals',
                geo = dict(showframe = False,projection = 'type':'Mercator')
             )

如果您需要查看所有数据,您可以查看the complete Kernel on Kaggle。

编辑 1:感谢收到的第一个答案,我添加了以下代码来显示地图,但我收到了 valueError

fig = dict(data=data, layout=layout)
iplot(fig)

错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-11-62ab92846e12> in <module>()
      1 fig = dict(data=data, layout=layout)
----> 2 iplot(fig)

/opt/conda/lib/python3.6/site-packages/plotly/offline/offline.py in iplot(figure_or_data, show_link, link_text, validate, image, filename, image_width, image_height, config)
    334     config.setdefault('linkText', link_text)
    335 
--> 336     figure = tools.return_figure_from_figure_or_data(figure_or_data, validate)
    337 
    338     # Though it can add quite a bit to the display-bundle size, we include

/opt/conda/lib/python3.6/site-packages/plotly/tools.py in return_figure_from_figure_or_data(figure_or_data, validate_figure)
   1473 
   1474         try:
-> 1475             figure = Figure(**figure).to_dict()
   1476         except exceptions.PlotlyError as err:
   1477             raise exceptions.PlotlyError("Invalid 'figure_or_data' argument. "

/opt/conda/lib/python3.6/site-packages/plotly/graph_objs/_figure.py in __init__(self, data, layout, frames)
    312                         respective traces in the data attribute
    313         """
--> 314         super(Figure, self).__init__(data, layout, frames)
    315 
    316     def add_area(

/opt/conda/lib/python3.6/site-packages/plotly/basedatatypes.py in __init__(self, data, layout_plotly, frames)
    114 
    115         # ### Import traces ###
--> 116         data = self._data_validator.validate_coerce(data)
    117 
    118         # ### Save tuple of trace objects ###

/opt/conda/lib/python3.6/site-packages/_plotly_utils/basevalidators.py in validate_coerce(self, v)
   1977 
   1978         else:
-> 1979             self.raise_invalid_val(v)
   1980 
   1981         return v

/opt/conda/lib/python3.6/site-packages/_plotly_utils/basevalidators.py in raise_invalid_val(self, v)
    214             typ=type_str(v),
    215             v=repr(v),
--> 216             valid_clr_desc=self.description()))
    217 
    218     def raise_invalid_elements(self, invalid_els):

ValueError: 
    Invalid value of type 'builtins.dict' received for the 'data' property of 
        Received value: 'type': 'choropleth', 'locations': 3             Denmark
42            Finland
44            Finland
48            Finland
60             Norway
73             Norway
76             Norway
78             Norway
79             Norway
113            Norway
117            Norway
150            France
172           Belarus
173            France
174            France
178          Cameroon
182             Spain
188             Spain
200            France
218             Italy
219             Italy
220             Italy
221             Italy
222             Italy
226             Italy
227             Italy
283               USA
524          Pakistan
550            Russia
587        Uzbekistan
             ...     
270411          Italy
270416          Italy
270431          China
270432          China
270433          China
270434          China
270435          China
270439          China
270440          China
270477         Serbia
270480         Russia
270514        Croatia
270552        Hungary
270588         Russia
270609         Russia
270610         Russia
270641         Russia
270676          Italy
270770        Germany
270773         Russia
270876    Switzerland
270896        Germany
270917    Switzerland
270934         Russia
270970        Belarus
270981        Georgia
271009        Germany
271016    Netherlands
271049    Netherlands
271076         Russia
Name: region, Length: 13224, dtype: object, 'locationmode': 'country names', 'colorscale': 'Viridis', 'reversescale': True, 'text': 3             Denmark
42            Finland
44            Finland
48            Finland
60             Norway
73             Norway
76             Norway
78             Norway
79             Norway
113            Norway
117            Norway
150            France
172           Belarus
173            France
174            France
178          Cameroon
182             Spain
188             Spain
200            France
218             Italy
219             Italy
220             Italy
221             Italy
222             Italy
226             Italy
227             Italy
283               USA
524          Pakistan
550            Russia
587        Uzbekistan
             ...     
270411          Italy
270416          Italy
270431          China
270432          China
270433          China
270434          China
270435          China
270439          China
270440          China
270477         Serbia
270480         Russia
270514        Croatia
270552        Hungary
270588         Russia
270609         Russia
270610         Russia
270641         Russia
270676          Italy
270770        Germany
270773         Russia
270876    Switzerland
270896        Germany
270917    Switzerland
270934         Russia
270970        Belarus
270981        Georgia
271009        Germany
271016    Netherlands
271049    Netherlands
271076         Russia
Name: region, Length: 13224, dtype: object, 'z': 3             Denmark
42            Finland
44            Finland
48            Finland
60             Norway
73             Norway
76             Norway
78             Norway
79             Norway
113            Norway
117            Norway
150            France
172           Belarus
173            France
174            France
178          Cameroon
182             Spain
188             Spain
200            France
218             Italy
219             Italy
220             Italy
221             Italy
222             Italy
226             Italy
227             Italy
283               USA
524          Pakistan
550            Russia
587        Uzbekistan
             ...     
270411          Italy
270416          Italy
270431          China
270432          China
270433          China
270434          China
270435          China
270439          China
270440          China
270477         Serbia
270480         Russia
270514        Croatia
270552        Hungary
270588         Russia
270609         Russia
270610         Russia
270641         Russia
270676          Italy
270770        Germany
270773         Russia
270876    Switzerland
270896        Germany
270917    Switzerland
270934         Russia
270970        Belarus
270981        Georgia
271009        Germany
271016    Netherlands
271049    Netherlands
271076         Russia
Name: region, Length: 13224, dtype: object, 'colorbar': 'title': 'gold medals'

    The 'data' property is a tuple of trace instances
    that may be specified as:
      - A list or tuple of trace instances
        (e.g. [Scatter(...), Bar(...)])
      - A list or tuple of dicts of string/value properties where:
        - The 'type' property specifies the trace type
            One of: ['area', 'bar', 'box', 'candlestick', 'carpet',
                     'choropleth', 'cone', 'contour',
                     'contourcarpet', 'heatmap', 'heatmapgl',
                     'histogram', 'histogram2d',
                     'histogram2dcontour', 'mesh3d', 'ohlc',
                     'parcoords', 'pie', 'pointcloud', 'sankey',
                     'scatter', 'scatter3d', 'scattercarpet',
                     'scattergeo', 'scattergl', 'scattermapbox',
                     'scatterpolar', 'scatterpolargl',
                     'scatterternary', 'splom', 'streamtube',
                     'surface', 'table', 'violin']

        - All remaining properties are passed to the constructor of
          the specified trace type

        (e.g. ['type': 'scatter', ..., 'type': 'bar, ...])

【问题讨论】:

【参考方案1】:

要创建输出,您需要使用 datalayout 变量创建图形。然后使用iplot显示图。

fig = dict(data=data, layout=layout)
iplot(fig)

根据您尝试制作的地图类型,您可能需要重新格式化datalayout 变量。您可以找到不同的地图选项here。

【讨论】:

感谢您的评论!添加您的代码我有一个 valueError,我已经更新了添加它的问题。 终于有机会查看你的 kaggle notebook 并在你的原始代码中发现 2 个错误。 (1) data 应该是一个列表。所以data = [dict(...)] 和(2)墨卡托应该是小写的mercator 地图已显示,我将此问题标记为已解决,谢谢!不幸的是,所有国家都是以 NaN 作为奖牌数量的市场。我将提出一个新问题,因为这是一个不同的问题。谢谢!

以上是关于在 Kaggle 上使用 Python 绘制地图:地图未显示的主要内容,如果未能解决你的问题,请参考以下文章

python 使用底图在地图上绘制任何地理参考变量

使用 Python 地图绘制工具 -- folium 全攻略

在世界地图上绘制图形

python 在地图上绘制iso线和iso表面

python 在OpenStreetMap地图上绘制路线图

python 在OpenStreetMap地图上绘制路线图