2012-09-04 20 views
1

我有一個數據表,我試圖「標準化」。輸入到表格中的數據不是靜態的或標準化的(例如使用下拉列表的答案),給我留下多種不同的答案,我想要一個靜態的通用答案。如何標準化用戶輸入的數據?

例如,讓我們說,有一個名爲「寵物類型」的數據庫中的列。由於用戶輸入不是標準化的,人們可以輸入特定類型寵物的變體,而不是寵物的一般形式。因此,不是僅僅輸入「狗」,而是有不同版本的狗,如「牧羊犬」,「馬特」,「拉布拉多」等。

我該如何將這些答案轉化爲它們的概括形式 -/Mutt/Labrador/etc只用「狗」(或「貓」,或「鳥」等)在表格中回答?

我知道需要某種形式的手動輸入「翻譯」功能。我的直覺反應是,堆疊式if語句的長期列表效率不高,並且很難控制和擴展。

有沒有某種過程或系統來做這樣的事情?像某種類型的查找表系統/矩陣?

我假設foreach循環通過記錄的陣列來迭代是最合適的。然後在foreach循環的每一次迭代中,你都會對pet變量進行測試/比較(我會手動創建) - 但是你會用這個查找表/列表來做什麼?或者這個過程的這一步?你會把它作爲某種類型的SQL數據庫/表格,數組,CSV文件等嗎?然後,一旦這個比較完成並且確定了寵物類型的「翻譯」等價物,那麼foreach循環將更新該記錄的特定行,或者覆蓋舊的非標準化值,或者可能只是增加將新的標準化等值轉換爲新的列(供以後驗證)。

回答

1

我的直覺反應是堆疊if語句的長期列表效率低下,而且很難控制和擴展。

100%正確,並且正因爲如此,您真的只有一個選擇:手動通過數據庫並清理它。一旦完成,您需要使用停止列表而非原始文本輸入來限制用戶輸入。

根據你的用戶,你可能想看看如何#1做標記 - 實質上允許任何人做清理你。

+0

如何創建一些類型的比較列表/表/數組/ /等,可以處理大量的數據? (雖然意識到我一定要在某個時候手動清理記錄,比如奇怪或者名字未包含在比較表/函數中的稀有品種) – Coldblackice

+0

我的建議是,如果您已經決定這必須清理乾淨,現在最好在它變得更大或更難做之前進行。即使您創建了比較列表,您仍然需要花費大量時間並單獨瀏覽每個條目。爲什麼不現在就做真正需要做的事情? – sosborn

+0

我完全同意 - 沒有更多的數據是以動態方式進入的。但是,隨着數千和數千條記錄已經存在於數據庫中,手動完成所有操作需要花費更長的時間,而對於可以處理大部分轉換的簡單類型的自動轉換而言。然後,當然,我會過濾出未使用比較函數處理的標記的散點圖,並將它們(非關鍵數據)放在一起或單獨修復它們。 – Coldblackice

0

但是,如果你有一個像15萬點的記錄或東西做一個SQL找到替換查詢可能會幫助清理數據開始。

這聽起來像一個數據標準化項目給我,雖然我沒有在實踐中它經歷了很多,但在理論上你下手如何輸入的數據。例如,自由文本字段允許用戶輸入他們想要的任何東西。在清理數據之後你會想改變它。首先知道數據是如何進入的。是freetext,一顆子彈,一個下拉菜單嗎?等

你想也想創建所有的標準化方面,可以取代與變化的大量的數據字典。
然後,您可以創建一個更新查詢,查看舊數據並使用更新查詢和通配符更新新數據。

https://support.office.com/en-us/article/Use-the-Find-and-Replace-dialog-box-to-change-data-2eee8d02-5a40-4328-ba56-ec0406865680

這可能是清理數據,而不是查找和替換過的更自動化的方式。

-Al