2012年10月29日 星期一

題目結構調整

為配合題目的顯方式,我把題目按照題型大致分成了6類:
  • 單選題
  • 單選填充題:單選題,同時部分選項包含開放填充格。
  • 複選題
  • 複選填充題:複選題,部分或全部選項包含開放填充格。
  • 填充題
  • 量表題組
前面五類每一題都視為一個整體,使用者在選擇時,只要選擇該題,整題的所有變數皆一併選擇。量表題組則可讓使用者視需要選擇部分子題或全選。按照這樣的特性,我把題目資料庫拆為「主題目、子題目、開放題、選項」四個table,以主題目為主軸,依不同的題型串連其他三個資料表。
經過幾天的測試,目前已完成題目詳細描述頁面的撰寫,頁面可依不同題型的需要以不同格式呈現題目,並可依不同題型產生加入購物車選項。目前頁面暫時仍以中英對照的方式設計,英文的部分由於沒有資料,所以暫時一片空白;不過未來還要看版面的安排,決定維持現狀或者讓兩者分家。

接下來將對樹狀結構及搜尋介面進行調整。

2012年10月23日 星期二

系統簡報後....

好一陣子沒有更新網誌了!
在上一篇「資料產生流程完成「對接」」之後,我陸陸續續的完成了spss、SAS 及 stata 的「資料定義程式」(未包含label及format)及打包下載功能。算是初步了完成整個預計的下載流程了。
10月初的研究人員會議,我展示了初步的成果。這樣data center的概念獲得老師們的肯定,這個案子也算是正式從我的個人規劃浮上檯面了。當然,系統的雛形並不完善,陸續還有很多功能待開發,老師們也提供了許多寶貴的建議,持續努力嚕!
今日工作進度:
搜尋介面及題組目錄增加選擇及刪除變數功能。使用者可點選條目前的checkbox選取變數,選擇後點選「加入購物車」即可加入變數;已選擇的變數前方會呈現打勾圖示,點選打勾圖示即可將選擇的變數移出購物車。不過樹狀圖在做任何操作後都會收折成最初的狀態,這樣似乎並不十分便利,有待修改javascript改善。
另外參酌會議中老師的建議,完成選擇樣本群功能介面,讓使用者可以選擇要下載哪一部份的樣本。但尚未確定要加入產生資料檔流程中的哪一個階段。此外,產生資料檔的選擇樣本群程序亦為撰寫。
接下來應該會著手調整題目呈現的結構。主要需調整複選題及態度量表的呈現方式。現行是以變數的方式呈現,因此複選題每個變數都是單獨的條目,態度量表每小題也都是單獨的條目,對使用者而言,除了很難了解題目的全貌之外,複選題需要每個選項逐一選擇也不方便。希望可以將複選題整合成一個條目整題同進退,態度量表則以兩層顯示,方便使用者檢視及選擇。 這部分的修正涉及後端資料庫結構的修正,調整完後,題目架構應該就可算是定案了,也可以開始整理歷年所有題目匯入。
    目前看來,題目的調整方向似乎與label、codebook的呈現方式差距越來越遠,也許必須拆成不同的table儲存,但這也會增加日後維護的難度及資料儲存空間。我還沒想清楚該如何調整。

2012年9月27日 星期四

PSID Data Center-資料下載

PSID Data Center的購物車也是利用樹狀結構呈現,如果選擇了多年的資料,樹狀圖的第一層是按照年代排列,第二層則顯示選擇了該年的變數清單。可以勾選變數刪除,亦可直接將整個購物車清除重來。或點選check out,產生資料表。
點選check out程序共有六個部分可進行設定:
Codebook type:可設定codebook的格式,共可選擇HTML, PDF, XML也可以選擇不要產生codebook。另外,還有一個相對的選項是「只產生codebook不輸出資料」不過我想應該不會有人勾選這個吧?!
 Data output type:可選擇輸出資料的格式包含ASCII Data with SAS/ SPSS/ Stata Statements, Excel檔, , SAS V9 Transport Data File共六種格式。不過這是單選提,所以一次只能選擇輸出一種格式。
Subsetting Criteria:可以提供你輸入一些條件語法,篩選變數,不過僅限購物車裡有選擇的變數。另外,語法採用SAS格式。這不禁讓我十分好奇背後的資料架構到底是什麼database?不過老實講,這樣的個開放格式讓使用者輸入語法篩選,背後勢必需要相當複雜而言僅的檢核程式,另外也增加了流程上出錯的機率,所以我目前開發的系統並不打算提供樣本篩選功能。
Subsetting of CDs and Family Members:可以選擇要輸出所有家庭成員的資料,或是指輸出小孩的部分。這應該是配合PSID樣本結構的特殊選項。
Compression Option:可以選擇是否要將相關檔案壓縮成一個zip檔。如果不選擇的話,下一步驟會將所有檔案個別的連結列出,可以一一下載。
Cart Options:可選擇是否讓目前選擇的這個資料檔公開。以及是否將下載資料的連結email到信箱一份。

全部選擇完畢後按submit就可以產生資料檔嚕!資料檔產生頁面處了下載檔案的連結外,也會顯示資料檔的基本訊息(這次選了幾個變數,包含多少樣本等等)。
另外就是兩點基本的注意事項嚕! 第一點告訴你資料檔會在七天後刪除。這句話也顯示了資料檔會在server上保留七天。另外就是,他還是強烈的建議你要下載完整的問卷檔或codebook,比較能夠看到全貌。

整個操作過程中,感覺網站的反應速度並不快,各項功能雖然不能說非常方便,但已經十分完整了。是一個非常值得觀摩學習的對象。

2012年9月24日 星期一

PSID Data Center-資料檢視

今天不講PSFD講一下PSID Data Center
原來,資料購物車的概念人家早就有了!而且也已經完成了。經老師的提點,我也去試用了他們的data center。基本上,我的概念與想法和PSID是相同的,所提供的功能和結果也大致相同;不過由於資料本身的特性不盡相同,加上一開始的設計理念差異,所以在產生資料的流程上仍有些許的差異。本篇先比較分析資料檢視的部分,產生資料將利用另一篇文章描述。

首先PSID的Data Center需註冊成為會員。沒有註冊會員並登入,雖然也可以瀏覽、選擇變數,但到了「結帳」的步驟仍然必須註冊會員。實際測試,若等到結帳時才登入或註冊會員,有時候網頁連線會不大正常。所以建議一開始就先登入會員。

在Data Center的首頁提供了file,  cross-year index及previous carts四個選項。file和cross-year index大致都是以樹狀結構展示題目,不同的地方在於file將歷年的題目全部放在樹狀結構中,而cross-year index則是將題目整合過,將訪問波次列於後面工勾選。我目前設計的結構比較接近cross-year index,但考量同一份資料檔不同的變數選選擇的時間範圍應該差不多,所以並沒有讓使用者於每個變數逐一勾選需要的年度,而是於產生資料檔的過程中,由系統分析受訪者所選的所有變數,取可下載年份的聯集讓使用者一次勾選。換句話說,我的設計是讓受訪者統一勾選資料檔的涵蓋年度,而非個別變數的涵蓋年度。
previous carts則是一個蠻有趣的設計,當你選擇完你的資料檔後,你可以選擇將資料檔公開,這樣別人就可以看到你的資料檔了,也算是一種共享吧!至於我設計的系統,目前暫時沒有這樣的規劃。當然日後還是看研究人員的需求嚕!如果希望留個記錄,再來研究該如何規劃吧!

展示題目的樹狀結構可能考量題目過於龐大的關係,是採用javascript的非同步通訊技術完成的。題目並不會在一開始全部載入,當某一層樹狀結構展開時,電腦才向server端要求載入這一層的題目資訊。但缺點就是展開時會有loading的時間。我目前由於測試的題目有限,所以並沒有這樣處理,而是將整個樹狀結構一次載入,未來再看隨著題組增加時的執行效率調整。

點選題目,會以彈出視窗的方式顯示該提的細節,包含簡單的次數分配、選項說明。我目前的規劃並沒有將次數分配包含於詳細說明當中,將來視研究人員的需要調整。

搜尋介面顧名思義,可以輸入關鍵字搜尋題目。另外可以勾選年度、資料類別等選項限制搜尋範圍。搜尋結果是以列表的方式呈現,可直接勾選加入購物車。



2012年9月21日 星期五

資料產生流程完成「對接」

其實這並不是今天的進度,只是前幾天都是抽空檔在寫程式,雖然完成了,也沒空上來寫日誌,所以就利用此篇文章統一交代一下目前的進度。
目前,資料選擇與下載的流程大致定案。流程如下:

使用者透過搜尋或樹狀圖瀏覽題目,並將有興趣的變數加入購物車。
檢視購物車
↓ 
產生合併資料
↓  
選擇下載年度
↓ 
選擇合併方式
↓  
產生檔案

其中,可在檢視購物車中看到所選擇的變數,也可以刪除不要的變數。當變數選擇妥當後,點選「產生合併資料」便會進入下一個步驟。

接下來,系統會分析是否有選擇多次詢問的變數,如果有,會列入可選擇的年度工勾選。

下一步是選擇合併方式。共分成串連和堆疊兩種。選擇後,系統就會產生資料檔了。

今天進度:完成教育程度題組的題目及選項載入系統,目前完工的合併資料已全部載入。
下一步將進行產生「統計軟體讀檔程式」的程式撰寫,希望可以在開會前置少完成一到兩種統計軟體讀檔程式。這部分目前已知的困難有二:統計軟體讀檔需要宣告變數長度及類別,目前資料庫中沒有儲存這部分的資訊,需要整理相關資料,並在適當的資料表中插入。其次,format和label有長度限制,恐無法直接由題目及選項資料表中載入,還要想想該如何解決。

2012年9月3日 星期一

題目資料庫的暫時處理方式

接續前篇。
考量開發時程限制,題目資料庫目前暫時先直接以codebook的形式帶入(以變數為主)。參考PSID的形式,設計以樹狀圖結構的方式呈現題組及題目(變數)。另外也設計搜尋介面。

目前此方式的缺點在於對單題多選項的題目或是量表題組而言,比較不容易看到題目的全貌。未來可考慮在現行的架構下,增加題目的文字描述,方便使用者瞭解。或是增加一個完整題目的資料庫,雖然此舉會增資資料維護的複雜度,但我認為在題目的呈現上會比較完整。

目前,樹狀結構、搜尋介面及詳細資料描述頁面都已初步完成。今日並完成選擇變數功能(購物車)的開發,待完成變數清單與確認(結帳)功能後,資料搜尋與資料輸出兩部分變算是完成初步的「對接」了。

另外,題目資料庫目前只暫時將基本資料及工作訊息兩部分的「題目」及「選項」匯入,還有很多描述細節有待後續慢慢補充。另外,教育題組的資訊也還有待整理匯入。

2012年8月17日 星期五

題目資料庫建構問題筆記

最末端的資料輸出有了初步成果後,我將焦點回到中段題目的部分。
題目的頁面預計提供完整的題目資訊,包含中英文題目、訪問波次及題目出處、特性等詳細描述。不過很多資訊仍有待後續慢慢充實,初期大概只有中文題目跟訪問波次而已。

題目資料庫應該可以算是串起這整個系統的核心架構。它提供使用者搜尋、瞭解、選擇題目,並觸發後續的資料串連。也關係到產生統計程式、codebook的格式,因此至關重要。
而題目與變數之間並不一定是一對一的關係,很多時候其實是一對多的連結。例如「請問您是在哪一年出生的?民國_____年_____月」,這便是一個一對二的關係。同時,一個題目可能在不同的波次(問卷)中重複詢問,因此題目與波次間同樣也是一對多的關係。
但一般而言,使用者在選擇變數時,同一題的所有變數應該會一併選擇,因此同一題的各個變數其實仍然可以視為一個整體。將題目與變數之間簡化為一對一的關係。

依此邏輯,當使用者選擇一題時,系統會自動帶入此題的所有變數。使用者另需選擇訪問波次,做為合併資料時的篩選條件。
在此,沒有想通的問題是,受訪者選擇訪問波次的時機該放在何時?選擇每個題目時都個別選擇所需的波次?或者,如果一般而言,整個資料檔的的時序範圍是一致的,也許可以將選擇波次的時間點放在選擇完所有變數之後。

第二個矛盾點在此處與codebook之間的矛盾。此部分搜尋、簡介以「題」為單位建置,但是codebook又回到以「變數」為單位呈現。似乎難以共用相同的題目及選項描述。若建構兩套文字,恐增加後續維護的難度,也容易產生不一致的出錯機率,目前還在尋求解決之道。

2012年8月16日 星期四

下載資料說明及資料輸出工作進度

先從下載檔案談起。合併資料最終給使用者下載的壓縮檔中,將比照SRDA的下載檔案,提供下載資料說明(readme檔)、計畫說明、過錄編碼簿(codebook)及資料檔。其中資料說明及計畫說明為固定文件;過錄編碼簿及資料檔則依使用者選擇的變數即時產生文件與資料。資料檔預計提供SAS、SPSS、STATA三種統計軟體格式,但為減低系統建置的成本及系統的負擔,三種格式都將以程式檔配合ASCII資料檔的方式呈現,而非直接提供三種版本的資料檔。
接續前一篇找尋資料合併的方式不可分的,當然就是把資料寫入檔案了。由於時間的壓力,所以沒有辦法花太多時間進行執行效能的優化,只能先求有再求好了。所以也就延續上篇透過SQL語法產生合併檔的方式處理。
目前透過SQL可產生堆疊式的合併資料,也就是利用樣本編號,將各題組的變數加以串連,但若在某一個題組選擇了多年的資料,便會形成一對多的串連方式。也就是同一樣本不同年度的資料在合併資料檔中將會記錄成不同筆。資料中另包含調查年變數以利區分。由於可透過SQL直接從資料庫中提取這樣結構的資料,將相同的結構寫入檔案也沒有太大問題。初步規劃資料以逗號分隔的csv檔儲存,第一列為變數名稱。
相較於堆疊式的合併資料,串連式的就比較複雜了。所謂串連式,是指每一個樣本就為一筆資料,不同年度的相同變數以不同的變數加以儲存。資料仍然透過相同的SQL語法從資料庫中提出,再利用陣列將資料重新組合而成。這幾天便為了這個陣列的轉換傷透腦筋,由於並非每位受訪者每期都能夠完訪,因此串連起來的資料需克服資料長度不同的問題。目前對於未完訪的的遺漏值暫時以空值處理,未來也許配合三個種統計軟體的程式檔,再調整成適當的狀態。
目前兩種方式的產生資料檔程式已初步完成。下一步是倒回去處理「選擇變數」(購物車)的部分了。不過,由於新資料釋出的進度有些落後,我又要回去幫忙了,因此進度可能又要暫停一下了。希望這次不要停太就才好。

2012年8月10日 星期五

上工

因為進行今年度新的調查工作,合併資料從去年底延宕至今。目前調查工作已經結束,所以也就恢復合併資料的開發工作了。長官們希望10月上旬我能對於這個合併資料計畫做詳盡的報告,我的野心更大,希望到時候不只是還停留在規劃階段,而希望能有初步的成果可以直接在長官面前demo。給了自己這樣的目標,壓力也跟著來了,希望開發順利,一切按照進度進行。 這兩天已將之前完成的三個題組資料檔載入資料庫當中,進入實做階段了。第一步便是找出產生資料檔的最適方式。方案一是直接透過SQL語法產生合併檔,初步測試,至少在產生"堆疊式" 的合併資料方面是可行的,經過與統計軟體結果的交互驗證,正確性應該也沒有問題。但是執行效率似乎並不高。仍可從調整語法方面試著提高效率。至於橫向串連式的合併資料,還沒有想到該如何處理。 另一方案是將合併資料的工作交由程式處理。僅用簡單的語法從各題組table中撈出所需的資料,以陣列的形式交由程式組成合併資料。此部分還未進行測試。