이번주는 감기에 걸려 도저히 강의를 들을 체력이 없어 스터디 노트를 쓰지를 못했다...
또 팀스터디 동료가 5명이였는데요... 2명이 되었습니다... 암튼 문제는 다풀었으니 리뷰 시작하겠습니다.
이번 테스트에서 사용하는 데이터는 PDF파일로 주어졌는데 이것을 읽어오는 과정을 거처야 하는데 tabula-py를 이용해서 읽어 오기위해서는 JAVA를 설치하고 라이브러리를 사용해야하는데 여기서부터 오류가 많이 생겨 문제 1번을 구경하는데 정도 3시간 걸린거 같네요 ㅎㅎ...
해결 방법은 문제와 함께 주어진 pdf의 이름이 괴랄하게 지어져있어서 이 파일을 test로 바꾸니 정상적으로 코드가 동작했습니다.
다음과 같은 인덱스 번호가 정렬되어 있지 않은 데이터들을 합치고 번호를 재정렬 하는 것인데
ingredients_df = pd.concat(ingredients_list, ignore_index=False)
ingredients_df.reset_index(drop = True, inplace=True)
concat으로 합치고 reset_index로 번호를 초기화 해주었습니다.
성분데이터에 /r이 중간중간에 들어가 있는데 이것을 제거하는 문제입니다.
ingredients_df['표준 성분명'] = ingredients_df['표준 성분명'].str.replace('\r','')
ingredients_df['구명칭'] = ingredients_df['표준 성분명'].str.replace('\r','')
ingredients_df['표준 영문명'] = ingredients_df['표준 영문명'].str.replace('\r',' ')
ingredients_df['구영문명'] = ingredients_df['구영문명'].str.replace('\r',' ')
check_01_02(ingredients_df)
다음과 같이 replace기능으로 /r을 ''으로 대체하여 해결하였습니다.
영문 명칭에 빈 데이터를 채우는 문제인데 이 문제도 replace를 사용하여 해결하였습니다.
5개의 화장품 데이터의 성분 컬럼의 데이터를 수정하는 문제였는데 데이터프레인 내부의 리스트를 조작하는 문제여서 매우 까다로웟다.
성분명을 바꾸고 May Contain:이라고 되어있는 부분의 뒷부분을 제거하는 문제였는데
# 조건 2
for idx, row in df_target.iterrows():
if '. May Contain' in row.Ingredients:
df_target['Ingredients'][idx] = row.Ingredients.split('. May Contain')[0]
# print(row.Ingredients)
# 조건 1
df_target['Ingredients'] = df_target['Ingredients'].str.replace('.','')
# at 사용해야지 오류가 안뜸
# 조건 3
for i in range(0, len(df_target)):
col = df_target.at[i, 'Ingredients'].split(', ')
for j in range(0, len(col)):
for key, value in replace_str_dict.items():
col[j] = col[j].replace(key, value)
df_target.at[i, 'Ingredients']= ', '.join(col)
한단계식 처리하여 문제를 해결하였습니다.
위에서 처리한 문자열을 ','단위로 리스트로 만드는 문제인데
# 조건 1
ing = []
for i in range(0, len(df_target)):
col = df_target.at[i, 'Ingredients'].split(', ')
ing.append(col)
# 조건 2
for i in range(len(ing)):
ing[i] = [x.strip() for x in ing[i]]
# 조건 3
df_target['Ingredients List'] = ing
df_target
이전 문제와 같이 한단계식 시행착오를 거처 문제를 해결하였습니다.
문제 2번에서 정리한 화장품 데이터 내의 성분들을 문제 1번에서 정리한 성분 데이터들로 대체하는 문제였는데 하루종일 고민하다가 결국 풀지는 못했다..
1에서 정리한 성분표의 번호와 영문명을 키 밸류값으로 한 딕셔너리를 만들어 해결해 볼려고 햇으나 구 영문명까지 적용하면 계속해서 깨지는 오류가 생겨 결국 포기했습니다.
ingredients_mapping1 = dict(zip(ingredients_df['표준 영문명'],ingredients_df['성분코드']))
숫자로 정리된데이터의 중복데이터를 정리하는 과정인데 3-1이 해결이 안되어 읽어 보기만 하였습니다.