본문 바로가기

R

특화된 머신러닝 주제

728x90
반응형

특화된 머신러닝 주제

1. 소셜 네트워크 분석 시각화

2. 병렬처리로 데이터 분석 속도는 높이는 방법

 

 

소셜 네트워크 분석 시각화 (p523)

 

네트워크 분석?

사람이나 사물, 조직, 기술, 자원들의 연결관계 속에서 핵심적인 기능을

담당하는 행위주체 판별/발굴하고

보다 효과적인 인력/자원 활용 조직화 방안을 분석하는 기법

 

 

 

네트워크 분석이 활용되는 분야

 

1. 생물 유전학의 유전자 데이터 시각화 ( 연구센터 )

2. 사회망 관계 시각화 ( 사회과학 )

3. 금융 사기 예방

 

 

*실습예제

학생들의 교류 패턴을 연구하고자 한다. 누가 누구와 주로 이야기를 하고

식사를 하고 전화를 할까?

한번도 얘기를 하는 사람도 있을 것이고 자주 얘기를 하는 사람도 있을 것인데

누가 가장 사회성이 좋을까?

 

질문: 학생들의 사회적 척도에 미치는 영향 중에 평균 독서량과

어떤 관계가 있는지?

 

1. 데이터를 로드한다

paper <- read.csv("paper1.csv")

 

2. na 0으로 변경한다

paper[is.na(paper)]<-0

 

3. 컬럼인 이름을 row 이름으로 설정한다

rownames(paper)<-paper[,1]   # paper 1 내용을 rownames !

paper<-paper[-1]   # x 제거

# 그럼 이제 rowname column name 일치한다.

 

4. 행렬형태로 변환한다

paper2<- as.matrix(paper)

 

5. 달에 읽은 책의 갯수

book<-read.csv("book_hour.csv", header=T)

paper2

book

library(sna)

 

6. 새로운 창을 열어서 거기에 그래프를 그린다.

 

gplot(paper2 , displaylabels = T, boxed.labels = F , vertex.cex = sqrt(book[,2]) , vertex.col = "blue" , vertex.sides = 20 ,

      edge.lwd = paper2*2 , edge.col = "green" , label.pos = 3)

# vertex.cex 원의 크기

 

 

 

 

 

문제271.

우리반에서 이번주에 같이 밥먹은 학생 데이터로 시각화를 하시오

 

meal<-read.csv("emp2_meal.csv")

head(meal)

meal[is.na(meal)]<-0

 

rownames(meal)<-meal[,1]

meal<-meal[-1]

head(meal)

 

meal<-as.matrix(meal)

head(meal)

 

library(sna)

gplot(meal , displaylabels = T, boxed.labels = F , vertex.col = "blue" , vertex.sides = 20 ,

      edge.lwd = meal*2 , edge.col = "green" , label.pos = 3)

 

 

 

 

 

문제272.

emp8_meal.csv sns 그리시오

 

meal<-read.csv("emp8_meal.csv")

head(meal)

meal[is.na(meal)]<-0

 

rownames(meal)<-meal[,1]

head(meal)

 

meal<-meal[-1]

head(meal)

 

meal<-as.matrix(meal)

head(meal)

 

library(sna)

gplot(meal , displaylabels = T, boxed.labels = F , vertex.col = "blue" , vertex.sides = 20 ,

      edge.lwd = meal*2 , edge.col = "green" , label.pos = 3)

 

 

 

 

 

문제272.

레미제라블 장발장 소설의 인물관계도를 시각화 하시오

 

###################전체 코드################################

library(networkD3)

library(dplyr)

 

# data set 소설 레미제라블 인물 관계도

data(MisLinks, MisNodes)

head(MisNodes)  # 인물

head(MisNodes)
             name group size
1          Myriel     1   15
2        Napoleon     1   20
3 Mlle.Baptistine     1   23
4    Mme.Magloire     1   30
5    CountessdeLo     1   11
6        Geborand     1    9

 

head(MisLinks)  # 관계

head(MisLinks)
  source target value
1      1      0     1
2      2      0     8
3      3      0    10
4      3      2     6
5      4      0     1
6      5      0     1

 

 

# plot

D3_network_LM<-forceNetwork(Links = MisLinks, Nodes = MisNodes,

             Source = 'source', Target = 'target',

             NodeID = 'name', Group = 'group',opacityNoHover = TRUE,

             zoom = TRUE, bounded = TRUE,

             fontSize = 15,

             linkDistance = 75,

             opacity = 0.9)

 

D3_network_LM

 

 

 

# html 발사

networkD3::saveNetwork(D3_network_LM, "D3_LM.html", selfcontained = TRUE)

 

 

 

 

문제273.

7 데이터를 가지고 웹페이지에서 네트워크 관계도가 출력되게 하시오

 

library(networkD3)

library(dplyr)

 

emp7<- read.csv("emp2_node_df.csv")

head(emp7)

# idx 그냥 번호 붙여준것

 

emp_link<-read.csv("link_emp2.csv")

head(emp_link)

# sorce_idx source idx

 

# data set 소설 레미제라블 인물 관계도

data(emp_link, emp7)

head(MisNodes)

head(MisLinks)

 

# plot

D3_network_LM<-forceNetwork(Links = emp_link, Nodes = emp7,

                            Source = 'source_idx', Target = 'target_idx',

                            NodeID = 'node',Group='idx', opacityNoHover = TRUE,

                            zoom = TRUE, bounded = TRUE,

                            fontSize = 15,

                            linkDistance = 75,

                            opacity = 0.9)

 

D3_network_LM

 

 

 

 

문제274.

아이티 글로벌 기업들간의 재판소송 현황을 시각화하시오

 

links = '[

  {"source": "Microsoft", "target": "Amazon", "type": "licensing"},

{"source": "Microsoft", "target": "HTC", "type": "licensing"},

{"source": "Samsung", "target": "Apple", "type": "suit"},

{"source": "Motorola", "target": "Apple", "type": "suit"},

{"source": "Nokia", "target": "Apple", "type": "resolved"},

{"source": "HTC", "target": "Apple", "type": "suit"},

{"source": "Kodak", "target": "Apple", "type": "suit"},

{"source": "Microsoft", "target": "Barnes & Noble", "type": "suit"},

{"source": "Microsoft", "target": "Foxconn", "type": "suit"},

{"source": "Oracle", "target": "Google", "type": "suit"},

{"source": "Apple", "target": "HTC", "type": "suit"},

{"source": "Microsoft", "target": "Inventec", "type": "suit"},

{"source": "Samsung", "target": "Kodak", "type": "resolved"},

{"source": "LG", "target": "Kodak", "type": "resolved"},

{"source": "RIM", "target": "Kodak", "type": "suit"},

{"source": "Sony", "target": "LG", "type": "suit"},

{"source": "Kodak", "target": "LG", "type": "resolved"},

{"source": "Apple", "target": "Nokia", "type": "resolved"},

{"source": "Qualcomm", "target": "Nokia", "type": "resolved"},

{"source": "Apple", "target": "Motorola", "type": "suit"},

{"source": "Microsoft", "target": "Motorola", "type": "suit"},

{"source": "Motorola", "target": "Microsoft", "type": "suit"},

{"source": "Huawei", "target": "ZTE", "type": "suit"},

{"source": "Ericsson", "target": "ZTE", "type": "suit"},

{"source": "Kodak", "target": "Samsung", "type": "resolved"},

{"source": "Apple", "target": "Samsung", "type": "suit"},

{"source": "Kodak", "target": "RIM", "type": "suit"},

{"source": "Nokia", "target": "Qualcomm", "type": "suit"}

]'

 

link_df = jsonlite::fromJSON(links)

# node index 숫자는 0부터 시작해야 한다

# dplyr::row_number() 1부터 숫자를 매기기 때문에 거기서 1씩을 빼도록 한다

node_df = data.frame(node = unique(c(link_df$source, link_df$target))) %>%

  mutate(idx = row_number()-1)

 

# node_df에서 index값을 가져와서 source target에 해당하는 index 값을 저장한다

link_df = link_df %>%

  left_join(node_df %>% rename(source_idx = idx), by=c('source' = 'node')) %>%

  left_join(node_df %>% rename(target_idx = idx), by=c('target' = 'node'))

 

# 데이터 확인

node_df

link_df

 

 

library(networkD3)

library(dplyr)

 

D3_network_LM<-forceNetwork(Links = link_df,

 Nodes = node_df,

 Source = 'source_idx', Target = 'target_idx',

 NodeID = 'node', Group = 'idx',

 opacityNoHover = TRUE, zoom = TRUE,

 bounded = TRUE,

 fontSize = 15,

 linkDistance = 75,

 opacity = 0.9)

 

D3_network_LM

 

 

 

문제275. 우리반 데이터로 D3_network_LM 그리시오

 

library(networkD3)

library(dplyr)

 

emp8_node_df<- read.csv("emp8_node_df.csv")

head(emp8_node_df)

# idx 그냥 번호 붙여준것

 

link_emp8<-read.csv("link_emp8.csv", fileEncoding="UTF8" )

head(link_emp8)

# sorce_idx source idx

 

# plot

D3_network_LM<-forceNetwork(Links = link_emp8, Nodes = emp8_node_df,

                            Source = 'source_idx', Target = 'target_idx',

                            NodeID = 'node',Group='idx', opacityNoHover = TRUE,

                            zoom = TRUE, bounded = TRUE,

                            fontSize = 15,

                            linkDistance = 75,

                            opacity = 0.9)

 

D3_network_LM

 

 

 

 

 

 

R 에서의 병렬처리(537p)

 

**과거 직렬 컴퓨팅

 

 

 

**현재 병렬 컴퓨팅

작업관리자-성능- CPU 사용현황의 검정+초록 갯수가 core 갯수다

( 동시 작업처리 가능한 갯수)

 

 

 

R 에서의 명령어의 수행시간 확인하는 방법

 

system.time(rnorm(1000000))

 사용자  시스템 elapsed
   0.08    0.00    0.08

** 코드의 실행시간과 시스템의 실행시간을 비교해서

평상시에 돌던 코드가 오늘따라 유독 느리다면 시스템 시간을

확인해봐야 한다.

 

 

foreach doParallel 이용해서 병렬로 작업하는 방법

 

** foreach 직렬!

library(foreach)

system.time(

  a<-foreach(i=1:4, .combine='c')%do% rnorm(250000)

)

사용자  시스템 elapsed
   0.07    0.01    0.11

 

 

**doParallel 병렬

library(doParallel)

registerDoParallel(cores=4)

system.time(b<-foreach(i=1:4, .combine='c')%do% rnorm(250000))

사용자  시스템 elapsed
   0.06    0.00    0.06

 

stopImplicitCluster()

 

**545p 병렬클러스터를 닫는 명령어

 

 

728x90
반응형

'R' 카테고리의 다른 글

서포트 벡터 머신  (0) 2019.04.17
랜덤포레스트  (0) 2019.04.17
모델성능개선 부스팅, 앙상블,배깅  (0) 2019.04.17
모델 성능개선  (0) 2019.04.03
모델 성능평가  (0) 2019.04.03