Как использовать эффективное сопоставление с образцом для поиска сходства строк в больших данных

#python #pattern-matching #cluster-analysis #fuzzy-comparison #record-linkage

#python #сопоставление с образцом #кластерный анализ #нечеткое сравнение #привязка к записи

Вопрос:

У меня есть таблица примерно из 100 000 строк. Эта таблица находится в файле Excel, и вот ее снимок:

  ------------ ----------- ----- ----- ----------------------------------------------------------- 
| First Name | Last Name | Sex | Age |                          Address                          |
 ------------ ----------- ----- ----- ----------------------------------------------------------- 
| Parm       | Jit       | m   |  23 | palm court scoeity, RD. golf course, delhi                |
| Param      | jit       | m   |  24 | palm cort society, road golf course, delhi                |
| Pram       | Jet       | m   |  28 | palm court socityt Road golf course, Delhi                |
| Prm        | jit       | m   |  31 | society palm court, Rod. Golf coure, delhi                |
| Param      | Jeet      | m   |  33 | palm court scoety, delhi                                  |
| varun      | nagraj    | m   |  36 | Thame Square, auckland-AZ-2014                            |
| Janet      | kumar     | m   |  40 | Thame Square, auckland-AZ-2014                            |
| varun      | kumar     | m   |  42 | Thame Square, auckland-AZ-2014                            |
| Jatin      | Kakkar    | m   |  45 | Noida, near shipra mall, sectr 57, Noida, U.P.            |
| Jatin      | Kakar     | m   |  56 | Noida, near shipra mall, sectr 57, Noida, Uttar pardesh   |
| Jatin      | Kakkr     | m   |  57 | Noida, Flat no- 23, near shipra mall, sectr 57, Noida, UP |
| Janet      | Yellen    | F   |  23 | 11 CORONADO POINTELAGUNA NIGUELCA92677                    |
| Janet      | Yellen    | F   |  24 | 11 CORONADO POINTELAGUNA NIGUELCA                         |
| Janet      | Yellen    | F   |  25 | 11 CORONADO POINTELAGUNA 92677-0000                       |
| Jant       | Yelen     | F   |  26 | 11 CORONADO POINTELAGUNA NIGUELCA0000                     |
| Janet      | Yellen    | F   |  26 | 11 CORONADO POINTELAGUNA NIGUELC                          |
| Abigail    | Johnson   | F   |  24 | PRESERVE DRIVE NE, 11BELMONTMI4930                        |
| andrew     | symonds   | m   |  24 | Fame Stret, brisbane, hn 181                              |
| Angel      | Ahrendts  | F   |  26 | WYNGATE MANOR CTALEXANDRIAVA                              |
| Safra      | Catz      | F   |  26 | 31155 ZOAR SCHOOL ROADLOCUST GROVEVA22508-0000            |
| Park       | Geun-hye  | F   |  30 | CATHOLIC CHURCH RDBEACH LAKEPA                            |
| Sheryl     | Sandberg  | F   |  24 | 80164 SULTANA AVEINDIOCA92201-0000                        |
| Sheryl     | Sandberg  | F   |  24 | SULTANA AVEINDIOC                                         |
| Safra      | Catz      | F   |  26 | OAR SCHOOL ROADLOCUST GROVEV                              |
| Park       | Geun-hye  | F   |  30 | 308 CATHOLIC CHURCH RDBEACH LAKEPA18405-0000              |
| andrw      | simnds    | m   |  24 | Fame Stret, 181 HOUSE NO                                  |
| prashat    | vats      | m   |  35 | Al thei, al nzar, dubai12                                 |
| prasant    | vats      | m   |  37 | Al, al nazar, dubai23                                     |
| andrw      | simonds   | m   |  34 | Fame brisbane, 181 H.N.                                   |
| vats       | prashant  | m   |  30 | Al thei, al nazar, dubai                                  |
| vast       | prshant   | m   |  30 | al nazar, dubai, street adamifullah                       |
| prashant   | vats      | m   |  37 | Al thei, al nazar, dubai                                  |
| ram        | vats      | m   |  29 | Al thei, nazar, dubai                                     |
| Kiss       | hanes     | m   |  45 | Sydney, andrew str. 223                                   |
 ------------ ----------- ----- ----- ----------------------------------------------------------- 
  

Я пытаюсь выяснить сходство строк в этих данных, например, строка 1 очень похожа на строку 2. Я пробовал алгоритмы кластеризации (а именно BIRCH , DBSCAN , K means Spectral и Markov Clustering ), но всем им требуется около получаса для выполнения 100 000 строк, прежде чем они выдадут ошибку памяти в python (поскольку я беру все данные на своей python платформе, объем оперативной памяти на моей машине составляет 16gb ).

Должен ли я использовать какой-нибудь лучший алгоритм для решения этой проблемы или мне нужно перенести мои данные на такую платформу, как spark , а затем поработать над этим? Если верно первое, можете ли вы помочь мне с каким-нибудь алгоритмом, который не отнимает слишком много времени? Пожалуйста, не рассматривайте это как теоретический вопрос, поскольку я с нетерпением жду подхода к решению практической проблемы с большими данными.

Комментарии:

1. Excel и всего 100000 записей — это не большие данные. Это мегабайты, а не эксабайты…

Ответ №1:

Не имеет смысла использовать эти алгоритмы для этого набора данных…

Прежде всего, всегда начинайте с образца, чтобы узнать, какой подход работает, прежде чем рассматривать масштабирование. Не тратьте время на масштабирование нерабочего подхода…

Что касается реальной проблемы, вместо кластеризации я бы предложил сосредоточиться на очистке данных. OpenRefine может быть хорошим началом.

Комментарии:

1. Какой подход вы бы предложили для очистки данных?