Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कॉलम के एकाधिक मानों को मानकीकृत कैसे करें?

आपका प्रश्न वास्तव में है सटीक कृपया, @RiggsFolly सुझावों का पालन करें और एक अच्छा प्रश्न कैसे पूछें, इस पर संदर्भ पढ़ें।

साथ ही, जैसा कि @DuduMarkovitz द्वारा सुझाया गया है, आपको समस्या को सरल बनाकर और अपने डेटा को साफ करके शुरू करना चाहिए। आपको आरंभ करने के लिए कुछ संसाधन:

एक बार जब आप परिणामों से संतुष्ट हो जाते हैं, तो आप प्रत्येक Var1 . के लिए एक समूह की पहचान करने के लिए आगे बढ़ सकते हैं प्रविष्टि (इससे आपको समान प्रविष्टियों पर आगे के विश्लेषण/हेरफेर करने में मदद मिलेगी) यह कई अलग-अलग तरीकों से किया जा सकता है लेकिन जैसा कि @GordonLinoff द्वारा उल्लेख किया गया है, एक संभवतः लेवेनशेटिन दूरी है।

नोट :50K प्रविष्टियों के लिए, परिणाम 100% सटीक नहीं होगा क्योंकि यह हमेशा . नहीं होगा शर्तों को उपयुक्त समूह में वर्गीकृत करें लेकिन इससे मैन्युअल प्रयासों में काफी कमी आनी चाहिए।

R में, आप <का उपयोग करके ऐसा कर सकते हैं। कोड>एडिस्ट ()

अपने उदाहरण डेटा का उपयोग करना:

d <- adist(df$Var1)
# add rownames (this will prove useful later on)
rownames(d) <- df$Var1

> d
#                  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#125 Hollywood St.    0    1    1   16   15   16   15   15   15    15
#125 Hllywood St.     1    0    2   15   14   15   15   14   14    14
#125 Hollywood St     1    2    0   15   15   15   14   14   15    15
#Target Store        16   15   15    0    2    1    2   10   10     9
#Trget Stre          15   14   15    2    0    3    4    9   10     8
#Target. Store       16   15   15    1    3    0    3   11   11    10
#T argetStore        15   15   14    2    4    3    0   10   11     9
#Walmart             15   14   14   10    9   11   10    0    5     2
#Walmart Inc.        15   14   15   10   10   11   11    5    0     6
#Wal marte           15   14   15    9    8   10    9    2    6     0

इस छोटे से नमूने के लिए, आप 3 अलग-अलग समूहों (कम लेवेनस्टीन दूरी मानों के समूह) देख सकते हैं और उन्हें आसानी से मैन्युअल रूप से असाइन कर सकते हैं, लेकिन बड़े सेट के लिए, आपको क्लस्टरिंग एल्गोरिदम की आवश्यकता होगी।

मैंने आपको पहले ही टिप्पणियों में मेरी पिछला उत्तर यह दिखा रहा है कि hclust() . का उपयोग करके इसे कैसे किया जाए और वार्ड की न्यूनतम भिन्नता विधि लेकिन मुझे लगता है कि यहां आप अन्य तकनीकों का उपयोग करना बेहतर होगा (आर में सबसे व्यापक रूप से उपयोग की जाने वाली कुछ विधियों के त्वरित अवलोकन के लिए विषय पर मेरा पसंदीदा संसाधन यह है विस्तृत उत्तर )

एफ़िनिटी प्रोपेगेशन क्लस्टरिंग का उपयोग करते हुए एक उदाहरण यहां दिया गया है:

library(apcluster)
d_ap <- apcluster(negDistMat(r = 1), d)

आपको APResult ऑब्जेक्ट d_ap . में मिलेगा प्रत्येक क्लस्टर से जुड़े तत्व और इस मामले में क्लस्टर की इष्टतम संख्या:3.

> [email protected]
#[[1]]
#125 Hollywood St.  125 Hllywood St.  125 Hollywood St 
#                1                 2                 3 
#
#[[2]]
# Target Store    Trget Stre Target. Store  T argetStore 
#            4             5             6             7 
#
#[[3]]
#     Walmart Walmart Inc.    Wal marte 
#           8            9           10 

आप एक दृश्य प्रतिनिधित्व भी देख सकते हैं:

> heatmap(d_ap, margins = c(10, 10))

फिर, आप प्रत्येक समूह के लिए और जोड़तोड़ कर सकते हैं। उदाहरण के तौर पर, यहां मैं hunspell . का उपयोग करता हूं Var1 . से प्रत्येक अलग शब्द देखने के लिए वर्तनी की गलतियों के लिए एक en_US शब्दकोश में और प्रत्येक समूह . के भीतर खोजने का प्रयास करें , जो id वर्तनी की कोई त्रुटि नहीं है (potential_id )

library(dplyr)
library(tidyr)
library(hunspell)

tibble(Var1 = sapply([email protected], names)) %>%
  unnest(.id = "group") %>%
  group_by(group) %>%
  mutate(id = row_number()) %>%
  separate_rows(Var1) %>%
  mutate(check = hunspell_check(Var1)) %>%
  group_by(id, add = TRUE) %>%
  summarise(checked_vars = toString(Var1), 
            result_per_word = toString(check), 
            potential_id = all(check))

जो देता है:

#Source: local data frame [10 x 5]
#Groups: group [?]
#
#   group    id        checked_vars   result_per_word potential_id
#   <int> <int>               <chr>             <chr>        <lgl>
#1      1     1 125, Hollywood, St.  TRUE, TRUE, TRUE         TRUE
#2      1     2  125, Hllywood, St. TRUE, FALSE, TRUE        FALSE
#3      1     3  125, Hollywood, St  TRUE, TRUE, TRUE         TRUE
#4      2     1       Target, Store        TRUE, TRUE         TRUE
#5      2     2         Trget, Stre      FALSE, FALSE        FALSE
#6      2     3      Target., Store        TRUE, TRUE         TRUE
#7      2     4       T, argetStore       TRUE, FALSE        FALSE
#8      3     1             Walmart             FALSE        FALSE
#9      3     2       Walmart, Inc.       FALSE, TRUE        FALSE
#10     3     3          Wal, marte      FALSE, FALSE        FALSE

नोट :यहां चूंकि हमने कोई टेक्स्ट प्रोसेसिंग नहीं की है, इसलिए परिणाम बहुत निर्णायक नहीं हैं, लेकिन आपको इसका अंदाजा हो गया है।

डेटा

df <- tibble::tribble(
  ~Var1,                   
  "125 Hollywood St.",      
  "125 Hllywood St.",       
  "125 Hollywood St",       
  "Target Store",           
  "Trget Stre",             
  "Target. Store",          
  "T argetStore",           
  "Walmart",                
  "Walmart Inc.",           
  "Wal marte" 
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL अपडेट कमांड काम नहीं कर रहा है

  2. बेस्ट मैच द्वारा MySQL ऑर्डर

  3. पंक्ति उत्पाद प्राप्त करें (गुणा)

  4. mysql तालिका में $variable या $_POST मान सम्मिलित करना

  5. आईओएस से ओरेकल एक्सेस