Python

파이썬 크롤링과 시각화 기본다지기(1)

J개발자 2021. 9. 17. 17:06
파이썬 크롤링과 시각화를 공부하면서 정리한 내용들이다.
실습 개발 환경

구글에서 제공하는 코랩을 사용하여 실습하고 있다.

다운로드에 소요시간을 줄이고 파이썬 기반 개발을 가능하게 한다.

 

 

코랩 간단 사용법(실습에 앞서 기초 알기)

[파이썬 확장자]

.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)