Ⅰ 實現Echarts中數據的動態獲取
1.客戶端通過ajax發送請求
先繪制一個最簡單的Echarts圖表:
(這里就直接貼上代碼了,直接用的是官網教程里非同步數據載入和更新里的代碼)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ECharts</title>
<!-- 引入 echarts.js -->
<script type="text/javascript" src="echarts.min.js"></script>
<!-- 引入jquery.js -->
<script type="text/javascript" src="jquery-1.12.3.js"></script>
</head>
<body>
<!-- 為ECharts准備一個具備大小(寬高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
// 顯示標題,圖例和空的坐標軸
myChart.setOption({
title: {
text: '非同步數據載入示例'
},
tooltip: {},
legend: {
data:['銷量']
},
xAxis: {
data: []
},
yAxis: {},
series: [{
name: '銷量',
type: 'bar',
data: []
}]
});
</script>
</body>
</html>
看到了吧,現在option中的xAxis和yAxis里的data都是空值。待會兒我們會用從伺服器取回的數據去」填滿「它。
下面貼上補充了ajax部分的完整前端代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ECharts</title>
<!-- 引入 echarts.js -->
<script type="text/javascript" src="echarts.min.js"></script>
<!-- 引入jquery.js -->
<script type="text/javascript" src="jquery-1.12.3.js"></script>
</head>
<body>
<!-- 為ECharts准備一個具備大小(寬高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
// 顯示標題,圖例和空的坐標軸
myChart.setOption({
title: {
text: '非同步數據載入示例'
},
tooltip: {},
legend: {
data:['銷量']
},
xAxis: {
data: []
},
yAxis: {},
series: [{
name: '銷量',
type: 'bar',
data: []
}]
});
myChart.showLoading(); //數據載入完之前先顯示一段簡單的loading動畫
var names=[]; //類別數組(實際用來盛放X軸坐標值)
var nums=[]; //銷量數組(實際用來盛放Y坐標值)
$.ajax({
type : "post",
async : true, //非同步請求(同步請求將會鎖住瀏覽器,用戶其他操作必須等待請求完成才可以執行)
url : "TestServlet", //請求發送到TestServlet處
data : {},
dataType : "json", //返回數據形式為json
success : function(result) {
//請求成功時執行該函數內容,result即為伺服器返回的json對象
if (result) {
for(var i=0;i<result.length;i++){
names.push(result[i].name); //挨個取出類別並填入類別數組
}
for(var i=0;i<result.length;i++){
nums.push(result[i].num); //挨個取出銷量並填入銷量數組
}
myChart.hideLoading(); //隱藏載入動畫
myChart.setOption({ //載入數據圖表
xAxis: {
data: names
},
series: [{
// 根據名字對應到相應的系列
name: '銷量',
data: nums
}]
});
}
},
error : function(errorMsg) {
//請求失敗時執行該函數
alert("圖表請求數據失敗!");
myChart.hideLoading();
}
})
</script>
</body>
</html>
2.伺服器端Servlet接收請求
客戶端的請求url是』TestServlet『,那我們得先在web.xml配置以下映射:
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>test.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
然後就來著手寫處理客戶端請求的TestServlet啦!
3.生成json數據並返回給客戶端
生成Json數據要用到額外的jar包,這里我使用的jackson,json-lib 2010年就沒有再更新了… (2016-5-3日更:發現Google出品的Gson也蠻好用的,重點是很小巧,只需引入一個jar就搞定,用法也很簡單)
簡單介紹一下jackson的用法:
①:先去http://mvnrepository.com/下載 jackson-core.jar,jackson-annotations.jar,jackson-databind.jar(都是2.x版本,jackson官網不知為何不提供服務了…這三個jar讓我一陣好找)
②:在項目的項目WEB-INF/lib下引入這三個jar
然後就可以在TestServlet里使用jackson提供的工具類了。(關於jackson的詳細用法,這里貼一下官網教程:http://wiki.fasterxml.com/JacksonInFiveMinutes)
TestServlet代碼如下:
package test;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Proct> list = new ArrayList<Proct>();
//這里把「類別名稱」和「銷量」作為兩個屬性封裝在一個Proct類里,每個Proct類的對象都可以看作是一個類別(X軸坐標值)與銷量(Y軸坐標值)的集合
list.add(new Proct("襯衣", 10));
list.add(new Proct("短袖", 20));
list.add(new Proct("大衣", 30));
ObjectMapper mapper = new ObjectMapper(); //提供java-json相互轉換功能的類
String json = mapper.writeValueAsString(list); //將list中的對象轉換為Json格式的數組
//System.out.println(json);
//將json數據返回給客戶端
response.setContentType("text/html; charset=utf-8");
response.getWriter().write(json);
}
TestServlet類中用到的自定義的Proct類代碼如下:
package test;
public class Proct {
private String name; //類別名稱
private int num; //銷量
public Proct(String name, int num) {
this.name = name;
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
4.客戶端接收數據後顯示
客戶端接受伺服器數據並解析後,就可以正常顯示圖表數據了:
Ⅱ 有哪些好用的Python庫
Python作為一門膠水語言,第三方庫眾多,下面我簡單介紹幾個好用的Python庫:
tensorflow
這是谷歌非常著名的一個開源機器學習框架,在業界非常受歡迎,可以靈活、快速的構建大規模機器學習應用(如神經網路等),性能和可移植性都非常不錯,支持GPU並行計算,如果你對機器學習比較感興趣,也想深入了解一下的話,可以學習一下這個框架,非常不錯:
pandas
如果你對數據分析比較感興趣,那麼pandas就是一個非常不錯的選擇,專門為數據分析而建,內置的函數和方法可以快速處理Excel,CSV等文件,而且提供了實時分析功能,代碼量更少,使用起來也更方便,對於數據處理來說,是一個非常不錯的分析工具:
matplotlib
這是Python的一個數據可視化庫,可以快速製作我們常見的圖表,如柱狀圖、餅狀圖、散點圖等,當然,也不僅僅限於這些,還有很多,如果你想畫出更多美麗的圖表,可以考慮學習一下這個庫,非常值得學習,當然,seaborn,pyecharts等這些可視化庫也非常不錯:
tushare
如果你對金融財經比較感興趣,想快速獲取股票等行情數據,也不想編寫復雜的處理代碼,那麼tushare就是一個非常不錯的選擇,自動整合了國內大部分金融財經數據,完成了數據從採集、清洗和存儲的全過程,只需簡單的幾行代碼就可以實時快速獲取到你所想要的數據,免費且開源:
PyQt
這是Python的一個GUI開發庫,如果你想快速創建一個桌面GUI程序,想直接拖拽控制項布局界面的話,那麼PyQt就是一個非常不錯的選擇,基於Qt的QtDesigner設計工具,你可以直接拖拽Qt大量的控制項快速構建出你自己的桌面應用,簡單而又快捷:
Kivy
如果你想利用Python開發一個安卓應用,那麼kivy就是一個非常不錯的選擇,這是Python的一個開源、跨平台的GUI庫,只需要編寫一套代碼,即可運行在大部分桌面及移動平台上,包括winsows,linux,ios,android等,非常不錯:
scrapy
這是Python的一個爬蟲框架,在也就非常受歡迎,如果你想快速的定製自己的爬蟲程序,又不想重復的造輪子的話,可以學習一下這個庫,只需要添加少量的代碼,就可啟動屬於自己的一個爬蟲應用,非常方便:
django
這是一個流行的PythonWeb框架,如果你想快速構建一個自己的web應用,那麼這個框架就非常值得學習,成熟穩重,基於MVC模式,使用起來非常方便,當然,也有輕量級的web框架,如flask,tornado等,也都非常不錯:
pygame
如果你想快速開發一個小型游戲,又不想低級語言的束縛,可以考慮學習一下這個庫,非常簡單,只需要少量的代碼便可構建一個游戲應用,當然,它也是一個非常不錯的GUI庫,對於桌面開發來說,也是一個不錯的選擇:
you-get
這是Python的一個視頻、音頻下載庫,如果你想免費快速下載優派卜酷、B站、騰訊等網站的視頻,安裝這個庫後,只塵豎穗需要簡單的一行命令就可直接下載,非常方便,纖嘩而且還可以在線觀看,查看視頻文件格式及清晰度等,當然,圖片也可直接下載:
就介紹這10個不錯的Python庫吧,對於日常學習開發來說,非常不錯,當然,還有許多其他好用的Python庫,這個可以到網上搜索一下,非常多,也歡迎大家留言補充。
Ⅲ 值得推薦的數據可視化工具有哪些
推薦幾款我比較常用的可視化工具
Excel
通常認為Excel不是可視化工具,不過也確實能作出一些很漂亮的圖表,主要問題在於默認的圖表設計都太丑了太丑了。如果你想做得好一點,可能要花的時間比較多。不支持一鍵拖拽生成圖表,在細節的處理上需要花更多的時間。
實際上還有很多其他的像echart,D3.js,highcharts等等,工具的選擇上是非常多的,我個人的建議是在精專一個的同時多了解一下其他的工具。「你手裡拿著錘子,看什麼都是釘子」,不要被你自己所掌握的工具所限制,我們的出發點始終是問題解決的。我們應當做的是「你眼裡看著釘子,拿什麼都是錘子」。(文/艾萌atanqing,一個略懂數據分析的心理咨詢師)