기본 콘텐츠로 건너뛰기

[math] 정적분의 특성

[R]데이터 시각화

데이터 시각화

내용

Bar plot

막대그래프는 목록변수의 분포(빈도수)를 나타냅니다. 막대의 위치는 수직 또는 수평으로 작성할 수 있습니다. 가장 간단한 형태는 다음 함수를 사용하는 것입니다.

barplot(객체, main, xlab, ylab, horiz, names.arg)
객체는 벡터 또는 행렬 형입니다.
main: 제목
xlab, ylab: x, y 축 라벨
horiz = True 이면 수평바가 생성
names.arg: 각 바의 라벨을 작성
library(vcd)
ar<-Arthritis
names(ar)
[1] "ID"        "Treatment" "Sex"       "Age"       "Improved" 
head(ar)
  ID Treatment  Sex Age Improved
1 57   Treated Male  27     Some
2 46   Treated Male  29     None
3 77   Treated Male  30     None
4 17   Treated Male  32   Marked
5 36   Treated Male  46   Marked
6 23   Treated Male  58   Marked
table()는 교차 분류 요인(cross-classifying factors)을 사용하여 요인 수준의 각 조합에서 카운트의 분할표(contingency table, 교차표)를 작성합니다.
 count<-table(ar$Improved);count
 None   Some Marked 
    42     14     28 
par(mfrow=c(1, 2))
barplot(count, main="막대그래프", xlab="imporvement", ylab="Frequency")
barplot(count, main="수평 막대그래프", xlab="Frequency", ylab="Improvement", horiz=TRUE)

그래프를 작성 대상인 목록변수가 factor 또는 ordered factor 라면 plot() 함수에 의해 수직 막대그래프를 작성할 수 있습니다.

class(ar$Improved)
[1] "ordered" "factor"
par(mfrow=c(1,2))
plot(ar$Improved, main="막대그래프", xlab="imporvement", ylab="Frequency")
plot(ar$Improved, main="수평 막대그래프", xlab="Frequency", ylab="Improvement", horiz=TRUE)

Stacked and grouped bar plot

barplot()의 객체가 벡터가 아니라 행렬인 경우 결과 그래프는 누적 또는 그룹화된 막대 플롯이 됩니다. beside=FALSE(기본값)인 경우 행렬의 각 열은 플롯에 막대를 생성하고 열의 값은 누적되어 막대의 높이로 나타납니다. beside=TRUE인 경우 행렬의 각 열은 그룹을 나타내며 각 열의 값은 누적되지 않고 병치됩니다. 치료 유형 및 개선 상태의 교차표를 고려하십시오.

 cnt<-table(ar$Improved, ar$Treatment) 
cnt
         Placebo Treated
  None        29      13
  Some         7       7
  Marked       7      21
windows(height=7, width=7) #그림의 새창이 생성됩니다. 
par(mfrow=c(1,2))
barplot(cnt, main="Stacked bp", xlab="Imporvement", ylab="Frequency",
col=c("red","yellow","green")) 
barplot(cnt, main="Stacked bp",xlab="Imporvement", ylab="Frequency", col=c("red","yellow","green"), legend=rownames(cnt), beside=TRUE)

barplot은 단순히 빈도수에 국한되지는 않습니다. 예를 들어 aggregation()함수에 의해 생성된 그룹별 mean, sd등을 작성할 수 있습니다.

states<-data.frame(state.region, state.x77)
means<-aggregate(states$Illiteracy, by=list(state.region), FUN=mean); means 
        Group.1        x
1     Northeast 1.000000
2         South 1.737500
3 North Central 0.700000
4          West 1.023077
위 결과를 변수 x에 대해 정렬합니다.

order(x): 객체 x를 정렬하여 대응되는 인덱스를 결과로 반환

 means<-means[order(means$x),]; means
        Group.1        x
3 North Central 0.700000
1     Northeast 1.000000
4          West 1.023077
2         South 1.737500
par(mfrow=c(1,1))
barplot(means$x, names.arg=means$Group.1)
title("Mean Illiteracy Rate")

막대 플롯 조정

막대 플롯의 모양을 조정하는 방법에는 여러 가지가 있습니다. 예를 들어, 막대가 많은 경우 막대 레이블이 겹치기 시작할 수 있습니다. cex.names 옵션을 1보다 작은 값을 지정하여 레이블 크기가 감소시킬 수 있습니다. 선택적으로 names.arg 인수를 사용하면 막대에 레이블을 지정하는 데 사용되는 이름의 문자형 벡터를 지정할 수 있습니다. 그래픽 매개변수를 사용하여 텍스트 간격을 지정할 수도 있습니다.

이러한 플롯의 조정은 par()의 다양한 인자를 사용하여 일으킬 수 있습니다. 다음에 사용된 인자는 marlas입니다.

  • mar: 플롯의 네 면에 지정할 여백 행 수를 제공하는 c(하단, 왼쪽, 상단, 오른쪽) 형식의 숫자 벡터입니다. 기본값은 c(5, 4, 4, 2) + 0.1입니다.
  • las: axis label의 스타일
    • 0: 기본값으로 축과 평형
    • 1:항상 평형
    • 2: 축과 수직
    • 3:항상 수직
par(mar=c(5, 8, 4, 2))
par(las=2)
cnt<-table(ar$Improved)
barplot(cnt, main="Treatment outcome", horiz=TRUE, ces.name=0.8, names.arg=c("No Improvement","Some Improvement", "Marked Imporvement"))

스피노그램(Spinograms)

스피노그램에서 누적 막대 그림은 각 막대의 전체높이가 1이고 각 세그먼트(부분) 높이가 비율을 나타내도록 다시 조정됩니다. 스피노그램은 vcd 패키지spine() 함수를 통해 생성됩니다. 다음 코드는 간단한 스피노그램을 생성합니다.

attach(ar)
cnt<-table(Treatment, Improved)
spine(cnt, main="Spinogram")
detach(ar)

Pie chart

파이 차트는 다음 함수로 생성됩니다.

pie(x, labels)
x: 음수가 아닌 수치형벡터로서 각 원소는 원의 부분면적을 나타냅니다.
labels: 각 부분의 명칭

다음은 객체 states의 Income을 state.region으로 그룹화하여 각 그룹의 합을 pie chart로 나타낸 것입니다. 또한 3D차트로 나타내기 위해 plotrix 패키지를 사용합니다.

attach(states)
inSum<-aggregate(Income, by=list(state.region), FUN=sum); inSum
par(mar=c(5,4,4,2)+0.1)
par(mfrow=c(1,2))
lbl<-levels(state.region); lbl
pie(inSum$x, labels=lbl, main="Income")

pct<-c(inSum$x/sum(inSum$x))
lbl2<-paste(lbl, round(pct, 1), '%', sep=" ")
pie(inSum$x, labels=lbl2, col=rainbow(length(lbl2)),main="Income(%)")
par(mfrow=c(1,2))
library(plotrix)
pie3D(inSum$x, labels=lbl, explode=0.1,  main='3D pie chart')

#각 지역에 포함된 도시의 수
city<-table(state.region)
lbl3<-paste(lbl, '\n', city, sep="")
pie(inSum$x, labels=lbl3, main="city # in region")    
detach(states)

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b