есть ли какое-либо решение для преобразования необработанных данных в некоторые категоризированные наборы данных

#python #pandas #database #numpy #stata

Вопрос:

У меня есть набор данных, содержащий такие значения, как хинди, хинди, хенди, английский, английский, английский, inglsh…so дальше. Я хочу, чтобы этот набор данных разделился на разные наборы данных, которые будут иметь одинаковые значения. например, в этом случае два набора данных; первый имеет значения хинди, хинди, хенди, а другой состоит из английского, английского, инглийского, инглийского.

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

1. Можете ли вы придумать простые правила эвристики, по которым вы хотите их отсортировать?

2. Как выглядит набор данных? Этот вопрос слишком расплывчат

3. существуют ли только эти две группы?

4. Это всего лишь пример, количество групп и уникальных значений неизвестно. Исходные данные состоят из миллионов записей.

5. По информации здесь, ищем sh и nd было бы достаточно.

Ответ №1:

Вы можете использовать difflib.get_close_matches

Ввод:

 >>> s = pd.Series(['Hindi', 'hindi', 'hendi', 'English', 'Englsh', 'inglish', 'inglsh'])
>>> s
0   Hindi
1   hindi
2   hendi
3   English
4   Englsh
5   inglish
6   inglsh

 

обработка:

 import difflib
s.apply(lambda s: difflib.get_close_matches(s, possibilities=['english', 'hindi'])[0])
 

выход:

 0   hindi
1   hindi
2   hindi
3   english
4   english
5   english
6   english
 

Ответ №2:

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

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

Например:

 dataset = ['hindi', 'hundi', 'hendi', 'inglish', 'english', 'englesh']
unique_values = ['hindi', 'english']

segregated_dataset = {'hindi': [], 'english': []}

for val in dataset:
    max_score = 0
    for unique_val in unique_values:
        score = scoring_function(val, unique_val) # implement the scoring function of your choice
        if score > max_score:
            field = unique_val
            max_score = score
            
    segregated_dataset[field].append(val)
 

Ответ №3:

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

Лучше преобразовать ваши слова в нижний регистр, используя numpy.char.lower(list_of_word)