简谈-如何使用Python和R组合完成任务
概述
和那些数据科学比赛不同,在真实的数据科学中,我们可能更多的时间不是在做算法的开发,而是对需求的定义和数据的治理。所以,如何更好的结合现实业务,让数据真正产生价值成了一个更有意义的话题。
数据科学项目的完整流程通常是这样的五步骤:
需求定义=》数据获取=》数据治理=》数据分析=》数据可视化
一、需求定义
需求定义是数据科学项目和数据科学比赛的最大不同之处,在真实情景下,我们往往对目标函数、自变量、约束条件都并不清晰。需要通过访谈、论文、文档等等形式对问题进行系统地分析,将实际问题量化为可以解决的抽象问题,确定自变量、约束条件以及目标函数。在真实情景下,需求往往是多变化的,临时的,如何把握好需求成为了整个项目后续推进的关键要素。
二、数据获取
数据获取的形式主要包括:
现有数据库的调用
现有API的调用
自行设计的爬虫
在数据获取中,比较重头的一项就是爬虫的开发,这里 R 虽然开发了 rvest 包, 不过比起 django-scrapy 这样完整的爬虫调度系统不禁黯然失色,所以在第一步,我建议使用Python做爬虫的开发。
三、数据治理
数据治理第一步就是数据的定义,而数据的定义通过 Python的各种ORM框架和admin系统,可以非常出色地完成数据仓库的定义和管理。通过 airflow 我们又可以很好的对ETL过程做全流程的监控。
所以,在第二步,我依然建议使用Python作为数据治理的工具。
四、数据分析
数据分析首先涉及的就是探索式分析,这一点正是R语言的强项,适宜于各种强大的数据可视化,我们可以利用R快速了解数据的整体特性,通过 data.table 和 Rcpp 我们也可以快速提升 R 的单机性能,省去了Cython写wrapper的尴尬。而Python 由于需要更多约束的分析操作,在探索式分析中相比 R 少了几分灵活性。至少是矩阵乘法我更愿意接受直观的 %*%, 而不是np.dot()。所以,第三步,我建议使用 R 完成数据的分析工作。
五、数据可视化
数据可视化本来是JS的天下,但是感谢 R语言生态中热衷于给JS做封装的开发者们,现在市面上绝大部分在BI领域会涉及到的JS库都已经被 R 语言封装好了,比如 echarts、highcharts、rcharts、d3等等。另一方面,通过 shiny, 我们快速极大地简化了BI构建的流程,跳过底层jquery、boostrap、websocket等等细节,直接针对业务场景构建BI系统,帮助我们在快速构建BI原型上扫清障碍,而不是在Tornado里面辛苦地改template。显然,使用 R 做数据可视化可以大大减少我们的开发时间。所以,第四部,我也建议使用 R 完成数据可视化的工作。
总结
这样正常数据科学项目做下来,我们需要交付一个爬虫管理系统(django-scrapy)、一个数据仓库管理系统(django)、一个流程监控系统(airflow)、一个BI分析系统(shiny),真正完成对整个数据科学项目的可监控、可维护,然后在这个过程中我们不断去迭代我们的数据产品,优化流程,完善模型,最终实现反哺业务。
总结起来,将Python作为数据科学的基础,而R作为上层建筑是一个不错的解决方案,当然这一切都建立在数据开发人员具有过硬的开发技能,否则Python和R的随意性会酿成巨大的惨案。
简谈-如何使用Python和R组合完成任务的更多相关文章
- MPI简谈
MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...
- Python、R对比分析
一.Python与R功能对比分析 1.python与R相比速度要快.python可以直接处理上G的数据:R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析, ...
- (数据科学学习手札23)决策树分类原理详解&Python与R实现
作为机器学习中可解释性非常好的一种算法,决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方 ...
- (转)利用Auto ARIMA构建高性能时间序列模型(附Python和R代码)
转自: 原文标题:Build High Performance Time Series Models using Auto ARIMA in Python and R 作者:AISHWARYA SI ...
- Python调用R编程——rpy2
在Python调用R,最常见的方式是使用rpy2模块. 简介 模块 The package is made of several sub-packages or modules: rpy2.rinte ...
- 机器学习算法的基本知识(使用Python和R代码)
本篇文章是原文的译文,然后自己对其中做了一些修改和添加内容(随机森林和降维算法).文章简洁地介绍了机器学习的主要算法和一些伪代码,对于初学者有很大帮助,是一篇不错的总结文章,后期可以通过文中提到的算法 ...
- 简谈Java语言的继承
Java语言的继承 这里简谈Java语言的三大特性之二——继承. Java语言的三大特性是循序渐进的.是有顺序性的,应该按照封装-->继承-->多态这样的顺序依次学习 继承的定义 百度百科 ...
- .NET简谈接口
自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程.面向接口编程.面向组件编程等等:这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合. 今天我要简谈的是面向对象里面非常重 ...
- Python 和 R 数据分析/挖掘工具互查
如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对方便.python在下表中以模块.的方式引用,部分模块并非原生模块,请使用 pip install * 安装:同理,为了方便索 ...
随机推荐
- 构建微服务-使用OAuth 2.0保护API接口
微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...
- Python中的元祖Tuple
Python中的元祖和list基本上一样 tuple = () # 表示一个空的元祖 tuple = (50, ) # 元组中只有一个元素的时候,必须在后面加上逗号 无关闭分隔符 任意无符号的对象,以 ...
- 关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException
数组只能存错一种相同的数据类型,集合只能存储引用数据类型(用泛型),集合的底层就是一个可变的数组. 数组的冒泡排序: public static void arrayMaxPaiXu(int[] ar ...
- CUDA随机数生成库curand——deviceAPI
原创作品,如要转载请注明出处:http://www.cnblogs.com/shrimp-can/p/6590152.html 最近要在device函数中使用curand库生成随机数,查找了下资料,除 ...
- windows 下编译php扩展库pecl里的扩展memcache
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...
- iOS开发之NSTimer
1.NSTimer叫做“定时器”,它的作用如下 Ø 在指定的时间执行指定的任务 Ø 每隔一段时间执行指定的任务 2.调用NSTimer下面的方法就会开启一个定时任务 + (NSTimer *)sche ...
- Docker建立本地Registry
从容器运行一个Registry # docker run -p : registry 查看yelinyuntest/static_web镜像 # docker images yelinyuntest/ ...
- python混账的编码问题解决之道
下面的代码作用是修改文件的编码格式.代码很简单,但是也很牛逼(在我看来),这是在segment上找到的解决办法,废话不多说,直接上代码. import codecsdef ReadFile(fileP ...
- css颜色代码对照
FFFFFF #DDDDDD #AAAAAA #888888 #666666 #444444 #000000 #FFB7DD #FF88C2 #FF44AA #FF0088 #C10066 #A ...
- 使用nginx代理kibana并设置身份验证
1.在es-sever上安装nginx #wget http://nginx.org/download/nginx-1.8.1.tar.gz #tar xvf nginx-1.8.1.tar.gz # ...