πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[1νŒ€/ν•œκ·œλ¦Ό] 9μ£Όμ°¨ 파이썬 μŠ€ν„°λ”” - λͺ¨λ“ˆκ³Ό νŒ¨ν‚€μ§€

onegyul 2023. 5. 25. 14:35

9μ°¨μ‹œ_κ°•μ˜μ•ˆ_λͺ¨λ“ˆκ³ΌνŒ¨ν‚€μ§€.pdf
1.31MB
9μ°¨μ‹œ_과제_λͺ¨λ“ˆκ³ΌνŒ¨ν‚€μ§€.pdf
0.11MB

9μ£Όμ°¨ κ°•μ˜ μ£Όμ œλŠ” 파이썬 ν”„λ‘œμ νŠΈμ˜ 기본이라고 ν•  수 μžˆλŠ” λͺ¨λ“ˆκ³Ό νŒ¨ν‚€μ§€ μž…λ‹ˆλ‹€.

1. λͺ¨λ“ˆκ³Ό νŒ¨ν‚€μ§€μ˜ 이해

1) λͺ¨λ“ˆμ˜ κ°œλ…

λͺ¨λ“ˆ(module)은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλ§Œ λ‚˜μ˜€λŠ” κ°œλ…μ€ μ•„λ‹ˆλ‹€. μžλ™μ°¨ λΆ€ν’ˆμ΄λ‚˜ 벽돌 등도 ν•˜λ‚˜μ˜ λͺ¨λ“ˆ κ°œλ…μœΌλ‘œ μ œμž‘λ˜λ“―μ΄ λͺ¨λ“ˆμ€ 이미 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 외에도 맀우 λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©λ˜κ³  μžˆλ‹€.

  • λͺ¨λ“ˆ module : μž‘μ€ ν”„λ‘œκ·Έλž¨ 쑰각을 λœ»ν•˜λ©°, ν•˜λ‚˜ν•˜λ‚˜ μ—°κ²°ν•΄ μ–΄λ–€ λͺ©μ μ„ 가진 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ° μœ„ν•œ μž‘μ€ ν”„λ‘œκ·Έλž¨ 각 λͺ¨λ“ˆ μ—­μ‹œ μ €λ§ˆλ‹€μ˜ 역할이 μžˆμ–΄ μ„œλ‘œ λ‹€λ₯Έ λͺ¨λ“ˆκ³Ό μΈν„°νŽ˜μ΄μŠ€(interface)만 μ—°κ²°λ˜λ©΄ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€ : ν•¨μˆ˜μ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯ν•˜λŠ” μ•½μ†μœΌλ‘œ, ν•΄λ‹Ή λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ¨λ“ˆ κ°„μ˜ 연결을 μœ„ν•œ 약속이 ν•„μš”ν•œλ°, 이λ₯Ό μΈν„°νŽ˜μ΄μŠ€λΌκ³  ν•œλ‹€.

νŒŒμ΄μ¬μ—μ„œλ„ 이미 μ—¬λŸ¬ 번 λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ˜€λ‹€. λ‚΄μž₯ λͺ¨λ“ˆμ€ νŒŒμ΄μ¬μ—μ„œ 기본적으둜 μ œκ³΅ν•˜λŠ” λͺ¨λ“ˆμΈλ°, λŒ€ν‘œμ μœΌλ‘œ random λͺ¨λ“ˆμ΄ μžˆλ‹€. random λͺ¨λ“ˆμ€ λ‚œμˆ˜λ₯Ό μ‰½κ²Œ μƒμ„±μ‹œμΌœ μ£ΌλŠ” λͺ¨λ“ˆμ΄λ‹€.

  • import random : import ꡬ문은 뒀에 μžˆλŠ” λͺ¨λ“ˆμΈ random을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν˜ΈμΆœν•˜λΌλŠ” λͺ…λ Ήμ–΄ randint( ) ν•¨μˆ˜ : λͺ¨λ“ˆ μ•ˆμ— μžˆλŠ” ν•¨μˆ˜

2) νŒ¨ν‚€μ§€μ˜ κ°œλ…

  • νŒ¨ν‚€μ§€(packages) : λͺ¨λ“ˆμ˜ 묢음

fromμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ λͺ¨λ“ˆμ€ ν˜ΈμΆœν•œ κ²½μš°κ°€ μžˆλŠ”λ°, μ΄λŠ” λͺ¨λ“ˆμ„ ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€λΆ€ν„° ν˜ΈμΆœν•˜λŠ” λͺ…령어이닀.

λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€ μ•ˆμ— μ—¬λŸ¬ 개의 λͺ¨λ“ˆμ΄ μžˆλŠ”λ°, 이 λͺ¨λ“ˆλ“€μ΄ μ„œλ‘œ 포함 관계λ₯Ό 가지며 κ±°λŒ€ν•œ νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“ λ‹€.

2. λͺ¨λ“ˆ λ§Œλ“€κΈ°

1) λͺ¨λ“ˆ λ§Œλ“€κΈ° μ‹€μŠ΅

λͺ¨λ“ˆμ„ λ§Œλ“œλŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž. νŒŒμ΄μ¬μ—μ„œλŠ” .py 파일 μžμ²΄κ°€ λͺ¨λ“ˆμ΄λ‹€. κ°€μž₯ μ‰½κ²Œ 파이썬 λͺ¨λ“ˆμ„ λ§Œλ“œλŠ” 방법은 ν˜„μž¬ μ‹€μŠ΅ 쀑인 λ””λ ‰ν„°λ¦¬μ—μ„œ .py νŒŒμΌμ„ ν•˜λ‚˜ λ§Œλ“€κ³ , κ·Έ νŒŒμΌμ— ν•„μš”ν•œ ν•¨μˆ˜λ₯Ό μ €μž₯ν•˜λ©΄ λœλ‹€. 그러면 λ‹€λ₯Έ 파이썬 νŒŒμΌμ΄λ‚˜ 파이썬 μ…Έμ—μ„œ import문을 μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή λͺ¨λ“ˆμ˜ ν•¨μˆ˜λ₯Ό μ‰½κ²Œ λΆˆλŸ¬λ‚Ό 수 μžˆλ‹€.

  • fah_converter.py : λͺ¨λ“ˆμ„ λ§Œλ“€μ–΄ μ €μž₯ν•˜κΈ°
  • module_ex.py : ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œ μž‘μ„±ν•˜μ—¬ μ €μž₯ν•˜κΈ°

기쑴에 λ§Œλ“  μ½”λ“œ 파일의 μ΄λ¦„λ§Œ μž…λ ₯ν•˜μ—¬ 파일 λ‚΄μ˜ ν•¨μˆ˜λ₯Ό 뢈러 μ‚¬μš©ν•  수 μžˆλ‹€. 즉, .py μžμ²΄κ°€ ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ΄ λœλ‹€.

ν˜ΈμΆœλ°›λŠ” λͺ¨λ“ˆκ³Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨μ΄ 같은 디렉터리 μ•ˆμ— μžˆμ–΄μ•Ό ν•œλ‹€.

2) λ„€μž„μŠ€νŽ˜μ΄μŠ€

  • λ„€μž„μŠ€νŽ˜μ΄μŠ€(namespace) : λͺ¨λ“ˆ 호좜의 λ²”μœ„λ₯Ό μ§€μ •ν•˜λŠ” 것

ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨μ˜ ν•¨μˆ˜ 이름과 호좜된 λͺ¨λ“ˆμ˜ ν•¨μˆ˜ 이름이 같은 κ²½μš°κ°€ λ°œμƒν•  μˆ˜λ„ μžˆλŠ”λ°, 이 경우 호좜된 λͺ¨λ“ˆμ˜ μ‚¬μš© λ²”μœ„λ₯Ό λͺ…ν™•νžˆ 지정해야 ν•œλ‹€. μ΄λ•Œ μ‚¬μš©ν•˜λŠ” κ°œλ…μ΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ΄λ‹€.

λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“œλŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

  1. λͺ¨λ“ˆ 이름에 alias λ₯Ό μƒμ„±ν•˜μ—¬ λͺ¨λ“ˆ μ•ˆμœΌλ‘œ μ½”λ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법

μ•Œλ¦¬μ•„μŠ€λŠ” μΌμ’…μ˜ λ³„μΉ­μœΌλ‘œ λͺ¨λ“ˆμ˜ 이름을 λ°”κΏ” λΆ€λ₯Ό λ•Œ μ‚¬μš©ν•œλ‹€.

as ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“ˆμ˜ 이름을 κ°„λ‹¨ν•˜κ²Œ λ°”κΏ” μ‚¬μš©ν•˜λ©΄ λœλ‹€.

ν˜„μž¬ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨μ— 같은 μ΄λ¦„μ˜ μ½”λ“œκ°€ μžˆλ”λΌλ„ λͺ¨λ“ˆ λ‚΄μ—μ„œλ§Œ ν•œμ •ν•˜μ—¬ ν˜ΈμΆœν•΄μ•Ό 함

  1. from ꡬ문을 μ‚¬μš©ν•˜μ—¬ λͺ¨λ“ˆμ—μ„œ νŠΉμ • ν•¨μˆ˜ λ˜λŠ” 클래슀만 ν˜ΈμΆœν•˜λŠ” 방법

‘from λͺ¨λ“ˆλͺ… import λͺ¨λ“ˆ μ•ˆμ— μžˆλŠ” ν•¨μˆ˜λͺ…’의 ν˜•νƒœλ‘œ μž‘μ„±ν•˜λ©΄ ν•΄λ‹Ή λͺ¨λ“ˆ μ•ˆμ— μžˆλŠ” ν•¨μˆ˜λ₯Ό κ°€μ Έλ‹€ μ‚¬μš©ν•  수 μžˆλ‹€. μ£Όμ˜ν•  점은 from은 κΌ­ λͺ¨λ“ˆμ„ ν˜ΈμΆœν•˜κΈ° μœ„ν•œ ν‚€μ›Œλ“œκ°€ μ•„λ‹ˆλΌλŠ” 것이닀.

  • νŒ¨ν‚€μ§€λ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜ ν•΄λ‹Ή νŒ¨ν‚€μ§€ μ•ˆμ— μžˆλŠ” λͺ¨λ“ˆμ„ ν˜ΈμΆœν•  λ•Œλ„ μ‚¬μš©ν•  수 있음. from의 역할은 νŒ¨ν‚€μ§€μ™€ νŒ¨ν‚€μ§€, νŒ¨ν‚€μ§€μ™€ λͺ¨λ“ˆ 간에 쀑첩 ꡬ쑰λ₯Ό ν˜ΈμΆœν•˜λŠ” κ²ƒμž„.
  1. ν•΄λ‹Ή λͺ¨λ“ˆ μ•ˆμ— μžˆλŠ” λͺ¨λ“  ν•¨μˆ˜, 클래슀, λ³€μˆ˜λ₯Ό κ°€μ Έμ˜€λŠ” λ³„ν‘œ( * )λ₯Ό μ‚¬μš©ν•˜λŠ” 것

‘from λͺ¨λ“ˆλͺ… import *’은 ν•΄λ‹Ή λͺ¨λ“ˆ μ•ˆμ— μžˆλŠ” λͺ¨λ“  μ‚¬μš© κ°€λŠ₯ν•œ λ¦¬μ†ŒμŠ€λ₯Ό ν˜ΈμΆœν•œλ‹€λŠ” 뜻


μ•Œλ¦¬μ•„μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ ν˜ΈμΆœν•˜λŠ” 방법을 κ°€μž₯ μ„ ν˜Έν•¨. 각각의 ν•¨μˆ˜λ‚˜ ν΄λž˜μŠ€κ°€ μ–΄λ””μ„œ λ‚˜μ˜€λŠ”μ§€ λͺ…ν™•νžˆ ν‘œν˜„ν•˜λŠ” 것이 μ’‹κΈ° λ•Œλ¬Έ.

3) λ‚΄μž₯ λͺ¨λ“ˆμ˜ μ‚¬μš©

**λ‚΄μž₯ λͺ¨λ“ˆ(built-in module)**에 λŒ€ν•΄ μ•Œμ•„λ³΄μž. νŒŒμ΄μ¬μ€ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄ 기본적으둜 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 문자처리, μ›Ή, μˆ˜ν•™ κ΄€λ ¨ λ‹€μ–‘ν•œ λ‚΄μž₯ λͺ¨λ“ˆμ„ μ œκ³΅ν•˜λ©°, 별닀λ₯Έ 쑰치 없이 importλ¬Έ ν•œ μ€„λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

  1. random λͺ¨λ“ˆ

λ‚œμˆ˜ 생성 λͺ¨λ“ˆλ‘œ, μ •μˆ˜ λͺ¨λ“ˆμ„ μƒμ„±ν•˜λŠ” randint( ), μž„μ˜μ˜ λ‚œμˆ˜λ₯Ό μƒμ„±ν•˜λŠ” **random( )**이 있음

import random
print(random.randint (0, 100))
print(random.random())
  1. time λͺ¨λ“ˆ

μ‹œκ°„κ³Ό κ΄€λ ¨λœ λͺ¨λ“ˆλ‘œ, 일반적으둜 μ‹œκ°„μ„ λ³€κ²½ν•˜κ±°λ‚˜ ν˜„μž¬ μ‹œκ°μ„ μ•Œλ €μ€Œ.

import time
print(time.localtime())
  1. urlib λͺ¨λ“ˆ

μ›Ή κ΄€λ ¨ λͺ¨λ“ˆλ‘œ, μ›Ή μ£Όμ†Œμ˜ 정보λ₯Ό 뢈러옴.

λŒ€ν‘œμ μΈ request λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ νŠΉμ • URL 정보λ₯Ό 뢈러올 수 있음

import urlib.request
response = urlib.request.urlopen("<http://theteamlab.io>")
print(response.read())

3. νŒ¨ν‚€μ§€ λ§Œλ“€κΈ°

1) νŒ¨ν‚€μ§€μ˜ ꡬ성

νŒ¨ν‚€μ§€λŠ” ν•˜λ‚˜μ˜ λŒ€ν˜• ν”„λ‘œμ νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ¨λ“ˆμ˜ λ¬ΆμŒμ΄λ‹€. λͺ¨λ“ˆμ€ ν•˜λ‚˜μ˜ 파일둜 이루어져 있고, νŒ¨ν‚€μ§€λŠ” 파일이 ν¬ν•¨λœ 디렉터리(폴더)둜 κ΅¬μ„±λœλ‹€. 즉, νŒ¨ν‚€μ§€λŠ” μ—¬λŸ¬ 개의 .py 파일이 ν•˜λ‚˜μ˜ 디렉터리에 λ“€μ–΄κ°€ μžˆλŠ” 것을 λ§ν•œλ‹€.

파이썬의 νŒ¨ν‚€μ§€μ—λ„ μ˜ˆμ•½μ–΄κ°€ μžˆλ‹€. μ£Όμ˜ν•  점은 파일λͺ… μžμ²΄κ°€ 에약어λ₯Ό λ°˜λ“œμ‹œ μ§€μΌœμ•Όλ§Œ μ‹€ν–‰λ˜λŠ” κ²½μš°κ°€ μžˆλ‹€.

2) νŒ¨ν‚€μ§€ λ§Œλ“€κΈ° μ‹€μŠ΅

μΈν„°λ„·μ—μ„œ 주식 정보λ₯Ό 받아와 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜κ³ , ν•„μš”ν•œ 정보λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€μ–΄λ³΄μž.

  1. 디렉터리 κ΅¬μ„±ν•˜κΈ°

각 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ λ‹€μ‹œ μ„ΈλΆ€ νŒ¨ν‚€μ§€μ— 맞좰 디렉터리λ₯Ό κ΅¬μ„±ν•˜λŠ” 것을 말함

νŒ¨ν‚€μ§€ 이름은 ‘roboadvisor’이닀. 이 νŒ¨ν‚€μ§€μ˜ κΈ°λŠ₯은 크둀링, λ°μ΄ν„°λ² μ΄μŠ€, 뢄석이라고 ν•˜μž.

  • crawling(크둀링) : 주식 κ΄€λ ¨ 데이터λ₯Ό μΈν„°λ„·μ—μ„œ κ°€μ Έμ˜€λŠ” κΈ°λŠ₯
  • database(λ°μ΄ν„°λ² μ΄μŠ€) : κ°€μ Έμ˜¨ 데이터λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” κΈ°λŠ₯
  • analysis(뢄석) : ν•΄λ‹Ή 정보λ₯Ό λΆ„μ„ν•˜μ—¬ 의미 μžˆλŠ” 값을 λ½‘μ•„λ‚΄λŠ” κΈ°λŠ₯

디렉터리 ꡬ성을 μœ„ν•΄ cmd 창에 λ‹€μŒ λͺ…령을 μž…λ ₯ν•˜μ—¬ 디렉터리λ₯Ό μƒμ„±ν•œλ‹€.

mkdir roboadvisor
cd roboadvisor
mkdir crawling
mkdir database
mkdir analysis
  1. λ””λ ‰ν„°λ¦¬λ³„λ‘œ ν•„μš”ν•œ λͺ¨λ“ˆ λ§Œλ“€κΈ°

λ§Œλ“€μ–΄μ§„ 디렉터리에 ν•„μš”ν•œ λͺ¨λ“ˆμ„ λ§Œλ“ λ‹€. 각각의 디렉터리λ₯Ό ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€λ‘œ μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” μ˜ˆμ•½λœ νŒŒμΌμ„ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. λ°”λ‘œ __ init __.py이닀.

  • __ init __.py : 각 디렉터리가 νŒ¨ν‚€μ§€μž„μ„ λ‚˜νƒ€λ‚΄λŠ” μ˜ˆμ•½ 파일, νŒŒμΌμ„ μΆ”κ°€ν•˜λ©΄ νŒ¨ν‚€μ§€μ˜ κΈ°λ³Έ ꡬ쑰가 λ§Œλ“€μ–΄μ§„λ‹€.

각 ν•˜μœ„ νŒ¨ν‚€μ§€μ— ν¬ν•¨λœ λͺ¨λ“ˆμ— ν•„μš”ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

  • **series.py, statics.py** : analysis 디렉터리에 μžˆλŠ” νŒŒμΌμ— λ“€μ–΄κ°ˆ μ½”λ“œ. μ‹€ν–‰ μ—¬λΆ€λ§Œ ν™•μΈν•˜κΈ° μœ„ν•œ κ°„λ‹¨ν•œ μ½”λ“œμ΄λ‹€.

μž‘μ„±ν•œ λͺ¨λ“ˆμ„ μ‹€μ œλ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 파이썬 셸에 λ‹€μŒκ³Ό 같이 μž…λ ₯ν•œλ‹€. μ΄λ•Œ roboadvisor의 μƒμœ„ λ””λ ‰ν„°λ¦¬μ—μ„œ 파이썬 셸을 μ‹€ν–‰ν•΄μ•Ό μ •μƒμ μœΌλ‘œ μˆ˜ν–‰λœλ‹€.

from roboadvisor.analysis import series
print(series.series_test())
# series 좜λ ₯

roboadvisor 디렉터리 μ•ˆμ— ‘__ pycache __’ λΌλŠ” 디렉터리가 μƒμ„±λœλ‹€. 이 λ””λ ‰ν„°λ¦¬μ—λŠ” ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ΄ μž‘λ™λ  λ•Œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ λͺ¨λ“ˆλ“€μ˜ 컴파일 κ²°κ³Όλ₯Ό μ €μž₯ν•œλ‹€. μ΄λ ‡κ²Œ 디렉터리가 ν•œλ²ˆ μƒμ„±λ˜λ©΄ κ·Έ μ‹œμ μ—μ„œ ν•΄λ‹Ή λͺ¨λ“ˆμ„ μˆ˜μ •ν•΄λ„ κ²°κ³Όκ°€ λ°˜μ˜λ˜μ§€ μ•ŠλŠ”λ‹€. ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨ λ˜λŠ” 파이썬 셸이 μ™„μ „νžˆ μ’…λ£Œν•œ ν›„ μˆ˜μ •ν•΄μ•Ό ν•΄λ‹Ή λͺ¨λ“ˆμ˜ κ²°κ³Όκ°€ λ°˜μ˜λœλ‹€. 인터프리터 μ–Έμ–΄μ΄μ§€λ§Œ λ‚΄λΆ€μ μœΌλ‘œ 컴파일 과정도 거치고, 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ 가지 과정을 κ±°μΉœλ‹€λŠ” 것을 κΈ°μ–΅ν•˜μž.

  1. 디렉터리 λ³„λ‘œ __ init __.py κ΅¬μ„±ν•˜κΈ°

__ init __.py 은 ν•΄λ‹Ή 디렉터리가 파이썬의 νŒ¨ν‚€μ§€λΌκ³  μ„ μ–Έν•˜λŠ” μ΄ˆκΈ°ν™” 슀크립트둜, 파이썬의 거의 λͺ¨λ“  λΌμ΄λΈŒλŸ¬λ¦¬μ— μžˆλ‹€.

import analysis
import crawling
import database

__all__ = ['analysis', 'crawling', 'database']

roboadvisor 디렉터리에 μžˆλŠ” 파일, ν•˜μœ„ νŒ¨ν‚€μ§€ 이름을 μž…λ ₯ν•˜μ—¬ λ¦¬μŠ€νŠΈν˜•μ˜ λ³€μˆ˜λ₯Ό λ§Œλ“  ν›„ 각각 import문으둜 ν˜ΈμΆœν•¨.

from . import series
from . import statics

__all__ = ['series', 'statics']
  1. __ main __.py 파일 λ§Œλ“€κΈ°

νŒ¨ν‚€μ§€ 자체λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ λ§Œλ“¦. ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” μ—¬λŸ¬ λͺ¨λ“ˆμ„ from, import문으둜 ν˜ΈμΆœν•œ ν›„, if ꡬ문 μ•„λž˜μ— μ‹€μ œ μ‹€ν–‰ μ½”λ“œλ₯Ό μž‘μ„±ν•¨.

  • __ main__.py μ°Έκ³ ν•˜κΈ°
  1. μ‹€ν–‰ν•˜κΈ° (νŒ¨ν‚€μ§€ μ΄λ¦„λ§Œ 호좜)

λͺ¨λ“  μ½”λ“œλ₯Ό μž‘μ„±ν•œ ν›„ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ μ·¨μƒμœ„ λ””λ ‰ν„°λ¦¬μ—μ„œ ‘python νŒ¨ν‚€μ§€λͺ…’을 μž…λ ₯ν•˜μ—¬ μ‹€ν–‰ν•œλ‹€.

python roboadvisor
series
parser

3) νŒ¨ν‚€μ§€ λ„€μž„μŠ€νŽ˜μ΄μŠ€

νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ λͺ¨λ“ˆμ„ μ„œλ‘œ ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•˜λŠ” νŒ¨ν‚€μ§€ λ„€μž„μŠ€νŽ˜μ΄μŠ€(packages namespace)에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

νŒ¨ν‚€μ§€ λ„€μž„μŠ€νŽ˜μ΄μŠ€λŠ” 크게 μ ˆλŒ€ 참쑰와 μƒλŒ€ 참쑰둜 λ‚˜λˆˆλ‹€. μ ˆλŒ€ μ°Έμ‘°λŠ” 전체 νŒ¨ν‚€μ§€μ˜ ꡬ쑰λ₯Ό 생각해 λͺ¨λ“ˆμ˜ 경둜(path)λ₯Ό λͺ¨λ‘ ν˜ΈμΆœν•˜λŠ” 것이고, μƒλŒ€ μ°Έμ‘°λŠ” ν˜ΈμΆœν•˜λŠ” 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 것이닀.

  1. μ ˆλŒ€ μ°Έμ‘°
from roboadvisor.analysis improt series
  • reference1.py : λ‹€λ₯Έ μ„œλΈŒ λͺ¨λ“ˆμ—μ„œ λͺ¨λ“ˆμ„ μ‰½κ²Œ ν˜ΈμΆœν•  수 있음
  • from 전체 νŒ¨ν‚€μ§€.μ„œλΈŒ νŒ¨ν‚€μ§€ import λͺ¨λ“ˆ
  1. μƒλŒ€ μ°Έμ‘°
  • μƒλŒ€ 참쑰의 핡심은 ν˜„μž¬μ˜ 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ λͺ¨λ“ˆμ„ ν˜ΈμΆœν•˜λŠ” 것이닀.
  • reference2.py

4. κ°€μƒν™˜κ²½ μ‚¬μš©ν•˜κΈ°

1) κ°€μƒν™˜κ²½μ˜ κ°œλ…

νŒŒμ΄μ¬μ—μ„œλŠ” κ°€μƒν™˜κ²½μ΄λΌλŠ” κ°œλ…μœΌλ‘œ ν”„λ‘œμ νŠΈ νŒ¨ν‚€μ§€λ₯Ό κ΄€λ¦¬ν•˜λŠ” 도ꡬλ₯Ό μ œκ³΅ν•œλ‹€.

일반적으둜 μ–΄λ–€ ν”„λ‘œμ νŠΈλ₯Ό μˆ˜ν–‰ν•  λ•ŒλŠ” 파이썬 μ½”λ“œλ₯Ό μˆ˜ν–‰ν•  κΈ°λ³Έ μΈν„°ν”„λ¦¬ν„°λΏλ§Œ μ•„λ‹ˆλΌ ν”„λ‘œμ νŠΈλ³„λ‘œ ν•„μš”ν•œ μΆ”κ°€ νŒ¨ν‚€μ§€κΉŒμ§€ μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€. μ΄λŸ¬ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  λ•Œ μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ νŠΈκ°€ 영ν–₯을 주지 μ•Šλ„λ‘ 독립적인 ν”„λ‘œμ νŠΈ μˆ˜ν–‰ ν™˜κ²½μ„ ꡬ성할 수 μžˆλŠ”λ°, 이λ₯Ό ‘κ°€μƒν™˜κ²½’이라고 ν•œλ‹€. 이 κ°€μƒν™˜κ²½μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€ 관리 도ꡬλ₯Ό μ‚¬μš©ν•œλ‹€.

  • virtualenv : νŒŒμ΄μ¬μ—μ„œ 기본적으둜 μ œκ³΅ν•˜λŠ” κ°€μƒν™˜κ²½ 도ꡬ, pip둜 μƒˆλ‘œμš΄ νŒ¨ν‚€μ§€ μ„€μΉ˜ κ°€λŠ₯
  • conda : miniconda μ „μš© νŒ¨ν‚€μ§€ 관리 λ„κ΅¬λ‘œ κ°€μƒν™˜κ²½ 관리와 νŒ¨ν‚€μ§€ μ„€μΉ˜λ₯Ό 같이할 수 있음

2) κ°€μƒν™˜κ²½ μ„€μ •ν•˜κΈ°

  1. κ°€μƒν™˜κ²½ λ§Œλ“€κΈ°
conda create -n my_project python=3.4
  • conda : μ‹€ν–‰ λͺ…λ Ήμ–΄, create : κ°€μƒν™˜κ²½μ„ λ§Œλ“œλŠ” 인수 -n : name의 μ€„μž„λ§, my_project : ꡬ성할 κ°€μƒν™˜κ²½ 이름 python=3.9 : μ„€μΉ˜λ˜λŠ” 파이썬의 버전
  1. κ°€μƒν™˜κ²½ μ‹€ν–‰ν•˜κΈ°
activate my_project

my_project κ°€μƒν™˜κ²½ ν™œμ„±ν™”ν•˜λΌλŠ” μ½”λ“œμ΄λ‹€. μ΄μ œλΆ€ν„°λŠ” ν•΄λ‹Ή κ°€μƒν™˜κ²½μ˜ μΈν„°ν”„λ¦¬ν„°λ§Œ μ‹€ν–‰λœλ‹€.

  • where python : μ‹€ν–‰λ˜λŠ” 파이썬 μœ„μΉ˜ 좜λ ₯
  • deactivate : κ°€μƒν™˜κ²½ μ’…λ£Œ
  1. κ°€μƒν™˜κ²½ νŒ¨ν‚€μ§€ μ„€μΉ˜ν•˜κΈ°
conda install matplotlib
  • matplotlib : λŒ€ν‘œμ μΈ κ·Έλž˜ν”„ 관리 νŒ¨ν‚€μ§€
  1. κ°€μƒν™˜κ²½ νŒ¨ν‚€μ§€ μ‹€μŠ΅ν•˜κΈ°
  • matplotlib ν™œμš©ν•˜μ—¬ κ·Έλž˜ν”„ 좜λ ₯ μ—°μŠ΅ν•˜κΈ°
improt matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()