일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- fastapi #python웹개발
- 파이썬웹개발
- langchain
- 비지도학습
- programmablesearchengine
- konlpy
- fastapi #파이썬웹개발
- 사이킷런
- 파이썬
- 머신러닝
- 챗gpt
- 자연어분석
- NLP
- chatGPT
- 파이토치기본
- 파이토치
- 딥러닝
- fastapi
- pytorch
- HTML
- sklearn
- MachineLearning
- pandas
- OpenAIAPI
- deeplearning
- 랭체인
- 판다스
- Python
- 판다스 데이터정렬
- python 정렬
- Today
- Total
Data Navigator
파이썬 코드 효율적으로 짜기 - 20시간을 2초로 바꾼 몇 줄의 코드 수정 본문
for korean in df['description']:
if isHangul(korean[0]) == True:
isKor = df.loc[df['description'] == korean]
KoreanReviews = pd.concat([KoreanReviews,isKor])
else:
notKor = df.loc[df['description'] == korean]
ForeignReviews = pd.concat([ForeignReviews,notKor])
print('일치: ',len(KoreanReviews['description'].value_counts()),
'불일치: ', len(ForeignReviews['description'].value_counts()))
247,519개의 자료를 한글과 외국어로 분류하는 코드를 작성했다.
컬럼에서 자료를 읽어와서 한글인지 확인하는 함수로 체크한 후 한글이면 KoreanReviews 아니면 ForeignReviews 라는 이름의 데이터 프레임에 자료를 아래로 추가하는 형식으로 코드를 만들었다.
코드 실행 후 메모리 사용량이 급증하면서 약 20시간 이상 계속해서 실행이 되었는데...
너무 오래 걸려서 중단시켜 보니 한글로 분류된 데이터는 고작 1259개만 처리가 되어 있었다.
코드를 다시 살펴보니..
for korean in df['description']:
if isHangul(korean[0]) == True:
isKor = df.loc[df['description'] == korean]
KoreanReviews = pd.concat([KoreanReviews,isKor])
else:
notKor = df.loc[df['description'] == korean]
ForeignReviews = pd.concat([ForeignReviews,notKor])
print('일치: ',len(KoreanReviews['description'].value_counts()),
'불일치: ', len(ForeignReviews['description'].value_counts()))
이 코드는 데이터프레임의 댓글 1행을 뽑아 그 1줄이 한글인지 확인하고 맞으면 다시 그 행이 있는 곳을 찾아서 모든 컬럼을 가져와 새 데이터프레임에 추가하는 형식이다.
즉... 1개를 한글인지 검사한 후 24만개를 비교해서 값을 찾아 맞으면 새 데이터 프레임에 합치는 방식...
24만개의 데이터를 약 24만번 다시 탐색해야 하는 코드이다.. 오래 걸리는 것이 당연....;;;;
그래서 이번에는 한글이 맞으면 True 아니면 False를 리스트에 넣어서 데이터 프레임에 합친 후 그 True False값만으로 데이터프레임을 불러와 다른 데이터프레임에 저장하는 방식으로 해 보았다.
# 한글인지 아닌지 검사해서 isKorNot 리스트에 True/False를 추가하고 df에 isKorNot 컬럼을 만들어 추가
isKorNot = []
for korean in tqdm(df['description']):
if isHangul(korean[0]) == True:
isKor = True
isKorNot.append(isKor)
else:
notKor = False
isKorNot.append(notKor)
df['isKorNot'] = isKorNot
헐... 불과 몇 초만에 끝.....
추가한 isKorNot 컬럼을 True/False 조건으로 각각 추출해서 새로운 데이터 프레임을 만드는데는 1초도 걸리지 않았다..
코드를 효율적을 짜는 것이 얼마나 중요한지 몸소 경험한 시간...
20시간 넘게 시스템 자원을 다 써가며 돌아도 고작 1259개 처리 되었는데.. 코드를 몇 줄 바꾼 것 만으로 몇 초만에 끝났다. 앞으로는 반복문을 돌릴때 조금 더 생각을 해서 코드를 작성해야 겠다...
아까운 내 시간과, 컴퓨터 수명 연장, 정신 건강을 위해서....
'Python' 카테고리의 다른 글
Invalid version: '0.996/ko-0.9.2' - Mecab 설치 오류 해결 - Ubuntu22.04, Konlpy, mecab (1) | 2023.06.27 |
---|---|
[python] python List와 Tuple 데이터 정렬 하기 sort, sorted (0) | 2021.04.11 |
KoNLPy 설치 오류시 해결 방법 - Python 3.8.5 기준 (0) | 2021.01.14 |
len() 함수 사용 해서 list(리스트)와 tuple(튜플) 요소 갯수 구하기 (0) | 2021.01.03 |
list packing, list unpacking, tuple packing, tuple unpacking (0) | 2021.01.02 |