Spark for python developers ---Spark处理后的数据可视化

spark for python developer 一书,说实在的,质量一般,但勉强可以作为python 工程师的入门资料,至此,这一时段的地铁译结束了,开始新的阅读旅程……

对于 Python 的图形绘制和可视化, 有大量的工具和库,和我们最相关并且有趣的是:

• Matplotlib 是Python 绘图库的鼻祖. Matplotlib 最初7由 John Hunter 创作, 他是开源软件的支持者,建立的 Matplotlib 是学术界和数据科学界最流行的绘图库之一。 Matplotlib 支持生成线图,直方图,功率谱,饼图,误差图,散点图等等。
从 Matplotlib
网站可以看到大量的例子 http://matplotlib.org/examples/index.html.

• Seaborn, 由 Michael Waskom 开发, 是一个快速可视化统计信息的很棒的库,构建在Matplotlib 之上,无缝集成了 Pandas 和 Python 的数据栈, 包括Numpy. Seaborn 图库 在 http://stanford.edu/~mwaskom/
software/seaborn/examples/index.html 展示了这个库的潜力。

• ggplot 是一个新的库,目标是提供R 生态系统中著名的ggplot2 的等价物,是一本Python 的数据封装。它有着和 ggplot2 相同的外观和感觉,使用了由Hadley Wickham 做详细说明的图语法,,由yhat 团队完成了Python 移植。更多信息参考 http://ggplot.
yhathq.com.
• Bokeh 使用了大量的D3.js 的概念,目标是在大数据集或流式数据集上提供高性能的可交互性,而不需要写一些令人恐惧的 javascript and css 代码. Bokeh 在浏览器上交付了动态可视化,有没有服务器都可以。它无缝集成了
 Matplotlib, Seaborn and ggplot ,可以在 IPython notebooks 或者 Jupyter notebooks 中漂亮地渲染. Bokeh 由 Continuum.io 的一个团队开发, 是Anaconda Python数据栈中有机的一部分。

Bokeh server 提供一个成熟的动态绘图引擎,从JSON中实现了反应式场景图。它使用web sockets 保持状态, 通过Backbone.js 和Coffee-script 更新
HTML5 canvas。 Bokeh, 由于从JSON中读取数据, 能容易地绑定例如 R, Scala,
and Julia 这样的其他语言。这里给出了 主要的绘图和可视化库的概览,是不详尽的。让我们集中在可视化的例子上面。

数据可视化的预处理

在进入可视化之前,要在所采集的数据上做些准备工作:

为了可视化活动, 使用了一个7,540 tweets的数据集。
关键信息存储在 tweet_text 字段. 先调用head()函数来预览一下存储在dataframe 中的数据:

现在创建一下工具函数来清空 tweet 文本并解析twitter 的日期 。首先,导入 Python 正则表达式库 re 和时间库:

创建一个 regex 字典,将被编译,然后昨晚函数传递:
• RT: 第一个以RT作为主键的 regex 在tweet 文本中寻找以 RT 开头的关键字 :
re.compile(r'^RT'),

• ALNUM: 第二个以ALNUM 为主键的regex 在tweet文本中寻找包含字母和下划线的@:
re.compile(r'(@[a-zA-Z0-9_]+)'),

• HASHTAG: 第三个 以HASHTAG 为主键的 regex 在tweet 文本中寻找#符号中的字符:
re.compile(r'(#[wd]+)'),

• SPACES: 第四个以SPACES 为主键的 regex 寻找tweet 文本中的空格或分行符 :
re.compile(r's+'),

• URL: 第5个以URL 为主键的 regex 寻找tweet 文本中以https:// or http:// 开头的字符 :

创建一些工具函数:

然后,提取一个tweet中的用户句柄:

从一个tweet 中提取所有 hashtags :

提取所有的URL 链接:

处理tweet 文本中的@符号,这个函数是 接下来wordcloud 的基础 :

标注数据后,创建数据集wordcloud分组:

解析日期成 yyyy-mm-dd hh:mm:ss 格式:

处理前预览数据:

创建了新的dataframe,给每个字段建一个新的列 htag, user handles, URLs,
URLs提取出的文字, 不想用的字符和标签 。 最后,对日期解析:

把 处理过的信息保存为 CSV 格式.,有7,540 记录和 13个字段. 根据选择的数据集输出:

看一眼words, moods, 和memes 划分

现在我们准备构建wordcloud,这可以告诉我们在这些tweets里哪些是重要的词。通过采集的数据集创建wordclouds
,Wordclouds 提取了高频词汇列表来创建词汇的散点图。数据集中的高频词,在wordcloud渲染时使用比较大的字体。 他们包括三种不同的主题和两个竞争或相似的实体。显然,将Apache Spark和Python 作为数据处理和分析的实体。 第二个主题是 2016 年的总统大选, 两个竞争者: Hilary Clinton and
Donald Trump. 最后一个主题是流行音乐的世界,将 Justin Bieber and
Lady Gaga 作为两个指数.
### 建立wordcloud
通过分析有个Spark 的tweets 来解释编程的步骤,加载数据和预览dataframe:

注意: wordcloud 库采用了 Andreas Mueller 开发的一个, 位于 https://github.com/amueller/word_cloud.

这个库需要PIL (short for Python Imaging Library).支持 PIL 可以使用conda install pil. 简单地完成安装,PIL 是一个复杂的库还没有移植到Python 3.4, 所以需要运行Python 2.7+ 环境才能 看 wordcloud:

将下载下面的包:

更新下面的包:

接下来,安装wordcloud 库:

创建wordclouds

这一步将利用从tweet文本中生成的词汇列表来生成wordcloud 程序 首先从在notebook中在线调用 %matplotlib 开始:

我们把dataframe 中txt_terms 字段转换成一个单词列表 ,确保全部转换成str 类型以避免不必要的问题并先检查头四条记录 :

调用Matplotlib 和 wordcloud 库:

列表中,我们创建一个由空格分隔的统一的字符串作为 wordcloud 程序的输入。wordcloud 程序移除了停词:

这里,我们可以为Apache Spark and Python可视化wordclouds. 显然,Spark, Hadoop, big data, 和 analytics 是 memes, 当Python强聚焦于developer, apache spark, 以及 java and ruby的编程提示时,使人回忆起它名字的根源Monty Python

6-2 wordclouds python spark

我们也看一下2016年总统大选中所关注的词汇形成下面的 wordclouds : Hilary Clinton and
Donald Trump. Hilary Clinton 黯然失色于她竞争对手 Donald Trump and Bernie Sanders, 然而Trump 严重以他自己为中心:
6-3 wordcloud trump

有趣的是, Justin Bieber 和 Lady Gaga 例子中, 出现了 love 一词. In
the case of 对于Bieber, follow and belieber 是关键词, 而 diet, weight loss, 和 fashion
是 Lady Gaga 群体的关注点.

6-4 wordcloud lady gaga

tweets定位和 meetups 地图

现在,我们通过Bokeh 深入到交互地图的创建. 首先,创建一个世界地图,那里有我们采样tweet的地理位置信息,把鼠标移动到那些位置 ,可以看到用户与他们相关tweet的悬停框 .
第二幅地图聚焦于伦敦即将到来的 meetups . 这是交互式地图可以作为特定城市即将开始的meetups 时间,日期和位置的提醒。

## Geo-locating tweets

目标是创建一个世界地图,在地图上绘出重要tweet的位置散射点, 在悬停窗口展示 tweets 和做 作者 。通过3步来构建这一虚拟化:
1. 创建一个世界地图,加载一个定义了国家经纬度边界的字典.
2. 加载我们期望的地理位置的重要 tweets 的坐标和作者.
3. 最后,在世界地图上绘制这些tweets 的坐标,以及激活悬停工具来交互性可视化tweets 和它的作者.
第一步,创建一个Python 列表,包含所有国家边界的经纬度:

第二步, 加载重要tweets的抽样集 以便于可视化相应的地理信息:

第三步,先倒入 Bokeh 库. 将在Jupyter Notebook 实例化输出, 获得加载的国家边界的信息,得到 该位置的 tweet 数据. 实例化Bokeh交互工具如 wheel 和 box zoom 以及悬停工具.

现在可以将各种收集的元素放入一个图片对象p. 定义p的标题,宽度和 高度. 创建世界地图背景并高亮背景颜色和边界. 根据位置坐标, 散点描绘相应的tweets . 然后,在用户和他们相应的tweet上激活悬停工具. 最后, 在浏览器中渲染图片。代码如下:

下面的代码给出了世界地图的概貌,红点表明了tweets的原始位置:
6-5 geo tweets

悬停在一个特殊的点,得到该位置的tweets:
6-6 geo tweets hover

能够放大特定的位置:

6-7 get tweets zoom

最后, 我们能够在指定放大区域展示tweets :

6-8 geo locating hover tweet

在Google地图显示即将到来的meetups

现在,目标聚焦于在伦敦即将到了聚会。 我们映射三个聚会 Data Science London, Apache Spark, 和 Machine Learning. 将Google Map 嵌入到 Bokeh 可视化中,根据它们的坐标得到三个聚会的地理位置 ,得到悬停工窗口所显示的信息,例如每个聚会的名称。

首先, 导入所需的 Bokeh 库:

将实例化 Google Map 作为底图, Bokeh visualization 覆盖在上面:

从GMapPlot 类实例化 拥有维度的Bokeh 对象,以及前面步骤的地图选项:

拿到我们将要绘制的三个聚会信息,并得到根据相应坐标的悬停窗口所展示的信息:

在Google Map上定义被画的点:

定义在这个可视化中 Bokeh 工具所需的字符串:

激活悬停工具所携带的信息:

渲染绘图就可以得到伦敦的一个漂亮视图:

6-9 London meetups

一旦我们悬停在一个高亮的点上,就可以得到给定聚会的信息:

6-10 london meetups hover

保留了全部平滑缩放的能力,如下面的截图所示:

6-11 London Meetups Zoom

1 7 收藏 1 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部