【发布时间】:2020-10-20 00:33:30
【问题描述】:
我正在尝试为各种变量计算美国人口的平均中心,所以我的第一步是按县计算过去 10 年的人口中心,看看它们是否与 @987654321 匹配@ of this figure(至少粗略地说,因为人口普查使用的是更精细的地理分辨率。)正如你所料,这是一种极其延迟的 Manifest Destiny:
(如果有人好奇,根据许多人口中心计算这些点的公式是on page 2 here。)
我正在从 R/RStudio 迁移到 Jupyter,使用 pandas、plotly、numpy 等。我通常是一名 JavaScript 工程师,但我对 Python 很满意,并且比 R 更喜欢它!使用fantastic tutorial on plotly.graph_objects.Scattergeo 中的机场地图示例,我能够计算出看起来相似的点,但我被国家决议困住了,所以我不知道我做得有多好:
当然,我可以手动缩放,但我真的很想了解默认情况下如何仅关注密苏里州。我找到了这个useful CodePen,但由于 Python 中有很多不同的优秀映射工具,我不确定如何通过 JS 移植。
我当前的地图,基于上面的教程,设置了基本的情节,然后在第二行修改了布局的范围——我不确定这是否是plotly 的标准,或者只是为了方便。
尽管我很欣赏 Python,但直接访问 update_layout 的文档有点像兔子洞“密苏里。”我意识到这很简单——只是有点学习曲线。
import pandas as pd
import plotly.graph_objects as go
meanCenters = pd.read_json('{"year": {"0": 2010, "1": 2011, "2": 2012, "3": 2013, "4": 2014, "5": 2015, "6": 2016, "7": 2017, "8": 2018, "9": 2019}, "lat": {"0": 37.52908501121699, "1": 37.51719645600817, "2": 37.50264465332917, "3": 37.489564543614605, "4": 37.47311004581999, "5": 37.45358003505096, "6": 37.43623735876329, "7": 37.423475510154134, "8": 37.4121869670822, "9": 37.40021167050047}, "lng": {"0": -92.1522086893934, "1": -92.17800419530532, "2": -92.20484620692078, "3": -92.23312370193283, "4": -92.26617930383293, "5": -92.30498885605378, "6": -92.3395596061908, "7": -92.36398254029461, "8": -92.38362683728195, "9": -92.40337680455285}}')
fig = go.Figure(data=go.Scattergeo(
lon = meanCenters['lng'],
lat = meanCenters['lat'],
mode = 'markers'
))
fig.update_layout(
geo_scope='usa',
height=600
)
fig.show()
数据包含在上面——谢谢,@vestland! -- 但为了便于阅读,在此重印
year lat lng
2010 37.52908501121699 -92.1522086893934
2011 37.51719645600817 -92.17800419530532
2012 37.50264465332917 -92.20484620692078
2013 37.489564543614605 -92.23312370193283
2014 37.47311004581999 -92.26617930383293
2015 37.45358003505096 -92.30498885605378
2016 37.43623735876329 -92.3395596061908
2017 37.423475510154134 -92.36398254029461
2018 37.4121869670822 -92.38362683728195
2019 37.40021167050047 -92.40337680455285
【问题讨论】:
-
嗨!只是关于如何共享数据样本的一点提示;鉴于
meanCenters是熊猫数据框,请运行meanCenters.to_dict()并将其输出与meanCenters=pd.DataFrame(<your_output>)一起共享。如果您将其包含在您的主代码 sn-p 中,那就更好了。 -
谢谢,绝对有道理!代码 sn-p 现在完全独立运行。
-
完美!顺便说一句,您是如何将 dict 放在一行中的?手动,还是您在函数中找到了一些参数?
-
我刚刚通过
json.dumps()运行它! -
您对专注于数据本身的方法感兴趣吗?换句话说,关注数据而不一定是密苏里州?
标签: python mapping plotly bounding-box