R에서 연산자 Overloading

이미지
객체지향 프로그램언어는 다음과 같은 특징을 갖고 있다.   1. Encapsulation   2. Information Hiding   3. Abstraction   4. Inheritance   5. Polymorphism 쉽지 않은 개념이라 OOPL을 배우면서 힘들어하는 부분이다. 이 중에서 호불호가 있는 Polymorphism의 연산자 다형성을 간단히 살펴보자. Polymorphism(다형성)이란 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작할 수 있는 기능을 이야기한다. 이러한 다형성은 Overriding과 Overloading으로 구현이 되는데, 먼저 Overriding은 상속받은 함수를 재정의하여 사용할 수 있는 기능을 이야기한다. 그리고 Overloading은 같은 함수나 연산자라도 인수에 따라 다른 기능을 하는 것을 말한다. 예를 들어, 일반적으로 "+" 는 좌우측 Operand를 합하는 연산자지만, 빼거나 곱한 결과를 가져올 수 있게 연산자 Overloading을 할 수 있다. 처음 이야기를 들으면 쓸데없는 기능이라고 생각될 수 있지만, 객체지향을 구현하는 입장에서는 매우 강력한 기능일 수 있다. R 언어에서도 쉽게 연산자 Overloading을 구현할 수 있다.   `%+%` <- function(x, y) { paste0(x, y) } 이렇게 함수를 정의하고,   "대한" %+% "민국" 라고 실행을 하면,   "대한민국" 으로 결과가 나온다. 편리한 연산자 Overloading이지만 절제된 사용이 필요하다. by 윤석용 Ph.D @ 2020.5.26

Systematic Sampling in R

SampleBy in the doBy package that was useful in R is not supported. I have created sample.by systematic sampling function as below. ^^ ## usage : sample.by(data_as_dataframe, number_of_column, ratio_of_sample) ##             returns a list of sample.df and rest.df   sample.by <- function(df, by.col.loc=1, prop=0.1) {   sample.df <- data.frame()   rest.df <- data.frame()   dat <- split(df, df[by.col.loc])   for(i in 1:NROW(dat)) {     idx <- sample(c(rep(1,n<-round(NROW(dat[[i]]) * prop)),                     rep(2,NROW(dat[[i]]) - n)))     sample.df <- rbind(sample.df, dat[[i]][idx==1,])     rest.df  <- rbind(rest.df, dat[[i]][idx==2,])       }  ...

ubuntu server에 GUI 설치

GUI 버전설치 Ubuntu Desktop : sudo apt install ubuntu-desktop KDE : sudo apt install kubuntu-desktop XFCE : sudo apt install xface LXDE : sudo apt install lxde Openbox : sudo apt install openbox 기본프로그램 제외한 최소설치 $ sudo apt install --no-install-recommends ubuntu-desktop

ipython notebook에서 다른 버전의 python 설치

1. Anaconda 5 설치 2. Python 2.7 환경구축     $ conda create -n python27 python=2.7     $ source activate python27     $ conda install notebook ipykernel     $ ipython kernel install --user 3. Python 3.5 환경구축     $ conda create -n python35 python=3.5     $ source activate python35     $ conda install notebook ipykernel     $ ipython kernel install --user 4. $ ipython notebook ./local/share/jupyter/kernels 내 환경변수로 수정가능   

Tensorflow의 SSE관련 에러

새로 컴파일하면 해결되지만...귀차니즘이 발동할때는 아래처럼. ^^ import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf

Remote 서버의 Jupyter Notebook 사용하기

Jupyter Notebook을 이용하여 원격 서버의 Python, R 등을  로컬 PC의 웹브라우저로 접속하는 방법입니다. 1. Remote PC Console $ jupyter notebook --no-browser --ip=192.168.25.1 2. Local PC Web Browser http://192.168.25.1:8888 ** R을 multi kernel로 설정하려면... (상세한 설정은 지난 게시글 참조)     $ sudo apt install libzmq3-dev      > install.packages(c('crayon', 'pbdZMQ', 'devtools'))     > devtools::install_github(paste0('IRkernel/', c('repr', 'IRdisplay', 'IRkernel')))     > IRkernel::installspec()

Python의 Tensorflow 코드를 R로 변환

"First Contact with Tensorflow"의 Regression Python 코드를 R 코드로 되도록이면 1:1로 변경해 보았습니다. Python 코드 import numpy as np num_points = 1000 vectors_set = [] for i in xrange(num_points):   x1= np.random.normal(0.0, 0.55)   y1= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)   vectors_set.append([x1, y1]) x_data = [v[0] for v in vectors_set] y_data = [v[1] for v in vectors_set] import matplotlib.pyplot as plt plt.plot(x_data, y_data, 'ro') plt.legend() plt.show() import tensorflow as tf W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1])) y = W * x_data + b loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for step in xrange(8):   sess.run(train)   print(step, sess.run(W), sess.run(b))   print(step, sess.run(loss))   plt.plot(x_data, y_data, 'ro') ...

R에서 Tensorflow 사용

이미지
CNN, RNN을 이용한 딥러닝을 위하여 Tensorflow를 사용하지만, Data Scientist입장에서는 Python을 배워야 한다는 부담감이(?) 생긴다. (데이터 분석도구로써 추천하는 언어중의 하나가 Python 이지만...ㅎㅎ) 그럼 R에서 Tensorflow를 활용하는 방법을 살펴보자. (설정환경 : Mac 10.12, Python 2.7, Tensorflow 0.11.0 RC0)    1. Python 설정 확인       Python은 설치 및 활용의 편의성을 위하여 Anaconda를 많이 사용하는데, 이 버전은 R과의 Shared Library에 문제로 사용이 어려워....아쉽게도 pass.       (Anaconda는 Python 개발 및 활용에 편리하므로 환경변수에서 PATH만 변경하고, 필요시 $source activate root 를 이용하여 사용하는 것을 추천)    2. Tensorflow 설치       Tensorflow는 PIP, Virtualenv, Anaconda, Docker 등 여러 버전을 지원하고 있으나 Anaconda를 사용하고 있어 추가의 가상환경보다는 OS에 기 설치된 Python을 활용하기 위하여 PIP 버전을 설치. (만약 PIP가 설치되어 있지 않으면 $ sudo easy_install pip)       Python 버전, GPU 사용 여부, OS 등을 확인하고 Tensorflow 설치       $ export TF=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py2-none-any-whl       $ pip install --user --upgrade $TF      ...

Jupiter Notebook 다중커널을 이용한 Python, R, Tensorflow 설치 및 활용

이미지
IPython Notebook을 이용하여 Python 3, Tensorflow 그리고 R을 설치하고 웹브라우져에서 이를 동시에 사용하면서 데이터 분석을 할 수 있는 Multi Kernel 기능을 활용해보자. 먼저 Anaconda를 설치한다. https://www.continuum.io에서 OS와 Python 버전을 확인하고 아나콘다를 설치한다. 아래와 같이 노트북을 실행하면 # jupiter notebook http://localhost:8888로 접속된 웹브라우져가 열리고 기본 설치된 Python 커널을 사용하여 프로그램이 가능하다. 다음으로 Tensorflow을 설치한다. # conda create -n  tensorflow python=2.7 # source activate tensorflow #  (tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0rc0-cp27-none-linux_x86_64.whl # (tensorflow)$ sudo pip install --upgrade $TF_BINARY_URL # (tensorflow)$  conda install ipython # (tensorflow)$ condo install jupiter # source deactivate /usr/local/share/jupyter/kernels/python3 폴더를 tensorflow로 복사하고 kernel.json을 아래와 같이 변경해준다. (커널이 없으면 #  ipython kernelspec install - self -- user) {  "display_name": "tensorflow",  "argv": [   "/Us...

CentOS 7에 R 설치하기

이미지
최근 사용의 편의성때문에 Ubuntu를 클라이언트뿐만 아니라 서버로도 사용하지만 그래도 Redhat 계열의 CentOS를 서버로 사용하는 경우가 더 많다. 그래서 CentOS 7에 R을 설치하는 방법을 간단하게 정리해보면, 먼저 CentOS에서 기본적으로 제공하고 있는 Repository로는 R을 직접 설치하지 못하므로 EPEL(Extra Packages for Enterprise Linux) 저장소를 추가해야한다. # yum install -y epel-release 아래 yum 명령어로 epel 저장소가 추가 되었는지 확인한다. # yum repolist 정상적으로 Repository가 등록되었으면 이제 yum 명령어로 R을 설치한다. # yum update -y # yum install -y R 이제 Console에서 R을 실행할 수 있다. # R

Machine Learning 서버 구축

이미지
학계의 수 십년간의 연구와 세미나보다 알파고의 5번의 대국이 Machine Learning(기계학습) 이란 전문용어를 초등학교 학생들 사이에서도 회자되게 하였으니...그 동안 발전된 기계학습의 기술도 대단하지만 기업의 마케팅과 메스미디어의 영향이 얼마나 큰지 보여주는 일면이기도 하다. 그 동안 Deep Neural Network은 Non-linear Activation 문제, Label되어 있는 Data의 부재, Overfitting과 Back-propagation의 한계, Local minima의 문제 등으로 한계에 도달했었으나 최근에 ReLU, Big Data, Dropout, GPGPU의 활용 등으로 그 활용가능성을 충분히 보여주고 있다.  또한 Caffe, Touch, Theano에 이어 구글이 최근 오픈한 Tensorflow 등의 Deep Learning 프레임워크는 Machine Learning을 만개하는 촉매역할을 충분히 하고 있다. 그럼 Tensorflow와 일반 PC를 이용한 Machine Learning 서버를 구축해보자. 하드웨어는    - CPU : Intel Core i7    - Main Memory : 16 GB    - Graphic Card : GeForce GT 620 CPU는 일반 PC에서 사용하는 8 Core i7 정도면 되지만 RAM은 8~16 GB 정도지만 다다익선이고, 그래픽 카드는 Nvidia 980이상을 추천한다. (타이탄 X면 더욱 좋지만 비싸니 집에 돌아 다니는 GT 620도 그런데로...^^) OS는 CUDA 설치를 위하여 최신의 LTS버전인 Ubuntu 16.04 보다는 14.04.4 버전을 설치한다. 우분투는 http://www.ubuntu.com/download/alternative-downloads 에서 64 bit로 다운로드를 받아 부팅이 가능한 CD나 USB로 Burning하여 설치한다. 우분투 설치는 오래전...

오즈와 오즈비, 왜 사용하지?

로지스틱 회귀분석등 범주형 데이터를 이용한 분석에서 오즈(odds)와 오즈비(odds ratio)라는 용어를 자주 접하게 된다. 어려운 계념이 아니지만 조금 혼란스러워하는 부분이 있어 간단하게 정리를 해본다. 먼저, 오즈는 p/(1-p)로써 실패할 확률대비 성공확률로 (또는 실패 횟수대비 성공횟수) 계산이 된다.    즉 실패대비 성공의 비율을 말한다. 오즈비는 두 방법, 즉 방법 1과 방법 2의 각 오즈의 비율로 계산된다.  {p1/(1-p1)} / {p2/(1-p2)} 이렇게 계산된 오즈비로 성공은 실패대비 방법 1이 몇배 더 효과적인가를 알 수 있다. 그런데 왜 이런 조금은 복잡해(?) 보이는  오즈비를 사용하는가? 그 이유는 예를 들어 방법 1과 방법 2를 적용할때 일반적으로 모집단 크기를 알 수 없고, 단지 표본의 크기를 선택하여 성공과 실패 횟수를 얻을 수 있기때문에 통계처리시 많이 이용하게 된다.  

이제는 빅데이터 전문가(Data Scientist) 개인의 역량이 아닌 조직의 역량이 필요

이미지
국내에 빅데이터가 알려진지도 수년이 훨 넘었고, 공공 및 기업에서도 나름 다수의 프로젝트들이 진행되거나 완료되어 성과를 내고 있다.    그런데 아직도 많은 프로젝트들이 전문가(Data Scientist)의 개인 역량에만 의존하다 보니 중간 산출물과 최종 분석모델 그리고 빅데이터 구현 시스템에 대한 품질 분산이 너무 크고 프로젝트의 성공과 실패를 가늠하기 쉽지 않은게 현실이다. 이제 빅데이터도 Data Scientist 개인역량으로만 좌지우지되는 프로젝트가 되어서는 않된다.   빅데이터 프로젝트를 진행하는 조직의 성숙도가 객관적으로 측정되고 프로젝트의 성패를 예측할 수 있는 완성도 높은 방법론이 필요한 시점이다. 얼마전 한국데이터베이스진흥원에서 진행하고 있는 빅데이터 전문가 양성과정 교육에서 "빅데이터 방법론과 기계학습"을 강의하면서 느낀점은 통계와 R문법, 시각화 도구 사용법과 Hadoop 등 기술에만 치우친 교육보다는 프로젝트를 기획하고 실제로 진행할 수 있는 Path를 알려주는 것도 이제는 빅데이터 교육의 한 섹션으로 자리를 잡아야 할 것 같다는 생각이 들었다.

빅데이터 활성화를 위한 다섯 종류의 데이터와 데이터 거래

기업섹터뿐만 아니라 공공섹터에서도 데이터 분석을 위해서는 외부데이터와의 Mashup이 대단히 중요하고 의미있는 결과를 도출하기 위해서는 필수라고도 말할 수도 있다. 이러한 데이터는 크게 다섯 종류가 있다.    1. 거래정보    2. 위치정보    3. 날씨정보    4. 뉴스정보    5. SNS정보 거래정보는 주로 카드사용이나 금융 • 상품거래와 관련된 데이터이고, 위치정보는 교통 및 이동 등에 대한 데이터로 구성될 수 있으며, 날씨정보는 시계열성의 위치별 다양한 기상 데이터이고, 뉴스와 SNS정보는 뉴스 기사와 인터넷 커뮤니케이션 데이터 등이다. 물론 이 다섯가지 이외에도 더 많은 정보들이 필요할 수 있다. 그러나 개인정보보호법과 데이터 거래에 대한 비즈니스 모델이 아직 명확하게 형성되지 못해 현재 몇몇 자료는 데이터 획득에 어려움을 격고 있어 빅데이터산업 활성화에 지장을 주고 있다. 얼마전 모 지자체에서 위치정보를 활용한 빅데이터 프로젝트가 오픈되었는데, 이 정보를 갖고 있는 대기업과 손을 잡지 못하면 제안도 할 수 없는 이해하기 어려운 헤프닝이 있었다.  물론 그 기업이 갖고 있는 자료도 전체 수집해야 될 모집단의 50%도 못되는 데이터였다. 개인정보보호법을 위반하면서 정보를 오픈하거나 불법 데이터 거래가 되어서는 절대 않되지만, 개인식별이 되지 않도록 변경된 정보는 거래가 될 수 있도록 방안을 찾아야 할 것이고 스타트업을 위해서는 샘플 데이터를 빨리 오픈하는 것이 필요하다고 생각된다. 그러한 관점에서 아래 기사는 시사하는 바가 있다. http://media.daum.net/economic/stock/market/newsview?newsid=20150603204413318

맥에서 여러 버전의 R을 사용하기

데이터 분석을 위한 R은 버전에 따라 패키지 설치나 업데이트가 되지 않는 경우가 있다. 특히 맥에서 seewave, tuneR 등의 멀티미디어 분석용 패키지는 버전을 많이 탄다. 맥에 여러 버전의 R을 설치하고, 필요시 쉽게 버전을 변경할 수 있는 Script를 소개합니다. 1. cran 사이트에서 필요한 버전의 R을 다운받아 설치하면     /Library/Frameworks/R.framwork/Versions 에 버전별로 Directory 생성 2. 같은 Directory에 Current라는 Link파일이 현재 사용중인 R 버전을 Pointing 3. 현재 사용중인 R 버전을 확인하려면 ./getR  버전을 변경하려면 ./setR 버전번호 getR     ls -l /Library/Frameworks/R.framework/Versions setR     RPATH=/Library/Frameworks/R.framework/Versions     ln -sfn $RPATH/$1 $RPATH/Current     ./getR

[데이터사이언티스트를 찾아서] “한국형 빅데이터 찾아야”

[2015.3 컴퓨터월드]  ‘빅데이터’라는 개념이 국내에 알려지고 인구에 회자되기 시작한지도 어느덧 수년이 흘렀다. 미국을 위시한 소프트웨어(SW) 선진국들의 빅데이터 산업이 성장단계에 진입한 사이, 국내 빅데이터 산업은 정체된 채 새로운 기회를 창출하지 못하고 있다는 우려가 일고 있다. 전문인력과 성공사례의 부족은 세간의 부분적으로 왜곡된 인식과 맞물려, 일각에서는 ‘빅데이터는 한물갔다’고 언급되기도 한다. 이 가운데 윤석용 포스코경영연구소 빅데이터TF팀 부장은 “국내 빅데이터 산업의 성공을 위해 ‘한국형 빅데이터’를 찾아야 한다”고 주장한다. 이를 위해 ‘빅데이터 방법론’이라는 새로운 돌파구를 제시하는 그의 이야기에 귀기울여본다. http://m.comworld.co.kr/news/articleView.html?idxno=48706

Raspberry PI에 R을 설치하여 빅데이터 분석

IoT 구현을 위한 플랫품으로 요즘 Open Source Hardware가 많이 이야기되고 있다. 명함 크기만한 라즈베리파이(Raspberry PI) 보드에 빅데이터 분석을 위한 R을 올려보고 싶다는 모순된(?) 생각에서 시작했지만, 빅데이터의 기계학습을 통해 만들어진 모델을 Open Source Hardware에 적용할 수 있는 연결고리를 찾을 수 있어 의미가 있었다. 자, 그럼 Tiny 보드 와 Big 패키지 의 연결을 시작해 봅시다. 1. Raspberry PI 2에 라즈비안을 설치     (이 부분은 별도 포스팅 예정, GPIO를 이용한 재미난(?) 디바이스 컨트롤을 포함하여) 2. 외부에서 CUI로 접속을 위해서는 $ sudo raspi-config 를 실행하여      Advanced Options 메뉴를 선택하여 sshd를 Enable 상태로 설정 3. 외부에서 GUI로 접속하기 위해서는 $ sudo apt-get install tightvncserver 설치후      $ vncserver를 실행 4. 설치된 라즈비안은 데비안의 wheezy 버전이라, R을 설치하면 2.x 버전이 설치됨     $ sudo apt-get install r-base     (라즈비안을 jessie 버전으로 업그레이드하면 R을 3.1.1버전으로 설치 가능) 5. debian과 ubuntu 버전을 참조하여 sources.list를 수정하여 설치해도 에러발생 jessie (vivid, utopic, trusty) wheezy (saucy, raring, quantal, precise, oneiric) squeeze (natty, maverick, lucid)   6. 시간이 좀 걸리지만 R 최신버전의 소스를 다운로드하고 컴파일 $ wget http :// ...

빅데이터 구성에서 분석까지 - ssh key 설치

Big Data Ecosystem & Analysis - Setup SSH KEY Hadoop 서버는 1대로 설치가 가능하지만 보통은 3대 이상으로 구성을 한다. 이렇게 함으로써 HDFS의 특성중의 하나인 서비스의 Availablility를 높일 수 있다. 그리고 Hadoop은 Scale Out 방식으로 시스템을 확장할 수 있기에 실 운영시 많은 서버들이 연결된다. 이렇게 연결된 서버는 Name Node 역할, Data Node 역할, Yarn 지원, 그리고 Hadoop Ecosystem 간의 다양한 프로세스간 통신이 이루어 져야 하는데 이를 ID/Password 방식으로 사용할 수는 없기에 개인Key와 공개Key를 이용한 인증방식인 SSH를 사용하게 된다. 다음은 서버에 ssh를 구성하는 방법을 설명한다. 각 서버에 ssh client와 ssh server를 설치한다. # yum -y install openssh-server openssh-clients 그리고 각 서버에서 sshd 서비스를 시작한다. # chkconfig sshd on # service sshd start 한 대의 서버에서 ssh-keygen을 이용하여 public key와 private key 생성한다. # ssh-keygen -t rsa RSA 암호화 방식으로 생성된 파일은 ~/.ssh 폴더에 다음과 같은 파일이 만들어진다. id_rsa id_rsa.pub 만들어진 public key를 다른 서버에서 사용할 수 있는 파일로 만든다. # cp id_rsa.pub authorized_keys 이렇게 만들어진 3개의 파일을 Hadoop 시스템 각 서버에 복사한다. # scp ~/.ssh/*   user@server:~/.ssh/ 동일한 Key를 갖고 있는 서버들이므로 ssh를 이용하면 ID와 Password 없이 접속이 되는 것을 확인 할 수 있다. 구성시 유의사항    1. 서버관리 및 Hadoop 설정을 위하여...

가트너의 2015년 10대 전략기술

Top 10 Strategic Technology Trends for 2015 가트너에서 발표한 2015년 10대 전략기술은 아래와 같다.  (Orlando, Fla., Oct 8, 2014)   1. Computer Everywhere 2. The Internet of Things 3. 3D Printing 4. Advanced, Pervasive and Invisible Analytics 5. Contect-Rish Systems 6. Smart Machines 7. Cloud/Client Computing 8. Software-Defined Applications and Infrastructure 9. Web-Scale IT 10. Risk-Based Security and Self-Protection 기술 항목을 살펴보면, 전반적으로 Cloud와 IoT가 큰 흐름을 형성하는 것 같다. 또한 Analytics, Smart Machine, Security 등은 Big Data를 아우르는 항목이고 IoT의 Backend에는 Big Data 인프라와 Data Mining을 기본으로 하기에 Big Data는 2015년에도 전략기술에 Base를 형성하고 있다고 해석된다. Gartner Paper

빅데이터 구성에서 분석까지 - 가상머신 설치

Big Data Ecosystem & Analysis - Setup Virtual Machine   빅데이터 분석을 위한 데이터 수집 • 저장 인프라는 RDBMS, ETL, Data Warehouse 등을 서로 연동하여 구성할 수도 있지만 지금의 대세는 Hadoop Ecosystem이 아닌가 생각된다. 그런데 Hadoop은 Apache 오픈 시스템으로 구성되어 있어 복잡도가 매우 높고 설치 및 운영이 쉽지 않아 Hortonworks, MapR, Cloudera 등에서 패키지로 묶어 무료 또는 제품으로 판매하고 있다. 본 연재는 Hadoop 인프라 구성에서부터, 데이터 수집 • 저장, 빅데이터 분석 등 일련의 과정을 실습을 통하여 살펴보려고 한다. 그 첫 주제로 한 대의 PC에 가상머신을 구성하고 Guest OS인 VM을 만들어 복제하는 과정을 살펴본다. 한 대의 PC에서 여러 개의 Hadoop 서버가 운영되기 위해서는 먼저 가상머신을 구성해야 한다. Vmware, Citrix 등 여러 회사의 제품들이 있지만 무료에 성능도 좋은 Oracle의 VirtualBox를 선택하였다. VirtualBox는 Mac, Linux, Windows 등 모든 PC OS에서 구성이 가능하므로  http://www.virtualbox.org/wiki/Downloads 에서 PC에 맞는 최신 버전으로 다운로드하여 설치한다. Guest OS는 Ubuntu, SUSE 등 여러 Linux 패키지가 있으나 서버 OS로 많이 사용되고 있는 Centos를 VM으로 구성한다. Centos는 http://ftp.daum.net/centos/6.5/isos/x86_64 에서 iso 파일로 다운로드 하여 VirtualBox에서 VM으로 구성한다.    VM의 Main Memory와 HDD 등은 PC 환경에 맞게 설정하고 네트워크 Adapter는 인터넷 연결을 위한 NAT용과 VM간 연결을 위한 Host전용 이렇게 2개로 구성한다. C...