data analysis & visualization

객체지향언어란

R2019. 4. 8. 03:31

객체지향언어란?

자료나 변수가 객체를 가지는 언어.

R에서는 plot이나 print 등 하나의 함수가 입력되는 객체에 따라 다른 결과물을 가져오는데, 객체가 특정 클래스에 속하는 객체를 대상으로 하여 작성된 함수를 method라 하며, method는 객체가 가지는 특성을 설명하는 정보를 뜻한다.

클래스는 주어진 객체가 변수이면 어떤 자료형을 가지는지, 데이터면 어떤 자료구조를 가지는지 등 설명하는 정보를 가진다.


S3, S4의 개념

S언어는 보통 4가지 버전이 존재한다고 하는데 S1~S4로 구별하며, S3와 S4에는 객체지향성의 구현방식에 차이가 존재한다.

S3의 객체지향

S3의 객체지향성의 구현방법은 특정 문자열의 일치 유무이다. 예를들어 선형모형을 lm_fit으로 할당하면 lm_fit의 클래스는 lm으로 지정된다. 이 때 summary(lm_fit)과 같이 summary()라는 일반함수(generic fucntion)을 사용해 객체의 클래스와 맞는 method인 summary.lm()을 찾아 사용한다.

S3의 문제점

S3의 문제점은 사용자가 같은 객체를 생성하였을 때 원하지 않는 결과를 나타낸다. 또한 여러개의 객체를 가지는 경우 전체객체에 대하여 일관되게 작용하지 않을 수 있다는 문제점을 가지고 있다.

이러한 문제점을 개선하기 위해 S4에서는 클래스의 정의와 slot을 사용하고 있다. slot 클래스의 구성요소를 뜻한다. 아래와 같이 class와 slot을 같이 지정하므로, 사용자가 같은 객체를 생성하였을 때도 문제가 되지 않으며, setIs()함수를 통해 클래스들 사이의 관계를 직접 정의할 수 있다.


'R' 카테고리의 다른 글

텍스트마이닝(사회관계망, 워드클라우드)  (0) 2019.06.06
leaflet 지도그리기  (0) 2019.04.09
이미지 벡터화해서 저장하기  (0) 2019.03.21
정규표현식(R)  (3) 2019.03.19
R 기본 플롯 사용하기  (0) 2019.03.19

알고리즘

그 외2019. 4. 8. 03:27

오일러 프로젝트(Project Euler)

수학적인 문제들을 프로그래밍으로 해결하는 퀴즈 풀이 사이트

Synap에서 한글로 번역한 사이트를 제공하고 있다. 본 사이트의 모든 문제가 번역되어 있진 않지만 현재 100여개의 문제가 번역되어 있고 많은 사람들이 사용하고 있다. 자신이 원하는 언어로 문제를 풀고 답만 입력하면 된다. 입력한 답이 정답일 경우 다른 사람들이 문제를 푼 코드들을 볼 수 있다.

(Project Euler @kr : http://euler.synap.co.kr/)

(Project Euler @net : https://projecteuler.net/)

 

알고 스팟(Algospot)

프로그래밍 대회에서 배우는 '알고리즘 문제해결 전략'의 저자 구종만씨가 운영하는 사이트

C, Java, Python, C++, Scala, Javascript, Rust, Haskell, Go등 다양한 언어로 문제 풀이가 가능하며 문제별 채점결과(속도, 크기) 랭킹을 제공해준다. 다양한 알고리즘 대회의 양질의 문제들을 제공해 주고 있다. 알고스팟 캘린더에는 알고리즘 대회 스케쥴을 제공해 주고 있다. 국내 알고리즘 사이트 중에서는 Dovelet과 함께 양강체제를 구축하고 있다. 코딩 테스트를 준비하고 있다면 반드시 풀어봐야 할 사이트.

(Algospot : https://algospot.com/)

 

더블릿(Dovelet)

알고 스팟과 양대산맥을 이루는 알고리즘 트레이닝 사이트

C, Java, Python, C++, Perl로 문제 풀이가 가능하다. 1~30계단, 옥상으로 단계를 구분해서 운영하고 있는데 무료로 1~3계단, 옥상 레벨의 문제를 풀 수가 있다. 정회원이 되려면 소정의 금액을 지불해야 한다. 랭킹 30위 안에 들면 1년 이상 무료로 이용이 가능하다. 코딩 테스트를 준비하고 있다면 반드시 풀어봐야 할 사이트.

(Dobelet : http://59.23.113.171/index.php)

 

코딜리티(Codility)

해외에서 정말 유명한 알고리즘 문제 사이트

문제가 영어로 제공되어 해석의 어려움이 있을 수는 있지만 Web에서 코드를 작성하고 컴파일 결과를 확인할 수 있는 장점이 있다. 코드를 제출하게 되면 시간 복잡도와 공간 복잡도를 서버에서 채점하고 등급을 알려준다. 많은 언어를 제공하며 완성도가 높은 사이트이다. 마찬가지로 코딩 테스트를 준비하고 있다면 반드시 풀어봐야 할 사이트.

(Codility : https://codility.com/)

 

코딩도장

운동 도장에 매일 다니며 수련하는 것 같이 프로그래밍 문제풀이를 통해서 코딩 실력을 수련하자는 목표로 만들어진 사이트

구글, 페이스북등 유명 해외 기업과 국내 유명 기업의 코딩 문제들도 수록되어 있다. 채점은 되지 않지만 풀이를 댓글로 작성할 수 있고 다른 사람들의 풀이도 볼 수 있다.

(코딩도장 : http://codingdojang.com/)



출처: https://ledgku.tistory.com/40?category=669017 [견우와 직녀]

mine
In [ ]:
def mine(): 
    import random 
    board=[[False for x in range(10)]for y in range(10)] 
    for r in range(10): 
        for c in range(10): 
            if( random.random()<0.3): 
                board[r][c]=True 

    board2=[[' ' for x in range(10)]for y in range(10)] 
    #지뢰 개수 출력 
    mine=0 
    for r in range(10): 
        for c in range(10): 
            if(board[r][c]==True): 
                mine=mine+1 
    board2=[[' ' for x in range(10)]for y in range(10)] 
    from IPython.display import clear_output 

    while True: 
        #사용자로부터 좌표 입력받기 
        x=int(input('x 좌표를 입력하시오 : '))-1 
        y=int(input('y좌표를 입력하시오 : '))-1 

        #입력된 예전에 입력되었는지 확인하기 
        if board2[x][y]==False: 
            print('잘못된 위치입니다.') 

            continue 
        else: 
        #입력 된 좌표가 지뢰이면 지뢰위치 출력하고 멈추기 
            if board[x][y]==True: 
                print('지뢰입니다.') 
                for r in range(10): 
                    for c in range(10): 
                        if board[r][c]: 
                            print('# ',end='') 
                        else: 
                            print('. ',end='') 
                    print() 
                break 
        #입력된 자료가 지뢰가 아니면 사용자가 입력했던 위치 출력하기 
            else: 
                board2[x][y]=False 
                clear_output() 
                sum=0 
                for r in range(10): 
                    for c in range(10): 
                        if board2[r][c]: 
                            print('. ',end='') 
                        else: 
                            print('x ',end='') 
                        if board2[r][c]==' ': 
                            sum=sum+1 
                    print() 
                print('지뢰수 :',mine,'남은 셀의 수 :',sum)

openbox설치


sudo apt-get install openbox


openbox --replace


재부팅


reboot


'ubuntu' 카테고리의 다른 글

jupyter-notebook에서 matplotlib 한글폰트 설정  (0) 2020.02.13
파이썬 Selenium linux 환경 구축하기 (ubuntu)  (0) 2019.05.08
주피터 서버 만들기(최종)  (0) 2019.03.25
NAS 설치(삼바, mysql)  (0) 2019.03.15
NEXTCLOUD 설치  (2) 2019.03.14

Nvidia 그래픽카드 드라이버 다운로드


ubuntu-drivers devices

sudo apt install nvidia-driver-390


재부팅

reboot


nvidia-smi


add-apt-repository ppa:graphics-drivers/ppa


sudo apt-get update




cuda 툴킷 9.0 다운로드



(ducj는 제 유저이름입니다.)

cd /home/ducj/다운로드


sudo chmod +x cuda_9.0.176_384.81_linux.run


 ./cuda_9.0.176_384.81_linux.run --override


accept > yes > no > yes > enter > yes > yes > enter


export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"


export CUDA_HOME=/usr/local/cuda


export PATH="$PATH:/usr/local/cuda/bin"


CUDNN 9.0 설치



tar xvzf cudnn-9.0-linux-x64-v7.4.1.5.tgz


sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include


sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64


sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*


cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2



www.anaconda.com에서 파이썬 3.7 다운로드


sudo bash Anaconda3-2018.12-Linux-x86_64.sh

sudo bash Anaconda3-2018.12-Linux-x86_64.sh -u

(난 안되서 sudo bash Anaconda3-2018.12-Linux-x86_64.sh -u 사용)


(yes) 입력


source ~/.bashrc

설치 종료


conda list 로 설치 확인


conda create -n 가상환경이름 python=3.5 anaconda

conda create --prefix /경로/ python=3.5 anaconda

conda env list

conda env remove -n 가상환경이름 --all

source activate 가상환경이름

나중에 해제할 때

conda deactivate 


conda install jupyter notebook

conda install -c conda-forge jupyterlab

conda install -c r r-essentials

conda install -c r rstudio --yes

conda install -c anaconda keras-gpu


tensorflow-gpu 설치


python


from notebook.auth import passwd


passwd()




'sha1:...............'을 출력할 텐데 저장 해두고 조금있다 입력.


 jupyter notebook --generate-config


내부ip 확인하기

sudo apt install net-tools


ifconfig

2번째 줄 inet 옆에 값


주피터 노트북 설정하기


 vi ~/.jupyter/jupyter_notebook_config.py


 c.NotebookApp.ip = '내부ip'


c.NotebookApp.open_browser = False


c.NotebookApp.password = u'sha1:...............'


c.NotebookApp.port=8888


c.NotebookApp.notebook_dir=u'/home/ducj/data'


c=get_config()



주피터 노트북 서버 항상 켜진상태로 두기


sudo jupyter notebook --allow-root 

ctrl+z


bg


disown -h


주피터 노트북 목록보기

sudo jupyter notebook list

주피터노트북 끄기

sudo jupyter notebook stop 8686


gpu 상태 체크

 watch -n 5 nvidia-smi -a --display=utilization




우분투에 도커 설치


sudo curl -fsSL https://get.docker.com/ | sudo sh


docker pull selenium/standalone-chrome



도커에서 셀레늄을 4444~4445 port 열기


sudo docker run -p 4445:4444 selenium/standalone-chrome




이제 R-studio 서버에 접속



library(RSelenium)

library(stringr)

remDr<-remoteDriver(port=4445L,browserName='chrome')

remDr$open()

name=c('대구대','영남대','계명대')

geo_code=function(name,n=3){

  url='https://www.google.com/maps'

  remDr$navigate(url)

  search=NULL

  while(length(search)==0){

    assign('search',remDr$findElement(using='css selector',value='input#searchboxinput.tactile-searchbox-input'))

  }

  data=NULL

  for(i in 1:length(name)){

    search$clearElement()

    search$sendKeysToElement(list(name[i],key='enter'))

    Sys.sleep(n)

lonlat=as.numeric(str_split(substr(remDr$getCurrentUrl()[[1]],

regexpr('@',remDr$getCurrentUrl()[[1]])+1,regexpr(',[0-9]+z',remDr$getCurrentUrl()[[1]])-1),',')[[1]])

    data=rbind(data,data.frame(name=name[i],lat=lonlat[1],lon=lonlat[2]))

  }

  return(data)

}

a=geo_code(name)

remDr$close()




끗!