R 프로그래밍 예제

2017. 8. 16. 19:36서버 프로그래밍

<R 데이터형>

Vector : 동일한 데이터 1차원 배열

Matrix : 동일한 데이터 2차원 배열

Array : 동일한 데이터 3차원 배열

List : 다른 데이터형 1차원 배열

Data Frame : 다른 데이터형 2차원 배열 -> 일반적인 Row/Col 데이터


> txt1 <- rbind(txt1, data.frame(CustomerID=420,CustomerName='Intruder',

ContactName='Parents',Address='Nowhere',City='Utopia',

PostalCode='LST 1030',Country='Heaven'))

> txt2 <- subset(txt1,select=c(CustomerID,CustomerName))


> price <- c("$0-50","$50-100","$100-150","$150-200",

+ "$200-250","$250+")

> count <- c(540,1581,880,1278,472,299)

> price_in_groups <- data.frame(PRICE=price,COUNT=count)

> price_in_groups

     PRICE COUNT

1    $0-50   540

2  $50-100  1581

3 $100-150   880

4 $150-200  1278

5 $200-250   472

6    $250+   299

> bchart = barplot(count, main="Amount of ties at price points",

ylab="Number of ties",xlab="The price ($)",col=rainbow(8),

names.arg=price,ylim=c(0,2000))

> legend("topright",price,cex=0.8,fill=rainbow(8),bg="white")

> text(x=bchart,y=count*1.05,labels=paste("(",count,")"),

col="black",cex=0.7)


> setwd("e://r_temp")

> getwd()

[1] "e:/r_temp"

> install.packages("KoNLP")

> install.packages("wordcloud")

> library(KoNLP)

> library(wordcloud)

> useSejongDic()

> data1 <- readLines("seoul_new.txt")

> data1

  [1] "305 무료법률상담에 대한 부탁의 말씀 입니다. 2014-09-27 2 "                   

  [2] "304 [교통불편접수] 6715 버스(신월동->상암동) 2014-09-26 2 "                  

  [3] "303 경기도 시흥시 아파트 화재~ 2014-09-22 145 "                              

  [4] "302 마곡지구 하자보수 관련 2014-09-22 57 "                                   

  [5] "301 가깝고도 먼 강남(성수동에서 압구정역 방면) 2014-09-22 83 "               

                   

> data2 <- sapply(data1,extractNoun,USE.NAMES=F)

> data2

[[1]]

[1] "305"      "무료"     "법률상담" "부탁"    

[5] "말씀"     "2014"     "-09"      "27"      

[9] "2"       


> head(unlist(data2),30)

 [1] "305"                  "무료"                

 [3] "법률상담"             "부탁"                

 [5] "말씀"                 "2014"                

 [7] "-09"                  "27"                  

 [9] "2"                    "304"                 

[11] "교통불편"             "접수"                

[13] "6715"                 "버스(신월동->상암동)"

[15] "2014"                 "-09"                 

[17] "26"                   "2"                   

[19] "303"                  "경기"                

[21] "시흥시"               "아파트"              

[23] "화재"                 "2014"                

[25] "-09"                  "22"                  

[27] "14"                   "5"                   

[29] "302"                  "마곡지구"            

> data3 <- unlist(data2)

> data3 <- gsub("\\d+","",data3)

> data3 <- gsub("서울시","",data3)

> data3 <- gsub("서울","",data3)

> data3 <- gsub("요청","",data3)

> data3 <- gsub("제안","",data3)

> data3 <- gsub(" ","",data3)

> data3 <- gsub("-","",data3)

> head(data3,30)

 [1] ""                    "무료"               

 [3] "법률상담"            "부탁"               

 [5] "말씀"                ""                   

 [7] ""                    ""                   

 [9] ""                    ""                   

[11] "교통불편"            "접수"               

[13] ""                    "버스(신월동>상암동)"

[15] ""                    ""                   

[17] ""                    ""                   

[19] ""                    "경기"               

[21] "시흥시"              "아파트"             

[23] "화재"                ""                   

[25] ""                    ""                   

[27] ""                    ""                   

[29] ""                    "마곡지구"           

> write(unlist(data3),"seoul_2.txt")

> data4 <- read.table("seoul_2.txt")

> data4

                                  V1

1                               무료

2                           법률상담

3                               부탁

4                               말씀

5                           교통불편

> nrow(data4)

[1] 1325

> wordcount <- table(data4)

> wordcount

data4

                ,뉴타운·재개발 

                              1 

                              B 

                              2 

                            ddp 

                              1 

> head(sort(wordcount,decreasing=T),20)

data4

    OO     님     한   관련   시장   버스   택시   개선 

    16     16     15     14     14     13     12     10 

    역   문제 지하철   관리     문   민원   설치   한강 

     9      8      8      7      7      7      7      7 

  건의   공사     동   불법 

     6      6      6      6 

> data3 <- gsub("OO","",data3)

> data3 <- gsub("님","",data3)

> data3 <- gsub("한","",data3)

> data3 <- gsub("개선","",data3)

> data3 <- gsub("문제","",data3)

> data3 <- gsub("관리","",data3)

> data3 <- gsub("민원","",data3)

> data3 <- gsub("이용","",data3)

> data3 <- gsub("관련","",data3)

> data3 <- gsub("시장","",data3)

> write(unlist(data3),"seoul_3.txt")

> data4 <- read.table("seoul_3.txt")

> wordcount <- table(data4)

> head(sort(wordcount,decreasing=T),20)

data4

    버스     택시       역   지하철       강       문 

      13       12        9        8        7        7 

    설치     건의     공사       동     불법     불편 

       7        6        6        6        6        6 

    안전   어린이       적     공원       들 마곡지구 

       6        6        6        5        5        5 

    시민     아이 

       5        5 

> library(RColorBrewer)

> palete <- brewer.pal(9,"Set3")

> wordcloud(names(wordcount),freq=wordcount,scale=c(5,1),

+ rot.per=0.25,min.freq=1,random.order=F,random.color=T,

+ colors=palete)

There were 50 or more warnings (use warnings() to see the first 50)

> legend(0.3,1,"서울시 응답소 요청사항 분석",cex=0.8,

+ fill=NA,border=NA,bg="white",text.col="red",

+ text.font=2,box.col="red")

> savePlot("seoul_wordcloud.png",type="png")

----------------------------------------------


> library(KoNLP)

> library(wordcloud)

> library(stringr)

> useSejongDic()

> mergeUserDic(data.frame(readLines("제주도여행지.txt"),"ncn"))


> txt <- readLines("jeju.txt")

> place <- sapply(txt,extractNoun,USE.NAMES=F)

> place

> head(unlist(place),30)

 [1] "제주"             "여행"            

 [3] "코스"             "숙소"            

 [5] "어디"             "지"              

 [7] "수"               "대략"            

 [9] "적"               "제주"            

[11] "여행"             "일정"            

[13] "필요"             "없구요.."        

[15] "제주"             "여행"            

[17] "준비"             "도움"            

[19] "합니"             "●"              

[21] "제주"             "관광지"          

[23] "입장료"           "모바일할인쿠폰을"

[25] "이용"             "하시"            

[27] "할인"             "수"              

[29] "6월4일부터"       "징검다리"        

> cdata <- unlist(place)

> place <- str_replace_all(cdata,"[^[:alpha:]]","")

> place <- gsub(" ","",place)

> gsub_txt <- readLines("제주도여행코스gsub.txt")

> cnt_txt <- length(gsub_txt)

> cnt_txt

[1] 72

> i <- 1

> for (i in 1:cnt_txt) {

+ place <- gsub((gsub_txt[i]),"",place)

+ }

> place <- Filter(function(x) { nchar(x) >= 2 },place)

> head(unlist(place),30)

 [1] "어디"                      

 [2] "없구요"                    

 [3] "합니"                      

 [4] "모바일쿠폰을"              

 [5] "월일부터"                  

            

> write(unlist(place),"jeju_2.txt")

> rev <- read.table("jeju_2.txt")

> nrow(rev)

[1] 1503

> wordcount <- table(rev)

> head(sort(wordcount,decreasing=T),30)

rev

      우도   주상절리     박물관   섭지코지       중문 

        18         12         11         10         10 

    산방산       녹차   에코랜드     오설록 성산일출봉 

         9          8          8          8          7 

      신창     용두암       일출       정상       구경 

         7          7          7          7          6 

      대장     송악산       주도       폭포       풍경 

         6          6          6          6          6 

      하기   해수욕장       공원       관광       구석 

         6          6          5          5          5 

    분화구       산책       생각       식당   신라호텔 

         5          5          5          5          5 

> library(RColorBrewer)

> palete <- brewer.pal(9,"Set1")

> wordcloud(names(wordcount),freq=wordcount,scale=c(5,1),

+ rot.per=0.25,min.feq=2,random.order=F,ransom.color=T,

+ colors=palete)

> legend(0.3,1,"제주도 추천 여행 코스 분석",cex=0.8,

+ fill=NA,border=NA,bg="white",text.col="red",

+ text.font=2,box.col="red")

> savePlot("jeju_wordcloud.png",type="png")

> top10 <- head(sort(wordcount,decreasing=T),10)

> pie(top10,main="제주도 추천여행 코스 TOP 10")

> pie(top10,col=rainbow(10),radius=1,

+ main="제주도 추천여행 코스 TOP 10")

> pct <- round(top10/sum(top10)*100,1)

> lab <- paste(names(top10),"\n",pct,"%")

> pie(top10,col=rainbow(10),redius=1,cex=0.8,labels=lab,

+ main="제주도 추천여행 코스 TOP 10")

> savePlot("jeju_pie.png",type="png")

> bchar <- head(sort(wordcount,decreasing=T),10)

> bchar

> bp <- barplot(bchar,main="제주도 추천여행코스 TOP10",

+ col=rainbow(10),cex.naes=0.7,las=2,ylim=c(0,25))

> pct <- round(bchar/sum(bchar)*100,1)

> pct

> text(x=bp,y=bchar*1.05,labels=paste("(",pct,"%",")"),

+ col="black",cex=0.7)

> text(x=bp,y=bchar*0.95,labels=paste(bchar,"건"),

+ col="black",cex=0.7)

> savePlot("jeju_vertical_bar_chart.png",type="png")

> bp <- barplot(bchar,main="제주도 추천여행코스 TOP10",

+ col=rainbow(10),xlim=c(0,25),cex.name=0.7,las=1,horiz=T)

> text(y=bp,x=bchar*0.9,labels=paste(bchar,"건"),

+ col="black",cex=0.7)

> text(y=bp,x=bchar*1.15,labels=paste("(",pct,"%",")"),

+ col="black",cex=0.7)

> savePlot("jeju_horizontal_bar_chart.png",type="png")

 

> install.packages("plotrix")

> library(plotrix)

> th_pct <- round(bchar/sum(bchar)*100,1)

> th_names <- names(bchar)

> th_labels <- paste(th_names,"\n","(",th_pct,")")

> pie3D(bchar,main="제주도 추천여행코스 TOP10",

+ col=rainbow(10),cex=0.3,labels=th_labels,explode=0.05)

> savePlot("jeju_3d_pie.png",type="png")

----------------------------


> install.packages("ggmap")

> install.packages("stringr")

> library(ggmap)

> library(stringr)

> loc <- read.csv("서울_강동구_공영주차장_위경도.csv",header=T)

> loc

                     주차장명                  주소     LAT      LON

1        강일동공영주차장(구)   강동구 강일동 292-2 37.5665 127.1722

2       온조옆 공영주차장(구)     강동구 고덕동 302 37.5576 127.1570

3                  명일동(구) 강동구 명일동 312-250 37.5511 127.1428

4   주양쇼핑옆 노상주차장(구)   강동구 명일동 47-21 37.5529 127.1530

5                  명일동(시)    강동구 명일동 47-9 37.5535 127.1558

> kd <- get_map("Amsa-dong",zoom=13,maptype="roadmap")

> kor.map <- ggmap(kd)+geom_point(data=loc,aes(x=LON,y=LAT),

+ size=3,alpha=0.7,color="red")

> kor.map + geom_text(data=loc,aes(x=LON,y=LAT+0.001,label=주차장명),size=3)

> ggsave("kd.png",dpi=500)


> loc2 <- str_sub(loc$주차장명,start=-2,end=-2)

> loc2

 [1] "구" "구" "구" "구" "시" "구" "시" "구" "구" "구" "구" "구" "구" "구" "구" "구"

> colors <- c()

> for (i in 1:length(loc2)) {

+ if (loc2[i] == '구') {

+ colors <- c(colors,"red")

+ } else {

+ colors <- c(colors,"blue")

+ }

+ }

> colors

 [1] "red"  "red"  "red"  "red"  "blue" "red"  "blue" "red"  "red"  "red"  "red"  "red" 

[13] "red"  "red"  "red"  "red" 

> kd <- get_map("Amsa-dong",zoom=13,maptype="roadmap")

> kor.map <- ggmap(kd)+geom_point(data=loc,aes(x=LON,y=LAT),size=3,alpha=0.7,

+ color=colors)

> kor.map + geom_text(data=loc,aes(x=LON,y=LAT+0.001,label=주차장명),size=3)

> ggsave("kd2.png",dpi=500)

 


> jeju <- read.csv("제주도여행코스_1일차.csv",header=T)

> install.packages("ggplot2")

> library(ggplot2)

> jeju1 <- get_map("Hallasan",zoom=10,maptype="hybrid")

> jeju.map <- ggmap(jeju1)+geom_point(data=jeju,aes(x=LON,y=LAT),size=3,alpha=0.7,

+ col="red")

> jeju.map + geom_path(data=jeju,aes(x=LON,y=LAT),size=1,linetype=2,col="blue")+

+ geom_text(data=jeju,aes(x=LON,y=LAT+0.01,label=장소),size=3)

> ggsave("jeju_map.png",dpi=500)


--------------------------


> install.packages("ggmap")

> library(ggmap)

> library(grid)

> pop <- read.csv("지역별인구현황_2014_4월기준.csv",header=T)

> pop

               지역 총인구수 남자인구수 여자인구수      LAT      LON

1      서울특별시   10137313    5002036    5135277 37.54100 126.9860

2      부산광역시    3523386    1743807    1779579 35.18376 129.0755

3      대구광역시    2499880    1244520    1255360 35.87145 128.6014

4      인천광역시    2889258    1453139    1436119 37.45622 126.7052

5      광주광역시    1471850     729480     742370 35.16008 126.8515

> lon <- pop$LON

> lat <- pop$LAT

> data <- pop$총인구수

> df <- data.frame(lon,lat,data)

> df

        lon      lat     data

1  126.9860 37.54100 10137313

2  129.0755 35.18376  3523386

3  128.6014 35.87145  2499880

4  126.7052 37.45622  2889258

5  126.8515 35.16008  1471850

> map1 <- get_map("Jeonju",zoom=7,maptype="roadmap")

> map1 <- ggmap(map1)

> map1 + geom_point(aes(x=lon,y=lat,colour=data,size=data),data=df)

> ggsave("pop.png",dpi=500,scale=1,width=7,height=4)

 


> map2 <- get_map("Jeonju",zoom=7,maptype="terrain")

> map2 <- ggmap(map2)

> map2 + stat_bin2d(aes(x=lon,y=lat,colour=data,size=data,fill=factor(data)),data=df)

> ggsave("pop2.png",dpi=500,scale=1,width=7,height=4)


----------------------------------

busan_pop.csv


> install.packages("ggmap")

> library(ggmap)

> library(grid)

> pop <- read.csv("busan_pop.csv",header=T)

> pop

       구군      LAT      LON    POP

1      중구 35.10621 129.0324  48101

2      서구 35.09793 129.0244 118949

3      동구 35.12925 129.0454  95599

4    영도구 35.09120 129.0679 133086

5  부산진구 35.16291 129.0532 389134

6    동래구 35.20500 129.0836 275389

7      남구 35.13658 129.0842 290163

8      북구 35.19711 128.9904 307504

9    강서구 35.21222 128.9804  89056

10 해운대구 35.16318 129.1636 428054

11   사하구 35.10459 128.9748 346753

12   금정구 35.24307 129.0921 251749

13   연제구 35.17624 129.0798 208698

14   수영구 35.14569 129.1132 180894

15   사상구 35.15195 128.9915 246313

16   기장군 35.24450 129.2223 150213

> map1 <- get_map("busan",zoom=11,maptype="roadmap")

> map1 <- ggmap(map1)

> map1 + geom_point(aes(x=LON,y=LAT,colour=POP,size=POP),data=pop)+

+ geom_text(data=pop,aes(x=LON,y=LAT+0.01,label=구군),size=3)

> ggsave("busan_pop.png",dpi=300)