Day07–利用JavaWeb+大数据实现纽约市共享单车地图服务

遗留问题解决

  1. 饼图数据刷新操作,会导致数据一直叠加
    • 问题原因:在updateData方法中,通过xData和yData生成pieData的操作中,没有清空之前pieData中的数据,而是使用pieData.push()方法向之前的数组中继续添加数据,导致用于展示的数组中包含多组记录。
    • 解决方案:在循环向pieData中添加数据之前,使用pieData=[]的方式,将pieData变成一个新的空数组。
  2. 存在大量重复代码,进行封装
    • 新建为pannel2.html,方法都封装到pannel2.js里面。
    • 将站点状态数据获取封装成initPart1函数
    • 将yData和pieData的获取封装成函数,并且我们发现yData和pieData不需要定义为全局的变量,只需要作为函数的返回值分别赋给局部变量即可。至此数据初始化完,要对左右表初始化。
    • 定义initLeft和initRight函数,作为对表的初始化的函数。对表的初始化需要参数,分别传参即可。
    • 定义updateData函数,还是要获取最新的状态数据,赋给局部变量。
    • 左右表数据刷新函数,只对series里的数据进行更新。

历史数据对比

  1. 问题:为什么要分析数据? 用于支持商业决策,理性的决策需要数据的支持。
    • 纽约市在其官网上共享了共享单车的历史数据:https://www.citibikenyc.com/system-data->Citi Bike Trip Histories。
    • 该部分数据的下载地址为https://s3.amazonaws.com/tripdata/index.html
    • 历史数据以每一次骑行作为一条记录,记录中包含如下字段:
      • Trip Duration (seconds):骑行时长,以秒为单位
      • Start Time and Date:骑行开始的日期和时间
      • Stop Time and Date:骑行结束的日期和时间
      • Start Station Name:骑行开始的站点名称
      • End Station Name:骑行结束的站点名称
      • Station ID:站点的id,实际上是2个字段,分别是开始站点id和结束站点id
      • Station Lat/Long:开始站点和结束站点的经纬度信息
      • Bike ID:车辆id
      • User Type (Customer = 24-hour pass or 3-day pass user; Subscriber = Annual Member):用户类型(Cutomer代表临时用户,24小时通用或3天通用,Subscriber代表订阅用户,年卡会员)
      • Gender (Zero=unknown; 1=male; 2=female):用户性别(0-未知;1-男性;2-女性)
      • Year of Birth:用户出生的年份
  2. 这么多的数据(上百万条),用什么平台去分析较为便捷呢? -> 关系型数据库
  3. 基于这些数据,可以分析哪些内容?
    • 计算每一天的总骑行量(数据按日期分组,统计每组的总数据条数)
    • 计算每一天不同性别的用户的骑行数量(数据按日期分组,再按性别分组)
    • 研究天气对骑行数量的影响(将天气数据和骑行次数在一起显示)
    • 计算不同年龄段的骑行总数
    • (起始 、终止)站点热门排行
    • 骑行时间的众数
    • 不同骑行时间的占比
    • 骑行次数 、时长较多的自行车ID
    • 骑行的路程(缺少实际路线,预估)
    • 研究用车高峰和低谷的时间段
    • 热门的骑行线路和拥挤路段
    • 长时间没人用的车和站点
    • 会员和非会员的比例
    • 会员和非会员的用车高峰,骑行时长对比
    • 会员和非会员在热门站点上的区别
    • 不同时间段的热门站点变化

2019年4月每一天的总骑行量可视化

  1. 需求分析:以图表的形式,显示2019年4月每一天的总骑行数量。

  2. 思路分析:

  3. 建库建表,保存原始数据

    • 在nybike项目中,在src/main/java下创建cn.tedu.nybike.util包,并在该包下创建nybike.sql。该文件仅用于保存这个项目涉及到的所有的SQL语句。
    • 该文件仅用于保存项目会所涉及到的SQL语句
  4. 将表导入数据库中

    • -- 将csv数据导入数据库表
      load data infile 'D:/201904-citibike-tripdata.csv' -- 文件的绝对路径
      into table tb_trip_1904 -- 表名
      fields terminated by ',' -- 原始文件中的分隔符
      optionally enclosed by '"' -- 去掉原始数据前后的双引号
      ignore 1 lines; -- 导入时忽略第一行-表头行
      

基础知识:

  1. 关系型数据库:
    • 近代数据库分为三种:层次性数据库、网格型数据库、关系型数据库
    • 关系型数据库理念诞生于1970年,由IBM的研究员研发。
    • 1979年,Oracle公司基于关系型数据库模型,开发了商用的关系型数据库模型。
    • 目前,Oracle数据库是全球最流行的商用关系型数据库软件。
    • 瑞典的公司推出了免费的、轻量级的关系型数据库MySQL,得到了行业中的广泛认可。
    • Mariadb:MySQL的社区版,全面支持MySQL,同时永久免费
  2. MySQL中的数据类型
    • 问题:为什么要有不同的数据类型?方便进行不同类型的数据的计算,提升效率。
    • 问题:同样是整数,为什么要分byte、short、int、long?避免空间浪费,节省资源。
    • 在MySQL中对应类型为tinyint、smallint、int、bigint。
      • byte:1字节,8位(bit),0000 0000 任意位可以为0或1,可能的组合为2^8,256个数字,用于保存数字,范围 -128 ~ 127
      • short:2字节,16位(bit),2^16,65536个数字,范围 -32768 ~ 32767
      • int:4字节,32位(bit),2^32,范围 -2^31 ~ 2^31-1
      • long:8字节,64位(bit),2^64,范围 -2^63 ~ 2^63-1
    • 具体的数据类型:
      • 数值型:
        • 整型:整数
          • tinyint
          • smallint
          • int
          • bigint
        • 浮点型:小数
          • float 4字节 单精度
          • double 8字节 双精度
          • decimal 8字节 没有精度损失,金额类型必须用此类型
      • 字符型:
        • char 不可变长度字符,声明数据字段为char时必须提供一个char的长度xxx cahr(20),无论数据多长,那么该字段在硬盘上会实际占用20字符的空间。
        • varchar 可变长度字符 ,声明数据字段为varchar时,也要提供长度xxx varchar(20),那么在硬盘上,该字段实践占用的空间由存入该字段的值得长度来决定,但是不能超过给定的数字。
        • 但不能用varchar去取代char,原因是二者的执行机制不同。char是一次性开辟固定长度的空间,然后在需要保存数据时,直接无脑放进去。快!而varchar时先判断数据实际长度,再用该长度去开辟空间,多了一步判断。慢!
      • 大文本-Text(MySQL方言,自己这么叫,其他数据库叫CLOB,Character Large Object)字符大对象
      • 二进制数据-BLOB(Binary Large Object)
      • 日期:
        • date 日期 4个字节 仅能保存年月日信息
        • time 时间 4个自己 仅能保存时分秒
        • datetime 日期时间 8个字节 日期和时间
        • timestamp 时间戳类型 8个字节 保存时间戳数据
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值