将 Python 用于云和大数据分析

传统编程语言在从互联网获取直播数据方面的效率不高。在这里,通用编程语言可以帮助您解决这个问题。请继续阅读以了解如何将 Python 用于云和大数据分析。

根据国际统计报告,WhatsApp 每天有大约100万的新用户注册和7亿的活跃用户。这些用户每天大约会发送300亿条消息,接收340亿条消息(来源:statista.com)。Twitter 的统计数据显示,每天有3.5亿条推文和超过5亿个帐户。数据每时每刻都在快速增长,预计到2020年数据的生成将比2009年高出44倍(来源:http : //wikibon.org/blog/big-data-statistics/))。

这些数据本质上是非结构化的,这意味着它具有不同的格式。这些庞大的数据通常被称为大数据。深入研究这些数据智能和有意义的模式称为大数据分析。许多研究人员和科学家正在使用各种技术和工具在这个领域工作。研究和开发需要的实时数据可以通过多种方式获得。其中之一是从”开放数据门户“获取数据。这些门户网站为多个领域的研究和开发提供可靠的数据集,可以以多种格式下载,包括 XML,CSV,JSON 等等。

获取开放数据的知名门户网站

  • Datahub可在https://datahub.io/获得。
  • Book-Crossing 数据集 http://www.informatik.unifreiburg.de/~cziegler/BX/
  • 世界卫生组织 - http://www.who.int/research/en/
  • 世界银行 - http://data.worldbank.org/
  • NASA - https://data.nasa.gov/
  • 美国政府 - http://www.data.gov/
  • 机器学习 - http://bitly.com/bundles/bigmlcom/2
  • 明斯特大学科学数据 - http://data.uni-muenster.de/
  • 希拉里梅森研究质量 - https://bitly.com/bundles/hmason/1

另一种获取数据集的方法是使用编程语言生成我们自己的数据集。这里的主要问题是选择合适的编程语言或工具,以便从社交媒体应用程序或直播网站获取实时数据。常用的编程语言在从互联网获取直播数据方面的效率不高。

Python 是可与流媒体直播服务器通信的杰出和高效的编程语言之一。您可以使用它将所提取的数据存储在数据库或文件系统中以进行分析和预测。

让我们继续看看一些真实的案例,其中 Python 已经被用来获取直播数据。

图1:timesofindia.com 分析印度孟买指数(SENSEX)属性的屏幕截图

使用Python脚本进行网页数据抓取

Python脚本可用于从印度孟买指数中获取实时数据。这种技术被称为网页数据抓取。图1给出了 timesofindia.com 上的实时股票市场指数的截图。使用 Python 获取变化频繁的印度孟买指数并存储在一个单独的文件中,以便保存每个时刻的记录。为了实现这个想法,使用Python 中集成的 BeautifulSoup 库。

以下代码可以在 Python 中使用和执行。执行后,一个名为 bseindex.out 的新文件将被创建并且每一秒的印度孟买指数数据将被存储在文件中。一旦我们将实时数据存储到文件中,就可以使用 SciLab,WEKA,R,TANAGRA 或任何其他数据挖掘工具使用数据挖掘算法轻松分析这些数据。

from bs4 import BeautifulSoup
import urllib.request
from time import sleep
from datetime import datetime
def getnews():
url = “http://timesofindia.indiatimes.com/business”
req = urllib.request.urlopen(url)
page = req.read()
scraping = BeautifulSoup(page)
price = scraping.findAll(“span”,attrs={“class”:”red14px”})[0].text
return price
with open(“bseindex.out”,”w”) as f:
for x in range(2,100):
sNow = datetime.now().strftime(“%I:%M:%S%p”)
f.write(“{0}, {1} \n “.format(sNow, getnews()))
sleep(1)

使用类似的方法,可以使用 Python 代码获取和分析 YouTube 中喜欢的内容,如下所示:

from bs4 import BeautifulSoup
import urllib.request
from time import sleep
from datetime import datetime
def getnews():
    url = “ https://www.youtube.com/watch?v=VdafjyFK3ko “
    req = urllib.request.urlopen(url)
    page = req.read()
    scraping = BeautifulSoup(page)
    price = scraping.findAll(“div”,attrs={“class”:”watch-view-count”})[0].text
    return price
with open(“baahubali.out”,”w”) as f:
    for x in range(2,100):
        sNow = datetime.now().strftime(“%I:%M:%S%p”)
        f.write(“{0}, {1} \n “.format(sNow, getnews()))
        sleep(1)

获取网站的所有超链接

可以使用以下代码获取网站的所有超链接:

from bs4 import BeautifulSoup
import requests
newurl = input ("Input URL")
record = requests.get("http://" +newurl)
mydata = record.text
mysoup = BeautifulSoup(mydata)
for link in mysoup.find_all('a'):
    print(link.get('href'))

在云基础设施中使用Python

有许多服务提供商提供私有或公有的云服务。下面列出的是一些著名的基于云和大数据的服务提供商,它们提供了一个选项,可以使用户对自己的应用程序进行编写代码和部署:

  • Amazon EC2
  • IBM Bluemix
  • Microsoft Azure
  • Google
  • Qubole

云服务提供商利用专用软件包和工具以支持使用不同的语言来编写代码。Python 可以用于这些云计算基础设施。

对于 IBM Bluemix,可以使用 https://console.ng.bluemix.net/ 访问云服务,在通过验证后就可以使用这些服务。云基础架构可用于 Cloud Foundry CLI(命令行界面)。

安装 Cloud Foundry(CF)后,可以与远程服务器进行通信。要检查版本,使用以下命令:

$ cf -v

以下命令用于在云服务器上上传应用程序:

$ cf push MyApp -m 128M -b https://github.com/cloudfoundry/cf-buildpack-python.git
图2:来自 YouTube 的 Bahubali 电影预告片的屏幕截图

Python 用于 NoSQL 数据库

NoSQL 数据库正用于在社交媒体应用程序和门户网站中处理大数据——在这些应用程序和门户网站中处理巨大的,异构的和非结构化的数据格式。NoSQL 数据库用于更快地访问后端大数据集中的记录。印度的 Aadhaar 系统正在使用的就是 NoSQL 数据库,系统中涉及大量信息,包括文本数据,图像,指纹和虹膜检测。传统的数据库系统不能同时处理不同类型(文本,视频,图像,音频,指纹,虹膜样本等)的数据集。

目前,许多 NoSQL 数据库被用于不同类型的门户网站,这些数据库专门处理异构和非结构化数据。

在传统的基于 Web 的实现中,Apache Derby,MySQL,Oracle,IBM DB2,Microsoft SQL Server,IBM Notes,PostgreSQL,SQLite,Sybase 等关系型数据库管理系统(RDBMS)被部署于数据库应用程序。这些被称为传统 SQL 数据库,符合 ACID(原子性,一致性,隔离性和持久性)特性。NewSQL 是新一代的数据库引擎,为联机事务处理(OLTP)的读写负载提供 NoSQL 系统的可扩展性和高性能,同时又保持传统数据库系统的 ACID 特性。

目前,Web 应用程序使用非结构化数据,包括音频,视频,文本,流媒体,信号,图像,像素等多种格式。在每个文件模式中,都有许多文件格式。例如,在视频中,有许多文件格式,包括 MPEG,MP4,AVI,3GP,WMV,OGG,FLV 等。以类似的,图像或图形文件格式包括 GIF,PNG,JPEG,PCX,BMP,TIFF 和许多其他格式。其中主要问题是 Web 应用程序与不同域中的所有这些文件格式的兼容性。在这里,NoSQL 数据库的概念开始发挥作用,因为 NoSQL数据库可以使任何类型的文件格式都能够在 Web 应用程序中处理和集成。NoSQL(不仅仅是SQL)数据库提供了用于存储和检索数据的系统,而不是模拟关系数据库中使用的表格关系方法。NoSQL 数据库中的数据结构与传统 RDBMS 中的数据结构完全不同。目前,大数据和实时 Web 应用正在迅速采用前者。对 NoSQL 数据库进行分类有多种方法,每种方法都有不同的类别和子类别。由于各种方法和重叠,很难获得非关系数据库的概述。以下列出几个类别:而不是模拟关系数据库中使用的表格关系方法。NoSQL 数据库中的数据结构与传统 RDBMS 中的数据结构完全不同。目前,大数据和实时 Web 应用正在迅速采用前者。对 NoSQL 数据库进行分类有多种方法,每种方法都有不同的类别和子类别。由于各种方法和重叠,很难获得非关系数据库的概述。以下列出几个类别:而不是模拟关系数据库中使用的表格关系方法。NoSQL 数据库中的数据结构与传统 RDBMS 中的数据结构完全不同。目前,大数据和实时 Web 应用正在迅速使用前者。

对 NoSQL 数据库进行分类有多种方法,每种分类方法对应不同的类别和子类别。由于各种分类方法结果会产生重叠,很难获得非关系数据库的概述。以下列出几个类别:

Python 编程 - CouchDB

Apache CouchDB 是最受欢迎的开源数据库之一,广泛用作面向文档的 NoSQL 数据库。像大多数其他 NoSQL 数据库一样,CouchDB 使用 JSON(JavaScript Object Notation)格式来存储数据。JSON 格式是开放的标准数据文件格式,用作 XML 的替代方案以在多个不兼容和异构服务器之间传输数据。下面是一个 JSON 示例表示形式:

{
    “FirstName”: “X”,
    “LastName”: “X”,
    “LiveStatus”: X,
    “Gender”: X,
    “ContactDetails”: [
        {
        “ContactType1”: “X”,
        “Number”: “X”
        },
        {
            “ContactType2”: “X”,
            “Number”: “X”
        }
    ],
    “JobStatus”: [X],
    “PAN”: X
}

安装 CouchDB

在 Ubuntu 和 Debian Linux 系统上,使用以下命令:

$ sudo ptitude install couchdb

对于 Gentoo Linux,请使用下面的命令:

$ sudo emerge couchdb

可以使用所有发行版中都有的 init 脚本启动或停止这些服务,如下所示:

$ /etc/init.d/couchdb start

Windows 下的 CouchDB 安装程序可从 http://couchdb.apache.org 获得。安装在系统上的 CouchDB 可以在 standalone

模式下运行,也可以在 service 模式下运行。

Futon:CouchDB 的 GUI 管理工具

Futon 是为 CouchDB 构建的基于 Web 的 GUI 面板。它提供了大部分功能的基本接口,包括创建,删除,更新和查看文档。它提供对配置参数的访问以及启动复制的接口(请参见图3和4)。

图3:Futon:CouchDB 的管理面板

CouchDB 与 Python 的交互

一个名叫 couchdb 的专用包,提供了 Python 与 CouchDB 交互的接口,包含以下的主要模块:

  • couchdb.client:这是一个用于连接 CouchDB 的客户端库
  • couchdb.mapping:这个模块提供了 CouchDB 中 JSON 文档和 Python 对象之间的高级映射
  • couchdb.view:为用户提供操作 CouchDB 中预定义视图的接口
>>> import couchdb
 
>>> couch = couchdb.Server()

上面的代码创建 server 对象。默认URL是 localhost:5894。

在实时服务器上,代码如下所示:

>>> couch = couchdb.Server(‘http://www.mybigcloudportal.com:5984/’)
 
>>> mydb = couch.create(‘testDB’)

上面的代码创建一个新的数据库。

>>> mydb = couch[‘mynosqldb’]

上面的代码是使用现有的数据库。

>>> mydoc = {‘Country’: ‘India’}

选择数据库后,上述代码用于创建文档并将其插入到数据库中。

>>> mydb.save(mydoc)

上面的 save()方法返回当前创建的文档的 ID 和 'rev'。

>>> mydb.delete(doc)
 
>>> couch.delete(‘testDB’)

以上命令用于删除文档和数据库。

图4:在 Futon 中创建数据库

使用 CouchDBKit

CouchDBKit 的目标是为 Python 应用程序提供专用框架来管理和访问 CouchDB。以下功能是 CouchDBKit 固有的特性:

  • 使用 py-restclient 操作 http 后端
  • 动态管理文档
  • 线程安全
  • 将设计文档附加到应用程序并将其发送到 CouchDB
  • 使用动态模式管理文档

为了使用 Pip 安装CouchDBKit,请使用以下命令:

$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py
$ easy_install pip

要安装或升级到最新发布的 CouchDBKit 版本,请使用下面的命令:

$ pip install couchdbkit

下面是一段使用了 CouchDBKit 的代码:

from couchdbkit import Server
myserver = Server()
db = myserver.create_db(“couchbdkit_test”)
db[‘myid’] = { ‘x’: ‘Hello’ }
doc = db[‘myid’]

您可以使用动态模式轻松地将 CouchDB 对象映射到 Python 对象,如下所示:

from couchdbkit import Document
class MyDBClass(Document):
    author = StringProperty()
    content = StringProperty()
    date = DateTimeProperty()
    MyDBClass = MyDBClass()
    MyDBClass.author = “AuthorName”
    MyDBClass.homepage = “http://couchdbkit.org”

一旦完成,第一个 CouchDB 文档将如下所示:

import datetime
from couchdbkit import *
class MyDBClass(Document):
    author = StringProperty()
    content = StringProperty()
    date = DateTimeProperty()

下面是在 'MyDBClass' 数据库上保存 MyDBClass 的代码。我们也看到如何创建一个数据库。

server = Server()
db = server.get_or_create_db(“MyDBClass”)
MyDBClass.set_db(db)
MyDBClass = MyDBClass
(
    author=“AuthorName”,
    content=“Welcome”,
    date=datetime.datetime.utcnow()
) 
MyDBClass.save()

Python 编程 - MongoDB

首先,安装 MongoDB 和 PyMongo,以便建立 Python 与 MongoDB 的连接。在 Python shell 中,执行以下指令:

$ import pymongo

接下来,通过运行 mongod 实例来创建 MongoClient 。以下代码连接默认主机和端口:

>>> from pymongo import MongoClient
>>> myclient = MongoClient()

具体的主机和端口可以显式指定,如下所示:

>>> myclient = MongoClient(‘localhost’, 27017)

或者,可以使用 MongoDB URI格式,如下所示:

>>> myclient = MongoClient(‘mongodb://localhost:27017’)

MongoDB 实例可以支持多个独立的数据库,这可以通过在 MongoClient 实例上使用属性样式访问来获得,如下所示:

>>> mydb = myclient.MyTestDatabase

同样,针对 MongoDB 的其他 Python 指令也可用于非结构化的数据和大数据处理。

本文的版权归 LynnShaw 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

真正从零开始,TensorFlow详细图文安装入门教程!

GAIR 今年夏天,雷锋网将在深圳举办一场盛况空前的“全球人工智能与机器人创新大会”(简称GAIR)。大会现场,谷歌,DeepMind,Uber,微软等巨头的人...

430140
来自专栏恰童鞋骚年

谈谈对于企业级系统架构的理解—李平

原文地址:http://www.cnblogs.com/liping13599168/archive/2011/05/11/2043127.html

12940
来自专栏编程一生

架构师之路--视频业务介绍,离线服务架构和各种集群原理

22920
来自专栏FreeBuf

Black Hat Europe 2017:安全专家发现5款最流行编程语言中的漏洞

没有不漏的锅,如果底层的编程语言如果出现问题,顶层的应用程序还能幸免于难吗? 这周在 Black Hat Europe 2017 安全会议上,一名安全研究员公开...

25180
来自专栏FreeBuf

关于Fuzz工具的那些事儿

前段时间一直在研究fuzz工具,这里就写篇文章总结一下下。 在安全测试中,模糊测试(fuzz testing)是一种介于完全的手工渗透测试与完全的自动化测试之间...

2.3K50
来自专栏恰童鞋骚年

谈谈对于企业级系统架构的理解

在我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层;而对于一个新手来说,从...

16920
来自专栏散尽浮华

Linux系统下CPU使用(load average)梳理

在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的负载情况(load average)。对一般的系统来说,根据...

1.1K60
来自专栏FreeBuf

2017 OWASP Top 10十大安全漏洞候选出炉,你怎么看?

OWASP(开放式Web应用程序安全项目)近日公布2017 OWASP Top10(十大安全漏洞列表),增加了2个新分类。 背景介绍 OWASP项目最具权威的...

50960
来自专栏腾讯Bugly的专栏

WebVR如此近 - three.js的WebVR示例程序解析

关于WebVR 最近VR的发展十分吸引人们的眼球,很多同学应该也心痒痒的想体验VR设备,然而现在的专业硬件价格还比较高,入手一个估计就要吃土了。但是,对于我们...

69190
来自专栏Android机动车

Google 最新模拟器重磅来袭!秒开并还原到之前工作状态!

12月18日,Google 官方Quick Boot博客的发布,给我们带来了最新的Android模拟器,其中最突出的特点技术 快速启动。声称可以在 6 秒之内便...

48420

扫码关注云+社区

领取腾讯云代金券