image





코드스테이츠와 함께하는 ‘AI 부트캠프’ 14주차

S4-Week2 : 데이터 수집과 NoSQL





주간회고

더 공부가 필요한 부분

  • SQL의 다양한 쿼리문을 더 알아보고, sqlite3, psycopg2와 같은 데이터베이스 툴사용법 익히기



5F 회고

  • 사실(Fact)
    데이터 엔지니어링을 위한 기초적인 git 사용법, CLI 사용법을 배우고, 관계형데이터베이스의 기본적인 내용을 학습하였다.

  • 느낌(Feeling)
    데이터를 수집하고 가공하는 것이 재밌다고 느껴지는데, 내가 이상한건가?

  • 교훈(Finding)
    관심있는 내용을 공부하면 재미도 있고 학습 능률이 두배로 오른다.

  • 향후 행동(Future action)
    다양한 데이터베이스 툴을 사용해보면서 기초적인 기술스택을 확장시키겠다.

  • 피드백(Feedback)
    피드백을 해 주세요😀





N421 : Note 1 : Python 활용





🏆ㅤ 학습 목표

  • 🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.
    • 파이썬 개발자들이 가진 철학을 알고, 파이썬 기본 문법과 자료구조에 대해 설명할 수 있다.
    • 디버깅 도구가 필요한 이유를 설명할 수 있고, 간단한 예시를 재현할 수 있다.
    • 파이썬 함수와 클래스에 대해서 설명할 수 있고, 노트 예제를 재현할 수 있다.
    • 객체지향언어에 대해서 파이썬의 클래스와 연관 지어 설명할 수 있다.
  • 🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.
    • 파이썬 함수와 클래스의 작동방식을 이해하여 코드에 적용할 수 있고, 데코레이터에 대해서 설명할 수 있다.
    • Parameter와 Argument를 구별하여 설명할 수 있고, 적절하게 활용할 수 있다.
    • pdb 의 작동방식을 알고, 주어진 코드의 상황을 pdb 를 이용해서 탐색할 수 있다.
  • 🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.
    • 파이썬의 클래스, 함수, 데코레이터를 활용하여 이전에 작성한 자신의 코드에 적용할 수 있다.
    • Mutable 변수와 Immutable 변수를 구분할 수 있고, 해당 특성을 활용하여 코드를 작성할 수 있다.
  • 🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.
    • 디스크립터와 제너레이터를 활용하여 코드를 작성할 수 있다.
    • 추상화에 대해 파이썬 코드 예제를 활용하여 설명할 수 있다.
    • 단위 테스트와 TDD에 대해 설명할 수 있다.
    • 일반적인 디자인 패턴에 대해 이해할 수 있다.



오늘의 키워드

  • 파이써닉, 클래스, 함수, 데코레이터, 디버깅



공부한 내용

용어정리

  • 함수(function)
    • 반복되는 코드를 미리 정하여 재사용할 수 있게끔 만든 코드 모음
  • 클래스(class)
    • 반복되는 함수를 재사용할 수 있게끔 만든 함수 모음
  • 생성자(constructor)
    • 클래스의 __init__()함수
    • 클래스가 인스턴스화 될 때 가장 먼저 실행되어 인스턴스의 속성을 결정
  • 메서드(method)
    • 클래스 안에있는 함수
  • 객체(object)
    • 변수할당을 통하여 메모리주소가 있는 상태
  • 인스턴스(instance)
    • 클래스를 통하여 만들어진 객체
    • 객체와 비슷하지만 주로 클래스와 말할 땐 인스턴스가 사용됨


함수

  • 함수 생성 방법
    def 함수_이름( 파라미터 ):
      "함수 문서"
      함수 내용
      return [표현식]
    


__name__

  • 클래스의 이름을 반환하는 파이썬의 기본 속성
  • 다음과 같이 예시 클래스를 만들어 인스턴스화하고 __name__을 확인하면 클래스의 이름이 반환되는 것을 볼 수 있음
    class Test_Class:
      pass
    a = Test_Class()
    a.__class__.__name__  # >> 'Test_Class'
    


__doc__

  • docstring은 모듈, 함수, 클래스 또는 메소드 정의의 첫 번째 명령문으로 발생하는 문자열 리터럴을 의미
  • docstring은 해당 객체 의 __doc__ 특수 속성으로 자동 생성됨
class Doc_Class:
    "클래스의 독스트링"
    
    def Doc_Func(self):
        "함수의 독스트링"
  • 위의 클래스와 메서드를 인스턴스화하여 __doc__ 속성을 확인하면 다음과 같음
a = Doc_Class()
print(a.__doc__)            # >> 클래스의 독스트링
print(a.Doc_Func.__doc__)   # >> 함수의 독스트링


__dict__

  • 인스턴스의 속성을 사전형으로 반환
class Test:
	def __init__(self, name):
		self.name = name
		self.test_dict = {'a':1, 'b':2}
		self.test_list = ['1','2','3']
  
test_object = Test("minimi")
print(test_object.__dict__)
# >> {'name': 'minimi', 'test_dict': {'a': 1, 'b': 2}, 'test_list': ['1', '2', '3']}


getattr()

  • 파이선 내장함수로 첫번째 인자로 객체, 두 번째 인자로 속성이름을 문자열로 받음


Getter / Setter

  • Getter(게터) : 데이터를 읽어주는 메서드
  • Setter(세터) : 데이터를 변경해주는 메서드
  • 예를 들면, 아래에서 get_age() 메서드가 게터, set_age() 메서드가 세터의 역할을 함
    class Person:
      def __init__(self, first_name, last_name, age):
          self.first_name = first_name
          self.last_name = last_name
          self.set_age(age)
    
      def get_age(self):
          return self._age
    
      def set_age(self, age):
          if age < 0:
              raise ValueError("나이는 음수가 될 수 없어요")
          self._age = age
    
      age = property(get_age, set_age)
    
  • 이때 함수 property()는 첫번째 인자로 게터 메서드를, 두 번째 인자로 세터 메서드를 넘겨주면, 인스턴스.age 처럼 클래스의 속성을 불러오듯이 나이를 불러올 수 있음


@property 데코레이터

  • 파이썬의 내장 데코레이터인 @property를 사용하면 위와 동일하게 작동하는 코드를 좀 더 간결하고 읽기 편하게 작성할 수 있음
class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        if age < 0:
            raise ValueError("나이는 음수가 될 수 없어요")
        self._age = age


오류

  • TypeError
    • 데이터 타입과 관련된 에러
TypeError: 'int' object is not subscriptable
TypeError: 'float' object cannot be interpreted as an integer
  • SyntaxError
    • 오타 혹은 괄호, 콜론 등 오류
SyntaxError: invalid syntax
SyntaxError: EOL while scanning string literal
  • IndexError
    • 리스트의 범위를 벗어난 인덱스에 접근하려 하는 경우
IndexError: list index out of range
  • NameError
    • 사용하려는 로컬 또는 글로벌 변수의 이름을 찾을 수 없을 때
NameError: name 'codeit' is not defined
  • AttributeError
    • 속성 참조 또는 할당이 실패하면 발생
AttributeError: module '' has no attribute ''
  • ValueError
    • 함수가 전달 받은 파라미터가 부적절한 값일 때 발생
ValueError: min() arg is an empty sequence
ValueError: max() arg is an empty sequence
  • ImportError
    • Import 문에서 모듈을 로드하는 과정에서 문제가 있을 때 발생
ImportError: attempted relative import with no known parent package





N422 : Note 2 : 웹 스크레이핑





🏆ㅤ 학습 목표

  • 🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.
    • 웹 스크레이핑의 개념에 대해서 설명할 수 있다.
    • HTML, CSS, DOM, 웹 브라우저 간의 관계를 설명할 수 있다.
  • 🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.
    • 파싱이 무엇인지 HTML을 활용하여 설명할 수 있다.
    • 웹 브라우저의 개발자 도구를 활용하여 수집할 데이터의 패턴을 찾아낼 수 있다.
    • 파이썬 requests 와 Beautifulsoup 라이브러리를 활용하여 원하는 데이터를 수집할 수 있다.
  • 🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.
    • 정적 스크레이핑과 동적 스크레이핑을 구분하여 설명할 수 있다.
    • 웹 스크레이핑을 통해 수집한 데이터를 데이터베이스에 적재할 수 있다.
    • 웹 브라우저의 개발자 도구 중 콘솔을 활용하여 추출할 데이터 패턴을 출력해 볼 수 있다.
  • 🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.
    • 셀레니움을 통해 수집한 데이터를 데이터베이스에 적재할 수 있다.
    • 웹 스크레이핑 시 정규식을 활용하여 문자열 찾기를 진행할 수 있다.
    • 파이썬의 클래스, 함수, 데코레이터를 적용하여 크롤링 코드를 작성할 수 있다.



오늘의 키워드

  • 웹스크레이핑, 웹크롤링, HTML, CSS, DOM, 파싱, requests, Beaurifulsoup, Selenium,



공부한 내용

웹 스크래핑, 웹 크롤링

  • 웹 스크래핑(Web scraping, web harvesting, or web data extraction)은 특정 웹사이트에서 데이터를 추출하는 것을 말함
  • 웹 크롤링(Web Crawling)은 주로 봇(bot)을 이용하여 자동으로 웹 문서를 인덱싱하는 것


Web : HTML, CSS, Javascript

  • HTML, CSS, Javascript 의 관계

image


DOM

  • DOM(Document Object Model)은 HTML, XML 등 문서의 프로그래밍 인터페이스를 말함
  • DOM 메서드
    • getElementsbyTagName : 태그 이름으로 문서의 요소들을 리턴
    • getElementById : ‘id’ 가 일치하는 요소들을 리턴
    • getElementsByClassName : ‘클래스’ 가 일치하는 요소들을 리턴
    • querySelector : 셀렉터(들)과 일치하는 요소를 리턴
    • querySelectorAll : 셀렉터(들)과 일치하는 모든 요소들을 리턴
document.querySelectorAll('p')
// 'p'태그를 모두 배열로 반환





N423 : Note 3 : API





🏆ㅤ 학습 목표

  • 🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.
    • 클라이언트와 서버에 대해서 설명할 수 있다.
    • API, HTTP API, REST API에 대해서 노트의 예제를 활용하여 설명할 수 있다.
    • JSON을 이해하고, API에서 활용되는 이유를 설명할 수 있다.
    • openweather API를 활용한 노트 예시를 재현할 수 있다.
  • 🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.
    • MDN HTTP Requests Methods 를 기반으로 HTTP API 에 대해서 설명할 수 있다.
    • API 키가 필요한 이유를 설명할 수 있고, 원하는 API의 키를 발급 받을 수 있다.
    • REST API 의 개념과 HTTP 상태 코드에 대해서 설명할 수 있다.
    • Open API를 활용하여 원하는 데이터를 수집할 수 있다.
  • 🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.
    • Tweepy 및 트위터 API 의 공식문서를 통해 과제에 주어진 요구사항과 작성한 코드를 해석할 수 있다.
    • API를 활용하여 수집한 데이터를 데이터베이스에 적재할 수 있다.
    • 브라우저의 네트워크 탭을 통해 웹 페이지에서 발생하는 HTTP API 에 대해서 설명할 수 있다.
  • 🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.
    • GITHUB API 를 통해서 나의 Commit 기록 및 PR 기록을 읽어올 수 있다.
    • 공개키 암호화 방식에 대해 설명할 수 있다.
    • OAuth 2.0 방식에 대해 설명할 수 있다.



오늘의 키워드

  • API, 클라이언트, 서버



공부한 내용

API

  • Application Programming Interface 의 약자로 프로그램들이 소통할 수 있는 인터페이스를 의미
  • API 응답 데이터는 주로 JSON 형식


HTTP API

  • HTTP 란 HyperText Transfer Protocol 이라는 약어로 컴퓨터들의 통신 규약 중 하나를 의미
  • HHTP의 주요 메서드 (CRUD)
    • GET : 특정 리소스를 요청할 때 사용 (Read)
    • POST : 클라이언트에서 서버측에 많은 정보를 전달할 때 사용 (Create)
    • PUT/PATCH : PUT 은 데이터 전부를 바꿀 때, PATCH 는 부분적으로 변경할 때 사용 (Update)
    • DELETE : 서버 측의 특정 리소스를 삭제할 때 사용 (Delete)
  • HTTP Response Status Code
    • 100 번대 : 정보 응답
    • 200 번대 : 성공 응답
    • 300 번대 : 리다이렉션 메시지
    • 400 번대 : 클라이언트 에러 응답
    • 500 번대 : 서버 에러 응답


REST API

  • REST : REpresentational State of Transfer
    • 소프트웨어의 아키텍쳐를 어떻게 형성할 지에 대한 가이드라인





N424 : Note 4 : NoSQL





🏆ㅤ 학습 목표

  • 🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.
    • NoSQL 단어의 유래에 대해서 설명할 수 있다.
    • NoSQL 기반의 데이터베이스를 사용하는 경우에 대해서 설명할 수 있다.
    • 관계형 데이터베이스를 사용하는 경우를 NoSQL 과 비교하여 설명할 수 있다.
    • MongoDB Atlas 를 통해 Mongo DB 를 생성하고, Pymongo를 통해 연결할 수 있다.
  • 🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.
    • Document DB 와 Key-Value DB 에 대해서 구별하여 설명할 수 있다.
    • 파이썬을 활용하여 Mongo DB 와 연결하고 조작할 수 있다.
    • API를 통해 수집한 데이터를 Mongo DB 에 적재할 수 있다.
  • 🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.
    • Mongo DB 에 적재된 데이터를 관계형 데이터베이스에 적재할 수 있다.
    • 데이터를 적재하는 관점에서 관계형 데이터베이스와 비관계형 데이터베이스의 차이점을 설명할 수 있다.
    • CSV 형식의 데이터를 Mongo DB 에 적재할 수 있다.
  • 🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.
    • 로컬 Mongo DB 를 활용하여 데이터를 적재 및 읽어올 수 있다.
    • Document, Key-Value, Column Family, Graph DB의 간단한 특징 대해 설명할 수 있다.
    • 분산 데이터베이스의 동기식과 비동기식 복제에 대해 구별하여 설명할 수 있다.
    • 분산 데이터베이스의 복제와 파티셔닝을 구별하여 설명하고, 트랜잭션이 분산 데이터베이스에서 비효율적인 이유를 설명할 수 있다.



오늘의 키워드

  • NoSQL, Pymongo



공부한 내용

NoSQL

  • 관계형 데이터모델(SQL)을 사용하지 않는 데이터베이스 모델

Pymongo

  • MongoDB를 파이썬에서 활용할 수 있도록 도와주는 라이브러리







끝까지 읽어주셔서 감사합니다😉





댓글남기기