记录一次自己清理数据的过程
今天接到一个任务,从原始数据(在不同监测点对白纹伊蚊,18周的监测数据)中提取监测点列表,然后从网上爬取各个监测点的空间信息(经纬度),并把这些经纬度数据转换成墨卡托坐标,接着将这个带有空间数据的监测点列表与原始数据进行整合,得到不同监测点各个指标的时间序列,最后把数据进行清理,按照给定的格式输出。
我的思路是,先把所有的监测点整理出来,去除冗余,进行排序,得到一个监测点的列表,然后调用百度的 API 接口,得到百度建议的 JSON 数据(这个数据带有经纬度信息),选择一个最贴近的建议地点,得到其经纬度。得到经纬度之后剩下的事情就很好处理了。
说做就做,得到的监测点列表如下:
从得到的监测点列表可以看出,原始数据的命名并不规范,如下所示:
- 白云区第二人民医院高塘门诊部,白云区第二人民医院高塘门诊部天台
- 柏塘幼儿园,柏塘幼儿园旁空地
- 朝阳杨梅街8号空地,朝阳杨梅街8号旁空地
- 德宝花园,德宝花园天台及外环境,德宝花园外环境
- 都市品格花园,都市品格外坏境
- 广钢医院(北郊分院),广钢医院北郊分院
- 鹤龙,鹤龙街
- ……
我估计,以上数据应该指的是同一个监测点,但为了保持与原始数据一致,方便后面提取数据建立关联,我并没有做合并的操作,此时得到监测点 4069 个。
接下来就是调用百度API,得到百度建议的地点名称JSON,关键代码如下:
private static string _suggestion_url = "http://api.map.baidu.com/place/v2/suggestion";public JObject Suggestion(string query, string region)
{try{if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验{string url = _suggestion_url + "?query=" + query + "®ion=" + region + "&output=json&ak=" + _ak;string json = DownloadString(url);return JsonConvert.DeserializeObject(json) as JObject;}else //SN校验{string url = _suggestion_url + "?query=" + query + "®ion=" + region + "&output=json&ak=" + _ak;IDictionary<string, string> param = new Dictionary<string, string> { { "query", query }, { "region", region }, { "output", "json" }, { "ak", _ak } };string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _suggestion_url.Split(new string[] { ".com" }, StringSplitOptions.None)[1], param); //计算snstring json = DownloadString(url + "&sn=" + sn);return JsonConvert.DeserializeObject(json) as JObject;}}catch{return null;}
}
public class MonitoringPoint
{public string MonitoringPtName;public List<string> RecommendedNames;public MonitoringPoint(){MonitoringPtName = string.Empty;RecommendedNames = new List<string>();}
}
public class OperationData
{public List<MonitoringPoint> MonitoringPts;public OperationData(){MonitoringPts = new List<MonitoringPoint>();}public void ReadMonitoringPts(string fileName){MonitoringPts.Clear();string[] strs = File.ReadAllLines(fileName,Encoding.Default);for (int i = 0; i < strs.Length; i++){MonitoringPoint mp = new MonitoringPoint();mp.MonitoringPtName = strs[i].Trim();MonitoringPts.Add(mp);}}public void WriteMonitoringPts(string fileName){for (int i = 0; i < MonitoringPts.Count; i++){string[] strs = MonitoringPts[i].MonitoringPtName.Split(new char[] {' '});MonitoringPts[i].RecommendedNames = GetRecommendedPts(strs[1], "广州");}string[] strData = new string[MonitoringPts.Count];for (int i = 0; i < MonitoringPts.Count; i++){string temp = MonitoringPts[i].MonitoringPtName + ",";List<string> lst = MonitoringPts[i].RecommendedNames;for (int j = 0; j < lst.Count; j++){temp += lst[j] + ",";}strData[i] = temp.Substring(0, temp.Length - 1);}File.WriteAllLines(fileName, strData,Encoding.Default);}public List<string> GetRecommendedPts(string query, string region){List<string> lst = new List<string>();PlaceSuggestionService pss = new PlaceSuggestionService();JObject suggestionPlaces = pss.Suggestion(query, region); //建议位置if (suggestionPlaces != null){try{foreach (JObject place in suggestionPlaces["result"]){string temp = (string) place["city"] + " ";if (temp.Contains(region) == false) continue;temp += (string) place["district"] + " ";temp += (string) place["name"] + " ";temp += (double) place["location"]["lat"] + " ";temp += (double) place["location"]["lng"];Console.WriteLine(temp);lst.Add(temp);}}catch{;}}return lst;}
}
得到的百度建议列表如下图所示:
从这个列表可以看出,有些监测点没有返回 JSON,这可能跟我请求过于频繁有关。先把返回 JSON 的数据整理出来再说啊。
- 景泰西四巷停车场,停车场(景泰西四巷) 23.168635 113.275384
- 荔湾妇幼,广州市荔湾区妇幼保健院 23.084383 113.228215
- 中山一院,中山大学附属第一医院 23.13275 113.29747
- 市一医院,广州市第一人民医院 23.137422 113.262769
- 广东省政协,中国人民政治协商会议广东省委员会 23.121369 113.320943
- 华师幼儿园,华南师范大学附属幼儿园 23.147804 113.362476
- ……
从上面的例子,我们可以看到监测点与百度建议的地点其实是相同的。但表述的方式不同,这块我不想在利用 NLP 中的知识写“分词”,“编辑距离”这些代码了,于是我开始用人工的方式进行筛选,从来没有这样痛苦过,这是我的筛选成果,如下图所示:
真是坑爹啊!!!用了两个小时才得到 245 个结果。我写上面的代码也没有花费2个小时,我真的想抓个实验室的学生来做这些事情啊,可看到他们都在复习功课,不忍心啊,这种没啥技术含量的事情也不好意思让学生们来做啊。只能这样了,再给我一天的时间,就能把这个任务搞定了。就这样吧,今天到这里了。See You!
再瞎扯一句,如果有老师写论文,缺少写代码分析数据的合作者,可以联系我呀!我这几年积累了不少算法的实现,应该很快就能验证你的想法啊,就这样吧,See You!
相关文章:

man nfsd(rpc.nfsd中文手册)
本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rpc.nfsd(8) System Managers Manual rpc.nfsd(8)NAMErpc.nfsd - NFS服务进程SYNOPSIS/usr/sbin/rpc.nfsd [options] nprocDESCRIPTIONrpc.nfsd程序…

Java学习从入门到精通的学习建议
想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此。如:基础语法、核心类库、面向对象编程、异常、集合、IO流等基础如果学不好,那么后边更深入的语法也不容易学会。所以在学基础部分…

Automatically highlight current page in menu via Javascript
Please check the link, http://www.richnetapps.com/automatically_highlight_current_page_in/ 转载于:https://www.cnblogs.com/OceanChen/archive/2010/08/10/1796410.html

基于Vue的小日历(支持按周切换)
基于Vue的日历小功能,可根据实际开发情况按每年、每月、每周、进行切换 <template><div class"date"><!-- 年份 月份 --><div class"month"><p>{{ currentYear }}年{{ currentMonth }}月</p></div>&…

股市币市:数据分析与交易所公告(20190225)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: htt…

哪些人适合参加UI设计培训
UI设计在最近几年受到了很多人的关注,想要学习UI设计技术的人越来越多,大部分选择报UI设计培训班进行学习,有些人想要通过自学来学,那么到底哪些人适合参加UI设计培训呢?来看看下面的详细介绍。 哪些人适合参加UI设计培训? 1. 零…

java常用的7大排序算法汇总
这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应…

深度优先搜索算法在RPG游戏迷宫中的应用
在RPG游戏中我们经常会看到一些迷宫,我之前玩仙剑一的时候就经常在几个迷宫里绕来绕去也绕不出来,玩仙三由于游戏视角可以转,更是费劲。这里我们使用深度优先算法达到遍历一个迷宫的目的。 首先定义一个有序元组A:{左,上ÿ…

又有六所大学考研预调剂系统已开放!
距离 19 考研初试成绩的公布已经有一周了,成绩不错的同学就安心准备复试吧,全力备考,一定要拿到属于你的录取通知书!成绩不满意,擦线或者排名靠后的同学,复试、调剂两手准备,注定咱们要花更多的…

零基础参加java培训如何学习
零基础的同学想要学好java技术,一定要比有基础的学员更加努力才可以,因为java技术要学习的东西有很多,在Java培训学习的过程中也是要掌握一定的技巧和方法的,下面就为大家详细的介绍一下零基础参加java培训如何学习? 零基础参加j…

webGL的一些咨询--web3D
来自:http://www.bumao.com/index.php/2010/06/webgl-overview.html什么是webGLWebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供…

如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
当前,信息技术领域的知识在飞速的更新。作为一个程序爱好者,或者说已经超过 10年 的老码农,稍有懈怠就会被落下!跟踪当前信息技术领域的畅销书,结合自己所做的事情买来阅读,以便提升技能,就显得…

突发!微信官方证实:“绞杀”了刷量平台
今天,有关微信刷量平台崩溃的新闻刷爆朋友圈。在朝阳群众的“深扒”之下,不少微信大号的惨淡阅读量展露出了“娇羞的真容”。 不过,对此事,微信官方一直保持了“可怕的沉默”,今天下午,微信终于做出了官方回…

Java培训一共分几个阶段
Java培训一共分几个阶段?一般培训机构的课程都是从基础知识讲起,千锋教育的Java培训课程也不例外,第一阶段为JavaEE基础,主要讲授Java基础语法、面向对象、核心类库、集合等等基础知识点,把基础打牢学习接下来的知识的时候才会更…

IE6,7,8,FF兼容总结
做到浏览器兼容需要注意的四大要素(一)2009-05-31 17:091 Css1.1 选择器 通配符 * :: IE6不支持类选择器 .class :: IE6元素的class不能超过2个属性选择器 [attvalue] [att] [att|value] [att(^|$|~)value] :: IE6不支持关系选择器 E F; E > F ; E ~ F :: IE6不支持 1.2 伪…

二叉树的路径(根节点到叶节点)Binary Tree Paths
为什么80%的码农都做不了架构师?>>> 问题: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1/ \ 2 3\5 All root-to-leaf paths are: ["1->2->5", "1->…

股市币市:数据分析与交易所公告(20190226)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

零基础怎么学UI设计
互联网的快速发展,给很多企业和求职人员有了更多的创业和工作机会,近几年,UI设计行业招聘需求人数就在不断上涨,越来越多的人想转行做UI设计。那么零基础怎么学UI设计?有哪些简单有效的学习方法?我们来看看下面的详细介绍。 零基…

原创:嵌入图片的HTML内容在FLASH AS3中正确显示的最佳解决方案
做一个项目,遇到这个该死的问题,尝试了几乎所有解决方法,几近崩溃,终于找到完美解决方案。因为在网上,无论中文还是英文,搜索了无数遍,都没人给出正确答案,所以,在此记下…

总结六条对我们学习Linux系统有用的忠告
接触linux需要的是端正自己的态度,这个玩意可不是一天两天就能拿得下的。学习个基础,能装系统、能装常见服务、能编译、能配置存储空间、能配置系统参数、能简单查看系统负载等基本够用。但这些只保证能做机房运维,真正和进阶的运维工作不在机…

一份来自上海院校的考研预调剂系统已开放名单!
距离 19 考研初试成绩的公布已经有一段时间了,成绩不错的同学就安心准备复试吧,全力备考,一定要拿到属于你的录取通知书!成绩不满意,擦线或者排名靠后的同学,复试、调剂两手准备,注定咱们要花更…

【Python培训基础知识】Python生成器函数
对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的。 可以采用生成器推导式来解决内存不足的问题。例如,利用生成器推…

普华永道重磅报告:决定未来的八大核心科技
在新兴科技高速发展的今天,各个技术风口你方唱罢我登场,把我们裹挟其中,无论是创业者,还是大公司的决策人,都需要时刻判断趋势。 也许每个人心里都在想类似的问题:“这些人工智能技术会如何影响我们的物联网…

[转帖][实用]Linux 释放内存方法
先看看内存使用状况[rootnode1 ~]# free -mtotal used free shared buffers cachedMem: 8004 6557 1446 0 163 5630-/ buffers/cache: 763 7240Swap: 1983 0 1983把内存里的数据暂时写到硬盘里[rootnode1 ~]# sync修改 /proc/sys/vm/drop_caches文件[rootnode1 ~]# echo 3 >…

股市币市:数据分析与交易所公告(20190227)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

【Web前端培训】预解析(变量提升)
今天千锋小编为大家介绍一下一下JavaScript中的预解析(变量提升)。从什么是预解析及变量的预解析和函数的预解析及加载流程进行学习(注意:我们这里说的ES5中的预解析)。 什么是解析 首先代码执行肯定需要一个执行环境,浏览器会提供一个供javaScript执行的…

如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
我们生活在一个快节奏的时代里,每天除了辛苦的提升自己,为生活打拼之外,偶尔的放松去看场电影也是必要的。可是能够抽出的时间有限,选择看哪部电影就是一个挠头的问题了。 幸好,有类似猫眼电影、豆瓣电影、淘票票这样…
【Java学习笔记之五】java数组详解
数组 概念 同一种类型数据的集合。其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[] 数组名 new 元素类型[元素个数或数组长度]; 示例:int[] arr new int[5]; 格式2&…

参加Java培训需要注意什么
java编程语言对于零基础的同学来说,想要自学是非常困难的,因为java学习包含很多阶段,所以零基础的小白和初学者报java培训班学习是非常有必要的,下面小编就给大家详细的介绍一下参加Java培训需要注意什么? 参加Java培训需要注意什…

写得不错的几篇C/C++博客
转:http://blog.csdn.net/rubyzhudragon/category/562309.aspx 转载于:https://www.cnblogs.com/xinzhuangzi/archive/2010/08/22/4100543.html