前面,我们在物联网学习(1)中介绍了物联网系统的分层。然后,在物联网学习(2)和物联网学习(3)中分别介绍了设备层的关键技术——通信技术和网络层的关键技术——网络协议。
这一节,我们讲讲应用层中的关键部分,怎样对数据进行分析。
7 数据分析
7.1 为什么要对数据进行分析
数据本身是没有价值的,或者说有价值的是数据中包含的信息以及对信息的应用。就好比以往股票价格的数据,大家都可以获取到,这些数据本身没有什么价值,只有从这些数据中准确推断出后续股票涨跌的预测信息,并及时购买或抛售,才能带来价值。
因此,我们需要对物联网采集的数据进行分析和应用。
7.2 从数据的维度来分析物联网
让我们把目光聚焦在数据这一个维度,来重新分析一下物联网。从数据的“生产”到“消费”的过程做一个更加详细的分析,用宏观的视角看看需要怎样的技术体系。
7.2.1 数据采集
每一个原始数据,都有其“生产者”,通常我们称之为“数据源”。(这个和我们在开发数据库应用系统时提到的DataSource是不一样的,不要弄混淆了。)
数据源采集和参数数据,然后通过物联网,传递到应用层。由于物联网的通信特点,可能还需要对数据做一些临时的保存工作。
从宏观的角度来看,数据源采集的数据类型多种多样,对应的数据采集设备也多种多样。例如采集温度、湿度等的传感器、采集视频的摄像头、采集声音的录音设备等等。
这些终端设备中,需要有嵌入式系统进行支撑。
7.2.2 数据传输
采集到的数据,需要上传到物联网应用平台,这个过程就是数据传输。数据传输的要求是快速、可靠。
从宏观的角度来看,数据传输的难点是高并发。很多物联网应用中连接的设备数量很多,并且这些设备都是源源不断的产生和上传数据,因此要求应用平台具备处理高并发的能力,能够有效、可靠的接收数据。
高并发的实现,需要分布式系统的支持,同时要引入负载均衡、消息队列、缓存等相关的技术。
7.2.3 数据存储
数据传输到物联网应用平台之后,需要进行存储。这里要解决的问题是海量异构数据的存储。
比如现在遍布大街小巷的摄像头,一个智慧城市系统中的摄像头每个月就可以产生数百PB的数据。
在数据量大的同时,数据的类型和格式还多种多样,按照特性可以分为3类:
- 结构化数据:例如用户信息、设备参数等等。
- 半结构化数据:例如日志记录、JSON结构的数据等。
- 非结构化数据:例如图像、视频、音频等数据。
为了存储这样的数据,对于海量的结构化数据,可以采用分布式关系数据库存储,并且对于时间敏感的数据,可以采用时序数据库。对于半结构化数据,可以采用NoSQL数据库,比如MongoDB,Neo4j等来存储。对于非结构化数据,可以采用HDFS这样的分布式文件系统来处理。
7.2.4 数据处理
数据本身并不能带来价值,因此我们需要对数据进行处理。对于海量数据,我们就需要用到大数据处理引擎。
按照数据处理的应用场景,有两种不同的处理方式:
- 批处理:对批量数据进行统一处理的方式。特点是吞吐量高,延迟长。
- 流处理:对数据流进行及时的处理技术,特点是延迟低,能够满足快速响应的要求。比如基于温度阈值告警的处理,就可以通过流处理来完成。
7.2.5 数据应用
前面的数据采集、传输、存储、处理,都是为了最终的数据应用,利用数据创造价值。
数据产生价值的方式,大致有以下几种:
- 挖掘:分析数据的规律和管理关系,一个经典的应用就是用户画像和购买习惯的分析。
- 预测:构建预测模型,比如我们经常可以看到共享单车公司将单车各个地方收集整理后投放到指定的位置,这些位置的选择就是通过预测得出的。
- 控制决策:例如根据光线变化打开关闭电灯,根据温度变化打开空调等等。
- 可视化:一种是单个数据的可视化,例如我们使用滴滴打车的时候显示司机的位置。一种是统计数据的可视化,例如直方图、曲线图等。
所有的这些应用,都是需要通过一些算法来实现的。由于数据量巨大,使用人工分析是不可能的,因此通常使用机器学习、人工智能来对数据进行统计分析。
这些算法分为监督学习和非监督学习两大类。
- 监督学习:我们需要告诉算法哪些是对的,哪些是错的。
- 非监督学习:算法要自己将数据中的”异常值“区分出来。