Spark for python developers —Spark处理后的数据可视化
admin
2023-07-31 00:47:16
0

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 这样的其他语言。这里给出了 主要的绘图和可视化库的概览,是不详尽的。让我们集中在可视化的例子上面。

数据可视化的预处理

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

12345678910111213141516171819202122 In  [16]:#  Read  harvested  data  stored  in  csv  in  a  Panda  DFimport  pandas  as  pdcsv_in  =  \’/home/an/spark/spark-1.5.0-bin-hadoop2.6/examples/AN_Spark/data/unq_tweetstxt.csv\’pddf_in  =  pd.read_csv(csv_in,  index_col=None,  header=0,  sep=\’;\’,encoding=\’utf-8\’)In  [20]:print(\’tweets  pandas  dataframe  –  count:\’,  pddf_in.count())print(\’tweets  pandas  dataframe  –  shape:\’,  pddf_in.shape)print(\’tweets  pandas  dataframe  –  colns:\’,  pddf_in.columns)(\’tweets  pandas  dataframe  –  count:\’,  Unnamed:  0   7540id  7540created_at  7540user_id 7540user_name   7538tweet_text  7540dtype:  int64)(\’tweets  pandas  dataframe  –  shape:\’,  (7540,  6))(\’tweets  pandas  dataframe  –  colns:\’,  Index([u\’Unnamed:  0\’,u\’id\’,  u\’created_at\’,  u\’user_id\’,  u\’user_name\’,  u\’tweet_text\’],dtype=\’object\’))

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

1234567891011121314151617181920 In  [21]:pddf_in.head()Out[21]:Unnamed:  0 id  created_at  user_id user_name   tweet_text0   0   638830426971181057  Tue  Sep  01  21:46:57  +0000  20153276255125  True  Equality  ernestsgantt:  BeyHiveInFrance:  9_A_6:dreamint...1   1   638830426727911424  Tue  Sep  01  21:46:57  +0000  20153276255125  True  Equality  ernestsgantt:  BeyHiveInFrance:PhuketDailyNews...2   2   638830425402556417  Tue  Sep  01  21:46:56  +0000  20153276255125  True  Equality  ernestsgantt:  BeyHiveInFrance:  9_A_6:ernestsg...  3   3   638830424563716097  Tue  Sep  01  21:46:56  +0000  20153276255125  True  Equality  ernestsgantt:  BeyHiveInFrance:PhuketDailyNews...4   4   638830422256816132  Tue  Sep  01  21:46:56  +0000  20153276255125  True  Equality  ernestsgantt:  elsahel12:  9_A_6:dreamintention... 

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

123 In  [72]:import  reimport  time

创建一个 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:// 开头的字符 :

1234567891011121314 re.compile(r\'([https://|http://]?[a-zA-Z\\d\\/]+[\\.]+[a-zA-
Z\\d\\/\\.]+)\’)  In  [24]:

regexp  =  {\”RT\”:  \”^RT\”,  \”ALNUM\”:  r\”(@[a-zA-Z0-9_]+)\”,\”HASHTAG\”:  r\”(#[\\w\\d]+)\”,  \”URL\”:r\”([https://|http://]?[a-zA-Z\\d\\/]+[\\.]+[a-zA-Z\\d\\/\\.]+)\”,\”SPACES\”:r\”\\s+\”}  regexp  =  dict((key,  re.compile(value))  for  key,  value  in  regexp.items()) In  [25]:regexpOut[25]:{\’ALNUM\’:  re.compile(r\'(@[a-zA-Z0-9_]+)\’),\’HASHTAG\’:  re.compile(r\'(#[\\w\\d]+)\’),\’RT\’:  re.compile(r\’^RT\’),\’SPACES\’:  re.compile(r\’\\s+\’),\’URL\’:  re.compile(r\'([https://|http://]?[a-zA-Z\\d\\/]+[\\.]+[a-zA-Z\\d\\/\\.]+)\’)}

创建一些工具函数:

1234 In  [77]:def  getAttributeRT(tweet):    \”\”\”  see  if  tweet  is  a  RT  \”\”\”    return  re.search(regexp[\”RT\”],  tweet.strip())  !=  None

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

123 def  getUserHandles(tweet):    \”\”\”  given  a  tweet  we  try  and  extract  all  user  handles\”\”\”    return  re.findall(regexp[\”ALNUM\”],  tweet)

从一个tweet 中提取所有 hashtags :

123 def  getHashtags(tweet):    \”\”\”  return  all  hashtags\”\”\”    return  re.findall(regexp[\”HASHTAG\”],  tweet)

提取所有的URL 链接:

123 def  getURLs(tweet):    \”\”\”  URL  :  [http://]?[\\w\\.?/]+\”\”\”    return  re.findall(regexp[\”URL\”],  tweet)

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

123456 def  getTextNoURLsUsers(tweet):    \”\”\”  return  parsed  text  terms  stripped  of  URLs  and  User  Names  in tweet  text    \’  \’.join(re.sub(\”(@[A-Za-z0-9]+)|([^0-9A-Za-z  \\t])|(\\w+:\\/\\/\\    S+)\”,\”  \”,x).split())  \”\”\”    return  \’  \’.join(re.sub(\”(@[A-Za-z0-9]+)|([^0-9A-Za-z  \\t])|(\\    w+:\\/\\/\\S+)|(RT)\”,\”  \”,  tweet).lower().split())

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

123456 def  se

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...