数据输入、转换、展示和存储

(2017-03-10 银河统计)

网络统计学集理论讲解、数据处理和在线测试为一体,统计数据处理和展示需要众多专门函数来承担。银河统计工作室以Javascript+CSS+HTML技术为基础(客户端),结合R和python(服务器端)设计了数据管理、数组运算、矩阵运算、统计指标和统计量、回归等方面的分类函数,以便于学习者“即学即用”。

为方便运行本文中样例代码,可打开网络统计学代码调试窗口,复制、粘贴代码到数据处理代码窗口中运行即可。

数据管理类函数(类名称:webTJ)一览表

序号函数名称参数1参数2参数3功能备注
1getClipboardData()***从粘贴板获得EXCEL数据IE浏览器
2setClipboardData(arrs)数组**将数据送到粘贴板IE浏览器
3getStr(arr,mark)一维数组数据间隔符*一维数组转换为字符串*
4getStrs(arrs,rmark,cmark)二维数组数据行间隔符数据列间隔符二维数组转换为字符串*
5getArr(str,mark)一维数组数据间隔符*字符串转换为一维数组*
6getArrs(strs,rmark,cmark)双分割符字符串数据行间隔符数据列间隔符字符串转换为二维数组*
7getObjfromJSONStr(jstr)JSON字符串**将JSON字符串转换为对象*
8getStrfromJSONObj(json)json数据对象**将JSON对象转换为字符串象*
9setLocalData(name,str)数据名称字符数据*将数据命名保存在本地支持HTML5
10getLocalData(name)数据名称**根据名称读取本地数据支持HTML5
11removeLocalData(name)数据名称**根据名称删除本地数据支持HTML5
12display(obj,k)数据对象显示类型*数据分类显示k=0,1字符,矩阵
13show(obj,k)数据对象显示类型*数据分类显示k=1,2字符,表格
14clear()***清除显示窗口*
15getDecimal(val,deci)标量数值小数位数*为数值设置有效小数位数*
16getArrDecimal(arrs,deci)数组小数位数*为数值矩阵设置有效小数位数*
17getGSData(id)数据唯一标识名**提取系统练习数据*
18sysCS,sysCS1,...,sysCS9***全局变量*
19webGSData_students***系统练习数据数据标识名

注:本网页中所有数据管理类函数和代码样例都可以复制、粘贴到网页尾部“代码窗口”运行通过

一、外部数据粘贴输入和输出###

1、本地数据粘贴输入

通常,由于安全原因,网页一般不能读取本地数据文件。为了高效处理本地或外部数据,应将数据按约定格式(参见银河统计博文:网络统计数据格式)粘贴到网页代码框中。现有格式化数据如下:

李,0.074|王,0.072|张,0.068|刘,0.056|陈,0.045|杨,0.042|赵,0.040|黄,0.032|周,0.030|吴,0.026|徐,0.023

这段字符串应以变量的形式粘贴到网页代码框中,例如:

var oStr="李,0.074|王,0.072|张,0.068|刘,0.056|陈,0.045|杨,0.042|赵,0.040|黄,0.032|周,0.030|吴,0.026|徐,0.023";

2、EXCEL数据转为格式化字符串

EXCEL在数据实务中应用广泛,这里介绍EXCEL数据表产生格式化字符串的方法。

用鼠标在EXCEL表格中选定数据所在单元格区域
复制、粘贴选定数据到WORD空白文档中(注意在WORD中必须用纯文本方式粘贴,这时数据列被空格分隔)
将空格替换为符号“,”(或其它符号)、换行符替换为符号“|”(在WORD替换菜单中,被替换字符为“^p”、替换字符为“|”)

注:OFFICE系列纯文本方式粘贴方法请在百度中检索“纯文本方式粘贴”关键词

3、EXCEL数据转为HTML表格

EXCEL数据直接复制到WORD中,加表格线后直接输出为报表,但要转成网页中显示的HTML标签table则费时费力。可以在EXCEL表格中制作表格主体,稍加处理后直接粘贴到网页显示。

现有EXCEL数据表如下:

633296
714934
385553
964176
686553

将EXCEL数据表每列前插入一个空白列,再把空白列编辑为表格子标签形式。在EXCEL表格中,数据行和列再多只需在3个单元格中分别编辑“”、“”、“”这几个表格子标签,然后粘贴到其它行。

<tr><td>	63	</td><td>	32	</td><td>	96	</td></tr>
<tr><td>	71	</td><td>	49	</td><td>	34	</td></tr>
<tr><td>	38	</td><td>	55	</td><td>	53	</td></tr>
<tr><td>	96	</td><td>	41	</td><td>	76	</td></tr>
<tr><td>	68	</td><td>	65	</td><td>	53	</td></tr>

将编辑好的表格主体数据按纯文本方式粘贴到WORD中,替换空格,则有,

<tr><td>63</td><td>32</td><td>96</td></tr>
<tr><td>71</td><td>49</td><td>34</td></tr>
<tr><td>38</td><td>55</td><td>53</td></tr>
<tr><td>96</td><td>41</td><td>76</td></tr>
<tr><td>68</td><td>65</td><td>53</td></tr>

在网页中插入(<table> </table>)到标签对中即可以显示为数据表。

4、格式字符串粘贴输出

在网页中数据经过函数处理后可以转换为指定格式字符串,以纯文本形式显示到结果文本框中
复制、粘贴格式字符串到“记事本”等常用文本编辑器中,命名保存供以后使用

5、表格数据粘贴输出

网页中数据为表格显示时,用鼠标全选表格数据
按Ctri+C键复制
打开空白EXCEL表格
按Ctri+V粘贴数据到表中(用纯文本方式粘贴)

二、通过粘贴板输入和输出数据###

只有使用IE浏览器时,可运用如下函数实现网页和Excel间数据交换。

1、通过粘贴板获得EXCEL数据  [返回]

## 函数
    webTJ.getClipboardData();
##参数
    【无】
    【无】

代码样例

webTJ.clear(); 
var oArrs=webTJ.getClipboardData();    //从粘贴板获得复制的EXCEL数据表并转换为数组;
webTJ.display(oArrs,1);                //以矩阵形式显示数组变量oArrs
注:执行代码前先用鼠标选中EXCEL单元格区域(或网页表格数据),然后复制数据后执行代码,EXCEL数据被导入数组。该函数还可以将网页中的表格数据导入数组

2、通过粘贴板导出二维数组到EXCEL表格  [返回]

## 函数
    webTJ.setClipboardData(arrs);
##参数
    【arrs】
    【数组】

代码样例

webTJ.clear(); 
var oArr=[[1,20],[1,2],[3,4],[5,6]];
webTJ.setClipboardData(oArr);    //将二维数组转换为EXCEL表格形式数据复制到粘贴板
注:执行代码后数组数据被复制到粘贴板,在EXCEL表格中选定一单元格,然后粘贴数据到EXCEL

三、数据转换函数###

银河统计常用数据格式为格式化字符、数组和JSON,为此提供如下数据转换函数。

1、一维数组转换为字符串  [返回]

## 函数
    webTJ.getStr(arr,mark);
##参数
    【arr,mark】
    【一维数组,数据间隔符】

代码样例

webTJ.clear();                     //清空显示窗口
var oArr=[97,72,10,544,114,44,12]; //将一维数组赋值给变量oArr;
var oTxt=webTJ.getStr(oArr,",");   //将一维数组转换为以“,”分割的字符串;
webTJ.display(oTxt,0);             //以文本方式显示字符串oTxt(第2个参数取0);
webTJ.display(oTxt.substr(0,2),0); //显示字符串oTxt前2个子字符;
注:代码中webTJ为网络统计函数类名称。代码oTxt.substr(0,2)为Javascript字符截取函数,参见银河统计博文:JavaScript脚本语言基础(三)之字符串对象(String)

2、二维数组转换为字符串  [返回]

## 函数
    webTJ.getStrs(arrs,rmark,cmark);
##参数
    【arrs,rmark,cmark】
    【二维数组,数据行间隔符,数据列间隔符】

代码样例

webTJ.clear();
var oArrs=[
    [97,72,15,44,66],
    [114,44,17,22],
    [145,45,171,41],
    [197,28,233,73],
    [231,35,300,65]];                     //将二维数组赋值给变量oArrs;
var oTxt=webTJ.getStrs(oArrs,"|",":");    //将数组转换“|”为行、“:”为列分割的字符串
webTJ.display(oTxt,0);
webTJ.display(oTxt.substr(0,5),0);

3、字符串转换为一维数组  [返回]

## 函数
    webTJ.getArr(str,mark);
##参数
    【str,mark】
    【唯一分割符字符串,数据间隔符】

代码样例

webTJ.clear();
var oTxt="977,105,114,127,145,171,197,233";    //将以“,”为唯一分割符的字符串赋值给变量oTxt
var oArr=webTJ.getArr(oTxt,",");               //将字符串转换为一维数组并赋值给变量oArr
webTJ.display(oArr,0);                         //以文本方式显示数组变量oArr
webTJ.display(oArr[2],0);                      //以文本方式显示数组变量oArr第3个元素
注:代码oArr[2]为Javascript一维数组函数,参见银河统计博文:JavaScript脚本语言基础(三)之数组对象(Array)

4、字符串转换为二维数组  [返回]

## 函数
    webTJ.getArrs(strs,rmark,cmark);
##参数
    【strs,rmark,cmark】
    【双分割符字符串,数据行间隔符,数据列间隔符】

代码样例

webTJ.clear();
var oTxt="37,42,95|97,72,10|14,44,12|15,45,17";    //“|”为行、“,”为列分割的字符串;
var oArrs=webTJ.getArrs(oTxt,"|",",");             //将字符串转换为二维数组
webTJ.display(oArrs,0);                            //以文本方式显示数组变量oArrs
webTJ.display(oArrs,1);                            //以矩阵方式显示数组变量oArrs
webTJ.display(oArrs[3][2],0);                      //以文本方式显示数组变量oArrs第4行3列的元素
注:代码oArrs[3][2]为Javascript多维数组函数,参见银河统计博文:JavaScript脚本语言基础(三)之数组对象(Array)

5、将JSON字符串转换为对象  [返回]

## 函数
    webTJ.getObjfromJSONStr(jstr);
##参数
    【jstr】
    【JSON数据字符串】

代码样例

webTJ.clear();
var oJSONStr="[{name:'lei',weight:80,age:54},{name:'lijun',weight:70,age:50}]";
                                                //将JSON字符串赋值给变量oJSONStr
var oJSONObj=webTJ.getObjfromJSONStr(oJSONStr); //将JSON字符串转换为对象
webTJ.display(oJSONObj[0].name,0);              //显示JSON对象第1个元素name属性的属性值
webTJ.display(oJSONObj[1].name,0);              //显示JSON对象第2个元素name属性的属性值
注:关于JSON参见银河统计博文:JavaScript脚本语言基础(四)之JSON数据交换格式

6、将JSON对象转换为字符串  [返回]

## 函数
    webTJ.getStrfromJSONObj(json);
##参数
    【json】
    【json数据】

代码样例

webTJ.clear();
var oJSONObj=[
    {name:'lei',weight:80,age:54},
    {name:'lijun',weight:70,age:50}];            //将JSON对象赋值给对象变量oJSONObj
var oJSONStr=webTJ.getStrfromJSONObj(oJSONObj);  //将JSON对象转换为字符串
webTJ.display(oJSONStr,0);                       //显示JSON字符串
webTJ.display(oJSONStr.substr(0,5),0);           //显示JSON字符串前5个字符
注:关于JSON参见银河统计博文:JavaScript脚本语言基础(四)之JSON数据交换格式

四、本地数据管理函数###

一个网页如何能在客户的浏览器存储更多的数据呢?在Html5之前的时代在浏览器端存储点网站个性化的数据,尤其是用户浏览器的痕迹,用户的相关数据等一般只能存储在Cookie中,但是大多是浏览器对于Cookie的限制也就逼迫网站存储数据尽量精简。想存储复杂的、关系型的用户数据就根本不可能了。但是进入Html5时代,Html5的设计者们为Html5能成为富客户端做好了准备。为了破解Cookie的一系列限制,Html5通过JS的新的API就能直接存储大量的数据到客户端浏览器,而且支持复杂的本地数据库。Html5支持两种的WebStorage,一种是永久性的本地存储(localStorage),另外一种是会话级别的本地存储(sessionStorage)。银河统计本地数据管理函数根据localStorage编写,详细信息参见银河统计博文:本地数据存储

1、将数据命名保存在本地  [返回]

## 函数
    webTJ.setLocalData(name,str);
##参数
    【name,str】
    【数据名称,字符数据】

代码样例

webTJ.clear();
var oStr = "[[1,20],[1,2],[3,4],[5,6]]";    //本地数据字符串
var oName = "myData";                       //命名本地数据字符为myData
var oObj = webTJ.setLocalData(oName,oStr);  //按命名存储数据到本地
webTJ.show(oObj,1);
注:存储到本地的数据可在同类浏览器内不同网页间共享数据,但如果换浏览器会无法读取数据

2、根据名称读取本地数据  [返回]

## 函数
    webTJ.getLocalData(name);
##参数
    【name】
    【数据名称】

代码样例

webTJ.clear();
var oName = "myData";                   //定义本地数据名称
var oStr = webTJ.getLocalData(oName);   //按名称获取本地数据
webTJ.display(oStr,0);
var oJSONObj=webTJ.getObjfromJSONStr(oStr); //将JSON字符串转换为对象
webTJ.display(oJSONObj[0][0],0);
webTJ.display(oJSONObj,1);

3、根据名称删除本地数据  [返回]

## 函数
    webTJ.removeLocalData(name);
##参数
    【name】
    【数据名称】

代码样例

webTJ.clear();
var oName = "myData";
var oObj = webTJ.removeLocalData(oName);    //按指定名称删除本地数据

4、根据名称获取系统练习数据  [返回]

## 函数
    webTJ.getGSData(idname);
##参数
    【idname】
    【系统数据唯一标识名】

代码样例

webTJ.clear();
var oIDName = "webGSData_students";
var oStr = webTJ.getGSData(oIDName); //提取标识名为webGSData_students的系统数据
webTJ.display(oStr,0);

五、数据显示函数###

1、数据分类显示函数  [返回]

## 函数
    webTJ.display(obj,k);
##参数
    【obj,k】
    【函数返回值,显示类型】

注:(k=0)按字符形式显示、(k=1)按矩阵公式显示

代码样例

webTJ.clear();
var oArrs=[[1,20],[1,2],[3,4],[5,6]];
webTJ.display(oArrs[2][1],0);             //按字符形式显示
webTJ.display(oArrs,1);                   //按矩阵公式显示

2、数据按表格显示函数  [返回]

## 函数
    webTJ.show(obj,k);
##参数
    【obj,k】
    【函数返回值,显示类型】

注:(k=1)按字符形式显示、(k=2)按表格显示

代码样例

webTJ.clear();
var oArrs=[[1,20],[1,2],[3,4],[5,6]];
webTJ.show(oArrs[2][1],1);             //按字符形式显示
webTJ.show(oArrs,2);                   //按表格显示

3、为数值设置有效小数位数  [返回]

## 函数
    webTJ.getDecimal(val,deci);
##参数
    【val,deci】
    【标量数值,保留小数位数】

代码样例

webTJ.clear();
var oVal=128.345;
oVal=webTJ.getDecimal(oVal,2);  //四舍五入保留2位小数
webTJ.display(oVal,0); 

4、为数值矩阵设置有效小数位数  [返回]

## 函数
    webTJ.getArrDecimal(arrs,deci);
##参数
    【arrs,deci】
    【数量数组,保留小数位数】

代码样例

webTJ.clear();
var oArrs=[[3.2313,2.435643,5.243434,1.323232],[2.876,5.65344,4.432434,3.9870754]];
var oBrrs=webTJ.getArrDecimal(oArrs,2);  //数组四舍五入保留2位小数
webTJ.display(oBrrs,1); 

六、全局类变量###

## 变量
    webTJ.sysCS, webTJ.sysCS1,webTJ.sysCS2,webTJ.sysCS3,webTJ.sysCS4,
    webTJ.sysCS5,webTJ.sysCS6,webTJ.sysCS7,webTJ.sysCS8,webTJ.sysCS9

注:一般用于数据预处理,可以将大量待处理数据后回调结果预存为全局类变量供二次调用,用法见后续博文

七、在线数据操作练习###

1、设有网页表格数据如下表:

现有EXCEL数据表如下:

练习数据(1):网络表格数据导入数组
326
194
853
616
853
639
743
355
947
665

试将表格中数据导入数组变量,并按文本格式显示第4行3列数据6,再按矩阵形式显示数组(要求:说明操作环境和步骤,编写代码并运行)。

第一种方法:运用IE浏览器直接导入为数组

I、 用IE浏览器打开网页(只有IE浏览器支持该方法)
II、 将表格中数据复制、粘贴到EXCEL(纯文本方式粘贴)
III、在EXCEL中复制数据
IV、 在网页代码框中运行代码样例

代码样例

webTJ.clear(); 
var oArrs=webTJ.getClipboardData(); 
webTJ.display(oArrs[3][2],0); 
webTJ.display(oArrs,1);         

第二种方法:运用WORD文档转换为格式化字符串

I、 用鼠标全选网页表格中的数据(或EXCEL表格数据)
II、 复制、粘贴(选择只保留文本粘贴)所选数据到空白WORD文档中
III、在WORD文档中将数据列空格替换为列分隔符,如逗号“,”(复制数据列间空格-打开文字替换菜单-粘贴空格到查找内容文本框中-在替换为文本框中输入列分隔符-点击全部替换)
IV、 在WORD文档中将数据回车换行符替换为行分隔符,如符号“|”(打开文字替换菜单-在查找内容文本框中输入“^p”-在替换为文本框中输入行分隔符-点击全部替换)
V、 在WORD文档中删除最后一个换行符,在网页脚本中将格式字符串加引号赋值给指定变量

代码样例

webTJ.clear(); 
var oStr="3,2,6|1,9,4|8,5,3|6,1,6|8,5,3|6,3,9|7,4,3|3,5,5|9,4,7|6,6,5";
var oArrs=webTJ.getArrs(oStr,"|",",");
webTJ.display(oArrs[3][2],0); 
webTJ.display(oArrs,1);         



2、现有某文本文件中格式字符如下:

经济学院&01&0.14&经济学&01&0.4|经济学院&01&0.14&国际经济与贸易&02&0.4|经济学院&01&0.14&统计学&03&0.2|金融学院&02&0.1&金融工程&04&0.4|金融学院&02&0.1&金融学&05&0.6|财政与公共管理学院&03&0.06&财政学&06&0.4|财政与公共管理学院&03&0.06&行政管理&07&0.3|财政与公共管理学院&03&0.06&劳动与社会保障&08&0.3|工商管理学院&04&0.16&工商管理&09&0.3|工商管理学院&04&0.16&市场营销&10&0.3|工商管理学院&04&0.16&人力资源管理&11&0.3

请将数据导入数组,并按行列导出到EXCEL文档。

第一种方法:利用IE浏览器的粘贴板功能直接将数据导入EXCEL

I、 用IE浏览器打开网页;
II、 打开EXCEL文档;
III、运行代码:

代码样例

webTJ.clear();
var oTxt="经济学院&01&0.14&经济学&01&0.4|经济学院&01&0.14&国际经济与贸易&02&0.4|经济学院&01&0.14&统计学&03&0.2|金融学院&02&0.1&金融工程&04&0.4|金融学院&02&0.1&金融学&05&0.6|财政与公共管理学院&03&0.06&财政学&06&0.4|财政与公共管理学院&03&0.06&行政管理&07&0.3|财政与公共管理学院&03&0.06&劳动与社会保障&08&0.3|工商管理学院&04&0.16&工商管理&09&0.3|工商管理学院&04&0.16&市场营销&10&0.3|工商管理学院&04&0.16&人力资源管理&11&0.3";
var oArrs=webTJ.getArrs(oTxt,"|","&");
webTJ.setClipboardData(oArrs);

IV、在EXCEL中选定单元格后粘贴数据(Ctrl+V)。

第二种方法:运用表格输出函数将数据导入EXCEL

I、运行代码:

代码样例

webTJ.clear();
var oTxt="经济学院&01&0.14&经济学&01&0.4|经济学院&01&0.14&国际经济与贸易&02&0.4|经济学院&01&0.14&统计学&03&0.2|金融学院&02&0.1&金融工程&04&0.4|金融学院&02&0.1&金融学&05&0.6|财政与公共管理学院&03&0.06&财政学&06&0.4|财政与公共管理学院&03&0.06&行政管理&07&0.3|财政与公共管理学院&03&0.06&劳动与社会保障&08&0.3|工商管理学院&04&0.16&工商管理&09&0.3|工商管理学院&04&0.16&市场营销&10&0.3|工商管理学院&04&0.16&人力资源管理&11&0.3";
var oArrs=webTJ.getArrs(oTxt,"|","&");
webTJ.show(oArrs,2); //按表格形式显示数组    

II、在结果显示窗口中选定表格格后粘贴数据到EXCEL(注意要用EXCEL粘贴选项的纯文本粘贴)。



3、将下列字符数据导入EXCEL

95,74,31,68,50,68,59,33,41,33,81,53,91,68,35,57,58,63,77,62,62,92,37,36,87,88,86,88,47,91,51,41,82,82,63,86,90,43,31,57,73,41,50,97,83,85,38,70,61,90,53,71,42,59,41,99,63,86,55,95,31,37,65,48,93,51,63,47,92,95,39,44,93,96,85,33,95,47,34,56,70,93,60,88,34,43,98,70,56,73,78,82,40,57,61,53,49,60,94,88

代码样例

webTJ.clear();
var oStr="95,74,31,68,50,68,59,33,41,33,81,53,91,68,35,57,58,63,77,62,62,92,37,36,87,88,86,88,47,91,51,41,82,82,63,86,90,43,31,57,73,41,50,97,83,85,38,70,61,90,53,71,42,59,41,99,63,86,55,95,31,37,65,48,93,51,63,47,92,95,39,44,93,96,85,33,95,47,34,56,70,93,60,88,34,43,98,70,56,73,78,82,40,57,61,53,49,60,94,88";
var oArr=webTJ.getArr(oStr,",");
webTJ.show(oArr,2); //按表格形式显示数组(只有1列)
var oArrs=webTJ.Array.getArrsfromArr(oArr,5);  //将一维数组转换为二维数组(20*5)
webTJ.show(oArrs,2);

在结果显示窗口中选定表格格后粘贴数据到EXCEL(注意要用EXCEL粘贴选项的纯文本粘贴)。



4、将网页、EXCEL或WORD中表格数据批量导入数据处理软件(而不是手工敲入数据),是统计数据处理的最基本要求。现有表格数据如下,

练习数据(2):网络表格数据导入数组
姓名语文高等数学统计学
郑生文763356
舒利氏458861
岳艺霏828952
涂贞皓403545
王廷英566060
陈田554447
任淑伟788995
梁伟娜326465
罗思琪944965
何润703730

如果在某网页、或在EXCELWORD文档中有类似练习数据(2)的数据表,在无IE浏览器条件下,要求运用本网页完成:

a.将本网页练习数据(2)导入数组;
b.下载EXCEL练习文档,并将数据表导入数组;
c.下载练习WORD文档,并将数据表导入数组。


5、设有身高和体重统计数据如下表练习数据(3):

身高(厘米)172180169175179171168180174178
体重(公斤)65706368676461676766

要求:

a. 编写JS代码,将表中数据写成数组形式,显示第5对身高和体重数值,并将数组转化为字符形式,最后命名保存在本地供以后计算调用;
b. 编写JS代码,将表中数据写成JSON形式,显示第5对身高和体重数值,并将JSON转化为JSON字符,最后命名保存在本地供以后计算调用;
c. 编写JS代码,导入已命名的JSON形式本地数据,并存储在记事本中供以后计算调用。

代码窗口

注:可将例题实例代码复制、粘贴到“代码窗口”,点击“运行代码”获得计算结果(鼠标选择实例代码$ ightarrow$Ctrl+C:复制$ ightarrow$鼠标点击“代码窗口”使其获得焦点$ ightarrow$Ctrl+V:粘贴)

运行效果

原文地址:https://www.cnblogs.com/cloudtj/p/6533131.html