数据分析神器Colab的初探
为什么要使用Colab
使用过Jupyter(参看《「极客时间」带来的社区价值思考》章节:社区交流的基建设施)的朋友,一定会醉心于它干净简洁的设计,以及在“摆脱Python命令行运行”上提供的优质服务。某种意义上讲,Jupyter的简洁设计,非常适合于初学编程的朋友。因为从整体看,整个Jupyter所提供的界面像是学生时代老师提供的PPT演讲大纲。而唯一不同的是,在Jupyter里面,那些作为示例文档的代码,可以被真实运行起来。对于真正从事过教学和喜欢探索的人来讲,这个优雅的小功能,有着难以言说的奇妙和舒适感。
但这远远不够。对于一般的“门外汉”来讲,或者对于那些仅仅想要随手做一个轻便小实验的研究者来讲,Jupyter还是过重了。为什么呢?因为Jupyter提供的是一套组装工具,类似于宜家售卖的拼接家具。你可以通过Jupyter提供的这套基建设施组合出一副精致的“家具”,但必须经历拼接的繁琐:例如Jupyter软件的安装、各种Machine Learning代码库的“先下载后安装”,以及最为反人性的:你必须在本地占用一个端口启动一个server,还得保持这个server的运行。
从程序角度讲,它的这套逻辑毫无问题。可从用户角度讲,这些繁琐的基础设施消耗,会大大磨灭探索者前进的欲望。还没开始真正的数据分析,就已经准备放弃了。
一个相对折中的办法,是购买一台虚拟机,在它上面开辟出一个端口来长时间运行Jupyter。但这也需要不怎么省力的一番折腾。
那有没有什么更为优质的解决方案呢?!答案是,yes。
那就是Google提供的Colab(https://colab.research.google.com 看不到的同学,请自行搭建梯子),以及Kaggle社区提供的Kernel环境。
事实上,最先让我注意到的,是Kaggle社区的Kernel。我想,这个功能的提供,必定引发了很多数据科学研究者加入Kaggle社区。但数据竞赛,又是Kaggle的一个包袱。这套Kernel,几乎是完全根植在Kaggle竞赛里的。为了使用它,你不得不拥有一个Kaggle账号(典型的Growth Hacker套路),进而再在Kaggle复杂的界面中,找到Kernels
按钮,默默新建一个工作界面。
在最初使用Kernel的惊喜之余,我直接想到的便是:Kaggle应该将这个东西单独拿出来做,而不是被数据竞赛限制住自己的脚步。
可毕竟是创业公司,资源稀少,不敢随意胡乱使用。等到Google将Kaggle收购后,这位从来喜好有趣的大老爹,便毫不留情地将这个部分给吃掉,发布了Colab。
更让人惊喜的是,这位有钱的大老爹,还提供了GPU这个让我等平民无法仰视的重要资源:免费使用 Nvidia Tesla K80 GPU !!!
虽然有很多吐槽的声音认为:便宜无好货,这个鸡肋的资源在某些情形下还不如CPU跑得快。
但我想说的是,如果你知道GPU是未来,也相信摩尔定律会让你在不久的将来也能用上GPU,你难道不应该更加去在意如何快速、先人一步掌握这块技术魔法石,而不是关注它在不久后便会有重大提升的效率么?比起机器提升的效率来讲,自己的学习速率不才是瓶颈吗?
如何使用Colab
基于Google Drive的存储
首先,Colab的notebook是存放在你自己的Google Drive里面的。对于熟练使用Google Docs的同学来说,这是自然而然的事情。你可以自己在Google Drive里面新建一个文件夹作为notebook的存放地,也可以直接使用默认文件夹 Colab Notebooks
(下图金黄色的文件夹即是):
新建Colab notebook既可以在colab.research.google.com界面中,也可以直接在Google Drive里:
新建好了notebook,在Colab的展现出来便是这样:
整个notebook的运行方式,和Jupyter基本一致。一些细微的文档操作上,例如Cell上下移动,Google做了些自己的定制。
如何使用GPU
如何设置GPU的运行呢?依次点击 Edit > Notebook settings
或者 Runtime > Change runtime type
,选择GPU作为Hardware accelerator。
安装程序库
对想要探索Deep Learning的同学来说,Keras已经成了一个必备的工具框架。这就涉及到安装Keras,只需一行命令:
!pip install -q keras
更一般地,为了import
不在Colab上的库,可以直接使用!pip install <package name>
或者!apt-get install <package name>
来做安装。例如,安装matplotlib:
!pip install -q matplotlib-venn
或者调整TensorFlow的版本:
# To determine which version you're using:
!pip show tensorflow
# For the current version:
!pip install --upgrade tensorflow
# For a specific version:
!pip install tensorflow==1.2
# For the latest nightly build:
!pip install tf-nightly
又或者,查看你的当前路径和当前路径的内容:
# Check your current directory
!pwd
# Check contents under current directory
!ls
可以推断:想在Colab中调用Linux命令,需要在命令最开始添加符号!
。
如何连通Colab与Google Drive
虽然Colab的文件是存储在你的Google Drive上,但一个让人懊恼的问题是你在Colab的notebook中使用命令时,其发生作用的文件目录却不在Google Drive上,而是在Google提供的一个虚拟机(VM)中。如果你有其它数据或者文件需要在运行时使用,就没办法了。所以,你需要将运行的VM同你自己的Google Drive连接起来。这就涉及到Mount Google Drive,也就是把你的Google Drive当作U盘一样,挂到Google分配给你的VM上。
这里,我们通过 google-drive-ocamlfuse
去Mount自己的Google Drive。
先运行以下命令去安装必要的库,以及做相应的authorization:
!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
在运行过程中,会看到相应的认证框如下图:
点击超链接,复制超链接关联的Google账号的Auth密钥,粘贴到输入框里面,按回车,即可通过。
下一步,Mount起自己的Google Drive:在VM中新建一个目录,再用命令将它连接到Google Drive的根目录。
!mkdir -p TerenceDrive
!google-drive-ocamlfuse TerenceDrive
这里的"TerenceDrive"可修改为你想要的名称。它意味着,这个 TerenceDrive
将直接指向你的Google Drive的根目录。
把自己的Google Drive挂到运行notebook的VM后,很多事情就变得极其方便了。
Colab中运行.py文件
先用一段Keras上的代码示例mnist_cnn.py(http://t.cn/REe2bqF)来演示如何直接运行.py文件:
'''This is [mnist_cnn.py]''' '''Trains a simple convnet on the MNIST dataset.
Gets to 99.25% test accuracy after 12 epochs
(there is still a lot of margin for parameter tuning).
16 seconds per epoch on a GRID K520 GPU.
'''
from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
batch_size = 128
num_classes = 10
epochs = 12
# input image dimensions
img_rows, img_cols = 28, 28
# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
假设这个文件mnist_cnn.py
存放在了我们的Google Drive的Colab Notebooks文件夹下,此时,它的路径便是 My Drive/Colab Notebooks/mnist_cnn.py
。
知道了TerenceDrive
直接指向Google Drive的根目录,便可以直接运行命令:
!python3 'TerenceDrive/Colab Notebooks/mnist_cnn.py'
Colab中下载数据到Google Drive
例如,直接从URL上下载数据到自己Google Drive的Colab Notebooks文件夹:
!wget https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/Titanic.csv -P 'TerenceDrive/Colab Notebooks'
立马用Pandas读取一个试试:
import pandas as pd
titanic = pd.read_csv('TerenceDrive/Colab Notebooks/Titanic.csv')
titanic.head(5)
简直丝滑清爽无比!
Colab中使用GitHub Repo
再来看看经常会用到的git版本控制,特别是如何使用在GitHub上现成的project。直接clone
一个项目到自己的Colab Notebooks文件夹:
!git clone https://github.com/wxs/keras-mnist-tutorial.git 'TerenceDrive/Colab Notebooks/keras-mnist-tutorial'
从Google Drive中打开notebook:
选择以Colaboratory的方式打开:
便可以将这个notebook运行了。
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-ratio="0.05278592375366569" data-src="https://mmbiz.qpic.cn/mmbiz_png/VJsh0SqOtxPOePjR8e1FYE9klZmDf4l4ZeUnYRRhdKCQhsFP7GxftEQNZ0Rb87aUicmLoHYOuKic0ib1hZQUUhZag/640?wx_fmt=png" data-type="png" data-w="341" />
最后提一句,Colab自带的notebook Welcome to Colaboratory! 是一个很好的学习Colab的起点。
Enjoy your Colab journey.
近期回顾
《2018年02月写字总结》
《极端开放的头脑 | 《原则》》
《系统的演化》
如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!
更多信息交流和观点分享,可加入知识星球:
VIP赞赏专区
数据分析神器Colab的初探的更多相关文章
- 国人之光:大数据分析神器Apache Kylin
一.简介 Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献 ...
- 还在用Excel做数据分析?别人都在用数据分析工具啦!
"Excel在过去.现在和未来都是一个无比优秀和天才的工具,无数虔诚的信徒将其奉为唯一的法门,而我却并不在其中了." 作为一个数据分析师,Excel是我入门必备的数据分析工具,虽然 ...
- Sparklyr与Docker的推荐系统实战
作者:Harry Zhu 链接:https://zhuanlan.zhihu.com/p/21574497 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 相关内容: ...
- 从0到N建立高性价比的大数据平台(转载)
2016-07-29 14:13:23 钱曙光 阅读数 794 原文链接:https://blog.csdn.net/qiansg123/article/details/80124521 声明:本文为 ...
- python+anaconda+pycharm的使用
研一开学的时候开始接触了这些,但是对于其各种功能感到十分混乱,现在通过这篇博文将其功能详细的写出来. 1.python解释器 首先要了解python解释器,我们俗称的下载python也就是下载pyth ...
- Memory Leak检測神器--LeakCanary初探
在之前的文章Android内存泄露的几种情形中提到过在开发中常见的内存泄露问题,可是过于草率.因为刚开年,工作还没正式展开,就看了一下Github开源大户Square的LeakCanary,并用公 ...
- 一款表达谱数据分析的神器--CCLE--转载
现在做生物和医学的,很多都可能会和各种组学数据打交道.其中表达谱数据总是最常用的,也是比较好测的.即使在工作中不去测序,也可以利用已有的数据库去做一些数据挖掘,找一找不同表型(比如癌症)对应的mark ...
- 转:初探Windows Fuzzing神器----Winafl
转:http://www.tuicool.com/articles/j2eqym6 小结:找到感兴趣的函数,计算偏移,自动化fuzz. 这是一篇客座文章,作者是乌云二进制漏洞挖掘白帽子 k0shl . ...
- 这个数据分析工具秒杀Excel,可视化分析神器!
入门Excel容易,想要精通就很难了,大部分人通过学习能掌握60%的基础操作,但是一些复杂数据可视化分析就需要用到各种技巧,操作理解难度加深 Excel作为一直是使用最广泛的数据表格工具,在数据量日 ...
随机推荐
- XSD详解三 - 复合元素+总结篇
一.复合元素介绍 1.什么是复合元素? 复合元素指包含其他元素及/或属性的 XML 元素. 有四种类型的复合元素: 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素 注释:上述元素均 ...
- 通过 AJAX 加载的 JavaScript 脚本的调试
//# sourceURL= 注意#后面有一个空格.
- LeetCode - 185. Department Top Three Salaries
The Employee table holds all employees. Every employee has an Id, and there is also a column for the ...
- 自定义状态栏的颜色及navigation的title颜色
1.在info.plist中添加View controller-based status bar appearance,值为NO 2.在设置状态栏的地方添加代码 [[UIApplication sha ...
- 对html语义化的理解
所有人都知道html即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言. html标签中的大部分都是由"语义化"标签所担任 那么,它有 ...
- ubuntu16.04~qt 5.8无法输入中文
编译fcitx-qt需要cmake,安装cmake命令,如果已经安装,请略过. sudo apt-get install cmake 安装 fcitx-libs-dev sudo apt-get in ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库 ...
- 用Putty通过SSH访问Linux服务器
1,sudo apt-get install ssh 2,sudo service ssh restart 3,重启ssh成功后,就可以直接用Putty访问服务器.
- FZU - 2150 bfs [kuangbin带你飞]专题一
题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. ...
- 谈一谈Java中的Error和Exception
Error和Exception的联系 继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception. Error和RuntimeExc ...