λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸŽ“ Education

[인곡지λŠ₯ 톡합과정] 2μ£Όμ°¨ : Pandas 라이브러리, μ›Ή 크둀링 기초

by vodkassi 2021. 1. 21.
728x90

# 일 7μ‹œκ°„ κ°•μ˜μ˜ κ°•ν–‰κ΅°

 

본격적인 μˆ˜μ—…μ΄ μ‹œμž‘λ˜μ–΄ 맀일 μ•„μΉ¨ 9μ‹œμ— μΌμ–΄λ‚˜ μˆ˜μ—…μ„ λ“£κ³ , 17μ‹œμ— λ§ˆλ¬΄λ¦¬ν•˜λŠ” 일 7μ‹œκ°„μ˜ 일정을 λͺΈμœΌλ‘œ μ†Œν™”ν•˜κ²Œ λ˜μ—ˆλ‹€. ν‰μ†Œ μ² μ €ν•œ μƒˆλ²½ν˜• 인간 μƒν™œμ„ ν–ˆλ˜ λ‚˜λŠ” 늘 2-3 μ‹œμ— μž λ“€μ–΄ 10μ‹œμ―€ μΌμ–΄λ‚˜ ν•˜λ£¨λ₯Ό μ‹œμž‘ν•˜κ³€ ν–ˆλŠ”λ°, κ°‘μžκΈ° 아침에 μΌμ–΄λ‚˜ 9μ‹œλΆ€ν„° λ‡Œλ₯Ό κ΅΄λ¦¬λ €λ‹ˆ 적응이 잘 λ˜μ§€ μ•Šμ•˜λ‹€. 이 μ‹œκΈ°μ—λŠ” μ‰¬λŠ” μ‹œκ°„μ— ν‹ˆν‹ˆμ΄ μžλŠ” λŒ€μ‹  저녁에 λ³΅μŠ΅μ„ λͺ°μ•„μ„œ ν•˜λ©° ν•™μŠ΅ 진도λ₯Ό 따라갔닀. 

 

λͺ¨λ“  κ΅­λΉ„κ΅μœ‘/μ½”λ”©κ΅μœ‘ ν”„λ‘œκ·Έλž¨μ΄ κ·Έλ ‡μ§€λŠ” μ•Šκ² μ§€λ§Œ, λ‚΄κ°€ μˆ˜κ°•ν•˜κ³  μžˆλŠ” ꡐ윑과 같이 ν•˜λ£¨μ— 5μ‹œκ°„ μ΄μƒμ˜ κ°•μ˜λ₯Ό λ“£κ²Œ λ˜λŠ” 경우, 이후 λ‚΄μš©μ„ 따라가기 μœ„ν•΄μ„œ μ œλ•Œ λ³΅μŠ΅ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€κ³  λŠλ‚€λ‹€. (그리고 이 뢀뢄은 특히 1μ°¨ μ„Έλ―Έν”„λ‘œμ νŠΈ 이후 λ¨Έμ‹ λŸ¬λ‹ νŒŒνŠΈμ— μ§„μž…ν•˜λ©΄μ„œ 더 μ²΄κ°ν•˜κ²Œ λ˜μ—ˆλ‹€. 파이썬 및 데이터뢄석 λ‚΄μš©μ΄μ•Ό μ‹€μŠ΅ 파일둜 같이 μž‘μ—…ν•˜λ©° μ΅ν˜€λ‚˜κ°€λŠ” μˆ˜μ—…μœΌλ‘œ μ§„ν–‰λ˜μ—ˆμ§€λ§Œ λ¨Έμ‹ λŸ¬λ‹ μ΄ν›„λΆ€ν„°λŠ” 이둠 μœ„μ£Ό + 짧은 μ‹€μŠ΅μœΌλ‘œ κ΅¬μ„±λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 볡슡 없이 λ„˜μ–΄κ°”λ‹€κ°€λŠ” μ½”λ“œ λ‚΄μš©μ„ μ „ν˜€ μ΄ν•΄ν•˜μ§€ λͺ»ν•  μˆ˜λ„ μžˆλ‹€)


 

# 파이썬 문법 기초

 

λ‘˜μ§Έ μ£Ό μ›”μš”μΌμ—λŠ” 파이썬 기초 문법 ν•™μŠ΅μ„ λ§ˆλ¬΄λ¦¬ν•˜λŠ” μ‹œκ°„μ„ κ°€μ‘Œλ‹€. ν•™μŠ΅ν•œ λ‚΄μš©μ€ 크게 μ„Έ 가지 μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄ λ³Ό 수 μžˆλ‹€.

 

  • μžλ£Œν˜•
    • Integer (int) - μ •μˆ˜λ‘œ ν‘œν˜„λ˜λŠ” 숫자 (μ†Œμˆ˜μ  μ—†μŒ)
    • Float (float) - μ‹€μˆ˜λ‘œ ν‘œν˜„λ˜λŠ” 숫자 (μ†Œμˆ˜μ  있음)
    • String (str) - μΈκ°„μ˜ μ–Έμ–΄λ‘œ ν‘œν˜„λ˜λŠ” λ¬Έμžν˜•
    • Dictionary (dict) - key 와 value 둜 이루어져, key λ₯Ό ν™œμš©ν•˜μ—¬ value λ₯Ό μ†Œν™˜ν•  수 있게 ν•˜λŠ” μ‚¬μ „ν˜• {  key : value }
    • Boolean (bool) - 결과값이 True (μ°Έ) / False (거짓) 으둜 λ‚˜μ˜€λŠ” μ°Έκ±°μ§“ν˜•
    • list (list) - index 와 item 으둜 이루어져, index λ₯Ό ν™œμš©ν•˜μ—¬ item 을 찾을 수 μžˆλ„λ‘ ν•˜λŠ” λ¦¬μŠ€νŠΈν˜•
    • Tuple - ( , ) 으둜 이루어져 보톡 κ²°κ³Όκ°’μœΌλ‘œ 주어짐
    • Set (set) - list 와 같은 μžλ£Œν˜•μ„ ν•˜λ‚˜μ˜ μ§‘ν•©μœΌλ‘œ λ¬Άμ–΄μ€Œ (쀑볡값 λΆˆκ°€, μˆœμ„œ μ—†μŒ) 
  • ν•¨μˆ˜
    • if  - λ³€μˆ˜κ°€ νŠΉμ • 쑰건을 μΆ©μ‘±ν•  경우 μ‹€ν–‰ν•˜λ„λ‘ ν•˜λŠ” ν•¨μˆ˜, elif 및 else 와 ν•¨κ»˜ μ‹€ν–‰
    • while - λ³€μˆ˜κ°€ νŠΉμ • 값을 μΆ©μ‘±ν•˜λŠ” λ™μ•ˆ μ‹€ν–‰ν•˜λ„λ‘ ν•˜λŠ” ν•¨μˆ˜, break 둜 μ‹€ν–‰ 쀑지해쀄 수 있음 
    • for - μ–΄λ–€ λ³€μˆ˜λ₯Ό μ μš©ν• μ§€ 지정해주도둝 ν•˜λŠ” ν•¨μˆ˜ 
# x λΌλŠ” λ³€μˆ˜μ— 1 λŒ€μž…
x = 1

# x κ°€ 0 이라면 좜λ ₯ν•˜κ³ , μ•„λ‹ˆλΌλ©΄ 'not 0' 좜λ ₯ν•˜λ„λ‘ ν•˜λŠ” if ν•¨μˆ˜ 
if x == 0:
	print(x)
else: 
	print("not 0")
    
    
# x의 μƒνƒœκ°€ 1일 λ™μ•ˆ x좜λ ₯
while x == 1 :
	print(x)
    break #λ₯Ό 톡해 μ‹€ν–‰ 쀑지 κ°€λŠ₯



# μƒˆλ‘œμš΄ 리슀트 생성
test = [0, 1, 2]

# test λΌλŠ” list μ•ˆμ— λ“€μ–΄μžˆλŠ” 각각의 item듀에 λŒ€ν•΄, 1을 λ”ν•œ 값을 좜λ ₯
for item in test:
	print(item+1)

 

  • 클래슀
    • 객체 (λ˜λŠ” instance) λ₯Ό μ •μ˜ν•˜λŠ” 틀이라고 λ³Ό 수 μžˆλ‹€. 클래슀 μ•ˆμ—μ„œ κ΅¬ν˜„λœ ν•¨μˆ˜λŠ” λ©”μ„œλ“œλΌκ³  뢈리며, 잘 ν™œμš©ν•˜λ©΄ 맀우 μœ μš©ν•˜κ²Œ μ“Έ 수 μžˆλ‹€. 

 

λ³Έλ¬Έμ—λŠ” κ°„λ‹¨νžˆλ§Œ μš”μ•½ν•΄ λ‘μ—ˆμ§€λ§Œ, μ‹€μ œλ‘œ μ΄λŸ¬ν•œ 기초 λ‚΄μš©κ³Ό μ‹€μŠ΅μ„ 거의 ν•˜λ£¨ λ°˜λ§Œμ— λ‹€ λλƒˆλ‹€. 파이썬 문법은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ€‘μ—μ„œ μ‰¬μš΄ 좕에 μ†ν•˜λŠ” 편이라 μ‹œκ°„μ„ 였래 νˆ¬μžν•˜μ§€ μ•Šμ•„λ„ 금방 읡힐 수 μžˆλ‹€. 문법도 쉽고 μ—¬λŸ¬ λͺ¨λ“ˆμ΄λ‚˜ 라이브러리λ₯Ό ν™œμš©ν•  수 μžˆλŠ” ν™•μž₯성도 μ’‹μ•„μ„œ ν™•μ‹€νžˆ 초보자-friendly ν•œ 면이 μžˆλ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. 

 


# Pandas 와 Dataframe

 

파이썬 문법을 λ–Όκ³  κ³§λ°”λ‘œ λ°μ΄ν„°λΆ„μ„μ—μ„œ κ°€μž₯ 널리 ν™œμš©λ˜λŠ” pandas λͺ¨λ“ˆμ„ λ‹€λ£¨λŠ” 방법을 λ°°μ› λ‹€. ν–‰λ ¬λ‘œ κ΅¬μ„±λœ dataframe 을 λ§Œλ“œλŠ” 방법뢀터 ν•©μΉ˜λŠ” 법, μˆ˜μ •ν•˜λŠ” 법, μ €μž₯ν•˜λŠ” 법 λ“± pandas μ—μ„œ CRUD (Create - Read - Update - Delete) λ₯Ό ν•˜λŠ” μ£Όμš” 방법을 ν•™μŠ΅ν–ˆλ‹€. 

 

이틀에 걸쳐 μ§„ν–‰λœ μ‹€μŠ΅μ„ 톡해 κ²°κ³Όμ μœΌλ‘œλŠ”

 

μ΄λ ‡κ²Œ 생긴 dataframe 을: 

μ „μ²˜λ¦¬ 이후, 이런 λ°©μ‹μœΌλ‘œ μ‹œκ°ν™”ν•  수 μžˆμ—ˆλ‹€: 

λ¬Όλ‘  이것 말고도 μ‹œκ°ν™”μ— μ‚¬μš©ν–ˆλ˜ 방법은 geojson 을 ν™œμš©ν•œ 지도 μ‹œκ°ν™” λ“± λ”μš± λ‹€μ–‘ν–ˆλ‹€. 그런데 κ°•μ˜λ₯Ό λ“£λ‹€κ°€ μ˜ˆμ „μ— 빌렸던 "파이썬으둜 데이터 주무λ₯΄κΈ°"λΌλŠ” 책을 뒀적여 λ³΄μ•˜λŠ”λ°, 이 책에 λ‚˜μ˜€λŠ” 예제 2번과 거의 λ™μΌν•œ λ‚΄μš©μ΄λΌλŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€ γ…‹γ…‹γ…‹ μ²˜μŒμ—λŠ” μ˜μ•„ν–ˆμœΌλ‚˜ κ²°κ³Όμ μœΌλ‘œλŠ” μˆ˜μ—… λ‚΄μš©μ„ λ†“μΉ˜κ±°λ‚˜ 이해 μ•ˆ λ˜λŠ” λΆ€λΆ„ 있으면 λ³Ό μ†ŒμŠ€κ°€ ν•˜λ‚˜ 더 생겨 μ’‹μ•˜λ‹€. 

 

λ‚˜λŠ” μ›λž˜ 업무λ₯Ό ν•˜κ±°λ‚˜ ν”„λ‘œμ νŠΈλ₯Ό ν•  λ•Œ 엑셀을 ν™œμš©ν•˜μ—¬ μžλ£Œλ‚˜ 데이터λ₯Ό μ •λ¦¬ν•˜λŠ” 것에 집착 μ•„λ‹Œ 집착을 ν•˜λŠ” μ‚¬λžŒμ΄μ—ˆλ‹€. 엑셀이 νŽΈλ¦¬ν•˜κΈ°λ„ ν•˜μ§€λ§Œ 쒋은 κ²°κ³Όλ₯Ό λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©ν•  수 μžˆλŠ” 졜고의 툴이라고 느꼈기 λ•Œλ¬Έμ΄λ‹€. 처음 엑셀을 μ ‘ν•˜κ³  ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 방법을 배웠을 λ•Œμ˜ 즐거움이 아직도 κΈ°μ–΅λ‚˜λŠ”λ°, pandas λ₯Ό ν™œμš©ν•˜μ—¬ dataframe 을 λ‹€λ£¨λŠ” 방법을 λ°°μš°λ‹ˆ κ·Έ λ•Œμ˜ 감정이 λ‹€μ‹œ λ– μ˜¬λžλ‹€. 

 

μˆ˜μ—…κ³Ό μ‹€μŠ΅μ„ λ“€μœΌλ©° λŠλ‚€ pandas 의 졜μž₯점은 :

  1. python 문법을 ν™œμš©ν•˜μ—¬ 기본적인 ν•¨μˆ˜λΆ€ν„° λ³΅μž‘ν•œ ν•¨μˆ˜κΉŒμ§€ νŽΈλ¦¬ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€. 
  2. 데이터 양이 λ§Žμ•„μ Έλ„ μ‹€ν–‰ 속도가 잘 κ°μ†Œν•˜μ§€ μ•ŠλŠ”λ‹€ 

λ°˜λŒ€λ‘œ λ§ν•˜λ©΄ 이 두 가지가 λ˜μ§€ μ•ŠλŠ” 것이 엑셀을 ν™œμš©ν•˜λ©° λŠλ‚€ κ°€μž₯ 큰 단점이기도 ν–ˆλ‹€. dataframe 을 λ‹€λ£° 쀄 μ•Œκ²Œ λ˜μ–΄ 더 λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό λ”μš± 효율적으둜 λ‹€λ£¨κ²Œ λ˜μ–΄, μ•žμœΌλ‘œ λ§Žμ€ ν”„λ‘œμ νŠΈλ₯Ό λ”μš± 즐겁게 μ°Έμ—¬ν•  수 μžˆμ„ κ²ƒμ΄λž€ κΈ°λŒ€κ°μ΄ λ“ λ‹€. 


# 웹크둀링과 μžμ—°μ–΄μ²˜λ¦¬ (NLP)

 

μ΄μ–΄μ„œ beautiful soup 을 ν™œμš©ν•œ μ›Ή 크둀링을 ν•™μŠ΅ν–ˆλ‹€. λ“€μ–΄λ³΄λ‹ˆ 'μ›Ή 크둀링' 이라고 μΉ­ν•˜λŠ” 곳은 μš°λ¦¬λ‚˜λΌλ°–μ— μ—†κ³ , 곡식 λͺ…칭은 'μ›Ή μŠ€ν¬λ ˆμ΄ν•‘'이라고 ν•˜λŠ”λ°, μ–΄μ°Œ λ˜μ—ˆλ“  의미만 ν†΅ν•˜λ©΄ λ˜λŠ” 것 κ°™λ‹€. 사싀 beautiful soup 은 1μ£Όμ°¨ λ•Œ 잠깐 λ‹€λ€˜μ–΄μ„œ μ•„μ£Ό μƒˆλ‘­μ§€λŠ” μ•Šμ•˜λŠ”λ°, 직접 개발자 도ꡬλ₯Ό ν™œμš©ν•˜μ—¬ ν™ˆνŽ˜μ΄μ§€ λ‚΄μ˜ νƒœκ·Έλ₯Ό 일일이 μ‚΄νŽ΄λ³΄λŠ” 과정이 더 μž¬λ°Œμ—ˆλ‹€. 

 

μ˜ν™” 리뷰 μ •λ³΄μ˜ ν…μŠ€νŠΈλ₯Ό λΆˆλŸ¬μ™€ 파일둜 μ €μž₯ν•œ λ’€ 좜λ ₯ν•˜λŠ” μž‘μ—…κΉŒμ§€λŠ” μƒˆλ‘œμš΄ λ‚΄μš©μ΄ μ—†μ—ˆμ§€λ§Œ, 이후에 μ§„ν–‰λœ μžμ—°μ–΄μ²˜λ¦¬ 과정이 μΈμƒμ μ΄μ—ˆλ‹€. μžμ—°μ–΄μ²˜λ¦¬λž€ 말 κ·ΈλŒ€λ‘œ μ‚¬λžŒμ΄ μ“°λŠ” μ–Έμ–΄ ( = μžμ—°μ–΄) λ₯Ό ν”„λ‘œκ·Έλž˜λ°μ— ν™œμš©ν•  수 μžˆλ„λ‘ μ •μ œν•΄μ£ΌλŠ” μž‘μ—…μ΄λ‹€. 이λ₯Ό 잘 μ§„ν–‰ν•œλ‹€λ©΄ μ˜ν™” 리뷰 κ°„ μœ μ‚¬λ„λ₯Ό κ΅¬ν•˜κ±°λ‚˜, λ‚˜μ•„κ°€μ„œλŠ” λ‚΄κ°€ 쒋은 리뷰λ₯Ό 단 μ˜ν™”μ™€ μœ μ‚¬ν•œ μ˜ν™”λ₯Ό μΆ”μ²œν•΄μ£ΌλŠ” μ‹œμŠ€ν…œλ„ κ΅¬ν˜„ν•  수 μžˆλ‹€. 

 

μžμ—°μ–΄μ²˜λ¦¬λŠ” 기본적으둜 000가지 단계λ₯Ό 거쳐 이루어진닀. 

  1. 데이터 μˆ˜μ§‘ : 크둀링, api 등을 ν™œμš©ν•˜μ—¬ μžμ—°μ–΄ μˆ˜μ§‘
  2. μ „μ²˜λ¦¬-1 : nltk λ₯Ό ν™œμš©ν•˜μ—¬ ν…μŠ€νŠΈ 토큰화 
  3. μ „μ²˜λ¦¬-2 : stopwords, ν’ˆμ‚¬νƒœκΉ…μ„ ν™œμš©ν•˜μ—¬ ν† ν°ν™”λœ 단어듀 쀑 λΆˆμš©μ–΄ μ‚­μ œ
  4. μ „μ²˜λ¦¬-3: lemmatize λ₯Ό ν™œμš©ν•˜μ—¬ λ‹¨μ–΄μ˜ μ›ν˜• 볡ꡬ 

μ „μ²˜λ¦¬κ°€ μ™„λ£Œλœ ν…μŠ€νŠΈ 2 개의 단어 μœ μ‚¬λ„λ₯Ό κ΅¬ν•˜λŠ” μž‘μ—…μΈ tfidf-vectorization 을 톡해, 두 ν…μŠ€νŠΈ κ°„μ˜ μœ μ‚¬λ„ (cosine similarity) λ₯Ό ꡬ할 수 μžˆλ‹€. μœ μ‚¬λ„ 값은 -1 κ³Ό 1 μ‚¬μ΄μ˜ 값이 λ‚˜μ˜€κ²Œ λ˜λŠ”λ°, -1에 κ°€κΉŒμšΈμˆ˜λ‘ λ°˜λŒ€λ˜λŠ” ν…μŠ€νŠΈλΌλŠ” 의미이며, 1에 κ°€κΉŒμšΈμˆ˜λ‘ μœ μ‚¬ν•œ ν…μŠ€νŠΈλΌλŠ” 의미λ₯Ό μ§€λ‹Œλ‹€. 

 

μ˜ν™” 리뷰 데이터 μžμ—°μ–΄μ²˜λ¦¬λ₯Ό 톡해 두 μ˜ν™” κ°„μ˜ μœ μ‚¬λ„λ₯Ό ꡬ할 수 μžˆμ—ˆλŠ”λ° κ²°κ³Όκ°€ κ½€ 잘 λ‚˜μ˜€λŠ”κ²Œ μ‹ κΈ°ν–ˆλ‹€. (그런데 이후 μ‹€μŠ΅ + ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ μ•Œκ²Œλœ 점은, 아직 ν•œκ΅­μ–΄λŠ” μ˜μ–΄λ§ŒνΌ μžμ—°μ–΄μ²˜λ¦¬κ°€ λ°œμ „ν•˜μ§€ μ•Šμ•„ 잘 μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” κ²½μš°λ„ μžˆλ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€. 각 μ–Έμ–΄λ§ˆλ‹€ μ–Έμ–΄μ˜ 문법도 λ‹€λ₯΄κ³  λΆˆμš©μ–΄λ„ λ‹€λ₯Ό 것이기에 μ ˆλŒ€μ μΈ 기쀀을 가지고 μ—°μŠ΅ν•˜λ©΄ μ•ˆλ  것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.)

 

 


# 마무리 

 

μ—¬λŸ¬κ°€μ§€ λ‚΄μš©μ„ ν•œ λ²ˆμ— 배운 μ£Όκ°„μ΄μ—ˆλ˜μ§€λΌ 정신없기도 ν–ˆμ§€λ§Œ μƒˆλ‘œμš΄ μŠ€ν‚¬μ„ 단기간에 λ°°μ›€μœΌλ‘œμ¨ ν•œμΈ΅ 더 μ„±μž₯ν–ˆλ‹€! 특히 μ—¬λŸ¬ 이둠적인 κ΅μœ‘μ„ 톡해 μ½”λ“œλ₯Ό 돌릴 λ•Œ 데이터가 μ›€μ§μ΄λŠ” λ©”μ»€λ‹ˆμ¦˜κ³Ό, μ½”λ“œμ˜ κ΅¬ν˜„ 원리 등을 μ•Œκ²Œ λ˜λ‹ˆ 더 μž¬λ°Œμ—ˆλ‹€. 

 

λ§ˆλ¬΄λ¦¬λŠ” κ°•μ‚¬λ‹˜μ΄ μ˜¬λ €μ£Όμ‹  ν›ˆν›ˆν•œ μŠ¬λž™ 메세지와 ν•¨κ»˜ ~~ 

 

 

λŒ“κΈ€