테스트 코드 리뷰 - 3

호진·2023년 12월 16일
0

AI_스쿨

목록 보기
35/51
post-thumbnail

들어가기 앞서...

이번주는 감기에 걸려 도저히 강의를 들을 체력이 없어 스터디 노트를 쓰지를 못했다...
또 팀스터디 동료가 5명이였는데요... 2명이 되었습니다... 암튼 문제는 다풀었으니 리뷰 시작하겠습니다.

문제 0

이번 테스트에서 사용하는 데이터는 PDF파일로 주어졌는데 이것을 읽어오는 과정을 거처야 하는데 tabula-py를 이용해서 읽어 오기위해서는 JAVA를 설치하고 라이브러리를 사용해야하는데 여기서부터 오류가 많이 생겨 문제 1번을 구경하는데 정도 3시간 걸린거 같네요 ㅎㅎ...

해결 방법은 문제와 함께 주어진 pdf의 이름이 괴랄하게 지어져있어서 이 파일을 test로 바꾸니 정상적으로 코드가 동작했습니다.

1단계

문제1 - 1

다음과 같은 인덱스 번호가 정렬되어 있지 않은 데이터들을 합치고 번호를 재정렬 하는 것인데

ingredients_df = pd.concat(ingredients_list, ignore_index=False)
ingredients_df.reset_index(drop = True, inplace=True)

concat으로 합치고 reset_index로 번호를 초기화 해주었습니다.

문제1 - 2

성분데이터에 /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을 ''으로 대체하여 해결하였습니다.

문제1 - 3

영문 명칭에 빈 데이터를 채우는 문제인데 이 문제도 replace를 사용하여 해결하였습니다.

2단계

5개의 화장품 데이터의 성분 컬럼의 데이터를 수정하는 문제였는데 데이터프레인 내부의 리스트를 조작하는 문제여서 매우 까다로웟다.

문제 2-1

성분명을 바꾸고 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)

한단계식 처리하여 문제를 해결하였습니다.

문제 2-2

위에서 처리한 문자열을 ','단위로 리스트로 만드는 문제인데

# 조건 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

이전 문제와 같이 한단계식 시행착오를 거처 문제를 해결하였습니다.

3단계 😢

문제 2번에서 정리한 화장품 데이터 내의 성분들을 문제 1번에서 정리한 성분 데이터들로 대체하는 문제였는데 하루종일 고민하다가 결국 풀지는 못했다..

문제 3-1

1에서 정리한 성분표의 번호와 영문명을 키 밸류값으로 한 딕셔너리를 만들어 해결해 볼려고 햇으나 구 영문명까지 적용하면 계속해서 깨지는 오류가 생겨 결국 포기했습니다.

ingredients_mapping1 = dict(zip(ingredients_df['표준 영문명'],ingredients_df['성분코드']))

문제 3-2

숫자로 정리된데이터의 중복데이터를 정리하는 과정인데 3-1이 해결이 안되어 읽어 보기만 하였습니다.

전체 코드

전체 코드

profile
중요한 건 꺽였는데도 그냥 하는 마음

0개의 댓글