ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [데이터사이언스] 빅데이터 관련 과제
    기타/과제 2021. 4. 19. 14:06

    1. 빅데이터 플랫폼 요구사항 분석

    플랫폼 구축의 목적을 달성하기 위해 요구사항을 수집하고 수집된 자료로 요구사항을 도출 및 분석하여 빅데이터 플랫폼 범위를 명세하고 검증하는 능력이다

     

    2. 빅데이터 플랫폼 아키텍쳐 설계

    빅데이터 시스템 아키텍처 기술

    요구 사항 분석 → 참조 데이터 확보 → 공유 보안 체계 → 시스템 개념 설계 → 규모 산정 검토 → 시스템 상세 설계 → 시험 시스템 구현 → 타당성 검증 보안

    아키텍처 역량 구분 내용
    저장 관리 HDFS
    (Hardoop Distributed File System)
    아파치 재단의 오픈소스 분산파일 시스템
    일반 하드웨어에서 고성능 저장 관리 제공
    높은 확장성과 장애 극복을 위해 3개의 노드에 자동으로 데이터 복제
    자동 데이터 복제로 백업이 필요 없음
    한 번의 쓰기와 여러 번 읽는 작업에 적합
    Cloudera Manager Cloudera의 아파치 하둡 배포판을 위한 관리 애플리케이션
    클러스터 확장 처리, 실시간 노드와 운영 서비스 모니터링 제공
    데이터베이스 Hbase 랜덤 엑세스와 실시간 읽고 쓰기 지원
    읽기와 쓰기의 일관성 유지
    테이블 샤딩(수평 분할 등)으로 성능 향상
    장애 시 서버간 자동 복구 지원
    Cassandra 대량 데이터 갱신을 위한 컬럼 인덱스와 캐시 제공
    데이터 복제본을 이웃 노드 혹은 임의의 노드에 저장
    업데이트된 데이터는 동기적 혹은 비동기적으로 복제
    프로세싱 MapReduce 2004년 구굴에서 논문으로 발표
    데이터 집합을 작은 단위로 나누어 처리
    여러 노드에서 데이터를 병렬 처리하여 부하를 분산
    Hardoop MapReduce가 탑재된 오픈소스 플랫폼
    확장을 위한 병렬 배치 프로세싱 제공
    자유로운 커스터마이징 환경
    장애 극복을 위해 클러스터에 여러 복사본 저장
    데이터 통합 Export MapReduce 결과물을 RDBMS, 하둡 등으로 이전
    Connect SQL 처리를 위한 RDBMS의 하둡 연결
    GUI Hive 스크립트 생성을 위한 GUI(Graphic Usr Interface) 환경 제공
    최적화 병렬 데이터 import / export의 최적화 처리
    통계 분석 R 통계 분석을 위한 프로그래밍 언어
    RDBMS 지원 오라클은 고성능 통계 분석을 위해 R을 지원
    상호 호환성 오라클은 개발된 R 스크립트를 수정 없이 바로 사용하도록 호환성 제공

    전통적 정보 시스템 아키텍처는 구조적 데이터의 논리적 정보를 가진다. 구조적 데이터(정형 데이터)는 RDB에 칼럼 단위로 저장할 수 있는 일정한 길이의 문자열이나 숫자를 말한다.

    빅데이터 아키텍처는 Volume, Velocity, Variety와 Value의 특성이 있는 대용량 데이터를 처리햐야 하므로, NoSQL을 통한 실시간 처리와 MapReduce를 통한 목적에 맞는 데이터 필터링 작업의 배치 처리로 나뉜다.

     

    3. 빅데이터 처리시스템 개발

    빅데이터를 처리하기 위해서는 지금까지의 시스템(흔히 관계형 데이터베이스)과는 다른 형태의 분산환경 시스템들이 필요하다. 빅데이터 시스템은 크게 보면 데이터를 수집해주는 모듈, 수집된 데이터를 저장하고 처리해주는 모듈, 처리된 데이터를 외부에서 접근 가능하도록 해주는 모듈, 이러한 작업들 실행순서 등을 정의하고 관리해주는 워크플로우 모듈, 데이터의 분포 등을 보여주는 시각화(Visualization)모듈 등의 여러가지 컴포넌트들로 구성된다.

    실시간 처리 비교

    구분 CEP(Complex Event Processing) ESP(Event Streaming Processing)
    내용 Complex라는 시간적 혹인 연관 관계가 존재하는 이벤트를 처리하는 방식 CEP보다 훨씬 유동적인 연속 streaming의 흐름을 처리하는 방식
    복합 이벤트의 분석을 통해 패턴에서 중요 정보를 제공 실시간 이벤트 데이터의 빠른 분석을 통해 정보를 제공
    수직적 확장 (Scale-Up) 수평적 확장 (Scale-Out)
    다양한 이벤트 분석이 중요 실시간 분석이 중요

     

     4. 빅데이터 분석시스템 개발

    # 합집합
    union()

    #차집합
    setdiff()

    #교집합
    intersect()

     

    행렬 만들기 (2차원 배열)

    mar2 = matrix(c(1,2,3,4,5,6), nrow = 행 갯수, byrow = 트루:열 먼저 채우기)

     

    행렬 조회

    mat[행, 열]

     

    배열 (3차원 배열)

    array = array(c(1:12), dim=c(2,2,3))

    array

    , , 1

     

    array[1,2,2] (행,열,높이위치)

     

    리스트 (같은 형식의 객체가 아니라도 담을 수 있다)

    구매내역목록 = list(번호=1000, 고객명='홍길도', 상품명='맛동산', 구매일자=as.Date('2018-01-11'), 금액=500)

    데이터프레임

    mem=data.frame( 컬럼명 = 자료 ) 

     

    di = data.frame(
      name = c('일일','이이','삼삼'),
      height=c(167,170,180)
    )
    
    d2 = data.frame(
      name = c('일일','넷넷','삼삼'),
      weight=c(65,75,80)
    )

    데이터프레임 합치기

    merge(mem,mem2)  - 앞 프레임과 공통된 자료만 합친다

     

    merge(mem,mem2, all = T)  - 공통된 자료와 상관없이 합친다

     

    새로운 행과 열 추가하기

    구조가 완벽하게 같은 두 데이터테이블

    kkk=rbind(kkk,aaa)

     

    새로운 컬럼을 추가하기

    aaa = cbind(aaa,ccc)

     

    정형데이터 가져오기

    먼저 파일을 불러오고 저장할 위치를 정해준다

    setwd("c:/Temp")

    그러면 그 폴더의 파일명으로 찾을 수 있다 

    인코딩은 한글깨짐 방지용

    txt1 = readLines("구매후기.txt", encoding="UTF-8")

     

    테이블 형식으로도 불러올 수 있다

    단 header=T를 통해 컬럼명을 정해줘야한다

    그렇지 않으면 컬럼명도 데이터화 된다

    txt2 = read.table("전공.txt", header=T, fileEncoding="UTF-8")

     

    스페이스나 탭으로 분리한게 아닌 특수 기호로 분리한 테이블을 가져올 땐 sep=""을 사용한다

    txt3 = read.table("전공2.txt", header=T, sep=",", fileEncoding="UTF-8")

     

    read.csv는 ',' 구분을 하지 않아도 된다

    txt4 = read.csv("전공2.txt", header=T, fileEncoding="UTF-8")

     

    엑셀 파일을 불러올땐 패키지를 미리 인스톨 적용해준다

    install.packages("readxl")
    library("readxl")
    txt5 <- read_excel("c:/Temp/전공3.xlsx", "Sheet1", na="", col_names=T)

     

    키보드 입력을 받는 방법

    데이터를 모두 받은 후 콘솔에서 엔터 두번이면 끝난다

     

    숫자를 받을 때

    noes <- scan() #숫자받을때

     

    문자나 날짜를 받을 때

    names <- scan(what='') #문자나 날짜받을 때

     

    문장을 받을 때

    lines <-readline()

     

    데이터프레임을 엑셀파일로 저장하는 방법

    일단 패키지가 필요하다

    install.packages("xlsx")
    library("xlsx")
    write.xlsx(데이터프레임 명, "c:/Temp/전공5.xlsx", sheetName="년도정보", col.names=T, row.names=F, append=T)

     

    그래프 등을 저장하는 방법

    par(mar=c(1,1,1,1))
    par("mar")
    
    windows()
    x <- c(1,2,3,4,9,12)
    plot(x) #그래프를 그리는 것
    savePlot("x.jpg", type="jpg") #그린 그래프 이미지로 저장 png도 가능

    사용자 정의 함수 만들기

    my_fun = function(a,b){
      return (a+b) //리턴시킬 값은 반드시 ()로 둘러싸야한다
    }
    my_fun2 = function(a,b){
      a+b
    }

     

    조건문 만들기

    뭘먹을까 <- function(money){
      
      if(money >=10000){
        print("갈비탕 먹고 라떼먹자")
      }else{
        print("김밥먹고 커피믹스 마시자")
      }
      
    }
    뭘먹을까(12000)
    "갈비탕 먹고 라떼먹자"

     

    ifelse 조건문 => 자바의 3항 연산자랑 비슷 (조건)? 참:거짓

    my_fun4 <- function(n){
      return (ifelse (n %% 3 == 0,n^2, 0)) 
    }

     

    if / else if / else

    tail=""
    grade=""
    
    mygrade = function(score){
      if(score >= 90){
        grade = "a"
      }else if(score >= 80){
        grade = "b"
      }else if(score >= 70){
        grade = "c"
      }
      else if(score >= 60){
        grade = "d"
      }else {
        grade = "f"
      }
      
      if(score %% 10 >=5 && score >=60){
        tail ="+"
      }else if (score < 60){
        tail = ""
      }else {
        tail = "0"
      }
      return (paste(grade,tail))
    }

    while 루프문

    hab = function(a,b){
      sum = 0
      n = a
      while (TRUE){
        sum = sum+n
        n = n+1
        if(n == b){
          sum = sum+n
          break
        }else{
          next
        }
      }
      return(sum)
    }
    
    hab(1,100)
    
    결과 5050

    for문

    gugudan = function(a){
      
      #변수 in 반복시작 값: 반복 종료값
      #1:9 1~9까지
      for(i in 1:9){
        cat(a, "*", i, "=", (a*i), "\n")
      }
      
    }
    
    gugudan(99)

    원하는 조건의 행만 출력하기

    filter()

     

    타율이 0.35가 넘는 사람만 출력

    a = filter(data1, 타율>0.35)

    홈럼이 30개 초과, 타점이 홈런이 30개 초과하고 타점이 115점 이상인 선수 (and연산)

    b= filter(data1, 홈런>30 & 타점>=115)

    #홈런이 30개 초화하거나 타점이 115점 이상인 선수 정보(or연산)

    c=filter(data1, 홈런>30 | 타점>=115)

     

    행으로 잘라주는 

    slice()

     

    1~5행만 출력

    slice(data1,1:5)

    1,3,5,6,7 행만 출력

    slice(data1, 1, 3, 5,6,7)

    백터로 묶어서 출력

    slice(data1,c(1,3,5,6,7))

    백터 안에 범위를 정해서 출력

    slice(data1,c(1:5, 11:15, 21))

     

    원하는 컬럼만 출력하는 select

     

    순위, 선수명, 팀명 컬럼만 출력

    d = select(data1, 순위, 선수명, 팀명)

    head를 사용하면 제일 위에 행 부터 지정 범위까지만 출력

    위에서부터 10행 출력

    head(d, 10)

    복합적으로도 쓸 수 있다

    순위, 선수, 팀명 컬럼을 3행까지만 보여줘라

    head(select(data1, 순위, 선수명, 팀명),3)

     

    특정 컬럼만 제외하고 출력

    '-'는 해당 컬럼을 제외하고 출력하라는 뜻

     

    팀명, 홈런, 타점 컬럼은 제외하고 1,3,5,7 행을 출력해라

    slice (select(data1,-팀명, -홈런,-타점),c(1,3,5,7))

    팀명, 홈런, 타점 컬럼은 제외하고 1~5행까지 출력해라

    head(select(data1, -팀명,-홈런,-타점),5)

     

     

    특정 단어로 시작하는 컬럼만 보기

     

    x로 시작하는 컬럼만 보기

    select(data1,starts_with("x"))

    '타'로 끝나는 컬럼만 보이기

    select(data1,ends_with("타"),5)

    #'타'가 들어가는 모든 컬럼 보이기

    head(select(data1, contains("타")),5)

    선수명과 '타'를 포함한 모든 컬럼 보이기

    head(select(data1, 선수명,contains("타")),5)

     

    파이프라인 연산자 사용하기

    명령어 연결하기 %>% 사용해서 연결한다

     

    data1 데이터프레임에서

    선수명, 팀명, 홈럼 컬럼을 선택

    홈런이 20개 이상인 사람

    홈런 갯수를 내림차순으로 정렬

    1~3행까지만 표시한다

    data1 %>%
      select(선수명, 팀명, 홈런) %>%
      filter(홈런>=20) %>%
      arrange(desc(홈런)) %>%
      slice(1:3)

     

    mutate 사용 (새로운 컬럼 추가)

     

    data1 데이터프레임에서

    선수명, 팀명, 홈롬, 타수, 경기수 컬럼 선택

    평균타수 = 조건 컬럼 생성

    홈런을 20이상 친 사람들

    홈런 갯수 내림차순 정렬

    1~5행까지만 출력

    data1 %>%
      select(선수명, 팀명, 홈런,타수,경기수) %>%
      mutate(평균타수 = 타수/경기수) %>%
      filter(홈런>=20) %>%
      arrange(desc(홈런)) %>%
      slice(1:5)

     

     transmute 사용 (명시한 컬럼만 나온다)

     

    data1 데이터프레임에서

    선수명, 팀명, 홈런, 타수, 경기수 컬럼을 선택

    홈런 갯수로 내림차순 정렬

    홈런을 20개 이상 친 사람만

    선수명, 평균타수 컬럼만 출력

    1~5행까지만 출력

    data1 %>%
      select(선수명, 팀명, 홈런,타수,경기수) %>%
      arrange(desc(홈런)) %>%
      filter(홈런>=20) %>%
      transmute(선수명,평균타수 = 타수/경기수) %>%
      slice(1:5)

     

    rename() 함수 - 컬럼이름 바꾸기

    data.frame(name=data1$선수명, team=data1$팀명)

     

    distinct(), unique 함수 - unique한 자료수 카운트 하기

     

    팀명을 중복없이 출력

    distinct(data1,팀명)
    unique(data1$팀명)

     

    중복없이 팀명 갯수를 출력

    nrow(distinct(data1,팀명))
    length(unique(data1$팀명))

     

    자동 샘플 추출하기 (랜덤 추출)

     

    모든 행의 1~3컬럼중 5개의 자료만 추출

    sample_n(data1[,1:3],5)

     

    모든 행의 1~3컬럼중 10% 자료만 랜덤 추출

    sample_frac(data1[,1:3],0.1)

     

    요약정보 만들기 summarise() 함수

    na.rm = T ~NA(null)를 만나면 그 값은 지워라

     

    data1 데이터 프레임 안에서

    타수의 평균 = 평균타수, 득점의 평균 = 평균득점

    표시해라

    summarise(data1,평균타수=mean(타수,na.rm=T),평균득점=mean(득점,na.rm=T))
      평균타수 평균득점
    1 483.8667     85.7

     

    5. 빅데이터 분석결과 시각화 

    빅데이터는 바이오, 소셜, 생산, 금융, 통신 등 많은 분야에서 활용되고 있다.
      특히, 글로벌 기업에서는 이미 빅데이터 사업을 시작하였으며 그 예로, 아마존에서는 소비자들의 소비 패턴을 분석하여 누가 언제 어떤 상품들을 구매할 것인지 예측하여 소비자가 구매 버튼을 클릭하여 배송요청을 하기 이전에 미리 배송준비를 할 수 있는 시스템을 개발하였다.

    구글의 ‘플루 트렌드’ 역시 빅데이터를 활용한 사례이다. 일반적으로 사람들은 감기에 걸리면 병원 약국에 가기 전 독감이나 같은 단어를 검색하는데 구글은 이러한 점에서 생각해서 2008년부터 검색 정보와 위치를 기반하여 미국의 감기바이러스 확산 상황을 알려주는 서비스를 제공 중에 있다.
    즉, 이 시스템은 ‘감기’나 ‘독감’과 같은 검색빈도가 높은 지역을 지도에 표시 함으로써 독감의 확산을 예측할 수 있다. 대부분의 보건 기구는 일주일에 한번만 예상 수치를 업데이트하지만 Google 독감 트렌드는 18개 국가를 대상으로 매일 업데이트되므로 기존의 시스템을 보완한 것이다.

    또한, 패션브랜드인 자라(ZARA)도 빅데이터를 분석하여 활용하고 있다. 자라의 경우 다품종 소량생산을 마케팅 판매 전략으로 삼고 있다. 일반적인 패션 브랜드의 상품 종류에 비해 2배 이상의 종류를 생산한다.
    또한, 오더부터 생산, 매장에 입점할 때까지 단 6주이내로 걸린다. 때문에 수요 예측과 매장 별 재고 산출, 상품별 가격 결정, 운송까지 실시간으로 파악해야 할 필요가 있었고, 이를 위해 MIT연구팀과 연계해 빅데이터를 활용하는 재고관리 시스템을 개발했다.
    빅데이터를 비즈니스에 활용한 국내 기업 중 하나인 SK텔레콤은 SNS, 소셜데이터, 검색키워드를 이용하여 고객, 사회 트렌드 파악 및 기업이미지 파악, 홍보에 자체 개발한 빅데이터 솔루션을 이용하고 있다.
    이를 바탕으로 최근에는 “스마트 아티스트 마케팅” 사업을 본격적으로 시작하였다. 즉 SNS, 키워드를 분석하여 연예인의 활동 방향 및 이미지 분석에 활용할 계획이다. SK텔레콤은 이 외에도 모바일 광고 분석, 소셜데이터 분석 등 다양한 빅데이터 기반의 서비스 모델을 새롭게 개발 중에 있다.

    주요 카드업체들은 소비자의 행동패턴을 분석하여 마케팅에 활용하고 신규상품 개발 및 상품추천에 빅데이터를 활용하고 있다. 한 예로 KB국민카드의 경우, 빅데이터 분석을 통해 카드이용서비스 및 편의성을 제공하고 있다.
    최근 몇 년 동안 카드 이용객의 행동패턴을 분석하여 “혜택가맹점” 앱을 개발하여 고객에서 맛집 추천 및 비슷한 고객의 상점이용 패턴을 제공함으로써 편리하게 정보를 얻을 수 있었다. 또한, 최근에는 “실시간 마케팅시스템”을 개발해서 비즈니스에 적용, 운영하고 있다.
    이 시스템을 통해 고객은 자신의 니즈와 위치에 따라 최적화된 카드혜택 및 맞춤형 정보를 실시간으로 검색하고 받을 수 있다.
    예전에는 무작위 성 마케팅을 했다면 지금은 전략적으로 고객의 상황에 맞게 최적의 시간에, 최적의 상황에, 최적의 혜택을 제공하는 것이 목적이다. 이를 위해 KB국민카드는 정형∙비정형 데이터 분석을 위해 빅데이터를 적극 활용하고 있다.

    엔씨소프트에서도 빅데이터 기반의 고객 데이터 분석 시스템을 구현하고 운영 중에 있다. 불법적으로 다른 사람의 자산을 이용하거나 가져가는 행위를 잡기 위해 오랫동안 연구해 왔고 여기에 빅데이터 기술을 활용하고 있다.
    즉 방대한 고객의 행동 및 사용 로그 데이터를 분석하여 사기 탐지(Fraud detection) 알고리즘을 고도화하여 적용하고 이를 이용하여 불법 행위를 모니터링하고 있다.
    수많은 사람들이 게임을 하고 여기서 엄청난 양의 로그 데이터가 쏟아져 나온다. 많은 양의 비정형 데이터를 실시간으로 분석하고 알람을 표기하는데 빅데이터는 꼭 필요하다. 또한, 고도화된 사기탐지 알고리즘을 개발하기 위해 Data Mining기법 및 기계학습기술을 적극 활용하고 있다.

     

    6. 머신러닝기반데이터분석 

    딥러닝은 인공신경망(neural network)이라는 인공지능분야의 모형이 발전된 형태로서, 계층구조로 이루어진 인공신경망의 내부계층(hidden layer)이 여러 단계로 이루어진 구조이다. 딥러닝에서의 주요 모형은 합성곱신경망(convolutional neural network), 순환신경망(recurrent neural network), 그리고 심층신뢰신경망(deep belief network)의 세가지라고 할 수 있다. 그 중에서 현재 흥미로운 연구가 많이 발표되어서 관심이 집중되고 있는 모형은 지도학습(supervised learning)모형인 처음 두 개의 모형이다. 따라서 본 논문에서는 지도학습모형의 가중치를 최적화하는 기본적인 방법인 오류역전파 알고리즘을 살펴본 뒤에 합성곱신경망과 순환신경망의 구조와 응용사례 등을 살펴보고자 한다. 본문에서 다루지 않은 모형인 심층신뢰신경망은 아직까지는 합성곱신경망 이나 순환신경망보다는 상대적으로 주목을 덜 받고 있다. 그러나 심층신뢰신경망은 CNN이나 RNN과는 달리 비지도학습(unsupervised learning)모형이며, 사람이나 동물은 관찰을 통해서 스스로 학습한다는 점에서 궁극적으로는 비지도학습모형이 더 많이 연구되어야 할 주제가 될 것이다.

    댓글

Designed by Tistory.