Я делаю анализ данных для данных здравоохранения. Я был программистом 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, а затем создать фиктивные переменные и агрегировать на уровне члена, как в финальном выходном шоу. Спасибо за вашу помощь.