๐Ÿ“š ์Šคํ„ฐ๋””/ํŒŒ์ด์ฌ ์Šคํ„ฐ๋”” ๊ฐ•์˜์ž๋ฃŒ

[3ํŒ€/๊น€๊ทœ๋ฆฌ] 9์ฃผ์ฐจ ํŒŒ์ด์ฌ ์Šคํ„ฐ๋”” - ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€

kyuree 2023. 5. 25. 15:52

9แ„Žแ…กแ„‰แ…ต_แ„†แ…ฉแ„ƒแ…ฒแ†ฏแ„€แ…ชแ„‘แ…ขแ„แ…ตแ„Œแ…ต_แ„€แ…ชแ„Œแ…ฆแ„ƒแ…กแ†ธแ„‹แ…กแ†ซ.pdf
0.15MB
9แ„Žแ…กแ„‰แ…ต_แ„†แ…ฉแ„ƒแ…ฒแ†ฏแ„€แ…ชแ„‘แ…ขแ„แ…ตแ„Œแ…ต_แ„€แ…ชแ„Œแ…ฆ.pdf
3.26MB
9แ„Žแ…กแ„‰แ…ต_แ„†แ…ฉแ„ƒแ…ฒแ†ฏแ„€แ…ชแ„‘แ…ขแ„แ…ตแ„Œแ…ต_แ„€แ…กแ†ผแ„‹แ…ดแ„‹แ…กแ†ซ.pdf
1.77MB

 

#1. ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€์˜ ์ดํ•ด

ํŒŒ์ด์ฌ์€ ๋งค์šฐ ๊ฐ„๊ฒฐํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

๊ทธ ๊ฐ€์žฅ ํฐ ์ด์œ 

  • ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ํŒŒ์ด์ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ!

๋ชจ๋“ˆ(module) → ์ด๋ฏธ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ

ํŒจํ‚ค์ง€ (packages)→ ์ด๋Ÿฐ ํ”„๋กœ๊ทธ๋žจ์˜, ๋ชจ๋“ˆ์˜ ๋ฌถ์Œ

๋ชจ๋“ˆ์˜ ๊ฐœ๋…


  • ๋งŽ์€ ์ œํ’ˆ๋“ค์€ ์—ฌ๋Ÿฌ ๋ถ€ํ’ˆ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋ชจ๋“ˆํ™”๋˜์–ด ํŒ๋งค๋˜๊ณ  ์žˆ์Œ
    • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ ; ๋ ˆ๊ณ  ๋ธ”๋ก
      • ํ•˜๋‚˜๋งŒ์œผ๋กœ๋„ ์ œํ’ˆ but, ๋‹ค๋ฅธ ๋ธ”๋ก๊ณผ ์—ฐ๊ฒฐ ๋ฐ ํฐ ๋ฐ‘ํŒ์— ์กฐ๋ฆฝํ•จ์œผ๋กœ์จ ๊ฑฐ๋Œ€ํ•œ ์ž‘ํ’ˆ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
      • ์ด๋•Œ ๋ ˆ๊ณ  ๋ธ”๋ก ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๋ชจ๋“ˆ
      • ์ž๋™์ฐจ ๋ถ€ํ’ˆ, ๋ฒฝ๋Œ .. ๋“ฑ

ํŒจํ‚ค์ง€์˜ ๊ฐœ๋…


  • ๋ชจ๋“ˆ์˜ ๋ฌถ์Œ
  • ๋ชจ๋“ˆ ํ˜ธ์ถœ
    • ‘from’ ์‚ฌ์šฉ
    • ๋ชจ๋“ˆ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€๋ถ€ํ„ฐ ํ˜ธ์ถœํ•˜๋Š” ๋ช…๋ น์–ด

 

#2. ๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ

๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ ์‹ค์Šต


  • in ํŒŒ์ด์ฌ → .py ํŒŒ์ผ ์ž์ฒด๊ฐ€ ๋ชจ๋“ˆ์ž„
  • ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ํŒŒ์ด์ฌ ๋ชจ๋“ˆ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
    • ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ .pyํŒŒ์ผ ๋งŒ๋“ค๊ณ 
    • ๊ทธ ํŒŒ์ผ์— ํ•„์š”ํ•œ ํ•จ์ˆ˜ ์ €์žฅ
    • ⇒ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ import๋ฌธ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ชจ๋“ˆ ํ•จ์ˆ˜ ๋ถˆ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ๊ฐ„๋‹จํ•œ ๋ชจ๋“ˆ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ(1)→ .py๋กœ ์ €์žฅํ•ด์•ผ ํ•จ
#ํŒŒ์ผ ์ด๋ฆ„ : fah_converter.py
def convert_c_to_f(celcius_value):
		return celcius_value * 9.0 / 5 + 32

→ .py๋กœ ์ €์žฅํ•ด์•ผ ํ•จ

๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

#ํŒŒ์ผ ์ด๋ฆ„ : module_ex.py
#1

import fah_converter

print("Enter a celsisus value:")
celsius = float(input())
fahrenheit = fah_converter.cover_c_to_f(celsius)
print("That's", fahrenheit, "degrees Fahrenheit.")

๋„ค์ž„์ŠคํŽ˜์ด์Šค(Namespace)


  • ๋ชจ๋“ˆ ํ˜ธ์ถœ์˜ ๋ฒ”์œ„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ
  • ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ ์•ˆ์— ํด๋ž˜์Šค & ํ•จ์ˆ˜ & ๋ณ€์ˆ˜ ์กด์žฌ → import ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • but, ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ํ˜ธ์ถœ๋œ ๋ชจ๋“ˆ ํ•จ์ˆ˜ ์ด๋ฆ„ ๊ฐ™์€ ๊ฒฝ์šฐ ์žˆ์Œ
    • ์‹ค์ˆ˜ ๋˜๋Š” ๊ธฐ์กด ํด๋ž˜์Šค ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์ž‡์Œ
  • ⇒ ํ˜ธ์ถœ๋œ ๋ชจ๋“ˆ์˜ ์‚ฌ์šฉ ๋ฒ”์œ„ ๋ช…ํ™•ํžˆ ์ง€์ •ํ•ด์•ผ ํ•จ!
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋งŒ๋“ค๊ธฐ
    1. ๋ชจ๋“ˆ ์ด๋ฆ„์— ์•Œ๋ฆฌ์•„์Šค(alias) ์ƒ์„ฑ → ๋ชจ๋“ˆ ์•ˆ์œผ๋กœ ์ฝ”๋“œ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์•Œ๋ฆฌ์•„์Šค → ์ผ์ข…์˜ ๋ณ„์นญ, ๋ชจ๋“ˆ์˜ ์ด๋ฆ„ ๋ฐ”๊ฟ” ๋ถ€๋ฅผ ๋•Œ ์‚ฌ์šฉ
        • ๋ชจ๋“ˆ์˜ ์ด๋ฆ„์ด ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ฝ”๋“œ์™€ ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ด๋ฆ„์ผ ๋•Œ
        • as ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ → ๋ชจ๋“ˆ ์ด๋ฆ„ ๊ฐ„๋‹จํžˆ ๋ฐ”๊ฟ” ์‚ฌ์šฉ
    • ์˜ˆ์‹œ
    import fah_converter as fah
    print(fah.covert_c_to_f(41.6)) #106.88000000000001
    
    • ์„ค๋ช…
      • fah_converter → fah๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜์—ฌ ํ˜ธ์ถœ
      • ํ•ด๋‹น ๋ชจ๋“ˆ ์•ˆ ํ•จ์ˆ˜ ํด๋ž˜์Šค ๋ณ€์ˆ˜ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ
        • [๋ชจ๋“ˆ๋ช….ํ•จ์ˆ˜๋ช…(๋˜๋Š” ํด๋ž˜์Šค๋ช…/๋ณ€์ˆ˜๋ช…)]
    1. from ๊ตฌ๋ฌธ ์‚ฌ์šฉ → ๋ชจ๋“ˆ์—์„œ ํŠน์ • ํ•จ์ˆ˜ ๋ฐ ํด๋ž˜์Šค๋งŒ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์˜ˆ์‹œ
    from fah_converter import covert_c_to_f
    print(covert_c_to_f(41.6))  #106.88000000000001
    
    • ์„ค๋ช…
      • ‘from ๋ชจ๋“ˆ๋ช… import ๋ชจ๋“ˆ ์•ˆ์˜ ํ•จ์ˆ˜๋ช…’
      • ์ด๊ฒฝ์šฐ, ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋ช… ์“ฐ์ง€ ์•Š์•„๋„ ๋‹จ๋… ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      • ์ฃผ์˜ํ•  ์ 
        • from์€ ๊ผญ ๋ชจ๋“ˆ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค์›Œ๋“œ๊ฐ€ ์•„๋‹˜
        • ํŒจํ‚ค์ง€ ํ˜ธ์ถœ ๋ฐ ํ•ด๋‹น ํŒจํ‚ค์ง€ ์•ˆ ๋ชจ๋“ˆ ํ˜ธ์ถœํ•  ๋•Œ๋„ ์‚ฌ์šฉํ•˜๊ธฐ์—
    1. ๋ณ„ํ‘œ(*) ์‚ฌ์šฉ
      • ํ•ด๋‹น ๋ชจ๋“ˆ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ํ•จ์ˆ˜, ํด๋ž˜์Šค. ๋ณ€์ˆ˜ ๊ฐ€์ ธ์˜ด
      • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
        • ‘from ๋ชจ๋“ˆ๋ช… import *’
      • ์˜ˆ์‹œ
      from fah_converter import *
      print(convert_c_to_f(41.6)) #106.88000000000001
      
  • ์„ธ ๊ฐ€์ง€ ์ค‘ ๊ฐ€์žฅ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•?
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๋ฆฌ์•„์Šค ์ƒ์„ฑํ•˜์—ฌ ํ˜ธ์ถœ
      • ๊ฐ๊ฐ์˜ ํ•จ์ˆ˜ ๋ฐ ํด๋ž˜์Šค๊ฐ€ ์–ด๋””์„œ ๋‚˜์˜ค๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ!
      • ⇒ ๊ฐ™์€ ํ•จ์ˆ˜๋ผ๋„ convert_c_to_f๋ณด๋‹ค fah.convert_c_to_f๋ผ๊ณ  ํ‘œ๊ธฐ

๋‚ด์žฅ๋ชจ๋“ˆ์˜ ์‚ฌ์šฉ


ํŒŒ์ด์ฌ → ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋ฐœ์œ„ํ•ด ๊ธฐ๋ณธ์  ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ž ์ฒ˜๋ฆฌ, ์›น, ์ˆ˜ํ•™๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ๋‚ด์žฅ ๋ชจ๋“ˆ ์ œ๊ณต/ ๋ณ„๋‹ค๋ฅธ ์กฐ์น˜ ์—†์ด import๋ฌธ ํ•œ ์ค„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • random ๋ชจ๋“ˆ
    • ๋‚œ์ˆ˜ ์ƒ์„ฑ ๋ชจ๋“ˆ
    • ๋ชจ๋“ˆ ๊ตฌ์„ฑ
      • randint(); ์ •์ˆ˜ ๋ชจ๋“ˆ ์ƒ์„ฑ
      • random(); ์ž„์˜ ๋‚œ์ˆ˜ ์ƒ์„ฑ
    • ์‚ฌ์šฉ ์˜ˆ์‹œ
    import random
    #0~100์‚ฌ์ด ์ •์ˆ˜ ๋‚œ์ˆ˜ ์ƒ์„ฑ
    print(random.randint(0,100)) #7
    
    print(random.random()) #0.056550421789531846
    
  • time ๋ชจ๋“ˆ
    • ์‹œ๊ฐ„๊ณผ ๊ด€๋ จ
    • ์‹œ๊ฐ„ ๋ณ€๊ฒฝ ๋ฐ ํ˜„์žฌ ์‹œ๊ฐ ์•Œ๋ ค์คŒ
    • ๋Œ€ํ‘œ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘ํ•˜๋Š” ํ˜„์žฌ ์‹œ๊ฐ ์•Œ ์ˆ˜ ์žˆ์Œ
    • ์‚ฌ์šฉ ์˜ˆ์‹œ
    #ํ˜„์žฌ ์‹œ๊ฐ ์ถœ๋ ฅ
    import time
    print (time.localtime())  #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=19, tm_hour=22, tm_min=9, tm_sec=21, tm_wday=6, tm_yday=231, tm_isdst=0)
    
  • urllib ๋ชจ๋“ˆ
    • ์›น๊ณผ ๊ด€๋ จ๋จ
    • ๋Œ€ํ‘œ์ ์œผ๋กœ request ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • URL์˜ ์ •๋ณด ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Œ
    • ์‚ฌ์šฉ ์˜ˆ์‹œ
    import urllib.request
    response = urllib.request.urlopen("<http://theteamlab.io>") 
    print(response.read())
    
    • urllib.request.urlopen()
      • ๊ด„ํ˜ธ ์•ˆ์— ํŠน์ • ์›น ์ฃผ์†Œ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์ฃผ์†Œ์˜ HTML ์ •๋ณด ๊ฐ€์ ธ์˜ด
  • ์ด์™ธ์˜ ๋‹ค์–‘ํ•œ ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์€?
    • ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ตฌ๊ธ€์— ์„œ์น˜!
    • ํŠนํžˆ ์˜์–ด๋กœ..
    • if ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ˜ํ–‰์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ ์•Œ์•„๋‚ด๋Š” ๋ชจ๋“ˆ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด?
    • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ
      • python time module run time
    • ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•?
      • ํŒŒ์ด์ฌ ์ฝ”๋ฆฌ์•„์— ๋ฌธ์˜

#3. ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ

ํŒจํ‚ค์ง€์˜ ๊ตฌ์„ฑ


  • ํ•˜๋‚˜์˜ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ์˜ ๋ฌถ์Œ
  • ๋ชจ๋“ˆ์˜ ๊ตฌ์„ฑ
    • ํ•˜๋‚˜์˜ ํŒŒ์ผ
  • ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ
    • ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ(ํด๋”)๋กœ ๊ตฌ์„ฑ
    • ์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐœ์˜ .py ํŒŒ์ผ → ํ•˜๋‚˜์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    • ํŒŒ์ด์ฌ → ํŒจํ‚ค์ง€๊ฐ€ ํ•˜๋‚˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž„
  • ํŒจํ‚ค์ง€์˜ ์˜ˆ์•ฝ์–ด

ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ ์‹ค์Šต


  • ์ธํ„ฐ๋„ท์—์„œ ์ฃผ์‹ ์ •๋ณด ๊ฐ€์ ธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ + ํ•„์š”ํ•œ ์ •๋ณด ๊ณ„์‚ฐ ํ”„๋กœ๊ทธ๋žจ

1๋‹จ๊ณ„: ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์„ฑ

  • ํŒจํ‚ค์ง€ ์ด๋ฆ„
    • ‘roboadvisor’
    • ๋Œ€๋ถ€๋ถ„ ์†Œ๋ฌธ์ž ์‚ฌ์šฉ
  • ๊ธฐ๋Šฅ
    • crawling(ํฌ๋กค๋ง)
      • ์ฃผ์‹ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ธํ„ฐ๋„ท์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ
    • database(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)
      • ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ
    • analysis(๋ถ„์„)
      • ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์˜๋ฏธ ์žˆ๋Š” ๊ฐ’์„ ๋ฝ‘์•„๋‚ด๋Š” ๊ธฐ๋Šฅ
  • ๊ฐ ํŒจํ‚ค์ง€ ๋‚ด → ์„ธ๋ถ€ ํŒจํ‚ค์ง€์— ๋งž์ถฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์„ฑํ•˜๊ธฐ
    • cmd ์ฐฝ์— ๋‹ค์Œ ๋ช…๋ น ์ž…๋ ฅ → ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ
    mkdir roboadvisor 
    cd roboadvisor 
    mkdir crawling 
    mkdir database 
    mkdir analysis
    
  • ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์„ฑ๋จ

  • 2๋‹จ๊ณ„: ๋””๋ ‰ํ„ฐ๋ฆฌ๋ณ„๋กœ ํ•„์š”ํ•œ ๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ
    • ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€ ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŒจํ‚ค์ง€ ์•ˆ์— ๋˜ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
    • but, ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅด ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ˆ์•ฝ๋œ ํŒŒ์ผ ๋งŒ๋“ค์–ด์•ผ ํ•จ
    • ⇒ ‘init.py’
    • init.py’ ?
      • ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ํŒจํ‚ค์ง€์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ˆ์•ฝ ํŒŒ์ผ
      • ๊ธฐ๋ณธ .py ๋ชจ๋“ˆ ํŒŒ์ผ + ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ‘init.py’ ํŒŒ์ผ ์ถ”๊ฐ€ → ํŒจํ‚ค์ง€ ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋งŒ๋“ค์–ด์ง
    • ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์— .pyํŒŒ์ผ ๋งŒ๋“ค์–ด ๊ตฌ์„ฑ!
    • ๊ฐ ํ•˜์œ„ ํŒจํ‚ค์ง€ ํฌํ•จ๋œ ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
      • analysis ๋””๋ ‰ํ„ฐ๋ฆฌ
        def series_test():
        		print('series')
        
        def statics_test():
        		print("statics")
        
    • ์‹ค์ œ ์‚ฌ์šฉ → ํŒŒ์ด์ฌ ์…ธ์— ์ž…๋ ฅ
    from roboadvisor.analysis import series 
    series.series_test()  #series
    
    → roboadvisor์˜ ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํŒŒ์ด์ฌ ์…ธ ์‹คํ–‰ํ•ด์•ผ ์ •์ƒ์  ์ˆ˜ํ–‰
    • ์„ค๋ช…
      • **pycache**’ ์ƒ์„ฑ
        • ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™๋  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ๋“ค์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์ €์žฅ
        • ์ดํ›„ ๊ทธ ์‹œ์ ์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์ˆ˜ใ…Ž์ •ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ X
        • ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ ํ›„ ์ˆ˜์ •ํ•ด์•ผ ๊ฒฐ๊ณผ ๋ฐ˜์˜๋จ
  • 3๋‹จ๊ณ„: ๋””๋ ‰ํ„ฐ๋ฆฌ๋ณ„๋กœ ‘init.py’ ๊ตฌ์„ฑํ•˜๊ธฐ
  • 4๋‹จ๊ณ„: ‘main.py’ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
    • ํŒจํ‚ค์ง€๋ฅผ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด roboadvisor ๋””๋ ‰ํ„ฐ๋ฆฌ์— main,py ํŒŒ ์ผ์„ ๋งŒ๋“ฆ
    • ๋งŒ๋“œ๋Š” ์ด๋ฅ˜
      • ํŒจํ‚ค์ง€ ์ž์ฒด ์‹คํ–‰ ์œ„ํ•ด
    • ํŒŒ์ผ ๊ตฌ์„ฑ
      • ๊ธฐ๋ณธ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ
        • from & import๋กœ ํ˜ธ์ถœ → ‘if name == ‘ main ‘ ์•„๋ž˜์— ์‹ค์ œ ์‹คํ–‰์ฝ”๋“œ ์ž‘์„ฑ
        from analysis.series import series_test
        from crawling.parser import parser_test
        
        if name == ’ main
        		series_test()
        		parser_test()
        
        
  • 5๋‹จ๊ณ„: ์‹คํ–‰ํ•˜๊ธฐ (ํŒจํ‚ค์ง€ ์ด๋ฆ„๋งŒ ํ˜ธ์ถœ)
    • ๋ชจ๋“  ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ํ•ด๋‹น ํŒจํ‚ค์ง€ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ‘python ํŒจํ‚ค์ง€๋ช…’ ์ž…๋ ฅ
    python roboadvisor 
    series
    parser
    

ํŒจํ‚ค์ง€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค


  • ๋ชจ๋“ˆ ์„œ๋กœ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž
  • ๋ชจ๋“ˆ๊ณผ ๋‹ฌ๋ฆฌ ํ›จ์”ฌ ๋” ๋งŽ์€ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ณต์žกํ•จ
  • ์ข…๋ฅ˜
    • ์ ˆ๋Œ€ ์ฐธ์กฐ
      • ์ „์ฒด ํŒจํ‚ค์ง€์˜ ๊ตฌ์กฐ ์ƒ๊ฐ → ๋ชจ๋“ˆ์˜ ๊ฒฝ๋กœ ๋ชจ๋‘ ํ˜ธ์ถœ
    • ์ƒ๋Œ€ ์ฐธ์กฐ
      • ํ˜ธ์ถœํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜ธ์ถœ
  • ์ ˆ๋Œ€ ์ฐธ์กฐ
  • ์ƒ๋Œ€ ์ฐธ์กฐ

#4. ๊ฐ€์ƒํ™˜๊ฒฝ ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ€์ƒํ™˜๊ฒฝ์˜ ๊ฐœ๋…


  • ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ฐ ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
    • ex. ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ์ ํŠธ / ์›น ๋‹ค๋ฃจ๋Š” ํ”„๋กœ์ ํŠธ → ์„ฑ๊ฒฉ์ด ๋งค์šฐ ๋‹ค๋ฆ„
  • ํŒŒ์ด์ฌ → ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ง€์› ์œ„ํ•ด ๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ ์ œ๊ณต
  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ํ•  ๋•Œ
    • ์ฝ”๋“œ ์ˆ˜ํ–‰ํ•  ๊ธฐ๋ณธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ
    • ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€๊นŒ์ง€ ์„ค์น˜
    • ⇒ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ์˜ํ–ฅ ์ฃผ์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ํ™˜๊ฒฝ์„ ใ……๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ผ๊ณ  ํ•จ
  • ๋Œ€ํ‘œ์ ์ธ ๊ฐ€์ƒํ™ฉ๊ฒฝ ๋„๊ตฌ
    • virtualenv
      • ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ์ œ๊ณต ๊ฐ€์ƒํ™˜๊ฒฝ ๋„๊ตฌ
      • pip ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€ ์„ค์น˜ ๊ฐ€๋Šฅ
    • conda
      • miniconda์˜ ์ „์šฉ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ
      • ๊ฐ€์ƒํ™˜๊ฒฝ ๊ด€๋ฆฌ + ํŒจํ‚ค์ง€ ์„ค์น˜

๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ


  • conda ์‚ฌ์šฉ → ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ • ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด์ž

 

  • ๊ฐ€์ƒํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ
    1. cmd ์ฐฝ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด ์ž…๋ ฅ
    conda create -n my_project python=3.4
    
    • ์„ค๋ช…

  • conda
    • ์‹คํ–‰ ๋ช…๋ น์–ด
  • create
    • ๊ฐ€์ƒํ™˜๊ฒฝ ๋งŒ๋“œ๋Š” ์ธ์ˆ˜(argument)
  • -n
    • name ์˜ ์ค„์ž„๋ง
  • my_project
    • ๊ตฌ์„ฑํ•  ๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„
  • python=3.4
    • ์„ค์น˜๋˜๋Š” ํŒŒ์ด์ฌ์˜ ๋ฒ„์ „

⇒ ‘my_project๋ผ ๋Š” ์ด๋ฆ„์˜ ๊ฐ€์ƒํ™˜๊ฒฝ์„ python 3.4 ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด๋ผ.’

  • ๋ช…๋ น์–ด ์ž…๋ ฅํ›„
    • ‘Proceed ([y]/n)?’ → y ์ž…๋ ฅ → ์„ค์น˜ ์‹œ์ž‘
  • ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰ํ•˜๊ธฐ
    • ๊ฐ€์ƒํ™”๋ฉด ๋งŒ๋“ค๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” ํ™”๋ฉด์—์„œ ์„ค๋ช…ํ•ด์คŒ
    • ‘activate my_project’
      • ํ•ด๋‹น ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๋ผ๋Š” ์˜๋ฏธ
      • ํ˜•์‹
        • [activate ๊ฐ€์ƒํ™”๋ฉด ์ด๋ฆ„]
      • ์ด์ œ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋งŒ ์‹คํ–‰๋จ
    • ‘where python’
      • ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ํŒŒ์ด์ฌ์˜ ์œ„์น˜ ์ถœ๋ ฅ
    • ‘deactivate’
      • ๊ฐ€์ƒํ™˜๊ฒฝ ์ข…๋ฃŒ
  • ๊ฐ€์ƒํ™˜๊ฒฝ ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ
    • ‘conda install matplotlib’
      • ํ˜•์‹
        • [conda install ์„ค์น˜ํ•  ํŒจํ‚ค์ง€ ์ด๋ฆ„]
      • matplotlib
        • ๊ทธ๋ž˜ํ”„ ๊ด€๋ฆฌ ํŒจํ‚ค์ง€
  • ๊ฐ€์ƒํ™˜๊ฒฝ ํŒจํ‚ค์ง€ ์‹ค์Šตํ•˜๊ธฐ
    • matplotlib ์‹ค์Šต
      • ์ฝ”๋“œ
      import matplotlib.pyplot as pit
      pit.plot([1, 2, 3, 4])  #[<matplotlib.lines.Line2D object at 0x000001E8CC52C080>]
      
      plt.ylabel('some numbers')  #Text(0, 0.5,'some numbers')
      plt.show()