2015年1月

大数据时代即将来临

大数据已经来了,但是大数据时代可能还要一小会儿。

大数据这个概念,在过去的一两年时间里非常火爆,圈内几乎无人不知。但是真正去了解和理解大数据的人,可能不多。

先从几个大数据的应用实例讲起。

谷歌预测流感

流感的危害有时候特别大,尤其是新型流感,没办法在短时间内研发出新药。而且传播速度快,无法快速找到传播源。虽然政府要求医生在发现新型流感病例时,报告给疾控中心。但由于人们可能患病多日实在受不了了才去医院,再加上这个信息传递给疾控中心也需要时间。所以卫生机构要判断出流感是从哪里传播出来的,要在流感爆发之后一两周才能做到。

而知名互联网公司谷歌却能在流感爆发前预测出来,它是通过分析研究人们在网上的搜索记录实现的。谷歌公司把 5000 万条美国人最频繁检索的词条与美国疾控中心近几年季节性流感传播时期的数据进行了比较。分析大量与流感相关的搜索词,因此能判断出流感的传播源,而且非常及时。他们的预测与官方数据的相关性高达 97%。

UPS 与汽车修理预测

UPS 国际快递公司从 2000 年就开始监测自己全美 60000 辆车规模的车队,以便能进行防御性的修理。如果车在运输途中抛锚,损失会非常大,因为那样需要再派一辆车,而且会延误配送。所以以前 UPS 每两三年会对车辆的零件进行更换。但这种方法不太有效,因为有的零件并没有毛病就被换掉了。

通过监测车辆的各个部位,UPS 如今只需要更换即将损坏的零件,从而节省了一大笔费用。有一次,甚至发现了一辆新车的一个零件有问题,因此避免了可能出现的麻烦。

这个监测系统其实并不简单,它需要有效的传感器,装载在要监测的部位,还要有一套强大的存储与算法系统来分析收集过来的数据。事实上,现在的很多建筑物、桥梁,大型化工厂、提炼厂均安装了传感器,以便及时发现问题。

数字信息技术让大数据水到渠成

据分析,在 2007 年,所有数据只有 7% 是存储在报纸、书籍、图片等媒介上的模拟数据,其余的全部是数字数据。数字数据是指计算机等电子设备上保存的二进制数据。随着时间的推移,数字数据的占比继续扩大。正是因为信息技术的发展,才让我们得以存储如此大量的数据。比如一个大学图书馆的所有书籍,转换成数字数据,只要一个 U 盘就可以装下。

如此大量的数据,现在我们很容易就存储起来了。但是还得处理它,才能让它产生价值,这就要靠云计算。通过云计算,对大数据分析和预测,释放出更多的隐藏价值。

大数据的核心就是预测。它是把数学算法运用到海量的数据上来预测事情发生的可能性。在不久的将来,世界许多现在单纯依靠人类判断力的领域都会被计算机系统所改变甚至取代。

移动互联网已经发展得非常好,现在几乎人手一部手机,它无时无刻都在收集着各种数据,而且更多的可穿戴设备涌现出来了。通过新技术,我们可以获取更多有用的信息帮助我们判断。

大数据时代的思维变革

大数据时代的精髓在于我们分析信息时的三个重要转变。

1.更多。不是随机样本,而是全体数据。

在小数据时代,我们用随机采样和统计学来分析问题。因为那时候无法获取全量数据,或者那样做成本太高。统计学家们证明:采样分析的精确性随着采样随机性增加而大幅提高,但与样本数量的增加关系不大。另外随机采样无法关注细节,就像是模拟照片打印,远看很不错,但是聚焦到某个点,就会变得模糊不清。

大数据时代则是分析全量数据。这是因为现在我们有条件和能力获取到全体数据。存储技术和云计算的发展、传感器和物联网的发展以及存储成本的大大降低,促进了这一发展。

统计抽样其实只是为了在技术受限的时期,解决当时存在的问题而产生,其历史尚不足一百年。如今,技术环境已经有很大的改变。在大数据时代进行抽样分析就像在汽车时代骑马一样。在某些特定的情况下,我们依然可以采用样本分析,但这不再是我们分析数据的主要方式。

2.更杂。不是精确性,而是混杂性。

在采样的时候,对精确度的要求很苛刻。因为收集信息的有限意味着细微的错误会被放大,甚至有可能影响整个结果的准确性。但是大数据系统就不一样了,它允许不精确的数据甚至少量错误的数据,这并不会影响到最终结果。因为在最后分析的时候,我们可以排除掉错误的数据。

混杂性也指大数据系统不要求所有收集的数据都是格式化的,它可以接受各种形式的数据。

3.更好。不是因果关系,而是相关关系。

大数据时代我们一直在寻找相关关系,而不再热衷于因果关系。所以大数据会告诉我们“是什么”,而不是“为什么”。而且由于时间有限,我们没有必要知道“为什么”。

例如亚马逊网站上,购买海明威作品的客户通常会购买菲次杰拉德的书。这个通过大数据很容易分析出来,但不知道为什么。这似乎并不重要,重要的是销量。

相关关系没有绝对性,只有可能性。如果 A 和 B 经常一起发生,我们只需注意到 B 发生了就可以预测 A也发生了。相关关系是无法预知未来的,他们只能预测可能发生的事情。

现在有了好的分析工具,我们可以更快更好地找到相关关系。建立在相关关系分析基础上的预测是大数据的核心。

相关关系分析本身意义重大,同时它也为研究因果关系奠定了基础。通过找出可能相关的事物,在此基础上进行因果关系分析。可以说,因果关系是一种特殊的相关关系。

大数据时代的隐忧

由于我们已经身处一个数据无处不在的世界,手机、可穿戴设备以及各种电子设备,都在收集各种数据。个人隐私保护是我们不得不考虑的问题。

关于中医的思考

中医,可以说是通过小数据寻找因果关系,结果得出的是相关关系。中医是一代代药师通过自己的实践总结下来的经验,他们像神农尝百草一样,或者纯粹的偶然,找到了治疗某种疾病的药方。但他们并不知道为什么,只知道得这种病,吃这种药就会好。

中医也有自成体系的理论,但我认为那是前辈们幻想或者猜测出来的因果关系。所以在中医行医的过程中,误疹、治疗失败的比例应该不低。在小数据时代,寻找相关关系是件很不靠谱的事。

注:本文是我阅读《大数据时代》之读书笔记,本书值得推荐。

Git 学习笔记

0. 概念

工作目录(Working directory):本地可见的文件,没有被 Git 系统所管理。工作目录的内容是你当前看到的,也是最新的。

暂存区/索引区(Stage/Index):存放工作目录中那些你打算提交到版本库的变更,Git 并没有把你所添加的文件放入版本库中,而是对内容进行 hash 后生成了一个编号。相当于告诉 Git,我有一个编号为 xxxxx 的文件将要提交。

本地版本库(Repository/History/HEAD):保存着被提交的各个版本。

远程仓库(Remote Repository):是本地仓库的异地备份。

1. 基本操作

请输入图片描述

查看当前状态
git status

会显示未缓存(未索引)的文件,以及未提交的文件。

添加与提交
git add <file>...
git add *
git commit -m "<comment>"
推送到远程仓库
git push [origin master]

说明:将本地 master 分支推入远端的 origin。

如果本地仓库不是克隆过来的,并欲将你的仓库连接到某个远程服务器,可以使用如下命令为远端仓库添加 orgin:

git remote add origin <server>

如此你就能够将你的改动推送到所添加的服务器上去了。

2. 取消已被 Git 初始化(git init)的目录

删除该目录下 .git 文件夹即可。

3. 撤销本地修改

git checkout -- <filename>

此命令会使用 HEAD 中的最新内容替换掉工作目录中的文件。已添加到暂存区的文件不会受到影响,即不变。(当然,已经提交的文件更不会变。)

对于已缓存的文件,可以先撤销缓存(Unstage),再使用上面的命令来取消修改:

git reset HEAD *
git reset HEAD <filename>

4. 撤销提交

git reset --hard <commit_id>

回退到本地最新版本(或某个指定的版本),本地之前修改的未缓存的都会被覆盖掉。

5. 删除文件&文件重命名

删除文件
git rm <filename>
git rm -r <foldername>

rm 与 add 类似,都是将改动缓存起来,即已经添加到暂存区,下一步需要提交。rm 不仅会在 Git 系统中删除文件,它还会自动将物理文件删除。

文件重命名
git mv <filename> <newfilename>

mv 与 add 类似,也是将改动缓存起来,即已经添加到暂存区,下一步需要提交。mv 不仅会在 Git 系统中重命名文件,还会将物理文件重命名。

6. 补充提交

有时候已经提交了,但发现这次提交不完整,还有修改需要在这一次中提交。在没有推送(PUSH)到远端的情况下可用如下命令补交:

git commit --amend -C HEAD

--amend 是重写提交历史,-C 是重用某次提交的提交信息。

7. 命令别名

git config --global alias.(name) "(command)"

括号部分替换为别名和对应的命令。它实际是将这个设置写入配置文件 .gitconfig,可以使用如下命令查看配置文件:

git config --global --list

例如设置 切换分支 命令的别名:

git config --global alias.co "checkout"

那此后就可以这样来切换分支:

git co branch_x

其中 branch_x 为某分支名称。

8. 删除未跟踪的文件

git clean -df
git clean -f

参数说明:-d 删除未跟踪目录,-f 删除未跟踪的文件。

如果想在删除前查看哪些文件将会被删除,可使用下面的命令:

git clean -dn

参考资料:

图解Git