python教育学_使用Python处理教育学领域的数据——以某篇期刊论文为例
Python是數據處理的常用語言,當然也可以用在教育學領域。下面以一篇期刊論文——為例,闡述使用Python處理教育學領域數據的思路和過程。為什么用這篇期刊文章呢,因為這篇文章的數據處理是我做的,比較熟,不用琢磨作者們的思路,也不用重新收集數據再復現,比較省事……
一、數據類型與處理目的
在教育學研究中,數據類型的分類如下:
訪談相關數據,以訪談得到的錄音、文本為主;
實證研究的數據,以問卷數據為主;
文獻相關數據,包括文獻題錄數據、文獻數據庫數據等;
學習行為數據,使用相關學習行為記錄設備、智能設備、手機APP等記錄得到的學習者的學習行為數據。
相應的,數據處理的目的包括如下幾個方面:
數據的編碼與轉換;
數據清洗,包括異常值、奇異值、缺失值的處理,數據格式統一等;
數據的分類計算、篩選、規整、合并等。
數據概覽,包括常規統計指標計算、數據分布、區間統計、對比圖表等。
數據處理是數據分析和定量研究的先導性工作,選取和合適的工具決定著研究效率。數據處理的工具很多,Excel、R、Python、MATLAB和其他數據處理軟件等。常規數據處理建議使用Excel,若涉及到批量、重復的處理多個數據文件,處理邏輯較為復雜,建議使用Excel自帶的VBA,R或者Python完成數據處理工作。作者對Python比較熟悉,所以本文使用Python舉例子。
在本研究中,數據類型是第3種、即文獻相關數據,數據處理的目的是數據清洗和數據的分類計算、篩選、規整、合并等,數據處理邏輯相對復雜,使用的是Python編程處理。不同的數據類型、數據處理目的需要不同的思路和做法,下文僅以本研究為例,闡述數據處理的過程。
二、數據處理思路
將本研究定義的世界一流大學(138所)和我國世界一流大學建設高校(42所)的發文數據從愛思唯爾的數據庫中下載下來,得到的數據如下圖:12個excel文件,后綴為.xls。
點開可以可以看到數據格式如下。
可以看到,excel的數據格式以不規則數據表的形式呈現,且每個excel中有多個sheet,每個sheet表征一所大學各個學科的發文數據,sheet的前幾行最關鍵的信息是大學名稱,下方數據表每行代表該所大學每個二級學科的發文特征。
每個sheet滑動到底部,可以看到每個數據表有330多條數據,每個Excel有幾十個sheet(每個sheet代表一所高校,包含該所大學2014-2019年在各個學科發文數據)。本研究的數據處理的目的是:對這些數據進行處理,以一級學科為行、各個大學為列進行整理、合并,為下面以學科發文結構為基礎的大學類型的聚類分析和接下來的建設評價做基礎,要實現這個處理目的當然也是手動復制粘貼,但是每所高校的一級學科的位置并不固定、需要處理的sheet和Excel文件過多,手動復制粘貼性價比不是特別高,所以本研究使用的處理方法是使用Python編程整理相應數據。
本文使用一級學科表征數據,將數據庫中涉及到的一級學科先提取出來,放置在一個.txt文件中。愛思唯爾數據庫將所有學科分為27個。
本研究共需要6個指標:Scholarly Output、Scholarly Output (growth %)、Citations Authors、Authors (growth %)、Citations per Publication、Field-weighted Citation Impact。
所有指標均在sheet的下方的數據表里,由于sheet格式不規則,假如不是特別精通pandas的話,推薦使用xlrd和xlwt讀寫這種不規則的excel表,其中xlrd讀取原excel表,xlwt生成新excel表。此外涉及到多個excel文件的循環讀寫,還需使用python自帶的os模塊。所以本研究用到的Python模塊如下。
import xlrd
import xlwt
import os
待處理數據分析完畢后,分析輸出數據的格式。從前面分析過程可知,需要輸出180所高校在27個一級學科上的表現,衡量方式以6項指標表征。可以看到這是一個三維數據。
為了在二維的excel表格中輸出三維數據,將高校設為縱坐標,一級學科設為橫坐標,同時在6個sheet中呈現反映各個高校的各個一級學科在6個指標中的表現情況,數據形式參見下文第三部分的數據處理結果。
分析到這里,數據處理的思路總結起來也是很簡單的。
三、數據處理過程
數據處理過程的核心思想是:按照輸出的數據格式循環處理每個輸入的sheet表。輸出的excel表有6個sheet,每個sheet代表一個指標。我的思路是分指標循環進行提取。由于數據處理代碼的復用性不高,在這里列舉偽代碼如下:
循環1:按指標循環:
循環2:按學校循環:
抽取各個學校的相應指標
再得到相應的數據后,使用xlwt,按照我們預計的格式,寫入到Excel中,得到我們的結果,代碼如下。
def data_excel(workbook, subject, school_subject, name):
sheet = workbook.add_sheet(name)
for i in range(len(subject)):
sheet.write(i+1, 0, subject[i])
# 生成每個學校的內容
ii = 1
for school in school_subject:
school_col = school_subject[school]
sheet.write(0, ii, school)
jj = 1
for col in school_col:
sheet.write(jj, ii, school_col[col])
jj += 1
ii += 1
print(name + '已完成')
return workbook
with open(r'data/發文表現情況整理/學科.txt','r') as f:
subject = f.read().split('\n')
dataPath = 'data/發文表現情況整理/data/'
path_type = ['abroad','china']
nameGroup = ['Scholarly Output','Scholarly Output growth','Citations','Authors','Authors growth','Citations per Publication','Field-weighted Citation']
for ii in range(2):
t= path_type[ii]
path = dataPath + t + '/'
workbook = xlwt.Workbook(encoding = 'utf-8')
for i in range(7):
school_subject = get_school_subject(i)
workbook = data_excel(workbook, subject, school_subject, nameGroup[i])
workbook.save(r'data/發文表現情況整理/result/result-{}.xls'.format(path_type[ii]))
print('\n\n')
好的,太長不看,直接看結果……
橫坐標是學科,縱坐標是高校,每個sheet是指標,已經達到了預期的數據處理目標,據說相對于手工處理而言,極大的提高了效率,對于一個曾經的工科學生的體會是,這些機械重復的事情為什么要自己做……
四、一些思考
本研究凝聚了作者們的大量心血和老師們的精心指導,在這里向他們表示由衷的感謝和敬意!數據處理只是本研究一個微小的方面,希望大家多多關注論文內容,多多拍磚。將這數據處理部分展現出來一方面是希望能夠回顧和總結做過的工作,現在回想起來這部分工作也并不復雜(都做完了哪還有覺得復雜的道理- -);另一方面也是希望梳理一下教育學的數據處理的類型和方法,以期為自己在將來的研究中提供一種“就這,這些數據處理我都能做”的錯覺,增強一點自己的科研自信心。
總結
以上是生活随笔為你收集整理的python教育学_使用Python处理教育学领域的数据——以某篇期刊论文为例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 创建netcdf_pyth
- 下一篇: 用python编程、假设一年期定期利率_