Advertisement

Harnessing the Power of Big Data in Public Transportati

阅读量:

作者:禅与计算机程序设计艺术

1.简介

在公共交通运营领域中使用先进且时效性高的大数据基础设施至关重要。目前全球...的数据处理规模呈指数级增长。利用多种类型的数据进行分析与挖掘,并结合存储与计算能力,在智能预测与决策支持的基础上实现大数据的有效应用,则能够提供高效且经济的交通运输服务。

当前,在公共交通领域中存在对数据采集技术与管理方法需求方面的空白。为此,在跨部门协作与多系统集成方面仍面临诸多挑战。为了提升资源利用率并实现业务价值最大化,则需要建立一套标准化的数据管理框架。本文旨在详细探讨通过云计算技术搭建‘微聚类’(MICE)平台来解决这一问题。该平台能够整合来自各组织的数据资源进行处理分析生成报告实现监控与应用以创造相应的价值

本文将从以下几个方面进行介绍:

1. 数据收集:涵盖数据获取途径及相关操作流程;
2. 数据清洗:阐述了数据预处理的具体方法及其实施步骤;
3. 数据导入:描述了多种数据导入工具及其应用规范;
4. 数据处理:分析了多维度数据处理的技术路径及实施细节;
5. 数据分析:探讨了基于大数据平台的数据挖掘与分析方法;
6. 数据可视化:展示了不同场景下的数据分析可视化方案;
7. 数据安全:评估了大数据环境下信息安全保障措施;
8. 商业模式:构建了基于大数据平台的盈利模式框架;
9. 发展前景与挑战: 探讨基于大数据背景下的公共交通运营前景及面临的主要挑战

2.基本概念术语说明

2.1 数据定义

信息(information)是数字、文字或符号等实体信息的汇总。它能够反映某种现象随时间变化所呈现的主要特征与内在规律,并展现出一定的组织结构与动态模式。

2.2 数据仓库

数据仓库(Data Warehouse, DW)处于组织信息的核心位置,负责整合来自分散来源的复杂且紧密相关的业务数据。作为大数据分析的重要领域,在过去几年中已逐步发展成为企业级IT系统的关键部分。其功能在于存储企业数据库中最关键的信息集合,并通过去杂、转换、汇总、编码、连接和过滤等过程生成干净且结构化的数据资源,这些资源能够直接用于报表生成、数据分析以及决策制定等多个方面。

2.3 大数据

大DA(Big Data),也被称为海量信息或Massive Data, 是指那些规模超出当前处理能力的数据集合, 其特点是规模庞大且类型多样. 相对于常规的数据而言, 它具有的显著特征是:

  • 数据规模非常庞大
    • 覆盖的数据类型丰富
    • 呈现出高度的复杂性
    • 采用多种不同的收集手段
    • 持续呈现出快速进步的趋势

因此而言,在当前快速发展的时代背景下

因此而言,在当前快速发展的时代背景下

2.4 Hadoop

Apache Hadoop(Hadoop)是由Apache基金会精心打造的一款开源框架系统,默认情况下实现了高可靠性、强容错能力以及良好的扩展性能特点,并且专为处理海量数据下的分布式存储与复杂计算需求而设计。该系统能够有效支持多种类型的集群运算工作负载场景,在非实时数据分析任务、实时数据分析任务以及图形数据处理等多种领域均展现出显著的应用价值与实际效果。

2.5 Hive

Apache Hive(Hive)源自Facebook开源,并且适合集成于Hadoop生态系统中。它与SQL语言具有相似性但更具强大功能:能够直接执行查询、转换以及导入文本文件和目录中的数据,并且同样支持使用MapReduce框架或Spark进行大规模数据分析。

2.6 Presto

Presto是由Facebook提供的免费开源分布式SQL查询处理系统。它兼具高速度、低延迟、自动优化性能以及丰富的功能特点。该引擎提供了RESTful API接口,并为其他应用组件或第三方软件提供接入途径。这显著提升了数据分析的效率。

2.7 Spark

Apache Spark (Spark) is developed by Berkeley's AMPLab team as an open-source, high-performance data processing tool for big data. It supports Java, Scala, Python, R and other programming languages through their respective API interfaces. Additionally, it can handle various data formats including Hadoop's HDFS, Parquet, JSON and Avro.

2.8 Zookeeper

Zookeeper(Apache Zookeeper)作为一个开放源代码的分布式协同平台,在Apache项目的家族中担任重要角色。该平台采用树状架构进行数据分发,并致力于解决分布在式系统中的数据一致性管理难题。

2.9 Kafka

Apache Kafka(Kafka)是一个开放源代码的分布式发布/订阅消息平台。其高性能特征使得其特别适合在大数据实时处理方面发挥优势。该系统支持消息持久化存储、即时消费以及数据传输操作。

2.10 Flume

Apache Flume(Flume)是一个分布式系统,在各个数据源中实时采集、处理和传输事件数据,并按照预设规则将这些数据存入Hadoop生态系统下的多种存储系统中包括HDFS、HBase、Solr、RabbitMQ等存储平台。基于流处理架构设计使其能够持续不断地将数据输送至目标存储系统同时具有极高的可靠性、良好的扩展性和强大的容错能力非常适合于大规模的数据采集需求。

2.11 Oozie

Apache Oozie(Ooozie)是一个负责处理基于Hadoop的数据流的工作流任务调度系统。它提供指导式提交、定时调度、参数化配置选项以及失败重试机制等功能,并且具备审计跟踪功能。通过简单的配置和操作即可轻松完成工作流的管理与监控。Oozie还具备高可用性特征,在单点故障情况下仍能确保系统的稳定运行。

2.12 Sqoop

Sqoop(Apache Sqoop)是一款开源软件程序,在大数据处理领域具有重要地位。其主要功能是作为数据提取转换和加载工具,在实际应用中可实现将关系型数据库如MySQL和Oracle的数据导入至及从Hadoop生态系统中的存储层(包括HDFS、Hive、HBase及Kafka等)进行存储和管理,并通过多种协议实现本地或云存储系统间的无缝对接与数据传输管理。该工具能够通过多种协议进行通信与交互,在不同存储架构之间建立高效的连接路径。

2.13 Storm

Apache Storm(Storm)是一个开放源代码的分布式容错型实时计算平台。它能够高效管理并处理海量实时数据流,并具备强大的分析功能、持续运算能力和数据推送机制。该平台能够自然整合至Hadoop和Spark等大数据生态系统中,并通过强大的流处理能力帮助用户实现对海量数据进行即时分析与智能决策支持

2.14 Impala

Cloudera Impala(Impala)是一个分布式SQL查询引擎,并特别适合对存于HDFS中的大数据进行快速分析。该系统不仅支持传统的hive语法与本地hadoop生态系统无缝集成,并且能够访问本地hadoop集群中的数据资源的同时支持与外部hive集群的数据交互。该引擎具备低延迟和高性能特点,并通过自动优化功能提升处理效率;同时提供包括sql优化在内的多种高级功能如自动生成hive和hdfs元数据以及实施动态负载均衡策略等

3.核心算法原理和具体操作步骤以及数学公式讲解

3.1 数据采集

3.1.1 GPS定位数据

GPS定位数据即是基于Global Position System的技术实现的一种空间坐标测定手段。该技术通过接收卫星发送的信号并完成定位过程,在终端设备上完成信号捕获与处理,并通过包括但不限于串口、USB端口、以太网接口及无线Wi-Fi模块等多种网络接口将采集到的数据传递至终端设备的软件平台进行处理。随后经由网络传输至中央服务器中心进行处理以完成数据汇总工作。值得注意的是该系统采用低时延传输机制以确保在高速度大流量的数据采集过程中不会出现延迟积累现象从而保证了整体系统的实时性和可靠性

3.1.2 交通流量数据

交通流量数据即为道路网络系统内车流与人流的整体表现。
包括了车流强度驻留密度流通效率等关键参数。
作为以市场需求为导向的重要指标在旅游业及交通运输业中具有不可替代的作用。

3.1.3 实时公交数据

公交数据分析即基于公共汽车运输系统日常通勤时段的上下班分布情况所形成的统计数据集合。该类数据分析包含站点位置信息、运行周期参数以及平均速度指标等内容细节。通过这些数据分析能够反映交通运营状况与客流量特征。同时这些原始公共交通数据分析结果可作为基础依据用于后续分析工作,并能显著提升公共交通信息服务的质量与可靠性。

3.1.4 道路交通情况数据

道路交通运行数据涵盖了路网运行状况、路口交通状况以及各类车辆运行状态等多个维度的数据指标。这些数据分析参数可用于评估城市道路健康状况、城市化进程中产生的城市道路拥堵程度以及相关车辆运行效率指标。通过建立完善的数据模型进行基础统计与预测分析,在此基础上可实现精准预测和应对措施。

3.1.5 天气信息数据

气象要素的空间分布情况包括但不限于温度值、湿度水平、风力强度、降雨强度、日辐射量、大气压力值、露点温度、云覆盖情况等多维度指标。这些气象要素的数据可作为基础数据库,并为其他气象数据分析提供重要支撑。

3.2 数据清洗

3.2.1 去除噪声数据

在采集过程中,在实际操作中可能会遇到一些不干净的数据。这些不干净的数据可能源自采集设备故障、传输线路问题以及传输过程中的错误等多种原因造成的。为了尽可能减少这类情况的发生,并采取相应的措施来清除这些不干净的数据。

3.2.2 数据一致性检查

因为来自不同数据源的信息可能存在偏差,在采集间隔等因素的影响下可能导致结果差异。因此,在确保信息质量的基础之上必须对收集的数据进行一致性审查,并对来自不同信息源的数据进行校准处理以确保信息的真实性和全面性。

3.2.3 数据完整性检查

因为缺少必要的采集设备、传输过程中出现故障以及数据分析中断等因素的存在而导致原始数据发生丢失现象,在实际工作中有必要对现有数据进行全面核查,并针对发现的数据缺口进行适当补充工作内容以确保所收集到的数据既准确又全面

3.2.4 时序数据按时间窗口划分

因为道路交通流量呈现出较大时间跨度的问题,在实际处理过程中需要对这些数据进行时序数据分析,并按时间段划分处理。之后逐一开展分析工作,则能有效降低内存占用量,并显著缩短数据分析所需的时间。

3.2.5 对数据标准化

数据标准化旨在减少由于单位差异造成的潜在影响,并通过归一化过程统一数据尺度。这使得我们可以更方便地进行数值比较与分析。

3.3 数据导入

3.3.1 分布式存储

在导入数据之前的第一步是将数据以高效率存放于分布式文件系统中;它不仅能够实现快速的文件读写与存储功能,并且特别适合处理海量数据的储存与管理。

3.3.2 文件格式选择

在导入数据之前,请选择恰当的文件格式。通常情况下,默认使用文本文件是最为普遍的选择方式。然而,在实际操作中发现这种数据文件类型往往会导致较低的处理效率与较慢的速度表现。因此,在这种情况下建议采用更为高效的数据二进制格式(如AVRO、PARQUET等),以提高整体的工作效率与存储密度

3.4 数据处理

3.4.1 时空数据处理

时空信息的处理过程主要涉及对时空数据进行收集、整理和分析,并旨在将其转换为适用于研究和决策的形式。

3.4.2 半结构化数据处理

在引入半结构化的文档之前,在完成引入这些文档的过程中,则需要执行一种特定的步骤——即对这些文档进行组织和分类工作以使其能够被系统有效地检索和利用。这种组织形式通常被称为关系型数据库存储模式

3.5 数据分析

3.5.1 数据挖掘

数据挖掘(Data Mining)主要通过研究大型非结构化数据集合中的信息以实现有效解析。
其主要目标是识别出或揭示隐藏在这些数据背后的模式和关联关系,并为其提供基础依据。

3.5.2 可视化数据

完成数据分析后, 应做数据可视化以使分析结果更加直观地显现出来. 也可以采用热力图, 散点图以及条形图等多种形式展示数据.

3.5.3 概念图谱构建

在分析数据前必须建立概念图谱。概念图谱能够促进业务人员深入掌握数据分析结果。

3.5.4 模型训练

为了使模型训练顺利进行,在开始训练之前必须做好前期准备工作

3.5.5 模型评估

在模型完成训练后,必须对模型实施评价以检验其性能指标是否达到预期值。若发现性能指标未达到预期值,则应采取措施开展模型的再训练工作。

3.6 数据可视化

3.6.1 WebGIS展示

WebGIS是依托Web技术构建的地理信息系统。该系统整合了大数据、GIS、远程遥感等多种数据资源,并支持多维度的空间信息交互展示功能。

3.7 数据安全

3.7.1 数据加密

为了保护敏感数据,需要对数据进行加密,防止被泄漏、篡改。

3.7.2 数据权限控制

为了限制数据的访问权限,需要对数据进行权限控制。

3.8 商业模式

依托大数据平台建立的公共交通运营平台将为公共交通运输提供高效率、信息清晰明了且成本低的服务

3.9 发展前景与挑战

依托先进的大数据平台技术,该城市公共交通运营系统显著提升了运行效率,并优化了服务品质的同时也降低了运营成本。但也面临着相应的挑战。

  1. 数据采集难度增加

当前阶段下,公共交通运输系统的数据收集、整理以及运用过程所面临的成本高昂。如今社会对相关领域的投资与关注程度不断提升。由此可见,在未来将面临更为严峻的数据收集考验——其难度显著提升。

  • 更多的数据来源:目前主要来源于政府部门(如交通运输局、城市交通委员会等),涉及多个行业组织(如公共汽车运输协会、公交运输协会等)。
  • 旁路收费信息:多个公交运营主体已开始提供路边收费信息。
  • 智能设备收集的数据:随着技术发展,在道路沿线布置智能设备以采集运行中的实时信息。
  • 实时运行状态:借助RTPI系统可获取公交车实时运行状态的相关参数。
  • 微博已成为获取公交运营状况的重要渠道:当前微博上已有大量相关统计分析报告发布。

多样

在克服这一挑战的过程中,公共交通运输部门需要持续不断地投入资金支持、技术支持以及硬件配置。

  1. 数据共享与运营成本下降

在公共交通领域中,常见做法是多家公司之间进行协作。在这个运作中,随着数据互通与运营成本减少的趋势出现后,则会带来更多机遇。

  • 平台共享:借助开放平台机制,公共交通运输公司能够实现资源共享,并共同推动自身发展。
  • 数据成本下降:对于公共交通运输领域而言,在其庞大的数量下(由于其庞大的数量),采集成本高昂这一问题依然存在。
  • 数据成本下降的同时,在其庞大的数量下(伴随)的数据成本下降同样会带来相应的处理成本降低。
  • 自动化数据采集:借助自动化技术进行的数据采集工作能够显著减少人力投入,并有效降低运营负担。

此外还需考虑中国当前的人口集中程度、人员流动规模以及区域经济发展的状况等方面的作用

4.具体代码实例和解释说明

4.1 数据采集

通过浏览器界面利用JavaScript脚本语言能够高效地获取实时更新的数据信息。

复制代码
    var socket = io(); // 初始化socket连接
    socket.on('gps_data', function(msg){
      console.log(msg); // 打印收到的消息
    });
    // 使用定时器轮询实时数据
    setInterval(function(){
      socket.emit('get_gps'); // 向服务器请求实时数据
    }, 5000); // 每隔5秒钟请求一次
    
      
      
      
      
      
      
      
    
    代码解读

4.2 数据清洗

对于实时数据,首先需要对数据进行清洗,消除掉脏数据。

复制代码
    import pandas as pd # 导入pandas库
    df = pd.read_csv("gps_data.txt") # 读取数据
    for i in range(len(df)):
    if df['time'][i] < datetime.datetime.now() - timedelta(hours=1):
        del df[i] # 删除过期数据
    df.to_csv("cleaned_gps_data.txt", index=False) # 将数据写入文件
    
      
      
      
      
      
    
    代码解读

4.3 数据导入

将清洗后的数据导入分布式文件系统中。

复制代码
    $ hadoop fs -mkdir /gps_data/input 
    $ hadoop fs -put cleaned_gps_data.txt /gps_data/input/
    
      
    
    代码解读

4.4 时空数据处理

为了可视化和分析的数据,需要进行时空数据处理。

复制代码
    val sparkConf = new SparkConf().setAppName("GpsAnalysis").setMaster("local[*]") // 创建spark配置对象
    val sc = new SparkContext(sparkConf) // 创建spark环境
    
    sc.textFile("/gps_data/input/*.txt") // 获取数据集
     .map { line => 
    val columns = line.split(",")
    (columns(0), columns(1).toDouble, columns(2).toDouble) 
      } // 提取字段并转换类型
     .filter{ case (_, lat, lng) => math.abs(lat)>0 && math.abs(lng)>0} // 过滤无效坐标
     .cache() // 缓存数据集
    
    def distance(p1: (Double, Double), p2:(Double, Double)) : Double = {
      import scala.math._
      val R = 6371e3
      val lat1 = radians(p1._1)
      val lon1 = radians(p1._2)
      val lat2 = radians(p2._1)
      val lon2 = radians(p2._2)
      val dLat = lat2 - lat1
      val dLon = lon2 - lon1
      acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(dLon))*R
    }
    
    val timeWindowedStream = sc.ssc.queueStream([
      ("2017-08-01 00:00:00", "2017-08-01 23:59:59"),
      ("2017-08-02 00:00:00", "2017-08-02 23:59:59"),
     ...
    ])
    
    timeWindowedStream.foreachRDD((rdd, _) => {
      rdd.map({case ((_, lat1, lng1),(_, lat2, lng2))=>
      (distance((lat1,lng1),(lat2,lng2)), 1)})
       .reduceByKey(_+_)
       .sortByKey()
       .take(10)
       .foreach(println)
    })
    
    sc.start() // 启动spark环境
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

4.5 模型训练

对数据进行特征工程、模型训练和模型评估。

复制代码
    from pyspark.mllib.classification import LogisticRegressionWithSGD
    from pyspark.mllib.regression import LabeledPoint
    from numpy import array
    from random import randint
    from pyspark.ml.feature import VectorAssembler
    
    trainSet = [(LabeledPoint(0, [randint(-100,100),randint(-100,100)]),0)] # 生成训练集
    
    trainData = sc.parallelize(trainSet)
    
    assembler = VectorAssembler(
      inputCols=["x","y"],
      outputCol="features"
    )
    
    assembledTrainData = assembler.transform(trainData.values()) \
                              .select("features", "label")
    
    model = LogisticRegressionWithSGD.train(assembledTrainData.rdd, iterations=1000, step=0.1) # 模型训练
    
    testData = trainData.map(lambda lp: (lp.features, model.predict(lp.features)))\
                    .collect()
    
    correctCount = sum(label == prediction for (_, label), prediction in testData) # 模型评估
    
    print("Accuracy: ", correctCount/float(len(testData)))
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

全部评论 (0)

还没有任何评论哟~