느낀점: 사용자 정의 함수 만들기의 중요성

2024. 3. 12. 16:39전처리/PYTHON

 

문제의 덩어리 형제

 

 

1. 컬럼별 빈리스트 묶음, 주소 리스트 묶음을 for문에 넣지 않으려고만 생각했던 코드이다.

2. 임시 데이터프레임을 거치지 않아 리스트에 계속~ 계속해서 데이터가 쌓인다.

3. 한번에 책정보 100개씩 10개의 컬럼을 모았고 이걸 24번 (2년) 반복한다.

4. 안그래도 코드가 거슬렸는데 문제는 1000개씩 모으고 싶을 때 발생(한 줄 알았다.)

(근데 이부분은 내가 실수했다. 내 코드를 사용해도 간단하게 2년치 200개가 가능하다.)

 

<K사 크롤링 때는 이렇게 했다. -임시데이터프레임 활용편->

 

1. K사 때를 보면 모든 컬럼에 대한 리스트를 1차로 만든다.

2. 2차로 임시 데이터프레임으로 모든 리스트를 묶어서 데이터셋을 만든다.

3. result_df에 만든 데이터프레임을 concat한다. 이과정을 1개월씩 반복!

 

BUT

 

1. 주말에 정신이 없는지 리스트를 계속 쌓으면 101개부터 잘못 쌓인다고 오해했다.

2. 임시 데이터프레임을 활용하고 싶어서 전역변수에 있던 리스트를 안으로 집어넣었다.

3. 그 과정에서 리스트 초기화가 반복되는 문제가 생겨버렸다. 아래를 보자.

4. 빈리스트, 주소리스트 두덩어리는 덩어리대로 두고 임시DF를 또 할당해야했다.

5. 급하게 만든게 문제의 덩어리가 이것이다.

 

 

1. if a == 100: 때문에 100이 되기 전에는 99번까지 돌면서 리스트를 초기화 해버린다.

2. 다시 봐도 환장하는 코드를 만들었다. 몇번 오류가 나니 생각을 달리했다.

3. 문득 왜 "사용자 정의 함수"를 쓰지 않지? 반복을 잡는덴 이거만한 게 없다는 생각이 들었다.

 

def find_text_list(col, url):

 

1. 매개인자 두 개를 동시에 부여함으로써 한 줄에 컬럼리스트, 주소리스트, 함수 실행을 동시에 할 수 있게 됐다.

2. 여전히 빈리스트 덩어리가 쓰이고, 주소리스트 덩어리 대신 임시데이터프레임 덩어리가 생겼다.

3. 하지만! if a == 100: 해괴한 조건문이 더이상 쓰이지 않는다.

4. 하지만! 리스트를 "반복문 한 번"에 "리스트 하나씩" 만들고 날아가던 때와 다르다.

5. 중요한 건 "반복문 한 번에, 리스트를 몽!땅!" 만들어서 임시DF에 넣는 것이다.

6. 중요한 건 반복문을 돌 때 리스트가 초기화/중복 오류를 없애는 것이었다.

7. 비슷한 것 끼리 묶으니 길다란 변수명 묶음이 없어져서 가독성이 좋아졌다.

8. 임시데이터프레임-concat을 쓰려면 경우의 수마다 부여해서는 안된다. 알겠지?

 

여전히 잘 돌아가고 있는 내 코드를 보면서 마무리 하겠다.

 

 

결과가 나와서 추가한다.

 

 

한번에 성공이다. 10년치의 더 많은 데이터를 모아보는 것도 가능하겠다.