Git Product home page Git Product logo

veaba / ncov Goto Github PK

View Code? Open in Web Editor NEW
253.0 13.0 43.0 5.1 MB

【在开发2.x版本,暂时关闭站点!新版大屏beta 版本,全实时数据,交互式大屏,精确到城市级,弹幕来袭】关注2019新型冠状病毒(2019-nCoV),数据可视化感染人群热点图、迁徙扩散轨迹,以提供帮助分析疫情。 愿世界安好。Focus on Wuhan 2019-nCoV, data visualization, to help analyze the epidemic situation. May the world be well.

License: MIT License

HTML 0.26% JavaScript 4.77% Vue 31.37% Shell 1.67% Python 11.22% Dockerfile 0.06% TypeScript 44.72% Go 3.98% Rust 1.90% SCSS 0.03% CSS 0.01%
2019-ncov ncov data-visualization ncov-data-visual first-covid-19-repo

ncov's Introduction

ncov

Focus on Wuhan 2019-nCoV, data visualization, to help analyze the epidemic situation. May the world be well. 关注新型肺炎,数据可视化,以提供帮助分析疫情。 愿世界安好。

声明:本库旨在分析有关nCvo官方提供的地点、人数、等医学数据进行分析可视化数据。同时个人也希望能够相关工作提供一丢丢儿分析帮助,如果觉得该仓库帮倒忙,请联系作者删除仓库。并为未来可能引发不好的事件致歉。by @veaba 2020年1月20日10:42:30

2020-nCov感染可视化,不再维护 | 2019-nCov弹幕支持,新版可视化(全实时通信)

技术栈架构

原本是想做一个疫情行为分析的项目,一边学习TensorFlow去分析的,但现在看起来,实用性不大,太小学生了。

昨天认真想了一夜,这个项目对于疫情实在没什么帮助,于是重新定位这个仓库用途:一个关于疫情可视化分析全栈式学习项目。

不管你在IT领域从事何种工作,不管是在读学生还是对开源web技术有兴趣的人群,都可以从这个项目中或多或少有一些小帮助。

代码可能有些粗劣,但这是一个web全栈技术的体现,涉及到实时通信,前后端分离,可视化大屏,容器化,消息队列,OAuth、python、kafka、爬虫等。

性能上不会考虑太多问题,只是根据业务角度来做选型实现,所有方案都非常的初级,甚至可能被抛弃。

里面的技术方案基本都是平常积累的应用,如果有匹配度高的场景,好好改造下代码,应该也可以适用于小规模的业务使用。

鉴于此,我下面详细描述下这个仓库技术方案。

前端: client目录

vue3

本仓库前端使用Vue-next(即Vue3), 提前走进vue 3的 实战项目

  • 注意:不要刷新页面,本页面与后端交互是通过socket.io,刷新页面即认为重新登录,需要重新走授权流程

  • vue-next, 尚未正式发布还是alpha阶段vue

  • vue3提供了一些新写法,但由于麻烦还是换回了vue2的方法

  • 前端项目是改造 vue-next-webpack-preview

  • alpha3->alpha4时候,源码改造了一个非常基础实例化入参方式(详见/client/main.js),于是页面挂了。

  • 手动实现vue数字滚动,示例

    • 得益于vue中能够watch对象变化,所以就很好实现。当新数字过来的时候,需要滚动
    • 由于vue 3的未成熟,导致了很多插件、特效都需要自己手动模拟出来,当然也是一个学习的过程
    • 这里的关键点的是,首次要先全部出来,后面的数字watch然后定时++到新的对象上去
  • 手动实现vue弹幕效果

ECharts

  • ECharts官网, 国内比较主流的可视化库
  • 不足:可以定制化图表类型,现在的全量加载

webpack

socket.io

  • websocket 领域比较完善的库
  • 说起来很巧,半年以前自己翻译了一波socket.io的中文文档
  • 官网
  • 技术要点
    • room如何使用
    • 如何指定人发送消息
    • 如何emit发送消息
    • 如何on接收消息
  • 不足:
    • 不知为何,有时候前端emit后,到达后端的过程会很慢,甚至不可达
    • 带宽很费劲
  • 思考:如何考虑一连接进来就推送历史的弹幕?
  • websocket是要附加在HTTP服务上的,大多数情况下,和前端的web服务是要独立开来,所以问题是:
  • socket.io 通用事件的调用

后端:servers目录

python 爬虫

  • 基于selenium 实现爬虫抓取
  • linux上和windows差异性需要注意下
  • 不足:现在这个项目,自己改了个镜像但跑的不好,暂停了
  • 从前端视角去看python的执行机制就感觉被秀逗了,非常难受
  • 之前是想用python 做web服务了。个人能力有限,跑不动,到底还是node比较舒服
  • 可以搭配kafka
  • 也可以搭配mongo做一些录入,但注意,数据格式的转化挺头疼的事情
  • todo TensorFlow

mongodb 数据库

  • 对于前端来说node+mongodb简直神器组合
  • node 端使用mongoose类库,和mongodb使用
  • 舒服的格式转换个js天生支持json和mongodb支持js对象就很让人安心
  • 不足:当然查询量1w以上时候,需要注意性能问题了,10s才完成
    • 没优化好,当然可能是查询的语句不够好
  • 主要安全问题
    • 如授权,需要设置密码
    • 端口的暴露也需要看一下限制白名单

redis

  • redis官网
  • node-redis
  • 主要用来存储一些即时的数据,如token,在线状态
  • 注意对要内存要求高

kafka 消息队列

  • kafka官网
  • kafka给我的体验不太好
  • 我要在这里实名举报这几个类库:
    • kafka-node
      • 文档写的什么玩意???
      • 使用起来各种问题,API设计成什么样?
      • 据说sohu的库
      • 实在是被搞的炸毛,吐槽一波,舒服
    • node-kafka
      • 不予置评
    • kafkajs
      • 不搭个kafka集群还用不了,是不?
      • 这个项目在用
  • kafka贼慢,导致发送代码过一会才出来
    • 用户发送弹幕,生产者写入
    • 取出来是从消费者读出来的
    • 不足:这两种的时间差导致有些慢

node

主要给页面提供转接内容和socket通信

  • 使用TypeScript书写
  • pm2容器化运行

服务器

docker需要运行,建议4G以上,kafka是java的吧?据说java不都是4G起步?

  • 建立docker网络,指定内网ip
  • 设置白名单端口
  • 放行策略
  • 敏感组件关闭开发给公网

OAuth 走的是Github的授权

可持续继承、运维、容器化

  • docker
  • docker-compose
    • web服务使用docker-compose编排
    • 此前个人用的 learn-docker-compose, 很多部分笔记没有放出来
  • gh-pages. 为了灵活化配合nginx代理,已不用gh-pages了,但此前的配置可以参考 配合Actions生成ph-pages
  • Github Actions. 自己写部署的脚本 build.sh
  • 拓展:k8s(Kubernetes)

CDN

现在是调用CDN,但为了保险建议还是存一份本地库在服务器上,以免CDN炸机,

  • 个人使用的小网站,可以走cloudflare,但要处理,第一次生效和取消,都有一段时间的空档期,升级时,避免高峰期访问
  • 云服务器厂商的服务,收费,贵

shell

nginx

  • 这个仓库没放出nginx.conf,但需要知道怎么配置
  • 前后端分离项目,一般需要nginx做反向代理一些API等

内容:

  • 通信全走实时通信socket.io
  • 全世界RANK
  • **省份RANK
  • 疫情饼图
  • 统计数据有更新会自动滚动
  • 地图数据全部是实时
  • 内容更新1-3分钟不等
  • 弹幕系统
  • 数据:大屏API走的腾讯新闻的接口

教训、心得

  • 上线部署的时候,真的非常小心了。由于本地配置和线上配置还是有些差异的
  • 注意安全性问题
  • 还是极致比较好些吧
  • 权当一次技术学习

贡献/Contribute

贡献/Contributor

关于

为什么会有本站?

  • 提供可视化分析,一次个人技术栈练习
  • 基于Vue+ECharts 实现,具体见 开发文档
  • 同时本仓库暂不提供API,但可以直接对接socket.io 进行通信,目前并未设置权限

关于本人

目前职业是前端,主要从事vue项目的ctrl+c、ctrl+v

其他疫情项目

鉴于本仓库的局限性,可能适合个人用来学习练手的全栈式项目,我个人认为这个项目对实际帮助疫情的可能性不大,所以推荐下其他疫情的项目,免得大家迷路。

  • wuhan2020 新型冠状病毒防疫信息收集平台,多人协作,可以派得上用场的项目

ncov's People

Contributors

dependabot[bot] avatar p-chan avatar veaba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ncov's Issues

Next Version: 2.x dev Plan

Project

Refactor

Feature

  • 重构业务内容,现在弹幕的版本将迁移到新的分支备用
  • 更改数据来源,现在的数据应该不对了,尤其是国外区域的感染数据
  • 现在的迁徙路径不应该全都来自武汉,这个是绝对的。
  • 增加爱心地图,这个一直说了没做。
  • 引入vue-router-next 增加多页面可视化
  • 明星、名人、正要感染的信息
  • 计划:去收集和评估**的经济损失
    • 评估世界损失
  • todo
  • 更多计划,查看草稿

Solution: COVID-19 Docs

README

公布下最近的功能迭代/ Update Logs

todo

  • 使用爬虫爬取微博的数据

  • 爬取权威官网的数据

  • 产生的数据,交叉对比数据库,输出到News

  • 在控制台中,手动应用到数据库,这一步需要做权限控制(先上Github,有条件再上微博登录)

  • 后端实时推送消息到前端展示

  • 增加多种类型的分析表格

  • 增加timeline

以上,在做中,手病犯了,歇一会。

后续的素材收集可能需要帮忙。。

以上

2020-1-23 23:21:42


新闻模块

  • 爬取央视新闻页面数据丢到kafka
  • todo 增加定时器,每2分钟,爬取前2页,数据通过socket 推送到前端
    • 新闻增加分级
    • 级别高危的,modal 弹窗提示到前端
      以上
      2020年1月24日12:31:15

新闻模块

  • 爬取央视新闻页面数据丢到kafka
  • kafka 消费者加入到数据库中,并同步推送到前端,明天转为node开发来实现,python难搞
  • 增加定时器,每2分钟,爬取前2页,数据通过socket 推送到前端
    • python 的协程有点搞不懂,后续socket转为node实现推送。搞了一天了。
    • todo 新闻增加分级
    • todo 级别高危的,modal 弹窗提示到前端
      以上
      2020年1月25日01:00:21

  • 爬取央视新闻页面数据丢到kafka
  • kafka 消费者加入到数据库中,并同步推送到前端
  • socket 转为node 实现
  • 增加定时器,每2分钟,爬取前2页,数据通过socket 推送到前端
    • python 的协程有点搞不懂,后续socket转为node实现推送。搞了一天了。
    • todo 新闻增加分级
    • todo 级别高危的,modal 弹窗提示到前端,明天做

2020年1月26日00:00:28

  • 爬取央视新闻页面数据丢到kafka
  • kafka 消费者加入到数据库中,并同步推送到前端
  • socket 转为node 实现
  • 增加定时器,每2分钟,爬取前2页,数据通过socket 推送到前端
    • socket转为node实现推送。
    • 后端推送新闻到前端
    • 前端表单report 给后端,后端socket 将report 的消息推送到前端并更新地图或者大图
    • 明天主要增加授权,完成授权后接下来就出来各种图表的数据格式转换
    • todo 增加控制台 ,将Github 授权用户report后台的消息pass后,即可正常作为范例。
    • 可能:将report的消息通过发到isuues

2020年1月27日01:31:33

  • 爬取央视新闻页面数据丢到kafka
  • kafka 消费者加入到数据库中,并同步推送到前端
  • socket 转为node 实现
  • 增加定时器,每2分钟,爬取前2页,数据通过socket 推送到前端
  • [x]socket转为node实现推送。
  • 后端推送新闻到前端
  • 前端表单report 给后端,后端socket 将report 的消息推送到前端并更新地图或者大图
  • 增加控制台 ,将Github 授权用户report后台的消息pass后,即可正常作为范例
  • 开发前端控制台
  • 后端apply、
  • 后端授权闭环、mongo+redis+GitHub OAuth授权,以socket 的sid 作为凭证,断开需要重启应用授权,免密,最大保证用户信息安全
  • todo 可能:将report的消息通过发到isuues
  • todo 明天主要开发前端控制台,模块对接,授权后接下来就出来各种图表的数据格式转换
  • todo 预计两三内可出beta 版本

2020年1月27日22:59:55(手病实在严重,码不了代码了。今天早点收工)

Help~~:求一个Python demo

瞎折腾太耗时间了,跑来求一个demo,请求社区力量帮助。

描述:

线程1python 使用socket.io ,线程2同时运行kafka生产者,产生的数据丢到kafka消息队列,topic 为 a,另外一个线程3运行kafka消费者,订阅topic a,并将消费者产生的数据录入到mongodb、同时通过线程1的socket emit 到一个event b,前端on 这个事件 b

昨天搞了一天了,没搞定,准备换node实现socket 服务端。

请问能否提供API

想要做个数据可视化的App,苦恼于不动爬虫和服务器,也没有公开的API

fix 弹幕版本问题反馈在此处

我猜没啥人使用这个新版本~~~,这个网站只有我一个人。

已发现的问题

  • 卡滞
    • 不用cloudflare CDN了,采用本地的socket.io
  • 发出去迟缓回来
    • 保持kafka 逻辑不动
  • 条数和颜色会随着发布而改变
  • 画面尺寸变化rank榜单位置未更新
  • 可能存在内存泄露的问题
  • 弹幕图片太大了
    • 确定头像大小
  • 对接的即时消息,如何新闻等对接到弹幕里面去
  • 弹幕位移闪现现象
  • 首次拉取弹幕信息的时间交互不对
    • 由前端拉取,取消后端推送
  • 有数据过来滚动的动画不对
  • 2020年2月23日23:09:21优化的bug可能引发无法发布弹幕
  • 滥用async/await的问题,引发性能无辜的等待损耗,这个优化将在下一个版本中得到解决。

短期内,可能不太多优化弹幕了。

下一阶段计划:地图增加多源地,但这些数据需要做一次清洗,引入vue3 路由,多页面。

暂时关闭站点

鉴于当前数据不再符合疫情需要,现在做出关闭站点的决定,直至新版本出来之前,不再开启原网站

做出决定有几个考量

  • 左侧世界RANK 太多放不下
  • 源数据来源不再更新
  • 现有了2.x 版本的迭代方向
  • 现网站内容过少,放着无太多意义

地点错误

美国确诊病例是在华盛顿州,不是华盛顿特区。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.