信件分析实战——数据可视化

Posted huan-ch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信件分析实战——数据可视化相关的知识,希望对你有一定的参考价值。

  昨天我将一个数据的可视化完成,以及数据清洗出来了,今天完成了数据的简单可视化,之后将进行对echarts图表的操作,(图表联动,美化图表)等操作。

  今天成果展示:

饼图:

技术图片

 

 

柱状图:

技术图片

 

 这两个的代码基本和之前的一样,是在原来的基础上更新的。

源代码:

技术图片
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>北京百姓信件分析</title>
    <link rel="stylesheet" href="./layui/css/layui.css">
    <script src="./layui/layui.js"></script>
</head>
<body>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
  <div class="layui-header">
    <div class="layui-logo">北京百姓信件分析</div>
  </div>
  
  <div class="layui-side layui-bg-black">
    <div class="layui-side-scroll">
      <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
      <ul class="layui-nav layui-nav-tree"  lay-filter="test">
        <li class="layui-nav-item">
          <a class="" href="LetterServlet?method=year" target="center">每年数量</a>
          
        </li>
        <li class="layui-nav-item">
          <a href="LetterServlet?method=type" target="center">信件类型</a>
        </li>
        <li class="layui-nav-item"><a href="LetterServlet?method=org" target="center">部门信件</a></li>
      </ul>
    </div>
  </div>
  
  <div class="layui-body">
    <!-- 内容主体区域 -->
    <div style="padding: 15px;">
    <iframe name="center" id="center" style="width:100%;height:490px;border:0;padding:0;"></iframe>
    </div>
  </div>
  
  <div class="layui-footer">
    <!-- 底部固定区域 -->
    ©陈欢
  </div>
</div>

<script>
//javascript代码区域
layui.use(‘element‘, function(){
  var element = layui.element;
  
});
</script>
</body>
</body>
</html>
index.jsp
技术图片
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% String path=request.getContextPath(); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>信件类型</title>
    <script type="text/javascript" src="<%=path %>/js/echarts.min.js"></script>
</head>
<body>
<%
    String item=(String)request.getAttribute("item");
    String data=(String)request.getAttribute("data");
%> 
<div id="container" style="height: 490px;"></div>
<script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};
option = null;
var item=<%=item%>
var data=<%=data%>
option = {
    title: {
        text: ‘北京百姓信件类型‘,
        subtext: ‘By@陈欢‘,
        left: ‘center‘
    },
    tooltip: {
        trigger: ‘item‘,
        formatter: ‘{a} <br/>{b} : {c} ({d}%)‘
    },
    legend: {
        orient: ‘vertical‘,
        left: ‘left‘,
        //data: [‘直接访问‘, ‘邮件营销‘, ‘联盟广告‘, ‘视频广告‘, ‘搜索引擎‘]
        data: item
    },
    series: [
        {
            name: ‘信件类型‘,
            type: ‘pie‘,
            radius: ‘55%‘,
            center: [‘50%‘, ‘60%‘],
            /* data: [
                {value: 335, name: ‘直接访问‘},
                {value: 310, name: ‘邮件营销‘},
                {value: 234, name: ‘联盟广告‘},
                {value: 135, name: ‘视频广告‘},
                {value: 1548, name: ‘搜索引擎‘}
            ], */
            data: data,
            emphasis: {
                itemStyle: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: ‘rgba(0, 0, 0, 0.5)‘
                }
            }
        }
    ]
};
;
if (option && typeof option === "object") {
    myChart.setOption(option, true);
}
       </script>
</body>
</html>
ByType.jsp
技术图片
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% String path=request.getContextPath(); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>回答部门</title>
    <script type="text/javascript" src="<%=path %>/js/echarts.min.js"></script>
</head>
<body>
<%
    String xZhou=(String)request.getAttribute("xZhou");
    String values=(String)request.getAttribute("values");
%> 
<div id="container" style="height: 490px;"></div>
<script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};
option = null;
var xZhou=<%=xZhou%>
var values=<%=values%>
option = {
    xAxis: {
        type: ‘category‘,
        data: xZhou
        //data: [‘Mon‘, ‘Tue‘, ‘Wed‘, ‘Thu‘, ‘Fri‘, ‘Sat‘, ‘Sun‘]
    },
    yAxis: {
        type: ‘value‘
    },
    series: [{
        //data: [120, 200, 150, 80, 70, 110, 130],
        data : values,
        type: ‘bar‘
    }]
};
;
if (option && typeof option === "object") {
    myChart.setOption(option, true);
}
       </script>
</body>
</html>
ByOrg.jsp
技术图片
package com.servlet;

import java.io.IOException;
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 com.dao.LetterDAO;

/**
 * Servlet implementation class LetterServlet
 */
@WebServlet("/LetterServlet")
public class LetterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    LetterDAO dao=new LetterDAO();
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LetterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
     */
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String method=request.getParameter("method");
        if(method.equals("year")) {
            NumByYear(request,response);
        }else if(method.equals("type")) {
            NumByType(request,response);
        }else if(method.equals("org")) {
            NumByOrg(request,response);
        }
    }

    private void NumByOrg(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String [] data=new String [2];
        data=dao.getOrg();
        request.setAttribute("xZhou", data[0]);
        request.setAttribute("values", data[1]);
        System.out.println(data[0]);
        System.out.println(data[1]);
        request.getRequestDispatcher("ByOrg.jsp").forward(request, response);
        
        
    }

    private void NumByType(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String [] data=new String [2];
        data=dao.getType();
        request.setAttribute("item", data[0]);
        request.setAttribute("data", data[1]);
        System.out.println(data[0]);
        System.out.println(data[1]);
        request.getRequestDispatcher("ByType.jsp").forward(request, response);
        
    }

    private void NumByYear(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String [] data =new String [2];
        data=dao.getYear();
        request.setAttribute("year", data[0]);
        request.setAttribute("num", data[1]);
        System.out.println(data[0]);
        System.out.println(data[1]);
        request.getRequestDispatcher("ByYear.jsp").forward(request, response);
        
    }

}
LetterServlet.java
技术图片
package com.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.DBUtil.DBUtil;
import com.bean.LetterBean;

public class LetterDAO {

    public String[] getYear() {
        String[] num =new String [2];
        List<LetterBean> data =new ArrayList<LetterBean>();
        data=GetNumByYear();
        num[0]="[";
        num[1]="[";
        for(int i=0;i<data.size();i++) {
            num[0]+="‘"+data.get(i).getCols()+"‘";
            num[1]+="‘"+data.get(i).getValue()+"‘";
            if(i<data.size()-1) {
                num[0]+=",";
                num[1]+=",";
            }else {
                num[0]+="]";
                num[1]+="]";
            }
        }
        
        return num;
    }

    private List<LetterBean> GetNumByYear() {
        String sql="select * from num_by_year";
        List<LetterBean> data =new ArrayList<LetterBean>();
        Connection conn = DBUtil.getConn();
        Statement state = null;
        ResultSet rs = null;
        LetterBean bean=null;
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while (rs.next()) {
                    String cols=rs.getString("dt");
                    String value=rs.getString("num");
                    bean=new LetterBean(cols,value);
                    data.add(bean);
                }
            }catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(rs, state, conn);
            }
        return data;
    }

    public String[] getType() {
        String [] data=new String [2];
        List<LetterBean> list=new ArrayList<LetterBean>();
        list=GetNumByType();
        data[0]="[";
        data[1]="[";
        for(int i=0;i<list.size();i++) {
            data[0]+="‘"+list.get(i).getCols()+"‘";
            data[1]+="{value:"+list.get(i).getValue()+",name:‘"+list.get(i).getCols()+"‘}";
            if(i<list.size()-1) {
                data[0]+=",";
                data[1]+=",";
            }else {
                data[0]+="]";
                data[1]+="]";
            }
        }
        return data;
    }

    private List<LetterBean> GetNumByType() {
        String sql="select * from num_by_type";
        List<LetterBean> data =new ArrayList<LetterBean>();
        Connection conn = DBUtil.getConn();
        Statement state = null;
        ResultSet rs = null;
        LetterBean bean=null;
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while (rs.next()) {
                    String cols=rs.getString("letter_type");
                    String value=rs.getString("num");
                    bean=new LetterBean(cols,value);
                    data.add(bean);
                }
            }catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(rs, state, conn);
            }
        return data;
    }

    public String[] getOrg() {
        String [] data=new String [2];
        List<LetterBean> list=new ArrayList<LetterBean>();
        list=GetNumByOrg();
        data[0]="[";
        data[1]="[";
        for(int i=0;i<list.size();i++) {
            data[0]+="‘"+list.get(i).getCols()+"‘";
            data[1]+="‘"+list.get(i).getValue()+"‘";
            if(i<list.size()-1) {
                data[0]+=",";
                data[1]+=",";
            }else {
                data[0]+="]";
                data[1]+="]";
            }
        }
        return data;
    }

    private List<LetterBean> GetNumByOrg() {
        String sql="select * from num_by_org limit 10";
        List<LetterBean> data =new ArrayList<LetterBean>();
        Connection conn = DBUtil.getConn();
        Statement state = null;
        ResultSet rs = null;
        LetterBean bean=null;
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while (rs.next()) {
                    String cols=rs.getString("org_id");
                    String value=rs.getString("num");
                    bean=new LetterBean(cols,value);
                    data.add(bean);
                }
            }catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(rs, state, conn);
            }
        return data;
    }

}
LetterDAO.java

 

以上是关于信件分析实战——数据可视化的主要内容,如果未能解决你的问题,请参考以下文章

北京市民信件大数据简单分析可视化(附加源码) 同含爬虫代码

北京市政百姓信件分析实战(下)

Python数据分析理论与实战完整版本

Python数据分析理论与实战完整版本

Python数据分析理论与实战完整版本

Python数据分析理论与实战完整版本