美文网首页
OpenStreetMap Data Case Study

OpenStreetMap Data Case Study

作者: 杨小彤 | 来源:发表于2018-03-05 00:01 被阅读0次

     OpenStreetMap Data Case Study

    ---

    地图区域

    portland, TX, United States

    https://www.openstreetmap.org/relation/127875

    选择区域时遇到的问题

    一开始选择了北京区域来进行项目,但到后面清洗数据的时候,遇到一个问题,但可考虑到python读取中文需要转码,学习此数据课程前完全没有接触过编程,因此还是选择了美国的城市,感觉会更容易些。之后有时间会尝试用mangoDB数据库研究北京区域的数据。

    获得样本文件

    从原始 OSM 区域中获取系统的元素样本,k越大,样本文件越小。

    修正街道名称

    使用正则表达式对发现的实际问题添加映射。

    数据导入SQL后,一些基本查询显示街道名称缩写和expected中的街道类型不同。应依照expected纠正街道的名称,选择不使用正则表达式。

    统一电话号码格式

        def update_phone_num(phone_num):

            m = phone_num_re.match(phone_num)

            if  m is None:

            ......

    导出为csv文件

    解析OSM XML文件中的元素,将这些元素从文档形式转换为表格形式,再写入 .csv 文件。

    将csv文件导入数据库

    这里我用DB browser for sqlite,把csv文件导入sql数据库。

    数据概述和补充意见

    文件大小

        portland_oregon.osm ......... 1.62 G

        P3.db .......... 939.6 MB

        nodes.csv ............. 633.8 MB

        nodes_tags.csv ........ 11.2 MB

        ways.csv .............. 60.7 MB

        ways_tags.csv ......... 157.6 MB

        ways_nodes.cv ......... 186.4 MB

    nodes的数量

        QUERY = "SELECT COUNT(*) FROM nodes"

        [(6756791,)]

    ways的数量

        QUERY = "SELECT COUNT(*) FROM ways"

        [(876817,)]

    独立用户数的数量

        QUERY = "SELECT COUNT (DISTINCT(e.uid)) FROM (SELECT uid FROM nodes UNION ALL SELECT uid FROM ways)e;"

        [(1491,)]

    只出现一次的用户的数量

        QUERY = "SELECT COUNT(*) FROM (SELECT e.user, COUNT(*) as num FROM (SELECT user FROM nodes UNION ALL SELECT user FROM ways) e GROUP BY e.user HAVING num=1)  u"

        [(289,)]

    贡献最大的10名用户

        QUERY = "SELECT e.user,COUNT(*) as num FROM (SELECT user FROM nodes UNION ALL SELECT user FROM ways)e GROUP BY e.user ORDER BY num DESC LIMIT 10"

        [(u'Peter Dobratz_pdxbuildings', 1949443), (u'lyzidiamond_imports', 1896180), (u'Mele Sax-Barnett', 559609), (u'baradam', 541141), (u'Darrell_pdxbuildings', 430582), (u'cowdog', 362994), (u'Peter Dobratz', 320534), (u'Grant Humphries', 295009), (u'justin_pdxbuildings', 116528), (u'amillar-osm-import', 106857)]

    下面是一些用户贡献百分比统计信息:

    1.顶级用户贡献率(“Peter Dobratz_pdxbuildings”)25.54%;

    2.结合前2用户贡献(“Peter Dobratz_pdxbuildings”和“lyzidiamond_imports”)50.38%;

    3.综合排名前10位的用户贡献86.18%;

    4.只贡献一次的用户占总用户的19.38。

    什么类型的商店最多(top10)

        QUERY = "SELECT value,COUNT(*) as num FROM nodes_tags WHERE key='shop' GROUP BY value ORDER BY num DESC LIMIT 10"

        [(u'convenience', 208), (u'hairdresser', 159), (u'clothes', 148), (u'beauty', 119), (u'car_repair', 70), (u'mobile_phone', 69), (u'supermarket', 48), (u'optician', 41), (u'bakery', 37), (u'hardware', 37)]

    便利店最多,其次是发廊、服装店、美容院、汽车修理厂、手机店、大超市、眼镜店、面包店、五金店。结果还是符合预想的。

    宗教信仰

        QUERY = "SELECT nodes_tags.value,COUNT(*) as num FROM nodes_tags JOIN (SELECT DISTINCT(id) FROM nodes_tags WHERE value='place_of_worship') i ON nodes_tags.id=i.id WHERE nodes_tags.key='religion' GROUP BY nodes_tags.value ORDER BY num DESC"

        [(u'christian', 553), (u'buddhist', 5), (u'jewish', 2), (u'muslim', 2), (u'unitarian_universalist', 2), (u'eckankar', 1), (u'hindu', 1), (u'sikh', 1)]

    宗教是美国文化中非常显著的一部分,。美国绝大多数人信奉基督教,但其他各种宗教也同时并存。

    十大最受欢迎的菜

        QUERY = "SELECT nodes_tags.value,COUNT(*) as num FROM nodes_tags JOIN (SELECT DISTINCT(id) FROM nodes_tags WHERE value='restaurant')i ON nodes_tags.id=i.id WHERE nodes_tags.key='cuisine' GROUP BY nodes_tags.value ORDER BY num DESC LIMIT 10"

        [(u'pizza', 66), (u'mexican', 49), (u'thai', 36), (u'american', 34), (u'chinese', 33), (u'italian', 16), (u'sushi', 16), (u'burger', 15), (u'japanese', 15), (u'asian', 13)]

    看来,波特兰k人最喜欢吃披萨,中餐也有很好的市场。

    建议:

    建立反馈激励机制,鼓励用户提交新数据和更新旧数据

    好处:

    给用户反馈,能让更多的用户更多的给地图贡献数据,地图数据量得以保证;2.适当的激励机制,能增加数据的可靠性,旧数据及错误数据也能得到更新。

    预期的问题:

    新用户增多,前期不熟悉产品,可能会带来很多的错误数据和重复数据;2.可能会增加维护成本。

    相关文章

      网友评论

          本文标题:OpenStreetMap Data Case Study

          本文链接:https://www.haomeiwen.com/subject/pqmxfftx.html