D3大型可视化视图--US Trade Deficit Data Visualization--分析(data.js)
2017-06-20 14:23
274 查看
这个大型可视化视图的地址:
http://www.brightpointinc.com/united-states-trade-deficit/
US Trade Deficit Data Visualization 可视化视图共有六个js文件,分别为data.js,event.js,_buildChords.js,globals.js,initialize.js和update.js。
我在这里先进行index.html和data.js的分析。
首页的
布局还是很清晰地,作者还在首页上写了一个函数 run() 并且调用了initialize() 和 fetchData() 函数。
run() 函数主要是做一个更新的功能,循环读取每一年每一个月份的数据,还是很清晰也很好理解的。在这里调用了一个update()的函数,以后会进行分析。
今天要进行详细分析的还有data.js,在这个js文件里,作者定义了fetchData()函数。这个函数主要功能就是进行文件的解析, 源文件提供的解析文件为csv,我因为需要加入了json的解析代码,两者很相似,在下面会介绍。
因为我的需要,写了几句读取json的代码:
虽然有一些区别,但是大致思路还是一样的。
接下来我会慢慢对所有的函数进行分析 O(∩_∩)O~。
http://www.brightpointinc.com/united-states-trade-deficit/
US Trade Deficit Data Visualization 可视化视图共有六个js文件,分别为data.js,event.js,_buildChords.js,globals.js,initialize.js和update.js。
我在这里先进行index.html和data.js的分析。
首页的
布局还是很清晰地,作者还在首页上写了一个函数 run() 并且调用了initialize() 和 fetchData() 函数。
function run() { if (month < 11)month++; else { month=0; if (year < countriesGrouped.length-1) year++; } if (month==maxMonth && year==maxYear) { month=0; year=0; } else { update(year,month); } }
run() 函数主要是做一个更新的功能,循环读取每一年每一个月份的数据,还是很清晰也很好理解的。在这里调用了一个update()的函数,以后会进行分析。
今天要进行详细分析的还有data.js,在这个js文件里,作者定义了fetchData()函数。这个函数主要功能就是进行文件的解析, 源文件提供的解析文件为csv,我因为需要加入了json的解析代码,两者很相似,在下面会介绍。
function fetchData() { //数据为美国普查局的数据 //DATA SOURCE:http://www.census.gov/foreign-trade/statistics/country/ d3.csv("data/ustrade_2000-2013.csv", function(csv) { //下面是很常见的数据格式化方法,可以把源数据输出成想要的格式 var normalized=[]; for (var i=0; i < csv.length; i++) { var row=csv[i]; //把一年十二个月的数据分离,单独存放在数组中 for (var y=1; y < 13; y++) { if (row.CTY_CODE < "1000") continue;//删除一些数据集 var newRow={}; newRow.Year=row.year; newRow.Country=row.CTYNAME; newRow.Month=(y < 10) ? "0" + String(y) : String(y); newRow.Imports=Number(row["I_" + String(y)]); newRow.Exports=Number(row["E_" + String(y)]); normalized.push(newRow); } } //将数组组织成层级结构,每一个key是一个层级,d3官网专门讲过nest的用法 countriesGrouped = d3.nest() .key(function(d) { return d.Year; }) .key(function(d) { return d.Month; }) .entries(normalized);//返回一个key-value数组 var totalImport=0; var totalExport=0; //进行一个求和操作,用来在视图中心显示,我认为这里不难理解 for (var y=0; y < countriesGrouped.length; y++) { var yearGroup=countriesGrouped[y]; for (var m=0; m < yearGroup.values.length; m++) { var monthGroup=yearGroup.values[m]; for (var c=0; c < monthGroup.values.length; c++) { var country=monthGroup.values[c]; totalImport=Number(totalImport)+ Number(country.Imports)*10000000; totalExport=Number(totalExport) + Number(country.Exports)*10000000; } monthlyExports.push(totalExport); monthlyImports.push(totalImport); } } //调用run,开始运行 run(); refreshIntervalId = setInterval(run, delay); }); }
因为我的需要,写了几句读取json的代码:
function fetchData(json) { d3.json(json, function(json) { var normalized=[]; for (var i=0; i < json.length; i++) { var row=json[i]; var newRow={}; newRow.Year=String(row.bizdate).substr(0, 4); newRow.Month=String(row.bizdate).substr(4, 6); newRow.Name=row.name; newRow.Sqty=row.sqty; newRow.Profits=row.profits; normalized.push(newRow); } }
虽然有一些区别,但是大致思路还是一样的。
接下来我会慢慢对所有的函数进行分析 O(∩_∩)O~。
相关文章推荐
- [JS][easyui]jQuery EasyUI Datagrid VirtualScrollView视图简单分析
- 数据可视化(data visualization)—— seaborn
- Cytoscape.js – 用于数据分析和可视化的交互图形库
- (vtk——The Visualization Toolkit)Visulizing Image & Volume Data(图像及三维体数据的可视化)
- Data Visualization Tools 数据可视化工具
- 可视化工具--D3--案例分析--Reingold Tilford Tree
- 可视化工具--D3--案例分析--Chord Diagram
- 可视化工具--D3--案例分析--Histogram Chart
- 可视化数据分析(一) 基于Javascript的D3实践学习
- D3 & Data Visualization in Ext JS
- [JS][easyui]jQuery EasyUI Datagrid VirtualScrollView视图简单分析
- 融合堆积图技术的时空数据可视化(Stacking-Based Visualization of Trajectory Attribute Data)
- 可视化工具--D3--案例分析--Scatterplot Matrix
- Web可视化盛宴:近2000个D3.js范例汇总(christopheviau.com)
- D3 JS 库 - 用来展示数据分析的结果
- Qt数据可视化:Qt Data Visualization 与 Qt Charts 简介
- 基于D3的NBA球员可视化分析——WHO IS THE MVP
- 可视化工具--D3--案例分析--Day/Hour Heatmap
- js数组 sort方法的分析
- 深入分析MFC文档视图结构(项目实践)