前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将 Python 用于云和大数据分析

将 Python 用于云和大数据分析

作者头像
LynnShaw
发布2018-05-15 14:24:25
3.3K0
发布2018-05-15 14:24:25

传统编程语言在从互联网获取直播数据方面的效率不高。在这里,通用编程语言可以帮助您解决这个问题。请继续阅读以了解如何将 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)属性的屏幕截图
图1:timesofindia.com 分析印度孟买指数(SENSEX)属性的屏幕截图

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

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

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

代码语言:javascript
复制
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 中喜欢的内容,如下所示:

代码语言:javascript
复制
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)

获取网站的所有超链接

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

代码语言:javascript
复制
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)后,可以与远程服务器进行通信。要检查版本,使用以下命令:

代码语言:javascript
复制
$ cf -v

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

代码语言:javascript
复制
$ cf push MyApp -m 128M -b https://github.com/cloudfoundry/cf-buildpack-python.git
图2:来自 YouTube 的 Bahubali 电影预告片的屏幕截图
图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 示例表示形式:

代码语言:javascript
复制
{
    “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 系统上,使用以下命令:

代码语言:javascript
复制
$ sudo ptitude install couchdb

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

代码语言:javascript
复制
$ sudo emerge couchdb

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

代码语言:javascript
复制
$ /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 的管理面板
图3:Futon:CouchDB 的管理面板

CouchDB 与 Python 的交互

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

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

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

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

代码语言:javascript
复制
>>> couch = couchdb.Server(‘http://www.mybigcloudportal.com:5984/’)
 
>>> mydb = couch.create(‘testDB’)

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

代码语言:javascript
复制
>>> mydb = couch[‘mynosqldb’]

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

代码语言:javascript
复制
>>> mydoc = {‘Country’: ‘India’}

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

代码语言:javascript
复制
>>> mydb.save(mydoc)

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

代码语言:javascript
复制
>>> mydb.delete(doc)
 
>>> couch.delete(‘testDB’)

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

图4:在 Futon 中创建数据库
图4:在 Futon 中创建数据库

使用 CouchDBKit

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

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

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

代码语言:javascript
复制
$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py
$ easy_install pip

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

代码语言:javascript
复制
$ pip install couchdbkit

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

代码语言:javascript
复制
from couchdbkit import Server
myserver = Server()
db = myserver.create_db(“couchbdkit_test”)
db[‘myid’] = { ‘x’: ‘Hello’ }
doc = db[‘myid’]

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

代码语言:javascript
复制
from couchdbkit import Document
class MyDBClass(Document):
    author = StringProperty()
    content = StringProperty()
    date = DateTimeProperty()
    MyDBClass = MyDBClass()
    MyDBClass.author = “AuthorName”
    MyDBClass.homepage = “http://couchdbkit.org”

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

代码语言:javascript
复制
import datetime
from couchdbkit import *
class MyDBClass(Document):
    author = StringProperty()
    content = StringProperty()
    date = DateTimeProperty()

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

代码语言:javascript
复制
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 中,执行以下指令:

代码语言:javascript
复制
$ import pymongo

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

代码语言:javascript
复制
>>> from pymongo import MongoClient
>>> myclient = MongoClient()

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

代码语言:javascript
复制
>>> myclient = MongoClient(‘localhost’, 27017)

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

代码语言:javascript
复制
>>> myclient = MongoClient(‘mongodb://localhost:27017’)

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

代码语言:javascript
复制
>>> mydb = myclient.MyTestDatabase

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档