파이썬을 독학하는 분들을 위해 제가 공부한 내용을 올려볼게요

책은 think python이고 구매할 필요 없이

http://www.flowdas.com/thinkpython/ 한국어 번역판이 있으니 링크로 들어가서 보시기 바랍니다

본문 내용은 2장입니다

 

 

값은 여러가지 형태가 존재하는 데, 'abc'는 문자열에 속하고 17이라는 숫자는 정수에 속합니다

 

>>> type(17)
int
>>> type('abc')
str
>>> type(1.7)
float

 

type()은 값의 형태를 알려주는 함수입니다
int는 정수 str은 문자열 float은 소수점이 있는 실수입니다
값의 형태는 여러가지가 존재합니다. 따옴표 안에 있는 숫자 또한 문자열로 인식됩니다

 

 

>>> type('17')
str

 

변수

 

변수는 값을 가리키는 이름입니다

 

>>> n = 17
>>> print(n)
17

 

n 이라는 변수에 17이라는 값을 저장했습니다 print()는 변수를 출력해주는 함수입니다
변수를 설정하기전에 내가 설정하고 싶은 변수가 유효한지 알아보는 기능이 있습니다.
'변수명'.isidentifier() 입니다.

 

>>> 'a'.isidentifier()
True
>>> 'a-b'.isidentifier()
False
>>> '1a'.isidentifier()
False
>>> 'a1'.isidentifier()
True
>>> 'a_1'.isidentifier()
True

 

변수로 설정하기 적절한 값이면 True 그렇지 않으면 False가 나타납니다
알파벳은 변수로 설정하기 적절하지만 특수문자의 경우 -, + 등은 변수로 설정할 수 없습니다
예외로 _는 가능합니다
숫자의 경우 변수 맨 앞에 오는 경우가 아니라면 가능합니다

 

연산자

 

+ - * 등의 연산이 가능합니다

 

>>> 2 + 4
6
>>> 2 * 4
8
>>> 2 / 4
0.5
>>> 2 // 4
0
>>> 2 + 4 / 2
4.0
>>> 3**2
9

 

* 는 곱하기 / 는 나누기 //는 나눗셈의 몫 **는 거듭제곱 입니다
또한 연산에 우선순위가 적용되서 더하기 빼기 보다는 곱하기, 나누기, 괄호안의 식이 먼저 계산됩니다

기본적으로 수학함수도 내장되어있습니다.

 

 

>>> abs(-5)
5
>>> round(3.2)
3
>>> round(3.5)
4
>>> int(3.2)
3
>>> int(3.5)
3

 

abs()는 절댓값 round()는 반올림 int()는 숫자를 정수로 만들어 줍니다

 

 

-끝-

 

rvest 패키지를 이용한 웹 크롤링 방법

이번엔 표를 가져와보겠습니다

먼저 패키지를 설치합니다

install.packages("rvest")
library(rvest)

 

 

무슨 표를 가져올지 고민을 해봤는데 제 롤 전적을 가져와보겠습니다

링크는 http://fow.kr/find/af23c4ee03bd666 입니다

 

 

검사 버튼을 눌러서 좀 찾아보면

<table class="tablesorter"> 표를 발견할수 있습니다

표를 가져올때는 html_table()을 사용하면 됩니다

 

 

url_lol='http://fow.kr/find/af23c4ee03bd666'
html_lol=read_html(url_lol,encoding='UTF-8')
table=html_lol %>% html_nodes(".tablesorter") %>% html_table()

실행을 했는데 아래에 있는 에러가 뜨네요

 

 

Error in type.convert.default(out[, i], as.is = TRUE, dec = dec) : 
  invalid multibyte string at '<ed><8c><a8>'

검색을 해보니 한글 웹페이지에서 가져올때 인코딩 방식으로 인한 문제라고 합니다
Sys.setlocale("LC_ALL", "English")을 이용하면 해결이 되네요
결과를 볼때는 다시 Sys.setlocale("LC_ALL", "Korean")를 사용하면 됩니다

 

 

> str(table)
List of 8
 $ :'data.frame':    2 obs. of  12 variables:
  ..$ <U+CC54><U+D53C><U+C5B8>(<U+D504><U+B9AC><U+C2DC><U+C98C> <U+C804><U+CCB4>): chr [1:2] "<U+CE74><U+BC00>" "<U+C544><U+D2B8><U+B85D><U+C2A4>"
  ..$ <U+AC8C><U+C784><U+C218>                                                   : int [1:2] 1 1

table의 구조를 보니 길이 8개 짜리인 리스트로 나오네요 아마 같은페이지 안에 테이블이 여러개 있나봅니다
제가 원하는 테이블은 3번째에 있네요

 

 

Sys.setlocale("LC_ALL", "Korean")
table2=table[3][[1]]
table2

 

출력해보겠습니다

> table2
  챔피언(S9 전체랭크) 게임수   승률  KDA  킬 데쓰 어시    CS 평균 골드 트리플 쿼드라 펜타+
1          블라디미르    114 59.64% 3.55 5.7  3.2  5.7 187.7    11,124     11      1     0
2              라이즈     74  52.7% 2.16 5.1  5.0  5.7 191.5    11,146      4      1     1
3              판테온     57 64.91% 2.91 7.2  4.7  6.4 145.5    10,453      0      0     0
4                카밀     56 55.35% 2.28 4.6  4.4  5.5 154.5    10,009      2      0     0
5            아트록스     42    50% 2.42 5.0  4.2  5.0 161.7    10,177      5      0     0
6              빅토르     25    60% 3.77 6.2  3.2  5.8 191.1    11,722      3      1     0
7              쓰레쉬      9 66.66% 3.30 2.1  4.9 14.0  13.9     7,846      0      0     0

게임을 많이도 했네요 이번년도에는 게임을 줄이려고 합니다

약간 어긋나는게 마음에 안드네요 DT 패키지를 쓰면 깔끔하게 결과를 볼 수 있다고 합니다 한번 해보겠습니다

 

 

install.packages("DT")
library("DT")
DT::datatable(table2)

 

오 괜찮게 나오네요

 

-끝-

'R' 카테고리의 다른 글

R을 이용한 웹 크롤링 (네이버 뉴스)  (3) 2019.12.26

rvest 패키지를 이용한 웹 크롤링 방법

먼저 패키지를 설치합니다

install.packages("rvest")
library(rvest)

 

 

 

가져오고 싶은 부분에서 오른쪽 클릭 후 검사를 눌러보면 쉽게 구조를 알 수 있는데요

스포츠 뉴스에서 한번 가져와보겠습니다.

링크는 https://sports.news.naver.com/index.nhn 요기입니다.

 

 

 

 

제목 아무거나 하나 눌러서 검사 버튼을 눌러보면

<div class="title">아래에 제목이 들어있는 것을 알 수 있습니다

이제 R을 이용해서 가져와보겠습니다.

 

 

 

url_news='https://sports.news.naver.com/index.nhn'
html_news=read_html(url_news,encoding='UTF-8')

url_news에 링크를 저장하고 rvest 패키지의 함수 read_html을 이용해 읽습니다
UTF-8은 인코딩 방식을 의미합니다

 

 

 

title=html_news %>% html_nodes(".title") %>% html_text()

html_nodeshtml_text를 이용해 title에 내용을 저장합니다.

 

 

 

파이프 연산자를 사용하지 않고

a=html_nodes(html_news,".title")
title=html_text(a)

이렇게 할 수도 있습니다

여기서 .title는 아까 위에서 확인한 구조인데, 여기 있는 것을 가져오라는 의미입니다.

 

 

 

저장한 내용을 실행시켜보면

> head(title)
  [1] "\n\t\t\t\t\n\t\t\t\t‘김국찬 3점 7방 폭발’ 현대모비스, DB 꺾고 2연패 탈출\n\t\t\t\t점프볼\n\t\t\t"                                                                                            
  [2] "\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t훈련 멈추고 호통 친 아르테타, 라카제트는..\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t베스트일레븐\n\t\t\t\t\t\t"
  [3] "\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"류현진 영입 토론토에 테임즈 선물\"  M..\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t스포티비뉴스\n\t\t\t\t\t\t" 
  [4] "\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t'조용한 미국 언론' 김재환 포스팅, 끝까..\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t스포츠조선\n\t\t\t\t\t\t"    
  [5] "\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t'비디디' 곽보성, \"깔끔한 경기, 기분 ..\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tOSEN\n\t\t\t\t\t\t"           
  [6] "1‘일본에 푹 빠진’ 푸이그, “후지산 높이보다 더 흥분돼”"                            

 

 

 

필요 없는 문자들이 섞여있는데 gsub 함수를 이용해 처리할 수 있습니다

title <- gsub('\n|\t','',title)

\n과 \t를 제거합니다.

 

 

 

> head(title)
[1] "‘김국찬 3점 7방 폭발’ 현대모비스, DB 꺾고 2연패 탈출점프볼"
[2] "\"류현진 영입 토론토에 테임즈 선물\"  M..스포티비뉴스"       
[3] "훈련 멈추고 호통 친 아르테타, 라카제트는..베스트일레븐"      
[4] "'조용한 미국 언론' 김재환 포스팅, 끝까..스포츠조선"          
[5] "'비디디' 곽보성, \"깔끔한 경기, 기분 ..OSEN"                 
[6] "1‘일본에 푹 빠진’ 푸이그, “후지산 높이보다 더 흥분돼”"                                

깔끔해졌습니다

 

 

-끝-

'R' 카테고리의 다른 글

R을 이용한 웹 크롤링2 (표 가져오기)  (6) 2020.01.06

+ Recent posts