정보
-
업무명 : R을 이용한 점수 변화 그래프 및 바람 장미 시각화
-
작성자 : 이상호
-
작성일 : 2020-10-12
-
설 명 :
-
수정이력 :
내용
[개요]
-
안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.
-
다년간 축적된 경험 (기상학 학술 보고서 및 국/영문 학술 논문 게재, 블로그 운영, IT 회사 웹 개발 담당) 및 노하우를 바탕으로 개개인에게 맞춤형 솔루션을 수행할 수 있습니다.
-
특히 재능 플랫폼 (크몽, 오투잡, 해피캠퍼스, 레포트 월드)에서 누구보다도 경쟁력 있는 가격으로 양질의 서비스를 제공하고 있습니다.
-
아스키 형식의 텍스트 (text) 파일부터 과학자료 형식 (HDF, H5, NetCDF, Grib, Grb) 및 Data Base (DB) 자료까지 다양한 형태의 자료를 이용하여 수집, 전처리, 분석, 시각화해 드립니다.
-
또한 웹 사이트에 대한 정보를 이용한 웹 크롤링 및 그에 따른 엑셀 및 DB 구축도 가능합니다.
-
아울러 기초 통계 (빈도분포, Prired t-test, Wilcoxn 등)에서 지도/비지도 학습을 통한 회귀모형 구축에 이르기 까지 효율적인 통계 정보를 제공합니다.
-
최근 대한민국의 후속위성인 천리안위성 2A호 웹 서비스 서브시스템 및 환경위성 2B호 통합 자료처리 서브시스템에 대한 웹 개발을 수행하였습니다.
-
-
그리고 해솔 블로그에서는 다양한 기상학/천문학 정보와 더불어 사무 자동화/프로그래밍 언어를 소개하오니 방문 부탁드립니다.
-
좋은 하루 보내세요.
[재능플랫폼] 오투잡
[재능플랫폼] 크몽
요청
[세부 사항]
-
R 스크립트를 이용하여 아래 왼쪽 그래프와 같은 출력
-
R 스크립트를 n = 30인 모의 생성 자료에 적용하여 그래프 출력을 제시
완료
[사용 OS]
-
Windows 10
[사용 언어]
-
R v4.0.2
[명세]
-
점수 변화 그래프
- 초기값 설정
n = 30
x = rnorm(n, 50, 10)
y = 50 +
0.5 * (x - 50) +
sqrt(1 - 0.5^2) * rnorm(n, 0, 10)
-
시각화
-
par를 통해 영역 설정
-
png를 통해 그림 저장 (그림 해상도: 600 dpi)
-
axis의 경우 side (1, 2)에 따라 가로축 및 세로축 설정
-
시각용 데이터 (data)를 이용하여 lines 및 points에서 점선 그래프 표시
-
n = 30
x = rnorm(n, 50, 10)
y = 50 +
0.5 * (x - 50) +
sqrt(1 - 0.5^2) * rnorm(n, 0, 10)
par(mfrow = c(1, 1))
png(file = paste(globalVar$figConfig, paste0("Img_001_", format(Sys.time(), "%Y%m%d"), ".png"), sep='/'), width = 8, height = 5, units="in", res = 600)
plot(c(-1.2, 1.2), c(20, 80), type = "n", xlab = "exams", ylab = "score", main = "score changes", axes = FALSE)
axis(side = 1, at = c(-1, 1), labels = c("mid", "final"))
axis(side = 2, at = seq(20, 80, 10))
color = rainbow(n)
order.1 = order(x)
x = x[order.1]
y = y[order.1]
xAxisMin = -1
xAxisMax = 1
for (i in 1:n) {
xPos = -1 + ((2 * i) / (n + 1))
data = data.frame(
x = c(xAxisMin, xPos, xPos, xAxisMax)
, y = c(x[i], x[i], y[i], y[i])
)
# 선 그리기
lines(data$x, data$y, col = color[i])
# 점 그리기
points(data[c(1, 4),], col = color[i], pch = 19)
}
dev.off()
-
바람장미 그래프
-
라이브러리 및 입력 자료 읽기
-
library(openair)
data(mydata)
str(mydata)
-
시각화
-
par를 통해 영역 설정
-
png를 통해 그림 저장 (그림 해상도: 600 dpi)
-
k = 18
par(mfrow = c(1, 1))
png(file = paste(globalVar$figConfig, paste0("Img_002_", format(Sys.time(), "%Y%m%d"), ".png"), sep='/'), width = 8, height = 5, units="in", res = 600)
histogram = hist(mydata$wd, breaks = seq(0, 360, length = k + 1))
radius = histogram$counts / max(histogram$counts, na.rm = TRUE)
s = seq(0, 2 * pi, length = 361)
par(mfrow = c(1, 2))
plot(cos(s), sin(s), type = "l", axes = FALSE, lty = "dotted", xlab = "", ylab = "", main = "wind direction")
text(0, 0, "*")
text(0, 1, "N"); text(1, 0, "E"); text(0, -1, "S"); text(-1, 0, "W")
plot(cos(s), sin(s), type = "l", axes = FALSE, lty = "dotted", xlab = "", ylab = "", main = "wind direction")
text(0, 0, "*")
text(0, 1, "N"); text(1, 0, "E"); text(0, -1, "S"); text(-1, 0, "W")
number = k
for (i in 1:number) {
sector = s[histogram$breaks[i] + 1]
sectorArea = seq(sector, sector + (2 * pi) / number, length = 1000)
xx = c(0, radius[i] * cos(sectorArea))
yy = c(0, radius[i] * sin(sectorArea))
polygon(xx, yy)
}
dev.off()
[소스 코드]
#===============================================================================================
# Routine : Main R program
#
# Purpose : 재능상품 오투잡
#
# Author : 해솔
#
# Revisions: V1.0 May 28, 2020 First release (MS. 해솔)
#===============================================================================================
# 다음 R 스크립트를 완성하여 아래 왼쪽 그래프와 같은 출력이 나오도록 하자.
# n (= 10)명 학생들의 중간시험성적 mid와 기말시험성적 final의 변롸를 보여준다.
# mid로부터 final에 이르는 변화를 수평, 수직, 수평 선분을 이어 보여준다.
# mid의 수평축 위치는 -1이고 final의 수평축 위치는 1이다.
# mid의 순위가 i (=1, ..., n)인 학생의 수직선분의 수평축 위치는 -1 + ((2 * i) / (n + 1))이다.
# 그리고 완성된 R 스크립트를 n = 30인 모의생성자료에 적용하여 그래프 출력을 제시하라.
n = 30
x = rnorm(n, 50, 10)
y = 50 +
0.5 * (x - 50) +
sqrt(1 - 0.5^2) * rnorm(n, 0, 10)
par(mfrow = c(1, 1))
png(file = paste(globalVar$figConfig, paste0("Img_001_", format(Sys.time(), "%Y%m%d"), ".png"), sep='/'), width = 8, height = 5, units="in", res = 600)
plot(c(-1.2, 1.2), c(20, 80), type = "n", xlab = "exams", ylab = "score", main = "score changes", axes = FALSE)
axis(side = 1, at = c(-1, 1), labels = c("mid", "final"))
axis(side = 2, at = seq(20, 80, 10))
color = rainbow(n)
order.1 = order(x)
x = x[order.1]
y = y[order.1]
xAxisMin = -1
xAxisMax = 1
for (i in 1:n) {
xPos = -1 + ((2 * i) / (n + 1))
data = data.frame(
x = c(xAxisMin, xPos, xPos, xAxisMax)
, y = c(x[i], x[i], y[i], y[i])
)
# 선 그리기
lines(data$x, data$y, col = color[i])
# 점 그리기
points(data[c(1, 4),], col = color[i], pch = 19)
}
dev.off()
# openair::mydata에서 변수 wd는 바람이 불어오는 방향이다 (wd = 0은 북이고 wd = 90은 동, wd = 180은 남, wd = 270은 서이다).
# wd에 대한 히스토그램을 아래 왼쪽 그림을 바탕으로 아래 오른쪽 그림과 같은 부채꼴 모양이 되도록 R 스크립트를 완성하라.
# k (=9)개 구간으로 나눈 히스토그램이다.
# 최대 빈도 구간의 부채꼴에 대하여 반경이 1이 되도록 한다.
# 그리고 18 (=k)개 구간의 부채꼴 히스토그램을 제시하라.
library(openair)
data(mydata)
str(mydata)
k = 18
par(mfrow = c(1, 1))
png(file = paste(globalVar$figConfig, paste0("Img_002_", format(Sys.time(), "%Y%m%d"), ".png"), sep='/'), width = 8, height = 5, units="in", res = 600)
histogram = hist(mydata$wd, breaks = seq(0, 360, length = k + 1))
radius = histogram$counts / max(histogram$counts, na.rm = TRUE)
s = seq(0, 2 * pi, length = 361)
par(mfrow = c(1, 2))
plot(cos(s), sin(s), type = "l", axes = FALSE, lty = "dotted", xlab = "", ylab = "", main = "wind direction")
text(0, 0, "*")
text(0, 1, "N"); text(1, 0, "E"); text(0, -1, "S"); text(-1, 0, "W")
plot(cos(s), sin(s), type = "l", axes = FALSE, lty = "dotted", xlab = "", ylab = "", main = "wind direction")
text(0, 0, "*")
text(0, 1, "N"); text(1, 0, "E"); text(0, -1, "S"); text(-1, 0, "W")
number = k
for (i in 1:number) {
sector = s[histogram$breaks[i] + 1]
sectorArea = seq(sector, sector + (2 * pi) / number, length = 1000)
xx = c(0, radius[i] * cos(sectorArea))
yy = c(0, radius[i] * sin(sectorArea))
polygon(xx, yy)
}
dev.off()
[결과물]
-
점수 변화 그래프
-
바람장미 그래프
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'자기계발 > 재능상품' 카테고리의 다른 글
[재능상품] R을 이용한 프로그래밍 과제 (0) | 2020.10.18 |
---|---|
[재능상품] Shell Script를 이용한 Bingo 함수 버전, 재귀 처리, 숫자 야구 (0) | 2020.10.18 |
[재능상품] 통계 보고서 해석 (0) | 2020.10.11 |
[재능상품] 오투잡/크몽 통계 분석, 데이터 분석, 시각화 (0) | 2020.06.30 |
[재능상품] 오투잡 : 리눅스 쉘 스크립트를 통해 애니메이션 및 동영상 제작 (0) | 2020.05.26 |
최근댓글