Векторизация Pandas DataFrame по N-грамме символов и добавление имени столбца - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь векторизовать фрейм данных панд в отдельные n-граммы символов.Однако есть предостережение: я хочу, чтобы имя столбца было частью последовательности символов.Например, давайте представим, что это необработанные данные:

First Name, Last Name
John, Smith

, и я использую n-граммы символов длиной 3.

Я хочу, чтобы генерировались следующие n-граммы:

"First Name_Joh", 
"First Name_ohn", 
"Last Name_Smi", 
"Last Name_mit", 
"Last Name_ith"

, чтобы я мог создать горячее кодирование для этого вектора.Я хочу, чтобы имя столбца было частью последовательности символов n-грамм.Для того, над чем я работаю, я не хочу, чтобы все n-граммы были смешаны вместе.(Извините, если я не использую правильные термины; я не очень хорошо объясняю этот материал.)

^ Я знаю, как это сделать с помощью циклов, неэффективным способом;однако мне нужно, чтобы это было масштабируемым и многократно используемым, поэтому я хочу использовать что-то вроде CountVectorizer от sklearn для этого.Как я могу это сделать?

1 Ответ

0 голосов
/ 13 декабря 2018

Не уверен, что это именно то, что вам нужно, но, возможно, вы можете использовать CountVectorizer с анализатором символов и перебирать столбцы в граммах.

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

data = pd.DataFrame(
    {
        'first_name': ['John', 'Ed'],
        'last_name': ['Smith', 'Bean']
    }
)

vec = CountVectorizer(analyzer = 'char', ngram_range = (3, 3))

output = pd.DataFrame()

for i in data.columns:

    pre = pd.DataFrame(vec.fit_transform(data[i]).toarray(), columns = [i + '_' + j for j in vec.get_feature_names()])

    output = pd.concat([output, pre], axis = 1)

pd.concat([data, output], axis = 1)

Дает:

enter image description here

Или, возможно, вы хотите, чтобы имена были значениями?

output * output.columns

Дает:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...