Как использовать Python для создания нескольких фиктивных переменных - PullRequest
0 голосов
/ 18 июня 2019

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

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

Вот таблица условий выглядит так:

ICD10   Conditions
F1010   Alcohol_Abuse
F10129  Alcohol_Abuse
F1020   Alcohol_Abuse
F1120   Drug_Abuse
F1190   Drug_Abuse
F0630   Depression

А данные претензий выглядят так:

Member ID       DX1           DX2              DX3
xxx1           F10129        F1010  
xxx1           F1010        
xxx2           F1010         F1020            F1120
xxx3           F0630        
xxx3           A5555    

И конечные результаты будут выглядеть так:

Member ID   Alcohol_Abuse   Drug_Abuse  Depression
xxx1              1            0                 0
xxx2              1            1                 0
xxx3              0            0                 1  

В SAS эти работы могут быть выполнены довольно легко. Сначала я создаю первую таблицу как таблицу форматирования (в основном, просто переименуйте переменные ICD10, которые я хочу использовать в качестве ключа для «START», и переименуйте значение, которое я хочу показать в «LABEL»):

DATA CONDITION; SET TABLE1; 
    FMTNAME = '$CONDITION'; 
        START = ICD10; 
        LABEL = CONDITIONS; 
    KEEP START HLO FMTNAME LABEL;
RUN;
PROC FORMAT CNTLIN = FMT.CANCER; RUN;

Затем я "применю" этот формат с данными заявки (функция PUT - это способ применения формата SAS, это похоже на использование SQL для TABLE2 с левым соединением TABLE1 с ICD10 или DX в качестве ключа и сохранением всех переменных, которые есть в обеих таблицах ):

DATA CLAIM_FLAG; SET TABLE2;
    IF PUT(DX1, $CONDITION.) = 'Alcohol_Abuse' OR PUT(DX2, $CONDITION.) = 'Alcohol_Abuse' OR PUT(DX3, $CONDITION.) = 'Alcohol_Abuse' 
    THEN Alcohol_Abuse = 1; ELSE Alcohol_Abuse = 0;
    ... (same logic for the other conditions)
RUN;

В конечном итоге я объединяю данные CLAIM_FLAG на уровне члена, что означает, что у каждого участника будет только 1 строка (я пропускаю код SAS для этой части).

Это то, что я до сих пор пробовал в Python (но вам не нужно следовать тому, что я сделал):

df1 = data[['Member ID', 'DX1']].rename(columns={"DX1":"ICD10"})
df2 = data[['Member ID', 'DX2']].rename(columns={"DX2":"ICD10"})
df3 = data[['Member ID', 'DX3']].rename(columns={"DX3":"ICD10"})
df = pd.concat([df1, df2, df3]).drop_duplicates()
icd_df = df.merge(lookup, on='ICD10', how='left')

Было бы очень полезно, если бы кто-то мог предоставить программу на Python, которая могла бы сначала импортировать EXCEL-файл, такой как TABLE1, а затем создать фиктивные переменные и агрегировать на уровне члена, как в финальном выходном шоу. Спасибо за вашу помощь.

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