PPT小白请教下暗夜大神的小白受们,如何快递上手?

Datartisan 数据工匠 | 数据时代,匠心独运
- 八个 Python 数据生态圈的前沿项目
/ 八个 Python 数据生态圈的前沿项目
八个 Python 数据生态圈的前沿项目
Galvanize 最近在旧金山参加了 Dato 数据科学峰会,这次会议聚集了千余名来自业界和学术界的数据科学研究人员,他们交流并探讨关于数据科学、机器学习应用和预测模型的最新进展。
以下是我导师认为数据科学家将在未来数月乃至数年里使用的八个 Python 工具。
1. SFrame and SGraph
Dato 数据科学峰会中重磅消息之一是 Dato 将在 BSD 协议下开源SFrame 和 SGraph。SFrame (short for Scaleable Data Frame) 提供可以优化内存效率的柱状数据结构和数据框式的界面。SGraph 具有相同的特性但是它主要用于提高画图效率。这两种数据结构最大的优点之一在于它们使得数据科学家可以做基于外存的数据分析,而不需要把数据导入内存中。
这一消息传达出 Dato 公司支持 Python 数据生态圈发展的诚意,这是 Dato 和 Python 数据社区发展的一个转折点。自从 Dato 公司推出企业版软件后,数据社区用户通常都有类似的误解,他们认为 Dato 公司会利用免费版本绑定用户,用户最终还是得付费。通过将程序库转化为开源工具,我们看出这种小把戏并不是 Dato 公司的目标。如今这两个程序库已经变成开源工具,我们希望看到其他开发者(Pandas, 说的就是你)能够充分利用 SFrame 和 SGraph 从而解决内存限制的问题。
Bokeh 是一个不需要服务器就可以在网页浏览器中实现交互式可视化的 Python 程序库。Bokeh 可以处理非常大的数据集甚至是大数据流(比如实时光谱图),同时它还具有运算速度快、可嵌入和可视化新颖的特点。它对于想要快速便捷地创建交互式图表和数据应用的人来说非常有用。
Bokeh 真正表现出色的地方是大数据的可视化过程。与这些数据打交道的人应该感谢 Bokeh 致力于提升自身的性能。目前大多数的交互式工具都需要利用 Javascript 来实现,但是 Bokeh 仅利用 Python 一种语言即可实现。
Dask是一款基于外存的Python 调度工具。它通过将数据集分块处理并根据所拥有的核数分配计算量,这有助于进行大数据并行计算。Dask 是利用 Python 语言编写的,同时也利用一些开源程序库,它主要针对单机的并行计算进程。
Dask主要有两种用法。普通用户将主要利用 Dask 提供的集合类型,它的用法类似于 NumPy 和 Pandas 这样的常规程序库,但它内部包含了画图功能。另一方面, Dask 开发者可以直接制作图表。Dask 图表利用 Python 字典、元组和函数来编码算法,而且它不依赖于 Dask 所提供的集合类型。
目前 Python 生态圈中的许多程序库功能相近。但是Blaze, Dask 和 Numba 这些程序库共同作用于数据处理过程的不同层面上。类似的,你可以把 Blaze 看成关系型数据库管理系统的查询优化器,而把 Dask 看成执行查询的引擎。关于这一点,Blaze 优化了查询或者控制命令的符号表达式,而 Dask可以根据你的硬件情况来优化执行过程。
如果你是一个数据科学家,可能你每天都会使用 Python 。虽然 Python 在很多方面都很优秀,但是它也存在自身的局限。其中最大的一个问题在于 Python 不能很好地适应数据集大小的变化。它对于小数据集很有效,但是对于更大的数据而言,则需要利用抽样的方法来解决数据集的规模问题,这会影响到最终的研究结果。
Ibis 是 Cloudera 实验室的新项目,它试图为具有 Python 工作经验的数据科学家和工程师们提供一个适用于任何数据规模的数据分析框架。这反映出单机版的 Python 在功能和可用性上并没有妥协,可以在处理大数据时提供相同的交互体验和全保真度分析。
Ibis 允许使用 100% 的端到端用户工作流,也整合了现有的 Python 数据生态圈(Pandas, Scikit-learn, NumPy 等)。Ibis 目前还是预览版,未来它将加入更多的功能,比如整合高级分析工具、机器学习方法和其他高性能的计算工具。
抓取网页数据时经常碰到一个问题,许多网站使用大量的 JavaScript 代码。网页抓取工具很难执行 JavaScript 代码,所以你往往只能得到原始 HTML 数据。由 Scrapy 鼻祖 ScrapingHub 所创建的 Splash 是一种 JavaScript 渲染服务,它通过 Python 的 Twisted 和 QT 来实现。这是一个带有能够并行处理多个网页的轻量级网页浏览器,它可以执行自定义 JavaScript 代码并利用关闭图片或广告屏蔽的功能来提升渲染速度。
Petuum 是一个分布式机器学习框架,它试图为大规模机器学习问题提供一个通用算法和系统接口。它提供了解决大规模机器学习数据集和参数太大问题的分布式编程工具。Petuum 专门为机器学习设计,这意味着它可以利用数据的各种统计性质来优化性能。
Petuum 具有多项核心功能:B&sen 是一个为数据并行机器学习算法设计的关键值存储仓库。它利用 SSP (Stale Synchronous Parallel )一致性模型,该模型允许在不牺牲算法正确性的情况下使用异步功能。另外一个功能是 Strads,它是一个为模型并行机器学习算法而设计的调度工具。它执行了关于机器学习更新操作的小粒度调度,而且优先计算的部分程序需要避免可能损害性能的不安全并行操作。
Apache Flink 是可扩展的批处理和流处理的数据处理平台。Flink 的核心组件是一个提供数据分布、通信和容错功能的流数据处理引擎。它和 Apache Spark 非常相似,因为它们的主要目的之一就是替代 Hadoop 的 MapReduce 功能。
虽然 Spark 和 Flink 的 API 非常相似,但是两者处理数据的方式存在不同之处。当 Spark 处理流式数据时,它实际上利用单位时间内的数据片集合进行小批量处理。这可以视为流处理的近似过程。通常情况下它表现良好,但是在对延迟要求较高的情况下会引发一些问题。另一方面,Flink 是一个可以实现批量处理的流处理框架。换句话说,除了做简单的工作(批量处理)和对较难的工作(流程处理)以外,Flink 既可以解决较难的工作,也可以处理简单的任务。
基于网页的仪表板(dashboards)是分享数据科学发现的最直观方法之一。 Shiny 包给使用 R 语言的数据科学家提供了一个不必通过编写Javascript, HTML 和 CSS就可以构建交互式网页应用程序的框架,但是在 Python 中却没有类似的功能。 Pyxley 就相当于 Python 版的 shiny ,它简化了网页应用程序开发的过程并可以通过 Flask, PyReact 和 Pandas来加入自定义的 Javascript 代码。
原文链接:&
原文作者:Bo Moore
翻译:Fibears
由 Editor 于 2015 年 08 月 31 日 发布在&&&&&&&&Python作为一种成熟的脚本语言,发展势头迅猛,长期徘徊在“”排行前5的位置,在脚本语言中仅次于php。通过Python,开发人员可以快速试验一个想法、研究一种对象属性或不同算法,而无需编译、执行和测试任何代码。正是因为跨平台、简洁、优美的特点,它也如同GIS应用渗透于各各个行业一样,渗透在科学计算的各个领域。在GIS领域,几乎可以说开源言必称Python;而ArcGIS则将Python称为the scientific programming language for GIS:ArcGIS Server的猛将Geoprocessing Service依赖于Python,从9.4将Python IDE集成到ArcMap中也可见一斑。&&&&&&&&前一阵,不过还是通过动手完成一个实例,来看看它在ArcMap中的数据快速处理能力吧。描述:上传到的照片都会有位置信息(经纬度坐标),有些朋友非常可敬,上传的照片数量可达上万张。分析一下某个用户拍照的活动范围,是件有趣和有意义的事情。思路:1、利用,获取指定用户的所有照片信息;2、将关心的信息,比如作者、照片名称、照片文件链接提取出来,并将其存储到地理数据库中。&&&&&&&&第一步:获取照片信息。先看一下Panoramio的API,REST风格,返回JSON字符串。比如通过,即可按点击次数排序获得世界范围内所有受欢迎的照片。{
"count": 773840,"photos": [
"photo_id": 532693,
"photo_title": "Wheatfield in afternoon light",
"photo_url": "/photo/532693",
"photo_file_url": "/photos/medium/532693.jpg",
"longitude": 11.280727,
"latitude": 59.643198,
"width": 500,
"height": 333,
"upload_date": "22 January 2007",
"owner_id": 39160,
"owner_name": "Snemann",
"owner_url": "/user/39160",
"photo_id": 505229,
"photo_title": "Etangs près de Dijon",
"photo_url": "/photo/505229",
"photo_file_url": "/photos/medium/505229.jpg",
"longitude": 5.168552,
"latitude": 47.312642,
"width": 350,
"height": 500,
"upload_date": "20 January 2007",
"owner_id": 78506,
"owner_name": "Philippe Stoop",
"owner_url": "/user/78506"
&&&&&&&&Panoramio文档说有773840张,但是JSON里的count只有338张,搜其论坛,发现这是。当然,为了安全起见,一次请求最多只能返回100张照片的信息,Python刚好来完成若干个“100”的拼装任务。代码如下:import arcgisscripting,json,urllib,os,threadinglphotos=[]#list saves all photo json objectslock=threading.Lock()
#function to construct the panoramio request url and retrieve the corresponding photos as json array#for eg: /map/get_panoramas.php?order=upload_date&set=8;from=0&to=20&minx=108.&miny=33.&maxx=109.&maxy=34.&size=medium#set:
public (popular photos); full (all photos); user ID number#size: medium (default value) ; mini_squaredef retrievephotos(set,fromindex,toindex,size):
global lphotos,gp
#extent=r"&minx=108.&miny=33.&maxx=109.&maxy=34."
extent=r"&minx=-180&miny=-90&maxx=180&maxy=90"
url=r"/map/get_panoramas.php?order=upload_date&set="+set+"&from="+str(fromindex)+"&to="+str(toindex)+extent+"&size="+size
jsonresult=json.read(urllib.urlopen(url).read())
raise Exception,"get panoramio result error"
photos=jsonresult["photos"]
if len(photos)&toindex-fromindex:
print "warning: can't get photos from server "+str(fromindex)+"--"+str(toindex)
#gp.addwarning("warning: can't get photos from server "+str(fromindex)+"--"+str(toindex))#typeerror:'no type' object is not callable
for photo in photos:
lock.acquire()
lphotos.append(photo)
lock.release()
return jsonresult["count"]#the total of photos of the specified set
#use multithread to retrieve photos, the number of threads=(end-start)/100#start: 0 in usual#end: the total of photosdef getphotolist(set,start,end,size):
list=[start]
while list[-1]&end:
list.append(list[-1]+100)
threads=[]
gp.addmessage(str(len(list))+" threads has launched...")
for i in list:
threads.append(threading.Thread(target=retrievephotos,args=(set,i,i+100,size),name=str(i)))
for t in threads:
for t in threads:
t.join()#suspend the parent(main) thread until this thread is over&&&&&&&&在运行过程中,发送请求(请求100张照片的信息)后等待服务器响应会花费一些时间,于是就采用Python中的多线程,来同时发送多个请求。Threading是Python的一个标准模块,麻雀虽小,五脏俱全。单线程请求时,5000张照片的结果大约需要8分多钟,多线程请求时需要只需要40多秒即可。请求全部被相应后,即完成了所有照片信息的拼装工作:结果存储在类型为List的lphotos变量中。List是Python中使用最广泛的变量之一,灵活好用,一个顶5个~不过这里有个问题没有解决:在子线程的函数中,调用geoprocessor的addmessage()方法会报错(代码中注释掉的一句),非目前能力所能解决。&&&&&&&&题外话:上述多线程的工作也可以用并行计算来解决,这里有,供大家学习。随着多核CPU的普及(ps:),并行计算将会成为开发人员的新宠,也说明了这一点。至于并行计算和多线程之间的区别,援引科班出身的同学胖胖鼠的话:
两者针对性不同。多线程技术是操作系统中的概念,是软件的概念。指进程中的一部分。以前并行计算主要更侧重硬件CPU,现在泛指同时使用多个计算资源解决问题。我感觉两者都用到了并发性并行性的概念。
个人感觉可简单理解为,并行计算是对细枝末节的多线程技术更优的抽象,与一个CPU里的多线程不同,它能利用多个CPU(不同服务器)资源,回归到网格计算的概念。下面继续主题。&&&&&&&&第二步:保存数据。之后我们便可以利用geoprocessor完成数据处理工作。首先通过调用Toolbox中的工具创建存储数据的FeatureClass,并调用工具添加相应的字段:#create the 9.3 geoprocessorgp=arcgisscripting.create(9.3)gp.OverwriteOutput=Truemyuserid=gp.getparameterastext(0)#"305320"gp.Workspace=gp.getparameterastext(1)myfile=os.path.basename(gp.getparameterastext(2))
#create 2 result featureclassestry:
gp.addmessage("creating featureclasses...")
sr=gp.CreateObject("SpatialReference")
sr.Createfromfile(r"E:Program FilesArcGISCoordinate SystemsGeographic Coordinate SystemsWorldWGS 1984.prj")
gp.Createfeatureclass(gp.workspace,myfile,"POINT","","","",sr)
gp.Addfield(myfile,"owner","TEXT","","",100)
gp.Addfield(myfile,"title","TEXT","","",100)
gp.Addfield(myfile,"photourl","TEXT","","",150)
#gp.Createfeatureclass(gp.workspace,xafile,"POINT",myfile,"","",sr)
del srexcept:
gp.adderror("creating featureclasses error")
raise Exception,"creating featureclasses error"
#push the photos into the featureclassgp.addmessage("dealing my photos")dealphotos(myuserid,myfile)&&&&&&&&最后两句便是整个功能的入口点了。dealphotos函数如下:#function to push photos into featureclassdef dealphotos(set,fc):
photoscount=retrievephotos(set,0,1,"medium")
gp.addmessage("start to retrieving photos...")
getphotolist(set,0,photoscount,"medium")
gp.addmessage("retrieving photos completed")
cur=gp.InsertCursor(fc)
descfc=gp.Describe(fc)
print "begin insert features..."
gp.addmessage("begin insert features...")
for photo in lphotos:
row=cur.NewRow()
pnt=gp.CreateObject("POINT")
pnt.x=photo["longitude"]
pnt.y=photo["latitude"]
row.Setvalue(descfc.shapefieldname,pnt)
row.Setvalue("owner",photo["owner_name"])
row.Setvalue("title",photo["photo_title"])/post-edit.g?blogID=8;postID=1112294#
row.Setvalue("photourl",photo["photo_file_url"])
cur.InsertRow(row)
print "insert features completed"
gp.addmessage("insert features completed")
del cur,descfc&&&&&&&&好啦,Python部分结束,添加到ArcMap中,便可成为一个Script Tool,与他人分享了。运行界面:&&&&&&&&运行结果:&&&&&&&&似乎不明显,那就利用空间分析中的Point Density工具抽象一下位置分布信息:&&&&&&&&也可以利用Model,将两部分连接起来,做成一个工具来用:&&&&&&&&有了地理数据,就可以继续在其他平台下进行处理和展示了:最后总结一下标题:通过Python,不需要一个stand-alone的程序,就可以快速试验一个想法。btw:附上最近google map tile的获取方法:public override string GetTileUrl(int level, int row, int col)
int servernum = (col + 2 * row) % 4;
string sec2 = "&s="; // after &zoom=...
string secword = "Galileo";
int seclen = ((col * 3) + row) % 8; // corrected from int seclen = ( col + 3 * row ) % 8;
sec2 += secword.Substring(0, seclen);
//google maps map:
///vt/lyrs=m@114&hl=zh-CN&x=13&y=5&z=4&s=Gali
///vt/lyrs=m@114&hl=zh-CN&x=13&y=6&z=4&s=Galil
///vt/lyrs=m@114&hl=zh-CN&x=13&y=8&z=4&s=Galileo
string baseUrl = "http://mt" + servernum.ToString() + "./vt/lyrs=m@114&hl=zh-CN&x=";
string url = baseUrl + col.ToString() + "&y=" + row.ToString() + "&z=" + level.ToString() + sec2;
////google maps satallite
/////kh/v=49&x=3&y=5&z=4&s=Galile
//string baseUrl = "http://khm" + servernum.ToString() + "./kh/v=49&x=";
//string url = baseUrl + col.ToString() + "&y=" + row.ToString() + "&z=" + level.ToString() + sec2;
Recent Posts
- 771,025 views - 486,732 views - 83,029 views - 72,667 views - 68,190 views - 61,380 views - 59,042 views - 37,889 views - 37,772 views - 35,477 viewsCopyright & 2017 .
All Rights Reserved.
沪ICP备号-1&Python 并行化介绍与演示
Python 并行化介绍与演示
视频太卡?试试切换线路
本课时介绍 XPath 并讲解其环境的配置。
本课时简单介绍如何使用 XPath,从而大大简化网页内容提取。
本课时介绍使用 XPath 提取一些特殊的网页元素。
本课时简单介绍 Python 的并行化操作,并配合 Requests 获取多个网页的源代码。
本课时使用并行化配合 XPath 实现高效率的多线程百度贴吧爬虫编写。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [Python 并行化介绍与演示]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [Python 并行化介绍与演示]
服务热线:400-678-8266

我要回帖

更多关于 腹黑大神赖上伪小白 的文章

 

随机推荐