Замена значения в одном наборе данных значением из другого набора данных с помощью динамического поиска

Этот вопрос в первую очередь относится к Alteryx, однако, если это можно сделать на Python или R в рабочем процессе Alteryx с помощью инструмента R, тогда это тоже сработает.

У меня есть два набора данных.

Адрес (содержит адресную информацию: Line1, Line2, City, State, Zip)

USPS (содержит сокращения USPS: Street to ST, Boulevard to BLVD и т. д.)

Цель: просмотреть строку в наборе данных Address для Line1. ЕСЛИ он СОДЕРЖИТ один из типов улиц в наборе данных USPS, я хочу заменить эту часть строки соответствующим сокращением, которое находится в другом столбце набора данных USPS.

Например, 123 Main Street станет 123 Main St.

Что я пробовал: импортировал два набора данных. Объедините два набора данных с помощью инструкции «Вывести все поля для случая, когда поля различаются». Добавил формулу, но тут я застрял. Пока что он гласит:

if [Addr1] Contains(Sting, Target)

Не уверен, как заставить его искать в USPS одно из значений. Я также не уверен, возможен ли такой динамический поиск.

Если это можно сделать на python (я знаю очень простой Python, поэтому у меня пока нет кода для этого, потому что я не знаю, с чего начать, кроме импорта данных), я могу использовать python в Alteryx.

Любая помощь будет здорово. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Заранее спасибо.


person Chris    schedule 18.12.2019    source источник


Ответы (2)


Используйте инструмент «Найти замену» в Alteryx. Этот инструмент сродни поиску. Кроме того, используйте сообщество Alteryx для ответов на подобные вопросы.

Введите набор данных Address в верхний якорь инструмента «Найти замену», а набор данных USPS — в нижний якорь. Вы захотите найти любую часть поля адреса, используя поле поиска, и заменить ее полем аббревиатуры. Если вам нужно сделать это для нескольких полей в наборе данных Address, вы можете воспроизвести эту логику или использовать инструмент идентификатора записи, транспонировать, запустить эту логику в одном поле, а затем выполнить перекрестную табуляцию обратно к исходной схеме. Это продвинутый рецепт, который вам нужно освоить в Alteryx.

https://help.alteryx.com/current/FindReplace.htm

person user5513578    schedule 25.12.2019

Общая логика, которую можно использовать, приведена здесь: Использование str_detect (или какой-либо другой функции) и какой-либо способ перебора списка для выполнения vlookup

Однако для расширения до Alteryx вам потребуется добавить инструмент Alteryx R. Кроме того, часть кода нужно будет изменить, чтобы использовать синтаксис, который нравится Alteryx.

читать данные с помощью:

read.Alteryx('#Link Number', mode = 'data.frame')

После этого связанный выше вопрос обеспечит общую основу для логики. Повторил здесь:

usps[] = lapply(usps, as.character)
##Copies the original address data to a new column that will
##be altered.  Preserves the orignal formatting for rollback 
##if necessary
vendorData$new_addr1 = as.character(vendorData$Addr1)

##Loops through the dictionary replacing all of the common names
##with their USPS approved abbreviations for the Addr1 field.
for(i in 1:nrow(usps)) {
  vendorData$new_addr1 = str_replace_all(
    vendorData$new_addr1,
    pattern = paste0("\\b", usps$Abbreviation[i], "\\b"),
    replacement = usps$USPS_Abbrv_updated[i]
  )
}

Наконец, чтобы увидеть вывод, нам нужно написать оператор, который выведет его в один из 5 выходных слотов инструмента R. Вот код для этого:

write.Alteryx(data, #)
person Chris    schedule 19.12.2019