Time for us to shine

[혼공학습단 10기] 혼자 공부하는 파이썬 (개정판) 6주차 본문

혼공학습단/혼자 공부하는 파이썬 (개정판)

[혼공학습단 10기] 혼자 공부하는 파이썬 (개정판) 6주차

SH Park 2023. 8. 20. 20:47

▶6주차 미션 (8/14 ~ 8/20)

진도 : Chapter 07-2 ~ 08

기본 미션 : p.431 [직접 해보는 손코딩: BeautifulSoup 스크레이핑 실행하기] 예제 실행 후 결과 화면 캡처하기 

선택 미션 : 혼공 용어 노트에 나만의 언어로 객체, 클래스, 인스턴스, 생성자, 메소드 정리하고 공유하기 


Chapter 07 모듈 

 

07-1. 표준 모듈 

  • 모듈 
    • 파이썬은 모듈 기능을 활용해 코드를 분리하고 공유함  
    • 모듈 하다가 정보가 궁금하면 파이썬 공식 문서 참고 
    • 모듈과 같은 이름으로 파일 저장하지 않도록 주의
    • 표준 모듈 : 파이썬에 기본적으로 내장되어 있는 모듈
    • 외부 모듈 : 파이썬이 기본적으로 제공하지 않는, 다른 사람들이 만들어서 제공한 모듈 
    • import 구문 : 모듈을 읽어 들일 때 사용하는 구문 
    • from 구문 : 모듈을 읽어 들일 때 모듈에서 가져오려는 변수나 함수 앞에 모듈 이름을 붙이지 않아도 됨 
    • as 키워드 : 모듈을 읽어 들이고 별칭을 붙일 때 사용하는 구문 
import 모듈 이름  # 일반적으로 모듈을 가져오는 import 구문 -> 코드의 가장 위에 작성

 


 

  • math 모듈 
    • 수학과 관련된 기능을 가지고 있음 
    • 비주얼 스튜디오 코드의 자동 완성 기능으로 코드를 살펴보면 표로 정리한 것들보다 훨씬 더 많은것들 확인 가능
import math  # 해당 문자 이후에 'math' 라는 모듈을 사용할 수 있음

 

< math 모듈의 함수 >

변수 또는 함수  설명
sin(x) 사인 값을 구한다
cos(x) 코사인 값을 구한다
tan(x) 탄젠트 값을 구한다
log(x[, base]) 로그 값을 구한다
ceil(x) 올림한다
floor(x) 내림한다

math 모듈의 함수 예시

 

<from 구문>

  • math.sin(), math.cos() 처럼 앞에 무언가를 계속 입력하는 것이 귀찮다고 느껴질 때 사용 
  • '가져오고 싶은 변수 또는 함수' 에 여러 개의 변수 또는 함수를 입력할 수도 있음 
  • 이 구문을 사용하면 가져온 기능(sin, con, tan....등)은 math를 앞에 붙이지 않고도 사용가능함 
from 모듈 이름 import 가져오고 싶은 변수 또는 함수

from 구문 예시

 

<as 구문>

  • 모듈을 가져올 때 이름 충돌이 발생하는 경우
  • 모듈의 이름이 너무 길어서 짧게 줄여 사용하고 싶은 경우 
  • 이 구문을 사용하면 math 모듈을 m이라는 이름 등으로 사용할 수 있음 
import 모듈 as 사용하고 싶은 식별자

as 구문 예시

 


 

  • random 모듈 
    • 랜덤한 값을 생성할 때 사용하는 모듈
    • 따라서, 실행할 때마다 결과가 다름 
    • from 구문 또는 as 구문과도 조합해서 사용할 수 있음  
import random  # 해당 문자 이후에 'random' 이라는 모듈을 사용할 수 있음

 

<random 모듈의 함수>

변수 또는 함수  설명 
random() 0.0 <= x < 1.0 사이의 float를 리턴한다 
uniform(min, max) 지정한 범위 사이의 float를 리턴한다 
randrange() 지정한 범위의 int를 리턴한다 
randrange(max) 0부터 max 사이의 값을 리턴한다 
randrange(min, max) min 부터 max 사이의 값을 리턴한다 
choice(list) 리스트 내부에 있는 요소를 랜덤하게 선택한다 
shuffle(list) 리스트의 요소들을 랜덤하게 섞는다 
sample(list, k=<숫자>) 리스트의 요소 중에 k개를 뽑는다 

random 모듈의 함수 예시

 

from 구문 예시

 


 

  • sys 모듈 
    • 시스템과 관련된 정보를 가지고 있는 모듈 
    • 명령 매개변수를 받을 때 많이 사용함 
    • argv --> 명령 매개변수 
      • 프로그램을 실행할 때 추가로 입력하는 값들을 의미함 
import sys

 


 

  • os 모듈 
    • 운영체제와 관련된 기능을 가진 모듈 
    • 새로운 폴더를 만들거나 폴더 내부의 파일 목록을 보는 일도 모두 os 모듈을 활용해서 처리함 
import os

 

<os 모듈의 함수>

변수 또는 함수  설명 
name() 현재 운영체제
getcwd() 현재 폴더 
listdir() 현재 폴더 내부의 요소 
mkdir()
rmdir()
폴더를 만들고 제거 (폴더가 비어있을 때만 제거 가능)
rename() 파일 이름 변경 
remove()
unlink()
파일 제거 
system() 명령어 실행 (*위험할 수 있는 함수)

 


 

  • datetime 모듈
    • date(날짜), time(시간) 과 관련된 모듈 
    • 날짜 형식을 만들 때 자주 사용되는 코드들로 구성되어 있음 
import datetime

 

<datetime 모듈의 함수>

변수 또는 함수  설명
strftime() 시간을 형식에 맞춰 출력할 수 있음
but, 한국어 등의 문자는 매개변수에 넣을 수 없음 
timedelta() 특정한 시간의 이전 또는 이후를 구할 수 있음 
but, 1년 후/ 2년 후 등의 몇년 후 를 구하는 기능은 없음 
replace() 날짜 값을 교체함 

 


 

  • time 모듈 
    • 시간과 관련된 기능을 다룸 
    • 유닉스 타임(1970년 1월 1일 0시 0분 0초를 기준으로 계산한 시간 단위) 을 구할 때, 특정 시간 동안 코드 진행을 정지할 때 많이 사용 
import time

 

<time 모듈의 함수>

변수 또는 함수  설명
sleep() 특정 시간 동안 코드 진행을 정지
매개변수에는 정지하고 싶은 시간을 초 단위로 입력 

  • 코드를 실행하면 
  • "지금부터 5초 동안 정지합니다!" 를 출력하고 5초 동안 정지함
  • 5초 후 "프로그램을 종료합니다." 를 출력함

 


 

  • urllib 모듈
    • URL을 다루는 라이브러리 
    • 인터넷 주소를 활용할 때 사용하는 라이브러리 
    • URL --> 웹 브라우저의 주소창에 입력하는 주소 
import urllib

 

<urllib 모듈의 함수>

변수 또는 함수 설명
urlopen() URL 주소의 페이지를 열어준다 
read() 해당 웹 페이지에 있는 내용을 읽어서 가져옴 

 


07-2. 외부 모듈

 

  •  외부 모듈
    • 파이썬이 기본적으로 제공하지 않는, 다른 사람들이 만들어 제공하는 모듈  
    • 사이킷런, 텐서플로, 장고, 플라스크, 넘파이 등이 있음 

 

 

  • 모듈 설치하기 
    • 외부 모듈 설치
    • window + R 키를 눌러 프로그램 실행 창 띄우고,
    • [cmd] 입력하면 나타나는 명령 프롬포트 창에서 실행해야함 
    • pip : 파이썬 패키지 관리 시스템
      • 특정 버전의 모듈을 설치
      • 설치한 모듈을 제거 등 
    • pip install : 외부 모듈을 설치할 때 사용하는 명령어 
    • Beautiful Soup 모듈 : 웹 페이지를 분석할 때 사용하는 모듈 
pip install 모듈 이름

 

 

  • 모듈 찾아보기
    1. 책을 샀는데 책에서 모듈을 추천 
      ex) 웹 프로그래밍 --> Django / Flask
            머신러닝 --> scikit-learn / keras
            스크레이핑 --> requests / Beautiful Soup
            영상 분석 --> cv2 / pillow 
    2. 파이썬 커뮤니티에 가입했는데, 어떤 모듈이 어떤 분야에서 인기
    3. 어떤 기능이 있는 모듈이 필요해서 구글에서 검색 --> "Python 내가 알고 싶은 것" 검색 

 

 

  • Beautiful Soup 모듈 
    • 파이썬의 웹 페이지 분석할 때 사용하는 모듈 
    • 코드 분석
      • bs4 모듈의 BeautifulSoup() 함수의 매개변수로 HTML 문자열과 "html.parser" 라는 문자열을 넣으면 BeautifulSoup 라는 특수한 객체를 리턴함 
      • 지역이 표기된 location을 찾고, location 내부에 있는 city, wf, tmn, tmx 태그의 내용을 추출 
      • select() 함수 : 태그를 여러 개 선택할 때 사용
      • select_one() 함수 : 태그를 하나만 선택할 때 사용 
pip install beautifulsoup4  # 모듈 설치

Beautiful Soup 모듈로 날씨 가져오기
실행 결과

 

 

  • Flask 모듈 
    • 일반적으로 파이썬으로 웹 개발을 할 때는 Django(장고), Flask(플라스크) 등의 모듈을 사용함 
    • Django : 매우 다양한 기능을 제공하는 웹 개발 프레임워크 
    • Flask : 작은 기능만을 제공하는 웹 개발 프레임워크 
pip install flask  # 모듈 설치

Flask 모듈 사용 예시
오류가 뜬다... 구글링 검색해서 해결법 써봤는데도 안됨..ㅜㅜ

 

 

  • 라이브러리와 프레임워크 
    • 라이브러리 : 개발자가 모듈의 기능을 호출하는 형태와 같이 정상적인 제어를 하는 모듈
    • 프레임워크 : 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈 
    • 제어 역전 : 개발자가 모듈의 함수를 호출하는 것이 일반적인 제어 흐름이나, 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것 
    • 라이브러리와 프레임워크는 최근 큰 구분 없이 사용하는데, 확실하게 구분하자면 제어 역전 여부에 따라 달라짐 
구분 설명
라이브러리 (library) 정상적인 제어를 하는 모듈 
프레임워크 (framework) 제어 역전이 발생하는 모듈 

 

라이브러리

--> math 모듈은 모듈 내부의 기능을 "개발자"가 직접 호출했음
--> 이처럼 개발자가 모듈의 기능을 호출하는 형태의 모듈을 라이브러리 라고 함 

프레임워크 

--> 코드를 보면 내부에 함수만 정의했지 직접적으로 무언가 진행하는 코드는 단 하나도 없음
--> 우리가 작성한 코드를 직접 실행하지 않았는데, Flask 모듈이 제공하는 명령어를 실행하면 Flask가 내부적으로 서버를 실행한 뒤 지정한 파일을 읽어 들여 적절한 상황에 스스로 실행하게 됨 
--> 이처럼 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈을 프레임워크 라고 함 

 


Chapter 08 클래스 

 

08-1. 클래스의 기본 

 

  • 객체 지향 프로그래밍 (OOP) 
    • 객체를 우선으로 생각해서 프로그래밍 한다는 의미
    • 객체와 관련된 코드를 분리할 수 있게 하는 것이 핵심 --> 클래스
    • 클래스 기반의 객체 지향 프로그래밍 언어는 클래스 라는 것을 기반으로 객체를 만들고,
      그러한 객체를 우선으로 생각해서 프로그래밍 해야함
    • 객체 지향 프로그래밍 언어 : 객체를 기반으로 프로그램을 만드는 프로그래밍 언어 
      • C를 제외한 모든 프로그래밍 언어는 객체 지향 프로그래밍 언어임 

 

  • 객체
    • 속성을 가질 수 있는 모든 것 

 

  • 추상화 
    • 프로그램에서 필요한 요소만을 사용해서 객체를 표현하는 것 
    • 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것 

 

  • 클래스 
    • 객체를 쉽고 편리하게 생성하기 위해 만들어진 구문 
    • 만들어진 클래스는 클래스 이름과 같은 함수(생성자)를 사용해서 객체를 만든다 
    • 인스턴스 : 클래스를 기반으로 만들어진 객체 
    • 클래스 : 붕어빵 틀 / 인스턴스 : 실체화된 붕어빵
class 클래스 이름:
      클래스 내용
인스턴스 이름(변수 이름) = 클래스 이름()  --> 클래스 이름()은 생성자 함수라고 부름

학생 6명 선언

클래스 이름 만들기 

--> 각 단어의 앞 글자를 대문자로 만들고, 이를 합쳐서 이름을 만드는 캐멀 케이스 규칙을 지켜서 짓는 것이 좋음 
      ex) BeautifulSoup()

 

 

  • 생성자 
    • 클래스 이름과 같은 인스턴스를 생성할 때 사용하는 함수 
    • __init__() 함수 : 객체를 생성할 때 처리할 내용을 작성할 수 있음 
      • 클래스 내부의 함수는 첫 번째 매개변수로 반드시 self 입력해야함 
      • self : '자기 자신'을 나타내는 딕셔너리 
      • 다만, self가 가지고 있는 속성과 기능에 접근할 때 --> self.<식별자> 형태로 접근 
class 클래스 이름:
      def __init__(self, 추가적인 매개변수):
          pass

 

  • 소멸자 
    • 생성자와 반대로 인스턴스가 소멸될 때 호출되는 함수 
    • __del__() 함수
class 클래스 이름:
      def __del__(self):
          pass

--> 코드를 실행하면 Test("A")가 실행될 때 생성자가 호출되고, 프로그램이 종료될 때 소멸자가 호출됨 

 

  • 메소드 (== 멤버 함수, 인스턴스 함수) 
    • 클래스가 가지고 있는 함수 
    • 만들 때, 생성자를 선언하는 방법과 같음 
class 클래스 이름:
      def 메소드 이름(self, 추가적인 매개변수):
          pass

 

 


🎁기본미션 

모듈들 설치하고 했는데 계속 실행이 안되고 오류 떠요 ㅜㅜ

 

 

 

🎁선택미션