forked from Honlan/starwar-visualization
-
Notifications
You must be signed in to change notification settings - Fork 0
/
演讲稿.txt
59 lines (30 loc) · 9.99 KB
/
演讲稿.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
大家好,我是张宏伦,目前是上海交通大学的一名直博在读生。业余时间爱好做一些数据分析和可视化的工作。今天我给大家分享之前做过的一个展示,也就是星战图谱可视化
大数据是什么呢?媒体报道得很炫酷,公司宣传得很复杂,公众理解的主要是各种各样的图表,而我实际干的,就是用文本编辑器去写一行又一行的代码
不得不说,大数据的概念被炒得太火、太热、太烂,其实很多数据本身并谈不上是大数据。身为一个普通的个体,今天我不谈大数据,只分享如何小而美地玩转一些小数据
我们玩数据的话,无非就是以下四个环节。第一是采集,我们的数据从哪里来?要么是别人准备好提供给我们,要么就是我们自己去采集、或者从互联网上抓取;第二,我们需要把采集到的数据存储下来,可以是存储到静态文件,例如txt、csv、json等,也可以存储到一些通用而且成熟的数据库里,例如mysql、postgres等;第三,对存储的数据进行清洗和分析,一方面是做一些统计汇总的工作,并得出一些结论,另一方面是用机器学习的方法训练一些模型,并且用来解决实际问题;最后,用数据可视化的方法将所得的结论和模型进行展示,毕竟一图胜千言,数据可视化可以帮助我们更好地展示从数据中挖掘出的价值。
接下来我们再谈谈编程语言。很多人都在争论,到底哪种编程语言最好,也有很多人在困惑,要做数据分析的话,应该从哪种编程语言学起。其实在我看来,只学习一门语言可能远远不够,而是各方面都应当有所涉足,但是同时又有你最擅长和习惯使用的一门语言。C++和Java这两门语言你需要至少熟悉一门,从而了解语法的基本内容和面向对象的编程思想,熟悉的意思是不用完全掌握,只要在要用的时候,查一查,能够快速回想起来即可。python是一门简单好用而且功能强大的语言,也是我使用最多、最为熟悉的一门语言,我们说python大法好,除了炒菜别的都可以。R是一门统计分析语言,近几年它的学习门槛和成本都在不断降低,可以用来做一些专业的分析和绘制一些漂亮的图形。然后就是和web网站相关的一些语言,例如后端的php,前端的html、css和javascript。就我个人而言,比较习惯于用python采集数据并且写入到文件或数据库,做分析的时候是结合使用python和R,至于可视化,则是用R绘制一些静态图形,使用web网站做一些交互可视化。
希望通过这一页的ppt内容,可以让大家对玩转数据的基本流程和套路有个大致概念,同时对各种编程语言的生态环境有一个初步理解。
那么,听完今天的分享,大家会有哪些收获呢?你将掌握:使用简单的爬虫获取互联网上的公开数据,将爬取的数据存储到静态文件或数据库中,使用代码进行简单的统计分析和聚合运算,以及借助图形和交互网页将分析结果进行展示
来看看我们的最终成果,包括和星战系列七部电影有关的一些格式化数据,一些静态可视化图形,以及一份动态可视化网页
首先第一步,我们要做的是采集数据
我们要用的数据来自于SWAPI,这是全球首个量化、可供编程使用的星战数据集,开发者使用了漫长的时间进行人工搜集和整理。一共提供了六个API,对应星战电影中的六类实体,分别是电影、人物、飞船、装备、种族和星球
如果你在浏览器中访问以下链接,就会得到右边的结果,如果把1换成其他数字,将会得到其他人物所对应的数据。这里返回的是一个JSON,即键值对形式的字符串,我们看到name的值为Luke Skewalker,height的值为172等等。这里放了一个链接,大家可以进一步了解关于JSON的介绍
接下来我们将用代码获取以上六类实体的全部数据,我使用的是python中的urllib2。一个url链接可能是网页,也可能是API,分别使用python中的Beautiful Soup和JSON处理,关于python的更多内容,大家可以访问廖雪峰老师的python教程进行学习
让我们来一发代码。我的环境是Mac Os,python版本是2.7,用的编辑器是Sublime Text 2,强烈推荐大家试一下这个文本编辑器,简单好用而且功能强大。在右边的代码里,我用一个list列表存放七部电影的API链接,打开了一个写文件,对每个链接使用urllib2发起请求、建立连接并读取结果,将结果写入文件,最后完成后将写文件关闭
采集结果如右图所示,每部电影对应一行JSON字符串,也就是用大括号括起来的内容,title的值为原力觉醒,系列id为第七部,等等。获取数据的代码包括get_films.py和get_details.py,获取的数据存放在6个csv文件中,对应星战系列中的6类实体。
接下来,我们讲一下数据存储
我们可以将获取的数据存储到静态文件,例如txt、csv和json等,也可以存储到一些成熟的数据库,例如mysql等关系型数据库,以及其他常用的nosql数据库。细心的同学可能已经发现了,我们在之前的代码中,已经使用了fw.write()函数,将返回的结果写入到文件中了。需要指出的一点是,之前获取的六个数据文件,每行存储的都是一个json字符串,所以它们并不是csv文件,我只是习惯性地把后缀写成了csv,纯属手滑,虽然不影响我个人使用,但还是要和大家解释一下
然后是对准备好的数据进行分析
虽说是分析,但在今天的任务里,我们主要做的是一些统计工作。对于已经获取的json数据,我们使用python将其转化为csv文件,也就是逗号分隔值,每行表示一条记录,每列表示该记录的一个字段,因此可以理解为关系型数据库和excel中的表格,以及R和pandas中的dataframe。接下来我们使用R读取csv,并用ggplot2绘制一些静态的可视化图形。如果你对R和ggplot2感兴趣,可以看看我的个人博客,上面有关于这两方面内容的系列教程
首先,让我们看看,七部电影分别涉及其他类别实体各多少,可以发现,Attack of the Clones涉及人物最多,The Force Awakens涉及实体最少,可能是因为数据尚未整理完全
然后,我们来看看,关于星战电影人物资料的一些统计,x轴表示人物体重,y轴表示人物身高,颜色表示性别。可以发现,男性人物居多,身高和体重整体呈正相关。有很多体重为-1的点,表示存在数据缺失情况
最后,我们再来看看,关于星战电影种族资料的一些统计,x轴表示种族寿命,y轴表示平均身高,颜色表示种族所属类别。可以发现,大多数种族的寿命在100年以下,少数种族的寿命可达几百年。这里寿命为-1的点,同样表示存在数据缺失
激动人心的时刻到了,我们现在要使用更多炫技和更高的颜值,来展示我们的数据价值
为什么要用交互网页进行可视化呢?因为可以根据用户的交互和操作,选择性地动态展示更丰富的内容。我使用三个python代码整理了三个json数据文件供前端使用,所以不需要涉及到后端和数据库,因此你需要会html、css、javascript和d3,就能完成接下来的任务
除了以上三个json文件,网页项目中还包含一个index.html,这就是交互可视化的全部代码了。在这个index.html中,我用到了html、css、javascript和jquery,但这些都是基础,最为核心的是D3,也就是Data Driven Documents,即数据驱动文档,它是当前最流行的js可视化库之一。D3的核心思想是这样的,使用数据来生成网页上的元素,当数据发生更新时,根据数据的变化来修改网页元素的外观和属性
那么,D3的使用流程是怎样的呢?我们需要在html代码中先准备一个svg和g作为绘图容器,然后在js代码中select()这个容器,接着selectAll()将要生成的svg元素,使用data()为svg元素绑定数据,根据数据和元素对应状态,执行enter().append()和exit().remove(),使用attr()控制svg元素的外观,并根据用户交互,动态地更新svg元素的外观
说了那么多,让我们开始动手吧。为了实现这个关系图,我们根据节点数据,生成circle和text元素;根据节点链接关系,生成line元素;根据节点数据,控制circle和text的大小和颜色;当鼠标悬浮和拖拽时,触发相应的时间,并更改元素的外观和显示。时间线的实现思路也是类似的,唯一不同的是,这里使用的是rect元素
代码写好了,现在来部署和访问我们的交互网页。为了达到最佳体验,良心推荐大家使用Chrome浏览器。如果你直接双击index.html,或者用浏览器直接打开它,可能看到的就是下面这样的效果,两个图都没有出来,这是为什么呢?
因为跨域请求在大多数浏览器中都是禁止的,所以代码中请求不到三个json数据,可视化效果自然也就出不来。所以不管是在本地还是外网中展示我们的网页,我们都需要一个Web环境,Web服务器有Apache和Nginx。那么大家如何在自己的电脑上快速搭建一个Web环境呢?我推荐用XAMP系列,其中W、L、M分别代表windows、linux和mac os,A代表Apache,M代表MySQL,P代表PHP。所以大家根据自己电脑的系统去下载WAMP或者MAMP,安装之后把网站项目文件拷贝到Web环境的根目录,启动Web服务之后就可以访问了
最后总结一下,玩转数据并不困难,但是需要持久的兴趣,和一颗永远不知疲惫的心
我是张宏伦,这里是我的微信和微信公众号,下面还提供了完整项目链接、可视化链接,以及我的个人网站,欢迎大家访问,谢谢大家!