十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
因为 Python 中臭名昭著的 GIL。
10年的全州网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整全州建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“全州网站设计”,“全州网站推广”以来,每个客户项目都认真落实执行。
那么 GIL 是什么?为什么会有 GIL?多线程真的是鸡肋吗? GIL 可以去掉吗?带着这些问题,我们一起往下看,同时需要你有一点点耐心。
多线程是不是鸡肋,我们先做个实验,实验非常简单,就是将数字 “1亿” 递减,减到 0 程序就终止,这个任务如果我们使用单线程来执行,完成时间会是多少?使用多线程又会是多少?show me the code
单线程
在我的4核 CPU 计算机中,单线程所花的时间是 6.5 秒。可能有人会问,线程在哪里?其实任何程序运行时,默认都会有一个主线程在执行。(关于线程与进程这里不展开,我会单独开一篇文章)
多线程
创建两个子线程 t1、t2,每个线程各执行 5 千万次减操作,等两个线程都执行完后,主线程终止程序运行。结果,两个线程以合作的方式执行是 6.8 秒,反而变慢了。按理来说,两个线程同时并行地运行在两个 CPU 之上,时间应该减半才对,现在不减反增。
是什么原因导致多线程不快反慢的呢?
原因就在于 GIL ,在 Cpython 解释器(Python语言的主流解释器)中,有一把全局解释锁(Global Interpreter Lock),在解释器解释执行 Python 代码时,先要得到这把锁,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。
因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换、锁机制处理(获取锁,释放锁等),所以,多线程执行不快反慢。
什么时候 GIL 被释放呢?
当一个线程遇到 I/O 任务时,将释放GIL。计算密集型(CPU-bound)线程执行 100 次解释器的计步(ticks)时(计步可粗略看作 Python 虚拟机的指令),也会释放 GIL。可以通过设置计步长度,查看计步长度。相比单线程,这些多是多线程带来的额外开销
CPython 解释器为什么要这样设计?
多线程是为了适应现代计算机硬件高速发展充分利用多核处理器的产物,通过多线程使得 CPU 资源可以被高效利用起来,Python 诞生于1991年,那时候硬件配置远没有今天这样豪华,现在一台普通服务器32核64G内存都不是什么司空见惯的事
但是多线程有个问题,怎么解决共享数据的同步、一致性问题,因为,对于多个线程访问共享数据时,可能有两个线程同时修改一个数据情况,如果没有合适的机制保证数据的一致性,那么程序最终导致异常,所以,Python之父就搞了个全局的线程锁,不管你数据有没有同步问题,反正一刀切,上个全局锁,保证数据安全。这也就是多线程鸡肋的原因,因为它没有细粒度的控制数据的安全,而是用一种简单粗暴的方式来解决。
这种解决办法放在90年代,其实是没什么问题的,毕竟,那时候的硬件配置还很简陋,单核 CPU 还是主流,多线程的应用场景也不多,大部分时候还是以单线程的方式运行,单线程不要涉及线程的上下文切换,效率反而比多线程更高(在多核环境下,不适用此规则)。所以,采用 GIL 的方式来保证数据的一致性和安全,未必不可取,至少在当时是一种成本很低的实现方式。
那么把 GIL 去掉可行吗?
还真有人这么干多,但是结果令人失望,在1999年Greg Stein 和Mark Hammond 两位哥们就创建了一个去掉 GIL 的 Python 分支,在所有可变数据结构上把 GIL 替换为更为细粒度的锁。然而,做过了基准测试之后,去掉GIL的 Python 在单线程条件下执行效率将近慢了2倍。
Python之父表示:基于以上的考虑,去掉GIL没有太大的价值而不必花太多精力。
使用python源文件的几种方法\运行python脚本:
a. windows下打开shell(DOS提示符,命令行,cmd):
CMD命令进入某个目录
如在window 下cmd运行python源文件 xxx.py(注意这个xxx.py在C盘的python27目录下,若是其它盘的目录,就进入其它盘的目录来运行xxx.py):
打开cmd
输入c: 回车
输入cd c:/python27/ 回车 (ps:cd后面没有冒号!,如果需要在dos下查看带有空格的文件夹,要给文件夹加上引号如:CD "Program Files"/PHP )
输入python xxx.py 或者 xxx.py 回车
这是在找到文件路径下去执行某文件,直接在cmd,python环境下输入python xxx.py 会运行语法错误,不知是否是系统的环境变量没有添加好?
在linux下参见vamei :python 基础
另附:cmd命令
1.进入上一层目录 CD ../
2.显示目录下的文件及了目录 dir
b.Linux下运行python源文件:
$ python xxx.py
c.在IDLE下运行python源文件
点击开始-程序-Python 2.7-IDLE(Python GUI)
点击file-open-xxx.py
ctrl+F5
quit()是退出程序
d.在IDLE里,可以通过os执行系统命令,执行python源文件:
import os
os.system('python c:/xxx.py')
e. 直接双击xxx.py
双击xxx.py,窗口一闪而过。很像VC运行时的Ctrl+F5对不对?那怎么办呢?(非windows系统可以跳过,不用此技巧)
这里我们在代码里加入一句话raw_input(),就可以。
如何做好基于地图的数据如下:
这个地图是Audubon鸟类和气候变化报告中的一部分,预测了季节变化的区域,黄色代表该地区处于夏季,蓝色代表冬季。
地图具有神奇的能力,可以给我们展示不能直接看到的东西,例如Curiosity在火星上的路径,北达科他州地下水力压裂井的混乱,加州未接种疫苗儿童的簇状分布。对于记者来说,地图既是一个强大的数据可视化工具,也是一个强大的报告工具。
“地图是信息密度最大的数据通信方式,”洛杉矶时报的数据可视化主管Len De Groot说。因为人们在日常生活中就使用地图,所以能直观理解地图。Len De Groot认为“因为人们已经理解基本的地图,你可以用地图做很多事情,不像散点图那么难以被理解。”
地图也可以揭示不那么显而易见的关系和故事。在21世纪中期,当时De Groot在南佛罗里达的一个团队,制作联邦应急管理局在几个飓风,包括2004年弗朗西斯飓风袭击后的花费。“我们开始时没有任何计划,只是制作钱花在哪里的标准事项,”他说。“让我们惊讶的是来自迈阿密的一个邮编,我们发现这个地区损伤很少,但是支出却在上升。”于是我们通过报纸开展大规模的调查,发现了大面积的欺诈,这使得我们得到了普利策奖提名,并最终让联邦应急管理局改变了政策。
对地图感兴趣的记者非常幸运,由于(大部分)免费和开源软件的增加,地图比以往任何时候都更容易制作,任何一个拥有电脑的人可以在不到一个小时的时间制作不错的地图。然而,做出很好的地图并不是那么容易,它需要更多的思考,并愿意学习一些技术技能。这里有一些要记住的注意事项,以及一些如何开始的建议。
是否要地图
国家地理的高级图形编辑Virginia Mason认为,给定的数据集可以制作地图,不意味你应该制作地图。关键问题是,地理位置对你要讲述的故事是否很重要。例如,一个即将被讲述的故事涉及到农业部的一个挑选狼来保护农场动的物计划。图形数据团队拥有每个州多少动物被杀的数据,所以他们第一个念头就想到地图,用阴影来表示死亡动物的数量。但他们很快就改变了主意。“真正重要的不是在美国的地方,而是地方的名字。”梅森说。所以他们决定创建一个图表,一眼就知道看到哪些州打死的狼最多。
如果是在地图上显示同样的数据,读者将必须浏览地图,然后用不同州的颜色或者阴影来做比较。这是不是我们的大脑特别擅长的,一个自学成才的地图制作者和BuzzFeed新闻的记Peter 。很多感知科学家在研究,我们的大脑善于区分哪些视觉特性。Aldhous说,已经发现的例子有:相比区分区域、颜色、或者饱和度,我们的大脑在擅长比较线条的长度。所以,如果要比较的数字是点,条形图是一个可靠的选择。(想要更好的了解使用感知科学做出更好的信息图,请翻阅Alberto Cairo的书——《功能艺术(The Functional Art)》)。
国家地理图形的梅森和她的同事们,制作了一张地图,或者一系列地图,为了另一个保护区故事——2013年对非洲狮子的专题。地图显示了狮子的历史分布,涵盖了非洲的大片,以及现在他们生存的分散的小区域。她说,在这种情况下,地理位置很重要——现在狮子几乎全部生存在野生动物园或者其他野生动物保护区。而且,大多数读者不像了解美国50个州那样熟悉非洲地理。“如果你做一个野生动物保护区狮子数量的图表,人们不会知道这些保护区在哪里,”梅森说。

国家地理2014年出版了这张地图,显示了狮子的历史分布,涵盖了非洲的大片,以及现在他们生存的分散的小区域。
你的观点是什么?
宾夕法尼亚州立大学的制图学教授安东尼·罗宾逊说,一旦你决定了你想要的是地图,下一个问题则是你想要通过你的地图传达什么观点。然后你需要花一些时间思考如何设计地图,让地图的每一部分来强调你的观点,并且其他信息没有丢失。(罗宾逊还在MOOC上开了制图课,已经有超过100000的人选择了这门课——它是一个很好的导论课程,但后续的课程还尚未安排)。
“我看到一个共同的地方是卫星或类似选举地图的航拍图像,”罗宾逊说。如果地图上的点是谁投票给谁,那么地表覆盖是无关紧要的,通常可以用中立的白色或灰色背景。
罗宾逊说,另外一个陷阱是太多杂乱。地图软件可以设置每一条小路、河流和知名城市,你要抵抗想包括所有这些的冲动,即使你必须违背软件的默认设置或使用Adobe Illustrator等类似的程序手动删除一些特征。
下面这幅来自纽约时报的地图,是一个很好的有强烈视觉层次结构地图的例子。

这幅纽约时报的地图把海洋和陆地细节弱化到了最小,记录了难民的逃难运动。
红线显示的是世界各地的难民的逃难运动,白色的海洋和灰色陆地只是足以提供参考的可见。“我们使用的是一张卫星图像,但我们拿走了所有的颜色,这样红色箭头可以凸显出来,”地图制图者和图形编辑蒂姆•华莱士说。这个地图还演示了如何做一个可以揭示新故事的地图——对比最近媒体关注难民在绝望中试图穿越地中海和安达曼海域,地图显示了非洲惊人的移民数量。
选择合适的投影
2003年,《经济学人》出版了一张地图和一篇文章说明来自北朝鲜导弹攻击的威胁。他们使用一个标准的墨卡托投影和同心圆来暗示存在潜在伤害的地区。不对!墨卡托投影严重扭曲了两极附近的距离,所以真正达到这些区域的来自平壤的导弹距离将大非常多。很快,杂志出版了修正版,和校正后的地图。(点击这里查看两个版本)。
选择错误的投影是菜鸟级别的错误。问题很简单:地球是圆的,而地图是平的。投影是根据数学公式强制把圆的地球映射到平面的地图上。每一种投影都是扭曲的面积、形状、方向和距离的组合,都有其优点和缺点。墨卡托,是为16世纪航海图而设计,很擅长保持方向。等积方位投影,保留了相对于中心点的距离,应该也是北朝鲜地图的一个不错的选择。如果保留区面积很重要,比如描绘气候变化对鸟类栖息地的影响,Albers圆锥等面积投影是一个不错的选择。

规范化你的等值线图
当我第一次在2013年一个制图会议上见到安东尼·罗宾逊,他身上别了一个别针写着:“规范化你的等值线图”。我当时不知道这是什么意思,后来才发现它是非常重要的建议。
等值线地图到处可见。使用颜色或阴影来映射变量——从选举结果到作物产量到癌症发病率的任何变量。但是如果你不小心,很容易产生误导或无意义的地图。以癌症变量为例,如果你把美国不同地区的癌症病例映射到地图上,你可能会看到东海沿岸和南加州都是深色大斑点,中西部只有几个小气泡。这是因为人多分布在东海沿岸和南加州。你也许制作了一幅人口地图,更有趣的是,癌症病例数在每100000居民时高于或低于正常例数。标准化(在这种情况下,通过人口))允许读者进行有意义的比较。在其他情况下,您可能需要通过面积来标准化,比如空气污染来源的地图可能需要标准化来显示每平方米工厂或汽车的数量。
颜色也很重要
没有什么比一个像你经常在天气图中看到的彩虹颜色方案,让专业地图制作者更沮丧的了。罗宾逊说,“这就像在各种食物上放培根的趋势”。“太没有道理了”。彩虹调色板乍看也许还挺好看的,但是很难是制作地图的好选择。特别是像温度这样的连续变量,将是非常糟糕的选择。如果红色比蓝色代表更温暖,那为什么紫色(红色和蓝色的混合)比蓝色的冷?为什么2摄氏度的温差有时对应一个从浅绿到深绿的微妙变化,有时又突然从绿色变成黄色?更直观的配色方案会用深色调的单一颜色来代表更高的值。
罗宾逊在宾夕法尼亚州立大学的同事辛迪·布鲁尔,用她职业生涯的大部分时间应用感知科学到制图中的颜色研究。她的这个网站,Color Brewer,对于初学者来说是一个很好的资源。它迫使你去思考你地图中的数据,对于异常值——低于或高于的地区,如平均降雨量,Color Brewer可能建议用从从棕色到绿色,中间用中性白色的配色方案。对于不同类别的数据,如不同地区的主要入侵物种在,该网站将建议使用很容易分辨的不同颜色组合。它也建议你限制使用不超过12个分类——更多的类别会使读者很难区分这些颜色。Color Brewer同样提供可以让色盲人可以识别,或在纸上和屏幕上显示效果都很好的颜色方案让您选择。

在最近的一个Katrina 飓风年度报告中,BuzzFeed新闻的科学报道员Peter Aldhous使用来自一个NOAA电脑模型(左图)的风暴潮数据,并试图“使它看起来不像油漆工厂的入侵之旅”。右图是他的温和但更具直观可读版本。
准备开始
仅仅几年前,开始使用数字地图,就意味着要深入到各种被自然资源管理、城市规划者,以及其他专家者使用的复杂地理信息系统(GIS)。如今使用数字地图要容易得多了,CartoDB就是一个很好的选择。这个在线地图制作工具允许你上传数据,简单的点击式操作就可以生成交互式地图。如果要制作更复杂的地图,或定制你想要的地图,你需要学习一些编程。你不会一夜之间成为一个专家,但你可以迅速捡起足够有用的知识,特别是如果你利用CartoDB为记者设计的在线课程。使用价格不同决定了你能上传的数据有多少——免费版本允许你上传足够使用的50MB。
在我自己第一次努力制作地图时,我用了一个更简单的选择:ArcGIS on line ,来自是微软的GIS地图软件Esri。记者可以请求通过Esri的媒体关系团队免费获取。单击式界面可以轻松获取到人口普查数据和其他公共数据库,并包括几个可以将照片和文字组合成“故事地图”的模板,如我曾做过的一个佛罗里达野生动物灭绝的故事。免费版提供的个性化和数据分析比CartoDB少,但它是对于讨厌代码者是一个很好的选择。调查记者和编辑最近发布了一个有的视频集介绍一些地图制作和数据可视化工具。
CartoDB、Esri和一些其他的地图制作软件经常在记者发布会开相关讲座,使用这些软件的记者也会开一些讲座。和De Groot曾在加州大学伯克利分校新闻学院的骑士数字媒体中心开过一个地图制作讲座。Aldhous也曾在IRE的年会上教记者们制作地图,在IRE这个组织,他培养了制作地图和数字新闻的广泛兴趣。“他们谈论很多关于数据框架思维,你不仅仅为了这个故事我要采访谁,你还要考虑怎样使用数据来找到一个故事或者用数据带入故事背景”他说。“地图是很重要的一部分。
本文作者:Greg Miller
来源:51CTO
原文链接:
打开CSDN,阅读体验更佳


参与评论 请先 登录 后发表或查看评论
最新发布 高德地图+echarts 地图数据可视化
高德地图+echarts制作散点图
继续访问

【R语言】地图信息数据可视化
最近需要对国内疫情分布情况绘制可视化地图,查找资料R中地图绘制思路,显示在R中绘制地图主要有三种方式:第一种是利用某些特定R包中自带的地图数据进行绘图;第二种从其他途径获取地理信息数据,调用相应的软件包对数据进行读取,进而绘图;第三种是基于某些供应商的tiles与Google、NASA、高德等网络在线地图相关联,调用其地图数据为自己绘图所用。下面进行举例说明: 1.【绘图前准备】爬取丁香园每日疫情数据 ##加载程序包,设置路径## setwd("f://data") library(rvest) libra
继续访问

地图可视化工具有哪些,基于地图的数据可视化软件
做数据的人都知道,每次做报告或做图表,大家最喜欢的莫过于数据可视化,可视化中最喜欢的莫过于数据地图。谁让大家都是视觉动物,而地图可视化最能唬人。 但是如何制作地图可视化,本文来分享一些技巧。 目前市场上,能够实现地图可视化的工具有很多,可以分为编程类、平台类和软件类三种: 编程图表类:Matlab、Python、Echarts 地理平台类:Google Fusion、高德Maplab 操作软件类:Excel、Smartbi等BI工具 什么是地图可视化? 简单点说,地图可视化就是将地理数据转换成可视化形态,通
继续访问

百度地图数据可视化
可以到百度地图个性化地图去配置自己想要的颜色样式可以使用模板,也可以自己进行自定义,然后点击发布样式点击发布后会获得一个样式ID,将其复制下来styleId。
继续访问

基于百度地图的数据可视化,包括大量数据的标绘以及热力图的插入
在日常的开发工作中经常可以遇到地图的相关应用,但是大部分的问题我们都可以通过查询相关的地图api接口就可以得到我们想要的结果,无非会在数据处理以及一些基础的函数的问题,但是如果想在地图上实现一些大量数据的标绘制的时候,问题就出现了。经过测试,百度地图(本文中的地图均指百度地图)在实现基于图片的标绘物品的时候,在200个点属于完美性能(PC,移动端未测试)一旦超过2000个标绘物的时候就会出现明显的卡顿,而超过5000的时候则会出现浏览器直接奔溃的情况。经过多方查找且改进,我找到了基于百度地图canvas的额
继续访问

手把手教你制作一目了然的可视化地图
可视化是一种常见的数据可视化方法。利用数据可视化的方法,分析对与地理位置有关的信息,并将其显示成真实的地图,使其更加清晰,便于人们对其进行分析,从而帮助做出正确的判断。
继续访问

数据可视化之地图
1. 在项目中引入Echarts 在index.html文件中引入echarts.min.js文件 在main.js文件中挂载Echarts到vue原型 在组件中通过axios获取到地图的矢量数据,由于地图矢量数据不是在服务器存储,而是在本地存储的,所以要在组件中另外引入axios请求地图矢量数据,并且要调用Echarts的registerMap方法,将地图的矢量数据注册给全局的Echarts对象,然后配置geo(只有地图配置geo,别的图表都是配置series) 此处需要注意的是css
继续访问
酷炫的可视化数据地图都是咋做的?10分钟学会
*全文干货较多,建议收藏 相信不少小伙伴都看到过大佬做的可视化大屏中有地图呈现,将数据情况结合地图共同展现,既有观赏性,又更加直观。 其实想要完成一个可视化的地图,乃至多层地图展现并不难,五分钟永洪君包你学会! 想要完成一个酷炫的可视化地图,需要借助永洪科技的免费BI产品——Yonghong Desktop。 桌面智能数据分析工具_Yonghong Desktop数据分析软件-永洪科技 首先,我们可以制作一个比较基础的可视化数据地图↓ 实现方法 在Yonghong Desktop导入数据后
继续访问

高效获得准确的中国地图数据并进行可视化
[2022-05-18日更新] getchinamap包更新 不知道是不是gitee疯了,把我在上面托管的一个数据给禁止了,导致我这个包用不了了。这里做一次更新。 目前建议所有人升级getchinamap包到1.0.6版本。之前的版本都用不了了。 本次包主要修改了下载器初始化的步骤,具体查看下方的步骤。 介绍 因为获得中国地图数据难的问题,解决中国地图数据不准确、不全面问题。我发布了一个python,让你使用中国地图更加方便。 效果图 from getchinamap.getchinamap impor
继续访问

mapbox+Python实现基于地图交互的交通数据可视化
!!!mapbox做可视化不要钱,不用科学上网,还挺好看
继续访问

拿走不谢,数据可视化地图制作教程
地图,是一种基于地理位置使用不同深浅的颜色来表示不同范围的分布情况的可视化图形,直观的展现各区域分析指标的分布。它也是数据大屏可视化展示的重要图形类型之一。 比如下面大屏,以全国销售分析地图作为中心显示不同销售省份的销售额,黄色旗子越大,销售额越大。 地图通常包括染色地图、散点地图、航线图、百度地图等等类型。比如染色地图会使用区域颜色的深浅来展示数据的大小,散点地图会使用点的大小来标记数据。地图还会根据情况实现区域地图钻取,比如从全国地图钻取到省份地图,从而实现数据的关联分析,一步步挖掘出数据展示的底层
继续访问

浅谈地图可视化
前言 地图可视化在我们生活中无处不在,开车导航,寻找某个地方需要导航等,下面浅谈一下地图的一些知识及应用。 当前互联网地图的坐标系现状 地球坐标 (WGS84) 国际标准,从专业GPS 设备中取出的数据的坐标系 国际地图提供商使用的坐标系 火星坐标 (GCJ-02)也叫国测局坐标系 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系 国家规定: 国内出版的各种地图系统(包括电.........
继续访问

进阶篇:分享三种常用地图可视化图表
在上一期推文中小编手把手教大家如何利用地图编辑器制作简单的地图区域。今天我们接着给大家分享三种进阶版的地图类型,在平时的工作中使用的频率也是很高的噢! 今天要介绍的地图类型主要有三种:区域地图、散点地图、热力地图,如下图所示: 一、区域地图 区域地图,是一种基于地理位置使用不同深浅颜色来表示不同分布情况的可视化图形,它能直观的展现各区域分析指标的分布。 例如下图是一个销售市场的区域地图,它显示了不同销售省份的销售额,颜色越深,表示销售额越大。 一般来说,采用地
继续访问

地图可视化-点地图
点地图 在数据可视化中,地图可视化是最常用的图表之一。 点地图,用于在地理坐标系空间内,将数据展现为形象的几何图形点,展示地理区域内的数据分布情况。 如下图展现的是一软件在全国范围内某个区域(省/市/县级)的激活使用次数。 当软件在某个区域使用激活时,会通过webapi上传当前软件的app_id、ip_address,后台根据IP地址判断出地理行政位置,从而记录不同区域的使用记录数据。 点击查看 示例视频 或扫码观看: 用户访问: POST
继续访问

2022,这些地图可视化,够你用一整年了(附可视化素材)
在数据可视化中,地图可视化是最常用的高级图表之一。很多人以为可视化地图这么高大上做起来肯定不容易,但如果用上FineReport或FineBI,制作起来其实并不难! 下面帆软君就给大家介绍,用FineReport都可以做出哪些精彩的地图可视化吧!(文末有惊喜) 1 普通地图 1、区域地图 区域地图是按照国家、省市行政区划分,用来展现地理信息,以及与地理位置有关的信息。区域地图适用于带有地理位置信息的数据集展现,可以用颜色深浅来直观展示指标的大小。详情请参见:区域地图 2、点地图 点地图是通过定位经纬度,用
继续访问

热门推荐 Echarts数据可视化series-map地图,开发全解+完美注释
mytextStyle={ color:"#333",//文字颜色 fontStyle:"normal",//italic斜体 oblique倾斜 fontWeight:"normal", //文字粗细bold bolder lighter 100 | 200 | 300 | 400... fontFamily:"sans-serif", //字体系列
继续访问
手把手教你实现地图可视化分析
地图是指使用地图的形式显示数据在不同地理位置的分布趋势或规律,区域标识表示地理维度的数据,指标表示具体数值。 在商业数据分析中,有大量数据是与地理位置相关的,这种数据用地图进行地图可视化分析更直观形象。地图又分成很多种类,从指标数据展现形式上可以分析散点地图、热力地图、区域地图、航线图、百度地图,从展现效果又可以分为2D效果和3D效果。此外,根据图形区域还可以分为全球地图、中国地图、其他各大洲地图。 Smartbi通过内嵌Echarts图形来实现多种多样地图的展示,上述区域地图、百度地图、热力地图、散点地
继续访问

地图可视化框架新进展(1)
1. Uber可视化框架Uber目前有一整套地图可视化框架,有: deck.gl :高性能WebGL地理图层和信息可视化用例 react-map-gl:用于Mapbox GL的React组件(与deckgl无缝集成) react-vis:一套基于React的图表组件。 luma.gl:引入WebGL2特性的升级版deckgl. 搞了这么多,也不搞一个三维球的。。目前react-map-gl
继续访问
echarts 如何在一条柱形显示两个数字_干货 | 如何快速制作数据地图?让你的可视化逼格再高一级!...
在数据可视化中,地图可视化是高频应用的一种。我们在一些新闻报道和商业杂志上,会经常看到运用地图来分析展示商业现象,这样的利用地图来反映和分析数据的形式叫数据地图。数据地图可以最直观的表达出数据之间的空间关系,因此在很多数据分析场景中被广泛应用,这里我列举一些常用的数据地图类型和应用场景:01 点地图点地图很直白,用来表示某个区域各个网点(特定位置)的数据,精准性高,可以快速定位到位置。使用场景:点...
对象构造后第一个调用的函数,在python里面实例的属性是可以动态构建的,在类里面定义的属性是类属性,不是实例属性,定义实例自己的属性的最好地方是__init__函数里面。
比如
class TEST():
class_attr #类属性,通过TEST.class_attr调用,如果用instance.class_attr调用实际上是声明类另一个实例属性,与之前的TEST.class_attr不是一个东西了
def __init__(self,other):
self.class_attr #实例属性,与之前的那个属性处于不同的名字空间了,不是一个东西。
self.other=other
总之,__init__可以用来声明实例属性,以及进行必要的初始化。
R处理数据的案例
将学生的各科考试成绩组合为单一的成绩衡量指标、基于相对名次(前20%,下20%,等等)给出从A到F的评分、根据学生姓氏和名字的首字母对花名册进行排序
代码如下:
[python] view plain copy
print?
options(digits = 2)
Student-c("John Davis","Angela Williams","Bullwinkle Moose","David Jones",
"Janice Markhammer","Cheryl Cushing","Reuven Ytzrhak","Greg Knox",
"Joel England","Mary Rayburn")
Math-c(502,600,412,358,495,512,410,625,573,522)
Science-c(95,99,80,82,75,85,80,95,89,86)
English-c(25,22,18,15,20,28,15,30,27,18)
roster-data.frame(Student,Math,Science,English,stringsAsFactors = FALSE)
head(roster)
tail(roster)
z-scale(roster[,2:4])
score-apply(z, 1, mean)
roster-cbind(roster,score)
help(quantile)
y-quantile(score,c(.8,.6,.4,.2))
str(y)
roster$grade[score=y[1]]- "A"
roster$grade[scorey[1] score=y[2]]-"B"
roster$grade[scorey[2] score=y[3]]-"C"
roster$grade[scorey[3] score=y[4]]-"D"
roster$grade[scorey[4]]-"F"
name-strsplit((roster$Student)," ")
lastname-sapply(name,"[",2)
fristname-sapply(name,"[",1)
roster-cbind(fristname,lastname,roster[,-1])
roster-roster[order(lastname,fristname),]
roster[,-9]
以上代码写得比较紧凑,逐步分解如下。
步骤1 原始的学生花名册已经给出了。options(digits=2)限定了输出小数点后数字的位数,
并且让输出更容易阅读。
步骤2 由于数学、科学和英语考试的分值不同(均值和标准差相去甚远),在组合之前需要先让它们变得可以比较。一种方法是将变量进行标准化,这样每科考试的成绩就都是用单位标准差来表示,而不是以原始的尺度来表示了。这个过程可以使用scale()函数来实现。
[python] view plain copy
print?
z
Math Science English
[1,] 0.013 1.078 0.587
[2,] 1.143 1.591 0.037
[3,] -1.026 -0.847 -0.697
[4,] -1.649 -0.590 -1.247
[5,] -0.068 -1.489 -0.330
[6,] 0.128 -0.205 1.137
[7,] -1.049 -0.847 -1.247
[8,] 1.432 1.078 1.504
[9,] 0.832 0.308 0.954
[10,] 0.243 -0.077 -0.697
步骤3 然后,可以通过函数mean()来计算各行的均值以获得综合得分,并使用函数cbind()将其添加到花名册中:
[python] view plain copy
print?
roster[,-9]
fristname lastname lastname.1 Math Science English score
5 Cheryl Cushing Markhammer 495 75 20 -0.63
6 John Davis Cushing 512 85 28 0.35
2 Joel England Williams 600 99 22 0.92
4 David Jones Jones 358 82 15 -1.16
10 Greg Knox Rayburn 522 86 18 -0.18
8 Janice Markhammer Knox 625 95 30 1.34
9 Bullwinkle Moose England 573 89 27 0.70
7 Mary Rayburn Ytzrhak 410 80 15 -1.05
1 Angela Williams Davis 502 95 25 0.56
3 Reuven Ytzrhak Moose 412 80 18 -0.86
步骤4 函数quantile()给出了学生综合得分的百分位数。可以看到,成绩为A的分界点为0.74,B的分界点为0.44,等等。
[python] view plain copy
print?
y
80% 60% 40% 20%
0.74 0.44 -0.36 -0.89
步骤5 通过使用逻辑运算符,你可以将学生的百分位数排名重编码为一个新的类别型成绩变量。下面在数据框roster中创建了变量grade
步骤6 你将使用函数strsplit()以空格为界把学生姓名拆分为姓氏和名字。把strsplit()应用到一个字符串组成的向量上会返回一个列表:
[python] view plain copy
print?
name-strsplit((roster$Student)," ")
[python] view plain copy
print?
name
[[1]]
[1] "John" "Davis"
[[2]]
[1] "Angela" "Williams"
[[3]]
[1] "Bullwinkle" "Moose"
[[4]]
[1] "David" "Jones"
[[5]]
[1] "Janice" "Markhammer"
[[6]]
[1] "Cheryl" "Cushing"
[[7]]
[1] "Reuven" "Ytzrhak"
[[8]]
[1] "Greg" "Knox"
[[9]]
[1] "Joel" "England"
[[10]]
[1] "Mary" "Rayburn"
步骤7 你可以使用函数sapply()提取列表中每个成分的第一个元素,放入一个储存名字的向量,并提取每个成分的第二个元素,放入一个储存姓氏的向量。"["是一个可以提取某个对象的一部分的函数——在这里它是用来提取列表name各成分中的第一个或第二个元素的。你将使用cbind()把它们添加到花名册中。由于已经不再需要student变量,可以将其丢弃(在下标中使用?1)。
步骤8 最后,可以使用函数order()依姓氏和名字对数据集进行排序.
[python] view plain copy
print?
roster[,-9]
fristname lastname lastname.1 Math Science English score grade
5 Cheryl Cushing Markhammer 495 75 20 -0.63 C
6 John Davis Cushing 512 85 28 0.35 B
2 Joel England Williams 600 99 22 0.92 B
4 David Jones Jones 358 82 15 -1.16 F
10 Greg Knox Rayburn 522 86 18 -0.18 A
8 Janice Markhammer Knox 625 95 30 1.34 D
9 Bullwinkle Moose England 573 89 27 0.70 D
7 Mary Rayburn Ytzrhak 410 80 15 -1.05 C
1 Angela Williams Davis 502 95 25 0.56 A
3 Reuven Ytzrhak Moose 412 80 18 -0.86 F
你找个工具将这个接口API,自动转换成python版本的就可以了。好象是SWIG和Boost。 这两个以前看过,偶尔还试过几次。之所以建议你用自动工具,就是因为python对于C 扩展麻烦些,对于C语言接口可以使用ctypes和cython简单解决。不过C 如果用这些方法有时候被很麻烦。
boost在linux里会经常用到,在windows下也可以使用。SWIG在一般的教程里都会提及到。SIP也是最近出名的。
下面是一些参考资料,搜索来的。
=== 使用工具进行扩展 ===
虽然扩展过程并不复杂,但也可以使用许多已知的工具简化扩展过程。
(1) SWIG
由David Beazley创建,是一个自动的扩展构造工具。它读入注释的C/C 头文件,为python、tcl、perl等多种脚本语言产生wrap代码。SWIG可以包装大量C 特性到Python的扩展模块中。
评价:swig简单,可以支持多种脚本文件,但支持的c 特性不完备。
(2) SIP
由Phil Thompson创建,是一个C 模块构造器,专门为C 的类创造wrapper。它曾经被用于创建PyQt和PyKDE扩展模块,因此比较出名。
评价:支持C 特征很齐全,但比较复杂。
(3) bgen
该工具被包含在标准Python发布包中的模块构建工具集里,由Jack Jansen维护。它用于产生在Macintosh版本可用的Python扩展模块。
(4) pyfort
由Paul dubois创建,用来产生Fortran语言生成的扩展模块。
(5) cxx
也由Paul Dubois创建,甫俯颠谎郯荷奠捅订拉是一个库,为Python的C 扩展提供了友好的API。Cxx允许将许多python对象(如list和tuple)使用到STL的运算中。库也提供了C 异常处理到python异常处理的转化。
(6) WrapPy
由Greg Couch创建,通过读入C 头文件来产生扩展模块。
(7) Boost Python Library
由David Abrahams创建。该库提供了更多与众不同的C wrap到python扩展中,而只需要对要扩展的C 类写很少的附加信息。
评价:Boost为C 提供了许多实用的库,如Regex(正则表达式库)、Graph(图组件和算法)、concept check(检查泛型编程中的concept)、Thread(可移植的C 多线程库)、Python(把C 类和函数映射到Python之中)、Pool(内存池管理)等等。
Boost总体来说是实用价值很高,质量很高的库。并且强调对跨平台的支持。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。
boost.python支持的c 特性较多,但是比较复杂。