Travel Tips
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
第 2 章 数据化运营的数据来源二
要获得该 API ,读者需要拥有百度相关账户和 AK 信息。
第一步 获得百度账户,没有账户的读者可在 https://passport.baidu.com/v2/ ? reg 处免费注册获取。
第二步 注册成为百度开放平台开发者,读者可进入http://lbsyun.baidu.com/apicon-sole/key ? application=key 完成相关注册。该过程非常简单,遵循引导整个过程在 5 分钟内即可完成,示。
第三步 注册完成之后,会有一个名为 “ 【百度地图开放平台】开发者激活邮件 ” 的验证链接发送到指定(注册时邮箱)邮箱,点击链接即可完成验证,
第四步 点击 “ 申请秘钥 ” 进入创建应用界面,在该应用创建中,我们主要使用 Geocoding API v2 ,其他应用服务根据实际需求勾选。 IP 白名单区域,如果不做限制,请设置为 “0.0.0.0/0” 。设置完成后,点击提交,
第五步 获得 AK 秘钥。完成上述步骤之后,会默认跳转到应用列表界面,界面中的 “ 访问应用( AK ) ” 便是该应用的秘钥,
import requests # 导入库
add = ' 北京市中关村软件园 ' # 定义地址
ak = 'DdOyOKo0VZBgdDFQnyhINKYDGkzBkuQr' # 创建访问应用时获得的 AK
url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=xml&ak=%s' # 请求 URL
res = requests.get(url % (add, ak)) # 获得返回请求
add_info = res.text # 返回文本信息
print (add_info) # 打印输出
该结果可以通过 JSON 进行格式化处理。
import json # 导入库
add_json = json.loads(add_info) # 加载 JSON 字符串对象
lat_lng = add_json['result']['location'] # 获得经纬度信息
print (lat_lng) # 打印输出
在 API 请求方法中,最常用的是 get 和 post 方法。前者用于向服务器以 “ 明文 ” (所有参数都在 URL 中体现)的形式请求数据,常用于普通的页面或服务请求,例如浏览网页、搜索关键字等都是 get 方法;后者则将 “ 暗语 ” (所有的数据信息都在 HTTP 消息中)以键值对的形式发送,在 URL 中是看不到具体信息的,常用于数据保密性高的场景,例如登录、注册、订单等表单的处理都是 post 方法。
. 获取并解析 XML 数据Geocoding API 也提供 XML 格式的返回数据,下面以获得 XML 格式的数据为例介绍代码过程。
import requests # 导入库
add = ' 北京市中关村软件园 ' # 定义地址
ak = 'DdOyOKo0VZBgdDFQnyhINKYDGkzBkuQr' # 创建访问应用时获得的 AK
url = 'http://api.map.baidu.com/geocoder/v2/?address=%s&output=xml&ak=%s' # 请求 URL
res = requests.get(url % (add, ak)) # 获得返回请求
add_info = res.text # 返回文本信息
print (add_info) # 打印输出
。关于 XML 文件的解析, Python 默认和第三方的常用库包括 xml 、libxml2 、 lxml 、 xpath 等,我们使用 Python 自带的 XML 进行处理。
# 设置字符编码为 utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import xml.etree.ElementTree as Etree # 导入 XML 中的 ElementTree 方法
root = Etree.fromstring(add_info) # 获得 XML 的根节点
lng = root[1][0][0].text # 获得 lng 数据
lat = root[1][0][1].text # 获得 lat 数据
print ('lng: %s' % lng) # 格式化打印输出
print ('lat: %s' % lat) # 格式化打印输出
内容延伸:读取非结构化网页、文本、图像、视频、语音
要从网页中爬取数据,可使用 Python 内置标准库或第三方库,例如urllib 、 urllib2 、 httplib 、 httplib2 、 requests 等。本节使用 requests 方法获取网页数据。
import requests # 导入库
url = 'http://www.dataivy.cn/blog/dbscan/' # 定义要抓取的网页地址
res = requests.get(url) # 获得返回请求
html = res.text # 返回文本信息
print (html) # 打印输出网页源代码
读取非结构化文本数据
file = 'traffic_log_for_dataivy'
fn = open(file, 'r') # 打开要读取的日志文件对象
content = fn.readlines() # 以列表形式读取日志数据
print (content[:2])
fn.close() # 关闭文件对象
上述代码中先定义了一个要读取的非结构化文本文件,然后通过Python 标准库 open 方法以只读模式打开文件,然后通过 readlines 方法将文件内容按行为单位读取为数据列表,打印输出前 2 条数据,然后关闭文件对象。执行后,返回如下结果:
['120.26.227.125 - - [28/Feb/2017:20:06:51 +0800] "GET / HTTP/1.1" 200 10902 "-" "curl"\n', '139.129.132.110 - - [28/Feb/2017:20:06:51 +0800] "GET / HTTP/1.1" 200 10903 "-" "curl"\n']
其实日志文件只是普通文本文件中的一种类型而已,其他的非结构化数据文件都可以以类似的方法读取,即使文件没有任何扩展名。
Python 读取图像通常使用 PIL 和 OpenCV 两个库
1. 使用 PIL 读取图像
Python Imaging Library 中包含很多库,常用的是其中的 Image ,通过使用其中的 open 方法来读取图像,用法如下:
import Image # 导入库
file = 'cat.jpg' # 定义图片地址
img = Image.open(file, mode="r") # 读取文件内容
img.show() # 展示图像内容
该对象包含了很多方法,这些方法可以用来打印输出文件的属性,
例如尺寸、格式、色彩模式等。
print ('img format: ', img.format) # 打印图像格式
print ('img size: ', img.size) # 打印图像尺寸
print ('img mode: ', img.mode) # 打印图像色彩模式
相关知识点:图像颜色模式
在不同的领域中,图像的色彩模式有多种标准。比较常见的颜色模式包括:
·RGB :自然界中所有的颜色都几乎都可以用红、绿、蓝这三种颜色按不同波长及强度组合得到,这种颜色模式在数字显示领域非常流行。
·CMYK :这是一种工业四色印刷标准,四个字母分别指代青( Cyan )、洋红( Magenta )、黄( Yellow )、黑( Black )。
·HSB :这种模式使用色泽( Hue )、饱和度( Saturation )和亮度( Brightness )来表达颜色的要素,这种模式更多基于人类心理的认识和感觉。
· 其他模式:其他模式还包括灰度模式、索引模式、位图模式等,在一定场景下较为常见。不同的色彩模式之间可以相互转换,例如从 RGB 模式转换为灰度模式,
img_gray = img.convert('L') # 转换为灰度模式
img_gray.show() # 展示图像
OpenCV 读取和展示图像主要有两类方法:第一种是使用 cv 库,第二种是使用 cv2 库。
第一种:使用 cv 读取图像。
import cv2.cv as cv # 导入库
file = 'cat.jpg' # 定义图片地址
img = cv.LoadImage(file) # 加载图像
cv.NamedWindow('a_window', cv.CV_WINDOW_AUTOSIZE) # 创建一个自适应窗口用于展示图像
cv.ShowImage('a_window', img) # 展示图像
cv.WaitKey(0) # 与显示参数配合使用
第二种:使用 cv2 读取图像。
import cv2 # 导入库
file = 'cat.jpg' # 定义图片地址
img = cv2.imread(file) # 读取图像
cv2.imshow('image', img) # 展示图像
cv2.waitKey(0) # 与显示参数配合使用
通过 PIL 调用的是系统默认的图像显示工具,而在 OpenCV 中是通过自身创建的图像功能显示图像。
提示:
除了使用 OpenCV 自带的图像展示方法外, OpenCV 还经常和Matplotlib 配合展示图像,这种场景更加常用。组合使用时可借用Matplotlib 的强大图像展示能力进行图像的对比和参照以及不同图像模式的输出。
Python 读取视频最常用的库也是 OpenCV
import cv2 # 导入库
cap = cv2.VideoCapture("tree.avi") # 获得视频对象
status = cap.isOpened() # 判断文件是否正确打开
if status: # 如果正确打开,则获得视频的属性信息
frame_width = cap.get(3) # 获得帧宽度
frame_height = cap.get(4) # 获得帧高度
frame_count = cap.get(7) # 获得总帧数
frame_fps = cap.get(5) # 获得帧速率
print ('frame width: ', frame_width) # 打印输出
print ('frame height: ', frame_height) # 打印输出
print ('frame count: ', frame_count) # 打印输出
print ('frame fps: ', frame_fps) # 打印输出
success, frame = cap.read() # 读取视频第一帧
while success: # 如果读取状态为 True
cv2.imshow('vidoe frame', frame) # 展示帧图像
success, frame = cap.read() # 获取下一帧
k = cv2.waitKey(1000 / int(frame_fps)) # 每次帧播放延迟一定时间,同时等待输入指令
if k == 27: # 如果等待期间检测到按键 ESC
break # 退出循环
cv2.destroyAllWindows() # 关闭所有窗口
cap.release() # 释放视频文件对象
相关知识点:动态图像如何产生我们视觉上看到的视频(或动态图)在计算机中其实是不存在的,计算机中存储的是一幅一幅的图像,在视频里面被称为帧,一帧对应的就是一幅图像。当图像连续播放的速度超过一定阈值间时,由于人类的视觉具有暂留特性(延迟效应),多个暂留图像的叠加便形成了我们看到的动态图像。一般情况下,如果一秒播放超过 16 帧时,我们就会认为这是一幅动态图像。
在视频中有几个关键名词:
· 帧率( FPS ):每秒播放的帧数被定义为帧率,帧率越高,在视觉上认为图像越连贯,就越没有卡顿的现象。常见的帧率包括 23.967 (电影)、 25 ( PAL 电视),示例图像大约为 15 。帧率与图像清晰度无关,它只是决定了视频的连贯性。
· 帧分辨率:帧分辨率基本决定了视频的清晰度(当然除此之外还有视频处理效果、设备播放差异等,这里指的是同等条件下的视频源)。在同样大小的图像中,分辨率越高图像通常就会越清晰。所以形容视频时提到的 1080P ( 1920*1080 )、 720P ( 1280*720 )其实指的就是分辨率标准。
注意:
OpenCV 中的图像读取和处理,其实是不包括语音部分的,但从视频文件的组成来讲通常包括序列帧和语音两部分。目前的方式通常是对两部分分开处理。读取语音数据对于语音文件的读取,可以使用 Python 的 audioop 、 aifc 、 wav 等库实现。但针对语音处理这一细分领域,当前市场上已经具备非常成熟的解决方案,例如科大讯飞、百度语音等,大多数情况下,我们会通过调用其 API 实现语音分析处理,或者作为分析处理前的预处理。
本章小结
内容小结: 本章的内容较多,主要涉及企业数据化运营可能产生数据的方方面面,包括数据来源的类型、通过不同方式获得运营数据以及对非结构化数据的获取等方面。不同的企业由于其行业和企业背景不同,通常不会全部覆盖其中的所有数据场景,读者可根据自身情况和需求选择。另外,大多数读者所在的企业,应该以结构化的数据为主,内容延伸中的知识作为课外补充和了解即可,真正需要用到这些知识时,再学习和查阅。
重点知识: 本章需要读者重点掌握数据来源所讲的内容,这里介绍了数据工作者常用的数据来源,其中的从文本文件读取运营数据、从关系型数据库 MySQL 读取数据最为常用。外部参考: 由于数据来源的获取与数据生产、采集、存储、处理和挖掘工具息息相关,同的系统和工具之间需要了解更多才有可能更好地利用数据。以下工具或知识是本书以及很多企业中都会用到的,希望读者能进行更深入了解:
·Google BigQuery :作为谷歌在线服务的主要武器之一, BigQuery可以作为云服务应用,也可以作为 Google Analytics Premium 的细粒度流量数据的获取来源。尤其是基于谷歌广泛的服务体系和应用体系,可以将所有的资源打通,包括数据和服务。
·SAS :做数据挖掘的读者一般都会知道这个工具, SAS 是数据挖掘和商业智能领域最为权威和流行的商用工具之一。该工具在很多大型企业内部都有应用,例如国家信息中心、国家统计局、卫生部、中国科学院等,其专业能力可见一斑。
·SQL :作为关系型数据库应用的核心,常用的查询语法需要数据工作者掌握;除了在关系型数据库外, SQL 也可以应用到 HIVE 等大数据工作处理领域,这种通用性(当然语法需要做适当修改)使得 SQL 几乎在各个企业都有用武之地。
· 正则表达式:本书在多个应用示例中都用到了正则表达式,尤其对于非结构化数据,正则表达式几乎是标配知识。应用实践: 本章的内容属于数据工作的第一步,因此希望读者能熟悉不同的数据接入和读取方法。每种数据来源类型建议都逐一进行实践,然后集中精力到现有工作或学习环境中,以达到熟练掌握获取不同数据来源的方法和技巧。
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Donec in ullamcorper quam. Aenean vel nibh eu magna gravida fermentum. Praesent eget nisi pulvinar, sollicitudin eros vitae, tristique odio.
December 4, 2020 at 3:12 pm
我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum
Rosie
6 minutes ago