본문 바로가기
IT/Python

객체지향 프로그래밍-04. 모듈과 패키지

by 무녈 2021. 6. 21.

자료의 출처는 엘리스 AI 트랙(https://aitrack.elice.io/) '파이썬 객체지향 프로그래밍'  이며, 학습 후 정리한 내용입니다.

⚡️올바르지 않은 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다.⚡️


수강 목표

  • 다른 사람이 만든 프로그램을 내 프로그램에서 사용할 수 있게 만들어 주는 모듈과 패키지에 대해 배운다.
  • 파이썬의 다양한 오픈 소스 패키지를 체험한다.

모듈과 패키지

모듈이란?

다른 코드에서 사용할 수 있도록 열어 놓은 코드

모듈 불러오기

import string

print(string.digtis)	# 0123456789

import

 

from string import digits	# string 모듈에서 내가 원하는 digits만 가져와라

print(digtis)	#0123456789

원하는 것 만 불러오는 방식

from  - import 

 

# 두 방식에서 결과물의 차이는 없으나, 상황에 따라 판단

 

모든 코드는 모듈이다

# post.py
class Post:
	...
    
class ImagePost(Post):
	...
# timeline.py
from posts import Post, ImagePost

timeline.add(Post("Hello!"))
timeline.add(ImagePost("#food", [])

패키지란?

모듈을 모아 놓은 폴더

패키지 

- facebook

  - posts.py

  - users.py

  - media.py

  - ads.py

패키지 안의 모듈

# 패키지 안에서 모듈을 불러오는 방식
import facebook.users				#facebook 패키지 안에서 users(모듈 전체)를 불러오는 방식 -> 사용 ex) facebook.users.User
from facebook import media			#원하는 모듈만 가져오는 방식
from facebook.posts import Post, ImagePost	#모듈 안에 필요한 클래스와 함수만 불러오는 방식
		# 내가 짠 코드에 Post라는 클래스가 존재하는 경우(불러온 클래스가 겹치는 경우) 에러 발생
        # 이름을 바꾸어줄 수 있음. 불러온 Post를 "as"를 사용하여 바꾸어줌 #Post as FacebookPost

matplotlib를 사용해보자!

matplotlib

mat/plot/lib -> mat - math /  plot -> 점을 찍다/ 그래프를 그리다 / lib -> library(외부에서 가져올 수 있는 공개된 코드, package, module)

- 수학적으로 그래프를 그릴 수 있도록 도와주는 라이브러리이다.

# matplotlib은 python의 가장 기초적이지만 강력한 그래프 모듈이다. matplotlib을 이용하면 단 몇줄의 Python 코드만으로도 대부분의 그래프를 쉽게 그려낼 수 있다.

 

import matplotlib.pyplot as plt 	#pyplot: python에서 그래프를 그릴 수 있도록 해주는 것

x = [0, 1, 2, 3, 4]
y = [3, 5, 8, 2, 5]
plt.bar(x, y, align="center")	#align="center", 막대그래프가 각 칸의 중앙에 오게 만들어줌
plt.show()	#print와 유사, show를 하지 않으면 그래프가 안보인다

matplotlib은 기본적으로 로마자 사용 환경에 최적화되어 있다.

matplotlib의 기본 폰트가 한글을 지원하지 않기 때문에, 차트의 제목, 축, 범주 등에 한글 텍스트를 넣으려면 한글을 지원하는 폰트로 교체해야 한다.

  1. matplotlib.font_manager를 import 합니다.
  2. font_manager 모듈 내에는 FontProperties 클래스가 정의되어 있습니다. 생성자에 폰트의 이름을 넣고 인스턴스를 생성합니다.
  3. 텍스트를 추가할 때마다 fontproperties 매개변수에 생성한 FontProperties의 인스턴스를 인자로 넣어 줍니다.

bar()

import matplotlib.pyplot as plt

plt.bar(x, y)	#x = 위치, y = 높이
plt.show()
import matplotlib.pyplot as plt

ㅌ = range(5) # 위치
y = [5, 4, 3, 2, 1] # 높이
plt.bar(x, y)	

xticks()

import matplotlib.pyplot as plt

pos = range(4)
years = [2015, 2016, 2017, 2018]
temperature = [17, 16, 19, 22]
plt.bar(pos, temperatures)
plt.xticks(pos, years)	# xticks를 통해 각 위치별로 연도를 표시해 줄 수 있음

# 실습 [matplotlib에서 한글 표시하기]
# matplotlib은 기본적으로 로마자 사용 환경에 최적화되어 있습니다. matplotlib의 기본 폰트가 한글을 지원하지 않기 때문에, 차트의 제목, 축, 범주 등에 한글 텍스트를 넣으려면 한글을 지원하는 폰트로 교체해야 합니다.

#이 실습에서는 matplotlib 폰트 매니저를 통해 폰트를 설정하는 방법을 배워 보겠습니다.

#미리 작성된 코드를 따라 가며 사용 방법을 익혀 보세요.

#matplotlib.font_manager를 import 합니다.
#font_manager 모듈 내에는 FontProperties 클래스가 정의되어 있습니다. 생성자에 폰트의 이름을 넣고 인스턴스를 생성합니다.
#텍스트를 추가할 때마다 fontproperties 매개변수에 생성한 FontProperties의 인스턴스를 인자로 넣어 줍니다.


from elice_utils import EliceUtils
elice_utils = EliceUtils()
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm	#font_manager import
from matplotlib import rc

font = fm.FontProperties(fname='./NanumBarunGothic.ttf') #font_manager 모듈 내에 FontProperties 클래스가 정의되어 있음.

x = range(31)
temperatures = [
    22.8, 25.3, 32.6, 31.8, 29.0, 27.1, 29.2,
    28.1, 24.2, 26.5, 29.5, 28.2, 30.9, 31.9,
    33.2, 34.0, 32.1, 33.2, 34.1, 34.7, 36.9,
    38.0, 35.7, 36.8, 34.1, 33.7, 35.4, 35.2,
    36.7, 36.9, 38.3
]

ticks = []
for date in x:
    ticks.append(f"7월 {date+1}일")		#f"문자열 {변수} 문자열" - 문자열 포매팅: 문자열에서 특정 부분만 바꾸고 나머지 부분은 일정하다고 할 때, 문자열 포매팅을 이용해 출력할 수 있다.
										 #f-string으로, 문자열 맨 앞에 f를 붙여주고, 중괄호 안에 직접 변수 이름이나 출력하고 싶은 것을 넣어주면 됨.

# 막대 그래프를 그립니다.
plt.bar(x, temperatures)

# 그래프의 제목을 설정합니다. 제목은 상단 중앙에 생성됩니다.
plt.title('2018년 7월 서울 최고기온', fontproperties=font)

# 그래프의 x축에 들어갈 tick 텍스트를 설정해 줍니다.
plt.xticks(x, ticks, fontproperties=font, rotation="vertical")	#rotation: 해당 축의 글자 회전

# 엘리스 화면에 그래프를 표시합니다.
plt.savefig('graph.png')
elice_utils.send_image('graph.png')

# 실습[꺾은선 그래프 그리기]
#기온의 변화를 쉽게 관찰하기에는, 막대 그래프보다 꺾은선 그래프가 더 적절하겠죠? matplotlib은 막대 그래프 외에도 scatter plot, 꺾은선 그래프 등의 다양한 차트 형식을 제공하고 있습니다.

#plt.bar() 함수 대신, plt.plot() 함수를 사용하면 꺾은선 그래프를 그릴 수 있습니다.

#영상의 설명을 따라, 2018년 7월의 서울 일자별 최고 기온을 나타내는 꺾은선 그래프를 그려 보세요.

from elice_utils import EliceUtils
elice_utils = EliceUtils()
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

font = fm.FontProperties(fname='./NanumBarunGothic.ttf')

x = range(31)
temperatures = [
    22.8, 25.3, 32.6, 31.8, 29.0, 27.1, 29.2,
    28.1, 24.2, 26.5, 29.5, 28.2, 30.9, 31.9,
    33.2, 34.0, 32.1, 33.2, 34.1, 34.7, 36.9,
    38.0, 35.7, 36.8, 34.1, 33.7, 35.4, 35.2,
    36.7, 36.9, 38.3
]

ticks = []
for date in x:
    ticks.append(f"7월 {date+1}일")

# 꺾은선 그래프를 그립니다.
plt.plot(x, temperatures)


# 그래프의 제목을 설정합니다. 제목은 상단 중앙에 생성됩니다.
plt.title('2018년 7월 서울 최고기온', fontproperties=font)

# 그래프의 x축에 들어갈 tick 텍스트를 설정해 줍니다.
plt.xticks(x, ticks, fontproperties=font, rotation="vertical")

# 엘리스 화면에 그래프를 표시합니다.
plt.savefig('graph.png')
elice_utils.send_image('graph.png')

from elice_utils import EliceUtils
elice_utils = EliceUtils()
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

font = fm.FontProperties(fname='./NanumBarunGothic.ttf')

x = range(31)
temperatures = [
    22.8, 25.3, 32.6, 31.8, 29.0, 27.1, 29.2,
    28.1, 24.2, 26.5, 29.5, 28.2, 30.9, 31.9,
    33.2, 34.0, 32.1, 33.2, 34.1, 34.7, 36.9,
    38.0, 35.7, 36.8, 34.1, 33.7, 35.4, 35.2,
    36.7, 36.9, 38.3
]

ticks = []
for date in x:
    ticks.append(f"7월 {date+1}일")

# 꺾은선 그래프를 그립니다.
plt.scatter(x, temperatures) # scatter plot을 이용하여 경향성을 비교할 수 있다.


# 그래프의 제목을 설정합니다. 제목은 상단 중앙에 생성됩니다.
plt.title('2018년 7월 서울 최고기온', fontproperties=font)

# 그래프의 x축에 들어갈 tick 텍스트를 설정해 줍니다.
plt.xticks(x, ticks, fontproperties=font, rotation="vertical")

# 엘리스 화면에 그래프를 표시합니다.
plt.savefig('graph.png')
elice_utils.send_image('graph.png')

# 공기중의 오존 농도 또는 온실가스의 농도와 기온을 비교 시 꺽은선(변화의 경향성)보다는 데이터 전반적이 경향성을 보기위해서는 scatter plot이 더욱 적절하다.

반응형

댓글