以圖表形式分析和統計數據

前些天咱們一直致力於爬蟲技術的研究,並取得了一些小的成果,成功爬取了網易雲音樂,時光電影網,豆瓣讀書,智聯招聘等網站的數據,數據也已經導出到Excel,有須要的同窗們能夠到這個地址下載:http://git.oschina.net/AuSiang/myBug/attach_files 。那麼,咱們拿到了這些數據確定是爲咱們所用,有的同窗多是抱着好玩的心態去爬取一些數據下來,誠然,爬的時候很興奮,爬下來的之後這些數據對咱們來說用途仍是很是大的,特別是作市場調研或者數據分析的時候每每數據可以更直觀更準確的指引咱們的方向。固然,咱們如今爬下來的數據還很亂,混雜在一塊兒,那麼,這就須要咱們在對這些數據進行整理和統計,也就是今天咱們要實現的功能:以圖標形式分析和統計數據。javascript

1、html

咱們選取豆瓣圖書的數據,統計一下評分在9分以上,8分-9分,7分-8分,7分如下和無評分的圖書數量。咱們先在oracle中新建一張表,對應Excel的各列,而後導入Excel的數據進來,以下圖:java

 

 而後咱們直接寫SQL語句進行分類統計拿到結果數據。jquery

 

 

咱們如今已經拿到了數據,下面開始實現圖表展示。git

2、api

一、咱們先用JfreeChart展現一下3D餅狀圖,關於JfreeChart的使用就再也不贅述了,學習資料已上傳至http://git.oschina.net/AuSiang/myBug/attach_files ,咱們直接看代碼:oracle

/**
 * 
 */
package com.ax.chart;

import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;

/**
 * @description:對爬取的豆瓣圖書的評分生成餅狀圖
 * @author AoXiang
 * @date 2017年3月23日
 * @version 1.0
 */
public class pieChart {
    
    /**
     * 設置數據集
     * 2017年3月23日
     */
    private static DefaultPieDataset getDataSet(){
        DefaultPieDataset dfp = new DefaultPieDataset();
        dfp.setValue("9分以上",129);
        dfp.setValue("8分-9分",674);
        dfp.setValue("7分-8分",162);
        dfp.setValue("7分如下",3);
        dfp.setValue("無評分",10);
        return dfp;
    }
    
    /**
     * 生成餅狀圖
     * 2017年3月23日
     */
    public static void makePieChart3D(){
        // 標題
        String title ="豆瓣圖書(小說篇)評分統計和分析";
        // 得到數據集
        DefaultPieDataset dataset = getDataSet();
        // 利用chart工廠建立一個Jfreechart實例
        JFreeChart chart = ChartFactory.createPieChart3D(
                title,         // 圖表標題
                dataset,    // 圖標數據集
                true,        // 是否顯示圖例
                false,        //是否生成工具(提示)
                false);        //是否生成url連接
        // 設置pieChart的標題與字體
        Font font = new Font("宋體",Font.BOLD,25);
        TextTitle textTitle = new TextTitle(title);
        textTitle.setFont(font);
        chart.setTitle(textTitle);
        chart.setAntiAlias(false); // 是否啓用反鋸齒功能
        // 設置背景色
        chart.setBackgroundPaint(new Color(255,255,255));
        // 設置圖例字體
        LegendTitle  legend = chart.getLegend(0);
        legend.setItemFont(new Font("宋體",1,15));
        // 設置標籤字體
        PiePlot plot = (PiePlot) chart.getPlot(); 
        plot.setLabelFont(new Font("宋體", Font.TRUETYPE_FONT, 12));
        // 指定圖片的透明度(0.0-1.0)
        plot.setForegroundAlpha(0.95f); 
        // 圖片中顯示百分比:自定義方式,{0} 表示選項, {1} 表示數值, {2} 表示所佔比例 ,小數點後兩位
        plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                "{0}={1}({2})", NumberFormat.getNumberInstance(),
                new DecimalFormat("0.00%"))); 
        // 圖例顯示百分比:自定義方式, {0} 表示選項, {1} 表示數值, {2} 表示所佔比例
        plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
        // 設置第一個餅塊截面開始的位置,默認是12點鐘方向
        plot.setStartAngle(90);
        
        ChartFrame frame = new ChartFrame(title, chart,true);
        frame.pack();
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        makePieChart3D();
    }
    
}

 

運行一下,看下效果:工具

 

接下來咱們再來實現一下用柱狀圖的方式展示數據:學習

/**
 * 
 */
package com.ax.chart;

import java.awt.Color;
import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;

/**
 * @description:對爬取的豆瓣圖書的評分生成柱狀圖
 * @author AoXiang
 * @date 2017年3月23日
 * @version 1.0
 */
public class barChart {
    private static CategoryDataset getDataset() {
        double[][] data = new double[][] { { 129, 674, 162, 3, 10 }};
        String[] rowKeys = {"數量"}; 
        String[] columnKeys = { "9分以上", "8分-9分", "7分-8分", "7分如下", "無評分" };
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                rowKeys,columnKeys, data);
        return dataset;
    }
    /**
     * 生成柱狀圖。
     */
    public static void makeBarChart3D() {
        String title = "豆瓣圖書(小說篇)評分統計和分析";
        // 得到數據集
        CategoryDataset dataset = getDataset();
        JFreeChart chart = ChartFactory.createBarChart3D(
            title, // 圖表標題
            "評分",                      // 目錄軸的顯示標籤
            "數量",                      // 數值軸的顯示標籤
            dataset,                     // 數據集
            PlotOrientation.VERTICAL,    // 圖表方向:水平、垂直
            true,                        // 是否顯示圖例
            true,                        // 是否生成工具(提示)
            true                         // 是否生成URL連接
        );
        // 設置標題字體
        Font font = new Font("宋體", Font.BOLD, 18);
        TextTitle textTitle = new TextTitle(title);
        textTitle.setFont(font);
        chart.setTitle(textTitle);
        chart.setTextAntiAlias(false);
        // 設置背景色
        chart.setBackgroundPaint(new Color(255, 255, 255));
        // 設置圖例字體
        LegendTitle legend = chart.getLegend(0);
        legend.setItemFont(new Font("宋體", Font.TRUETYPE_FONT, 14));
        // 得到柱狀圖的Plot對象
        CategoryPlot plot = chart.getCategoryPlot();
        // 取得橫軸
        CategoryAxis categoryAxis = plot.getDomainAxis();
        // 設置橫軸顯示標籤的字體
        categoryAxis.setLabelFont(new Font("宋體", Font.BOLD, 16));
        // 設置橫軸標記的字體
        categoryAxis.setTickLabelFont(new Font("宋休", Font.TRUETYPE_FONT, 16));
        // 取得縱軸
        NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
        // 設置縱軸顯示標籤的字體
        numberAxis.setLabelFont(new Font("宋體", Font.BOLD, 16));
        
        ChartFrame frame = new ChartFrame(title, chart, true);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // 3D柱狀圖
        makeBarChart3D();
    } 
}

 

 

運行效果以下圖:字體

 

接下來咱們在使用Google Chart 的Jquery插件的形式展示一下數據:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>豆瓣圖書(小說篇)評分統計和分析</title>

<script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script type="text/javascript" src="js/jsapi.js"></script>
<script type="text/javascript" src="js/corechart.js"></script>        
<script type="text/javascript" src="js/jquery.gvChart-1.0.1.min.js"></script>
<script type="text/javascript" src="js/jquery.ba-resize.min.js"></script>

<script type="text/javascript">
gvChartInit();
$(document).ready(function(){
    $('#myTable5').gvChart({
        chartType: 'PieChart',
        gvSettings: {
            vAxis: {title: 'No of players'},
            hAxis: {title: 'Month'},
            width: 1200,
            height: 600
        }
    });
});
</script>

<script type="text/javascript">
gvChartInit();
$(document).ready(function(){
        $('#myTable1').gvChart({
            chartType: 'PieChart',
            gvSettings: {
            vAxis: {title: 'No of players'},
            hAxis: {title: 'Month'},
            width: 1000,
            height: 500
        }
    });
});
</script>

</head>


<body>

    <div style="width:1000px;margin:0 auto;">

       <table id='myTable5'>
            <caption>豆瓣圖書(小說篇)評分統計和分析</caption>
            <thead>
                <tr>
                    <th></th>
                    <th>9分以上</th>
                    <th>8分-9分</th>
                    <th>7分-8分</th>
                    <th>7分如下</th>
                    <th>無評分</th>
                    
                </tr>
            </thead>
            <tbody>
                <tr>
                    <th>1200</th>
                    <td>129</td>
                    <td>674</td>
                    <td>162</td>
                    <td>3</td>
                    <td>10</td>
                </tr>
            </tbody>
        </table>  
    
    </div>    


</body>
</html>

 

運行結果以下圖所示:

是否是感受比以前的要美觀一些呢。

好了,今天就到這裏了,主要是使用JfreeChart以及Jquery插件的形式對咱們爬蟲爬取的數據進行統計和分析,從而更直觀的解讀數據給咱們傳遞的信息。

源碼就不上傳了,有興趣的同窗能夠參考一下上傳的資料。

若是您對代碼有什麼異議歡迎您的留言,咱們一塊兒交流!

相關文章
相關標籤/搜索