网络统计学集理论讲解、数据处理和在线测试为一体,统计数据处理和展示需要众多专门函数来承担。银河统计工作室以Javascript+CSS+HTML技术为基础(客户端),结合R和python(服务器端)设计了数据管理、数组运算、矩阵运算、统计指标和统计量、回归等方面的分类函数,以便于学习者“即学即用”。
为方便运行本文中样例代码,可打开网络统计学代码调试窗口,复制、粘贴代码到数据处理代码窗口中运行即可。
数据管理类函数(类名称:webTJ)一览表
序号 | 函数名称 | 参数1 | 参数2 | 参数3 | 功能 | 备注 |
---|---|---|---|---|---|---|
1 | getClipboardData() | * | * | * | 从粘贴板获得EXCEL数据 | IE浏览器 |
2 | setClipboardData(arrs) | 数组 | * | * | 将数据送到粘贴板 | IE浏览器 |
3 | getStr(arr,mark) | 一维数组 | 数据间隔符 | * | 一维数组转换为字符串 | * |
4 | getStrs(arrs,rmark,cmark) | 二维数组 | 数据行间隔符 | 数据列间隔符 | 二维数组转换为字符串 | * |
5 | getArr(str,mark) | 一维数组 | 数据间隔符 | * | 字符串转换为一维数组 | * |
6 | getArrs(strs,rmark,cmark) | 双分割符字符串 | 数据行间隔符 | 数据列间隔符 | 字符串转换为二维数组 | * |
7 | getObjfromJSONStr(jstr) | JSON字符串 | * | * | 将JSON字符串转换为对象 | * |
8 | getStrfromJSONObj(json) | json数据对象 | * | * | 将JSON对象转换为字符串象 | * |
9 | setLocalData(name,str) | 数据名称 | 字符数据 | * | 将数据命名保存在本地 | 支持HTML5 |
10 | getLocalData(name) | 数据名称 | * | * | 根据名称读取本地数据 | 支持HTML5 |
11 | removeLocalData(name) | 数据名称 | * | * | 根据名称删除本地数据 | 支持HTML5 |
12 | display(obj,k) | 数据对象 | 显示类型 | * | 数据分类显示 | k=0,1字符,矩阵 |
13 | show(obj,k) | 数据对象 | 显示类型 | * | 数据分类显示 | k=1,2字符,表格 |
14 | clear() | * | * | * | 清除显示窗口 | * |
15 | getDecimal(val,deci) | 标量数值 | 小数位数 | * | 为数值设置有效小数位数 | * |
16 | getArrDecimal(arrs,deci) | 数组 | 小数位数 | * | 为数值矩阵设置有效小数位数 | * |
17 | getGSData(id) | 数据唯一标识名 | * | * | 提取系统练习数据 | * |
18 | sysCS,sysCS1,...,sysCS9 | * | * | * | 全局变量 | * |
19 | webGSData_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数据表如下:
63 | 32 | 96 |
71 | 49 | 34 |
38 | 55 | 53 |
96 | 41 | 76 |
68 | 65 | 53 |
将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
2、通过粘贴板导出二维数组到EXCEL表格 [返回]
## 函数
webTJ.setClipboardData(arrs);
##参数
【arrs】
【数组】
代码样例
webTJ.clear();
var oArr=[[1,20],[1,2],[3,4],[5,6]];
webTJ.setClipboardData(oArr); //将二维数组转换为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个子字符;
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个元素
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列的元素
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属性的属性值
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个字符
四、本地数据管理函数###
一个网页如何能在客户的浏览器存储更多的数据呢?在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数据表如下:
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 |
试将表格中数据导入数组变量,并按文本格式显示第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中表格数据批量导入数据处理软件(而不是手工敲入数据),是统计数据处理的最基本要求。现有表格数据如下,
姓名 | 语文 | 高等数学 | 统计学 |
郑生文 | 76 | 33 | 56 |
舒利氏 | 45 | 88 | 61 |
岳艺霏 | 82 | 89 | 52 |
涂贞皓 | 40 | 35 | 45 |
王廷英 | 56 | 60 | 60 |
陈田 | 55 | 44 | 47 |
任淑伟 | 78 | 89 | 95 |
梁伟娜 | 32 | 64 | 65 |
罗思琪 | 94 | 49 | 65 |
何润 | 70 | 37 | 30 |
如果在某网页、或在EXCEL、WORD文档中有类似练习数据(2)的数据表,在无IE浏览器条件下,要求运用本网页完成:
a.将本网页练习数据(2)导入数组;
b.下载EXCEL练习文档,并将数据表导入数组;
c.下载练习WORD文档,并将数据表导入数组。
5、设有身高和体重统计数据如下表练习数据(3):
身高(厘米) | 172 | 180 | 169 | 175 | 179 | 171 | 168 | 180 | 174 | 178 |
---|---|---|---|---|---|---|---|---|---|---|
体重(公斤) | 65 | 70 | 63 | 68 | 67 | 64 | 61 | 67 | 67 | 66 |
要求:
a. 编写JS代码,将表中数据写成数组形式,显示第5对身高和体重数值,并将数组转化为字符形式,最后命名保存在本地供以后计算调用;
b. 编写JS代码,将表中数据写成JSON形式,显示第5对身高和体重数值,并将JSON转化为JSON字符,最后命名保存在本地供以后计算调用;
c. 编写JS代码,导入已命名的JSON形式本地数据,并存储在记事本中供以后计算调用。
代码窗口
注:可将例题实例代码复制、粘贴到“代码窗口”,点击“运行代码”获得计算结果(鼠标选择实例代码$ ightarrow$Ctrl+C:复制$ ightarrow$鼠标点击“代码窗口”使其获得焦点$ ightarrow$Ctrl+V:粘贴)运行效果