网站首页  词典首页

请输入您要查询的论文:

 

标题 基于VB和PYTHON的问卷录入与分析系统
范文

    徐畅畅

    摘要:采用VB 6.0语言开发数据录入问卷、核对并修改问录入数据错误等功能,PYTHON 3.5语言进行数据统计并绘制相应统计学图表,Excel文档进行问卷数据的保存、辅助问卷录入,自主研发出“先行”问卷录入与分析系统。该系统可高效完成数据采集和管理工作,节约了纸质问卷录入时间;同时该软件易于实施,数据移植性好,后续输出的电子数据基本不存在乱码现象;软件后续数据进行科学管理和统计分析,功能更趋完善,便于社会调查最终顺利实施。

    关键词:计算机;调查问卷;数据录入;数据管理;编程;软件;VB 6.0;PYTHON 3.5

    中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)35-0109-05

    1 背景

    随着21世纪的到来,我们的社会逐步迈入大数据时代,数据的收集、分析是处理大数据的基础。目前数据收集常采用纸质调查问卷,但纸质调查问卷需要手工输入问卷数据,进而进行统计学处理。手工转换为电子版的调查问卷数据统计学处理工作量大,后期数据汇总工作繁琐。现有的问卷录入软件界面繁琐,使用时往往需要操作者具备一定的专业常识。以EPIDATA问卷录入系统为代表相关软件,在录入中文内容时容易出现乱码,并且数据的移植性差。

    Excel是Windows平台下电子表格处理软件,能够进行各种数据的处理、统计分析和辅助决策操作。Excel文档拥有良好的数据保管能力,数据移植性好,广泛地应用于众多领域。Visual Basic 6.0(VB 6.0)语言拥有易于学习,界面设计容易,与Excel的结合效果好。PYTHON语言同样易于学习,其强大之处在于它有丰富和强大的类库,可以方便地处理各种需求。PYTHON的绘图库(matplotlib库),是一款功能强大的科学绘图库,修复中文显示问题后可以高效率的绘制各种统计学图表。综上所述,结合Excel、VB 6.0、PYTHON优秀之处,可以很好地解决目前问卷录入系统目前存在的问题。

    2 研究内容

    2.1 软件设计的思维导图

    1) 数据录入模块

    2) 数据格式判断模块:统计学处理前准备工作

    2.2 “先行”(Forerun)问卷录入与分析系统设计理念

    “先行”(Forerun)问卷录入与分析系统(简称先行系统)应该包括问卷录入、数据统一格式保存、数据备份和统计学处理等功能。数据录入工作重复性质较强,需要一定效率的工作,强调录入系统准确和简洁特质。数据统一格式保存需要一定的兼容性,文字不易发生改变。数据备份同样需要一定的格式,保存内容在不同机器上不易发生改变,对于编程语言较为容易操作的性质。统计学处理建立在一定的数据保存格式下才能进行,需要效率高、精确度高。针对以上的问题,我结合自身先前的编程经历,决定设计一套软件组成的系统,配合不同语言的优势进行问卷录入系统软件设计。

    2.3 先行系统设计的过程与实际操作流程

    VB 6.0语言具有简单、易于组合软件界面的特点,且VB与Excel之间的兼容性好,我又经常使用,因此我设计先行系统时首先着手从上述语言开始编写。我先结合Excel设计问卷,并将问卷按照特定形式放于Excel中,方便使用VB进行处理。

    2.4 先行系统的录入模块(基于VB6.0)

    1) 问卷录入的准备工作

    在VB中调用了“Microsoft Excel 15.0 Object Library”,使VB可以实现对于Excel的打开、关闭、读取、写入功能。新建窗体FORM1,将其命名为 “问题与选项”,声明与Excel处理有关的内容。

    以下为声明内容:

    Dim ExApp As New Excel.Application

    Dim ExBook As Excel.Workbook

    Dim ExWorksheet As Excel.Worksheet

    2) 电子问卷模板形成

    按下FORM1的按键,将Excel中的问题、选项提取至软件中。

    以下代码实现软件的问题与选项提取:

    Dim aata(1000) As String

    ……

    Dim hata(1000) As String

    Set ExApp = CreateObject("Excel.Application")

    Set ExApp = New Excel.Application

    Set ExBook = ExApp.Workbooks.Open(Text1.Text)

    Set xlsheet = ExBook.Worksheets("sheet1")

    For i = 1 To Val(Form2.wt.Text) — 1 ‘確定问题的个数,再导入问题及选项内容

    aata(i) = ExApp.Sheets("sheet1").Range("a" & i).Value

    ……

    hata(i) = ExApp.Sheets("sheet1").Range("h" & i).Value

    Next i

    ExApp.ActiveWorkbook.Save

    ExApp.Workbooks.Close

    ExApp.Quit

    For q = 0 To Val(Form2.wt.Text) - 2

    List1.AddItem aata(q + 1)

    ……

    List8.AddItem hata(q + 1)

    Next q

    3) 问卷录入

    随后新建FORM2,将其命名为“录入区”,在其中新建按钮等。利用CHECK选择框进行问题的勾选,TEXT输入框进行录入选项,录入选项同时进行备份,配有防关闭功能,断点重录功能,激活“临时休息区”(详见“操作流程”:1.3、1.4)。

    以下代码实现录入时选项的显示:

    If Check3.Caption = "" Then ‘查找空白项:check1c和heck2为非空白项,检查check3-8

    Check3.Visible = False

    End If

    ……

    If Check7.Caption = "" Then

    Check7.Visible = False

    End If

    If Check1.Caption = "(" Then

    Text1.Visible = False

    Text4.Visible = True ‘打开手工填写窗口

    Text4.SetFocus

    End If

    以下代码实现选择问题选项:

    If Val(Text1.Text) = 1 And Len(Check1.Caption) > 0 Then

    ‘问卷中相应问题项,其Len(object.Caption)>0

    Check1.Value = 1

    End If

    ……

    If Val(Text1.Text) = 7 And Len(Check7.Caption) > 0 Then

    Check7.Value = 1

    End If

    If Val(Text1.Text) = 8 And Len(Check1.Caption) > 0 Then ‘特殊情况窗口被激活

    Check8.Value = 1

    End If

    Text1.Text = ""

    以下代码负责在录入时进行备份:

    If Text1.Visible = True Then

    ‘nb.text为问卷序号(1、2、3….),text2.text为问题号,no.caption为问卷编号(例:vx0001)

    ……

    Open "d:\副本 内容.txt" For Append As #1

    Print #1, Val(nb.Text) & "(" & Val(Text2.Text) - 1 & ")" & b ‘b为选项

    Close #1

    Open "d:\副本 数字.txt" For Append As #2

    Print #2, Val(nb.Text) & "(" & Val(Text2.Text) - 1 & ")" & c ‘c为机械码

    Close #2

    Open "d:\副本 内容" & no.Caption & ".txt" For Append As #3

    Print #3, b

    Close #3

    Open "d:\副本 数字" & no.Caption & ".txt" For Append As #4

    Print #4, c

    Close #4

    Text1.SetFocus

    End If

    If Text4.Visible = True And Len(Text4.Text) > 0 Then

    ……

    Open "d:\副本 内容.txt" For Append As #1

    Print #1, Val(nb.Text) & "(" & Val(Text2.Text) - 1 & ")" & Text4.Text

    ‘text4.text为特殊情况与文字问题录入的窗口

    Close #1

    Open "d:\副本 數字.txt" For Append As #2

    Print #2, Val(nb.Text) & "(" & Val(Text2.Text) - 1 & ")" & "无"

    Close #2

    Open "d:\副本 内容" & no.Caption & ".txt" For Append As #3

    Print #3, Text4.Text

    Close #3

    Open "d:\副本 数字" & no.Caption & ".txt" For Append As #4

    Print #4, "无"

    Close #4

    4) 数据导出

    新建FORM3,命名为“导出区”,保存同时进行备份(详见“操作流程”中1.6)。

    以下代码实现临时缓存区内的所有内容进行备份:

    listnum = Form4.List4.ListCount

    Open "d:\副本 1号.txt" For Append As #1

    Print #1, Now

    Close #1

    Open "d:\副本 2号.txt" For Append As #2

    Print #2, Now

    Close #2

    For i = 1 To listnum

    Open "d:\副本 1号.txt" For Append As #3

    Print #3, Form4.List3.List(i) ‘备份问题选项临时存放区

    Close #3

    Open "d:\副本 2号.txt" For Append As #4

    Print #4, Form4.List4.List(i) ‘备份机械码临时存放区

    Close #4

    Next i

    以下代码实现保存问题选项的功能(与机械码保存相同):

    Command4_Click ‘对临时缓存区内的所有内容进行备份

    Label3.Caption = ""

    listnum = Form4.List3.ListCount

    Dim bata(80000) As String ‘储存所有问题的选项结果

    Dim x(80000) As String ‘x、y分别储存Excel文档的保存坐标

    Dim y(80000) As String ‘记录切分点

    Dim z(80000) As Single

    If Text1.Text = "" Or Text2.Text = "" Then

    a = MsgBox("无效路径!", 256)

    Exit Sub

    End If

    For o = 0 To listnum

    bata(o + 1) = Form4.List3.List(o)

    Next o

    Set ExApp = CreateObject("Excel.Application")

    Set ExApp = New Excel.Application

    Set ExBook = ExApp.Workbooks.Open(Text1.Text)

    Set xlsheet = ExBook.Worksheets("sheet1")

    ……

    For la = 1 To listnum

    On Error Resume Next

    xlsheet.Cells(Val(y(la)), Val(x(la))).Value = Mid(bata(la), z(la) + 2)

    Next la

    Label3.Caption = "done"

    ExApp.ActiveWorkbook.Save

    ExApp.Workbooks.Close

    ExApp.Quit

    5) 问卷数据录入内容的保存与修改

    新建FORM4,命名为“临时收录区”,用于支持数据的保存、修改。

    以下部分实现“删除直接改正法”的“删除”按钮:

    On Error Resume Next

    List1.RemoveItem (List1.ListIndex)

    List2.RemoveItem (List2.ListIndex)

    List3.RemoveItem (List3.ListIndex)

    List4.RemoveItem (List4.ListIndex)

    以下部分实现“删除直接改正法”的“插入”按钮:

    Private Sub List3_Click() ‘问题选项临时存放区

    Text3.Text = 3

    List1.ListIndex = -1

    List2.ListIndex = -1

    List4.ListIndex = -1

    End Sub

    Private Sub List4_Click() ‘机械码临时存放区

    Text3.Text = 4

    List1.ListIndex = -1

    List2.ListIndex = -1

    List3.ListIndex = -1

    End Sub

    Private Sub Command4_Click() ‘添加修改內容(注意:第一个格子不能修改)

    a = InputBox("输入修改内容")

    If Len(a) = 0 Then

    Exit Sub

    End If

    If Text3.Text = "1" Then

    List1.AddItem a, List1.ListIndex + 1

    End If

    If Text3.Text = "3" Then

    List3.AddItem a, List3.ListIndex + 1

    End If

    If Text3.Text = "4" Then

    List4.AddItem a, List4.ListIndex + 1

    End If

    End Sub

    Private Sub Command6_Click( ) ‘添加修改内容(注意:仅能修改第一个格子)

    a = InputBox("输入修改内容")

    If Len(a) = 0 Then

    Exit Sub

    End If

    If Text3.Text = "1" Then

    List1.AddItem a, 0

    End If

    If Text3.Text = "3" Then

    List3.AddItem a, 0

    End If

    If Text3.Text = "4" Then

    List4.AddItem a, 0

    End If

    End Sub

    6) 问卷录入的安全

    新建FORM5,命名为“临时休息区”,用于录入人员在录入时的临时休息。临时休息区一但激活会关闭所有其他窗口,解除需要密码(详见“操作流程”中1.7)。

    以下代码实现临时休息区:

    Private Sub Command1_Click()

    If Text1.Text = "abcdef" Then ‘密码为abcdef

    Form1.Visible = True

    Form2.Visible = True

    Form4.Visible = True

    Form5.Visible = False

    End If

    Text1.Text = ""

    End Sub

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

    ‘拒绝常规关闭(与录入区防关闭的代码相同)

    Cancel = True

    End Sub

    2.3 先行系统的判断、绘图模块(基于PYTHON)

    先行系统的录入部分组装完成后,我想起新学的PYTHON语言拥有有高效的、优秀的matplotlib库绘图能力与良好的数据处理能力,采用PYTHON进行统计学处理能提高统计学处理的速度,同时降低代码编写时的错误发生率。

    首先进行编写的是排除人工填写部分,人工填写部分的内容之间存在較大差异性,因此先行系统对这部分数据不自动进行统计学处理。判断后的结果,均以文本文档形式(后缀为“.txt”的文件,简称TXT)保存。

    以下代码实现判断是否需要进行自动绘图:

    a=str(0) #不是为0

    b=str(1) #是为1

    q=open("1.txt",'r')

    for line in q:

    s=line

    t=s.split()

    if (t[0][0].__contains__("(")) == True:

    t1=open("2.txt",'a')

    t1.write(b+"\n")

    t1.close()

    if (t[0][0].__contains__("(")) == False:

    t2=open("2.txt",'a')

    t2.write(a+"\n")

    t2.close()

    q.close()

    绘图部分以TXT为媒介,结合之前的判断内容与后续添加的内容进行科学绘图。

    以下代码实现自动绘图:

    cnames = [ #绘图颜色(无黑色和不易辨别的颜色)

    '#F0F8FF',

    '#00FFFF',

    '#7FFFD4',

    ……]

    panduan=[] #判断是否需要自动绘图

    cn=[] #所有问题的选项结果

    que=[] #问卷的问题

    choose=[] #问卷题目的选项

    huancun1=[] #缓存区1

    huancun2=[] #缓存区2

    huancun3=[] #缓存区3

    qunub=0 #问题数量

    st1=open("2.txt",'r')#读取判断表

    for line in st1:

    s=line

    t=s.split()

    panduan=panduan + t

    st1.close()

    t=""

    s=""

    st2=open("cn.txt",'r') #读取录入的中文

    for line in st2:

    s=line

    t=s.split()

    if len(huancun1)

    huancun1=huancun1 + t

    if len(huancun1)==len(t):

    cn.append(huancun1)

    huancun1=[]

    st2.close()

    t=""

    s=""

    st4=open("que.txt",'r') #读取问题

    for line in st4:

    s=line

    t=s.split()

    que=que+t

    qunub=int(qunub)+1

    st4.close()

    t=""

    s=""

    st5=open("1.txt",'r') #读取问题的选项

    

    for line in st5:

    s=line

    t=s.split()

    if len(huancun3)

    huancun3=huancun3 + t

    if len(huancun3)==len(t):

    choose.append(huancun3)

    huancun3=[]

    st5.close()

    del s,t,line,huancun1,huancun2,huancun3

    import matplotlib.pyplot as plt

    import matplotlib as mpl

    from matplotlib.font_manager import FontProperties

    for i in range(qunub):

    savename=i+1

    tit=str(i+1)+"."+que[i]

    cn1=cn[i]

    pan=panduan[i]

    labels=[]

    inside=[]

    if pan=="0": #pan为1或其他字符,则不需画图

    ……

    for s4 in range(len(labels)): #对选项进行折叠,防止问题过长超出画布

    labels[s4]=labels[s4]+'('+inside[s4]+'人)'

    if len(labels[s4])>15:

    zz=len(labels[s4])

    for n in range (10,zz+1,10):

    labels[s4]=labels[s4][:n]+'\n'+labels[s4][n:]

    ……

    pie=plt.pie(inside,labels=labels,autopct='%1.2f%%',colors=cnames)

    #設置为绘制饼图,显示百分比

    ……

    a.set_size_inches(18.5, 10.5) #设置画布大小

    a.savefig('图表/'+str(savename)+'.png',dpi=90)

    a.show()

    以上海市xxx小学的数据为例,成功的导出了录入数据与统计学图表,软件的测试获得了成功(详见“操作流程”、“图表”文件夹)。

    3 结束语

    本软件界面操作简洁,无需太多计算机方面的知识即可掌握操作方法。

    软件运行快捷,有效的提高了问卷录入的速度;基层使用者大多数熟悉Excel的基本操作,对于数据的管理提供了便利,也减低了数据管理对使用者的难度。充分利用了VB的界面设计、PYTHON的绘图能力与Excel的数据移植性方面的优势,与现有的许多的问卷录入软件不支持中文相比,本软件几乎完美

    地支持中文。有关闭密码,无法通过常规方法关闭,提高了录入的安全性。因此,该软件的适用范围较为广泛,有较大的使用前景和推广价值。

    总之,通过先行系统进行数据录入及统计学处理,可高效完成数据采集和管理工作,大大节约了纸质问卷录入时间与确保录入时的安全,软件后续数据进行科学管理和统计分析,便于社会调查最终顺利实施。

    参考文献:

    [1] 范荫恒.《物理化学实验》数据处理系统软件的开发及应用[J]. 计算机与应用化学, 2005(11):1066-1069.

    [2] 孔玉. 临床试验数据管理软件的开发与应用[J]. 第二军医大学, 2007(63).

    [3] 庞胜利. Python环境下用pyExcelerator操作Excel[J]. 电脑编程技巧与维护, 2009(20):48-49,64.

    [4] 魏绍蓉. 基于Visual Basic与Excel相结合的问题研究[J]. 青海师范大学学报:自然科学版, 2010(1):67-69.

    [5] 罗隆福. 基于VB的电力机车牵引变压器分析软件开发[J]. 湖南大学学报:自然科学版, 2011(7):43-47.

    [6] 陆健. 临床试验电子化数据管理与统计分析系统的开发及应用[D].上海: 第二军医大学, 2012.

    [7] 孙玉环. 基于EpiData与SAS系统的纸版问卷数据录入质量控制技巧[J]. 中国卫生统计, 2012(4):607-608,611.

    [8] 李潇. 基于excel的数据管理及其在公共卫生领域内的应用[J]. 中国卫生统计, 2014(6):1084-1086.

    

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2024/12/23 6:59:38