结对编程,一路走来

经过近两周的辛苦历程,我们做到了我们需要做的,和想要的结果。在此之前,我们是对结对编程一无所知,对C#一点都不熟,编程能力也不强的菜鸟。如果你是结对编程了如指掌,如果你是编程大牛,精通各种语言,这篇博客对你没有多大作用。如果你和我一样是刚刚入门的菜鸟,并且有兴趣了解结对编程,或者我们的工作,我们的编程过程,我们的思路,我愿意和你分享具体的过程。(大牛喜欢用简洁概括的话语,甚至引经据典,加入哲理,常常让菜鸟们听的五体投地,一头雾水,到头来依然不知从何下手。作为菜鸟,我希望具体的过程,能让我们知道如何下手,毕竟大牛可不是哲理扯出来的,都是实打实的n多代码堆出来的。)

首先说一下我们的工作:

任务:在一份有2万多的科研机构的名单中,有经纬度的数据覆盖率为54.6553% 而我们要做的就是找出原有数据要修改的地方,并在保证正确率的前提下尽量补全数据。

目标:在老师要求的时间(10天)内,做完,做好。

开始工作分块:当我们拿到任务时,虽然是一头雾水,但我们依然硬着头皮做了一个粗糙的分块:

(1) 学会用C#对excel表格读写等操作

(2) 使用Google, Bing , Yahoo获得相应机构的经纬度。

(3) 比较各个地图所返回的数据,得到一份综合的最佳数据。

我们先从掌握C#对excel的操作开始,逐步展开工作,在做的过程中,我们实际是这样分块工作的:

实际工作分块:

(1) office 提供了excel 的接口,学会之

(2) 使用webclient发送请求(Google每天有2500的访问限制,需用proxy(代理);而Yahoo则没事,一天可以访问50000个)

(3) 使用Google Geocoding API 和Yahoo Geocoding API 分别用机构名查询地址,返回xml文件,并实时分析,获得想要的信息。

(4) 数据比较处理

时间花费:

分项名称

预计时间花费

实际时间花费

Excel接口

1个晚上

3个小时

得到地址信息

3天

2天

JSON和XML分析

3个小时

1天

数据处理

2天

1天

下面我就具体介绍我们做的过程和相关的资料,方便感兴趣的同学使用:

(1):对excel操作,如果你想花些时间学的系统些,msdn上有不少资料,但个人觉得如果你只是想快速的使用一下,就没必要详细的看,这有两个很不错的博客:http://www.cnblogs.com/kingjiong/archive/2009/01/05/1368964.htmlhttp://www.cnblogs.com/litianfei/archive/2008/03/21/1116906.html(推荐)

(2):使用webclient 发送请求,这个还是比较容易的,直接上一段小程序吧

WebClient wb = new WebClient();

wb.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

//wb.Proxy = new WebProxy("代理地址", true);

var s = wb.DownloadString(new Uri(str));

wb.Dispose(); // release webclient

如果使用Google的话,每天访问超过2500的话,就应该使用代理了(如果你有代理可以使用的话),或者用朋友,同学的电脑爬数据也行。var s = wb.DownloadString(new Uri(str));

中的 str是什么呢,这个就是Google Geocoding 或者Yahoo Geocoding的的URI。

使用Google Geocoding API 和Yahoo Geocoding API 分别用机构名查询地址,首先了解Google Geocoding 和Yahoo Geocoding 的URI格式(主要注意address中名字之间的空格用加号代替):

Google:

http://maps.googleapis.com/maps/api/geocode/xml?address=a+b+c,+d+e,+f&sensor=false

e.g.

http://maps.googleapis.com/maps/api/geocode/xml?address=Stanford+University&sensor=false

Yahoo:

http://where.yahooapis.com/geocode?q=a+b+c,+d+e,+f&appid=[yourappidhere]

e.g.

http://where.yahooapis.com/geocode?q=1600+Pennsylvania+Avenue,+Washington,+DC&appid=[yourappidhere]

点开给出的两个例子你就可以看到Google 和Yahoo所返回的xml文件。

(3)对xml文件进行分析:

Google和Yahoo返回的xml文件内容上的板块话,有些不同,在分析的时候,要注意。

截一段Google xml的部分:                                                             截一段Yahoo xml的部分:

clip_image002   3

由于篇幅有限在此就不具体介绍分析板块了,我会单独在之后的博客中把每块的思想,代码,解释依次写出,供有兴趣的同学参考。

(4)然后就是数据处理了:

我们要查询19537个机构,Google返回数据12397个,覆盖率为63.4539%; Yahoo有返回值的机构个数为19170,覆盖率为98.1215% .不过正确率上肯定是Google要高些。原始数据主要是在Bing map的基础上查的,覆盖率为54.6553%

我们对数据进行了如下的比较:

①,如果Yahoo数据中的Location在Google数据中的Viewport区域内,我们就认为这种数据是一级可信的 得到4122个。

图1

②如果Yahoo数据中的State和Google数据中对应的Area level 1匹配的话,就认为这样的数据是二级可信的,得到4723个。

图2

③如果Yahoo数据中的Country Code 和Google数据中的Country short 匹配的话,就认为这样的数据是三级可信的,12271

图3

④如果对应机构的SourceData location 在Google_location的Viewport 范围内的话,则认为这种数据是 一级可信的,共4633个

图4

⑤把两个一级可信的数据进行整合,得到6311个数据。

图5

其中有1678个一级可信数据是原始数据中的一级可信数据没有的,我们把这部分抽出来,建议原始数据更改:

图6

⑥最后在综合考虑正确率和覆盖率上,我们综合了一份覆盖率99.2373%数据。

图7

最后手动测了100个数据,正确率还是很高的,至此,pair work工作就做完了,一路走来,有些坎坷,但每一个具体的过程都让我们学到了很多,两个人的结对编程对我来说最大的优势就是“快乐可以分享,困难可以分享,最重要是有两颗高度协调工作的大脑”。

我的队友谭明慧是一个大方,开朗,睿智的女孩,10系GPA大牛。虽然我们目前编程能力不强,但是我们的态度足够认真,我们肯花时间,我想这就是我们最后能顺利完成工作的最核心原因。我一直坚信,暂时的能力或许决定你现在走的快慢,然而态度却可以决定你能走多远。

SAM_0047SAM_0048

 

Written by Minglei Li

posted on 2011-08-31 12:22  meng-meng(萌萌)  阅读(1896)  评论(0编辑  收藏  举报