AI 부트캠프 14주
코드스테이츠와 함께하는 ‘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 의 관계
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를 파이썬에서 활용할 수 있도록 도와주는 라이브러리
댓글남기기