‘壹’ 如何进行android兼容性测试cts
二、运行CTS的方法,步骤如下:
(1)进入目录android-cts,该目录是通过上面那两种方法获得的。在android-cts目录下会有3个文件夹,其中一个是tools。
(2)进入tools目录,输入./startcts来启动CTS。
(3)如果运行成功会出现Android CTS version 2.3_r1的字样(我的android的版本是2.3的)。如果有连接设备到PC上还会出现Device(设备ID)connected的字样。这里设备可以是连接PC的android的机器,也可以是模拟器。
三、CTS测试的方法:
(1)在cts_host>下敲入help,会显示cts下的许多命令。ls –plan命令显示google自带的测试方案,如:java、Signature、Android、CTS、VM、RefApp、Performance、AppSecurity。其中Performance这个方案是google暂不要求的。Java、Signature、Android、VM、RefApp、Appsecurity方案都是CTS方案的子集。
(2)用命令ls -d来查看已连接的设备,CTS测试之前我们必须保证至少有一个设备连接上。
(3)输入命令start –plan CTS来执行CTS测试方案,该方案有两万多条测试项目,需要很长时间,因此除了第一次测试之外,不建议这么做。我做的都是针对某些包的测试。如果连接了多个设备的话需加上-d参数,后面跟上设备id来告诉CTS需要测试的设备。
(4)对单独一个包进行测试的方法:start –plan CTS –p 包名;推荐用这种方法来进行针对性的测试。需要知道有哪些包名,可以输入命令:ls –plan CTS
(5)也可以针对单独一个case进行测试:start –plan CTS –test 类名#方法名
四、查看测试的结果:
测试生成的log在\android-cts\repository目录下以log+测试时间.txt命名。测试报告在android-cts\repository\results目录下,也是以测试时间命名。
五、注意事项:
(1)测试前需要安装一个apk:adb install -r android-cts/repository/testcases/.apk 然后在设置里面
‘贰’ Android启动过程深入解析
当按下Android设备电源键时究竟发生了什么?
Android的启动过程是怎么样的?
什么是linux内核?
桌面系统linux内核与Android系统linux内核有什么区别?
什么是引导装载程序?
什么是Zygote?
什么是X86以及ARM linux?
什么是init.rc?
什么是系统服务?
当我们想到Android启动过程时,脑海中总是冒出很多疑问。本文将介绍Android的启动过程,希望能帮助你找到上面这些问题的答案。
Android是一个基于Linux的开源操作系统。x86(x86是一系列的基于intel 8086 CPU的计算机微处理器指令集架构)是linux内核部署最常见的系统。然而,所有的Android设备都是运行在ARM处理器(ARM 源自进阶精简指令集机器,源自ARM架构)上,除了英特尔的Xolo设备(http://xolo.in/xolo-x900-features)。Xolo来源自凌动1.6GHz x86处理器。Android设备或者嵌入设备或者基于linux的ARM设备的启动过程与桌面版本相比稍微有些差别。这篇文章中,我将解释Android设备的启动过程。深入linux启动过程是一篇讲桌面linux启动过程的好文。
当你按下电源开关后Android设备执行了以下步骤。
此处图片中step2中的一个单词拼写错了,Boot Loaeder应该为Boot Loader(多谢@jameslast 提醒)
第一步:启动电源以及系统启动
当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。
第二步:引导程序
引导程序是在Android操作系统开始运行前的一个小程序。引导程序是运行的第一个程序,因此它是针对特定的主板与芯片的。设备制造商要么使用很受欢迎的引导程序比如redboot、uboot、qi bootloader或者开发自己的引导程序,它不是Android操作系统的一部分。引导程序是OEM厂商或者运营商加锁和限制的地方。
引导程序分两个阶段执行。第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序;第二阶段,引导程序设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,引导程序可以根据配置参数或者输入数据设置内核。
Android引导程序可以在找到。
传统的加载器包含的个文件,需要在这里说明:
init.s初始化堆栈,清零BBS段,调用main.c的_main()函数;
main.c初始化硬件(闹钟、主板、键盘、控制台),创建linux标签。
更多关于Android引导程序的可以在这里了解。
第三步:内核
Android内核与桌面linux内核启动的方式差不多。内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。
第四步:init进程
init是第一个进程,我们可以说它是root进程或者说有进程的父进程。init进程有两个责任,一是挂载目录,比如/sys、/dev、/proc,二是运行init.rc脚本。
init进程可以在/system/core/init找到。
init.rc文件可以在/system/core/rootdir/init.rc找到。
readme.txt可以在/system/core/init/readme.txt找到。
对于init.rc文件,Android中有特定的格式以及规则。在Android中,我们叫做Android初始化语言。
Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。
语法
1
2
3
4
5
; html-script: false ]
on <trigger>
<command>
<command>
<command>
Service(服务):服务是init进程启动的程序、当服务退出时init进程会视情况重启服务。
语法
1
2
3
4
5
; html-script: false ]
service <name> <pathname> [<argument>]*
<option>
<option>
...
Options(选项)
选项是对服务的描述。它们影响init进程如何以及何时启动服务。
咱们来看看默认的init.rc文件。这里我只列出了主要的事件以及服务。
Table
Action/Service
描述
on early-init
设置init进程以及它创建的子进程的优先级,设置init进程的安全环境
on init
设置全局环境,为cpu accounting创建cgroup(资源控制)挂载点
on fs
挂载mtd分区
on post-fs
改变系统目录的访问权限
on post-fs-data
改变/data目录以及它的子目录的访问权限
on boot
基本网络的初始化,内存管理等等
service servicemanager
启动系统管理器管理所有的本地服务,比如位置、音频、Shared preference等等…
service zygote
启动zygote作为应用进程
在这个阶段你可以在设备的屏幕上看到“Android”logo了。
第五步
在Java中,我们知道不同的虚拟机实例会为不同的应用分配不同的内存。假如Android应用应该尽可能快地启动,但如果Android系统为每一个应用启动不同的Dalvik虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android系统创造了”Zygote”。Zygote让Dalvik虚拟机共享代码、低内存占用以及最小的启动时间成为可能。Zygote是一个虚拟器进程,正如我们在前一个步骤所说的在系统引导的时候启动。Zygote预加载以及初始化核心库类。通常,这些核心类一般是只读的,也是Android SDK或者核心框架的一部分。在Java虚拟机中,每一个实例都有它自己的核心库类文件和堆对象的拷贝。
Zygote加载进程
加载ZygoteInit类,源代码:/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
registerZygoteSocket()为zygote命令连接注册一个服务器套接字。
preloadClassed “preloaded-classes”是一个简单的包含一系列需要预加载类的文本文件,你可以在/frameworks/base找到“preloaded-classes”文件。
preloadResources() preloadResources也意味着本地主题、布局以及android.R文件中包含的所有东西都会用这个方法加载。
在这个阶段,你可以看到启动动画。
第六步:系统服务或服务
完成了上面几步之后,运行环境请求Zygote运行系统服务。系统服务同时使用native以及java编写,系统服务可以认为是一个进程。同一个系统服务在Android SDK可以以System Services形式获得。系统服务包含了所有的System Services。
Zygote创建新的进程去启动系统服务。你可以在ZygoteInit类的”startSystemServer”方法中找到源代码。
核心服务:
启动电源管理器;
创建Activity管理器;
启动电话注册;
启动包管理器;
设置Activity管理服务为系统进程;
启动上下文管理器;
启动系统Context Providers;
启动电池服务;
启动定时管理器;
启动传感服务;
启动窗口管理器;
启动蓝牙服务;
启动挂载服务。
其他服务:
启动状态栏服务;
启动硬件服务;
启动网络状态服务;
启动网络连接服务;
启动通知管理器;
启动设备存储监视服务;
启动定位管理器;
启动搜索服务;
启动剪切板服务;
启动登记服务;
启动壁纸服务;
启动音频服务;
启动耳机监听;
启动AdbSettingsObserver(处理adb命令)。
第七步:引导完成
一旦系统服务在内存中跑起来了,Android就完成了引导过程。在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。
‘叁’ 近几年有哪些编程语言
目前,计算机语言的总数总计达9000种。但是,其中只有50种编程语言是较为流行的。今天,小编就给大家盘点一下2020年最受欢迎的编程语言。
1、python
Python是目前开发人员比较常用的编程语言之一。有很多大企业都选择Python进行产品开发,比如:NASA,Google,Instagram,Spotify,Uber,Netflix等,而且很奇妙的一点是,无论是初学者还是专业人员,都很喜欢Python,由此可见它的受欢迎程度。如果你是大数据职业的技术专业人员,那么Python可以说是最合适的。
2、R
R是一种可以轻松连接到数据库管理系统(DBMS)的语言,但其实它本身不提供任何电子表格数据视图。不过,R语言最大的特点是为数据表示提供了多种图形功能,例如条形图,饼图,时间序列,点图,3D表面,图像图,地图,散点图等。R语言可以帮助用户很容易地自定义图形,并开发有特点的新奇的图形。
3、Java
Java出现之后,它就以其在数据科学技术中的多功能性而广为人知。而且,用于处理和存储大数据应用程序的开源框架Hadoop HDFS已完全用Java编写。Java还被广泛用于构建各种ETL应用程序,例如Apache,Apache Kafka和Apache Camel等,这些应用程序用于运行数据提取,数据转换以及在大数据环境中的加载。
4、Scala
Scala是一种开源高级编程语言,目前主要是金融行业在着重使用。Scala的一个最大的特点,是能够保证其在大数据可用性方面的重要性。总之,Apache Spark是用于大数据应用程序的集群计算框架,大数据从业者一般都需要具备Scala相关的丰富的知识和操作经验。
5、Kotlin
Kotlin是一款很不错的的Android应用开发语言,可以在JVM上运行,在一定程度上克服了Java的某些缺点,提供许多现代功能。Kotlin的主要特点在于它的语言设计,它提供了优秀的指针、安全性、类型推断等功能。现有Java库庞大的生态系统都可供Kotlin使用,因为Kotlin也运行在JVM中。
‘肆’ android基于什么平台 基于GoogleAndroid平台的移动开发初探
0 引言Android是Google开发的基于Linux平台的开源手机操作系统。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android是一个对第三方软件完全开放的平台,这使得开发者在开发程序时拥有更大的自由度,突破了iPhone等只能添加为数不多的固定软件的枷锁,同时与Windows Mobile、Symbian等厂商不同,Android
操作系统免费向开发人员提供,大量地节省成本。正因如此,Android项目目前正在从手机运营商、手机厂商、开发者和消费者那里获得大力支持。据统计,在2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年7月数据显示,Android占据全球智能手机操作系统市场59%的份额,中国市场占有率为76.7%。可见,Android平台具有很大的市场发展潜力。
1 平台架构
Android的开发平台主要由4层构成,其中,第1层是Linux
内核层,该层处于最底层,第2层,C/C++库集合Libraries和Android运行时层,该层中的库集合,提供给Android系统的各个组件使用,它的功能通过应用程序框架暴露给开发者。该层中的Android运行时包含了氏枝核心库和虚拟机,提供了大部分在JAVA编程语言核心类库中可用的功能,提供专门为移动设备优化过的虚拟机。第3层,应用程序框架Application Framework
层,它是Android提供的开发的开发平台,使开发者能够编制丰富和新颖的应用程序。第4层,最上层,应用程序集合层,主要包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置等,该层中的所有应用程序都是用JAVA编程语言写的。
2 Android开发平台的搭建
Android开发平台的搭建需要安装JDK,SDK等工具,由于最上层的应用层都是采用JAVA语言编写,故必须要装JDK,同时,由于JDK只能用于第3层跟第4层,而底层是用C/C++语言写的库,所以必须安装SDK,用来满足Android的运行环境,比如,它可以把JAVA程序转换为Android程序所能识别的代码.DEX。此外,要建立一个Android项目,我们必须安装插件Android开发工具ADT(Android Development Tools)。具体开发环境的搭建如下:首先歼磨敏,安装JDK,至少需要1.5以上的版本,其次安装Eclipse,这是一个比较适合Android开发的工具,接着安装Android SDK,再次安装插件ADT,最后重启Eclipse,配置Android SDK路径。
3 Android提供的四大应用程序组件及职责
Android提供的四大应用程序组件,即Activity、BroadcastReceiver 、ContentProvider、Service。其中,Activity:它是应用程序的入口,主要用于界面显示,接收事件(如按键),游丛控制显示跳转。BroadcastReceiver:它主要用于注册和接收系统广播的事件,也可接收自定义的广播事件。ContentProvider:它提供数据库查询接口,可对外(其他应用程序)公开数据查询服务。Service:它是一个独立的进程,可一直在后台运行,可以与其他组件(如Acitivity,Service,ContentProvider)通过远程连接绑定进行交互,同时可对外(其他应用程序)提供服务交互接口。
4 Android的核心应用程序框架思路
Android的核心应用程序框架主要为三层架构:UI层(Activities层),调度层(Dispatch层)和应用服务层(Services层)。其中UI层由Activities,Views组成,负责应用程序UI显示,进行跳转,与调度层进行交互,控制调度层对服务进行管理。调度层由服务管理、服务绑定、消息转发、异常通知四个模块组成,它负责与后台服务的绑定与通信,处理UI层的请求,管理服务层相关服务,管理应用程序的异常输出。应用服务层由Service,Receiver,ContentProvider组成,它负责与系统进行通信,监控系统行为并处理,与调度层进行消息通信。
5 一个简单的Android工程架构的介绍
Android工程主要包括:1)src目录,存放java原代码;2)gen目录,自动生成的目录,存放所有由Android开发工具自动生成的文件。在该目录中,有一个最重要的文件就是R.java。这个文件由Android开发工具自动产生的。R.java中包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源;3)res资源目录,主要存放各种资源,如xml界面文件,图片或数据;4)assets资源目录也可以存放资源文件,但是读取assets目录下的文件必须指定文件的路径;5)AndroidManifest.xml项目清单文件,该文件列出了应用程序所提供的功能,以后开发好的各种组件需要在该文件中进行配置;6)default.properties项目环境信息,一般是不需要修改此文件。
项目的执行流程:AndroidManifest.xml是程序的入口,在该文件中,找到主活动,如Mainactivity,在主活动的生命周期中,要调用SetcontentView(布局),通过布局的名字找到相应的布局文件如:login.xml,在该布局中,会有很多控件在其中,逐一显示,同时,如果该控件所对应的事件发生后要及时捕获它。
在接下的例子中,笔者尝试做了3个活动,分别如图1、图2、图3所示。
6 结束语
Android应用程序开发是一项较为复杂的工程,本文,介绍了Android开发平台的架构、开发环境的搭建、以及具体的
目结构介绍等。由于Android平台具有良好的开放性等特点,可以使运营商能非常方便地制定特色化的产品,具有很大的市场发展潜力。
基金号:2011年武汉市属高校科研课题,任务驱动的高职数据库类课程的教学研究(编号2011109)
参考文献:
[1]网络,Android,.htm,
2012.
[2]网络文库,三大平台简介,
1ffad6195f312ba6dc.html,
‘伍’ 安卓app用什么语言开发
安卓app用Java语言进行开发。 Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。 更多关于安卓app用什么语言开发,进入:https://m.abcgonglue.com/ask/27f77f1615837413.html?zd查看更多内容
‘陆’ 数据科学入门丨选Python还是R
数据科学入门丨选Python还是R
对于想入门数据科学的新手来说,选择学Python还是R语言是一个难题,本文对两种语言进行了比较,希望能帮助你做出选择。
我是德勤的数据科学家主管,多年来我一直在使用Python和R语言,并且与Python社区密切合作了15年。本文是我对这两种语言的一些个人看法。
第三种选择
针对这个问题,Studio的首席数据科学家Htley Wickham认为,比起在二者中选其一,更好的选择是让两种语言合作。因此,这也是我提到的第三种选择,我在文本最后部分会探讨。
如何比较R和Python
对于这两种语言,有以下几点值得进行比较:
· 历史:
R和Python的发展历史明显不同,同时有交错的部分。
· 用户群体:
包含许多复杂的社会学人类学因素。
· 性能:
详细比较以及为何难以比较。
· 第三方支持:
模块、代码库、可视化、存储库、组织和开发环境。
· 用例:
根据具体任务和工作类型有不同的选择。
· 是否能同时使用:
在Python中使用R,在R中使用Python。
· 预测:
内部测试。
· 企业和个人偏好:
揭晓最终答案。
历史
简史:
ABC语言 - > Python 问世(1989年由Guido van Rossum创立) - > Python 2(2000年) - > Python 3(2008年)
Fortan语言 - > S语言(贝尔实验室) - > R语言问世(1991年由Ross Ihaka和Robert Gentleman创立) - > R 1.0.0(2000年) - > R 3.0.2(2013年)
用户群体
在比较Python与R的使用群体时,要注意:
只有50%的Python用户在同时使用R。
假设使用R语言的程序员都用R进行相关“科学和数字”研究。可以确定无论程序员的水平如何,这种统计分布都是真实。
这里回到第二个问题,有哪些用户群体。整个科学和数字社区包含几个子群体,当中存在一些重叠。
使用Python或R语言的子群体:
· 深度学习
· 机器学习
· 高级分析
· 预测分析
· 统计
· 探索和数据分析
· 学术科研
· 大量计算研究领域
虽然每个领域几乎都服务于特定群体,但在统计和探索等方面,使用R语言更为普遍。在不久之前进行数据探索时,比起Python,R语言花的时间更少,而且使用Python还需要花时间进行安装。
这一切都被称为Jupyter Notebooks和Anaconda的颠覆性技术所改变。
Jupyter Notebook:增加了在浏览器中编写Python和R代码的能力;
Anaconda:能够轻松安装和管理Python和R。
现在,你可以在友好的环境中启动和运行Python或R,提供开箱即用的报告和分析,这两项技术消除了完成任务和选择喜欢语言间的障碍。Python现在能以独立于平台的方式打包,并且更快地提供快速简单的分析。
社区中影响语言选择的另一个因素是“开源”。不仅仅是开源的库,还有协作社区对开源的影响。讽刺的是,Tensorflow和GNU Scientific Library等开源软件(分别是Apache和GPL)都与Python和R绑定。虽然使用R语言的用户很多,但使用Python的用户中有很多纯粹的Python支持者。另一方面,更多的企业使用R语言,特别是那些有统计学背景的。
最后,关于社区和协作,Github对Python的支持更多。如果看到最近热门的Python包,会发现Tensorflow等项目有超过3.5万的用户收藏。但看到R的热门软件包,Shiny、Stan等的收藏量则低于2千。
性能
这方面不容易进行比较。
原因是需要测试的指标和情况太多。很难在任何一个特定硬件上测试。有些操作通过其中一种语言优化,而不是另一种。
循环
在此之前让我们想想,如何比较Python与R。你真的想在R语言写很多循环吗?毕竟这两种语言的设计意图不太相同。
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as npn",
"%load_ext rpy2.ipython"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def do_loop(u1):n",
"n",
" # Initialize `usq`n",
" usq = {}n",
"n",
" for i in range(100):n",
" # i-th element of `u1` squared into `i`-th position of `usq`n",
" usq[i] = u1[i] * u1[i]n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"%%Rn",
"do_loop <- function(u1) {n",
" n",
" # Initialize `usq`n",
" usq <- 0n",
"n",
" for(i in 1:100) {n",
" # i-th element of `u1` squared into `i`-th position of `usq`n",
" usq[i] <- u1[i]*u1[i]n",
" }n",
"n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.58 ms ± 42.8 ?s per loop (mean ± std. dev. of 7 runs, 1000 loops each)n"
]
}
],
"source": [
"%%timeit -n 1000n",
"%%Rn",
"u1 <- rnorm(100)n",
"do_loop(u1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"36.9 ?s ± 5.99 ?s per loop (mean ± std. dev. of 7 runs, 1000 loops each)n"
]
}
],
"source": [
"%%timeit -n 1000n",
"u1 = np.random.randn(100)n",
"do_loop(u1)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Python为0.000037秒,R为0.00158秒
包括加载时间和在命令行上运行:R需要0.238秒,Python需要0.147秒。强调,这并不是科学严谨的测试。
测试证明,Python的运行速度明显加快。通常这并没有太大影响。
除了运行速度外,对于数据科学家而言哪种性能更重要?两种语言之所以受欢迎是因为它们能被用作命令语言。例如,在使用Python时大多时候我们都很依赖Pandas。这涉及到每种语言中模块和库,以及其执行方式。
第三方支持
Python有PyPI,R语言有CRAN,两者都有Anaconda。
CRAN使用内置的install.packages命令。目前,CRAN上有大约1.2万个包。其中超过1/2的包都能用于数据科学。
PyPi中包的数量超过前者的10倍,约有14.1万个包。专门用于科学工程的有3700个。其中有些也可以用于科学,但没有被标记。
在两者中都有重复的情况。当搜索“随机森林”时,PyPi中可以得到170个项目,但这些包并不相同。
尽管Python包的数量是R的10倍,但数据科学相关的包的数量大致相同。
运行速度
比较DataFrames和Pandas更有意义。
我们进行了一项实验:比较针对复杂探索任务的执行时间,结果如下:
在大多数任务中Python运行速度更快。
http://nbviewer.jupyter.org/gist/brianray/
可以看到,Python + Pandas比原生的R语言DataFrames更快。注意,这并不意味着Python运行更快,Pandas 是基于Numpy用C语言编写的。
可视化
这里将ggplot2与matplotlib进行比较。
matplotlib是由John D. Hunter编写的,他是我在Python社区中最敬重的人之一,他也是教会我使用Python的人。
Matplotlib虽然不易学习但能进行定制和扩展。ggplot难以进行定制,有些人认为它更难学。
如果你喜欢漂亮的图表,而且无需自定义,那么R是不错的选择。如果你要做更多的事情,那么Matplotlib甚至交互式散景都不错。同样,R的ShinnyR能够增加交互性。
是否能同时使用
可能你会问,为什么不能同时使用Python和R语言?
以下情况你可以同时使用这两种语言:
· 公司或组织允许;
· 两种都能在你的编程环境中轻松设置和维护;
· 你的代码不需要进入另一个系统;
· 不会给合作的人带来麻烦和困扰。
一起使用两种语言的方法是:
· Python提供给R的包:如rpy2、pyRserve、Rpython等;
· R也有相对的包:rPython、PythonInR、reticulate、rJython,SnakeCharmR、XRPython
· 使用Jupyter,同时使用两者,例子如下:
之后可以传递pandas的数据框,接着通过rpy2自动转换为R的数据框,并用“-i df”转换:
http://nbviewer.jupyter.org/gist/brianray/
预测
Kaggle上有人对开发者使用R还是Python写了一个Kernel。他根据数据发现以下有趣的结果:
· 如果你打算明年转向Linux,则更可能是Python用户;
· 如果你研究统计数据,则更可能使用R;如果研究计算机科学,则更可能使用Python;
· 如果你还年轻(18-24岁),则更可能是Python用户;
· 如果你参加编程比赛,则更可能是Python用户;
· 如果你明年想使用Android,则更可能是Python用户;
· 如果你想在明年学习SQL,则更可能是R用户;
· 如果你使用MS office,则更可能是R用户;
· 如果你想在明年使用Rasperry Pi,则更可能是Python用户;
· 如果你是全日制学生,则更可能是Python用户;
· 如果你使用的敏捷方法(Agile methodology),则更可能是Python用户;
· 如果对待人工智能,比起兴奋你更持担心态度,则更可能是R用户。
企业和个人偏好
当我与Googler和Stack Overflow的大神级人物Alex Martelli交流时,他向我解释了为什么Google最开始只官方支持少数几种语言。即使是在Google相对开发的环境中,也存在一些限制和偏好,其他企业也是如此。
除了企业偏好,企业中第一个使用某种语言的人也会起到决定性作用。第一个在德勤使用R的人他目前仍在公司工作,目前担任首席数据科学家。我的建议是,选择你喜欢的语言,热爱你选择的语言,起到领导作用,并热爱你的事业。
当你在研究某些重要的内容时,犯错是难以避免的。然而,每个精心设计的数据科学项目都为数据科学家留有一些空间,让他们进行实验和学习。重要的是保持开放的心态,拥抱多样性。
最后就我个人而言,我主要使用Python,之后我期待学习更多R的内容。
‘柒’ android程序能够直接通过r类引用drawable、layout和values目录中的资源,
android 程序中的资源ID是Android SDK自动生成的,Android SDK会自动生成一个R文件,所有的资源ID都在R文件中。
以下是R文件的说明:
/* AUTO-GENERATED FILE. DO NOT MODIFY.
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
提示开发者,这是一个自动生成的文件,不能手动去修改它。
Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的 id属性值。id属性只能接受资源类型的值也就是必须以@开头的值,例如@id/abc、@+id/xyz等。
如果在@后面使用“+”表示当修改完某个布局文件并保存后系统会自动在 R.java文件中生成相应的int类型变量。变量名就是“/”后面的值例如@+id/xyz 会在R.java文件中生成int xyz = value其中value是一个十六进制的数。
如果 xyz在R.java中已经存在同名的变量就不再生成新的变量而该组件会使用这已存在的变量的值。