2021年9月6日

CQI365: 建立自己的日程筆記Daily log ,更好追蹤自己的生活


昨天你做了什麼?很快的可以想起來。上週做了什麼?要仔細想一想才想得起來。上個月的今天作了什麼?要查行事曆或者日曆,才能想起來。但是很多時候,我的日記記得不夠詳細,或者不夠有效率。頂多記一些想法或者重要的事。有些當下不覺得重要,但是後續想要回想卻怎麼也想不起來。面對這種狀況,該怎麼辦?


最好的幾決方案:「做日程紀錄」。但是記錄要怎麼做?要放在哪?我有幾個解決方案!

日曆活動記錄Daily Log:

過去我已經導入基於日曆的計畫與執行Time Blocking的方式,我的日程表原本就已經被我的計畫所填滿。因此只需要有意識的將正在做的事填寫進去,就可以記錄下工作與活動。這個作法呼應了TIme blocking的方式,也可以說是事後time blocking。不過有幾個點要特別強調:

  1. 即時紀錄事件:要記錄這種活動,強烈建議要每天做。依我自己經驗,過了一週後已經對當時的活動遺忘的差不多了!一週後再來寫,回憶的誤差通常大到自己無法接受。
  2. 貼上補充文件或連結:寫下活動標題,不代表再過一週或更久,自己還能瞭解這個活動的內容。因此盡量把活動的附加文件連結貼上去,事後回顧可以更清晰的知道當下的狀況。
  3. 補充細節:細節的補充強烈建議在其他的日記筆記中補充細節,但是針對這有些單純的單一活動,有時候也可以在日曆的活動上進行細節補充,讓自己可以更充分瞭解這個活動內容。


連結日程筆記Reflection Note

除了日曆上的活動記錄外,使用日記的方式進行記錄也是很重要的。相對日曆上得記錄比較著重時間導向,在日記上記錄比較適合呈現思考邏輯或與其他活動之間的連結。我的日記者主要以思考為主,因此不會以一天一篇記錄流水帳。在每日的紀錄上,可以記錄下當天產出的筆記或閱讀的素材連結,也可以提供未來參考之用。尤其是如果這類筆記或素才是橫跨很多天或者時間,而不適合單一時間記錄呈現的活動。

我目前整合使用Devonthink or Obsidian這類的筆記軟體來進行日記,可以直接把照片或檔案的連結貼上來當作附件。這樣就可以進一步把daily log 與日記以及附件整個連結再一起。


學而時習之

寫下daily log or Reflection,並不會在當下造成影響。正面的影響其實是在一段時間之後,當我們因為某些因素回顧的時候,可以順利找到當時思緒的邏輯與流程。有時候單純產出的筆記,如果沒在日記中與當時的場景結合,就會越來越脫離現實。後續的回顧也是Spaced Repetition的一個很好的體現。

 

See Also 

| CQI365 | 林軒名醫師 | 等待雨果 |: 整合HighlightsApp + Obsidian,建立效率的整合閱讀與標記流程

| CQI365 | 林軒名醫師 | 等待雨果 |: 利用三種住院病歷記錄概念,提升我們的專案能力

| CQI365 | 林軒名醫師 | 等待雨果 |: 使用Devonthink3.7取代Obsidian做筆記


2021年9月1日

CQI365: 如何使用python 執行Propensity score matching 研究

 #PropensityScoreMatch #Python #Statistics

最近開始整理之前的研究檔案,其中一個retrospective cohort study所收集到的實驗與對照組人數落差太大,對照組是試驗組的10倍以上。為了減少研究的落差,可以採用Propensity score matching的方式。

以下有兩個方法透過python來處理:

## method1:

參考:matched pairs in Python (Propensity score matching)

from sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import NearestNeighbors

def get_matching_pairs(treated_df, non_treated_df, scaler=True):
treated_x = treated_df.values
non_treated_x = non_treated_df.values
if scaler == True:
scaler = StandardScaler()
if scaler:
scaler.fit(treated_x)
treated_x = scaler.transform(treated_x)
non_treated_x = scaler.transform(non_treated_x)
nbrs= NearestNeighbors(n_neighbors=1,algorithm=’ball_tree’).fit(non_treated_x)
distances, indices = nbrs.kneighbors(treated_x)
indices = indices.reshape(indices.shape[0])
matched = non_treated_df.iloc[indices]
return matched
matched_df = get_matching_pairs(treated_df, non_treated_df)
Python code

這段程式碼使用sklearn的scalar先把數值標準化,在透過NearestNeighbors的方式,找到最接近的個案!可以直接拿來產出兩組,在進行後面的研究流程。

## method 2

參考:heart-propensity-score-matching.pdf

# python 
model = ‘treated ~ age + male +edu’ propensity = smf.logit(formula=model, data = df).fit() propensity.summary()

1. 這個方式,透過logit regression,產出一個針對’group’的預測數值。
2. 可以直接這個數值當作一個控制變因來使用!



## See Also :

如何使用python 執行Propensity score matching 研究 - CQI365 - Medium

CQI365: 透過Selenium 完成Google Form 自動填寫

 這幾個月公司每天都要上線填體溫與TOCC,但實際上每天關在家中哪裡都沒去,每天的TOCC都一樣。體溫基本上也都在正常範圍。為了不要每天填寫TOCC,因此我寫了一個script來Automate整個填寫過程。真的可以說,懶惰是進步的動力。

## 主要工具:Selenium。
Selenium 主要透過模擬瀏覽器,來完成一些網頁操作的任務。因此很適合操作性的網頁自動化。相對比爬蟲是在做抓取資料以提供後續分析,兩者不太一樣!

ps. 要透過selenium 來啟動瀏覽器,要注意一下使用的瀏覽器種類,並去該瀏覽器的網站下載driver。

### code:

from selenium import webdriver
import random
from datetime import datetime
year = datetime.now().year
month = datetime.now().month
day = datetime.now().day
driver = webdriver.Edge(‘C:/WebDriver/bin/msedgedriver’)
driver.get(‘https://docs.google.com/…’)
date_check = driver.find_elements_by_xpath(“//div[contains(@class,’quantumWizTextinputPaperinputContentArea exportContentArea’)]//input”)[0]
date_check.send_keys(year, month, day)
position_Check = driver.find_element_by_xpath(“//div[@class=’appsMaterialWizToggleRadiogroupEl exportToggleEl’ and @id=’i12']”)
position_Check.click()
code_check = driver.find_elements_by_xpath(“//div[contains(@class,’quantumWizTextinputPaperinputContentArea exportContentArea’)]//input”)[1]
code_check.send_keys(‘XXXXX’)
name_check = driver.find_elements_by_xpath(“//div[contains(@class,’quantumWizTextinputPaperinputContentArea exportContentArea’)]//input”)[2]
name_check.send_keys(‘XXX’)
travel_Check = driver.find_element_by_xpath(
“//div[@class=’appsMaterialWizToggleRadiogroupEl exportToggleEl’ and @id=’i51']”)
travel_Check.click()
contact_Check = driver.find_element_by_xpath(“//div[@class=’appsMaterialWizToggleRadiogroupEl exportToggleEl’ and @id=’i65']”)
contact_Check.click()
temeprature = str(round(random.uniform(35.8, 37), 1))
temperature_check = driver.find_elements_by_xpath(“//div[contains(@class,’quantumWizTextinputPaperinputContentArea exportContentArea’)]//input”)[5]
temperature_check.send_keys(temeprature)
submit = driver.find_elements_by_xpath(“//div[@role=’button’]”)[0]
submit.click()
driver.close()

## 封裝與自動化

最後將上述得程式封裝成exe檔,並透過window安排自動化排定執行時間。這樣就搞定了繁瑣的TOCC。



##See Also 

透過Selenium 完成Google Form 自動填寫 - CQI365 - Medium

年度熱門文章