Size: 612
Comment:
|
Size: 5617
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 4: | Line 4: |
Line 8: | Line 6: |
= K6日:clone = | = K6日:统计!mm的 = |
Line 10: | Line 9: |
* 此mm 非彼 mm 哪! 乃FreeMind 思维图谱文件 `.mm` == FreeMind的另类使用 == '''要想进行问卷回答的统计,首先要有手段知道现在组织内成员信息,以便对应统计''' * 为什么想到了 FreeMind? * 以往使用DB,怎么样都要立成员表和组织表然后还有这那儿的对应选择关系什么的 * 还是 FreeMind 直观,操作也非常快捷,复制,移动太爽直了! * 而且是XML的数据文件! * 曾经使用 XSTL 的尝试重构 检出了一下子 mm 文件 "attachment:snap-KwDay60.png |
|
Line 11: | Line 20: |
== 悠然 Leo == {{{Ctrl+`}} 从来没有如此让你放心过…… |
* 哈哈哈!大致知道 FreeMind 的数据格式: 1. 所有节点是统一的 `<node>` 1. 属性和值,全部是UTF8编码的字串 * 所以,只要有简单的约定,就可以作为 Xpath 的过滤参数来理解真正的数据意义了 * 以上的组织成员信息就是有个小小的约定: 1. 一级节点都是部门描述,中文 1. 二级节点是属性描述: 1. dept 说明部门的整体信息 1. staff 汇集成员信息,类似部门的节点组织 1. total 成员总数 "attachment:snap-KwDay6mm.png * 这样就令 XSLT 有基础原则可以进行数据组织了 * 同理,也可以让Python 快速理解了... |
Line 14: | Line 34: |
== 反复测试 == '''不用想什么黑/白盒;边界,点击就成!''' |
== ElementTree,当然的! == '''处理XML Python 有丰富的模块,你知道其中 ElementTree 最方便支持部分Xpath 的搜索''' * 其实从使用方面也是 ElementTree 最PythyonIc 了 * `deptorg.py` mm专用理解脚本中:{{{#!python from elementtree import ElementTree tree = ElementTree.parse(xml文件) elem = tree.getroot() dept = elem.findall("node/node") for d in dept: print d.attrib["TEXT"] }}} 1. 引入 ElementTree 1. 处理XML为 ElementTree 对象 1. 找到根 1. 从根找到所有第二级的`<node>`节点对象列表 1. 已经可以通过 `.attrib["TEXT"]` 来获得内容了! "attachment:snap-KwDay61.png * 就使用 `findall()` 和 `attrib["TEXT"]` 便可以判定/获取足够的信息,输出成以上的页面从 mm 中!!! * 哈哈哈!具体的就看代码吧…… == Karrigell 的对象混合 == '''但是!怎么样可以使用这种mm 的理解成果?''' * 麻烦在于 `ElementTree.parse(xml文件)` 要可以直接访问的文件名 * 你不想在程序中包含太多系统的路径信息 1. 反复尝试,发现从相对路径偏移还是从URL 来访问都不稳定,也麻烦 1. 最简单的就是理解脚本和mm 文件在一起 * 问题就来了,各种事务页面如何快捷直观的使用理解成果? * 自然的,就想到了 `Include()` KarriGell 中到处都可以进行的基础操作 -- '''包含''' * 有MoinMoin 的经验,你就想这样一来应该能将字典对象混人当前名称空间?? * 在专门mm 理解脚本中 `print dir()` "attachment:snap-KwDay62.png * 不会这么简单吧!你发现了 `index.ks` 事务页面中才有的对象 '''sess''' —— 对话容器 * 尝试的赋值一下子? * KAO! 真的好用! 在`index.ks/stat` 统计页面,包含 `deptorg.py` mm专用理解脚本 再打印 '''sess''' 看一下子,唉呀呀!真的有了! "attachment:snap-KwDay63.png |
Line 19: | Line 79: |
== 反复测试 == '''不用想什么黑/白盒;边界,点击就成!''' * 接下来就简单了: 1. 所有人的回答输出为简单的文件,比如说: 每个题目的回答为一行 1. 套用问卷列表的技巧,可以搜索出对应问卷的所有回答文件 1. 批量读到列表中,和成员信息字典匹配一下子,就可以人性化的输出了 {{{#!python ali = fnmatch.filter(os.listdir(conf.qpage.apath), '%s.*.aq'%qpname) aed = [] for f in ali: a = open(conf.qpage.apath+f,"r").read() aed.append(f.split(".")[-2]) done = [] unknow = [] for a in aed: if a in sess.usr["dept"].keys(): done.append(a) else: unknow.append(a) }}} * 先要预备处理一下子,过滤出不知道的人 1. 明显的你约定回答文件的命名格式是 `问卷名.成员帐号名.aq` 1. 所以可以根据文件名快速整理出名单列表 `aed` 1. 然后,就有了已知合理成员回答列表 `done` 和 `unknow` 未知成员列表 "attachment:snap-KwDay6stat.png * 最后就是个显示问题了: 1. 要有回答时间的信息?{{{ fn = conf.qpage.apath+'%s.%s.aq'%(qpname,a) ... time.strftime("%y/%m/%d %H:%M:%S",time.localtime(os.path.getmtime(fn) }}} 1. 要有 百分制 的成绩?{{{#!python def _grade(right,answer): """根据问卷答案自动计算分数 """ grade = 0 for i in range(0,len(right)): if right[i]==answer[i]: grade +=1 else: pass return 100*(float(grade)/len(right)) }}} 1. 要有总平均成绩?{{{ #使用stat 列表收集所有有效成绩 stat = [] ... stat.append(_grade(crtright,open(fn,"r").read().split())) ... sum(stat)/len(stat)) 就出来了 reduce(lambda a,b:a+b, stat)/len(stat) 更加cool }}} * 哈哈哈!!什么也难不住你! |
|
Line 23: | Line 139: |
== 讨论 == [[Include(/Discuss)]] |
::-- ZoomQuiet [DateTime(2005-12-11T04:51:41Z)] TableOfContents
1. K6日:统计!mm的
快速扩展一个页面适应所有情况!
此mm 非彼 mm 哪! 乃FreeMind 思维图谱文件 .mm
1.1. FreeMind的另类使用
要想进行问卷回答的统计,首先要有手段知道现在组织内成员信息,以便对应统计
为什么想到了 FreeMind?
- 以往使用DB,怎么样都要立成员表和组织表然后还有这那儿的对应选择关系什么的
还是 FreeMind 直观,操作也非常快捷,复制,移动太爽直了!
- 而且是XML的数据文件!
- 曾经使用 XSTL 的尝试重构 检出了一下子 mm 文件
"attachment:snap-KwDay60.png
哈哈哈!大致知道 FreeMind 的数据格式:
所有节点是统一的 <node>
- 属性和值,全部是UTF8编码的字串
- 所以,只要有简单的约定,就可以作为 Xpath 的过滤参数来理解真正的数据意义了
- 以上的组织成员信息就是有个小小的约定:
- 一级节点都是部门描述,中文
- 二级节点是属性描述:
- dept 说明部门的整体信息
- staff 汇集成员信息,类似部门的节点组织
- total 成员总数
"attachment:snap-KwDay6mm.png
- 这样就令 XSLT 有基础原则可以进行数据组织了
- 同理,也可以让Python 快速理解了...
1.2. ElementTree,当然的!
处理XML Python 有丰富的模块,你知道其中 ElementTree 最方便支持部分Xpath 的搜索
其实从使用方面也是 ElementTree 最PythyonIc 了
deptorg.py mm专用理解脚本中:
引入 ElementTree
处理XML为 ElementTree 对象
- 找到根
从根找到所有第二级的<node>节点对象列表
已经可以通过 .attrib["TEXT"] 来获得内容了!
"attachment:snap-KwDay61.png
就使用 findall() 和 attrib["TEXT"] 便可以判定/获取足够的信息,输出成以上的页面从 mm 中!!!
- 哈哈哈!具体的就看代码吧……
1.3. Karrigell 的对象混合
但是!怎么样可以使用这种mm 的理解成果?
麻烦在于 ElementTree.parse(xml文件) 要可以直接访问的文件名
- 你不想在程序中包含太多系统的路径信息
- 反复尝试,发现从相对路径偏移还是从URL 来访问都不稳定,也麻烦
- 最简单的就是理解脚本和mm 文件在一起
- 问题就来了,各种事务页面如何快捷直观的使用理解成果?
"attachment:snap-KwDay62.png
不会这么简单吧!你发现了 index.ks 事务页面中才有的对象 sess —— 对话容器
- 尝试的赋值一下子?
KAO! 真的好用! 在index.ks/stat 统计页面,包含 deptorg.py mm专用理解脚本 再打印 sess 看一下子,唉呀呀!真的有了!
"attachment:snap-KwDay63.png
1.4. 反复测试
不用想什么黑/白盒;边界,点击就成!
- 接下来就简单了:
- 所有人的回答输出为简单的文件,比如说: 每个题目的回答为一行
- 套用问卷列表的技巧,可以搜索出对应问卷的所有回答文件
- 批量读到列表中,和成员信息字典匹配一下子,就可以人性化的输出了
- 先要预备处理一下子,过滤出不知道的人
明显的你约定回答文件的命名格式是 问卷名.成员帐号名.aq
所以可以根据文件名快速整理出名单列表 aed
然后,就有了已知合理成员回答列表 done 和 unknow 未知成员列表
"attachment:snap-KwDay6stat.png
- 最后就是个显示问题了:
要有回答时间的信息?
fn = conf.qpage.apath+'%s.%s.aq'%(qpname,a) ... time.strftime("%y/%m/%d %H:%M:%S",time.localtime(os.path.getmtime(fn)
要有 百分制 的成绩?
要有总平均成绩?
#使用stat 列表收集所有有效成绩 stat = [] ... stat.append(_grade(crtright,open(fn,"r").read().split())) ... sum(stat)/len(stat)) 就出来了 reduce(lambda a,b:a+b, stat)/len(stat) 更加cool
- 哈哈哈!!什么也难不住你!
1.5. 实例下载
使用 [wiki:self/AllAboutSubversion SVN 下载]:
[wiki:selfsvn/zqlib/trunk/zqlib/tangle/zoomq/Karrigell/obpKWD/KwDay6/ KwDay6实例]
1.6. 讨论
返回 KarrigellWebDev -- 快速体验K开发