차트 만드는 것에 도움이 되는 사이트
https://www.originlab.com/doc/
https://www.originlab.com/doc/
www.originlab.com
https://www.originlab.com/doc/Tutorials
https://www.rdaramining.com/resources/onlinedocs
https://www.originlab.com/doc/
www.originlab.com
# 나이팅게일 차트로 표현
# 주요선수별성적-2013년.csv
data<-read.csv("주요선수별성적-2013년.csv",header=T)
data
row.names(data)<-data$선수명
data2<-data[,c(7,8,11,12,13,14,17,19)]
stars(data2,
filp.labels=FALSE,
draw.segments = TRUE,
frame.plot = TRUE,
full = TRUE,
key.loc = c(1.5,0),
main = "야구 선수별 주요 성적 분석-2013년")
#F12에서 설정 에서 자바스크립트 클릭 stars(x, full = TRUE, scale = TRUE, radius = TRUE,
# labels = dimnames(x)[[1]], locations = NULL,
# nrow = NULL, ncol = NULL, len = 1,
# key.loc = NULL, key.labels = dimnames(x)[[2]],
# key.xpd = TRUE,
# xlim = NULL, ylim = NULL, flip.labels = NULL,
# draw.segments = FALSE,
# col.segments = 1:n.seg, col.stars = NA, col.lines = NA,
# axes = FALSE, frame.plot = axes,
# main = NULL, sub = NULL, xlab = "", ylab = "",
# cex = 0.8, lwd = 0.25, lty = par("lty"), xpd = FALSE,
# mar = pmin(par("mar"),
# 1.1+ c(2*axes+ (xlab != ""),
# 2*axes+ (ylab != ""), 1, 0)),
# add = FALSE, plot = TRUE, ...)
# Arguments
# x
# 행렬 또는 데이터 프레임. x의 각 행에 대해 하나의 스타 또는 세그먼트 플롯이 생성됩니다. 결 측값 (NA)은 허용되지만 값이 0 인 것처럼 처리됩니다 (확장 후, 관련이있는 경우).
#
# full
# 논리 플래그 : 참이면 세그먼트 도표가 완전한 원을 차지합니다. 그렇지 않으면 (위) 반원 만 차지합니다.
#
# scale
# 논리 플래그 : TRUE 인 경우 데이터 행렬의 열은 각 열의 최대 값이 1이고 최소값이 0이되도록 독립적으로 크기가 조정됩니다. FALSE 인 경우 데이터는 다른 알고리즘에 의해 범위가 조정 된 것으로 추정됩니다. [0, 1].
#
# radius
# 논리 플래그 : TRUE에서는 데이터의 각 변수에 해당하는 반지름이 그려집니다.
#
# labels
# 플롯에 레이블을 지정하기위한 문자열로 구성된 벡터 S 함수 별과 달리 labels = NULL 인 경우 레이블을 구성하려고 시도하지 않습니다.
#
# locations
# 각 세그먼트 도표를 배치하는 데 사용되는 x 및 y 좌표를 가진 두 개의 열 행렬. 또는 모든 플롯을 겹쳐 야하는 경우 길이가 2 인 숫자 ( '스파이더 플롯'의 경우). 기본적으로 위치 = NULL 인 경우 세그먼트 플롯이 직사각형 그리드에 배치됩니다.
#
# nrow, ncol
# 위치가 NULL 인 경우 사용할 행 및 열 수를 제공하는 정수 기본적으로 nrow == ncol이며 정사각형 레이아웃이 사용됩니다.
#
# len
# 반지름 또는 세그먼트 길이에 대한 배율.
#
# key.loc
# 단위 키의 x 및 y 좌표를 가진 벡터
#
# key.labels
# 단위 키의 세그먼트에 레이블을 지정하기위한 문자열 벡터 생략하면 dimnames (x)의 두 번째 구성 요소가 사용됩니다 (사용 가능한 경우).
#
# key.xpd
# 단위 키의 클리핑 스위치 (도면 및 레이블)는 par ( "xpd")를 참조하십시오.
#
# xlim
# x 좌표 범위를 가진 벡터.
#
# ylim
# y 좌표 범위를 가진 벡터.
#
# flip.labels
# 라벨 위치를 다이어그램에서 다이어그램으로 위아래로 뒤집어 야하는지 여부를 나타내는 논리. 다소 똑똑한 휴리스틱으로 기본 설정됩니다.
#
# draw.segments
# l논리적. 참이면 세그먼트 다이어그램을 그립니다.
#
# col.segments
# 색상 벡터 (정수 또는 문자, par 참조). 각각 세그먼트 (변수) 중 하나의 색상을 지정합니다. draw.segments = FALSE이면 무시됩니다.
#
# col.stars
# 별표 (케이스) 중 하나의 색상을 지정하는 색상 벡터 (정수 또는 문자, 파 참조). draw.segments = TRUE이면 무시됩니다.
#
# col.lines
# 색 벡터 (정수 또는 문자, par 참조). 각각은 선 (케이스) 중 하나의 색을 지정합니다. draw.segments = TRUE이면 무시됩니다.
#
# axes
# 논리 플래그 : TRUE이면 플롯에 축이 추가됩니다 .
#
# frame.plot
# 논리 플래그 : TRUE이면 플롯 영역이 프레임됩니다.
#
# main
# 주요 제목
#
# sub
# 부제목.
#
# xlab
# x 축의 라벨.
#
# ylab
# y 축의 라벨.
#
# cex
# 라벨의 문자 확장 요소.
#
# lwd
# 그리기에 사용되는 선 너비.
#
# lty
# 그리기에 사용되는 선 종류.
#
# xpd
# 클리핑을 수행해야하는지 여부를 나타내는 논리 또는 NA. par (xpd =.)를 참조.
#
# mar
# par (mar = *)에 대한 인수로 일반적으로 기본보다 작은 여백을 선택합니다..
#
# ...
# plot ()의 첫 번째 호출에 전달 된 추가 인수는 frame.plot이 true 인 경우 plot.default 및 box ()를 참조.
#
# add
# 참이면 현재 플롯에 별표를 추가t.
#
# plot
# 논리적 인 경우 FALSE이면 아무것도 표시되지 않습니다.
#
#
#
# 예)
stars(mtcars[, 1:7], key.loc = c(14, 2),
main = "Motor Trend Cars : stars(*, full = F)", full = FALSE)
stars(mtcars[, 1:7], key.loc = c(14, 1.5),
main = "Motor Trend Cars : full stars()", flip.labels = FALSE)
## 'Spider' or 'Radar' plot:
stars(mtcars[, 1:7], locations = c(0, 0), radius = FALSE,
key.loc = c(0, 0), main = "Motor Trend Cars", lty = 2)
## Segment Diagrams:
palette(rainbow(12, s = 0.6, v = 0.75))
stars(mtcars[, 1:7], len = 0.8, key.loc = c(12, 1.5),
main = "Motor Trend Cars", draw.segments = TRUE)
stars(mtcars[, 1:7], len = 0.6, key.loc = c(1.5, 0),
main = "Motor Trend Cars", draw.segments = TRUE,
frame.plot = TRUE, nrow = 4, cex = .7)
## scale linearly (not affinely) to [0, 1]
USJudge <- apply(USJudgeRatings, 2, function(x) x/max(x))
Jnam <- row.names(USJudgeRatings)
Snam <- abbreviate(substring(Jnam, 1, regexpr("[,.]",Jnam) - 1), 7)
stars(USJudge, labels = Jnam, scale = FALSE,
key.loc = c(13, 1.5), main = "Judge not ...", len = 0.8)
stars(USJudge, labels = Snam, scale = FALSE,
key.loc = c(13, 1.5), radius = FALSE)
loc <- stars(USJudge, labels = NULL, scale = FALSE,
radius = FALSE, frame.plot = TRUE,
key.loc = c(13, 1.5), main = "Judge not ...", len = 1.2)
text(loc, Snam, col = "blue", cex = 0.8, xpd = TRUE)
## 'Segments':
stars(USJudge, draw.segments = TRUE, scale = FALSE, key.loc = c(13,1.5))
## 'Spider':
stars(USJudgeRatings, locations = c(0, 0), scale = FALSE, radius = FALSE,
col.stars = 1:10, key.loc = c(0, 0), main = "US Judges rated")
## Same as above, but with colored lines instead of filled polygons.
stars(USJudgeRatings, locations = c(0, 0), scale = FALSE, radius = FALSE,
col.lines = 1:10, key.loc = c(0, 0), main = "US Judges rated")
## 'Radar-Segments'
stars(USJudgeRatings[1:10,], locations = 0:1, scale = FALSE,
draw.segments = TRUE, col.segments = 0, col.stars = 1:10, key.loc = 0:1,
main = "US Judges 1-10 ")
palette("default")
stars(cbind(1:16, 10*(16:1)), draw.segments = TRUE,
main = "A Joke -- do *not* use symbols on 2D data!")
##########################
# 한국프로야구선수별 기록분석 - 2013년
# 주요선수별성적-2013년.csv
dev.new()#창열어서 그래프를 보여줌줌
data <- read.csv("주요선수별성적-2013년.csv", header=T)
data # 원래 데이터는 행 값이 숫자
data4 <- data[,c(2,21,22)]
data4
line1 <- data$연봉대비출루율
line2 <- data$연봉대비타점율
# par() : 그래픽 매개 변수를 설정하거나 쿼리하는 데
# 사용할 수 있다.
# 매개변수는 tag = value 형식의 par 인수로 지정하거나
# 태그 값의 목록으로 전달하여 설정할 수 있다.
# 매개 변수 mar :
# 플롯의 네 면에 지정된 마진선 수를 나타내는
# c(아래쪽, 왼쪽 위, 오른쪽) 형태의 숫자 벡터.
# 기본값은 c(5,4,4,2) +0.1
# 매개 변수 new:
# 논리적이며 기본값은 FALSE.
# TRUE로 설정하면 다음 높은 레벨의 플로팅 명령(실제로 plot.new)은
# 새 장치에 있는 것 처럼 그리기 전에 프레임을 정리해서는 안된다.
# 현재 고수준 플롯이 없는 장치에서
# new=TRUE 를 사용하려고 하면 오류(경고와 함께 무시 됨)가 발생
par(mar=c(5,4,4,4)+0.1)
plot(line1,
type="o",
axes=F,
ylab="",
xlab="",
ylim=c(0,50),
lty=2,
col="blue",
main="한국프로야구선수별 기록 분석-2013년",
lwd=2)
#축설정
axis(1,
at=1:25,
lab=data4$선수명,
las=2)
axis(2, las=1)
#타점율그래프 덧그리기(꺾은선)
par(new=T) # par함수를 이용해서 새롭게 덧그린다.
#덧그릴 그래프는 타점율을 이용한 선형 점선그래프 그리기
plot(line2,
type="o",
axes=F,
ylab="",
xlab="",
ylim=c(0,50),
lty=2,
col="red")
axis(4, las=1)#오른 쪽에 생성
mtext(side = 4,line = 2.5,"연봉대비 타점율")# 오른쪽
mtext(side = 2,line = 2.5,"연봉대비 출루율")# 왼쪽
abline(h=seq(0,50,5),
v=seq(1,25,1),
col="grey",
lty=2)
#상단 선색 알림창
legend(18,
50,
names(data[21:22]),
cex=0.8,
col=c("red","blue"),
lty = 1,
lwd = 2,
bg="white")
savePlot("baseball_4.png",type="png")
# #####################
# 프로야구KBO 차자 성적과 나이의 관계(hit20180727.csv)
#
# 루타(TB)/추정득점(XR)/타석(PA)값을 이용하여
# 추정특점(XR)/타석(PA) 값이 .18 보다 큰 선수들만
# 별도로 시각화하여 성적과 기여도의 관계를 시각화
# 추정득점(XR): 팀 득짐에 얼마나 기여했는지 정도
hit5<-read.csv("hit20180927.csv")
hit5
hit5$age <- c(30, 20, 28, 31, 30, 32, 37, 32,
37, 34, 36, 30,
30, 30, 28, 25, 28, 32, 28,
25, 28, 33, 32, 28,
29, 29, 28, 33, 34, 31, 39,
30, 29, 35, 29, 28,
26, 34, 31, 33, 28, 31, 22,
29, 29, 28, 29, 19,
31, 33, 33, 28, 19, 31, 34,
28, 28, 31, 27, 24,
31)
# 루타(TB) 값을 이용한 기본 차트
plot(hit5$age,
hit5$TB,
pch=19,
col="steelblue",
cex=1.5,
main="나이와 타자 성적",
xlab="AGE",
ylab="TB")
#추정득점(XR) /타석(PA)값이 .18 보다 큰 데이터만 추출
hit51<-hit5[hit5$XR/hit5$PA>0.18,]
points(hit51$age,
hit51$TB,
pch=19,
col="red",
cex=1.5)
text(hit51$age,
hit51$TB,
pos=3,
labels=hit51$name)
# lowess()
# 이 함수는 국소 가중 다항 회귀를 사용하는 LOWESS smmther에 대한 계산을 수행한다(References 참조)
# lowess는 복잡한 알고리즘에 의해 정의되며, Ratfor 오리지널(W.S. Cleveland)은
# R 소스에서 파일 'src / appl / lowess.doc' 로 찾을 수 있다.
# 일반적으로 로컬 선형 다항식 피팅이 사용되지만
# 경우에 따라 (파일참조) 로컬 상수 피팅을 사용할 수 있다
# '로컬'은 가장 가까운 이웃 (f*n)까지의 거리로 정의되며, 이웃에 속하는 x에 대해 삼중 가중이 사용된다
# Arguments
# x, y : 산점도에서 점의 좌표를 제공하는 벡터.
# 또는 단일 플로팅 구조를 지정할 수 있습니다. (xy.coords 참조.)
# f : 부드러운 스팬.
# 이는 각 값에서 평활도에 영향을 주는 플롯의 점 비율을 제공.
# 값이 더 클수록 더 부드러워 진다.
# iter
# 수행해야 할 "강화'반복 횟수가 더 작은 iter 값을 사용하면 lowess 실행 속도가 빨라진다.
# delta : 기본값은 x 범위읜 1/100.
#윗 함수를 이용해 직선을 그린다.
lines(lowess(hit5$TB~hit5$age),
lwd=2,
lty=3)
###############################################
plot(hit5$age,
hit5$TB,
pch=19,
col="steelblue",
cex=1.5,
main="프로야구 타자- 나이와 성적",
sub="red: XR/PA>0.18",
xlab="AGE",
ylab="TB")
hit51 <- hit5[hit$XR/hit5$PA>0.18,]
points(hit51$age, hit51$TB, pch=19, col="red", cex=1.5)
text(hit5$age, hit5$TB, pos=3, labels=hit5$name)
lines(lowess(hit5$TB~hit5$age), lwd=2, lty=3)
#############
# KBO 프로야구 가을야구 예상 분석
# 플레이오프와 코리아 시리즈
# hit20180919.csv
#
# 미리보는 KBO 2018 가을 야구
# 플레이오프: 한화-sk
# 코리아 시리즈 : SK-두산
# 순서대로 진행된다 했을 때 벌어질 타격전의 예상 시나리오?
# 9.19일까지의 KBO타격 통계를 바탕으로 예상해본다면??
#-----[EDA] KBO가을 야구 미리보기 연습-----
# [1]scatter.plot을 통한 타자들 구성 분포 탐색
# [2]barplot()을 활용한 팀별 성향 비교
#
# 데이터 불러오기
# KBO 데이터 타자순위로 60명 2018.9.19일 까지 통계 반영
hit0<-read.csv("hit20180919.csv")
hit0
#타석당 타점
hit0$pparbi <- hit0$RBI/hit0$PA
hit1 <- hit0[order(hit0$pparbi, decreasing=T),]
head(hit1,5)
#전반적인 상관관계 확인
pairs(hit1[,4:7])
#타석이 많다고 타율이 자동적으로 높지는 않다.
#주요 관심 특정 변수를 활용한 scatterplot으로 대세 파악하기
plot(hit1$AVG, hit1$ISOP,
cex=0.9, pch=19,
col=ifelse(hit1$team=="두산","navy",
ifelse(hit1$team=="SK", "red",
ifelse(hit1$team=="한화", "orange", "lightblue")
)
),
main="가을야구 Preview - stat a.o. 20180919",
xlab="AVG",
ylab="ISOP",
sub="only high XR/PA hitters labeled")
# 선수 이름을 표시
# 타석 대비 득점 생산력이 높은 소수의 선수만 이름 표시
text(hit1$AVG,
hit1$ISOP,
labels=ifelse((hit1$XR/hit1$PA)>.17 & hit1$team %in% c("두산","SK","한화"),
as.character(hit1$name), ""),
pos=3,
cex=0.7)
abline(h=.28, lty=3)
abline(v=.32, lty=3)
#############################
# R 에서 오라클 데이터 읽어오기
#############################
# R에서 데이터베이스에 접속해서 데이터를 가져오는 방법은 2가지 정도.
# 1.자바의 기능을 이용한 것.
# 2.다른 언어의 기능을 사용하지 않고 순수 R의 패키지를 이용하는 방법.
# R에서는 Select 구문을 실행하는 경우 바로 data.frame으로 리턴.
# 관계형 데이터베이스의 데이터를 사용하는 것이
# 일반적인 프로그래밍 언어보다 편리.
############################################
#패키지 설치 및 드라이버 로딩
#자바의 JDBC룰 이용하기 위한 패키지 설정
install.packages("RJDBC")
install.packages("igraph")
#라이브러리 등록
library(RJDBC)
library(rJava)
library(igraph)
# 작업 디렉토리 안에 data 디렉토리에 ojdbc6.jar 파일이 존재
jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver",
classPath="C:/Rwork/ojdbc6.jar")
#데이터베이스 연결
con<-dbConnect(jdbcDriver,
"jdbc:oracle:thin:@localhost:1521:XE",
"ohj",
"920424")
# 데이터베이스 연결 종료
# dbDisconnect(con)
# dbGetQuery나 dbSendQuery를 이용해서
# 첫 번째 매개변수로는 데이터베이스 연결변수를 주고
# 두 번째 매개변수로는 select 구문을 주면 데이터를 가져온다.
# dbGetQuery는 data.frame을 리턴하고
# dbGetQuerty는 무조건 모든 데이터를 가져와서
# data.frame을 만들기 때문에 많은 양의 데이터가 검색된 경우
# 메모리 부족 현상을 일으킬 수 있다.
# 이런 경우에는 dbSendQuery를 이용해서
# 데이터에 대한 포인터만 가져온 후
# fetch(커서, n=1)을 이용해서
# 이런 경우에는 dbSendQuery를 이용해서 데이터에 대한 포인터만 가져온 후
# fetch(커서, n=1)을 이용해서
# n값으로 데이터 개수를 대입해서 필요한 만큼 데이터만 가져와서
# data.frame을 만들 수 있다.
# cursor는
# 데이터를 주고 다음으로 자동으로 넘어가는 특징을 가지고 있다.
# 하지만 전진만 하기 때문에 한 번 읽은 데이터를 다시 읽지 못한다.
# select 구문을 실행하고 저장하기
tablelists <- dbGetQuery(con,"select * from tab")
result <- dbGetQuery(con,"select * from DEPARTMENT")
result
#유형확인
class(result)
#실행 결과를 가지고 그래프를 그릴 수 있는 프레임으로 변환
g<-graph.data.frame(result, directed = T)
#관계도 작성
plot(g,
layout=layout.fruchterman.reingold,
vertex.size=8,
edge.array.size=0.5)
#오라클 쿼리 실행(sqldf 패키지 )###########################
# 오라클 sql쿼리문을 이용하기 위한 패키지 설정
install.packages("sqldf")
#오라클 sql쿼리문을 이용하기 위한 라이브러리 등록
library(sqldf)
head(iris) #iris : 데이터 기본 제공 세트(예시)
sqldf("select Species from iris")
#head
head(iris)
sqldf("select * from iris limit 4")
#subset
subset(iris, Species %in% c("setosa"))
sqldf("select * from iris where Species in ('setosa')")
subset(iris, Sepal.Length >= 5 & Sepal.Length <= 5.2)
sqldf('select * from iris where "Sepal.Length" between 5 and 6')
#xml다루는 방법 json 다루는 방법
# 금일 날씨 xml
# http://www.kma.go.kr/weather/forecast/mid-term-xml.jsp?stnld=109
#json 샘플 데이터
#https://api.github.com/users/hadley/repos
###################
#XML 파싱
##################
# html 파싱과 동일
# XML은 엄격한 HTML이고 태그의 해석을 브라우저가 하지 않고
# 클라ㅣ언트가 직접 한다는 점이 HTML 과 다른 점
# 모든 HTML 파싱방법은 XML에 적용 가능
# XML 파싱 방법으로는 파싱하지 못하는 HTML이 있을 수 있다
#
# 1. 태그 내용 가져오기
# 문자열을 가지고 올 주소를 생성
url <- 'http://www.weather.go.kr/weather/forecast/mid-term-xml.jsp?stnld=109'
url
#rvest 패키지 실행하기
#문자열 다운로드
weather<-read_html(url)
weather
tmn<-weather%>% html_nodes("tmn")%>%html_text()
tmn
# JSON 파싱
######################################
#jsonlite 패키지와 httr 패키지를 이용.
#frameJSON() 함수에 URL을 대입하면 data.frame으로 리턴
#즉, https://api.github.com/users/hadley/repos 데이터를
#data.frame으로 변환
#1.필요한 패키지 설치
install.packages("jsonlite")
install.packages("httr")
#2. 필요한 패키지 로드
rm(list=ls())
library(jsonlite)
library(httr)
#3.json데이터 가져오기
df<-fromJSON("https://api.github.com/users/hadley/repos")
head(df)
Markdown
':: IT > R' 카테고리의 다른 글
[빅데이터] flexdashboard 사용법, tabset , dygraphs,plotly,레이어 아웃의 사이즈(figure Sizes),shiny 패키지,valueBox()아이콘 설정 (0) | 2020.04.08 |
---|---|
[빅데이터]20200402 데이터 전처리 (0) | 2020.04.06 |
[빅데이터] 텍스트 마이닝, 등 (0) | 2020.04.03 |
[빅데이터] 20200401 qplot, 데이터 프레임, 외부데이터 이용, 데이터 수정 및 파악, 파생변수, 조건문, 데이터 전처리, 그래프 그리기 (0) | 2020.04.01 |
[빅데이터] 20200331 RStudio 설치, plot, 워드클라우드 (0) | 2020.03.31 |