传统编程语言在从互联网获取直播数据方面的效率不高。在这里,通用编程语言可以帮助您解决这个问题。请继续阅读以了解如何将 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 等等。
获取开放数据的知名门户网站
另一种获取数据集的方法是使用编程语言生成我们自己的数据集。这里的主要问题是选择合适的编程语言或工具,以便从社交媒体应用程序或直播网站获取实时数据。常用的编程语言在从互联网获取直播数据方面的效率不高。
Python 是可与流媒体直播服务器通信的杰出和高效的编程语言之一。您可以使用它将所提取的数据存储在数据库或文件系统中以进行分析和预测。
让我们继续看看一些真实的案例,其中 Python 已经被用来获取直播数据。
使用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
有许多服务提供商提供私有或公有的云服务。下面列出的是一些著名的基于云和大数据的服务提供商,它们提供了一个选项,可以使用户对自己的应用程序进行编写代码和部署:
云服务提供商利用专用软件包和工具以支持使用不同的语言来编写代码。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
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)。
CouchDB 与 Python 的交互
一个名叫 couchdb 的专用包,提供了 Python 与 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)
以上命令用于删除文档和数据库。
使用 CouchDBKit
CouchDBKit 的目标是为 Python 应用程序提供专用框架来管理和访问 CouchDB。以下功能是 CouchDBKit 固有的特性:
为了使用 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 指令也可用于非结构化的数据和大数据处理。