可视化(day01)

20 篇文章 0 订阅

可视化
概述
数据可视化技术的基本思想,是将数据库中每一个数据项作为单个图元元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析。

数据可视化之所以会大受欢迎,其原因不仅在于能带给用户良好的的视觉效果,更因为它能够产生生产力,形成数据驱动闭环,主要包含以下几个阶段:
1 )技术人员运用技术手段将需求分析、基础数据整合、数据计算等操作结合到一起进行数据可视化
2 )实时监控数据的变化情况
3 )用户能够使用这些可视化图表,进行分析、对比等操作,定位业务问题
4)之后再结合业务变动提出新的需求
5 )技术人员将用户访问数据与新的业务需求结合,重新进行数据整合、分析、计算,循环往复下去。

代码
前端

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/echarts.min.js"></script>
<script type="text/javascript">
	window.onload=function(){
		 myChart = echarts.init(document.getElementById('dev01'));
		
		 //
		 timeArr=[]
		 pvArr=[]
		 uvArr=[]
		 vvArr=[]
		 newipArr=[]
		 newcustArr=[]
	
		 //定时器
		 window.setInterval(function(){
			 $.get("http://localhost:8080/FluxBiServer/BiView",function(datax){
				 	//移除数据
				 	if(pvArr.length>=15){
				 		
				 		timeArr.shift()
				 		pvArr.shift()
				 		uvArr.shift()
				 		vvArr.shift()
				 		newipArr.shift()
				 		newcustArr.shift()
				 	}
				 
				 	//
				 	timeArr.push(eval(datax)[0])
				 	pvArr.push(eval(datax)[1])
				 	uvArr.push(eval(datax)[2])
				 	vvArr.push(eval(datax)[3])
				 	newipArr.push(eval(datax)[4])
				 	newcustArr.push(eval(datax)[5])
				 	
					// 指定图表的配置项和数据
				      	var option = {
				      			
				      		  legend:{
				      			  data:['pv','uv','vv','newip','newcust']
				      		  },
				      		  xAxis: {
				      		    type: 'category',
				      		    data: timeArr
				      		  },
				      		  yAxis: {
				      		    type: 'value'
				      		  },
				      		  series: [
				      		    {
				      		        name:'pv',
				      		    	data: pvArr,
				      		      type: 'line',
				      		      smooth: true
				      		    },
				      		  {
				      		        name:'uv',
				      		    	data:uvArr,
				      		      type: 'line',
				      		      smooth: true
				      		    },
				      		  {
				      		        name:'vv',
				      		    	data: vvArr,
				      		      type: 'line',
				      		      smooth: true
				      		    },{
				      		        name:'newip',
				      		    	data: newipArr,
				      		      type: 'line',
				      		      smooth: true
				      		    },{
				      		        name:'newcust',
				      		    	data: newcustArr,
				      		      type: 'line',
				      		      smooth: true
				      		    }
				      		  ]
				      		};

				      	// 使用刚指定的配置项和数据显示图表。
				      	myChart.setOption(option);
				 })
		 },2000)
		 
		 
      	
	}
</script>
<title>Insert title here</title>
</head>
<body>
<div id="dev01" style="width: 1800px;height: 800px";align="center";> </div>
</body>
</html>

业务层

package cn.tedu.dataview;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.tagext.TryCatchFinally;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import jdk.management.cmm.SystemResourcePressureMXBean;

/**
 * Servlet implementation class BiView
 */
@WebServlet("/BiView")
public class BiView extends HttpServlet {
	private static final long serialVersionUID = 1L;
    //
	private ComboPooledDataSource source=new ComboPooledDataSource();
    //
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			Long timeStamp=System.currentTimeMillis();
			SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd");
			SimpleDateFormat sdf1=new SimpleDateFormat("HH-mm-ss");
			//解析当天的日期
			String ttime=sdf.format(timeStamp);
			String xtime=sdf1.format(timeStamp);
			Connection conn = source.getConnection();
			PreparedStatement ps = conn.prepareStatement("select * from tongji2 where reporttime=?");
			
			ps.setString(1, ttime);
			ResultSet rs=ps.executeQuery();
			if(rs.next()){
				//当天有数据,则封装
				int pv=rs.getInt("pv");
				int uv=rs.getInt("uv");
				int vv=rs.getInt("vv");
				int newip=rs.getInt("newip");
				int newcust=rs.getInt("newcust");
				String result="["+"'"+xtime+"',"+pv+","+uv+","+vv+","+newip+","+newcust+"]";
				response.getWriter().write(result);
			}else{
				//没有数据,则各个指标都为0
				String result="["+"'"+xtime+"',"+"0,0,0,0,0]";
				response.getWriter().write(result);
			}
			rs.close();
			ps.close();
			conn.close();
//			response.setHeader("Access-Control-Allow-Origin", "*");
//			//前台发起ajax,组织数据返回
//			//返回数据格式[pv,uv,vv,newip,newcust]
//			String result="[";
//			for (int i = 0; i < 4; i++) {
//				int num=new Random().nextInt(100);
//				result=result+num+",";
//			}
//			int num=new Random().nextInt(100);
//			result=result+num+"]";
//			response.getWriter().write(result);
		}catch (Exception e) {
			
		}finally {
			
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

c3p0

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://hadoop01:3306/weblog</property>
		<property name="user">root</property>
		<property name="password">root</property>
	</default-config>
</c3p0-config>

架构
在这里插入图片描述

可视化展示
在这里插入图片描述

可视化小demo

<!DOCTYPE html>
<html>
	<head>
	<title>ECharts</title>
	<!--引入echarts.js -->
	<script src="echarts.js"></script>
	</head>
	<body>
		<div id="main" style="width:600px;height:400px"></div>
		<script type="text/javascript">
      	// 基于准备好的dom,初始化echarts实例
      	var myChart = echarts.init(document.getElementById('main'));

      	// 指定图表的配置项和数据
      	var option = {
        title: {
          	text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          	data: ['销量']
        },
        xAxis: {
          	data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          	{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          	}
        ]
      	};

      	// 使用刚指定的配置项和数据显示图表。
      	myChart.setOption(option);
    </script>
	<body>
</html>


<!DOCTYPE html>
<html>
	<head>
	<title>ECharts</title>
	<!--引入echarts.js -->
	<script src="echarts.js"></script>
	</head>
	<body>
		<div id="main" style="width:600px;height:400px"></div>
		<script type="text/javascript">
      	// 基于准备好的dom,初始化echarts实例
      	var myChart = echarts.init(document.getElementById('main'));

      	// 指定图表的配置项和数据
      	option = {
	    legend:{
		  	data:['成本','利润']  
	    },
	 	title: {
		      	text:'折线图',
		      	left:'20%'
	      	},
  	xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  	},
  	yAxis: {
    type: 'value'
  	},
  	series: [
    {
	    name:'成本',
      	data: [150, 230, 224, 218, 135, 147, 260],
      	type: 'line'
    },{
	    name:'利润',
      	data: [100, 2030, 2324, 2018, 1035, 1347, 1260],
      	type: 'line'
    }
  	]
};

      	// 使用刚指定的配置项和数据显示图表。
      	myChart.setOption(option);
    </script>
	<body>
</html>


<!DOCTYPE html>
<html>
	<head>
		
	<title>ECharts</title>
	<!--引入echarts.js -->
	<script src="echarts.js"></script>
	
	<script type="text/javascript">
		window.onload=function () {
			
			// 基于准备好的dom,初始化echarts实例
      	var myChart = echarts.init(document.getElementById('main'));

      	// 指定图表的配置项和数据
      	option = {
  	title: {
    <!--text: 'Stacked Area Chart'-->
  	},
  	tooltip: {
    trigger: 'axis',
    axisPointer: {
      	type: 'cross',
      	label: {
        backgroundColor: '#6a7985'
      	}
    }
  	},
  	legend: {
    data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
  	},
  	toolbox: {
    feature: {
      	saveAsImage: {}
    }
  	},
  	grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  	},
  	xAxis: [
    {
      	type: 'category',
      	boundaryGap: false,
      	data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    }
  	],
  	yAxis: [
    {
      	type: 'value'
    }
  	],
  	series: [
    {
      	name: 'Email',
      	type: 'line',
      	stack: 'Total',
      	areaStyle: {},
      	emphasis: {
        focus: 'series'
      	},
      	data: [120, 132, 101, 134, 90, 230, 210]
    },
    {
      	name: 'Union Ads',
      	type: 'line',
      	stack: 'Total',
      	areaStyle: {},
      	emphasis: {
        focus: 'series'
      	},
      	data: [220, 182, 191, 234, 290, 330, 310]
    },
    {
      	name: 'Video Ads',
      	type: 'line',
      	stack: 'Total',
      	areaStyle: {},
      	emphasis: {
        focus: 'series'
      	},
      	data: [150, 232, 201, 154, 190, 330, 410]
    },
    {
      	name: 'Direct',
      	type: 'line',
      	stack: 'Total',
      	areaStyle: {},
      	emphasis: {
        focus: 'series'
      	},
      	data: [320, 332, 301, 334, 390, 330, 320]
    },
    {
      	name: 'Search Engine',
      	type: 'line',
      	stack: 'Total',
      	label: {
        show: true,
        position: 'top'
      	},
      	areaStyle:{ color:[ 'rgba (244,12,51,0.3) ' ] },
       	<!--areaStyle:{ },-->
      	emphasis: {
        focus: 'series'
      	},
      	data: [820, 932, 901, 934, 1290, 1330, 1320]
    }
  	]
};
// 使用刚指定的配置项和数据显示图表。
      	myChart.setOption(option);
		}
      	
    </script>
	</head>
	<body>
		<div id="main" style="width:600px;height:400px"></div>
		

      	
	<body>
</html>


<!DOCTYPE html>
<html>
	<head>
		
	<title>ECharts</title>
	<!--引入echarts.js -->
	<script src="echarts.js"></script>
	
	<script type="text/javascript">
		window.onload=function () {
			
			// 基于准备好的dom,初始化echarts实例
      	var myChart = echarts.init(document.getElementById('main'));

      	// 指定图表的配置项和数据
      	option = {
	      	//color:['#FF0000','#9900CC','#9999CC' ,'#669933', '#000FF00','#FFF23F','#660033'],

  title: {
    text: 'Referer of a Website',
    subtext: 'Fake Data',
    left: 'center'
  },
  tooltip: {
    trigger: 'item'
  },
  legend: {
    orient: 'vertical',
    left: 'left'
  },
  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: '50%',
      data: [
        { value: 1048, name: 'Search Engine' },
        { value: 735, name: 'Direct' },
        { value: 580, name: 'Email' },
        { value: 484, name: 'Union Ads' },
        { value: 300, name: 'Video Ads' }
      ],
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};
// 使用刚指定的配置项和数据显示图表。
      	myChart.setOption(option);
		}
      	
    </script>
	</head>
	<body>
		<div id="main" style="width:600px;height:400px"></div>
		

      	
	<body>
</html>


<!DOCTYPE html>
<html>
	<head>
		
	<title>ECharts</title>
	<!--引入echarts.js -->
  <script type="text/javascript" src="echarts.min.js"></script>
	
	<script type="text/javascript">
		window.onload=function () {
			
			// 基于准备好的dom,初始化echarts实例
      	var myChart = echarts.init(document.getElementById('main'));

      	// 指定图表的配置项和数据
      	option = {
    dataset: {
        source: [
            ['score', 'amount', 'product'],
            [89.3, 58212, 'Matcha Latte'],
            [57.1, 78254, 'Milk Tea'],
            [74.4, 41032, 'Cheese Cocoa'],
            [50.1, 12755, 'Cheese Brownie'],
            [89.7, 20145, 'Matcha Cocoa'],
            [68.1, 79146, 'Tea'],
            [19.6, 91852, 'Orange Juice'],
            [10.6, 101852, 'Lemon Juice'],
            [32.7, 20112, 'Walnut Brownie']
        ]
    },
    grid: {containLabel: true},
    xAxis: {name: 'amount'},
    yAxis: {type: 'category'},
    visualMap: {
	    
	    orient: 'horizontal',
	    left: 'right',
        min: 0,
        max: 350,
        dimension: 0,
        splitNumber:5,
        inRange: {
            color: ['#D7DA8B', '#E15457']
        }
    },
    //visualMap: {
    //    orient: 'horizontal',
    //    left: 'center',
    //    min: 10,
    //    max: 100,
    //    text: ['High Score', 'Low Score'],
    //    // Map the score column to color
    //    dimension: 0,
    //    inRange: {
    //        color: ['#D7DA8B', '#E15457']
    //    }
    //},
    series: [
        {
            type: 'bar',
            encode: {
                // Map the "amount" column to X axis.
                x: 'amount',
                // Map the "product" column to Y axis
                y: 'product'
            }
        }
    ]
};
// 使用刚指定的配置项和数据显示图表。
      	myChart.setOption(option);
		}
      	
    </script>
	</head>
	<body>
		<div id="main" style="width:600px;height:400px"></div>
		

      	
	<body>
</html>


<!DOCTYPE html>
<html>
	<head>
		
	<title>ECharts</title>
	<!--引入echarts.js -->
  	<script type="text/javascript" src="echarts.min.js"></script>
  	<script type="text/javascript" src="jquery.js"></script>
	
	<script type="text/javascript">
		window.onload=function(){

			//定时器
			window.setInterval(function() {
					$.get("http://localhost:8080/FluxBiServer/Demo01",function(datax){
				var myChart = echarts.init(document.getElementById('main'));

      	// 指定图表的配置项和数据
      	var option = {
        
        
        legend: {
          	data: ['成本']
        },
        xAxis: {
	        type:'category',
          	data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat','Sun']
        },
        yAxis: {
			tpye:'value'
	        },
        series: [
          	{
            name: '成本',
            type: 'bar',
            data: eval(datax),
          	}
        ]
      	};

      	// 使用刚指定的配置项和数据显示图表。
      	myChart.setOption(option);
			})
				}, 2000);
			
		}
      	
    </script>
	</head>
	<body>
		<div id="main" style="width:600px;height:400px"></div>
		

      	
	<body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值