<p>在Python中,我将查看<a href="http://geopandas.org/" rel="nofollow noreferrer">GeoPandas</a>。它提供了一个名为GeoDataFrame的数据结构:它是一个特性列表,每个特性都有一个几何体和一些可选属性。可以基于几何体相交将两个geodataframe连接在一起,并且可以在单个几何体(例如,邮政编码)内聚合行数(例如,行程)。在</p>
<ol>
<li>我不熟悉Uber的数据,但我会设法把它放入GeoPandas GeoDataFrame中。在</li>
<li>同样地,邮政编码也可以从美国人口普查、OpenStreetMap[1]等地方下载,并强制输入到地理数据框中。在</li>
<li>根据几何相交将#1连接到#2。您需要一个新的地理数据框架,每次Uber旅行都有一行,但每行都附有邮政编码。<a href="https://stackoverflow.com/questions/28752044/getting-counts-of-intersections-between-geometries-in-geopandas">Another StackOverflow post discusses how do to this</a>,而且它现在比它应该的更难。在</li>
<li>按邮政编码汇总,并统计每一次旅行的次数。代码看起来像<code>joined_dataframe.groupby('postcode').count()</code>。在</li>
</ol>
<p>我对上述过程的担心是,如果你有几十万个非常复杂的旅行几何图形,在一台机器上可能要花上一辈子的时间。你发布的链接使用的是Spark,你可能最终还是想把它并行化。您可以针对Spark集群编写Python(!)但我不是帮你做这个部件的人。在</p>
<p>最后,对于预测组件(例如SGD),请查看<a href="http://scikit-learn.org/" rel="nofollow noreferrer">scikit-learn:</a>这是一个功能非常齐全的机器学习包,有一个非常简单的API。在</p>
<p>[1]:有一个单独的包geopandas_osm,它获取osm数据并返回GeoDataFrame:<a href="https://michelleful.github.io/code-blog/2015/04/27/osm-data/" rel="nofollow noreferrer">https://michelleful.github.io/code-blog/2015/04/27/osm-data/</a></p>