파이썬 크롤링과 시각화 기본다지기(1)
파이썬 크롤링과 시각화를 공부하면서 정리한 내용들이다.
실습 개발 환경
구글에서 제공하는 코랩을 사용하여 실습하고 있다.
다운로드에 소요시간을 줄이고 파이썬 기반 개발을 가능하게 한다.
코랩 간단 사용법(실습에 앞서 기초 알기)
[파이썬 확장자]
.py 는 파일 한개를 뜻함(=모듈)
.ipynb 는 주피터, 코랩의 확장자
[코랩]
-셀 단위로 실행
-셀의 위치는 중요하지 않다
-코드셀:명령어 입력 영역,프로그램 실행
-텍스트셀: 설명을 작성하는 셀로 Enter사용은 Enter을 두번 누르거나 띄어쓰기 를 두번
Ctrl+Enter : 셀 실행
Ctrl+Shift+ Enter : 한줄 실행
[모듈]
API는 남들이 만든 것으로, 사용하면 된다.
모듈은 py파일로 만들어진다. 표준 모듈은 파이썬에 기본적으로 설치되어있는 모듈로 따로 설치없이 import 통해 사용할 수 있다.
(random, math, time, datetime 등)
함수는 객체가 필요없는 프린트 같은 것, 메소드는 객체가 필요하다.
객체.메소드() => 멤버함수라고도 한다.
데이터 시각화
데이터 분석의 결과를 사용자가 쉽게 이해할 수 있도록 표현하는 것
파이썬의 데이터 시각화는 다양한 라이브러리(패키지)가 존재한다.
matplotlib,seaborm,pyecharts,wordcloud 등 패키지를 사용할 수 있다.
[matplotlib 라이브러리(패키지)]
*만약 코랩사용자가 아니라면 cmd 창에서 따로 라이브러리를 다운받으면된다.
cmd > pip install matplotlib( 가끔 정상적 설치 잏에도 IDLE에서 사용이 불가능할 경우가 발생한다.IDLE는 시각화에 관한 성격?시각화가 주된 환경이 아니라 그런다. 코랩 사용하는걸 권장한다.)
-pyplot모듈
Figure :전체 영역,도화지 같은 것
AxesSubplot :좌표평면
Axis :축 (xaxis,yaxis)
-시각화 만드는 법 1. Figure 객체를 만든다 : pyplot모듈 안의 figure()함수 사용
2. 좌표평면을 만든다 : pyplot모듈 안의 add_subplot(행,열,번호)메소드 생성. 하나의 Figure객체 안에 여러개의 subplot이 있다.
좌표평면객체.plot() -->해당 객체에다가 그래프를 그려준다.
3. 그래프 그리기 : plot(x축값, y축값)함수
4. 보기 : show()
- plot()의 주요 옵션
매개 변수명 | 의미 | 종류 |
linestyle | 선형태 | 실선('-','solid') 대시('--','dached') 점선(':','dotted') |
linesidth | 선굵기 | 실수 (ex 3.1) |
color | 색상 | 'r' / 'b' HTML 색이름(color name) HEX코드 (#) |
- subplot(행,열)
여러개의 좌표평면을 한번에 만든다.
좌표들[행][열]로 각각의 좌표평면 객체에 접근할 수 있다.
axes[0][1].plot()
axes[0][1].legend() #범례
legend(['범례1','범례2'])
각각의 plot별로 범례를 설정
이때 plot()내부에 label을 설정해준다면 따로 값을 넘겨주지 않아도 표시된다(한글 입력시 폰트를 추가)
loc: 범례 위치를 설정
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10
- 표준 모듈
math모듈
import math
print(math.pi) //3.14...
print(math.ceil(1.1)) #올림
print(math.floor(1.9)) #내림
print(math.trunc(1.9)) #버림
print(math.trunc(-1.5))
print(math.sqrt(25)) #제곱근 실수 형태
print(math.pow(5,2)) #값의 제곱근 5**2

random 모듈
#코랩에서 한줄실행시 print문 없이 예상결과 출력가능하다.연습코딩이 편리.(ctrl+shift+enter)로 확인하기!!
import random
#randint()
random.randint(1,2) #1~2중 한개 정수 리턴.
random.randrange(10)
random.randrange(2,10)
random.randrange(2,10,3) #한개의 난수를 발생하는데, 2 5 8 중에서 리턴함.
random.random() #0~1미만의 임의의 float값을 리턴 ->확률
#확률 처리 가능
if random.random() > 0.9:
print('hi')
#choice()
season=['봄','여름','가을','겨울'] #choice() 시퀀스 자료형을 매개변수로 받아 임의 값 리턴
random.choice(season)
#sample()
random.sample([1,2,3,4,5,6],3) #매개변수로 시퀀스 자료형과 sample 갯수를 받아서 임의 값을 리스트로 리턴함(중복 혀용하지 않음)
random.saple(range(50),3)
type(range(50))
c = list(range(3,50,3))
print(c)
#suffle() #리턴이 없어 값이 섞인다.
li=[1,2,3,4,5]
random.suffle(li)
li

로또 번호 자동 생성기
1~45 숫자중 6개 뽑아 오름차순 정렬
lottoNum = random.sample(range(1,46),6)
lottoNum.sort()
print(lottoNum)

time모듈
import time
print('실행중',end='')
for i in range(10):
time.sleep(1): #1초 멈춤
print('~',end='')
print('|n 프로그램 종료')
time.time() #1970년 1월1일0시0분0초 부터 현재까지 흐른 시간을 초로 나타냄

로또번호 생성 알고리즘의 시간측정하기
start = time.time()
random.sample(range(1,46),6)
end= time.time()
print('알고리즘이 걸린 시간: ',end-start)
start= time.time()
li=[]
while len(li) !=6:
temp = random.randint(1,46)
if temp in li: #중복값을 제거
continue
li.append(temp)
end = time.time()
print('두번째 알고리즘 걸린 시간:' ,end-start)

datetime 모듈
import datetime
#now()는 메소드이다 함수가 아니다.#객체.메소드()
#날짜와 시간을 반환한다.
print(datetime.datetime.now()) #모듈명.객체명.메소드명()
#함수직접만들기
def date(year,month,day): #date()함수 숫자를 날짜형식으로 변환한다.
date = '%04d-%02d-%02d'%(year,month,day)
return date
print(date(2021,1,1))
#위와 같이 함수를 직접만들지 않아도 만들어져 있는 date함수 이용하면 더 편리
print(datetime.date(2021,1,1))

#모듈에서 특정 함수만 improt
from random import randint,sample
print(randint(1,10))
print(random.random()) #0.0~1.0
sample([1,2,3,4,5],2) # ->list타입

from random import * #여러개 모듈을 사용할 땐 사용하지 말아야 한다(모호성때문에)
random() #0~1미만
randint(1,3) #1~3포함 정수
별칭을 부여해 사용하는 방법을 통해 개발을 효율적으로 할 수 있다. 많이 사용해보기
#as 키워드 활용하여 별칭을 부여할 수 있다
import random as rd
rd.randint(1,4)