zoukankan      html  css  js  c++  java
  • 毕设开发日志2017-11-28

    【前言】

      每周汇报时间调整到了每周二,所以这次应该总结一下最近十天的工作内容。最近一直都在忙于预测模型算法等后端,前台界面还是上周的状态。但是有了本周的工作成果之后前台很多界面都可以做了。

    【工作的内容】

    1.数据爬虫部分。

      为了增加数据丰富度,以便提高预测模型的准确度,需要做一个数据爬虫,来获取一些天气方面的数据(温度,湿度,风况等)。所以先做了一个爬虫A, 监控A网站。可以提供返回指定城市的天气预报(实时,明天,未来24逐小时预报,七天)的方法,其中实时天气中还包括AQI等空气质量的数据。另外还提供返回之前24小时的逐小时历史天气。但是在上周三的时候突然A网站连不上了。然后又更换目标网站,做了爬虫B来监控网站B,支持输出指定城市的天气预报(实时天气,实时空气,城市信息,生活指数,10天) ,支持输出指定城市的LR格式数据(实时数据),同样也支持输出之前24小时的逐小时历史天气。但是实时数据中天气和空气是两个不同的方法提供的(因为URL不一样)。B爬虫完成之后发现网站A恢复正常,但是A爬虫经常报服务器508错误,该错误应该是网站服务端设置的爬虫陷阱,暂时无力解决,决定还是使用爬虫B。

    2.线性回归预测算法(LR)

      查了很多资料,也看了很多别人写的算法,经历了很多错误之后完成了一个算法模型,为了保持项目MVC层次的合理性,我把算法模型做成了一个工具类放在在util层,然后在service层中做了一个预测服务类,对该模型进行了调用。主要过程就是数据训练集的填充---->进行梯度下降法计算---->输出模型系数。

    3.空气质量预测

      在hbase数据,数据爬虫,线性回归算法的支持下,空气质量预测服务可以返回指定城市的空气质量预测数据(明天),可以返回所有城市的预测数据,可以返回预测数据的省平均数据,这样就可以支持前台的全国空气质量预测地图了。

    4.对Dao层的完善。

      为了更加方便的获取hbase数据,写了多个过滤器,支持返回指定省份的城市集合,支持返回某城市某个月的空气数据集,支持返回某个月所有的信息,等等。

    5.工具类。

      a.为了使得爬虫爬出来的数据有一个统一的格式来方便前台使用,写了一个json工具,可以将爬虫爬出来的List<String>格式数据转成json格式,这样就不用为每种数据集合都写一个TO类了。

      b.为了能更加方便的获取某一天的日期信息,做了一个基于JDK原生Calendar类的date工具类。可以获取过去或者未来 任意天内的日期数组,获取获取过去或者未来第几天的日期,获取上个月现在的日期等。

    6.其他

      由于项目中使用了很多文件,考虑到项目开发完成之后要部署到Linux环境中,有一个路径变化的问题,所以总需要设置类的加载路径来找文件。但是处处设置这个就比较烦,于是在Contacts类里设置了一个缓存目录,然后其他路径都调用该路径来做相对路径,然后再做一个conf.properties文件,在网站部署时读取该文件,让这个配置文件中设置的缓存路径的值去覆盖Contacts类中设置的路径值,这样就能很方便的实现项目迁移,而且开发过程中也不需要去总考虑路径问题了。

    【遇到的问题以及解决方案】

    1.爬虫失效

      这算是本周遇到的最大的问题了,当时心态都不好了。但是缓了缓心情还是又另做了一套爬虫。

    2.性能问题

      完成了所有准备工作之后准备做预测,一个城市的空气预测需要经过这样几个过程:获取hbase里的历史空气数据,获取爬虫怕的历史天气数据,整合之后输出到文件里,然后利用该文件做训练集,训练出预测模型,再爬取预测天气等变量,由预测模型计算出预测的空气质量。爬虫方面过来的数据很慢,而且会报经常url错误(爬虫陷阱)。于是决定只拿时间和空气质量粒子数据来做模型变量,这样就只从数据库里查历史数据,整合训练集,得到模型,算预测值。这次我记录了一下时间,一个城市需要12秒左右。我觉得这个速度太慢,优化了之后也9秒。因为还有一个功能需要算全国所有城市的预测值,求省均值,这个速度根本无法支持。于是决定做一个生成预测模型的方法,然后以后一个月之内就不更新模型了,直接拿这些模型来算,于是保存了每个城市对应的预测模型。以后可以每个月只更新一次模型,刚好训练集也是该城市一个月的数据量(一个城市一个月的数据量=监测站数(平均5个)*24h*30day),然后这个方法运行了一个小时零2分钟。然后再算某城市的预测值时大概用了2秒。差不多了。

    3.文件路径(java.io报错:找不到指定的系统目录或文件路径)

      做测试的时候能找着,但是发布到tomcat里就找不着了; 这是因为普通类对文件的读取和javaWeb对文件的路径读取是不一样的,javaWeb文件的根目录变成了项目的根目录,所以文件路径就变了,这篇博客里写的比较清楚。解决过程就是上面说的第6条。

    【后续计划】

    1.空气质量模块的页面部分。

      本周的工作成果能支持很多页面的数据了,所以下一步可以进行空气质量模块的页面部分,该部分需要用char.js,需要图标渲染等等。

    2.MS系统

      完成以上工作就赶紧做ms系统

  • 相关阅读:
    ZooKeeper Java例子(六)
    css盒模型
    竖直方向三栏布局
    水平方向三栏布局
    js判断一个字符串是以某个字符串开头
    js防止重复点击
    升级 AngularJS 至 Angular
    js实现大文件分片上传的方法
    使用svn进行本地代码管理
    angular使用代理解决跨域
  • 原文地址:https://www.cnblogs.com/420Rock/p/7909730.html
Copyright © 2011-2022 走看看