项目1 了解数据采集
近年来,随着网络和信息技术的不断发展,人类社会产生的数据量正在呈指数级增长。世界上每时每刻都在产生数据,包括大量的社交网络数据、物联网传感器数据、商品交易数据等。面对日益增长的数据量,如何采集数据并对之进行转换存储以及高效率的分析成了巨大的挑战。
项目目标
(1)了解大数据的数据来源和数据类型。
(2)了解数据采集的方式及要求。
(3)了解数据采集的应用行业。
项目描述
数据采集简单来说是对数据进行ETL操作,即抽取(Extract)、转换(Transformation)、装载(Load)。如图1-1所示,只有先将分散、零乱、标准不统一的数据整合到一起,构建数据仓库,然后才能对数据进行分析和处理。因此数据采集是数据分析过程中非常重要的一个环节。
图1-1 ETL操作流程
本项目将介绍数据和数据采集方式,以及数据采集的应用行业,以便读者初步了解数据采集。项目实施部分将通过一个简单的“石头剪刀布”图像数据采集案例,进一步帮助读者认识数据采集的工作流程并加深其对数据集的理解。
知识准备
读者在了解数据采集的要求和方式之前,首先应了解大数据(Big Data)的定义,以及大数据的数据来源和数据类型两个重要知识点,为学习数据采集奠定基础。大数据是“信息时代”发展到一定阶段的产物。随着信息技术和人类生产生活的深度融合、互联网的快速普及,全球数据呈现爆发增长、海量集聚的特点。
1.1 大数据
首先来看一组公式:1024B=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB,1024TB=1PB,1024PB=1EB,1024EB=1ZB。而1ZB约为“十万亿亿字节”。大数据通常指数据量超过一定大小,无法用常规的硬件设备和软件工具在规定时间内进行管理或处理的数据集合。一般情况下,数据量达100TB以上的数据可以认为是大数据。
大数据的定义较为宽泛,要形成“人工智能时代”下的对于大数据的认知,就需要进一步了解大数据的数据来源和数据类型两个重要知识点。
1.1.1 数据来源
目前,随着人工智能、大数据的不断发展,全球数据总量呈现指数级增长态势。据互联网数据中心统计,2017年,全球的数据总量约为21.6ZB,目前全球数据总量每年增长约40%。按数据产生的形式进行划分,数据来源可主要分为以下两类。
(1)通过人类活动产生。如社交软件中的聊天数据、电子商务中的交易日志数据等都产生于该数据来源。在“信息时代”,每个人不仅是信息的接收者,也是信息的产生者。
(2)通过传感器设备产生。如温/湿度传感器获取的温/湿度数据、压力传感器获取的压力数据等都产生于该数据来源。早在2017年,全球就已经有30亿~50亿个传感器,这些传感器24小时不停地产生数据,导致信息的爆发式增长。其中科学研究中传感器产生的数据量极大,如石油部门用地震勘探的方法探测地质构造、寻找石油,需要用大量传感器采集地震波形数据;高铁的运行要保障安全,需要在铁轨周边大量部署传感器,从而感知异物、滑坡、水淹、变形、地震等异常。
1.1.2 数据类型
人类活动与传感器设备带来了海量的数据,而对于人工智能应用而言,其常用的数据类型较为有限。常用的数据类型包括图像数据、语音数据和文本数据3种。
(1)图像数据是指在计算机中用数值表示的图像中各像素的集合。图像数据为交通、安防、医疗等领域的人工智能应用和产品提供了视觉功能基础。如在自动驾驶中,识别街景中的红绿灯、车辆或道路标志;在人脸检测中,获取人脸面部信息等。
(2)语音数据是指以数字形式存储在计算机系统中的声音数据。语音数据为问答交互系统以及对话机器人等人工智能应用的研发提供了前提。但与图像数据和文本数据相比,采集的语音数据的数据源通常存在大量嘈杂、错误以及无用的信息,因此在采集语音数据之后,需要进行进一步的筛选和处理。
(3)文本数据是指不能参与算术运算的任何字符,也称为字符型数据。它在人工智能应用中的自然语言处理(Natural Language Processing,NLP)领域具有重要作用,常用于解决中文分词、命名实体识别等序列标注问题,以及情感分类、意图分类等文本分类问题。
1.2 数据采集
接下来介绍数据采集方面的相关知识,为日后针对不同数据来源和数据类型的数据进行采集奠定基础。
数据采集,又称数据获取,是指利用装置从系统外部采集数据并将其输入系统内部的一种技术。
在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网领域,另外,数据采集也是数据分析的“入口”,所以它是相当重要的一个环节。本节将介绍数据采集的三大要求以及数据采集方式。
1.2.1 数据采集的三大要求
数据采集的重要性不言而喻,数据采集的要求如表1-1所示。
表1-1 数据采集的要求
1.2.2 数据采集方式
随着大数据在不同领域的应用,其数据量、特点及用户群体出现了分化。且在不同应用领域,应根据数据源的物理性质及数据分析的目标,采取不同的数据采集方式。下面介绍4种数据采集方式。
1.网络数据采集
网络数据采集使用范围比较广泛,是指对现实网页中的数据进行采集、预处理和保存。目前网络数据采集主要包含两种方法,分别是API(Application Programming Interface,应用程序编程接口)法和网络爬虫法。
·API法。API是网站的管理者为了使用者方便而编写的。该类接口可以屏蔽网站底层复杂算法,仅通过简单调用即可实现对数据的请求功能。目前主流的社交媒体平台如新浪微博、百度贴吧等均提供API服务,用户可以在其官网开放平台上获取相关DEMO(Demonstration,演示)文档。但是API技术毕竟受限于平台开发者,为了减小网站(平台)的负荷,一般平台均会对接口每天调用的上限进行限制,这会给用户带来极大的不便。因此网络数据采集通常采用另一种方法——网络爬虫法。
·网络爬虫法。网络爬虫是一种按照一定规则,自动抓取万维网信息的程序或者脚本。爬虫也被称为蚂蚁、自动索引、模拟程序或者蠕虫。常见的爬虫便是日常生活中经常使用的搜索引擎,如百度搜索、360搜索等。
2.端侧数据采集
端侧数据采集是指通过传感器、摄像头、麦克风等设备自动采集数据的过程。被采集的数据主要是已转换成电信号的各种物理数据,如温/湿度、速度、水位、压力等。
3.数据库采集
传统企业一般会使用传统的关系数据库MySQL和Oracle等来存储数据。随着“大数据时代”的到来,Redis、MongoDB和HBase等NoSQL(Not Only SQL)数据库(泛指非关系数据库)常被作为数据采集的来源。企业通过在采集端部署大量数据库,并在这些数据库之间进行负载均衡和分片(即对采集任务进行平衡,并将任务分摊到多个操作单元上执行),来完成大数据采集工作。
4.系统日志采集
系统日志可以记录系统中的软硬件和系统问题的信息,因此其分类包括系统日志、安全日志和应用程序日志;同时,系统日志也可以监视系统中发生的事件。如在系统受到攻击时,用户可以通过采集系统日志,寻找攻击者留下的“历史痕迹”,或者寻找系统发生错误的原因等。
目前,系统日志采集技术的传输速度达到了每秒数百兆字节,能基本满足人们对信息传输速度的需求。高可用性、高可靠性、高可扩展性是系统日志采集所具有的基本特征。
系统日志采集一般通过一些日志收集系统来实现,目前比较常用的开源系统有Flume、Scribe等。
1.3 数据采集的应用行业
不管是网络数据还是端侧数据,采集优质的数据对于各行各业的发展都有非常大的帮助。例如,生产线上对于生产状况的实时检测,需要端侧数据采集技术;而搜索引擎的应用则需要网络数据采集技术。可见数据采集技术的应用非常广泛。总体来看,数据采集技术的应用行业可以分为以下4类。
1.互联网和营销行业
互联网和营销行业目前正处在迅速发展的阶段,行业中拥有大量实时产生的数据。其中在互联网企业的运营工作中,业务数据化是基本的要求,因此其大数据应用的程度也很高。营销类企业旨在为消费者提供个性化的营销服务,其工作的开展通常需基于互联网用户的行为数据进行分析,所以也离不开数据采集技术。
2.金融及电信行业
因为金融及电信等行业较早地进行了信息化建设,所以其信息化建设水平相对较高。具体表现在企业内部业务系统的信息化流程比较完善,积累了大量的内部数据,并且有一些深层次的分析类应用,目前这些行业企业正处于将内外部数据结合起来共同为业务服务的阶段。
3.电子政务及公共事业行业
电子政务及公共事业行业中,企业不同部门在信息化程度和数据化程度上差异仍较大,像交通行业中已经有了不少大数据应用案例,但还有一些行业仍处在数据采集和积累阶段。电子政务及公共事业行业在数据采集方面的发展将会是未来整个大数据产业快速发展的关键,通过政务信息及公用数据的开放,可以使电子政务及公共事业行业的数据在线化发展得更快,并以此刺激大数据应用的发展。
4.制造业、物流、医疗、农业等行业
制造业、物流、医疗、农业等行业的大数据应用水平目前还处在初级阶段,但未来消费者驱动的C2B(Customer to Business,消费者到企业)模式会倒逼这些行业的大数据应用进程逐步加快。例如,传统制造业由于信息传递缓慢而零散,会导致产品库存过多的现象出现,要想解决该问题,可以从大数据入手。另外,未来人们对个性化的需求会越来越高,因此互联网和大数据等的应用将更加重要。
项目实施 “石头剪刀布”图像数据采集
1.4 实施思路
在知识准备部分,我们已经大致了解了网络数据采集、端侧数据采集、数据库采集和系统日志采集共4种数据采集方式,这些数据采集方式虽然使用的技术各不相同,但其目的都是获取数据。接下来将通过一个简单的“石头剪刀布”图像数据采集案例,进一步介绍数据采集的工作流程,以加深读者对数据集的认识。本项目的实施思路如下。
(1)采集手势图像数据。
(2)进行视频抽帧。
(3)分类整理图像数据形成数据集。
1.5 实施步骤
步骤1:采集手势图像数据
开展数据采集的第一步是获取原始数据。本项目的目标是获取“石头剪刀布”的手势图像,因此可以采用拍摄图像或录制视频的方式来获取相应的图像数据。图1-2所示为手势图像的数据采集流程。
图1-2 手势图像数据采集流程
(1)拍摄图像
拍摄图像是原始的图像数据采集方式之一。随着科技的进步,在日常生活中就可以通过相机或者智能手机进行图像拍摄,这些图像就成了原始的图像数据。通过电子设备拍摄图像、采集图像数据很方便,但在实际应用场景中,还要考虑数据量的大小。本项目计划采集60个左右的图像,工作量不大,但在面对数据量需求达到上千甚至上万个图像的时候,若采用逐一拍摄图像的方式进行数据采集就会有些困难。
(2)录制视频
在知识准备部分已经介绍了数据采集的要求,其中包括技术执行的高效性。具体到项目中的图像采集,在进行手势图像的数据采集时,相较于逐一拍摄几十个图像,先录制视频再进行视频抽帧会更便捷。因此在本项目中,将介绍使用智能手机录制“石头剪刀布”的手势视频。首先打开智能手机自带的相机软件并开启录像模式,按录制按钮进行视频的录制,如图1-3所示,录制结束后按结束录制按钮,视频将被保存至指定的路径下。
图1-3 录制视频
(3)注意事项
在采集图像数据的过程中,不管是采用拍摄图像还是录制视频的方式,在拍摄或录制过程中,都需要注意表1-2所示的4个方面。
表1-2 采集数据过程中的注意事项
(4)数据传输
图像拍摄或视频录制完成后,需要把图像或视频文件传输到计算机上进行分类整理并形成数据集。智能手机和计算机的数据传输可以通过USB(Universal Serial Bus,通用串行总线)、U盘、蓝牙或Wi-Fi等连接方式完成,可以根据实际情况选择最为方便的方式进行图像或视频文件的传输。
步骤2:进行视频抽帧
因为视频文件并不能直接作为图像数据使用,所以需要进行视频截图或者抽帧处理以保证数据格式的准确性,抽帧即从视频画面中抽出单幅画面。在步骤1中,若采用拍摄图像的方式,则不需要此步骤的操作,直接将图像数据传输到计算机上分类整理即可。接下来将介绍通过几种不同的方式进行视频文件的抽帧处理。
(1)截图抽帧处理
视频文件传输到计算机上后,Windows用户可播放“剪刀石头布”视频并使用“Windows+PrintScreen”组合键进行快速截图。完成截图后,通常可到“屏幕截图”文件夹(路径:C:\Users\用户名\Pictures\Screenshots)中查看截取的图像是否符合上文中提到的具体要求。接着根据图像的具体情况,对图像进行边缘裁剪,留下手势图像即可。图1-4所示为截图抽帧处理后的结果。
图1-4 截图抽帧处理后的结果
(2)使用工具完成抽帧处理
除了采用简单的截图抽帧外,还可以使用工具进行便捷的抽帧操作。FFmpeg是一个用于记录、转换流式传输音频和视频的工具,在本项目中,可以利用该工具来进行视频的抽帧处理。
①安装所需环境
使用工具进行抽帧处理需要安装Python,若计算机已经装好Python,则可直接跳过此步骤,若未安装Python,则可以通过以下步骤进行安装。
a.此处介绍安装Python 3.8.1。Python安装包保存在人工智能交互式在线实训及算法校验系统的data目录下,如图1-5所示,勾选对应文件复选框即可将其下载至本地。
图1-5 下载Python安装包
b.下载完成后,双击打开“python-3.8.1-amd64.exe”应用程序,在弹出的安装向导界面中,勾选“Add Python 3.8 to PATH”复选框,如图1-6所示,这样可以将Python命令工具所在目录添加到系统PATH环境变量中,之后开发程序或者运行Python命令会非常方便。接着选择“InstallNow”选项进行安装,待界面中显示“Setup was successful”即安装完成。
c.安装完成之后,可以通过以下步骤进行Python和pip安装的验证。
按“Win+R”组合键,在弹出的“运行”对话框中,输入“cmd”,单击“确定”按钮打开命令提示符窗口,如图1-7所示。
图1-6 Python安装界面
图1-7 “运行”对话框
在打开的命令提示符窗口中,输入以下命令并按“Enter”键,确认Python的版本号。
python --version
输出结果如下。
Python 3.8.1
输入以下命令并按“Enter”键,确认pip的版本号。
python -m pip --version
输出结果如下。
pip 21.0.1
②导入抽帧工具
在Windows平台上,可以按“Win+R”组合键打开“运行”对话框,在其中搜索“cmd”打开命令提示符窗口。在命令提示符窗口中输入以下代码并按“Enter”键,安装FFmpeg工具。
pip install ffmpeg-python
如果出现以下代码,说明FFmpeg已经成功安装。
Successfully installed ffmpeg-python-0.2.0
③定位文件
接下来,需要定位视频所在的文件夹。打开视频所在的文件夹,复制文件夹地址栏中的地址,并在命令提示符窗口中使用“cd”命令进行文件的定位。下面的代码表示,文件定位于计算机桌面上名为“剪刀石头布”的文件夹。
cd C:\Users\用户名\Desktop\剪刀石头布
④视频抽帧
使用如下代码进行视频抽帧。
ffmpeg -i "剪刀石头布.mp4" -r1-q:v 2 -f image2 picture%d.jpg
该行代码的相关参数及其说明如表1-3所示。
表1-3 参数及其说明
抽帧完成后,在原视频文件夹中便可找到对应的帧图像,如图1-8所示。在对图像进行筛选并确保图像符合要求后,即可进行分类整理。
图1-8 FFmpeg抽帧结果
(3)其他方式
除了使用以上方式进行抽帧处理外,还可以在网络上搜索“抽帧软件”或“在线抽帧”,进入对应页面进行抽帧操作。
步骤3:分类整理图像数据形成数据集
(1)新建train文件夹和test文件夹,分别用于存放训练集和测试集的图像数据。接着在train文件夹中创建3个空白文件夹,并按照相对应的标签进行命名。本项目的数据集共有3种标签,即hand、rock和scissors,对应中文名称分别为“布”“石头”和“剪刀”。train文件夹的文件结构如图1-9所示。test文件夹中,同样按照此结构进行整理。
图1-9 文件结构示意
(2)整理好图像后,分别按照3种标签即hand、rock和scissors进行图像命名。按“Ctrl+鼠标左键”组合键选择对应的手势图像,接着按“F2”键进行重命名,输入相对应的名称即可。hand文件夹中的图像命名如图1-10所示。
图1-10 图像命名
(3)在每个文件夹中分别放入对应的手势图像,图1-11所示便是训练集和测试集中的hand文件夹中的图像数量分布情况。对rock和scissors文件夹同样按照以上步骤进行分类整理即可完成数据集的整理。
图1-11 图像数量分布情况
通过以上步骤,可完成“石头剪刀布”图像数据集的分类整理,最后将文件打包存储即可。另外,数据采集方式多种多样,如项目2“网络数据采集”中,将会使用爬虫进行网页图像数据的爬取。在实际场景中,可以根据具体的情况采用相对便捷的方式进行数据采集。
知识拓展
在大数据高速发展的同时,数据采集工作面临着诸多问题与挑战,主要涉及以下几个方面的内容。
1.数据量大
对于一个系统来说,数据量的大小和处理技术难度是成正比的。特别是在“大数据时代”,面对海量的数据,无论是进行数据的采集、处理还是标注,都需要技术的同步跟进。
2.协议不标准
网络数据采集面临的一般都是常见的HTTP(Hypertext Transfer Protocol,超文本传送协议)等协议,但在工业领域会出现如控制器局域网总线协议(Controller Area Network,CAN)等各类型的工业协议,而且各个自动化设备生产厂家还会自行设定各种私有的工业协议,导致数据采集在工业领域的应用出现了极大的困难。
3.原有系统数据的采集难度大
在工业企业开展大数据项目时,数据采集往往不是针对传感器或者可编程逻辑控制器(Programmable Logic Controller,PLC)的,而是采集已经部署完成的自动化系统上位机所产生的数据。
但厂商的业务水平不一,导致在部署自动化系统时并没有提供数据接口及文档,且大量系统没有点表(设备采集的各种量)等基础数据,使得对于这部分数据的采集难度极大。
4.对于安全问题考虑不足
不管数据采集是应用在互联网行业还是工业领域,安全问题都应该是突出考虑的重点。例如,之前的工业系统都是运行在局域网中的,一旦需要通过云端调度工业之中核心的生产能力,若对于安全问题的考虑不充分,则可能会造成损失。
课后实训
(1)在计算机的数据存储单位换算中,1026MB=1GB。( )【判断题】
(2)以下数据中,属于通过传感器设备产生的数据是( )。【单选题】
A.聊天数据
B.温/湿度数据
C.系统日志数据
D.电子交易数据
(3)对数据进行ETL操作,不包括( )。【单选题】
A.抽取
B.装载
C.转换
D.分析
(4)下列说法中,错误的是( )。【单选题】
A.石油部门所采集的地震波形数据属于传感器设备产生的数据
B.系统日志的采集一般通过一些日志收集系统来实现
C.数据采集的高效性指的是数据面足够支撑分析需求
D.图像数据是指在计算机中用数值表示的图像中各像素的集合
(5)在下列选项中,属于网络数据采集方法的有( )。【多选题】
A.API法
B.数据库采集
C.系统日志采集
D.网络爬虫法