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)
----------------------------------
> 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)