项目介绍

本项目总体分为

  1. 平台搭建
  2. 模拟数据源生成
  3. 实时流数据处理
  4. 实时数据大屏

这几个部分,我将分成几个博客分别介绍这些部分的工作,本文主要介绍最后一个部分,实时数据大屏。
前面的几篇文章已经将平台的搭建,数据模拟生成,流数据处理部分做了详细的介绍,这篇文章主要是对前面所做的工作进行一个升华,关分析出数据不够直观,而能将所做的东西更加直观的表达出来就需要进行可视化了,下面我将为大家介绍可视化部分的工作

平台搭建,具体可以看平台搭建
模拟数据源生成,具体可以看模拟数据源生成
实时流数据处理,具体可以看实时流数据处理
项目下载地址下载

环境介绍

首先还是对环境介绍一下,这部分主要使用的将是html,php,js,css等做网站所需要的一些语言及工具,由于需要进行异步数据加载,所以还需要一个本地的服务器,本文使用的是phpstudy,主要是这个工具还集成了mysql,能简化不少我们的工作,当然如果自己拥有服务器,那完全是可以将这个部署在服务器上面的

首先我们先要安装phpstudy,这里不对具体的安装过程进行介绍,安装完成后我们可以进入网站的根目录

在这个目录下新建一个目录即可作为我们的网站目录了

然后我们可以使用phpstudy带的站点域名管理为我们的网站设置一个域名,其中的网站目就是我们刚刚创建的网站目录

在hosts里面是需要加入IP和域名的映射的,如:

127.0.0.1 www.sshstudy3.com

这样就可以在浏览器里面通过访问域名来访问我们要做的网站了

接下来我们需要去创建数据库,打开phpMyAdmin,我们可以进入数据库管理界面

这里的账号密码默认都是root

进入后我们可以看到如下界面

在这里可以创建数据库,或者进行数据库的访问等,不再赘述

到这里基本需要使用到的环境就基本完成了,接下来就是代码的部分

代码部分

代码部分由于过多,这里只能给出一部分重要的代码
首先先给大家看一下我们网站的整体结构

css下面放css文件,data下面放的是我们前面实时流处理生成的统计数据,font下面放的是字体文件,images下面放的是图片文件,js下面放的是编写的JavaScript文件,lib下面放的是调用的一些JavaScript文件,theme下面放的是主题文件,index.php是我们网站的首页

index.php

<!doctype html>
<html>
<head><meta charset="utf-8"><title>index</title><script type="text/javascript" src="lib/jquery.js"></script><link rel="stylesheet" href="css/comon0.css">
</head>
<script>$(window).load(function () {$(".loading").fadeOut()})$(document).ready(function () {var whei = $(window).width()$("html").css({ fontSize: whei / 20 })$(window).resize(function () {var whei = $(window).width()$("html").css({ fontSize: whei / 20 })});});
</script><script type="text/javascript"></script><script type="text/javascript" src="lib/echarts.min.js"></script>
<script language="JavaScript" src="js/show_amount_Price.js"></script>
<script language="JavaScript" src="js/global_variable.js"></script>
<script language="JavaScript" src="js/show.js"></script>
<script language="JavaScript" src="js/map.js"></script>
<!-- <script language="JavaScript" src="theme/shine.js"></script> --><body><div class="canvas" style="opacity: .2"><iframe frameborder="0" src="js/index.html" style="width: 100%; height: 100%"></iframe></div><div class="loading"><div class="loadbox"> <img src="images/loading.gif"> 页面加载中... </div></div><div class="head"><h1>商品交易数据实时处理大屏</h1><div class="weather"><!--<img src="images/weather.png"><span>多云转小雨</span>--><span id="showTime"></span></div><script>var t = null;t = setTimeout(time, 1000); function time() {clearTimeout(t); dt = new Date();var y = dt.getFullYear();var mt = dt.getMonth() + 1;var day = dt.getDate();var h = dt.getHours(); var m = dt.getMinutes(); var s = dt.getSeconds(); document.getElementById("showTime").innerHTML = y + "年" + mt + "月" + day + "-" + h + "时" + m + "分" + s + "秒";t = setTimeout(time, 1000);  }</script></div><div class="mainbox"><ul class="clearfix"><li><div class="boxall" style="height: 4.7rem"><div class="alltitle">性别年龄图</div><div class="allnav" id="echart1"></div><div class="boxfoot"></div></div><div class="boxall" style="height: 3.8rem"><div class="alltitle">性别和年龄的环状图</div><div style="height:100%; width: 100%;"><div class="sy" id="fb1"></div><div class="sy" id="fb2"></div></div><div class="boxfoot"></div></div></li><li><div class="bar"><div class="barbox"><ul class="clearfix"><li class="pulll_left counter" id="amount">0</li><li class="pulll_left counter" id="Price">0</li></ul></div><div class="barbox2"><ul class="clearfix"><li class="pulll_left">成交货物件数</li><li class="pulll_left">成交总额</li></ul></div></div><div class="map"><div class="map1"><img src="images/lbx.png"></div><div class="map2"><img src="images/jt.png"></div><div class="map3"><img src="images/map.png"></div><div class="map4" id="map"></div></div></li><li><div class="boxall" style="height: 4.7rem"><div class="alltitle">购物种类图</div><div class="allnav" id="echart5"></div><div class="boxfoot"></div></div><div class="boxall" style="height: 3.8rem"><div class="alltitle">性别和购物种类图</div><div class="allnav" id="echart6"></div><div class="boxfoot"></div></div></li></ul></div><div class="back"></div><script type="text/javascript" src="js/world.js"></script></body>
</html>

get_Price.php

<?php$con=mysql_connect("localhost","root","root");if (!$con) { die('数据库连接失败'.$mysql_error()); } mysql_select_db("transaction",$con);$result = mysql_query("select sum(Price) from record where 1 =1;");$row = mysql_fetch_array($result);$Price = $row[0];echo $Price;
?>

show.js

/** @Author: longyan* @Date:   2019-12-25 08:19:34* @Last Modified by:   longyan* @Last Modified time: 2019-12-30 10:57:05*/$(function() {refresh();//开始定时刷新setInterval(refresh,1000);
});function echarts_31() {// 基于准备好的dom,初始化echarts实例var colors = ['red', 'yellow', 'green', 'lightskyblue', '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3']var myChart = echarts.init(document.getElementById('fb1'));var category = [];var data = [];$.get('../data/gender.json').done(function(result) {$.each(result, function(key, value) {category.push(key)data.push({ value: parseInt(value), name: key });});option = {title: [{text: '性别分布环形图',left: 'center',textStyle: {color: '#fff',fontSize: '16'}}],tooltip: {trigger: 'item',formatter: "{a} <br/>{b}: {c} ({d}%)",position: function(p) { //其中p为当前鼠标的位置return [p[0] + 10, p[1] - 10];}},legend: {top: '70%',itemWidth: 15,itemHeight: 15,data: category,textStyle: {color: 'rgba(255,255,255,.5)',fontSize: '15',}},series: [{name: '性别分布环形图',type: 'pie',avoidLabelOverlap: false,center: ['50%', '42%'],radius: ['40%', '60%'],color: colors,label: {normal: {show: false,position: 'center'},emphasis: {show: true,textStyle: {fontSize: '20',fontWeight: 'bold'}}},labelLine: {normal: {show: false}},data: data,}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize", function() {myChart.resize();});})
}function echarts_32() {// 基于准备好的dom,初始化echarts实例var colors = ['red', 'yellow', 'green', 'lightskyblue', '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3']var myChart = echarts.init(document.getElementById('fb2'));var data = [];var category = [];$.get('../data/age.json').done(function(result) {$.each(result, function(key, value) {category.push(key);data.push({ value: parseInt(value), name: key });});option = {title: [{text: '年龄分布环形图',left: 'center',textStyle: {color: '#fff',fontSize: '16'}}],tooltip: {trigger: 'item',formatter: "{a} <br/>{b}: {c} ({d}%)",position: function(p) { //其中p为当前鼠标的位置return [p[0] + 10, p[1] - 10];}},legend: {top: '70%',itemWidth: 14,itemHeight: 14,data: category,textStyle: {color: 'rgba(255,255,255,.5)',fontSize: '14',}},series: [{name: '年龄分布环形图',type: 'pie',avoidLabelOverlap: false,center: ['50%', '42%'],radius: ['40%', '60%'],color: colors,label: {normal: {show: false,position: 'center'},emphasis: {show: true,textStyle: {fontSize: '20',fontWeight: 'bold'}}},labelLine: {normal: {show: false}},data: data,}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize", function() {myChart.resize();});})
}function getArrayIndex(arr, obj) {var i = arr.length;while (i--) {if (arr[i] === obj) {return i;}}return -1;
}function echarts_1() {var myChart = echarts.init(document.getElementById('echart1'));var colors = ['red', 'yellow', 'green', 'lightskyblue', '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3']var source = [];var category = ["gender", "10-20", "20-30", "30-40", "40-50", "50-60", "60-100"];var female = ["female", 0, 0, 0, 0, 0, 0];var male = ["male", 0, 0, 0, 0, 0, 0];$.get('../data/gender_age.json').done(function(result) {$.each(result["female"], function(key, value) {female[getArrayIndex(category, key)] = parseInt(value);});$.each(result["male"], function(key, value) {   male[getArrayIndex(category, key)] = parseInt(value);});source.push(category);source.push(male);source.push(female);option = {legend: {// orient: 'vertical',// left: 'left',itemWidth: 15,itemHeight: 15,textStyle: {color: 'rgba(255,255,255,.5)',fontSize: '12',}},tooltip: {},dataset: {source: source},xAxis: [{type: 'category',gridIndex: 0,axisLabel: {// rotate:50,show: true,textStyle: {color: 'rgba(255,255,255,.5)',lineHeight: 20,fontSize: 14},},axisLine: {lineStyle: {color: 'rgba(255,255,255,.5)'}},}, {type: 'category',gridIndex: 1,axisLabel: {// rotate:50,show: true,textStyle: {color: 'rgba(255,255,255,.5)',lineHeight: 20,fontSize: 14},},axisLine: {lineStyle: {color: 'rgba(255,255,255,.5)'}},}, ],yAxis: [{gridIndex: 0,axisLabel: {// rotate:50,show: true,textStyle: {color: 'rgba(255,255,255,.5)',lineHeight: 20,fontSize: 14},},axisLine: {lineStyle: {color: 'rgba(255,255,255,.5)'}},}, {gridIndex: 1,axisLabel: {// rotate:50,show: true,textStyle: {color: 'rgba(255,255,255,.5)',lineHeight: 20,fontSize: 14},},axisLine: {lineStyle: {color: 'rgba(255,255,255,.5)'}},}],grid: [{ bottom: '55%' },{ top: '60%' }],series: [// These series are in the first grid.{ type: 'bar', seriesLayoutBy: 'row' },{ type: 'bar', seriesLayoutBy: 'row' },// These series are in the second grid.{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 }]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize", function() {myChart.resize();});})
}function echarts_5() {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('echart5'));var category = [];var data = [];var colors = ['red', 'yellow', 'green', 'lightskyblue', '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3']$.get('../data/type.json').done(function(result) {$.each(result, function(key, value) {category.push(key);});$.each(result, function(key, value) {data.push({ value: parseInt(value), name: key });});option = {tooltip: {trigger: 'item',formatter: "{a} <br/>{b} : {c} ({d}%)"},grid: {left: '0%',top: '50px',right: '0%',bottom: '20%',containLabel: true},legend: {orient: 'vertical',left: 'left',itemWidth: 15,itemHeight: 15,data: category,textStyle: {color: 'rgba(255,255,255,.5)',fontSize: '12',}},toolbox: {show: true,feature: {mark: {show: true,},dataView: {show: true,readOnly: false,iconStyle: {normal: {borderColor: '#f60'}}},magicType: {show: true,type: ['pie', 'funnel'],},restore: {show: true,iconStyle: {normal: {borderColor: 'yellow'}}},saveAsImage: {show: true,iconStyle: {normal: {borderColor: 'green'}}}}},series: [{name: "购物类型",type: 'pie',center: ['64%', '60%'],radius: "50%",color: colors,itemStyle: {emphasis: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}},data: data,}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize", function() {myChart.resize();});})
}function echarts_6() {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('echart6'));var type=["gender","洗护","玩具","宠物","办公","汽车","百货","运动","动漫","其他","食品","学习","珠宝","家电","服装","影视","游戏","鞋靴","建材","数码"];var parallel = [{dim: 0,name: 'gender',type: 'category',data: ['male', 'female']}];var male=["male"];var female=["female"]var data = [];var colors = ['red', 'yellow', 'green', 'lightskyblue', '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3']$.get('../data/gender_type.json').done(function(result) {for(var i=1;i<=type.length;i++){male.push(0);female.push(0);parallel.push({dim: i, name: type[i]});}$.each(result["female"], function(key, value) {female[getArrayIndex(type, key)] = parseInt(value);});$.each(result["male"], function(key, value) {male[getArrayIndex(type, key)] = parseInt(value);});data.push(male);data.push(female);option = {parallelAxis: parallel,parallel: {axisExpandable: true,axisExpandCenter: 15,axisExpandCount: 10,axisExpandWidth: 60,axisExpandTriggerOn: 'mousemove',z: 100,parallelAxisDefault: {type: 'value',nameLocation: 'start',nameRotate: 25,// nameLocation: 'end',nameTextStyle: {fontSize: 15},nameTruncate: {maxWidth: 200},nameGap: 20,splitNumber: 3,tooltip: {show: true},axisLine: {// show: false,lineStyle: {width: 1,color: 'rgba(255,255,255,.5)',}},axisTick: {show: false},splitLine: {show: false},z: 100}},series: {type: 'parallel',smooth: true,lineStyle: {width: 4},blendMode: 'lighter',data: data,}};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize", function() {myChart.resize();});})
}function refresh() {world_map()echarts_31();echarts_32();echarts_1();echarts_5();echarts_6();
}

其余代码这里不再做具体展示

简单演示

下面就给大家简单演示一下整个项目运行起来之后的样子
首先还是将平台都启动,然后启动数据生成和数据处理的程序
最后,打开我们的网站即可
最开始,没有数据的时候是这样的

当实时处理程序将数据处理之后,会慢慢变成下面的样子


项目总结

一步一步,终于将这个模拟购物数据实时流处理的任务完成了,整个项目在技术方面用到了很多不同的技术,采用了很多不同的方法,这个既是优点,也是缺点,由于技术用的比较多,环境配置就相对比较麻烦,但是整体效果还是不错的,整体上达到预期目标。
如果阅读过程中有遇到什么问题,或者有写错的地方,欢迎大家批评指正。

模拟购物数据实时流处理(4)——实时数据大屏相关推荐

  1. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...

    实验背景介绍 了解更多2017云栖大会·杭州峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之<在线用户行为分析:基于流式计算的数据处理及应用> ...

  2. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇

    点击有惊喜 实验背景介绍 了解更多2017云栖大会·杭州峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之<在线用户行为分析:基于流式计算的数据处理 ...

  3. web常用通用组件+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件

    作品介绍:web常用通用组件+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件 Axure原型演示及下载 ...

  4. 海康威视IPCamera图像捕获方法:捕获实时流,将实时流解码成YV12,然后转换成RGB

    将他的MFC工程相关的代码抠出来,重组.于是实现了捕获YV12格式的视频流的功能,光有YV12还是不行的,需要将YV12转成YUV4:4:4的,然后再将YUV色度空间转换成RGB色度空间,这个过程是在 ...

  5. 基于Python的海量豆瓣电影、数据获取、数据预处理、数据分析、可视化、大屏设计项目(含数据库)

    目录 项目介绍 研究背景 国内外研究现状分析 研究目的 研究意义 研究总体设计 网络爬虫介绍 豆瓣电影数据的采集 数据预处理 大数据分析及可视化 豆瓣影评结构化分析 大屏可视化 文本可视化 总结 每文 ...

  6. 星痕 轻松实现大屏数据可视化_数据美的历程有多难?大屏可视化轻松帮你实现...

    看到这个数据可视化大屏,我们如何实现美感呢?正确的姿势必不可少! 当我们满怀激动地开始数据可视化时,请不要马上钻入某个细节里,不要急着考虑用什么酷炫的图表来展现,也不要纠结于用什么颜色.什么字体. 而 ...

  7. 数据可视化demo_火出圈的大屏你真的会做吗?这才是老板最爱的可视化大屏

    人们一提到数据可视化这个词,很多人大脑会直接闪过两个字,那就是"火"出圈的大屏. 数据大屏,对内是企业运维透明化的看板.业务决策的驾驶舱,对外是展现运营形象的窗口.它 可是,你真的 ...

  8. 34【源码】数据可视化:基于 Echarts + Python 动态实时大屏 - 视频平台

    效果图展示 1.动态实时更新数据效果图 说明: 其中 今日抓拍,抓拍总数,预警信息统计,监控点位统计图表 做了动态实时更新处理. ​ 2.静态切片效果图 一.确定需求方案 1.确定产品上线部署的屏幕L ...

  9. 计算机毕业设计之SpringBoot+Vue.js+WebMagic电商数据分析 电商大数据 电商数据采集系统 电商大屏 大数据毕业设计 电商知识图谱

    需求 近5年电商企业社会责任数据,数据可视化 (1) 社会责任数据 (2) 电商企业:(30家左右的数据即可) 1-10名:阿里巴巴.美团点评.拼多多.京东.小米集团.滴滴.贝壳找房.京东健康.阿里健 ...

  10. 永洪Desktop实例分享|星巴克数据指标体系建设及炫酷可视化大屏搭建

    点击上方蓝字关注我们 在很久以前分享过一篇用Excel制作炫酷动态看板的文章,很多小伙伴看了之后直呼Excel这种操作极为炫酷,也想实践下这类操作.但是到了真正上手的时候,却发现利用Excel作动态看 ...

最新文章

  1. linux shell 提示 bash: no job control in this shell
  2. mysql connector bin_mysql-connector-java-xxx-bin.jar包的使用
  3. WGS84经纬度坐标与WEB摩卡托坐标转换
  4. python桌面图形_Python桌面图形程序美化的方法论
  5. android SQLite查询并显示用户输入的选择信息
  6. CSS 学习路线(一)元素
  7. linux的grub损坏,如何利用Grub命令启动损坏的Linux系统?
  8. 开源虚拟示波器-_一个新的开源数据库,TP-Link路由器上的开源固件以及更多新闻
  9. 能让中年人放下面子赚到钱的副业
  10. vue 中 v-bind 合并行为
  11. python编程是啥-什么是Python编程课程
  12. c++ 11 中for循环新增的用法(基于范围的for循环)
  13. 项目_电商_淘淘商城_0000
  14. 如何同时使用双网卡进行两个网络上网
  15. iTunes Windows 历史版本下载
  16. 计算机社团自评报告怎么写,社团自我评价
  17. VS2013 设置背景图
  18. openeuler 21.3 : 使用LVM管理硬盘
  19. 音乐歌单Android,[CloudReader]Android - 仿网易云音乐歌单详情页
  20. 速记:安卓Netty部署SSL/TLS和避坑指南

热门文章

  1. Tomcat配置数据库连接池
  2. Quasi-Monte Carlo Image Synthesis in a Nutshell——低差异序列
  3. 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题(点击多次跳转)
  4. 我的《上勾拳》网页单机小游戏有什么版权问题吗
  5. 使用Requests爬取猫眼电影
  6. 操作系统笔记(1.5w字耐心整理)
  7. linux proftpd 用户,Linux下安装和配置proftpd教程
  8. Linux下根据用户ID查询用户名
  9. RE:从零开始的汇编语言_挑好书
  10. iOS APP启动页更新失败