기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

리눅스 매뉴얼:IO Redirection

IO Redirection 

sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
# 위 명령은 ls -l 의 결과를 result.txt 파일에 저장하기 위한 것입니다. 
result.txt의 내용을 출력하기 위해  cat을 사용합니다.

sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 40
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 21:20 result.txt
...

sgoing@sgoing-virtual-machine:~$ ls -l
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing  637 10월 14 21:20 result.txt
...즉, 위의 과정은 화면에 출력시키는 결과를 파일에 저장시키는 것으로 이러한 과정을 redirection이라고 합니다. 출력의 방향을 바꾸는 것으로 '>' 기호가 redirection을 의미합니다.
내용1 > 내용2 : 내용1을 내용2의 입력으로 받아 리다이렉션시킵니다. 즉, 파일로 저장합니다.
내용1 < 내용2 : 내용2를 내용1의 입력으로 받는 경우 입니다.
명령: ls  -l
위에서 ls 는 프로그램 또는 프로세스이고 -l은 그 프로그램의 인수로 위의 그림의 command line argument에 해당합니다. 이 프로그램을 실행하면 결과가 모니터에 출력 됩니다. 이 정상적인 결과를 standard output이라고 하며 이 결과를 파일과 같이 다른 방향으로 출력시키기 위한 것을 
redirection입니다. 즉, 위의 명령 
ls -l > result.txt  명령은 부등호 앞에 1이라는 수가 생략된 것으로  ls -l 1> result.txt입니다. 이 명령에서 1은 standard output을 의미합니다. 
위 그림의 standard error는 어떤 명령을 실행할 경우 에러메시지 결과를 의미합니다.
만일 아래와 같이 존재하지 않은 파일을 삭제하는 명령의 결과는 에러 메시지를 나타내지요.
sgoing@sgoing-virtual-machine:~$ rm go.txt
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
에러메시지의 경우 위와 같은 standard output이 아니므로 다음과 같이 파일로 저장되지 않습니다. 
sgoing@sgoing-virtual-machine:~$ rm go.txt > error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
# 즉, 에러메시지의 경우 Standard Error이므로  다음과 같이 파일로 redirection을 실행해야 합니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt 2> error.log
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
sgoing@sgoing-virtual-machine:~$ ls -l
합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing   84 10월 14 22:59 error.log
-rw-r--r--  1 sgoing sgoing  637 10월 14 21:20 result.txt
...다음과 같이 두 가지 명령을 동시에 실행시킬 수 있습니다. 현재 이 디렉토리에 go.txt 파일은 존재하지 않기 때문에 standard output은 없지만 standard error는 존재하므로 result.txt에는 어떠한 내용도 저장되지 않지만 error.log에는 에러메시지가 저장됩니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt > result.txt 2> error.log
sgoing@sgoing-virtual-machine:~$ cat result.txt
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다

- 프로그램이 실행되는 상태를 프로세스라고 합니다.
- 프로그램 cat을 살펴보면 여러파일을 합쳐서 출력합니다. 그러나 cat 다음에 command line argument인 파일(들)을 지정하지 않으면 입력한 정보를 그대로 출력합니다.
 sgoing@sgoing-virtual-machine:~$ cat --help
사용법: cat [<옵션>]... [<파일>]...
FILE(들)을 합쳐서 표준 출력으로 보낸다.
<파일>이 주어지지 않거나 - 이면 표준 입력을 읽습니다.
...
sgoing@sgoing-virtual-machine:~$ cat
data    
data
hello
hello
hi
hi
- 이 과정을 끝내기 위해서는 ctrl+c 키를 눌러 줍니다.
- 위의 cat 다음에 키보드에 의해 입력한 문자등의 data를 standard input이라고 합니다.의 (즉, 명령 또는 프로그램의 인수나 환경변수가 아닌 직접 입력해 주는 객체들을 standard input 이라고 합니다.)
sgoing@sgoing-virtual-machine:~$ cat < error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
위의 경우는 error.log 파일을  cat에 리다이렉트로 전달한 것으로 error.log가  standard input 즉 data가 되어 cat의 결과(standard output)가 됩니다.
동일한 결과를 나타낸 것이지만 아래의 경우에서 error.log는 cat의 command line argument로 전달되어 standard output을 나타낸 것입니다.
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다

다른 예로 why/linus.txt를 살펴보면
sgoing@sgoing-virtual-machine:~$ cd why; ls -l
합계 84
-rw-rw-r-- 1 sgoing sgoing 84785 10월 13 23:27 linux.txt
head 라는 명령어는 문서 처음 행부터 10 행 까지만 나타내는 것으로 옵션으로  '-n숫자'를 전달하면 첫 행부터 지정한 숫자의 행까지만을 나타냅니다.
sgoing@sgoing-virtual-machine:~/why$ head linux.txt
Linux
From Wikipedia, the free encyclopedia
Jump to naviᄉᆍgationJump to search
This article is about the family of operating systems. For the kernel, see Linux kernel. For other uses, see Linux (disambiguation).
Linux
Tux the penguin
Tux the penguin, mascot of Linux[1]
Developer    Community
Linus Torvalds
Written in    Primarily C and assembly
sgoing@sgoing-virtual-machine:~/why$ head -n1 linux.txt #한줄만을 출력합니다.
Linux
위의 경우는 출력하려는 대상 파일을 명령어 head의 명령어 인자(command line input)로 전달한 것입니다. 만약 명령어 인자가 아니라 standard input을 전달하기 위해서는 다음과 같이 redirection 기호를 사용합니다.
 sgoing@sgoing-virtual-machine:~/why$ head -n1 < linux.txt
Linux
위의 명령 : head -n1 < linux.txt
                    명령   인자 < data(standard input)
위 결과를 다른  txt 파일에 저장하기 위해서는 위의 결과를 파일에 redirection시켜 주면 됩니다.
sgoing@sgoing-virtual-machine:~/why$ head -n1 < linux.txt > one.txt
                                                     head -n1 < linux.txt (1):  redirection <-- standard input
                                                    (1) > one.txt: 위의 리다렉션한 결과 --> 파일로 리다이렉션(저장)
결과를 대상파일로 리다이렉션
sgoing@sgoing-virtual-machine:~/why$ cat one.txt
Linux

리다이렉션에 의한 append
- 리다이렉션되는 내용이 어떤 파일에 덮어쓰기가 아니고 일어난 순서대로 첨가를 위해서는 '>>'를 사용합니다. .즉 다음을 볼까요
다음은 디렉토리의 목록을 result 파일에 리다이렉션 할 경우 반복을 해도 같은 내용이 출력됩니다.
그러나 이 경우 result.txt는 동일한 파일 즉, 업그레이드가 되지 않습니다. 그러면 '>>'를 사용하면 어떤 변화가 일어날까요?
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing    0 10월 15 08:37 result.txt
...
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing    0 10월 15 08:38 result.txt
...
'>>' 를 사용하면 원래의 내용에 변화된 부분들이 첨가됩니다. 
sgoing@sgoing-virtual-machine:~$ ls -l >> result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing    0 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing  747 10월 15 08:38 result.txt
...sgoing@sgoing-virtual-machine:~$ ls -l >> result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing    0 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing  747 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r--  1 sgoing sgoing    0 10월 14 23:27 cat
-rw-r--r--  1 sgoing sgoing   84 10월 14 23:03 error.log
-rw-r--r--  1 sgoing sgoing 1494 10월 15 08:44 result.txt
...
 
 

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b