1裳食、代碼相關(guān)的建議
我們寫代碼的目的有1)清理數(shù)據(jù);2)轉(zhuǎn)換數(shù)據(jù)芙沥;3)從網(wǎng)頁上爬取數(shù)據(jù)诲祸;4)整合數(shù)據(jù);5)統(tǒng)計分析而昨;6)建模救氯;7)生成符合目標(biāo)格式的結(jié)果;8)畫圖歌憨;9)挖掘?qū)懪f代碼時的想法着憨、思考為什么當(dāng)下我們得到的結(jié)果與當(dāng)時不同等等。
1.1 代碼的可重復(fù)性使用問題
1务嫡、把所有可以自動化的東西自動化甲抖。
2、編寫一個從頭到尾執(zhí)行所有代碼的腳本心铃。
交互模式:數(shù)據(jù)構(gòu)建和統(tǒng)計分析應(yīng)該存儲在腳本中准谚。例如:Stata中的.do 文件,R文件中的.r 文件等等去扣。
3柱衔、不可重復(fù)的代碼如何處理?
譬如想生成一組固定的隨機(jī)數(shù),則這段代碼以后就不能重復(fù)使用唆铐;下次直接跑這段代碼哲戚,會導(dǎo)致隨機(jī)數(shù)會變,如果還覆蓋了原始隨機(jī)數(shù)艾岂,那么復(fù)原原始數(shù)據(jù)就很困難了顺少。
建議:
1)在不可復(fù)制的代碼之前加上注釋→以提醒之后研究此代碼的人不要跑注釋中提到不可復(fù)制的那段代碼;
2)如果用R語言澳盐,可以在生成隨機(jī)數(shù)之前加上set.seed(),其中括號內(nèi)的整數(shù)是可以隨機(jī)設(shè)置的令宿,其僅表示設(shè)置了一個隨機(jī)整數(shù)叼耙。
1.2 了解該語言的特性
不管用什么語言,最應(yīng)該一開始先了解該語言的數(shù)據(jù)結(jié)構(gòu)和各類參數(shù)的設(shè)置粒没。
1.3 用他人或自己構(gòu)造的函數(shù)來簡化代碼
在R和Python中調(diào)用包里的函數(shù)就是用他人構(gòu)造的函數(shù)來簡化代碼筛婉。
(之后爭取補(bǔ)充R語言寫函數(shù)的小技巧)
1.4給代碼加上清晰的注釋
在寫摘要的時候,要消除冗余癞松,記錄核心即可爽撒;以提高清晰度;描述文字不能過于抽象响蓉。如果注釋反而會增大理解難度硕勿,那么可以不寫。
2枫甲、變量名設(shè)置
2.1 除了臨時演算源武,應(yīng)避免使用無序字母直接給變量命名。
舉例:假如在某次的統(tǒng)計分析中想幻,我們把一系列變量命名為a粱栖、b、c脏毯、d等闹究;這樣處理看似簡單省時,但相對應(yīng)地會產(chǎn)生如下后果:在之后回溯代碼時食店,我們就無法理解當(dāng)時隨意命名的變量代表什么含義渣淤,會加大后續(xù)處理的時間成本。
2.2 用不同軟件處理變量時吉嫩,要注意命名規(guī)則都不同砂代,有的軟件會區(qū)分大小寫,有的軟件有變量名長度的限制率挣。
2.3 變量名要清晰簡明
清晰簡明的變量名不僅能夠幫助我們自己回憶當(dāng)時的命名邏輯刻伊,也可以幫助他人理解變量名的含義。可以利用縮小捶箱,或者英文單詞的前幾個字母來作為變量名智什。
2.4 規(guī)劃系列變量
如果是系列變量,則可以借助“_”來規(guī)劃系列變量的命名排列邏輯丁屎。
舉例:用R軟件計算跨年擔(dān)保網(wǎng)絡(luò)的統(tǒng)計指標(biāo)時荠锭,可以將細(xì)分年份納入變量名中。計算入度相關(guān)變量晨川,我們可以將變量名設(shè)置為indegree_17证九、indegree_18等;同時可以寫函數(shù)將變量批量命名共虑。
3愧怜、代碼和數(shù)據(jù)的管理
3.1 同任務(wù)下的數(shù)據(jù)管理
1、對同一批數(shù)據(jù)做數(shù)據(jù)分析妈拌、并相對應(yīng)地生成不同格式的文件時拥坛,要注意,系列代碼名尘分、數(shù)據(jù)名盡可能做到同類可比猜惋。
2、批量運行整個文件下的文件前培愁,要做檢查著摔。
3、我們在給數(shù)據(jù)集命名的時候可以加上時間定续,這樣做有什么好處呢梨撞?
舉例:某個數(shù)據(jù)地文件名里的時間是“220221”,但在文件夾中顯示的最后修改時間是“220321”香罐。則我們就要檢查是否存在數(shù)據(jù)和版本不對應(yīng)的問題卧波。
3.2 數(shù)據(jù)的規(guī)范化與主鍵
1、將清理過的數(shù)據(jù)存儲在具有唯一庇茫、不丟失鍵的表中港粱。
舉例:在合并多個年份的訪員編碼時,如果主鍵不唯一旦签,那么在后期處理sas7bdat文件時查坪,會造成數(shù)據(jù)錯位的現(xiàn)象。
2宁炫、在你的代碼管道中保持?jǐn)?shù)據(jù)的規(guī)范化偿曙,可以將粗?jǐn)?shù)據(jù)整理為由相應(yīng)主鍵連接而得到的一系列規(guī)范的子數(shù)據(jù),
4羔巢、數(shù)據(jù)集的自動化生成
4.1 用R語言合并同一個文件夾下的全部數(shù)據(jù)
library(rJava)
library(xlsxjars)
library(xlsx)
library(readxl)
library(data.table)
library(dplyr)
remove.packages("rJava")
Sys.setenv(JAVA_HOME='D:/Program Files (x86)/Java/jdk1.8.0_144/jre')
setwd('D:\\數(shù)據(jù)分析0612')
# 讀取該工作空間下的所有文件名
filenames <- dir()
# 初始化數(shù)據(jù)框望忆,用于后面的數(shù)據(jù)合并
data2 <- data.frame()
#通過循環(huán)完成數(shù)據(jù)合并
for (i in filenames){
# 構(gòu)造數(shù)據(jù)路徑
path <- paste0(getwd(),'\\',i)
#res <- c(res,path)
# 讀取并合并數(shù)據(jù)
data2 <- rbind(data2,read_excel(path = path))
}
5罩阵、文檔的版本
5.1 版本的管理
在寫技術(shù)文檔的時候,我們不太可能不做任何修改启摄、一遍寫完稿壁,故我們將報告的版本號整理在文檔名中。
舉例:修訂“最高學(xué)歷計算說明文檔”歉备。
我們將初稿命名為“最高學(xué)歷計算說明文檔_v1”傅是,往后版本可以記錄為v2、v3蕾羊。
一般來說喧笔,每做一次修訂就是一個version。假如涉及切換設(shè)備/或者處理完v2后龟再,隔了很久再處理下一個版本v3书闸,則可以對v2添加完成時間0603、0604等吸申,以防止出現(xiàn)多個v2梗劫,v3不知道應(yīng)該接在哪個v2后面享甸。
5.2 多人協(xié)作
假如一個文檔涉及多人協(xié)作時截碴,則可以將修改人的縮寫納入變量名中
舉例:多人合作完成“文本編碼技術(shù)報告”,修改人有W蛉威、G日丹、Q,各人都會對文件開啟修訂模式
第1版:W完成原稿蚯嫌,將報告命名為“文本編碼技術(shù)報告0630”哲虾;
第2版:G完成一遍修改,將報告命名為“文本編碼技術(shù)報告0702_G”;
第3版:假如在同一天择示,W也要完成一遍修改束凑。如果她是在“文本編碼技術(shù)報告0702_G”的基礎(chǔ)上修改的,則將報告命名為“文本編碼技術(shù)報告0702_G_W”栅盲;采用這種方式的話汪诉,下一個修改的人只用在“文本編碼技術(shù)報告0702_G_W”的基礎(chǔ)上修改就好了。如果她與G同步完成修改谈秫,即她是在“文本編碼技術(shù)報告0630”修改的扒寄,則將報告命名為“文本編碼技術(shù)報告0702_W”;采用這種方式的話拟烫,下一個修改的人則需要在自己修改前比對“文本編碼技術(shù)報告0702_G”和“文本編碼技術(shù)報告0702_W”這兩個文件有什么差異该编。
第4版:Q完成原稿,將報告命名為“文本編碼技術(shù)報告0705”?
?
參考文獻(xiàn)
1硕淑、Matthew Gentzkow,Jesse M. Shapiro,Chicago Booth and NBER.Code and Data for the Social Sciences: A Practitioner’s Guide.2014.
2课竣、數(shù)據(jù)格式和數(shù)據(jù)讀取?(20條消息) R語言——數(shù)據(jù)格式和數(shù)據(jù)讀取_devoteto的博客-CSDN博客_r語言數(shù)據(jù)格式
3嘉赎、R語言的高級數(shù)據(jù)結(jié)構(gòu)?附代碼|詳解R語言的高級數(shù)據(jù)結(jié)構(gòu) (baidu.com)