連玉君 (中山大學,[email protected] , 主頁:lianxh.cn)
陳鑫梅 (暨南大學,[email protected] )
特別聲明: 本文部分內容摘譯自以下文章:
- Orozco, Valerie, Christophe Bontemps, Elise Maigne, Virginie Piguet, Annie Hofstetter, Anne Marie Lacroix, Fabrice Levert, and Jean-Marc Rousselle. 2018. “How To Make A Pie: Reproducible Research for Empirical Economics & Econometrics.” Post-Print. 2017. -PDF1-,-PDF2-
- Michael S. Hill. In Stata coding, Style is the Essential: A brief commentary on do-file style
連享會 - 效率分析專題,2020年5月29-31日
不知大家是否有如下經歷:
- 作爲論文作者: 收到審稿意見,要求大幅修改 (e.g., 更新一年的數據)。然而,在電腦了找了一上午,也沒有找到三個月前跑回歸時的 dofile。
- 作爲導師: 繁忙的 6 月過去了,學生們都去投行了。我們靜下心來,把 1-2 篇優秀的碩士論文拿出來修改,準備投稿。卻發現當時學生並沒有把原始數據和代碼留下來,而且,學生的郵件回覆說:「老師,我換了新電腦,以前的文件都沒了,……」。此時,你開始猶豫要不要投稿。你不知道論文中是否有「刻意追星」行爲,你更擔心外審意見回來後,你該如何對着學生的論文另起爐竈地跑一次迴歸?
- 作爲合作者: 你的合作者想了解一下你的實證分析過程,以便確認一些關鍵環節的處理是否妥當。然後,你們視頻通話,你用了一上午的時間給他演示如何一步一步「點菜單」,以便得到你想要的結果。期間,你不停地重試,回憶……,因爲,你其實也很難記清楚當時你點了哪些奇怪的「按鈕」,然後就得到了那些看起來還不錯的結果。
如果你經歷了上述囧境,但仍然像「寒號鳥」那樣心存僥倖,那你的痛苦歷程其實才剛剛開始。
本文便是綜合了一些前輩們的經驗,爲大家分享一些基本的工作原則,以便日後能夠做「可重複的研究」。好處在於:一方面,我們能避免上述窘境,另一方面,也是更重要的,你的團隊會因此形成「知識積累」:團隊新成員總能夠在老成員的工作基礎上快速跟進;作爲信息樞紐的導師,也更容易組織大家分享彼此的新知,形成良好的團隊協作氛圍。 當然,從更爲高大上的角度來講,你若通過 - Harford Dataverse - https://dataverse.harvard.edu/dataverse 之類的網站公佈原始數據和程序,對於推廣研究成果,提高論文的引用率也會有很大的幫助,你也會因此而結識一批志同道合的同仁 (ps, 「連老師的鏈接」 頁面提供了很多可以獲取重現論文資料的網站的鏈接。微信用戶可以點擊底部 「閱讀原文」 查看)。
在此前的直播課「我的特斯拉-實證研究設計」 (課程主頁:https://gitee.com/arlionn/Live) 中,我就專門花了 10 幾分鐘的時間介紹可重複研究的重要性,以及如何重現論文,如何獲取重現論文的數據和程序等問題。
1. 簡介:何謂可重複性研究 ?
地質學家約翰·克拉伯特 (John Claerbout) 將「可重複研究」定義爲“其他科學家複製 (論文) ”的可能性。
Hamermesh (2007) 建議區分兩個概念:「純複製」 (“pure replication”) 和「科學複製」 (“scientific replication”):
- 「純複製」 是指幾乎完全複製手頭研究的能力,主要用於驗證。
- 「科學複製」是指在其他數據庫上重複使用現有的研究材料,並將其視爲穩健性測試或拓展原始研究工作。
對於許多研究項目來說,如果該項目的作者爲所有其他研究人員提供了用以完全重現論文結果的所有資料 (數據和程序),則該項目被認爲是可重複的。
當然,本文的目的不是爲了辨析這些定義,我們更關注的是與這些概念相關的實際問題。我們的目標是通過提供建議,方法和工具來提高研究的可重複性。
先前的論文試圖將可重複性研究的概念界定爲一套適用於特定情況和軟件的精確規則或原則 (Gentzkow & Shapiro, 2014; Sandve et al. , 2013; Hinsen, 2015) 。 我們僅提出三個主要和簡單的原則,以從更廣泛的意義上增強研究的可重複性。這些原則是:
- 合理安排研究工作
- 寫代碼的良好習慣
- 自動化輸出
簡言之,「良好的寫代碼習慣」可以保證你的代碼具有可讀性、易讀性,這便於你的合作者與你協作修改和完善代碼,也有助於你日後更新這些代碼。「自動化輸出」則可以保證從計量軟件到文字排版軟件之間的無縫連接,一方面節省了體力,另一方面則減少了編排過程中導致的錯誤。
連享會直播 - 生存分析 (Survival Analysis) 專題
主講嘉賓:王存同教授 (中央財經大學)
2020年6月6日,詳情
2. 合理安排研究工作
一個研究項目可能是一個複雜的過程,Long (2009) 將其設定爲一個週期:計劃、組織、計算、記錄。項目之初,計劃相當籠統,隨着項目的進行而變得更加精確。某些階段可以順序執行,而其他階段則可以重疊。因此,最好在項目開始時考慮並計劃組織。
你可以列一個日程表,也可以畫一個思維導圖。總之,要做到心中有數,避免過度自信和過度拖延。
2.1 組織任務和文檔
管理項目的一種好方法是預先了解項目的所有任務及其內容、成果、組織和目標。瞭解所涉及的不同人員及其在項目和任務期限中的作用。安排工作,記錄已完成的任務,放棄的方向,新方向等,文件是關鍵要素,文件的缺失將導致研究無法重現。
需要說明的是,最好建立起「版本控制」的理念,也就是說,在修改文稿和代碼的過程中,可以將關鍵版本保留下來,而不要始終都只在一個版本上進行。這樣,日後回顧起來,就比較容易瞭解到自己走過哪些彎路,哪些工作受限於當時的條件無法推進,但可以留待日後進行;哪些工作是因爲犯了低級錯誤而需要另起爐竈,……。這些經驗的積累可以保證日後的研究工作儘量少犯同類錯誤,而有些在當前研究過程中被暫時拋棄的主題也可能成爲後續研究的重要選題來源。
A. 從便籤到任務管理系統
對社會科學研究者而言,傾向於將待辦事項寫在筆記本上。然而,從可重現的角度來看,電子文檔優於紙質文檔。然而,在團隊協作中,協作者互動相當普遍的,簡單工具無法用於記錄互動和每個人的筆記。電子實驗室筆記本 (ELNs) 是記錄和管理筆記最爲普遍的方式。目前 Evernote, OneNote 和 Etherpad 應用最爲廣泛,它們都能跨平臺同步筆記。
對於國內用戶而言,印象筆記、有道雲筆記、爲知筆記都是不錯的選擇,筆者常用的是「有道雲筆記+ VScode + Typora 編輯器」。我們認爲,選擇一個雲筆記的基本原則如下:
其一,要能跨平臺實時同步,這樣你就可以在手機上、電腦上、Ipad 上隨時記錄你的想法;
其二,要能很快捷地分享筆記給團隊成員;
其三,最好是一款免費的、由大公司提供的軟件,前者保證了我們的所有成員都可以公平地協作,後者的重要性不言而喻;
最後,最好能支持 Markdown 語法,這樣就可以寫出包含數學公式、圖表和代碼塊的漂亮的筆記,也方便日後轉換爲 Word,PDF 和幻燈片文檔。有關 Markdown 的介紹參見 https://gitee.com/arlionn/md。
任務管理系統 (TMS) 爲更通用的協作式和集中式任務組織提供功能。 TMS 將每個任務用一張包含描述等信息的卡片呈現,可將任務分配給合作者,或將其移到,“進行中”和“完成”分類項,也可給任務添加截止日期。
編者注: 對於經管類研究者而言,上面這個建議可以忽略。我們曾經是用了一段時間 「碼雲」- https://gitee.com/ ,用 看板 進行任務管理,但最終無疾而終。原因在於,多數成員很不習慣這種方式 (非工科的都不太習慣,=),加之國內的微信和微信羣實在是太高效。
B. 從註釋到任務文檔
記錄任務應當被看作第一要務。
項目進行期間,應計劃並實施定期更新,以免丟失任何的信息。從概念上講,任務文檔由對要做的事情,所涉及的人員,計劃的任務及其狀態 (要做,進行中或已完成) 的簡短描述組成。
- 任務中無法解釋的信息 (例如代碼) 也應在任務文檔中記錄:有關項目的一般選擇 (假設、建模,研究人羣等) 和可能會影響結果的技術規範。
- 程序也需要文檔化,大多數程序可以嵌入代碼中。然而,技術日新月異,如果計算機環境發生變化,則代碼執行可能會發生變化。因此,對研究程序進行文檔記錄不僅限於程序文檔,還必須確保詳細解釋整個工作流程,包括描述計算環境 (如計算機的操作系統、硬件配置、所用統計和軟件的版本、外部命令或包的版本等)。
2.2 管理文件夾
大多數情況下,研究者會以不同的個人風格管理文件夾。我們主要關注文件管理的兩個方面:目錄結構和命名方法。
目錄結構旨在幫助找到需要的元素 (代碼、數據、輸出) ,這在時間跨度長的項目中尤其重要。在構建項目目錄結構時,可以使用兩種指導思想:文件夾應該包含相同類型的同類元素 (數據、程序、文本、文檔) ;明確區分項目的投入和項目的產出。我們在圖 1 中提出了一個簡單的目錄結構,非常類似於 Gentzkow & Shapiro (2014) 的目錄結構。
下圖是連老師 RDD 課件的目錄結構:
你可以可以到 連享會 - 經典論文重現主頁 - Wikis,網址爲:https://gitee.com/arlionn/paper101,查看這篇論文的重現資料 目錄結構。
如下是連老師的幾個直播課的相關課件和目錄結構 (網址:https://gitee.com/arlionn/Live):
另外,輸出可以根據生成它的程序的名稱命名,並在後面加上後綴。這個簡單的規則允許快速定位文件。例如,程序 stats_desc.do 輸出的結果命名爲 stats_desc_out.xlsx。文件命名要儘可能簡短,根據 Long (2009) ,我們建議將文件或文件夾名稱中使用的字符限制爲 a-z、A-Z、0-9 和下劃線,也可以視情況在文件名末尾加上版本信息 (v1, v2, v3)。
2.3 跟蹤工作流程
目前,有許多方法來表示工作流程,就像有許多方法來進行研究一樣,但是在實證研究中的任何項目都有一個通用的全局結構,遵循圖 2 左邊顯示的文件的順序創建。爲了使整個研究項目具有可重複性,所有文件、所有鏈接和整個工作流程都應該儘可能清晰和明確。這個過程對於研究者和“陌生人”理解程序 (圖 2 中的圓圈) 和數據 (矩形) 是如何關聯的,程序之間是如何關聯的,以及它們的運行順序是非常關鍵的。
管理工作流程有多種方法。一個解決方案是記錄整個工作流程並生成一個圖表,如圖 2 所示。存在不同的工具來創建、管理和圖形化地可視化工作流。另一個想法是使用命名約定。例如,Chuang 等人 (2015) 建議在程序名稱前放置一個數字,指示執行順序,如圖 3 (改成代碼樣子) 所示。這就是 Long (2009) 所說的“運行順序規則”。
當然,很多情況下你也無需把問題搞的這麼複雜,下面是連老師常用的文件命名方法:
- 每個計量專題對應一個 dofile 和一個同名的文件夾,如「B4_RDD.do」與【B4_RDD】對應,而後者有進一步包含五個子文件夾,以便分類存儲數據、參考文獻和輸出結果等不同類型的文件。
2.4 Handling files 處理文件
毫無疑問,好的文件管理能提高研究項目的可重複性,然而,隨着項目規模、合作者和時間的增加,要求改變文件處理策略以克服三個主要問題: 文件應該如何共享?應該如何比較文件和管理版本?在撰寫聯合論文時,研究人員應該如何合作?
目前,文件共享有多種方式。比如,你可以註冊一個「堅果雲」賬號,這樣就可以與你的合作者共享一個文件夾,你們兩個寫的東西都會被自動傳到雲端,然後再同步到你們彼此的電腦上。對於完成初稿後的反覆修改階段而言,這種共享方式非常方便 (不用每天不停地通過微信或郵件傳送文件了)。
不過,「堅果雲」的免費版本只允許你與五個人協作,否則就需要付費。價格不高,但對於很多習慣了吃免費大餐的用戶而言,付幾十塊錢購買一個優質的服務仍然像割肉般痛苦。
若是使用 Markdown 寫初稿或研究設計,可以使用「有道雲筆記」的 雲協作 功能。反覆幾個來回,定稿後,可以使用「Typora 編輯器」將 Markdown 文檔轉換成 PDF 或 Word 文檔。
備份文檔很重要,應該不用多言。備份相對比較方便。我目前使用兩種方式:
- 一是「堅果雲」,只需右擊需要備份的文檔,依次選擇「發送到(N)」→「堅果雲」。
- 二是「百度雲盤」,右擊某個文件夾,選擇「自動備份該文件夾」。
3. 良好的代碼寫作習慣
對於許多人來說,任何一段代碼的特徵都能被計算機理解並加以執行,計算出能反映作者意圖的明確而正確的指令 (Gentzkow&Shapiro,2014) 。然而,在可重複性研究方面,代碼不僅需要正確運行,它應該以清晰的方式編寫,以使人們可以理解。
如下是一些 基本建議:
- 所有的操作 (包括: 數據處理、繪圖、迴歸分析、結果輸出等) 都要記錄在 dofile 中,儘量不要手動處理
- 每個項目 (每篇論文) 一個文件夾;文件分類存放,文件儘可能按照特定規則命名
- 每天實時保存的是 dofiles,而不是 數據文件
- 多加註釋,以便增強代碼的可讀性
- 注意排版,保證美觀的同時,也便於查錯
這裏,先提供一個虛構的「dofile 範本」,以便讓各位瞭解上述原則的基本精神。
- 首先,在 dofile 的開頭,標明瞭文件的生成日期、作者、作用等;
- 其次,在「A. 基本設定」部分用全局暫元
global
定義了文件的存儲路徑和子文件夾的名稱簡寫,以便後續將不同類新的文件分門別類地存放起來; - 再次,D#.xxx,S#.xxx,R#.xxx 等部分依次爲數據處理、統計分析和迴歸分析等內容。如此以來,即使 dofile 寫的很長,仍然可以通過 Ctrl+F 快捷鍵快速搜索關鍵詞定位。
- 最後,值得注意是,我們頻繁地使用了
local
和global
,尤其是【R. 迴歸分析】部分。這種做法好處很多,比如,代碼的結構看起來很清晰;很容易修改,只需在定義暫元的地方統一做一次修改即可,這可以大幅降低出錯的概率;代碼變得很簡潔,可讀性自然就提高了。
*------------------
*- 一個 dofile 範本 www.lianxh.cn
*------------------
* Version 1.1, 2020/5/10 15:04
* Author: 連家大公子
* 目的:分析家庭收入對子女學習成績的影響
*-A. 基本設定
global path "D:\myPaper\Income_Mark" //定義項目目錄
// 需要預先在生成子文件夾:data, refs, out, adofiles
global D "$path\data" //數據文件
global R "$path\refs" //參考文獻
global Out "$path\out" //結果:圖形和表格
adopath + "$path\adofiles" //自編程序+外部命令
cd "$D" //設定當前工作路徑
set scheme s2color
*-核心參考資料 (參考文獻和文檔都存放於 $R 文件夾下)
shellout "$R\Safin_Federer_2005_Aust.pdf"
*-D1. 數據導入
import excel using "$D\Income_Mark.xlsx", first clear
save "_temp_" // $D\ 可以省略,應爲當前工作路徑就是 $D
// 如果原始數據文件不大,此步驟可以省略
*-D2. 數據處理
gen ……
winsor2 ……
……
save "data_dealed.dta", replace
*-S1. 基本描述性統計分析
// 如果數據處理部分未作更新,可直接這裏進行後續分析
*-----表x:基本統計量-------
use "data_dealed.dta", clear
local v " " //填入變量名
local s "$Out\Table1_sum" //存儲的文件名(或路徑\文件名)
logout, save("`s'") excel replace: ///
tabstat `v', stat(mean sd p50 min max) f(%6.2f) c(s)
*-----表x:相關係數矩陣-------
local v " " //填入變量名
local s "$Out\Table2_corr" //存儲的文件名(或路徑\文件名)
logout, save("`s'") excel replace: ///
pwcorr_a `v', format(%6.2f) //star(0.05)
*-S2. 分組統計分析
use "data_dealed.dta", clear
*-----表x:組間均值差異檢驗-------
local v " " //填入變量名
local s "$Out\ttable2" //存儲的文件名(或路徑\文件名)
logout, save("`s'") excel replace: ///
ttable2 `v', by(variable) format(%6.2f)
*-R. 迴歸分析
use "data_dealed.dta", clear
global y "Mark" //被解釋變量
global x "Income" //基本解釋變量
global z "edu_Dad edu_Mum Age##Age ……" //基本控制變量
global w "i.year i.industry i.race" //虛擬變量
*global opt ", vce(robust)"
global opt ", vce(cluster industry)"
reg $y $x $opt
est store m1
reg $y $x $z $opt
est store m2
reg $y $x $z $w $opt
est store m3
*-----表x:迴歸結果-------
local s "using $Out\Table3_reg.csv" //執行時包括這一行會輸出Excel表格
local m "m1 m2 m3"
esttab `m' `s', nogap compress replace ///
b(%6.3f) s(N r2_a) drop(`drop') ///
star(* 0.1 ** 0.05 *** 0.01) ///
addnotes("*** 1% ** 5% * 10%") ///
indicate("行業效應 =*.industry" "年度效應 =*.year")
事實上,你若能在開始時遵守上述基本原則,就會慢慢發現它的好處遠遠大於你花費在排版上的成本。久而久之,你也會形成自己的代碼風格。我看到很多朋友和學生的 dofile 大致都長成下面這個「連氏 dofile」的樣子,一點也不覺得奇怪,因爲很多人都是從我這裏獲取了課件,開始學習 Stata,然後又將這些課件作爲模板移植到自己的論文中去的。
前文提到的 B4_RDD.do 文檔的基本設定如下
下面,着重解釋一些最重要的原則。
3.1 實時保存 dofile 而不是數據文件
有些人在下班前喜歡把當天處理好的數據另存一份,這是個非常糟糕的習慣!
我的建議是:保存 dofile,而不是數據文件!
原因很簡單,一個 dofile 只有幾 k 或幾十 k,但數據文件往往很大。更重要的是,如果保存了太多版本的數據文件,隨後會導致嚴重的混亂,你的「可重複研究」基本上是無法保證的。
你若按我上述提供的模板來寫 dofile,其實只需要保持 import xxx.xlsx
這條語句,就可以快速導入數據。後續對數據所進行的所有處理動作都完整地記錄在 dofile 中,容易查錯,也容易提供給他人,以便進一步跟進後續研究。
3.2 空格和註釋語句
Stata沒有空格和製表符的限制,爲了讓代碼更加美觀和易讀,要合理使用空格和縮進。借用 J.Scott Long (2009) 的例子說明空格的重要性:
rename k12_unique_id sid
rename class_unique_id class_id
rename teacher_name teacher
*或者這樣
rename k12_unique_id sid
rename class_unique_id class_id
rename teacher_name teacher
//可以看到後者更直觀。
縮進對代碼的跨行閱讀也有幫助,在視覺上更容易接受:
keep sid class_id teacher grade1 ///
grade2 grade3 pass
而不是
keep sid class_id teacher grade1 ///
grade2 grade3 pass
註釋在理解代碼方面起着至關重要的作用,通常而言有三種方法鍵入註釋。
*用於某行開頭,表示整行註釋!
//用在某行中的任意位置,該位置後的所有內容都是註釋。
/*可用於跨行註釋 */
至於暫元 (local
或 global
) 的使用,以及其他議題,可以參閱 連享會 (lianxh.cn) 上的推文,亦可掃描二維碼進入 連享會主頁,知乎推文,或者如下分類鏈接,查看公衆號歷史推文:
NEW!連享會·推文專輯:
Stata資源 | 數據處理 | Stata繪圖 | Stata程序
結果輸出 | 迴歸分析 | 時間序列 | 面板數據 | 離散數據
交乘調節 | DID | RDD | 因果推斷 | SFA-TFP-DEA
文本分析+爬蟲 | 空間計量 | 學術論文 | 軟件工具
4. 自動化輸出
可重複性研究將極大地幫助任何終端用戶 (“陌生人”或“未來的自己”) 使用和複製研究成果,所需的條件很簡單:每個階段都必須存在代碼,並且所有階段的所有代碼都應該提供對所有結果的訪問。在實證論文中,爲了生成結果表,通常做法是逐個報告結果,或者手動複製粘貼彙總結果。在 Stata 中,我們經常使用 esttab
, outreg2
等命令來實現結果的自動化輸出。
由於連享會此前已經分享過多篇有關「結果輸出」的文章,這裏不再贅述,僅列出相關鏈接,並做一些必要的補充。
5. 研究過程中的報告文檔 —— 幻燈片
其實,多數文檔是作爲研究過程中的「階段性彙報或交流」目的而產生的。例如,我的博士生每週會做一次工作進展彙報,要用幻燈片來呈現研究思路、實證分析結果等內容。
顯然,若每週做一份 PPT,必然會佔用大量時間和精力。所以,我們用「幻燈片」,而不是「PPT」來展示 (PPT 已經成爲基於 PowerPoint 製作的幻燈片的專有稱呼了)。有兩種方式可以快速生成這類漂亮、簡潔、幾乎不用額外花時間製作的幻燈片。
其一,可以把平時用 Markdown 記錄的文檔貼入 web.marp.app 網站,進而添加一些 ---
用於分頁即可。這樣,普通的 Markdown 文檔就被快速轉換成幻燈片了,可以輸出爲 HTML 或 PDF 格式。有關 Marp 的用法可以參見 「連玉君 - 五分鐘 Markdown」 (內含視頻、幻燈片樣本和原始 Markdown 文檔等),可以查閱 -Marp-進階1-;-Marp-進階2- 瞭解高階使用方法。
其二,若平時的討論筆記都記錄於「有道雲筆記」,則可以使用 分享 功能產生分享鏈接,進而將該鏈接貼入 Google 瀏覽器 (注意;請務必刪除多餘的文字,僅保留 https://note.youdao.com/
開頭的網址部分即可),點擊右上角的【演示按鈕】即可全屏呈現文稿內容。雖然效果不如幻燈片那麼好,但作爲平時的交流展示已經綽綽有餘了。
參考文獻
- Hamermesh, Daniel S. 2007. “Viewpoint: Replication in Economics.” Canadian Journal of Economics 40 (3): 715–33. [PDF]
- Michael S. Hill. In Stata coding, Style is the Essential: A brief commentary on do-file style
- Long, J. The workflow of data analysis using stata[M]. Stata Press, 2009.
- Orozco, Valerie, Christophe Bontemps, Elise Maigne, Virginie Piguet, Annie Hofstetter, Anne Marie Lacroix, Fabrice Levert, and Jean-Marc Rousselle. 2018. “How To Make A Pie: Reproducible Research for Empirical Economics & Econometrics.” Post-Print. 2017. -PDF1-,-PDF2-
關於我們
- Stata連享會 由中山大學連玉君老師團隊創辦,定期分享實證分析經驗。直播間 有很多視頻課程,可以隨時觀看。
- 你的頸椎還好嗎? 您將 ::連享會-主頁:: 和 ::連享會-知乎專欄:: 收藏起來,以便隨時在電腦上查看往期推文。
- 公衆號推文分類: 計量專題 | 分類推文 | 資源工具。推文分成 內生性 | 空間計量 | 時序面板 | 結果輸出 | 交乘調節 五類,主流方法介紹一目瞭然:DID, RDD, IV, GMM, FE, Probit 等。
- 公衆號關鍵詞搜索/回覆 功能已經上線。大家可以在公衆號左下角點擊鍵盤圖標,輸入簡要關鍵詞,以便快速呈現歷史推文,獲取工具軟件和數據下載。常見關鍵詞:
課程, 直播, 視頻, 客服, 模型設定, 研究設計,
stata, plus,Profile, 手冊, SJ, 外部命令, profile, mata, 繪圖, 編程, 數據, 可視化
DID,RDD, PSM,IV,DID, DDD, 合成控制法,內生性, 事件研究
交乘, 平方項, 缺失值, 離羣值, 縮尾, R2, 亂碼, 結果
Probit, Logit, tobit, MLE, GMM, DEA, Bootstrap, bs, MC, TFP
面板, 直擊面板數據, 動態面板, VAR, 生存分析, 分位數
空間, 空間計量, 連老師, 直播, 爬蟲, 文本, 正則, python
Markdown, Markdown幻燈片, marp, 工具, 軟件, Sai2, gInk, Annotator, 手寫批註
盈餘管理, 特斯拉, 甲殼蟲, 論文重現
易懂教程, 碼雲, 教程, 知乎
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-o2wOxg8Z-1589359284825)(https://fig-lianxh.oss-cn-shenzhen.aliyuncs.com/連享會跑起來就有風400.png “連享會主頁:lianxh.cn”)]
掃碼加入連享會微信羣,提問交流更方便