记录一次自己清理数据的过程
今天接到一个任务,从原始数据(在不同监测点对白纹伊蚊,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!
记录一次自己清理数据的过程相关推荐
- 数据分析 数据清理_数据清理| 数据科学
数据分析 数据清理 数据清理 (Data Cleaning) Data cleaning is the way toward altering information to guarantee tha ...
- 清理数据 python_在python中使用熊猫清理数据
清理数据 python In this post, we will be using the Pandas library with Python to demonstrate how to clea ...
- 《数据分析实战:基于EXCEL和SPSS系列工具的实践》——3.3 耗时耗力的数据整理过程...
本节书摘来自华章计算机<数据分析实战:基于EXCEL和SPSS系列工具的实践>一书中的第3章,第3.3节,作者 纪贺元,更多章节内容可以访问云栖社区"华章计算机"公众号 ...
- oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程
简单记录Oracle 9i数据库手工建库过程Oracle 9i手工建库 By Oracle老菜 今天客户要用oracle 9.2.0.5,aix 6.1已经不支持了,只好从别的数据库把软件拷贝过来重编 ...
- 数据可视化 信息可视化_可视化数据以帮助清理数据
数据可视化 信息可视化 The role of a data scientists involves retrieving hidden relationships between massive a ...
- 数据库:存储过程_数据科学过程:摘要
数据库:存储过程 Once you begin studying data science, you will hear something called 'data science process' ...
- 数据消费过程_如何优雅地规划数据仓库体系
前言 数仓规划是数仓建设的蓝图,涵盖从需求分析开始到最终的数仓评估验收整个环境:数仓规划之所以重要,是因为它是描述了数据流动的概念性框架,为元数据管理奠定了基础,对数据加工过程的理解.数仓建设的交流分 ...
- 记录第一次使用nvidia tao训练模型的过程
记录第一次使用nvidia tao训练模型的过程 搭建NVIDIA TAO环境 编辑~/.tao_mounts.json,将自己的项目目录映射到docker中的目录 Nvidia TAO是NVIDIA ...
- hbase表按rowkey和时间清理数据
为什么80%的码农都做不了架构师?>>> 背景: 由于数据量非常大,客户需要对过期的数据进行清理,例如:hbase表中有2017年与2016年的数据,现在需要将2016的数据进 ...
最新文章
- Mish激活函数,ReLU的继任者
- PHP中类和文件的代码注释规范
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
- ionic4监听返回事件 AppMinimize navController
- android多点触控自由对图片缩放
- 迭代之嵌套的for循环
- 【java】java 随机数 Random ThreadLocalRandom SecureRandom
- 中国数码相机镜头行业市场供需与战略研究报告
- Gstreamer调用pulseaudio播放流程(十三)
- 区块链开源框架 HyperLedger Fabric 学习思路分享
- 进程管理利器Supervisor--入门简介
- (6)数据结构-共享栈
- 揭秘Google数据中心网络B4(李博杰)
- 《麦肯锡·卓越工作方法》
- 一、绘制不同类别特征均值标准差直方图
- Codeforces 730A:Toda 2(multiset模拟)
- scratch算立方根
- SpringBoot之模板引擎
- 网络传输前三层——物理层、数据链路层、网络层
- Delphi XE10.4 TrayIcon托盘
热门文章
- win10下Anaconda如何查看PyTorch版本
- 用父节点表示法表示一棵树
- SW6206超级华为快充5V5A,全协议OPPO闪充、自带电量计量、LED 灯/数码管显示
- python tar.gz格式压缩、解压
- BootStrap 模态框禁用空白处点击关闭
- File Operations In Java
- Android深入浅出系列之Android工具的使用—模拟器(一)
- EIGRP OSFP 利用NULL0接口防止路由环路 Loopback Null0接口揭秘
- SQL 将一列数据转为一行字符串[转]
- 基于Hadoop的MapReduce框架研究报告