1. 기업맞춤형 빅데이터 분석가 양성과정 소개
2. 기업맞춤형 빅데이터 분석가 양성과정 노트목록
https://crosefrog.tistory.com/entry/20210104-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-4%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240105-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-5%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240109-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-7%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
3. Chepter7. 모듈.ipynb / Chepter8. 클래스.ipynb / COS Pro 1차 2급 문항.ipynb
4. Notion 빅데이터 분석가 양성과정 대시보드
https://shaded-chair-f39.notion.site/d1191ac35d7c4f09b2fd0bdc9a91debc?pvs=4
5. Naver 블로그 포스팅
https://blog.naver.com/moment_by_moment/223319787518
6. Google Colaboratory Notebook
https://colab.research.google.com/drive/1sauJ9swnP1_WHP0sCfSA8RoXJwQ0yi3-#scrollTo=DTsz1j9udcaY
https://colab.research.google.com/drive/1LTa7wNu0RT68MFxH2Dzx-2EIFWbX7VV2#scrollTo=lI-y7uGP0x_O
https://colab.research.google.com/drive/1EpjDg3V_MzKLN8dKSTNOb1rPrW47TYla#scrollTo=8vbFITedAOCh
7. 필기노트
6장 내용 리뷰
오류에러: 시작도 못하는 경우도 있고, 동작하다 죽어버리는 경우도 있다.
문법적인 에러가 나면, 시작도 안하고 죽는다.
프로그램이 돌다가 미처 예상하지 못한 돌발상황이 발생해서 죽는 경우: 런타임 오류
구문 오류: 시작하기 전 발생하는 오류
로직에러: 프로그램이 특정 상황에서 계산값이 틀리거나, 엉뚱한 행동을 하는 경우(논리에 문제가 있는 경우)
혼공파 교재: 유튜브 강의가 있다.
예외 상황: NameError, TypeError, IndexError, ValueError
→ 보다보면, 익숙해진다.
(이런 것들을 어떻게 처리할 것인가?)
사람들이 어떻게 물어볼 지 모르니까 미리 예방하고 준비해야 한다.
- 예외 처리: 대비한 상황말고도, 혹시나 예상치못한 사건이 발생할 경우를 대비하는 것
처리하는 방법
- try ~ except ~ 를 사용하는 방법
Ex) Board를 만들어서 납품을 했는데, PCB기판은 딱 붙어있지만, 템페스트 기판은 올라와 있어서 떨어지는 error가 많이 발생한다.
→ 고객들은 일반적인 상황외에도, 다양한 시도를 한다.
→ 예외가 발생하면 적절한 처리를 해준다.
#무한대 값을 저장하라고 얘기할 순 있지만, 저장하려면 무한바이트가 필요하기에 불가능하다.
- 정수에서 가장 큰 값: 무한대
(얼마까지 저장할 수 있는가?)
→ 몇 바이트까지 쓸 수 있도록 정해져있을까?
→ 한계가 어디인가?
IP주소 개수: 2^32개
→ 상식적인 범위내에서 충분히 큰 수까지 넣을 수 있도록 지정해두었다.
(어떤 수학자가 더 큰 수를 다루기 위해 log를 지정하기도 했다.)
error가 발생할 것 같은 부분에 try ~ except ~지정을 해주면 된다.
- try ~ except ~ else 구문
- try ~ except ~ else ~ finally 구문
Ex) 중간에 예외상황이 발생하더라도, 과정이 어떻든 최종적으로 해야할 일은 finally에 지정해야 한다.
(비효율적으로 외울 필요는 없다.)
#file close()할 때, 꼭 finally에 넣을 필요는 없다.
finally의 특징: 무조건 실행된다.
- 무슨 일이 있더라도 마무리짓고 나가기 전에, finally는 수행되고 나가야 한다.
break가 발생하더라도, finally는 실행된다.
예외 종류가 다양한데, 다양한 종류에 따라 다르게 처리하고 싶다면, 각 오류에 대해 알고 있어야 한다.
→ 어떤 오류인지, 어떤 문제인지 등 어떤 상황인지 알아야 한다.
(예외 종류에 따라 여러가지 예외처리를 할 수 있는 객체들이 존재한다.)
Exception이라는 용어에서 파생되어서 나온 것이다.
이런 개념으로 관계정리를 한다.
- 변수에 예외 관련된 정보를 담을 때, 담는 녀석의 이름이 필요하다.
Exception의 type에 따라 action을 해주면 된다.
Exception을 맨 앞에 두면, 모든 오류를 처리하므로, 다른 예외 처리를 만든 취지에 맞지 않는다.
[raise 구문]
- 프로그램이 실행 도중 강제 종료되는 것을 막기 위해 예외는 꼭 처리되어야 함
- 하지만 프로그램을 개발하는 동안에는 의도적으로 예외 상황을만들기도 함
#pass로 처리하면, 깜빡하고 넘어갈 수도 있다.
등등의 이유에서 raise 구문을 사용할 수도 있다.
Ch07-1 표준 모듈
모듈이란?
- 여러 변수와 함수를 가지고 있는 집합체이다.
- 코드를 분리하고 공유
- 외부 모듈과 내부 모듈이 있다.
Ex) random
모듈사용: import 모듈_이름
표준 모듈(내부 모듈)
: datatime, random, time, sys, math, os, urllib 등
<aside> ⌛ 내부 모듈: 일반적으로 많이 사용하는 모듈을 파이썬 설치할 때 같이 설치되는 모듈
외부 모듈: 필요 시, 설치해서 사용해야 하는 모듈
</aside>
- 모듈 사용의 기본: math 모듈
sin(x), cos(x), tan(x), log(x[base]), floor(x), round(x)
(모듈 정보가 필요할 때는, 파이썬 공식 문서를 확인하자.)
→ 굳이 확인하고 싶지 않다.. (그러나, 읽을 수 있어야 한다!)
⇒ 어느정도 해석이 가능해야 한다.
class range(stop)
class range(start, stop, [, stop])
# []표시는 선택사항이다. (필수X)
print( math.floor(2.5) ) # 내림
print( math.ceil(2.5) ) # 버림
=>
2
3
모든 걸 알아야 요리를 할 수 있는 건 아니다.
(굳이 식재료의 원산지까지 알아야 하는 건 아니다.)
#뼨찌 = 니퍼
From구문
- 모듈에는 많은 함수와 변수가 들어 있는데 그 중에서 우리가 활용하고 싶은 함수(기능)는 몇 개 안될 것이다.
- math 모듈이 가지고 있는 sin()을 사용하기 위해 math.sin()과 같이 모듈_함수_이름() 형태로 매번 모듈 이름 앞에 붙이는 것도 번거로운 일기에, from 구문을 사용한다.
from math import sin, cos, tan
print(sin(0))
print(cos(0))
print(tan(0))
=>
0.0
1.0
0.0
- as 구문
모듈을 import할 때 모듈 이름과 동일한 식별자가 사용되고 있을 수 있음
(이런 경우 모듈에 닉네임을 부여하여 기존 식별자와 구별)
import 모듈_이름 as
- Random 모듈
기본적으로 제공되는 모듈 중, 처음 본 모듈
float형을 넘겨준다.
(다양한 기능들이 있다.)
from random import random,
- os 모듈
os 모듈은 운영체제와 관련된 기능을 가진 모듈이다.
새로운 모듈을 만들거나 폴더 내부의 파일 목록을 보는 일도 모두 os 모듈을 사용하여 처리한다.
import os
print(os.name) # 현제 운영체제
print(os.getcwd()) # 현재 폴더(corrent working directory)
print(os.listdir()) # 현재 폴더 내부의 요소 (폴더라는 의미)
객체: 기능과 속성으로 이루어져 있다.
‘.’(점 1개): 현재 폴더를 의미함, ‘..’(점 2개): 상위 폴더를 의미함
sample_data
앞이 ‘.’으로 시작하면, hidden file이다.
os.mkdir('hello') # 폴더 생성
os.rmdir('hello') # 폴더 삭제
with open('original.txt', 'w') as file:
file.write('hi~')
경로: 파일명까지 포함해서 경로라 한다.
파일의 위치만 포함하는 경우도 있지만, 이름도 포함한다.
기본값: 현재 작업 디렉토리
→ 아무것도 쓰지 않으면, 현재 작업 디렉토리에 저장된다.
os.rename('original.txt', 'new.txt') # 폴더 이름 변경
os.remove('new.txt') # 변경된 폴더 제거
폴더를 탐색기로 만들어놓고, 파이썬코드로 저장하라고 할 수도 있지만, 운영체제와 관련된 일을 해야할 거 같으면, os모듈을 가져다 살펴보면 그 안에 내가 원하는 모듈이 있을 것이다.
표준 모듈을 사용하는 것을 알아보고 있다.
import random
# random() : 0.0 <= x < 1.0 범위에서 float형 숫자를 반환
print('random.random() : ', random.random())
# uniform(min, max): 지정된 범위(min <= x <= max)에서 float형 숫자를 반환
print('raddom.uniform(10, 20) :', random.uniform(10, 20))
# randrange(): 지정한 범위에 드는 int 형 숫자를 반환
# - randrange(max) : 0부터 max 사이(0 <= x < max)의 int 형 숫자를 반환
# - randrage(min, max) : min부터 max 사이(min <= x < max)의 값을 반환
print('random.randrange(10) :', random.randrange(5))
# choice(list): 리스트 내부에 있는 요소를 랜덤하게 선택합니다.
print('random.choice([1, 2, 3, 4, 5] :', random.choice([1, 2, 3, 4, 5]))
# shuffle(list) : 리스트의 요소를 랜덤하게 섞습니다.
print('random.shuffle([1, 2, 3, 4, 5] :', random.shuffle([1, 2, 3, 4, 5]))
# sample(list, k=숫자) : 리스트에서 k개의 요소를 임의로 뽑습니다.
print('random.sample([1, 2, 3, 4, 5], 2]) :', random.sample([1, 2, 3, 4, 5], 2))
=>
random.random() : 0.8339232598505231
raddom.uniform(10, 20) : 16.68186895061961
random.randrange(10) : 0
random.choice([1, 2, 3, 4, 5] : 3
random.shuffle([1, 2, 3, 4, 5] : None
random.sample([1, 2, 3, 4, 5], 2]) : [4, 5]
유한한 바트로 저장을 하기에, 한계가 존재한다.
한 비트를 사용하면, (0,1) 2가지 경우의 수가 나온다.
4개 비트를 사용하면, (0~15) 16가지의 경우의 수를 나타낼 수 있다.
5개 비트를 사용하면, (0~31) 32까지의 수를 나타낼 수 있다.
1byte(=8bit)를 사용하면, 0~255까지 총 256개를 만든다.
2^32 = 4byte = 32bit = 4,294,967,296
- 인터넷을 처음 설계했을 때 이정도면 다 할 수 있을거라 생각하였다.
과거, 어느 시점을 기준으로 컴퓨터 보급률이 확 올라갔다.
사물인터넷(IoT = Internet of Things)을 쉬운 말로 표현하면, 전기기기들을 인터넷에 연결해서 다뤄보자.
인터넷에 붙여서 뭔가를 해보겠다는 것이 과거에도 나왔었다.
지금도 엄청 비싸다.
IP개수가 컴퓨터뿐만 아니라 가전제품, CCTV 등 사물인터넷이 추구하는 모든 것에 붙는다.
이대로가면, (IPv4) 2^32 갯수만으로는 부족하다.
새로 나온 IPv6 = 2^128개로 늘렸다. (3.4028236692093846346337460743177e+38)
KT가 IP주소를 1,000개를 가지고 있다고 하자.
→ 가입자를 1,000명 받을 수 있는 것이다.
그러면, 그 뒤에 가입하는 사람들은 할 수 없는가?
⇒ 10,000명이 한날 한시에 인터넷을 사용하지 않는다.
- 1~1,000명이 인터넷을 사용하다가 중지하면, 다시 회수했다가 그 다음 인원들이 사용할 수 있도록 한다.
⇒ 동시에 1,000명 이상이 사용하는 경우가 없다.
고정 IP: 회수하지 않는 IP
유동 IP: 필요할 때는 회수하는 IP
현재 IPv4는 2^32개를 사용했지만, 버전을 업그레이드하여
2^128개로 늘렸다.
현재 고정적으로 부여하며,
사용하지 않는 경우 다른 사람에게 부여하도록 조치한다.
0~255 / 0~255 / 0~255 / 0~255 / 0~255 / 0~255 / ….
→ 숫자를 한꺼번에 읽기가 어렵다.
읽기 편하라고 4개씩 끊어서 표현한다.
- 이론적으로 2^32개이지만, 일부 IP주소는 특수목적으로 사용하기에 빼 두었다. (몇 가지 번호는 특수 목적이기에 빼두었다.)
- 자기자신이라는 의미로 사용하기도 한다.
- datatime 모듈
datatime 모듈은 date(날짜), time(시간)과 관련된 모듈로, 날짜 형식을 만들 때 자주 사용된다.
#핸드백을 열면, 파우치가 데이터인 파우치가 있고, 그 안에 now()라는 연장자가 있다.
import datetime
#현재 시각을 구하고 출력
print('현재 시각 출력')
now = datetime.datetime.now() # look at me
print(str( now.year )+'년', end = ' ')
print(str( now.month )+'월', end= ' ')
print(str( now.day )+'일')
#print(str( now.hour )+'시', end = ':')
print(str( now.hour + 9 )+'시', end = ':')
print(str( now.minute )+'분', end= ':')
print(str( now.second )+'초')
=>
현재 시각 출력
2024년 1월 10일
15시:30분:24초
- 똑같은 코드를 한국, 호주, 영국, 미국 등에서 돌릴 수도 있다.
→ 각 나라마다 시간이 다르기에, 지구를 대표하는 시간을 알려준다.
(영국 브리니치 천문대의 대표시간을 알려준다.)
소위 말하는 선진국
미국: 신흥 선진국
영국, 프랑스: 과거 선진국
→ 타 국가의 자원, 기술 등을 빼앗아서 부유하게 되었다.
(지금 와서 이 국가들을 욕하는 사람들은 거의 없다.)
아무튼, 우리나라 시간과 시차가 생긴다.
대부분 영국시간을 알려준다.
07-2 외부모듈
pip install 모듈_이름
- PC에서 작업하고 있다면, PC에서 실행해야 한다.
→ cmd (명형 프롬프트)
- colab에서 설치할 때는 앞에 ‘!’를 붙이고 동일하게 실행해라.
!pip install 모듈 이름
#모듈이름을 보면, 대충 어떤 의미인지 역할인지 알 수 있다.
- 코랩을 사용할 때의 장점
: 다양한 모듈이 이미 설치되어 있어 추가 설치 없이 사용이 가능하다.
: 출력된 메시지 ‘Requirement already satisfied’는 ‘이미 만족된다’, ‘이미 설치되어 있다’라는 뜻이다.
BeautifulSoup 모듈
import urllib.request
import bs4
url = "<https://naver.com>"
html = urllib.request.urlopen(url)
soup = bs4.BeautifulSoup(html, 'html.parser') # 웹페이지를 표현하는 다양한 방법(기법)들이 있다. 여기선 'html'형태를 분석하라는 의미다.
print(soup)
외부 모듈이냐 내부 모듈이냐는 의미없다.
url을 넘겨주면, 그 url에 있는 웹페이지를 가져온다.
네이버 사이트에서 크롬이 주는 것을 보고 해석한다.
⇒ html code 문서
내가 웹 크롤링을 해서, 상품정보와 가격을 가져오고 싶을 때,
가격과 이름이 모두 의미가 있다고 하자.
문서 전체에서 패턴 밑에 있는 것을 가져오라고 하면, 필요한 정보를 빼온다. → BeautifulSoup의 기능
(적절한 타이밍에 웹 크롤링을 할 것이다.)
Flask 모듈
일반적으로 파이썬으로 웹 개발을 할 때는 Django(장고) 또는 Flask(플라스크) 등의 모듈을 사용한다.
Django: 다양한 기능을 제공하는 웹 개발 프레임워크
Flask: 작은 기능만 제공하는 웹 개발 프레임워크
슈퍼마켓을 차리고 싶다.
조그맣게 가게를 하려고 하는데, 배달문제가 있다.
배달용으로 포르쉐를 뽑으려 한다.
- Flask로도 해결되는 일이다.
대기업에서 많이 사용하는 도구가 있고,
중소기업에서 많이 사용하는 도구가 있다고 하자.
대기업이 사용하는 도구들은,
효율적이고, 빠르고, 똑똑하지만 비싸다.
중소기업에서 사용하는 도구들은,
그보다 성능이 조금 부족하지만, 합리적인 가격이다.
모듈이 많다보니, 다 볼 순 없다.
- Flask를 이용하여 PC에서 웹 서버를 생성하고 구동시키는 (최소한의)코드는 다음과 유사하다.
from flask import Flask
app = Flask(__name__)
@app.route(' ')
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port = 3000)
- Visual Studio Code를 설치-여기 접속(https://code.visualstudio.com/)
- Visual Studio Code 실행
- 빈 파일을 오픈
- 위 코드 입력 후 파일(xxx.py) 세이브
- 터미널 창에서 Flask 모듈 설치
- 터미널 창에서 xxx.py 실행
- python xxx.py
- 웹 브라우저 오픈
- 접속 URL은 "http://localhost:3000"
.py .html 등은 확장자 파일을 의미한다.
예전에는 루어낚시를 바다에서만 하는 것으로 여겼다.
무역회사를 나와서 중국에서 루어를 만들어서 국내에서 판매하는 회사를 차리게 되었다.
기아의 ‘카렌서’라는 차를 타고 다니다가 새 차를 뽑아서 타고 다니게 되었다.
점점 경쟁자가 늘어나자, 사업을 접고 다른 일을 시작하였다.
뭔가 사업상의 miss가 있어서 내리막이 되긴 했다.
취미가 일이 되면 참 좋지만, 때로는 취미를 잃는 방법이기도 하다.
취미가 본업이 되면 스트레스가 된다.
한 분야를 파다보면, 어느순간부터 즐기게 된다.
알려주는 것을 즐거워했다.
→ 취미가 직업이 아닌, 직업이 취미가 되었다.
내가 최신트렌드를 따라가질 못한다면, 연구,개발직은 어려울 수 있다.
데이터분석가가 전부 될 순 없다.
다만, 이런 것들이 즐거워야 데이터분석가가 될 수 있다.
(탁구도 배워야 재미있다.)
app = 일꾼 (여러가지 기능이 들어있다.)
미리 만들어 둔 변수: name
- 이름이 __name__인 값은 내가 만들었는데, 그 값이 __main__값은 확인해야 한다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!........'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=3000)
=>
WARNING: This is a development server. Do not use
it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on <http://127.0.0.1:3000>
* Running on <http://192.168.41.35:3000>
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
- Running on all addresses (0.0.0.0)
- Running on http://127.0.0.1:3000
- Running on http://192.168.41.35:3000
⇒ 이것은 개발 서버이다. 제품개발에 사용하지 마라. 대신 WSGI서버를 사용해라.
⇒ Running 주소는
- 127.0.0.1:3000
- 192.168.41.35:3000
이다.
Visual Basic Code 재실행 시 Python Debug Console을 다 꺼주고, Ctrl+z+Enter ⇒ Ctrl + s ⇒ Ctrl + F5를 입력한 뒤, 해당 주소를 다시 입력하면 변경된 사항이 나타난다.
- 이 흐름을 내가 짠다.
프레임: 뼈대, 틀
자동차를 만드는 데, 틀이 있다.
기본 뼈대를 만들어놓고, flask라는 모듈(기능)로 문짝만 만들어라. 엔진만 만들어라, 그러면 자동으로 작동할 수 있도록 하겠다.
부품만 만들어줘라.
<p data-ke-size="size16"