结对编程——你不是一个人在战斗!
经过了两周轰轰烈烈的工作,我们的Pair
work终于大功告成了!回首这两周,时间虽然不长,但可谓历尽坎坷,一路走来,有太多的酸甜苦辣,有太多的欢笑痛苦,不总结一下实在可惜,下面请听我一一道来!
(1)题目
学术搜索机构位置坐标(经纬度)检测和校正
(2)团队成员(USTC“明”系列)
李明磊,科大——微软联合培养实验班学生,来自0823电子科学与技术系
谭明慧,科大——微软联合培养实验班学生,来自0810自动化系
(3)我们的目标
鉴于目前学术搜索数据库里面机构的位置坐标覆盖率并不高(在所有的20667个组织中,有19537个组织在查询范围之列,其中仅有10678个组织在数据库中有原始地址坐标信息,所占比例为54.6553%,还有部分信息不准确),这些数据大多来自Bing
maps 或是人工标注,我们的目标是从其他的数据来源获取位置信息,在检查准确率后,对原始数据进行补全和修正。
(4)项目分解
我们的工作分为如下几个部分:
A)Excel
接口(导出name信息,导入查询后返回的地址信息)
B)发送请求(Webclient)
C) 获取地址信息(Google
API and Yahoo API)
D)
XML 分析
E)数据处理(Google,Yahoo和原始数据的比对)
(5)预计时间花费和实际时间花费
分项名称 |
预计时间花费 |
实际时间花费 |
Excel接口 |
1个晚上 |
3个小时 |
得到地址信息 |
3天 |
2天 |
JSON和XML分析 |
3个小时 |
1天 |
数据处理 |
2天 |
1天 |
具体说明如下:
A)刚接手任务第一个要处理的就是Excel表格,对怎样在C#中打开Excel,我们在开始阶段完全没有思路,最初只是比较盲目地在网上查找,可以说对通过怎样的方式解决这个问题完全没有概念,其实,等到真正找到Office
Excel的接口,问题就迎刃而解了,我们只需要按照其标准的固定格式完成初始化和一般存取就可以了。此阶段的主要时间花费在查找资料上。
B)由于数据库的原始数据来源是Bing
Maps,所以我们决定放弃Bing
API,而改为用Google
API 和
Yahoo API,与Excel接口处遇到的问题大同小异,我们在此前对API可以用一无所知来形容,在Google的众多API应用中怎样找到最合适的那一个是耽误最多时间的过程,在找到Google适用的API后,我们很快用同样的方法找到了最合适的Yahoo
API。此项工作在难度上比预想要小,但在资料的获取上比预计要难!同时由于Google
API 有每天访问2500次的限制,我们也使用了代理来解决这个问题。
C)我们在最初选择用JSON型数据,但在按照标准形式进行解析时,经常会遇到security
problems,我们在周六下午调了一个下午还是没有什么起色,最终只好放弃JSON而改投XML。而对于返回的XML行文件,Yahoo(多为层层嵌套)的结构性要比Google(多为并列关系)的结构性明确,所以Yahoo解析的进程要比Google快很多。
D)看到得到的几万条数据我们感到很兴奋,但是从第二组传来的消息提醒我们:要检查我们得到的信息是否准确,不准确的信息是没有任何意义的,因此,我们又投入了一天的时间进行数据处理,通过对不同数据来源的比对将数据划分可信度级别,并对原始数据提供改善意见。
(6)我们得到的结果
A)直接获得数据
1)在19537(parents
ID = 0)个待查数据中,有10678个有原始经纬度信息,所占比例54.6553%
2)在19537(parents ID = 0)个待查数据中,有12397个有Google API经纬度信息,所占比例63.4539%
3)在19537(parents ID = 0)个待查数据中,有19170个有Yahoo API经纬度信息,所占比例98.1215%
B)Yahoo 和 Google数据比较
尽管Yahoo数据的覆盖率很高,但是准确率没有保证,所以我们通过对比Yahoo和Google的数据对信息的准确度划分层级,在API返回的数据中,Google返回12397个地址信息,Yahoo返回19170个地址信息,其中有12309个组织同时具有Google和Yahoo两个返回值,Yahoo和Google的数据以以上数据为比对对象。
1)Google中有一项是viewport,分别有southwest和northeast两组信息,分别确定了可是区域的西南角和东北角,我们将这两组信息所确定的长方形的边作为区域信息,若返回的Yahoo
location在此范围之内,可认为Google和Yahoo返回的信息是一致的,该数据是一级可信的。一级可信数据共有4122个,所占比例33.4877%(在12309个数据中),该数据的精度在公里量级。
2)将Google返回的Area
Level 1 与Yahoo返回的State信息进行比对,如果一致,该数据是二级可信的。二级可信数据共有4273个,所占比例38.3703%(在12309个数据中),该数据的精度在州,省级。
3)将Google返回的Country
Short和Yahoo返回的Country
Code信息进行比对,如果一致,该数据是三级可信的。三级可信数据共有12271个,所占比例为99.6913%(在12309个数据中),该数据的精度在国家级。
C)原始数据和Google数据比较
在API返回的数据中,Google返回12397个地址信息,原始数据有10678个地址信息,其中有7902个组织同时具有Google和原始两组数据,Google和原始数据以以上数据为比对对象。
与Yahoo一级可信数据的产生原理相似,如果原始数据在Google
viewport的范围之内,则认为该原始数据是一级可信的。一级可信数据共有4633个,所占比例58.6307%(在7902个数据中),该数据的精度在公里量级。
D)在以上等级划分中我们可以看出,Google-Yahoo一级可信数据和Google-原始一级可信数据的精度都是很高的,因此我们将两组数据进行融合,对某个存在一级可信数据的组织,若只有Google-原始一级可信数据,则保留;若只有Google-Yahoo一级可信数据,则替换为Google-Yahoo一级可信数据,若都存在,则保留原始数据不变。经过以上这般努力,有1678个组织的经纬度信息可以用一级可信的数据进行补充或修正,经过随机测试(在唐傲同学的帮助下),以上的数据是非常准确的。
(7)小组成员工作照
(8)合作的收获和意义
虽然我和李明磊在大一时做了一年的同学,但是在此次合作之前并没有共同完成过任何工作,在此次合作的过程的,我们收获了很多。
首先,两个人在一起可以集思广益,我们都是没有过丰富编程经验的菜鸟,比起其他组的轻车熟路,我们在合作是没有很明确的章法。有时候一个人灵光一现的确就是个很好的思路,我们对工程的搭建也就建立在这一个个转瞬即逝的小点子中,这是两个人合作的第一个优势。
其次,两个人面对同一台电脑一起编程可以及时的找到问题,由于每个人的编程习惯不一致,容易犯的错误也不一致,因此在编程中出现的自己不易察觉的问题往往能被同伴及时发现。所以在两个人同时编程的过程中,我们基本没有在编译中出现问题。
此外,两个人面对同一工程的态度也很重要,作为两个非计算机专业的学生,我们在这次pair
work中可以说没有明显的优势,也许其他同学手到擒来的很多工作,需要我们付出很多的艰辛和努力。也正是基于以上原因,我们在第一天就达成了共识:我们真正在意的不是成绩,而是能够学要了多少东西。作为两张白纸,我们有更大的空间可以书写!我们的成果不一定是最好的,那我们一定是收获最多的几个人之一!
最后,也是最重要的,两个人在配合时的相互扶持和鼓励是非常重要的!由于之前没有编程经验,我们组可谓一穷二白,因此在开始阶段遇到了比较大的挑战,完全没有头绪的我们,进展比绝大多数组都慢。在我看来,面儿上很淡定的两个人,心里却都急得像热锅上的蚂蚁,但我们谁都不愿意让自己的紧张情绪给对方带来压力。这时候,我们在每取得一小步进步的时候都会相互鼓励,那一段日子,lync我们两个人的谈话记录中“加油!”,“Good
job!”是最常见的词语,正是这些看似不起眼的鼓励,让我们以十足的勇气冲破了一个又一个难关和屏障,顺利地完成了任务!
当然,在合作过程中也有一些困难,比如,我们在微软不属于一个组,而且两个人在组里都有一定的工作要完成,因此工作的计划和安排也不一致,但是既然是要共同完成的pair
work,我们多少要“就合”对方的空闲时间,因此,合作有时候会比一个人完成工作耽误时间,但是比起以上的那些优势,浪费的这点儿时间就不值一提了!
(9)对同伴的评价
我和李明磊的合作过程是融洽而愉快的!他是个很细心的人!不知不觉两周过去了,我已经记不得有多少次在晚上11点多我们还在讨论问题时,他会体贴地说一句:时间不早了,你先走吧,剩下的我再看看!而从lync的记录上可以看出,他经常是第二天凌晨才放下手头的工作,这让我真的非常感动!同时他又是一个很勤奋的人,尤其在最后数据处理阶段,正是他的精益求精才得以让我们的数据以最完美的方式展现出来!
说来也巧,这次合作的最开始是邹欣老师让我们两个人给大家做演示,怎样通过“制作三明治”的方式来指出对方的缺点和不足,今天,当我们的这次合作即将结束的时候,我又要为李明磊“制作三明治”了!和那天的手足无措一样的是,我还是很难找到他有什么大的缺点,我想,李明磊是个勤劳而刻苦的人,但是在这次合作中,最制约我们发挥的是基础知识不够雄厚,很多计算机,c#,甚至是excel的应用不够熟练,所以对别人小菜一碟儿的事,我们才会那么费周折,这是非计算机系的我们共同面临的弱点,但是这次李明磊的表现,也让我看到了他优秀的学习能力和不凡的拼搏精神,相信在微软一年的历练,一定让他更加出色!
(10)我的一点感想
这两周日子过得很快,但我感觉从未有过的充实,我有一个优秀的合作伙伴,有一群热心的同学,他们从未吝啬过对我们的帮助,在此,衷心地感谢那些在完成自己琐杂的工作之余还无微不至帮助过我们的老师同学!感谢邹欣老师给我们这样的机会挖掘自己的潜力,重新认识自己!特别感谢我的同伴李明磊对我的照顾!感谢见证我们努力的每一个人!
——谭明慧