统计数据转换
本文开始介绍运用银河统计库函数进行统计数据存储、转换、处理和运算。将不同类型数据导入“数据窗口”或转换为数组、格式化字符变量,是进行统计数据分析的前提。
在网络技术环境中进行统计工作,必须按计算机技术广泛运用的数据格式和规范进行统计数据的存储、处理、交换和展示。在网络统计学中,统计数据一般采用格式化字符、数组(Array)和JSON数据格式。格式化字符便于数据存储和交换,JSON和数组便于数据处理和计算。特别是数组,具有操作简便、数据处理效率高的优点,统计运算基本是先将数量型数据转换为数组格式再进行计算。
在统计数据存储、处理、交换和展示过程中,需要数据在不同数据格式相互转换。
1、数据存储和转换工具窗口
代码窗口
代码运行效果
2、数据存储和转换函数和实例代码
(1)网络统计基础函数
函数:webTJ.show(id,txt/arr,k)
功能:以文本或数组方式显示字符串txt或数组arr
参数:id指定显示窗体(id="oShow");txt字符串/arr数组;k显示模式(k=1文本、k=2数组)
函数:webTJ1.display(txt/arr,k)
功能:以文本或矩阵方式显示字符串txt或数组arr
参数:txt字符串/arr数组;k显示模式(k=1文本、k=2矩阵)
函数:webTJ1.clear()
功能:清除“代码运行效果”窗体
函数:webTJ1.getData()
功能:获得“数据窗口”文本框中数据
函数:webTJ1.setData(txt)
功能:将字符数据txt赋值到“数据窗口”文本框中
(2)一维数组转换为格式化字符串
函数:webTJ.getStr(arr,",")
功能:将一维数组arr转换为以“,”分割的字符串
实例:
var oArr=[97,72,10,544,114,44,12]; //将一维数组赋值给变量oArr;
var oTxt=webTJ.getStr(oArr,","); //将一维数组转换为以“,”分割的字符串;
webTJ.show("oShow",oTxt,1); //以文本方式显示字符串oTxt;
webTJ.show("oShow",oTxt.substr(0,2),1); //显示字符串oTxt前2个子字符;
注:可用鼠标选择实例代码,然后复制、粘贴到“代码窗口”文本框中并运行代码(Ctrl+C复制、Ctrl+V粘贴)。下同
(3)二维数组转换为格式化字符串
函数:webTJ.getStrs(arrs,"|",":")
功能:将二维数组arrs转换“|”为行、“:”为列分割的字符串
实例:
var oArrs=[ //将二维数组赋值给变量oArrs;
[97,72,15,44,66],
[114,44,17,22],
[145,45,171,41],
[197,28,233,73],
[231,35,300,65]];
var oTxt=webTJ.getStrs(oArrs,"|",":"); //将数组转换“|”为行、“:”为列分割的字符串
webTJ.show("oShow",oTxt,1); //以文本方式显示字符串oTxt;
webTJ.show("oShow",oTxt.substr(0,5),1); //显示字符串oTxt前5个子字符;
(4)字符串转换为一维数组
函数:webTJ.getArr(txt,",")
功能:将字符串txt转换为一维数组
实例:
var oTxt="977,105,114,127,145,171,197,233"; //将以“,”分割的字符串赋值给变量oTxt
var oArr=webTJ.getArr(oTxt,","); //将字符串转换为一维数组并赋值给变量oArr
webTJ.show("oShow",oArr,1); //以文本方式显示数组变量oArr
webTJ.show("oShow",oArr[2],1); //以文本方式显示数组变量oArr第3个元素
(5)字符串转换为二维数组
函数:webTJ.getArrs(txt,"|",",")
功能:将字符串txt转换为二维数组
实例:
var oTxt="37,42,95|97,72,10|14,44,12|15,45,17"; //“|”为行、“,”为列分割的字符串;
var oArrs=webTJ.getArrs(oTxt,"|",","); //将字符串转换为二维数组
webTJ.show("oShow",oArrs,1); //以文本方式显示数组变量oArrs
webTJ.show("oShow",oArrs[3][2],1); //以文本方式显示数组变量oArrs第4行3列的元素
(6)二维数组转换为一维数组
函数:webTJ.getArrfromArrs(arrs)
功能:将二维数组arrs转换为一维数组
实例:
var oArrs=[[1,20],[1,2],[3,4],[5,6]]; //将二维数组赋值给变量oArrs
var oArr=webTJ.getArrfromArrs(oArrs); //将二维数组转换为一维数组并赋值给变量oArr
webTJ.show("oShow",oArr,1); //以文本方式显示数组变量oArr
webTJ.show("oShow",oArr[6],1); //以文本方式显示数组变量oArr第7个元素
(7)获得数组行数
函数:webTJ.getRows(arr/arrs)
功能:获得一维或二维数组arr/arrs行数
实例:
var oArr1=[97,10,11,12,14,17,19,23]; //将一维数组赋值给变量oArr1
var oRow1=webTJ.getRows(oArr1); //获得一维数组行数(维数)
var oArr2=[ //将二维数组赋值给变量oArr2
[97,72,66],[10,54,43],[11,44,24],
[12,72,12],[16,34,13],[21,35,21],
[14,54,57],[17,14,11],[19,72,82]];
var oRow2=webTJ.getRows(oArr2); //获得二维数组行数(维数)
webTJ.show("oShow",oRow1,1); //以文本方式显示数组行数
webTJ.show("oShow",oRow2,1);
(8)获得数组列数
函数:webTJ.getCols(arr/arrs,r)
功能:获得一维或二维数组arr/arrs行数
参数:r可选,二维数组时确定指定行列数
实例:
var oArr1=[97,10,11,12,14,17,19,23];
var oCol1=webTJ.getCols(oArr1); //获得一维数组列数(元素个数)
var oArr2=[
[97,72,66],
[10,54,43],
[11,44,24,45,67],
[12,72,12],
[14,54,57],
[17,14,11],
[19,72,82]];
var oCol2=webTJ.getCols(oArr2,1); //获得二维数组第2行列数
var oCol3=webTJ.getCols(oArr2,2); //获得二维数组第3行列数
webTJ.show("oShow",oCol1,1); //显示一维数组列数(元素个数)
webTJ.show("oShow",oCol2,1); //显示二维数组第2行列数
webTJ.show("oShow",oCol3,1); //显示二维数组第3行列数
(9)将JSON字符串转换为对象
函数:webTJ.getObjfromJSONStr(JSONStr)
功能:将JSON字符串JSONStr转换为对象,以便于数据处理
实例:
var oJSONStr="[{name:'lei',weight:80,age:54},{name:'lijun',weight:70,age:50}]";
//将JSON字符串赋值给变量oJSONStr
var oJSONObj=webTJ.getObjfromJSONStr(oJSONStr);
//将JSON字符串转换为对象并赋值给对象变量oJSONObj
webTJ.show("oShow",oJSONObj[0].name,1);
//显示JSON对象第1个元素name属性的属性值
webTJ.show("oShow",oJSONObj[1].name,1);
//显示JSON对象第2个元素name属性的属性值
(10)将JSON对象转换为JSON字符串
函数:webTJ.getStrfromJSONObj(oJSONObj)
功能:将JSON对象oJSONObj转换为字符串,以便于数据存储
实例:
var oJSONObj=[{name:'lei',weight:80,age:54},{name:'lijun',weight:70,age:50}];
//将JSON对象并赋值给对象变量oJSONObj
var oJSONStr=webTJ.getStrfromJSONObj(oJSONObj);
//将JSON对象转换为字符串并赋值给变量oJSONStr
webTJ.show("oShow",oJSONStr,1); //显示JSON字符串
webTJ.show("oShow",oJSONStr.substr(0,5),1);
//显示JSON字符串前5个字符
(11)从粘贴板获得复制的EXCEL数据(IE浏览器)
函数:webTJ.getClipboardData()
功能:从粘贴板获得复制的EXCEL数据并转换为数组,以便于数据处理
实例:
var oArr=webTJ.getClipboardData();
//从粘贴板获得复制的EXCEL数据表并转换为数组;
webTJ.show("oShow",oArr,1);
//以文本方式显示数组变量oArr
webTJ.show("oShow",oArr[0],1);
//以文本方式显示数组变量oArr第1行数据
webTJ.show("oShow",oArr[0][0],1);
//以文本方式显示数组变量oArr第1行1列元素
注:网络统计学推荐使用Google的Chrome浏览器,但此功能只能用IE浏览器实现
操作步骤:
I、 用IE浏览器打开网络数据转换页面(http://www.cnblogs.com/cloudtj/p/6120992.html)
II、 将实例代码复制、粘贴到代码窗口
III、打开EXCEL文件,复制某一区域数据
IV、 在网页中运行代码并观察结果
(12)将数组转换为EXCEL表格并复制到粘贴板(IE浏览器)
函数:webTJ.setClipboardData(arrs)
功能:将数组arrs转换为EXCEL表格形式数据复制到粘贴板,以便于EXCEL存储数据
实例:
var oArr=[[1,20],[1,2],[3,4],[5,6]];
//将二维数组赋值给变量oArr
webTJ.setClipboardData(oArr);
//将二维数组转换为EXCEL表格形式数据复制到粘贴板
注:网络统计学推荐使用Google的Chrome浏览器,但此功能只能用IE浏览器实现
操作步骤:
I、 用IE浏览器打开网络数据转换页面(http://www.cnblogs.com/cloudtj/p/6120992.html)
II、 将实例代码复制、粘贴到代码窗口
III、打开EXCEL文件
IV、 在网页中运行代码
V、 在EXCEL在选择某单元格并粘贴数据(Ctrl+V)
(13)将数据命名后保存在本地(localStorage)
函数:webTJ.setLocalData(name,str)
功能:将数据str按名称name保存在本地
实例:
var oStr = "本地数据";
var oName = "galaxystatistics_dataTest_myData1";
var oObj = webTJ.setLocalData(oName,oStr);
webTJ.show("oShow",oObj,1);
(14)根据命名获取保存在本地的数据(localStorage)
函数: webTJ.getLocalData(name)
功能:获得名称为name的本地数据
实例:
var oName = "galaxystatistics_dataTest_myData1";
var oStr = webTJ.getLocalData(oName);
webTJ.show("oShow",oStr,1);
(15)根据命名删除保存在本地的数据(localStorage)
函数: webTJ.removeLocalData(name)
功能:删除名称为name的本地数据
实例:
var oName = "galaxystatistics_dataTest_myData2";
var oObj = webTJ.removeLocalData(oName);
webTJ.show("oShow",oObj,1);
(16)将“数据窗口”打开的文件(如EXCEL文本格式文件*.csv)转换为数组
函数: webTJ.getArrsfromSeparator(str,mark,r)
功能:将“数据窗口”打开的格式文件转换为数组
参数:str“数据窗口”中导入的文本字符、mark数据列分割符号、导入数据起始行
实例:
webTJ.clear(); //清空显示窗口
var str=webTJ.getData();
//获取“数据窗口”文本并赋值给变量str
var oArrs=webTJ.getArrsfromSeparator(str,",);
// 数据列分割符号为","(可根据具体情况选择其它符号)
webTJ.display(oArrs,1); //按矩阵格式显示数组
注:详细使用方法参见后面练习实例
3、数据操作练习
(1)练习文件:
A. http://www.galaxystatistics.com/webTJX/mobile/blog/data/data.xlsx
B. http://www.galaxystatistics.com/webTJX/mobile/blog/data/Cars.xlsx
C. http://www.galaxystatistics.com/webTJX/mobile/blog/data/Cars.csv
D. http://www.galaxystatistics.com/webTJX/mobile/blog/data/data.txt
E. http://www.galaxystatistics.com/webTJX/mobile/blog/data/data1.txt
F. http://www.galaxystatistics.com/webTJX/mobile/blog/data/data3.txt
下载上面练习文件到本地计算机指定目录中。
(2)EXCEL文件导入练习
在日常统计工作中,EXCEL电子表格非常普及,并且EXCEL和数据库之间、和其它统计软件之间都可以相互交换数据。网络统计经常需要将EXCEL数据导入并转换为数组进行分析、运算。
I、EXCEL数据中没有中文
A. 将EXCEL文档(.xlsx或.xls,如Cars.xlsx)另存为以","分割的文本格式文件*.csv(如Cars.csv);
B. 在“数据窗口”点击“选择文件”按钮,打开Cars.csv文件
C. 复制、粘贴下面代码到“代码窗口”中,运行代码观察输出结果
webTJ.clear();
var str=webTJ.getData();
var oArrs=webTJ.getArrsfromSeparator(str,",");
webTJ.display(oArrs[1][1],0);
webTJ.display(oArrs,1);
II、EXCEL数据中没有中文
A. EXCEL文档(如data.xlsx)中有中文时,按上面的方法会出现乱码;
B. 打开EXCEL文档data.xlsx;
C. 复制、粘贴数据WINDOWS的“记事本”纯文本编辑器中,保存为UTF-8编码形式文本文件data.txt;
D. 在“数据窗口”点击“选择文件”按钮,打开data.txt文件
E. 复制、粘贴下面代码到“代码窗口”中,运行代码观察输出结果
webTJ.clear();
var str=webTJ.getData();
var oArrs=webTJ.getArrsfromSeparator(str," ");
webTJ.show("oShow",oArrs[1][2],1);
webTJ.show("oShow",oArrs,2);
注:webTJ.getArrsfromSeparator(str," ")命令中" "之间的空格要用data.txt文件数据列间的特殊常空格替换(复制、粘贴)
III、通过粘贴板和EXCEL交换数据
参见“从粘贴板获得复制的EXCEL数据(IE浏览器)”和“将数组转换为EXCEL表格并复制到粘贴板(IE浏览器)”。
(3)文本文件(*.txt)导入练习
A. 文本文件中有中文,需用“记事本”保存为UTF-8编码形式文本文件(如data3.txt);
B. 在“数据窗口”点击“选择文件”按钮,打开data3.txt文件;
C. 复制、粘贴下面代码到“代码窗口”中,运行代码观察输出结果。
webTJ.clear();
var str=webTJ.getData();
var oSrr=webTJ.getArr(str,"&");
var oTitle=oSrr[0]; //获得数据名称
webTJ.show("oShow",oTitle,1);
var oFieldNameArr=webTJ.getArr(oSrr[1],"|"); //获得数据列名称数组
webTJ.show("oShow",oFieldNameArr[1],1); //显示第2列名称
webTJ.show("oShow",oFieldNameArr,1); //显示所有名称
var oArrs=webTJ.getArrs(oSrr[2],"|",","); //获取具体数据(数值)数组
webTJ.display(oArrs,1); //按矩阵格式显示所有数值数据
(4)网页中表格数据导入练习
网页中经常用HTML的TABLE表格标签显示数据,例如,
100 | 200 | 300 |
400 | 500 | 600 |
可以通过EXCEL按前面介绍的方法导入网页表格数据到网络统计平台中。
A. 用鼠标选择表格数据区域,复制、粘贴(纯数据粘贴,不要表格线)数据到空白EXCEL文档中;
B. 按csv格式保存EXCEL文件(如test.csv);
C. 按全面介绍的方法导入数据。
本地localStorage数据按规定格式储存并命名,数据导入同上。
将统计数据、特别是数值(数量)型数据自动批量导入网络统计系统(一般情况下导入数据被转换为数组),为统计计算、建模奠定了基础。
©哈尔滨商业大学 银河统计工作室
银河统计工作室成员由在校统计、计算机部分师生和企业数据数据分析师组成,维护和开发银河统计网和银河统计博客(技术文档)。专注于数据挖掘技术研究和运用,探索统计学、应用数学和IT技术有机结合,尝试大数据条件下新型统计学教学模式。