객체지향언어와 함수 구조보기
객체지향언어란?
자료나 변수가 객체를 가지는 언어.
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 |
오일러 프로젝트(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 [견우와 직녀]
'그 외' 카테고리의 다른 글
[R] 재미삼아 푸는 문제 (0) | 2020.01.15 |
---|---|
지도 그림 그리기 예제 (0) | 2019.11.11 |
[주식] 키움 영웅문 통한 주식 자료다운로드 (0) | 2019.11.11 |
인공지능, 머신러닝 그리고 데이터마이닝의 차이점 (0) | 2019.07.01 |
git 개념정리 (0) | 2019.03.19 |
파이썬3.7 지뢰찾기
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)
'python' 카테고리의 다른 글
matplotlib 정리(1) (0) | 2020.02.16 |
---|---|
주피터 노트북에 메모리 사용량 모니터링 하기 (0) | 2020.01.24 |
python 회귀분석 할 때 주로 사용할 것 같은 패키지 및 코드 (0) | 2020.01.14 |
power shell 을 활용하여 windows에 jupyter notebook 설치하기 (0) | 2019.06.27 |
selenium, shape file을 활용한 미세먼지 시각화(folium 사용) (0) | 2019.05.09 |
우분투 팀뷰어 끊김 현상
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
(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"
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 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
'ubuntu' 카테고리의 다른 글
파이썬 Selenium linux 환경 구축하기 (ubuntu) (0) | 2019.05.08 |
---|---|
우분투 팀뷰어 끊김 현상 (0) | 2019.03.26 |
NAS 설치(삼바, mysql) (0) | 2019.03.15 |
NEXTCLOUD 설치 (2) | 2019.03.14 |
우분투 아무것도 모르고 따라 할 때 필요한 것들 (0) | 2019.03.14 |
우분투에서 R로 Selenium 사용하기(도커 사용)
우분투에 도커 설치
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()
끗!
'R > Rstudio Server' 카테고리의 다른 글
rstudio server 관리 및 설정 (0) | 2020.01.24 |
---|---|
R 패키지 설치가 안될 때(RCurl, devtools, rvest) 및 Rstudio 서버 사용자 추가 (0) | 2019.03.15 |
ubuntu18.04 r-studio server setup (0) | 2019.03.15 |