학사
-
[2학년][1학기][데이터분석프로그래밍기초][9w]2023.04.29
[2학년][1학기][데이터분석프로그래밍기초][9w]
https://www.notion.so/9W-f3b1e3aeb4c54c7bb74f2fc90a9d855a?pvs=4
9W 녹화 강의
Module / Packages
www.notion.so
9W 녹화 강의
Module / Packages
Module
- 작은 Program 조각
- 서로 연결해 어떤 목적을 가진 Program을 만드는 작은 Program
- 각 Module의 역할이 있고, 서로 다른 Module과 Interface만 연결되면 사용 가능
- Module화된 Program을 사용하면, 다른 개발자가 만든 Program이나 본인이 만든 Program을 쉽게 사용하거나 제공 가
import random
print(random.randint(1,10))
# 8
# randint() 함수를 사용하기 위해서는 interface, 즉 paramter 설정을 알아야
Package
- Module의 묶음
- Directory처럼 하나의 Package 안에 여러 개의 Module이 있고, 서로 포함 관계를 가짐
# main.py
import converter
print("Enter a value:")
value = float(input())
result = converter.convert(value)
print(f"Result is {result}")
# converter.py
def convert(value):
return value * 9.0 / 5 + 32
# Enter a value:
# 15
# Result is 59.0
Name Space
- Module 호출의 범위 지정
- Module 이름에 Alias를 생성하여 Module 안으로 Code를 호출
# import module as alias
import converter as cv
print(cv.convert(float(input("Enter a valve: "))))
# Enter a valve: 15
# 59.0
- from 구문을 사용하여 Module에서 특정 함수 또는 Class만 호출
: from은 Package를 호출하고 해당 Package 안에 있는 Module을 호출할 때도 사용 가능
# from module import function(or class)
from converter import convert
print(convert(float(input("Enter a value:"))))
# function name으로 바로 사용 가
# Enter a value:15
# 59.0
- Module 내의 모든 Function, Class, Variable을 가져오는 (*) Asterisk 사용
from converter import *
print(convert(float(input("Enter a value:"))))
# Enter a value:15
# 59.0
내장 Module 사용
random Module
: 난수 생성, 정수 난수를 생성하는 randint()와 임의의 난수를 생성하는 random() Function 있음
time Module
: 시간을 변경하거나 현재 시각을 출력
urllib Module
: Web 주소의 정보를 불러옴, urllib.request.urlopen()에 Web 주소를 입력하면 HTML 정보를 가져옴
from time import localtime
import urllib.request
print(rd.randint(0,100))
print(localtime())
response = urllib.request.urlopen("<https://seuke.github.io/Web_1/>")
print(response.read())
# 40
# time.struct_time(tm_year=2023, tm_mon=4, tm_mday=29, tm_hour=21, tm_min=12, tm_sec=3, tm_wday=5, tm_yday=119, tm_isdst=0)
# b'\\r\\n\\r\\n\\r\\n
Package의 구성
- Package는 하나의 대형 Project를 수행하기 위한 Module의 묶음
- Module은 하나의 File이고, Package는 File이 포함된 Directory로 구성, 즉 여러 .py File이 하나의 Directory에 들어가 있는 것이 Package
- 다른 사람이 만든 Program을 불러 사용하는 것을 Library라고 하는데, Python에서는 Package를 하나의 Library로 이해
- Package에도 예약어 있음, Package에서는 File명 자체가 예약어를 반드시 지켜야 실행되는 경우가 있음, Package의 몇몇 File에는 __init__, __main__ 등의 Keyword File명이 사용
Package 만들기 실습
1. Directory 구성하기
: Package 이름은 “roboadvisor”, 아래 세가지 기능
Crawling | 주식 관련 Data를 인터넷에서 가져옴 |
Database | 가져온 Data를 Database에 저장 |
Analysis | 해당 정보를 분석하여 의미 있는 값을 도출 |
Crawling 주식 관련 Data를 인터넷에서 가져옴
: 각 Package의 세부 Package에 맞춰 Directory를 구성 → cmd 창에 다음 명령을 입력하여 Directory 생성
Microsoft Windows [Version 10.0.22621.1555]
(c) Microsoft Corporation. All rights reserved.
C:\\Users\\kakao>cd C:\\Users\\kakao\\PycharmProjects
C:\\Users\\kakao\\PycharmProjects>mkdir crawling
C:\\Users\\kakao\\PycharmProjects>mkdir database
C:\\Users\\kakao\\PycharmProjects>mkdir analysis
: 경로 잘못 설정함, 9w_Module\roboadvisor Folder 만들어서 수정
2. Directory별로 필요한 Module 만들기
: 만들어진 Directory에 필요한 Module 생성
: 하나의 Package는 중첩된 구조로 만들 수 있으므로 Package 안에 또 하나의 Package가 포함될 수 있음
: 이렇게 각각의 Directory를 하나의 Package로 선언하기 위해서는 예약된 File init.py 을 만들어야함
: 3개의 Directory 아래에 .py File 생성
: crawling Directory 아래 .py에 code 입력
# series.py
def series_test():
print("This is series test)")
# statics.py
def statics_test():
print("This is statics test")
: roboadvisor의 상위 Directory에 있는 .py File에서 아래 code 실행 가능
from roboadvisor.analysis import series
series.series_test()
# This is series test
3. Directory 별로 init.py 구성
: __init__은 해당 Directory가 Python의 Package라고 선언하는 초기화 Script
(Python Machine Learning Library “scikit-learn”의 경우, 상위 Directory부터 init.py이 있음)
Package Name Space: 절대 참조
절대 참조의 예시
from roboadvisor.analysis import series
: from은 roboadvisor에서부터 시작함
: Package 이름부터 시작하여 series까지 모든 경로를 입력
: ‘from 전체_Package.Sub_Package import Module’ 형식
→ 절대 참조: 전체 경로를 모두 입력
: init.py File을 만들 때도 절대 참조로 Module을 호출하는 것이 좋음
- 주의할 점: 가장 상위에 있는 init.py도 상위 Directiory roboadvisor를 넣는 것이 좋음
# __init__.py
__all__ = ['analysis','crawling','database']
from roboadvisor import analysis
from roboadvisor import crawling
from roboadvisor import database
Package Name Space: 상대 참조
: 현재의 Directory 기준으로 Module을 호출
from .series import series_test
from ..crawling.parser import parser_test
roboadvisor\analysis\test.py에서 해당 code error 발생
Traceback (most recent call last):
File "C:\\Users\\kakao\\PycharmProjects\\9w_Module\\roboadvisor\\analysis\\test.py", line 1, in <module>
from .series import series_test
ImportError: attempted relative import with no known parent package
Package 설치
Module / Packages 실습
Create New Project
Library Root Directory에 Main.py, f_convert.py 생성
# f_convert.py
def convert_cf(c_value):
f_value = c_value * 9.0 / 5 + 32
print(f"convert value: {f_value}")
return f_value
def convert_fc(f_value):
c_value = (f_value - 32) / 9.0 * 5
print(f"convert value: {c_value}")
return c_value
# main.py
import f_convert
c_value = float(input("Enter Celsius degree: "))
f_value = f_convert.convert_cf(c_value)
f_value = float(input("Enter Fahrenheit degree: "))
c_value = f_convert.convert_fc(f_value)
# Enter Celsius degree: 15
# convert value: 59.0
# Enter Fahrenheit degree: 59
# convert value: 15.0
'학사 > 아주대 융시공' 카테고리의 다른 글
[2학년][1학기][경영과학입문][10w] (2) | 2023.05.08 |
---|---|
[2학년][1학기][경영과학입문][9w] (0) | 2023.05.07 |
[2학년][1학기][철학이란 무엇인가][9w] (0) | 2023.05.05 |
[2학년][1학기][언어란 무엇인가][9w] (0) | 2023.05.03 |
[2학년][1학기][산업조직심리론][9w] (0) | 2023.05.02 |