緣起
內政部的實價登錄原始檔案,大都是被各大房產公司拿去做商業用途。以目前介面跟搜尋功能最好的信義房屋行情網站來說,還是會隱藏一些原始資料。
而且,實價登錄資料裡面一欄位:單價(元/平方公尺) ,由於車位有無、車位登記方式的不準確,大部分筆數的失真會很嚴重。因此,單價(元/平方公尺) 這欄位幾乎沒有參考價值。那麼單價應該怎麼算?我參考這邊說明 。
內政部的實價登錄提供三種資料:買賣、預售屋、出租 的交易資料。出租交易幾乎沒有什麼人在登錄,資料非常少。
因此就寫了個小工具順便練習 javascript 跟 mongo shell。這個小工具 (Taiwan_estates_transactionData_convert)目前針對買賣資料做處理。之後再寫預售屋、出租的部分了。
此工具解決的問題
- 拿掉會誤導人的原始單價資訊,另外計算單價的規則:
有車位與否分成兩種算法:
無車位:換算單價,不包含車位轉移的交易才列入計算。
總價/ 建物移轉總面積有車位:換算單價(坪),有車位轉移 and 車位移轉總面積 !==0 and 車位總價 !==0。 3個條件都滿足才列入計算。(簡單說,有登錄:車位轉移、車位面積、車位價格,才列入換算『單價/(坪)』目前算式:
(總價 - 車位價) / ( 建物移轉總面積(平方公尺) - 車位移轉總面積(平方公尺) )
以上若有錯誤,歡迎 comment 或 github issue / PR
2. 地址取一個,可以讓 google map 定位,儲存在 mymap。
3. 日期轉換成 西元。
4. 面積轉換成 坪。
5. 換算車位單價(平方公尺)。
轉檔後,新增的 7 個欄位
addresstradeDatebuild_CompletionDate單價(元/坪)(已扣除車位)建物移轉總面積(坪/扣車位面積)土地移轉總面積(坪)車位移轉總面積(坪)
將新增那些欄位,是依據原始資料條件而有所不同(例如:原始檔案沒有建築物完工日的話,就不會生成 build_CompletionDate 這欄位)
環境準備
- MongoDB / node.js / MongoDB compass
- 記得要連接上本機 MongoDB 資料庫
- clone 專案檔 (Taiwan_estates_transactionData_convert)
下載原始資料
必須的準備步驟
- 新增一個資料夾存放原始 data,(位置依照自己喜好) 建議以日期命名;因爲會影響到後續的 collection 名稱。
- 接着把實價網站抓回來的壓縮檔,解壓縮到此資料夾。
- 把這資料夾的絕對路徑 設定到 dir_path.js 裡面:
執行
node 0_1_setDir.js./node_exe_mongoCmd/0_1_setDir.js然後輸入剛剛自行新增的資料夾絕對路徑。
- 指定 dbname
執行
node 0_setDatabase.js
待會會把所有 csv 檔一次全部匯入這個 db.設定記錄在 ./config/setDB.js
- 自動更名所有 csv 檔案,自動刪除所有無用的檔案
執行
node 0_2_renameCSV.js
剛剛自行新增的資料夾底下,會新增 『rent』『presell』資料夾,分別代表 『出租』『預售』的資料,某些csv檔案會被命名好之後丟到裡面。目前還沒有寫這兩種資料的轉檔功能,因此還暫時還用不到。 稍後會用到的是 _buy 後綴的 csv 檔案。
import 到 MongoDB
執行
node 1_mongoimport_CSV_JSON.js
會把所有 csv 檔案一次全部匯入 mongoDB , 以檔名當做 collection 的名稱,一個 csv 檔案一個 collection。
執行 mongo shell 轉檔
執行
node 2_1_mongoCollections_convert.js
匯出 csv 檔案
執行
node 3_mongoexport_CSV.js
剛剛自行新增的資料夾底下,會新增 『csv_for_googleMap』;可直接匯入 google mymap 或是給 google my map / google sheet 使用。『csv_for_googleMap』資料夾之下會新增一個『onlyLand』資料夾,只有土地轉移的交易,會在此另存新檔。
上傳 csv 給 google my map
匯入 mymap(如果 csv 檔案超過 2000 筆,請分割成幾個較小檔案)
- 地標位置請選擇 address 這個欄位。
- 標記的名稱可以依照需要選擇,這邊選『都市土地使用分區』。
編輯 google myMap 。很快的,成果大致如下:
歡迎 comment 或 github issue / PR