<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ming_.log</title>
        <link>https://velog.io/</link>
        <description>╰(⊡-⊡)و✎⮹</description>
        <lastBuildDate>Tue, 19 Oct 2021 08:43:08 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ming_.log</title>
            <url>https://images.velog.io/images/ming_/profile/985eab91-d7f3-48ce-9d46-daec34601125/profileImage.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ming_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ming_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[R프로그래밍] 다중변수 자료]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-48znfdsm</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-48znfdsm</guid>
            <pubDate>Tue, 19 Oct 2021 08:43:08 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-산점도">📌 산점도</h2>
<blockquote>
<ul>
<li>다중변수(또는 다변량 자료) : 변수가 2개 이상인 자료</li>
</ul>
</blockquote>
<ul>
<li>다중변수 자료는 2차원 형태를 나타내며, 매트릭스나 데이터 프레임에 저장하여 분석</li>
<li>산점도란 2개의 변수로 구성된 자료의 분포를 알아보는 그래프</li>
</ul>
<h4 id="✔-두-변수-사이의-산점도">✔ 두 변수 사이의 산점도</h4>
<p>mtcars 데이터셋에서 자동차의 중량(wt)과 연비(mpg) 사이의 관계</p>
<pre><code>&gt; wt &lt;- mtcars$wt #중량 자료
&gt; mpg &lt;- mtcars$mpg #연비 자료
&gt; plot(wt, mpg, #2개의 변수(x축, y축)
+      main=&quot;중량-연비 그래프&quot;, #제목
+      xlab=&quot;중량&quot;, #x축 레이블
+      ylab=&quot;연비(MPG)&quot;, #y축 레이블
+      col=&quot;red&quot;, #point의 color
+      pch=19) #point의 종류</code></pre><p><img src="https://images.velog.io/images/ming_/post/979a47d6-c214-4032-936c-69727c9a5b29/image.png" alt="">
중량이 증가할수록 연비는 감소하는 경향을 확인</p>
<h4 id="✔-여러-변수들-간의-산점도">✔ 여러 변수들 간의 산점도</h4>
<pre><code>&gt; vars &lt;- c(&quot;mpg&quot;,&quot;disp&quot;,&quot;drat&quot;,&quot;wt&quot;) #대상 변수
&gt; target &lt;- mtcars[,vars]
&gt; head(target)
                   mpg disp drat    wt
Mazda RX4         21.0  160 3.90 2.620
Mazda RX4 Wag     21.0  160 3.90 2.875
Datsun 710        22.8  108 3.85 2.320
Hornet 4 Drive    21.4  258 3.08 3.215
Hornet Sportabout 18.7  360 3.15 3.440
Valiant           18.1  225 2.76 3.460
&gt; pairs(target, main=&quot;Multi Plots&quot;) #대상 데이터</code></pre><p><img src="https://images.velog.io/images/ming_/post/308cdabb-15cb-4581-b4f1-f648b6cf6837/image.png" alt=""></p>
<h4 id="✔-그룹-정보가-있는-두-변수의-산점도">✔ 그룹 정보가 있는 두 변수의 산점도</h4>
<blockquote>
<ul>
<li>그룹 정보를 알고 있다면 산점도 작성 시 각 그룹별 관측밧들을 다른 색깔과 점의 모양으로 표시할 수 있음</li>
</ul>
</blockquote>
<ul>
<li>이렇게 작성된 산점도는 두 변수 간의 관계뿐만 아니라 그룹 간의 관계도 파악할 수 있어서 편리</li>
</ul>
<pre><code>&gt; iris.2 &lt;- iris[,3:4] #데이터 준비
&gt; point &lt;- as.numeric(iris$Species) #점의 모양
&gt; point
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [35] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [69] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3
[103] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[137] 3 3 3 3 3 3 3 3 3 3 3 3 3 3

color &lt;- c(&quot;red&quot;,&quot;green&quot;,&quot;blue&quot;) #점의 컬러

&gt; plot(iris.2,
+      main=&quot;iris plot&quot;,
+      pch=c(point),
+      col=color[point])</code></pre><p><img src="https://images.velog.io/images/ming_/post/e05026d0-97a7-40ab-9f0f-b54edeef73bc/image.png" alt=""></p>
<ul>
<li>Petal.Length(꽃잎의 길이)의 길이가 길수록 Petal.Width(꽃잎의 폭)도 커짐</li>
<li>setosa 품종은 다른 두 품종에 비해 꽃잎의 길이와 폭이 확연히 작음</li>
<li>virginica 품종은 다른 두 품종에 비해 꽃잎의 길이와 폭이 제일 큼</li>
</ul>
<h2 id="📌-상관분석">📌 상관분석</h2>
<h4 id="✔-상관분석과-상관계수">✔ 상관분석과 상관계수</h4>
<blockquote>
<ul>
<li>자동차의 중량이 커지면 연비는 감소하는 추세</li>
</ul>
</blockquote>
<ul>
<li>추세의 모양이 선 모양이어서 중량과 연비는 &#39;선형적 관계&#39;에 있다고 표현</li>
<li>선형적 관계라고 해도 강한 선형적 관계가 있고 약한 선형적 관계도 있음</li>
<li>상관분석 : 얼마나 선형성을 보이는지 수치상으로 나타낼 수 있는 방법</li>
<li>피어슨 상관계수</li>
<li>-1&lt;=r&lt;=1</li>
<li>r&gt;0 : 양의 상관관계 (x가 증가하면 y도 증가)</li>
<li>r&lt;0 : 음의 상관관계 (x가 증가하면 y는 감소)</li>
<li>r이 1이나 -1에 가까울수록 x,y의 상관성이 높음</li>
</ul>
<h4 id="✔-r을-이용한-상관계수의-계산">✔ R을 이용한 상관계수의 계산</h4>
<p>음주 정도와 혈중알콜농도가 상관성 조사</p>
<pre><code>&gt; beers &lt;- c(5,2,9,8,3,7,3,5,3,5)
&gt; bal &lt;- c(0.1,0.03,0.19,0.12,0.04,0.0095,0.07,0.06,0.02,0.05)
&gt; tbl &lt;- data.frame(beers,bal) #데이터프레임 생성
&gt; tbl
   beers    bal
1      5 0.1000
2      2 0.0300
3      9 0.1900
4      8 0.1200
5      3 0.0400
6      7 0.0095
7      3 0.0700
8      5 0.0600
9      3 0.0200
10     5 0.0500

&gt; plot(bal~beers, data=tbl) #산점도</code></pre><p><img src="https://images.velog.io/images/ming_/post/728edea7-dd7d-4728-a396-417aafdc6366/image.png" alt=""></p>
<pre><code>&gt; res &lt;- lm(bal~beers, data=tbl) #회귀식 도출
&gt; abline(res) #회귀선 그리기</code></pre><p><img src="https://images.velog.io/images/ming_/post/f83ec262-28d0-480c-8e1d-f2d9c2d148c5/image.png" alt=""></p>
<pre><code>&gt; cor(beers,bal) #상관계수 계산
[1] 0.6797025
</code></pre><pre><code>&gt; cor(iris[,1:4]) #4개 변수 간 상관성 분석
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000</code></pre><h2 id="📌-선그래프">📌 선그래프</h2>
<h4 id="✔-선그래프의-작성">✔ 선그래프의 작성</h4>
<pre><code>&gt; month &lt;- c(1:12)
&gt; late &lt;- c(5,8,7,9,4,6,12,13,8,6,6,4)
&gt; plot(month, #x data
+      late, #y data
+      main=&quot;지각생 통계&quot;, #제목
+      type=&quot;l&quot;, #그래프의 종류 선택
+      lty=1, #선의 종류 선택
+      lwd=1, #선의 굵기 선택
+      xlab=&quot;Month&quot;, #x축 레이블
+      ylab=&quot;Late cnt&quot;) #y축 레이블</code></pre><p><img src="https://images.velog.io/images/ming_/post/22c6b601-b6be-4ffe-915b-b6ff7c23523a/image.png" alt=""></p>
<blockquote>
<ul>
<li>다중변수 자료의 변수 중 하나가 연월일과 같이 시간을 나타내는 값을 갖는 경우 x축을 시간 축으로 하여 선그래프를 그리면 시간의 변화에 따른 자료의 증감 추이를 쉽게 확인할 수 잇음</li>
</ul>
</blockquote>
<ul>
<li>시간의 변화에 따라 자료를 수집한 경우, 이를 시계열 자료라고 함</li>
<li>선그래프는 시계열 자료의 내용을 파악하는 가장 기본적인 방법</li>
</ul>
<h4 id="✔-복수의-선그래프의-작성">✔ 복수의 선그래프의 작성</h4>
<pre><code>&gt; month &lt;- c(1:12)
&gt; late1 &lt;- c(5,8,7,9,4,6,12,13,8,6,6,4)
&gt; late2 &lt;- c(4,6,5,8,7,8,10,11,6,5,7,3)
&gt; plot(month, #x data
+      late1, #y data
+      main=&quot;Late Students&quot;,
+      type=&quot;b&quot;, #그래프의 종류 선택
+      lty=1, #선의 종류 선택
+      col=&quot;red&quot;, #선의 색 선택
+      xlab=&quot;Month&quot;, #x축 레이블
+      ylab=&quot;Late cnt&quot;, #y축 레이블
+      ylim=c(1,15)) #y축 값의 (하한, 상한)

&gt; lines(month, #x data
+       late2, #y data
+       type=&quot;b&quot;, #선의 종류 선택
+       col=&quot;blue&quot;) #선의 색 선택</code></pre><p><img src="https://images.velog.io/images/ming_/post/30d7881e-1b45-461e-b55d-701e7384f90c/image.png" alt=""></p>
<h2 id="📌-자료의-탐색-실습">📌 자료의 탐색 실습</h2>
<h4 id="✔-boston-housing-데이터셋">✔ Boston Housing 데이터셋</h4>
<blockquote>
<ul>
<li>미국 보스턴 지역의 주택 가격 정보와 주택 가격에 미치는 여러 요소들에 대한 정보를 담고 있음</li>
</ul>
</blockquote>
<ul>
<li>총 14개의 변수로 구성되어 있는데, 이중에 5개의 변수만 선택하여 분석</li>
<li>mlbench 패키지에서 제공
crim 지역의 1인당 범죄율
rm 주택 1가구당 방의 개수
dis 보스턴의 5개 직업 센터까지의 거리
tax 재산세율
medv 주택 가격</li>
</ul>
<h4 id="✔-탐색적-데이터-분석-과정">✔ 탐색적 데이터 분석 과정</h4>
<h4 id="분석-대상-데이터셋-준비">분석 대상 데이터셋 준비</h4>
<pre><code>&gt; library(mlbench)
경고메시지(들): 
패키지 ‘mlbench’는 R 버전 4.0.5에서 작성되었습니다 
&gt; data(&quot;BostonHousing&quot;)
&gt; myds &lt;- BostonHousing[,c(&quot;crim&quot;,&quot;rm&quot;,&quot;dis&quot;,&quot;tax&quot;,&quot;medv&quot;)]</code></pre><h4 id="grap-변수-추가">grap 변수 추가</h4>
<ul>
<li>grp는 주택 가격을 상(H), 중(M), 하(L)로 분류한 것으로, 25.0이상이면 상(H), 17.0이하이면 하(L), 나머지를 중(M)으로 분류
```<blockquote>
<p>grp &lt;- c()
for(i in 1:nrow(myds)){ #myds$medv 값에 따라 그룹 분류</p>
</blockquote>
</li>
<li>if(myds$medv[i]&gt;=25.0){</li>
<li>grp[i] &lt;- &quot;H&quot;</li>
<li>} else if (myds$medv[i]&lt;=17.0){</li>
<li>grp[i] &lt;- &quot;L&quot;</li>
<li>} else {</li>
<li>grp[i] &lt;- &quot;M&quot;</li>
<li>}</li>
<li>}<blockquote>
<p>grp &lt;- factor(grp) #문자 벡터를 팩터 타입으로 변경
grp &lt;- factor(grp, levels=c(&quot;H&quot;,&quot;M&quot;,&quot;L&quot;)) #레벨의 순서를 H,L,M -&gt; H,M,L</p>
</blockquote>
</li>
</ul>
<blockquote>
<p>myds &lt;- data.frame(myds, grp) #myds에 grp열 추가</p>
</blockquote>
<pre><code>
#### 데이터셋의 형태와 기본적인 내용 파악</code></pre><blockquote>
<p>str(myds)
&#39;data.frame&#39;:    506 obs. of  6 variables:
 $ crim: num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
 $ rm  : num  6.58 6.42 7.18 7 7.15 ...
 $ dis : num  4.09 4.97 4.97 6.06 6.06 ...
 $ tax : num  296 242 242 222 222 222 311 311 311 311 ...
 $ medv: num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
 $ grp : Factor w/ 3 levels &quot;H&quot;,&quot;M&quot;,&quot;L&quot;: 2 2 1 1 1 1 2 1 3 2 ...</p>
</blockquote>
<blockquote>
<p>head(myds)
     crim    rm    dis tax medv grp
1 0.00632 6.575 4.0900 296 24.0   M
2 0.02731 6.421 4.9671 242 21.6   M
3 0.02729 7.185 4.9671 242 34.7   H
4 0.03237 6.998 6.0622 222 33.4   H
5 0.06905 7.147 6.0622 222 36.2   H
6 0.02985 6.430 6.0622 222 28.7   H</p>
</blockquote>
<blockquote>
<p>table(myds$grp) #주택 가격 그룹별 분포</p>
</blockquote>
<p>  H   M   L 
132 247 127 </p>
<pre><code>
#### 히스토그램에 의한 관측값의 분포 확인</code></pre><blockquote>
<p>par(mfrow=c(2,3)) #2X3 가상화면 분할
for(i in 1:5){</p>
</blockquote>
<ul>
<li>hist(myds[,i], main=colnames(myds)[i],col=&quot;yellow&quot;)</li>
<li>}
```
<img src="https://images.velog.io/images/ming_/post/4a098bdd-5e9f-485f-b2a2-2837ed98f6d8/image.png" alt=""></li>
<li>rm, mdev 변수만 종 모양의 정규분포에 가깝고, crim, dis는 관측 값들이 한쪽으로 쏠려서 분포</li>
<li>tax는 중간에 관측값이 없는 빈구간이 존재하는 특징<pre><code>&gt; par(mfrow=c(1,1)) #2X3 가상화면 분할 해제
</code></pre></li>
</ul>
<pre><code>#### 상자그림에 의한 관측값의 분포 확인</code></pre><blockquote>
<p>par(mfrow=c(2,3))
for(i in 1:5){</p>
</blockquote>
<ul>
<li>boxplot(myds[,i], main=colnames(myds)[i])</li>
<li>}<blockquote>
<p>par(mfrow=c(1,1))</p>
</blockquote>
```
<img src="https://images.velog.io/images/ming_/post/513b3211-4cd1-40ec-aec1-2d32019f56a9/image.png" alt=""></li>
<li>1인당 범죄율(crim)은 관측값들이 좁은 지역에 밀집되어 있음(관측값들의 편차가 매우 작음)</li>
<li>재산세율(tax)은 넓게 퍼져 있는 것 (관측값들의 편차가 비교적 크다)을 확인</li>
</ul>
<h4 id="그룹별-관측값-분포의-확인">그룹별 관측값 분포의 확인</h4>
<pre><code>&gt; boxplot(myds$crim~myds$grp, main=&quot;1인당 범죄율&quot;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/a6e23de9-20c6-4f5c-ac39-bc0ff315dc52/image.png" alt=""></p>
<ul>
<li>주택 가격이 높은 지역이나 중간 지역의 범죄율은 낮고, 주택 가격이 낮은 지역의 범죄율이 높게 나타남</li>
</ul>
<h4 id="그룹별-관측값-분포의-확인-1">그룹별 관측값 분포의 확인</h4>
<pre><code>&gt; boxplot(myds$rm~myds$grp, main=&quot;방의 개수&quot;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/53c7d57d-79f0-4fd0-badc-20d3a0ecbe7b/image.png" alt=""></p>
<ul>
<li>주택 가격이 높으면 방의 개수도 많다는 것을 알 수 있음</li>
<li>주택 가격이 중간인 지역과 하위인 지역의 방의 개수 평균은 큰 차이가 나지 않음</li>
<li>중간 그룹의 방의 개수가 5.2<del>6.8 사이로 비교적 균일한 반면 하위그룹의 방의 개수는 4.5</del>7.2 사이로 넓게 펴져 있는 것을 알 수 있음</li>
</ul>
<h4 id="다중-산점도를-통한-변수-간-상관-관계의-확인">다중 산점도를 통한 변수 간 상관 관계의 확인</h4>
<pre><code>&gt; pairs(myds[,-6])</code></pre><p><img src="https://images.velog.io/images/ming_/post/558076b7-c381-47c9-8db9-4d8b49958ab6/image.png" alt=""></p>
<ul>
<li>medv(주택가격)과 양의 상관성이 있는 변수는 rm(가구당 방의 개수)</li>
<li>crim(1인당 범죄율)은 주택 가격과 음의 상관성이 있는 것으로 보임</li>
</ul>
<h4 id="그룹-정보를-포함한-변수-간-상관-관계의-확인">그룹 정보를 포함한 변수 간 상관 관계의 확인</h4>
<pre><code>&gt; point &lt;- as.integer(myds$grp) #점의 모양 지정
&gt; color &lt;- c(&quot;red&quot;,&quot;green&quot;,&quot;blue&quot;) #점의 색 지정
&gt; pairs(myds[,-6],pch=point, col=color[point])</code></pre><p><img src="https://images.velog.io/images/ming_/post/ef1e61a9-5dc1-4626-aa1e-609c715b175f/image.png" alt=""></p>
<ul>
<li>(crim-medv),(rm-medv),(dis-medvd),(tax-medv) 산점도에서 그룹별로 분포 위치가 뚜렷하게 구분</li>
<li>주택 가격 중간 그룹(녹색점들)은 상위 그룹(빨간색), 하위 그룹(파란색)에 비해 주택 가격의 변동폭이 좁음</li>
</ul>
<h4 id="변수-간-상관계수의-확인">변수 간 상관계수의 확인</h4>
<pre><code>&gt; cor(myds[,-6])
           crim         rm        dis        tax       medv
crim  1.0000000 -0.2192467 -0.3796701  0.5827643 -0.3883046
rm   -0.2192467  1.0000000  0.2052462 -0.2920478  0.6953599
dis  -0.3796701  0.2052462  1.0000000 -0.5344316  0.2499287
tax   0.5827643 -0.2920478 -0.5344316  1.0000000 -0.4685359
medv -0.3883046  0.6953599  0.2499287 -0.4685359  1.0000000</code></pre><h4 id="실습">실습</h4>
<pre><code>## (1) Prepare Data
&gt; library(mlbench)
&gt; data(&quot;BostonHousing&quot;)
&gt; myds &lt;- BostonHousing[,c(&quot;crim&quot;,&quot;rm&quot;,&quot;dis&quot;,&quot;tax&quot;,&quot;medv&quot;)]

## (2) Add new column
&gt; grp &lt;- c()
&gt; for(i in 1:nrow(myds)){ #myds$medv 값에 따라 그룹 분류
+     if(myds$medv[i]&gt;=25.0){
+         grp[i] &lt;- &quot;H&quot;
+     } else if (myds$medv[i]&lt;=17.0) {
+         grp[i] &lt;- &quot;L&quot;
+     } else {
+         grp[i] &lt;- &quot;M&quot;
+     }
+ }
&gt; grp &lt;- factor(grp) #문자벡터를 팩터 타입으로 변경
&gt; grp &lt;- factor(grp, levels=c(&quot;H&quot;,&quot;M&quot;,&quot;L&quot;)) #레벨의 순서를 H,L,M -&gt; H,M,L

&gt; myds &lt;- data.frame(myds, grp) #myds에 grp 칼럼 추가

## (3) Add new column
&gt; str(myds)
&#39;data.frame&#39;:    506 obs. of  6 variables:
 $ crim: num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
 $ rm  : num  6.58 6.42 7.18 7 7.15 ...
 $ dis : num  4.09 4.97 4.97 6.06 6.06 ...
 $ tax : num  296 242 242 222 222 222 311 311 311 311 ...
 $ medv: num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
 $ grp : Factor w/ 3 levels &quot;H&quot;,&quot;M&quot;,&quot;L&quot;: 2 2 1 1 1 1 2 1 3 2 ...

&gt; head(myds)
     crim    rm    dis tax medv grp
1 0.00632 6.575 4.0900 296 24.0   M
2 0.02731 6.421 4.9671 242 21.6   M
3 0.02729 7.185 4.9671 242 34.7   H
4 0.03237 6.998 6.0622 222 33.4   H
5 0.06905 7.147 6.0622 222 36.2   H
6 0.02985 6.430 6.0622 222 28.7   H

&gt; table(myds$grp) #주택 가격 그룹별 분포

  H   M   L 
132 247 127 

## (4) histogram
&gt; par(mfrow=c(2,3)) # 2x3 가상화면 분할
&gt; for(i in 1:5){
+     hist(myds[,i], main=colnames(myds)[i],col=&quot;yellow&quot;)
+ }
&gt; par(mfrow=c(1,1)) # 2x3 가상화면 분할 해제

## (5) boxplot
&gt; par(mfrow=c(2,3))
&gt; for(i in 1:5){
+     boxplot(myds[,i], main=colnames(myds)[i])
+ }
&gt; par(mfrow=c(1,1))

## (6) boxplot by group
&gt; boxplot(myds$crim~myds$grp, main=&quot;1인당 범죄율&quot;)
&gt; boxplot(myds$rm~myds$grp, main=&quot;방의 수&quot;)
&gt; boxplot(myds$dis~myds$grp, main=&quot;직업센터까지의 거리&quot;)
&gt; boxplot(myds$tax~myds$grp, main=&quot;제산세&quot;)

## (7) scatter plot
&gt; pairs(myds[,-6])

## (8) scatter plot with group
&gt; point &lt;- as.integer(myds$grp)
&gt; color &lt;- c(&quot;red&quot;,&quot;green&quot;,&quot;blue&quot;)
&gt; pairs(myds[,-6], pch=point, col=color[point])

## (9) correlation coefficient
&gt; cor(myds[-6])
           crim         rm        dis        tax       medv
crim  1.0000000 -0.2192467 -0.3796701  0.5827643 -0.3883046
rm   -0.2192467  1.0000000  0.2052462 -0.2920478  0.6953599
dis  -0.3796701  0.2052462  1.0000000 -0.5344316  0.2499287
tax   0.5827643 -0.2920478 -0.5344316  1.0000000 -0.4685359
medv -0.3883046  0.6953599  0.2499287 -0.4685359  1.0000000</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[운영체제실무] 동적 메모리 할당 / 임시파일 ]]></title>
            <link>https://velog.io/@ming_/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%8B%A4%EB%AC%B4-%EB%8F%99%EC%A0%81-%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%95%A0%EB%8B%B9-%EC%9E%84%EC%8B%9C%ED%8C%8C%EC%9D%BC</link>
            <guid>https://velog.io/@ming_/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%8B%A4%EB%AC%B4-%EB%8F%99%EC%A0%81-%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%95%A0%EB%8B%B9-%EC%9E%84%EC%8B%9C%ED%8C%8C%EC%9D%BC</guid>
            <pubDate>Mon, 18 Oct 2021 16:33:32 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-동적-메모리-할당">📌 동적 메모리 할당</h2>
<blockquote>
<ul>
<li>프로그램 실행하면서 필요에 따라 데이터를 저장할 수 있는 메모리를 할당</li>
</ul>
</blockquote>
<ul>
<li>동적 메모리 할당/해제<ul>
<li>void*malloc(size_t size)<ul>
<li>size 바이트의 메모리 할당함</li>
<li>메모리 할당이 성공하면 할당한 블록 포인터를 반환하고 실패하면 NULL 포인터를 반환</li>
</ul>
</li>
<li>void free(void *ptr)<ul>
<li>동적으로 할당된 메모리를 반납</li>
</ul>
</li>
<li>void *calloc(size_t nelem, size_t elsize)<ul>
<li>배열과 같이 연속된 elsize의 크기로 nelem개의 동적 메모리 할당</li>
<li>메모리를 모두 0으로 초기화(malloc 함수는 0으로 초기화하지 않음)</li>
</ul>
</li>
<li>void *realloc(void *prt, size_t size)<ul>
<li>매개변수 ptr은 malloc, calloc, realloc 함수에서 리턴한 메모리 영역을 가리키는 포인터</li>
<li>size는 새롭게 추가한 메모리 바이트 수</li>
<li>매개변수 ptr이 가리키는 이전 메모리 영역의 내용을 새롭게 할당한 메모리 영역에 복사</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>✍ 실습</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(int argc, char* argv[]) {
    int i;
    int n;
    int j;
    int* prime_arr;

    if (argc &lt; 2) {
        printf(&quot;prime input\n&quot;);
        exit(0);
    }

    n = atoi(argv[1]);

    prime_arr = (int*)malloc(sizeof(int) * n);

    if (n &lt;= 1) {
        printf(&quot;input great than 2\n&quot;);
        exit(0);
    }

    for (i = 2; i &lt; n; i++)
        prime_arr[i] = 1;

    for (i = 2; i * i &lt;= n; i++) {
        if (prime_arr[i])
            for (j = i * i; j &lt;= n; j += i)
                prime_arr[j] = 0;
    }

    for (i = 2; i &lt;= n; i++)
        if (prime_arr[i])
            printf(&quot;%d &quot;, i);

    printf(&quot;\n&quot;);

    return 0;
}</code></pre><p>✍ 입력</p>
<pre><code>10
</code></pre><p>💻 출력</p>
<pre><code>2 3 5 7 //소수</code></pre><h2 id="📌-임시파일">📌 임시파일</h2>
<blockquote>
<ul>
<li>프로그램이 임시 파일을 만들 때 다른 프로그램이 사용하지 않는 파일명 만듦</li>
</ul>
</blockquote>
<ul>
<li><p>stdlib.h 를 포함</p>
</li>
<li><p>char *mktemp(char *templeate)</p>
<ul>
<li>template는 임시 파일명</li>
<li>파일 이름에는 여섯 개의 x를 포함시킴<ul>
<li>x에는 프로세스 번호와 같은 문자로 채워짐</li>
</ul>
</li>
<li>파일명을 만들지 못하면 빈 문자열을 반환</li>
<li>저수준 입출력 사용시 mkstemp</li>
</ul>
<p>✍ 실습</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
</code></pre></li>
</ul>
<p>int main() {
    char* tempf;
    char* template;
    FILE* fp;</p>
<pre><code>strcpy(template, &quot;./tempXXXXXX&quot;);

tempf = mktemp(template);

if (strlen(tempf) == 0) { //파일을 만들지 못하면
    perror(&quot;cannot make %s&quot;);
    exit(1);
}

fp = fopen(tempf, &quot;w&quot;);
fprintf(fp, &quot;Hello&quot;);</code></pre><p>}</p>
<p>```</p>
<h2 id="📌-문자열-숫자-변환">📌 문자열 숫자 변환</h2>
<blockquote>
<ul>
<li>문자열을 정수로 변환</li>
</ul>
</blockquote>
<ul>
<li>int atoi(const char *str) : str로 입력된 문자열을 정수(int형)로 변환</li>
<li>long atol(const char *str) : str로 입력된 문자열을 정수 (long형)로 변환</li>
<li>double atof(const char *str): str로 입력된 문자열을 실수(double형)로 변환</li>
<li>long strtol(const char <em>str, char *</em>ptr, int base) : str로 입력된 문자열을 정수(long형)로 변환, 단 str이 여러 숫자로 표시된 문자열일 경우 반복하여 숫자로 변환<ul>
<li>str의 문자열을 base로 나온 숫자로 변경함</li>
<li>str이 base와 맞지 않는 숫자가 나오면 무시함</li>
</ul>
</li>
<li>unsigned long strtoul(const char <em>str, char *</em>ptr, int base) : str로 입력된 문자열을 양의 정수(unsinged long형)로 변환</li>
<li>double strtod(const char <em>str, char *</em>prt) : str로 입력된 실수문자열을 실수(double형)로 변환</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[운영체제실무] 문자클래스]]></title>
            <link>https://velog.io/@ming_/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%8B%A4%EB%AC%B4-%EB%AC%B8%EC%9E%90%ED%81%B4%EB%9E%98%EC%8A%A4</link>
            <guid>https://velog.io/@ming_/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%8B%A4%EB%AC%B4-%EB%AC%B8%EC%9E%90%ED%81%B4%EB%9E%98%EC%8A%A4</guid>
            <pubDate>Mon, 18 Oct 2021 16:24:32 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-문자클래스">📌 문자클래스</h2>
<blockquote>
<ul>
<li>문자열 구문 분석시 특정 문자 집합 또는 문자클래수(군)에 포함되는지 검사</li>
</ul>
</blockquote>
<ul>
<li>문자 클래스 멤버 함수<ul>
<li>헤더 ctype.h 포함 필요</li>
<li>문자 클래스 검사<ul>
<li>int isalpha(int c) : 매개변수 c가 문자(Alphabet)인지 아닌지 식별하여 문자이면 1, 아니면 0반환</li>
<li>int isupper(int c) : 매개변수 c가 대문자이면 1, 아니면 0 반환</li>
<li>int islower(int c) : 매개변수 c가 소문자이면 1, 아니면 0 반환</li>
</ul>
</li>
<li>숫자 클래스 검사<ul>
<li>int isdigit(int c) : 매개변수 c가 숫자인지 식별하여 숫자이면 1, 아니면 0 반환</li>
<li>int isxdigit(int c) : 매개변수 c가 16진수(0<del>9, A</del>F, a~f)이면 0이 아닌 값, 아니면 0 반환</li>
</ul>
</li>
<li>문자 &amp; 숫자 클래스 검사<ul>
<li>int isalnum(int c) : 매개변수 c가 문자 또는 숫자이면 0이 아닌 값, 아니면 0 반환</li>
</ul>
</li>
<li>공백/ 구두/ 제어 문자 클래스 검사<ul>
<li>int isspace(int c) : 매개변수 c가 공백문자, 탭, 캐리지 리턴, 개행문자, 수직탭, 폼 피드면 0이 아닌 값을, 그 밖에는 0을 반환</li>
<li>int ispunct(int c) : 매개변수 c가 구두문자이면 0이 아닌 값을, 아니면 0을 반환</li>
<li>int iscntrl(int c) : 매개변수 c가 제어문자(Ascii 0~31)에 해당되면 0이 아닌 값을, 아니면 0을 반환</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>✍ 실습</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;ctype.h&gt;


void outputline(char*);
char* inputline(void);

int main(int argc, char** argv) {
    char* line; //입력받는 문자열
    int al_cnt = 0; //숫자 카운트
    int num_cnt = 0; //문자
    int punct_cnt = 0; //구두점

    while ((line = inputline()) != NULL) { //문자열이 끝날때까지 입력을 받음
        while (*line != NULL) { //문자열이 끝날때까지 읽음 문자 한 자
            if (isalpha(*line)) { //문자이면
                al_cnt++;
            }
            else if (isdigit(*line)) { //숫자이면
                num_cnt++;
            }
            else if (ispunct(*line)) { //구두점이면
                punct_cnt++;
            }
            line++; //그 다음 문자로 포인트 이동
        }
    }
    printf(&quot;alphabet count = %d\n&quot;, al_cnt);
    printf(&quot;number count = %d\n&quot;, num_cnt);
    printf(&quot;punctation count = %d\n&quot;, punct_cnt);
}</code></pre><p>✍ 입력</p>
<pre><code>one
2
three
4
four
5
.
,,,
:;!</code></pre><p>💻 출력</p>
<pre><code>alphabet count = 12
number count = 3
punctation count = 7</code></pre><h2 id="📌-문자-클래스-변경">📌 문자 클래스 변경</h2>
<blockquote>
<ul>
<li>int toupper(int c) : 매개변수 c가 소문자인 경우 대문자로 변경</li>
</ul>
</blockquote>
<ul>
<li>int tolower(int c) : 매개변수 c가 대문자인 경우 소문자로 변경</li>
<li>int toascii(int c) : 매개변수 c 중 8비트를 잘라 asci 문자로 변경</li>
</ul>
<p>✍ 실습</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;ctype.h&gt;

int main(int argc, char** argv) {
    int c;

    while ((c = inputchar()) &gt;= 0) { //문자 하나 읽어서 
        if (isupper(c))
            outputchar(tolower(c)); //대문자면 소문자로
        else if (islower(c))
            outputchar(toupper(c)); //소문자면 대문자로
        else
            outputchar(c); //둘 다 아니면
    }

    exit(0);
}</code></pre><p>✍ 입력</p>
<pre><code>One
twO
three
fouR
Five</code></pre><p>💻 출력</p>
<pre><code>oNE
TWo
THREE
FOUr
fIVE</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[R프로그래밍] 단일변수 자료]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</guid>
            <pubDate>Mon, 18 Oct 2021 15:46:23 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-자료의-종류">📌 자료의 종류</h2>
<h3 id="📖-자료의-특성에-따른-분류">📖 자료의 특성에 따른 분류</h3>
<ul>
<li>범주형자료<br>질적자료     </li>
<li>연속형자료
양적자료</li>
</ul>
<h4 id="✔-범주형-자료">✔ 범주형 자료</h4>
<blockquote>
<ul>
<li>질적자료라고도 부르며, 성별과 같이 범주 또는 그룹으로 구분할 수 있는 값으로 구성된 자료</li>
</ul>
</blockquote>
<ul>
<li>범주형 자료의 값들은 기본적으로 숫자로 표현할 수 없고, 대소 비교나 산술 연산이 적용되지 않음</li>
<li>범주형 자료를 숫자로 표기했다고 해서 계산 가능한 연속형 자료가 되는 것은 아님
ex) 성별 : 0,1
ex) 혈액형 : 1,2,3,4</li>
</ul>
<h4 id="✔-연속형-자료">✔ 연속형 자료</h4>
<blockquote>
<ul>
<li>양적자료라고도 부르며, 크기가 있는 숫자들로 구성된 자료</li>
</ul>
</blockquote>
<ul>
<li>연속형 자료의 값들은 대소 비교가 가능하고, 평균, 최댓값, 최솟값과 같은 산술 연산이 가능</li>
</ul>
<h3 id="📖-변수-개수에-따른-분류">📖 변수 개수에 따른 분류</h3>
<blockquote>
<ul>
<li>단일변수 자료 : 하나의 변수로만 구성된 자료, &#39;일변량 자료&#39;라고도 부름</li>
</ul>
</blockquote>
<ul>
<li>다중변수 자료 :  두 개 이상의 변수로 구성된 자료, 다변량 자료라고도 부름, 두 개의 변수로 구성된 자료를 이변량 자료</li>
<li>단일변수 자료는 벡터에, 다중변수 자료는 매트릭스나 데이터 프레임에 저장하여 분석</li>
<li>매트릭스 또는 데이터 프레임 형태의 자료에서 하나의 열이 하나의 변수를 표현</li>
<li>열이 개수 = 변수의 개수</li>
<li>변수의 개수와 자료의 특성에 따라 세분화된 분류가 가능</li>
</ul>
<p>&lt;변수의 개수와 자료의 특성에 따라 분류&gt;</p>
<ul>
<li><p>단일변수자료
범주형 자료
연속형 자료</p>
</li>
<li><p>다중변수 자료
범주형 자료
연속형 자료</p>
</li>
</ul>
<h2 id="📌-단일변수-범주형-자료의-탐색">📌 단일변수 범주형 자료의 탐색</h2>
<blockquote>
<ul>
<li>단일범수 범주형 자료(일변량 질적 자료) : 특성이 하나이면서 자료의 특성이 범주형인 자료</li>
<li>범주형 자료에 대해서 할 수 있는 기본적인 작업은 자료에 포함된 관측값들의 종류별로 개수를 세는 것</li>
</ul>
</blockquote>
<ul>
<li>개수를 세면 종류별 비율을 알 수 있음</li>
<li>막대그래프나 원그래프 작성 가능</li>
<li>ex) 학생들이 선호하는 계절</li>
</ul>
<h3 id="📖-도수분포표">📖 도수분포표</h3>
<pre><code>&gt; favorite &lt;- c(&#39;winter&#39;, &#39;summer&#39;,&#39;spring&#39;,&#39;summer&#39;,&#39;summer&#39;,
+               &#39;fall&#39;,&#39;fall&#39;,&#39;summer&#39;,&#39;spring&#39;,&#39;spring&#39;)
&gt; favorite
 [1] &quot;winter&quot; &quot;summer&quot; &quot;spring&quot; &quot;summer&quot; &quot;summer&quot; &quot;fall&quot;   &quot;fall&quot;  
 [8] &quot;summer&quot; &quot;spring&quot; &quot;spring&quot;

&gt; table(favorite) #도수분포표 계산
favorite
  fall spring summer winter 
     2      3      4      1 

&gt; table(favorite)/length(favorite) #비율 출력
favorite
  fall spring summer winter 
   0.2    0.3    0.4    0.1 </code></pre><h3 id="📖-막대그래프">📖 막대그래프</h3>
<pre><code>&gt; ds &lt;- table(favorite)
&gt; ds
favorite
  fall spring summer winter 
     2      3      4      1 
&gt; barplot(ds, main=&#39;favorite season&#39;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/0c8f27ef-c4bb-4751-807f-638f6d4d216b/image.png" alt=""></p>
<h3 id="📖-원그래프">📖 원그래프</h3>
<pre><code>&gt; ds &lt;- table(favorite)
&gt; ds
favorite
  fall spring summer winter 
     2      3      4      1 
&gt; pie(ds, main=&#39;favorite season&#39;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/4e9c277b-f89d-4991-823c-4f28ea744024/image.png" alt=""></p>
<h3 id="📖-숫자로-표현된-범주형-자료">📖 숫자로 표현된 범주형 자료</h3>
<blockquote>
<ul>
<li>숫자 형태의 범주형 자료도 도수분포를 계산한 후 막대그래프와 원그래프를 그려서 자료의 내용을 확인
ex) 학생 15명이 선호하는 색깔을 조사한 자료
2,3,2,1,1,2,2,1,3,2,1,3,2,1,2
(1=초록, 2=빨강, 3=파랑)</li>
</ul>
</blockquote>
<pre><code>&gt; favorite.color &lt;- c(2,3,2,1,1,2,2,1,3,2,1,3,2,1,2)
&gt; ds &lt;- table(favorite.color)
&gt; ds
favorite.color
1 2 3 
5 7 3 
&gt; barplot(ds,main=&#39;favorite color&#39;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/89417e0b-6f48-477e-9f3a-88c347a51596/image.png" alt=""></p>
<pre><code>&gt; colors &lt;- c(&#39;green&#39;,&#39;red&#39;,&#39;blue&#39;)
&gt; names(ds) &lt;- colors #자료값 1,2,3을 green, red, blue로 변경
&gt; ds
green   red  blue 
    5     7     3 
&gt; barplot(ds,main=&#39;favorite color&#39;, col=colors) #색 지정 막대그래프</code></pre><p><img src="https://images.velog.io/images/ming_/post/52f4168d-c995-48c0-b033-05870a95ed24/image.png" alt=""></p>
<pre><code>&gt; pie(ds, main=&#39;favorite color&#39;, col=colors)</code></pre><p><img src="https://images.velog.io/images/ming_/post/2d5fc0e2-4a41-49ee-ba39-cabcf26f9b57/image.png" alt=""></p>
<h2 id="📌-단일변수-연속형-자료의-탐색">📌 단일변수 연속형 자료의 탐색</h2>
<h3 id="📖-평균과-중앙값">📖 평균과 중앙값</h3>
<blockquote>
<ul>
<li>연속형 자료는 관측값들이 크기를 가지기 때문에 범주형 자료에 비해 다양한 분석 방법 존재</li>
</ul>
</blockquote>
<ul>
<li>평균, 중앙값 : 전체 데이터를 대표할 수 있는 값</li>
<li>평균</li>
<li>중앙값 : 자료 값들을 크기순으로 일렬로 줄 세웠을 때, 가장 중앙에 위치하는 값</li>
<li>절사평균은 자료의 관측값들 중에서 작은 값들의 하위 n%와 큰 값들의 상위 n%를 제외하고 중간에 있는 나머지 값들만 가지고 평균을 계산</li>
</ul>
<pre><code>&gt; weight &lt;- c(60,62,64,65,68,69)
&gt; weight.heavy &lt;- c(weight,120)
&gt; weight
[1] 60 62 64 65 68 69
&gt; weight.heavy
[1]  60  62  64  65  68  69 120

&gt; mean(weight) #평균
[1] 64.66667
&gt; mean(weight.heavy) #평균
[1] 72.57143

&gt; median(weight) #중앙값
[1] 64.5
&gt; median(weight.heavy) #중앙값
[1] 65

&gt; mean(weight, trim=0.2) #절사평균(상하위 20% 제외)
[1] 64.75
&gt; mean(weight.heavy,trim=0.2) #절사평균(상하위 20% 제외)
[1] 65.6</code></pre><h3 id="📖-사분위수">📖 사분위수</h3>
<blockquote>
<ul>
<li>사분위수란 주어진 자료의 값들을 크기순으로 나열했을 때 이것을 4등분하는 지점에 있는 값들을 의미</li>
</ul>
</blockquote>
<ul>
<li>자료에 있는 값들을 4등분하면 등분점 3개 생기는데, 앞에서부터 &#39;제1사분위수(Q1)&#39;, &#39;제2사분위수(Q2)&#39;, &#39;제3사분위수(Q3)&#39;라고 부르며, 제2사분위수(Q2)는 중앙값과 동일</li>
<li>전체 자료를 4개로 나누었기 때문에 4개의 구간에는 각각 25%의 자료가 존재</li>
</ul>
<p><img src="https://images.velog.io/images/ming_/post/2b74aa0c-96bb-4dd7-8640-69a3ca7405f5/image.png" alt=""></p>
<blockquote>
<p>ex) 100명의 학생을 대상으로 영어시험을 본 결과에 대해 사분위수를 구하였더니
Q1=60, Q2=80, Q3=90이라고 가정하면 →
25명의 학생은 성적이 60점 미만이다. 
25명의 학생은 성적이 60점<del>80점 사이이다. 
25명의 학생은 성적이 80점</del>90점 사이이다. 
25명의 학생은 성적이 90점 이상이다. 
90점 이상인 학생이 25명이나 되기 때문에 이번 영어시험은 매우 쉬웠다.
전체 50%의 학생이 80점 이상의 성적을 받았다.</p>
</blockquote>
<pre><code>&gt; mydata &lt;- c(60,62,64,65,68,69,120)
&gt; quantile(mydata)
   0%   25%   50%   75%  100% 
 60.0  63.0  65.0  68.5 120.0 
&gt; quantile(mydata, (0:10)/10) #10% 단위로 구간을 나누어 계산
   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
 60.0  61.2  62.4  63.6  64.4  65.0  66.8  68.2  68.8  89.4 120.0 
&gt; summary(mydata)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  60.00   63.00   65.00   72.57   68.50  120.00</code></pre><h3 id="📖-산포">📖 산포</h3>
<blockquote>
<ul>
<li>산포란 주어진 자료에 있는 값들이 퍼져 있는 정도(흩어져 있는 정도)</li>
</ul>
</blockquote>
<ul>
<li>산포는 분산과 표준편차를 가지고 파악</li>
<li>자료의 분산과 표준편차가 작다는 의미는 자료의 관측값들이 평균값 부근에 모여 있다는 뜻</li>
</ul>
<pre><code>&gt; mydata &lt;- c(60,62,64,65,68,69,120)

&gt; var(mydata) #분산
[1] 447.2857

&gt; sd(mydata) #표준편차
[1] 21.14913

&gt; range(mydata) #값의 범위
[1]  60 120

&gt; diff(range(mydata)) #최댓값, 최솟값의 차이
[1] 60</code></pre><h3 id="📖-히스토그램">📖 히스토그램</h3>
<ul>
<li>히스토그램은 외관상 막대그래프와 비슷한 그래프로, 연속형 자료의 분포를 시각화할 때 사용</li>
<li>막대그래프를 그리려면 값의 종류별로 개수를 셀 수 있어야 하는데, 키와 몸무게 등의 자료는 값의 종류라는 개념이 없어서 종류별로 개수를 셀 수 없음</li>
<li>연속형 자료에서는 구간을 나누고 구간에 속하는 값들의 개수를 세는 방법을 사용</li>
</ul>
<pre><code>&gt; dist &lt;- cars[,2] #자동차 제동거리
&gt; hist(dist, #자료
+      main=&quot;Histogram for 제동거리&quot;, #제목
+      xlab=&quot;제동거리&quot;, #x축 레이블
+      ylab=&quot;빈도수&quot;, #y축 레이블
+      border=&quot;blue&quot;, #막대 테두리색
+      col=&quot;green&quot;, #막대색
+      las=2, #x축 글씨 방향(0~3)
+      breaks=5) #막대 개수 조절</code></pre><p><img src="https://images.velog.io/images/ming_/post/bc87b283-34b5-47bc-930f-223f1bfbb6e9/image.png" alt=""></p>
<h2 id="-막대그래프와-히스토그램-비교">* 막대그래프와 히스토그램 비교</h2>
<ul>
<li>막대 사이에 간격이 있으면 막대그래프</li>
<li>간격 없이 막대들이 붙어 있으면 히스토그램</li>
<li>막대그래프는 막대의 면적이 의미가 없지만, 히스토그램은 막대의 면적도 의미가 있음</li>
</ul>
<h3 id="📖-상자그림">📖 상자그림</h3>
<blockquote>
<ul>
<li>상자그림은 상자 수염 그림으로도 부르며, 사분위수를 시각화하여 그래프 형태로 나타낸 것</li>
</ul>
</blockquote>
<ul>
<li>하나의 그래프로 데이터의 분포 형태를 포함한 다양한 정보를 전달하기 때문에 단일변수 수치형 자료를 파악하는데 자주 사용</li>
</ul>
<p><img src="https://images.velog.io/images/ming_/post/512836f1-28ea-47be-8cd4-129eff7e857c/image.png" alt=""></p>
<pre><code>&gt; dist &lt;- cars[,2] #자동차 제동거리
&gt; boxplot(dist, main=&quot;자동차 제동거리&quot;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/1a97068c-5781-49ac-b51c-07b41f0a8c04/image.png" alt=""></p>
<pre><code>&gt; boxplot.stats(dist)
$stats
[1]  2 26 36 56 93

$n
[1] 50

$conf
[1] 29.29663 42.70337

$out
[1] 120</code></pre><h3 id="📖-그룹이-있는-자료의-상자그림">📖 그룹이 있는 자료의 상자그림</h3>
<pre><code>&gt; boxplot(Petal.Length~Species, data=iris, main=&quot;품종별 꽃잎의 길이&quot;)</code></pre><p><img src="https://images.velog.io/images/ming_/post/324207de-8349-415e-b75a-9effbb9bedcc/image.png" alt=""></p>
<h3 id="📖-한-화면에-그래프-여러-개-출력하기">📖 한 화면에 그래프 여러 개 출력하기</h3>
<pre><code>&gt; par(mfrow=c(1,3)) #1X3 가상화면 분할
&gt; barplot(table(mtcars$carb),
+         main=&quot;Barplot of Carburetors&quot;,
+         xlab=&quot;#of carburetors&quot;,
+         ylab=&quot;frequency&quot;,
+         col=&quot;blue&quot;)
&gt; barplot(table(mtcars$cyl),
+         main=&quot;Barplot of Cylender&quot;,
+         xlab=&quot;#of cylender&quot;,
+         ylab=&quot;frequency&quot;,
+         col=&quot;red&quot;)
&gt; barplot(table(mtcars$gear),
+         main=&quot;Barplot of Grar&quot;,
+         xlab=&quot;#if gears&quot;,
+         ylab=&quot;frequency&quot;,
+         col=&quot;green&quot;)

par(mfrow=c(1,1)) #가상화면 분할 해제</code></pre><p><img src="https://images.velog.io/images/ming_/post/bf520a5b-6daf-4bec-b522-f95dbafaf1fb/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[R프로그래밍] 조건문, 반복문, 함수 / 데이터 위치 찾기]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%A1%B0%EA%B1%B4%EB%AC%B8-%EB%B0%98%EB%B3%B5%EB%AC%B8-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%A1%B0%EA%B1%B4%EB%AC%B8-%EB%B0%98%EB%B3%B5%EB%AC%B8-%ED%95%A8%EC%88%98</guid>
            <pubDate>Mon, 18 Oct 2021 13:00:50 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-조건문">📌 조건문</h2>
<h3 id="📖-if-else문">📖 if-else문</h3>
<blockquote>
<ul>
<li>조건절에 따라 특정 명령을 실행하도록 하는 프로그래밍 명령문</li>
</ul>
</blockquote>
<ul>
<li>조건에 따라 실행할 명령문을 달리해야 하는 경우 사용</li>
<li>if-else문의 기본 문법<pre><code>if(비교조건){
  조건이 참일 때 실행할 명령문(들)
} else {
  조건이 거짓일 때 실행할 명령문(들)
}</code></pre></li>
</ul>
<h4 id="✔-기본-if-else문">✔ 기본 if-else문</h4>
<pre><code>&gt; job.type &lt;- &#39;A&#39;

&gt; if(job.type==&#39;B&#39;){ 
+     bonus &lt;- 200 #직무 유형이 B일 때 실행
+ } else {
+     bonus &lt;- 100 #직무 유형이 B가 아닌 나머지 경우 실행
+ }

&gt; print(bonus)
[1] 100</code></pre><h4 id="✔-else가-생력된-if문">✔ else가 생력된 if문</h4>
<pre><code>&gt; job.type &lt;- &#39;B&#39;
&gt; bonus &lt;- 100

&gt; if(job.type==&#39;A&#39;){
+     bonus &lt;- 200 #직무 유형이 A일 때 실행
+ }

&gt; print(bonus)
[1] 100</code></pre><h4 id="✔-다중if-else문">✔ 다중if-else문</h4>
<pre><code>&gt; score &lt;- 85

&gt; if(score&gt;90){
+     grade &lt;- &#39;A&#39;
+ } else if(score&gt;80){
+     grade &lt;- &#39;B&#39;
+ } else if(score&gt;70){
+     grade &lt;- &#39;C&#39;
+ } else if (score&gt;60){
+     grade &lt;- &#39;D&#39;
+ } else {
+     grade &lt;- &#39;F&#39;
+ }

&gt; print(grade)
[1] &quot;B&quot;</code></pre><h4 id="✔-조건문에서-논리-연산자의-사용">✔ 조건문에서 논리 연산자의 사용</h4>
<blockquote>
<ul>
<li>if문에 논리 연산자를 사용하면 복잡한 조건문을 서술 가능</li>
</ul>
</blockquote>
<ul>
<li>대표적인 논리연산자는 &amp;(and)와 |(or)</li>
</ul>
<pre><code>&gt; a &lt;- 10
&gt; b &lt;- 20

&gt; if(a&gt;5 &amp; b&gt;5){ #and 사용
+     print(a+b)
+ }
[1] 30

&gt; if(a&gt;5 | b&gt;30){ #or 사용
+     print(a*b)
+ }
[1] 200</code></pre><h3 id="📖-ifelse문">📖 ifelse문</h3>
<blockquote>
<p>조건에 따라 둘 중 하나의 값 또는 변수를 선택할 때 사용</p>
</blockquote>
<pre><code>&gt; a &lt;- 10
&gt; b &lt;- 20
&gt; if(a&gt;b){
+     c &lt;- a
+ } else{
+     c &lt;- b
+ }
&gt; print(c)
[1] 20

&gt; a &lt;- 10
&gt; b &lt;- 20
&gt; c &lt;- ifelse(a&gt;b, a, b)
&gt; print(c)
[1] 20</code></pre><h2 id="📌-반복문">📌 반복문</h2>
<h3 id="📖-for문">📖 for문</h3>
<blockquote>
<ul>
<li>반복문은 정해진 동작을 반복적으로 수행할 때 사용하는 명령문</li>
</ul>
</blockquote>
<ul>
<li>동일 명령문을 여러 번 반복해서 실행할 때 사용<pre><code>for(반복 변수 in 반복 범위) {
  반복할 명령문(들)
}</code></pre></li>
</ul>
<h4 id="✔-기본-for문">✔ 기본 for문</h4>
<pre><code>&gt; for(i in 1:5){
+     print(&#39;*&#39;)
+ }
[1] &quot;*&quot;
[1] &quot;*&quot;
[1] &quot;*&quot;
[1] &quot;*&quot;
[1] &quot;*&quot;</code></pre><h4 id="✔-반복-범위에-따른-반복-변수의-값-변화">✔ 반복 범위에 따른 반복 변수의 값 변화</h4>
<pre><code>&gt; for(i in 6:10){
+     print(i)
+ }
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10</code></pre><h4 id="✔-반복-변수를-이용한-구구단-출력">✔ 반복 변수를 이용한 구구단 출력</h4>
<pre><code>&gt; for(i in 1:9){
+     cat(&#39;2 *&#39;,i,&#39;=&#39;,2*i,&#39;\n&#39;)
+ }
2 * 1 = 2 
2 * 2 = 4 
2 * 3 = 6 
2 * 4 = 8 
2 * 5 = 10 
2 * 6 = 12 
2 * 7 = 14 
2 * 8 = 16 
2 * 9 = 18 </code></pre><h4 id="✔-for문-안에서-if문의-사용">✔ for문 안에서 if문의 사용</h4>
<pre><code>&gt; for(i in 1:20){
+     if(i%%2==0){ #짝수인지 확인
+         print(i)
+     }
+ }
[1] 2
[1] 4
[1] 6
[1] 8
[1] 10
[1] 12
[1] 14
[1] 16
[1] 18
[1] 20</code></pre><h4 id="✔-1100-사이의-숫자-합-출력">✔ 1~100 사이의 숫자 합 출력</h4>
<pre><code>&gt; sum &lt;- 0
&gt; for(i in 1:100){
+     sum &lt;- sum+i
+ }
&gt; print(sum)
[1] 5050</code></pre><h4 id="✔-iris에서-꽃잎의-길이에-따른-분류-작업">✔ iris에서 꽃잎의 길이에 따른 분류 작업</h4>
<pre><code>&gt; norow &lt;- nrow(iris) #iris의 행의 수
&gt; mylabel &lt;- c() #비어있는 벡터 선언
&gt; for(i in 1:norow){
+     if(iris$Petal.Length[i]&lt;=1.6){ #꽃잎의 길이에 따라 레이블 결정
+         mylabel[i] &lt;- &#39;L&#39;
+     } else if(iris$Petal.Length[i]&gt;=5.1){
+         mylabel[i] &lt;- &#39;H&#39;
+     } else{
+         mylabel[i] &lt;- &#39;M&#39;
+     }
+ }
&gt; print(mylabel) #레이블 출력
  [1] &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;M&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot;
 [18] &quot;L&quot; &quot;M&quot; &quot;L&quot; &quot;M&quot; &quot;L&quot; &quot;L&quot; &quot;M&quot; &quot;M&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot;
 [35] &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;M&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;L&quot; &quot;M&quot;
 [52] &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot;
 [69] &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;H&quot; &quot;M&quot;
 [86] &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot;
[103] &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot;
[120] &quot;M&quot; &quot;H&quot; &quot;M&quot; &quot;H&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot; &quot;M&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot;
[137] &quot;H&quot; &quot;H&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot; &quot;M&quot; &quot;H&quot; &quot;H&quot; &quot;H&quot;
&gt; newds &lt;- data.frame(iris$Petal.Length, mylabel) #꽃잎의 길이와 레이블 출력
&gt; head(newds) 
  iris.Petal.Length mylabel
1               1.4       L
2               1.4       L
3               1.3       L
4               1.5       L
5               1.4       L
6               1.7       M</code></pre><h3 id="📖-while문">📖 while문</h3>
<blockquote>
<p>while문은 어떤 조건이 만족하는 동안 코드블록을 수행하고, 해당 조건이 거짓일 경우 반복을 종료하는 명령문</p>
</blockquote>
<pre><code>while(비교조건){
    반복할 명령문(들)
}</code></pre><pre><code>&gt; sum &lt;- 0
&gt; i &lt;- 1
&gt; while(i&lt;=100){
+     sum &lt;- sum+i
+     i &lt;- i+1
+ }
&gt; print(sum)
[1] 5050</code></pre><h3 id="📖-break와-next">📖 break와 next</h3>
<h4 id="✔-break">✔ break</h4>
<pre><code>&gt; sum &lt;- 0
&gt; for(i in 1:10){
+     sum &lt;- sum+i
+     if(i&gt;=5) break
+ }
&gt; sum
[1] 15</code></pre><h4 id="✔-next">✔ next</h4>
<pre><code>&gt; sum &lt;- 0
&gt; for(i in 1:10){
+     if (i%%2==0) next
+     sum &lt;- sum+i
+ }
&gt; sum
[1] 25</code></pre><h2 id="📌-함수">📌 함수</h2>
<h4 id="✔-apply-함수">✔ apply() 함수</h4>
<blockquote>
<ul>
<li>반복 작업이 필요한 경우에는 반복문 적용</li>
</ul>
</blockquote>
<ul>
<li>반복 작업의 대상이 매트릭스나 데이터프레임의 행 또는 열인 경우는 for문이나 while문 대신에 apply() 함수를 이용할 수 있음</li>
</ul>
<blockquote>
<p>apply() 함수의 문법</p>
</blockquote>
<pre><code>apply(데이터셋, 행/열방향 지정, 적용함수)</code></pre><pre><code>&gt; apply(iris[,1:4],1, mean) #row방향으로 함수 적용
  [1] 2.550 2.375 2.350 2.350 2.550 2.850 2.425 2.525 2.225 2.400 2.700
 [12] 2.500 2.325 2.125 2.800 3.000 2.750 2.575 2.875 2.675 2.675 2.675
 [23] 2.350 2.650 2.575 2.450 2.600 2.600 2.550 2.425 2.425 2.675 2.725
 [34] 2.825 2.425 2.400 2.625 2.500 2.225 2.550 2.525 2.100 2.275 2.675
 [45] 2.800 2.375 2.675 2.350 2.675 2.475 4.075 3.900 4.100 3.275 3.850
 [56] 3.575 3.975 2.900 3.850 3.300 2.875 3.650 3.300 3.775 3.350 3.900
 [67] 3.650 3.400 3.600 3.275 3.925 3.550 3.800 3.700 3.725 3.850 3.950
 [78] 4.100 3.725 3.200 3.200 3.150 3.400 3.850 3.600 3.875 4.000 3.575
 [89] 3.500 3.325 3.425 3.775 3.400 2.900 3.450 3.525 3.525 3.675 2.925
[100] 3.475 4.525 3.875 4.525 4.150 4.375 4.825 3.400 4.575 4.200 4.850
[111] 4.200 4.075 4.350 3.800 4.025 4.300 4.200 5.100 4.875 3.675 4.525
[122] 3.825 4.800 3.925 4.450 4.550 3.900 3.950 4.225 4.400 4.550 5.025
[133] 4.250 3.925 3.925 4.775 4.425 4.200 3.900 4.375 4.450 4.350 3.875
[144] 4.550 4.550 4.300 3.925 4.175 4.325 3.950

&gt; apply(iris[,1:4],2,mean) #col 방향으로 함수 적용
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 </code></pre><h4 id="✔-사용자-정의-함수-만들기">✔ 사용자 정의 함수 만들기</h4>
<blockquote>
<ul>
<li>R은 사용자들도 자신만의 함수를 만들어 사용할 수 있는 기능을 제공하는데, 이를 사용자 정의 함수라고 함</li>
</ul>
</blockquote>
<blockquote>
<p>사용자 정의 함수 문법</p>
</blockquote>
<pre><code>함수명 &lt;- function(매개변수 목록){
    실행할 명령문(들)
    return(함수의 실행 결과)
]</code></pre><pre><code>&gt; mymax &lt;- function(x,y){
+     num.max &lt;- x
+     if(y&gt;x){
+         num.max &lt;- y
+     }
+     return(num.max)
+ }</code></pre><h4 id="✔-만든-사용자-정의-함수-사용하기">✔ 만든 사용자 정의 함수 사용하기</h4>
<pre><code>&gt; mymax(10,15)
[1] 15

&gt; a &lt;- mymax(20,15)
&gt; b &lt;- mymax(31,45)
&gt; print(a+b)
[1] 65</code></pre><h4 id="✔-사용자-정의-함수의-매개변수에-초기값-설정하기">✔ 사용자 정의 함수의 매개변수에 초기값 설정하기</h4>
<pre><code>&gt; mydiv &lt;- function(x,y=2){
+     result &lt;- x/y
+     return(result)
+ }

&gt; mydiv(x=10,y=3) #매개변수 이름과 매개변수값을 쌍으로 입력
[1] 3.333333
&gt; mydiv(10,3) #매개변수값만 입력
[1] 3.333333

&gt; mydiv(10) #x에 대한 값만 입력 (y값이 생략됨)
[1] 5</code></pre><h4 id="✔-함수가-반환하는-결과값이-여러-개일-때의-처리">✔ 함수가 반환하는 결과값이 여러 개일 때의 처리</h4>
<pre><code>&gt; myfunc &lt;- function(x,y){
+     val.sum &lt;- x+y
+     val.mul &lt;- x*y
+     return(list(sum=val.sum, mul=val.mul))
+ }

&gt; result &lt;- myfunc(5,8)
&gt; s &lt;- result$sum
&gt; m &lt;- result$mul
&gt; cat(&#39;5+8=&#39;,s,&#39;\n&#39;)
5+8= 13 
&gt; cat(&#39;5*8=&#39;,m,&#39;\n&#39;)
5*8= 40</code></pre><h4 id="✔-사용자-정의-함수의-저장-및-호출">✔ 사용자 정의 함수의 저장 및 호출</h4>
<pre><code>&gt; setwd(&quot;c:/source&quot;)
&gt; source(&quot;myfunc.R&quot;)

&gt; a &lt;- mydiv(20,4)
&gt; b &lt;- mydiv(30,4)

&gt; a+b
[1] 12.5
&gt; mydiv(mydiv(20,2),5)
[1] 2</code></pre><h2 id="📌-조건에-맞는-데이터의-위치-찾기">📌 조건에 맞는 데이터의 위치 찾기</h2>
<blockquote>
<ul>
<li>데이터 분석을 하다보면 자신이 원하는 데이터가 벡터나 매트릭스, 데이터프레임 안에서 어디에 위치하고 있는지를 알기 원하는 때가 있음</li>
</ul>
</blockquote>
<ul>
<li>예를 들어, 50명의 학생 성적이 저장된 벡터가 있는데 가장 성적이 좋은 학생은 몇 번째에 있는지를 알고 싶은 경우</li>
<li>이런 경우 편리하게 사용할 수 있는 함수가 which(), which.max(), which.min()함수</li>
</ul>
<pre><code>&gt; score &lt;- c(76,84,69,50,95,60,82,71,88,84)
&gt; which(score==69) #성적이 69인 학생은 몇 번째에 있나
[1] 3

&gt; which(score&gt;=85) #성적이 85 이상인 학생은 몇 번째에 있나
[1] 5 9

&gt; max(score) #최고 점수는 몇 점인가
[1] 95
&gt; which.max(score) #최고 점수는 몇 번째에 있나
[1] 5

&gt; min(score) #최저 점수는 몇 점인가
[1] 50
&gt; which.min(score) #최저 점수는 몇 번째에 있나
[1] 4
</code></pre><pre><code>&gt; score &lt;- c(76,84,69,50,95,60,82,71,88,84)
&gt; idx &lt;- which(score&lt;=60) #성적이 60이하인 값들의 인덱스
&gt; score[idx] &lt;- 61 #성적이 60 이하인 값들은 61점으로 성점 상향 조정
&gt; score
 [1] 76 84 69 61 95 61 82 71 88 84

&gt; idx &lt;- which(score&gt;=80) #성적이 80이상인 값들의 인덱스
&gt; score.high &lt;- score[idx] #성적이 80 이상인 값들만 추출하여 저장
&gt; score.high
[1] 84 95 82 88 84</code></pre><pre><code>&gt; idx &lt;- which(iris$Petal.Length&gt;5.0) #꽃잎의 길이가 5.0 이상인 값들의 인덱스
&gt; idx
 [1]  84 101 102 103 104 105 106 108 109 110 111 112 113 115 116 117 118
[18] 119 121 123 125 126 129 130 131 132 133 134 135 136 137 138 140 141
[35] 142 143 144 145 146 148 149 150

&gt; iris.big &lt;- iris[idx,] #인덱스에 해당하는 값만 추출하여 저장</code></pre><pre><code>#1~4열의 값 중 5보다 큰 값의 행과 열의 위치
&gt; idx &lt;- which(iris[,1:4]&gt;5.0, arr.ind=TRUE)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[R프로그래밍] 파일데이터 읽기/쓰기]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%8C%EC%9D%BC%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BD%EA%B8%B0%EC%93%B0%EA%B8%B0</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%8C%EC%9D%BC%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BD%EA%B8%B0%EC%93%B0%EA%B8%B0</guid>
            <pubDate>Mon, 18 Oct 2021 02:21:43 GMT</pubDate>
            <description><![CDATA[<h4 id="✔-파일-형식-변환">✔ 파일 형식 변환</h4>
<blockquote>
<ul>
<li>엑셀 파일에 테이블 형태의 데이터가 저장되어 있는 경우를 가정</li>
</ul>
</blockquote>
<ul>
<li>엑셀 파일을 .csv 형태로 변환하여 저장 후 R에서 .csv 파일을 읽음</li>
<li>읽어온 파일은 데이터 프레임 형태로 저장됨</li>
</ul>
<h4 id="✔-파일-데이터-읽기">✔ 파일 데이터 읽기</h4>
<pre><code>setwd(&quot;D:/source&quot;) #작업 폴더 지정

air &lt;- read.csv(&quot;airquality.csv&quot;, header=T) #.csv 파일 읽기</code></pre><h4 id="✔-파일-데이터-쓰기">✔ 파일 데이터 쓰기</h4>
<pre><code>setwd(&quot;D:/source&quot;) #작업 폴더 지정

my.iris &lt;- subset(iris, Species=&#39;Setosa&#39;) #Setosa 품종 데이터만 추출

write.csv(my.iris, &quot;my_iris.csv&quot;, row.names=T) #.csv 파일에 저장하기</code></pre><blockquote>
<ul>
<li>my.iris
저장할 데이터가 들어 있는 곳이 my.iris</li>
</ul>
</blockquote>
<ul>
<li>&quot;my_iris.csv&quot;
저장할 파일의 이름을 지정</li>
<li>row.names=F
my.iris를 저장할 때 행 번호를 붙이지 말라는 의미</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[R프로그래밍] 매트릭스, 데이터프레임]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%A7%A4%ED%8A%B8%EB%A6%AD%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%94%84%EB%A0%88%EC%9E%84</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%A7%A4%ED%8A%B8%EB%A6%AD%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%94%84%EB%A0%88%EC%9E%84</guid>
            <pubDate>Mon, 18 Oct 2021 02:09:18 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-매트릭스">📌 매트릭스</h2>
<blockquote>
<p>1차원 데이터 : &#39;몸무게&#39; 같은 단일 주제의 데이터는 벡터
2차원 데이터 : &#39;키&#39;,&#39;몸무게&#39;,&#39;나이&#39;와 같은 여러 주제의 데이터는 매트릭스, 데이터 프레임</p>
</blockquote>
<blockquote>
<p>매트릭스 : 데이터 테이블의 모든 셀의 값들이 동일한 자료형
데이터 
데이터 프레임 : 자료형이 다른 칼럼들로 구성</p>
</blockquote>
<h3 id="📖-매트릭스에서의-값-추출">📖 매트릭스에서의 값 추출</h3>
<h4 id="✔-기본적인-매트릭스-만들기">✔ 기본적인 매트릭스 만들기</h4>
<blockquote>
<p>2차원 테이블 형태의 자료구조로, 매트릭스의 모든 셀에 저장되는 값은 동일한 자료형 이어야함</p>
</blockquote>
<pre><code>&gt; z &lt;- matrix(1:20, nrow=4, ncol=5) //nrow:행의 수, ncol:열의 수
&gt; z
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20</code></pre><h4 id="✔-매트릭스에-저장될-값들을-행-방향으로-채우기">✔ 매트릭스에 저장될 값들을 행 방향으로 채우기</h4>
<pre><code>&gt; z2 &lt;- matrix(1:20, nrow=4, ncol=5, byrow=T)
&gt; z2
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20</code></pre><h4 id="✔-기존-매트릭스에-벡터를-추가하여-새로운-매트릭스-만들기">✔ 기존 매트릭스에 벡터를 추가하여 새로운 매트릭스 만들기</h4>
<pre><code>&gt; x &lt;- 1:4 #벡터 x 생성
&gt; y &lt;- 5:8 #벡터 y 생성
&gt; z &lt;- matrix(1:20, nrow=4, ncol=5) #매트릭스 z 생성

&gt; m1 &lt;- cbind(x,y) #x와 y를 열 방향으로 결합하여 매트릭스 생성
&gt; m1
     x y
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8

&gt; m2 &lt;- rbind(x,y) #x와 y를 행 방향으로 결합하여 매트릭스 생성
&gt; m2
  [,1] [,2] [,3] [,4]
x    1    2    3    4
y    5    6    7    8

&gt; m3 &lt;- rbind(m2,x) #매트릭스 m2와 벡터 x를 행 방향으로 결합
&gt; m3
  [,1] [,2] [,3] [,4]
x    1    2    3    4
y    5    6    7    8
x    1    2    3    4

&gt; m4 &lt;- cbind(z,x) #매트릭스 z와 벡터 x를 열 방향으로 결합
&gt; m4
                  x
[1,] 1 5  9 13 17 1
[2,] 2 6 10 14 18 2
[3,] 3 7 11 15 19 3
[4,] 4 8 12 16 20 4</code></pre><h3 id="📖-매트릭스에서의-값-추출-1">📖 매트릭스에서의 값 추출</h3>
<h4 id="✔-인덱스값을-이용하여-매트릭스에서의-값-추출하기">✔ 인덱스값을 이용하여 매트릭스에서의 값 추출하기</h4>
<blockquote>
<p>매트릭스에서 특정 위치에 있는 값을 추출하는 방법은 벡터와 유사
값들의 위치를 나타내는 인덱스를 사용하는데, 2차원상에서 위치를 지정하려면 2개 필요</p>
</blockquote>
<pre><code>&gt; z &lt;- matrix(1:20, nrow=4, ncol=5) 
&gt; z
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

&gt; z[2,3] #2행 3열에 있는 값
[1] 10

&gt; z[1,4] #1행 4열에 있는 값
[1] 13

&gt; z[2,] #2행에 있는 모든 값
[1]  2  6 10 14 18

&gt; z[,4] #4열에 있는 모든 값
[1] 13 14 15 16</code></pre><h4 id="✔-매드릭스에서-여러-개의-값을-동시에-추출하기">✔ 매드릭스에서 여러 개의 값을 동시에 추출하기</h4>
<pre><code>&gt; z &lt;- matrix(1:20, nrow=4, ncol=5)
&gt; z
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

&gt; z[2,1:3] #2행의 값 중 1~3열에 있는 값
[1]  2  6 10

&gt; z[1,c(1,2,4)] #1행의 값 중 1,2,4열에 있는 값
[1]  1  5 13

&gt; z[1:2,] #1,2행에 있는 모든 값
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18

&gt; z[,c(1,4)] #1,4열에 있는 모든 값
     [,1] [,2]
[1,]    1   13
[2,]    2   14
[3,]    3   15
[4,]    4   16</code></pre><h3 id="📖-매트릭스의-행과-열에-이름-지정">📖 매트릭스의 행과 열에 이름 지정</h3>
<h4 id="✔-매트릭스의-행과-열에-이름-지정하는-법">✔ 매트릭스의 행과 열에 이름 지정하는 법</h4>
<pre><code>&gt; score &lt;- matrix(c(90,85,69,78,
+                   85,96,49,95,
+                   90,80,70,60),
+                 nrow=4, ncol=3)
&gt; score
     [,1] [,2] [,3]
[1,]   90   85   90
[2,]   85   96   80
[3,]   69   49   70
[4,]   78   95   60

&gt; rownames(score) &lt;- c(&#39;john&#39;,&#39;tom&#39;,&#39;mark&#39;,&#39;jane&#39;) #행 이름

&gt; colnames(score) &lt;- c(&#39;english&#39;,&#39;math&#39;,&#39;science&#39;) #열 이름

&gt; score
     english math science
john      90   85      90
tom       85   96      80
mark      69   49      70
jane      78   95      60</code></pre><h4 id="✔-행과-열에-지정한-이름을-이용하여-매트릭스-값-추출하기">✔ 행과 열에 지정한 이름을 이용하여 매트릭스 값 추출하기</h4>
<pre><code>&gt; score[&#39;john&#39;,&#39;math&#39;] #john의 수학 성적
[1] 85

&gt; score[&#39;tom&#39;,c(&#39;math&#39;,&#39;science&#39;)] #tom의 수학, 과학 성적
   math science 
     96      80 

&gt; score[&#39;mark&#39;,] #mark의 모든 과목 성적
english    math science 
     69      49      70 

&gt; score[,&#39;english&#39;] #모든 학생의 영어 성적
john  tom mark jane 
  90   85   69   78 

&gt; rownames(score) #score의 행 이름
[1] &quot;john&quot; &quot;tom&quot;  &quot;mark&quot; &quot;jane&quot;

&gt; colnames(score) #score의 열 이름
[1] &quot;english&quot; &quot;math&quot;    &quot;science&quot;

&gt; colnames(score)[2] #score의 열 이름 중 두 번째 값
[1] &quot;math&quot;</code></pre><h2 id="📌-데이터프레임">📌 데이터프레임</h2>
<blockquote>
<ul>
<li>숫자형 벡터, 문자형 벡터 등 서로 다른 형태의 데이터를 2차원 데이터 테이블 형태로 묶을 수 있는 자료구조</li>
</ul>
</blockquote>
<ul>
<li>외관상으로는 매트릭스와 차이가 없지만 매트릭스에 저장되는 모든 값들이 동일한 자료형인 것과는 달리 데이터 프레임에는 서로 다른 자료형의 값들이 함께 저장
ex) &#39;키&#39;,&#39;몸무게&#39;,&#39;성별&#39;의 데이터</li>
</ul>
<h4 id="✔-데이터-프레임-만들기">✔ 데이터 프레임 만들기</h4>
<pre><code>&gt; city &lt;- c(&quot;seoul&quot;,&quot;tokyo&quot;,&quot;washington&quot;) #문자로 이루어진 벡터
&gt; rank &lt;- c(1,3,2) #숫자로 이루어진 벡터

&gt; city.info &lt;- data.frame(city, rank) #데이터 프레임 생성
&gt; city.info
        city rank
1      seoul    1
2      tokyo    3
3 washington    2</code></pre><h4 id="✔-iris-데이터셋">✔ iris 데이터셋</h4>
<blockquote>
<ul>
<li>R에서 제공하는 실습용 데이터셋중의 하나로 데이터 프레임으로 되어 있음</li>
</ul>
</blockquote>
<ul>
<li>150그루의 붓꽃에 대해 4개 분야의 측정 데이터와 품종 정보를 결합하여 만든 데이터셋</li>
</ul>
<blockquote>
<p>Sepal.Length : 꽃받침의 길이 (숫자형)
Sepal.Width : 꽃받침의 폭 (숫자형)
Petal.Length : 꽃잎의 길이 (숫자형)
Petal.Width : 꽃잎의 폭 (숫자형)
Species : 붓꽃의 품종 (문자형(팩터))</p>
</blockquote>
<pre><code>iris[,c(1:2)] #1,2열의 모든 데이터

iris[,c(1,3,5)] #1,3,5열의 모든 데이터

iris[,c(&quot;Sepal.Length&quot;,&quot;Species&quot;)] #1,5열의 모든 데이터

iris[1:5,] #1~5행의 모든 데이터

iris[1:5,c(1,3)] #1~5행의 데이터 중 1,3열의 데이터

</code></pre><h2 id="📌-매트릭스와-데이터프레임">📌 매트릭스와 데이터프레임</h2>
<h3 id="📖-데이터셋의-기본-정보-확인">📖 데이터셋의 기본 정보 확인</h3>
<h4 id="✔-iris-데이터셋의-기본-내용-확인">✔ iris 데이터셋의 기본 내용 확인</h4>
<blockquote>
<ul>
<li>매트릭스와 데이터 프레임은 모두 2차원 형태의 데이터를 저장하는 자료구조이기 때문에 다루는 방법이 대부분 동일</li>
</ul>
</blockquote>
<ul>
<li>데이터 프레임인 iris 데이터셋을 대상으로 학습하지만, 매트릭스에도 동일하게 적용</li>
</ul>
<pre><code>&gt; dim(iris) #행과 열의 개수 출력
[1] 150   5

&gt; nrow(iris) #행의 개수 출력
[1] 150

&gt; ncol(iris) #열의 개수 출력
[1] 5

&gt; colnames(iris) #열 이름 출력, names()와 결과 동일
[1] &quot;Sepal.Length&quot; &quot;Sepal.Width&quot;  &quot;Petal.Length&quot; &quot;Petal.Width&quot; 
[5] &quot;Species&quot;     

&gt; head(iris) #데이터셋의 앞부분 일부 출력
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

&gt; tail(iris) #데이터셋의 뒷부분 일부 출력
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica</code></pre><h4 id="✔-iris-데이터셋의-추가적인-내용-확인">✔ iris 데이터셋의 추가적인 내용 확인</h4>
<pre><code>&gt; str(iris) #데이터셋 요약 정보
&#39;data.frame&#39;:    150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels &quot;setosa&quot;,&quot;versicolor&quot;,..: 1 1 1 1 1 1 1 1 1 1 ...

 &gt; iris[,5] #품종 데이터 보기
  [1] setosa     setosa     setosa     setosa     setosa     setosa    
  [7] setosa     setosa     setosa     setosa     setosa     setosa    
 [13] setosa     setosa     setosa     setosa     setosa     setosa    
 [19] setosa     setosa     setosa     setosa     setosa     setosa    
 [25] setosa     setosa     setosa     setosa     setosa     setosa    
 [31] setosa     setosa     setosa     setosa     setosa     setosa    
 [37] setosa     setosa     setosa     setosa     setosa     setosa    
 [43] setosa     setosa     setosa     setosa     setosa     setosa    
 [49] setosa     setosa     versicolor versicolor versicolor versicolor
 [55] versicolor versicolor versicolor versicolor versicolor versicolor
 [61] versicolor versicolor versicolor versicolor versicolor versicolor
 [67] versicolor versicolor versicolor versicolor versicolor versicolor
 [73] versicolor versicolor versicolor versicolor versicolor versicolor
 [79] versicolor versicolor versicolor versicolor versicolor versicolor
 [85] versicolor versicolor versicolor versicolor versicolor versicolor
 [91] versicolor versicolor versicolor versicolor versicolor versicolor
 [97] versicolor versicolor versicolor versicolor virginica  virginica 
[103] virginica  virginica  virginica  virginica  virginica  virginica 
[109] virginica  virginica  virginica  virginica  virginica  virginica 
[115] virginica  virginica  virginica  virginica  virginica  virginica 
[121] virginica  virginica  virginica  virginica  virginica  virginica 
[127] virginica  virginica  virginica  virginica  virginica  virginica 
[133] virginica  virginica  virginica  virginica  virginica  virginica 
[139] virginica  virginica  virginica  virginica  virginica  virginica 
[145] virginica  virginica  virginica  virginica  virginica  virginica 
Levels: setosa versicolor virginica

&gt; unique(iris[,5]) #품종 종류 보기 (중복 제거)
[1] setosa     versicolor virginica 
Levels: setosa versicolor virginica

&gt; table(iris[,&quot;Species&quot;]) #품종의 종류별 행의 개수 세기

    setosa versicolor  virginica 
        50         50         50 </code></pre><h3 id="📖-매트릭스와-데이터프레임에서-사용하는-함수">📖 매트릭스와 데이터프레임에서 사용하는 함수</h3>
<h4 id="✔-행별-열별-합계와-평균-계산">✔ 행별, 열별 합계와 평균 계산</h4>
<pre><code>&gt; colSums(iris[,-5]) #열별 합계
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       876.5        458.6        563.7        179.9 

&gt; colMeans(iris[,-5]) #열별 평균
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 

&gt; rowSums(iris[,-5]) #행별 합계
  [1] 10.2  9.5  9.4  9.4 10.2 11.4  9.7 10.1  8.9  9.6 10.8 10.0  9.3
 [14]  8.5 11.2 12.0 11.0 10.3 11.5 10.7 10.7 10.7  9.4 10.6 10.3  9.8
 [27] 10.4 10.4 10.2  9.7  9.7 10.7 10.9 11.3  9.7  9.6 10.5 10.0  8.9
 [40] 10.2 10.1  8.4  9.1 10.7 11.2  9.5 10.7  9.4 10.7  9.9 16.3 15.6
 [53] 16.4 13.1 15.4 14.3 15.9 11.6 15.4 13.2 11.5 14.6 13.2 15.1 13.4
 [66] 15.6 14.6 13.6 14.4 13.1 15.7 14.2 15.2 14.8 14.9 15.4 15.8 16.4
 [79] 14.9 12.8 12.8 12.6 13.6 15.4 14.4 15.5 16.0 14.3 14.0 13.3 13.7
 [92] 15.1 13.6 11.6 13.8 14.1 14.1 14.7 11.7 13.9 18.1 15.5 18.1 16.6
[105] 17.5 19.3 13.6 18.3 16.8 19.4 16.8 16.3 17.4 15.2 16.1 17.2 16.8
[118] 20.4 19.5 14.7 18.1 15.3 19.2 15.7 17.8 18.2 15.6 15.8 16.9 17.6
[131] 18.2 20.1 17.0 15.7 15.7 19.1 17.7 16.8 15.6 17.5 17.8 17.4 15.5
[144] 18.2 18.2 17.2 15.7 16.7 17.3 15.8

&gt; rowMeans(iris[,-5]) #행별 평균
  [1] 2.550 2.375 2.350 2.350 2.550 2.850 2.425 2.525 2.225 2.400 2.700
 [12] 2.500 2.325 2.125 2.800 3.000 2.750 2.575 2.875 2.675 2.675 2.675
 [23] 2.350 2.650 2.575 2.450 2.600 2.600 2.550 2.425 2.425 2.675 2.725
 [34] 2.825 2.425 2.400 2.625 2.500 2.225 2.550 2.525 2.100 2.275 2.675
 [45] 2.800 2.375 2.675 2.350 2.675 2.475 4.075 3.900 4.100 3.275 3.850
 [56] 3.575 3.975 2.900 3.850 3.300 2.875 3.650 3.300 3.775 3.350 3.900
 [67] 3.650 3.400 3.600 3.275 3.925 3.550 3.800 3.700 3.725 3.850 3.950
 [78] 4.100 3.725 3.200 3.200 3.150 3.400 3.850 3.600 3.875 4.000 3.575
 [89] 3.500 3.325 3.425 3.775 3.400 2.900 3.450 3.525 3.525 3.675 2.925
[100] 3.475 4.525 3.875 4.525 4.150 4.375 4.825 3.400 4.575 4.200 4.850
[111] 4.200 4.075 4.350 3.800 4.025 4.300 4.200 5.100 4.875 3.675 4.525
[122] 3.825 4.800 3.925 4.450 4.550 3.900 3.950 4.225 4.400 4.550 5.025
[133] 4.250 3.925 3.925 4.775 4.425 4.200 3.900 4.375 4.450 4.350 3.875
[144] 4.550 4.550 4.300 3.925 4.175 4.325 3.950</code></pre><h4 id="✔-행과-열-방향-전환">✔ 행과 열 방향 전환</h4>
<pre><code>&gt; z &lt;- matrix(1:20, nrow=4, ncol=5)
&gt; z
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

&gt; t(z) #행과 열 방향 전환
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
[5,]   17   18   19   20</code></pre><h4 id="✔-조건에-맞는-행과-열의-값-추출">✔ 조건에 맞는 행과 열의 값 추출</h4>
<pre><code>&gt; ir.1 &lt;- subset(iris, Species==&quot;setosa&quot;)

&gt; ir.2 &lt;- subset(iris, Sepal.Length&gt;5.0 &amp; Sepal.Width&gt;4.0)
&gt; ir.2
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
16          5.7         4.4          1.5         0.4  setosa
33          5.2         4.1          1.5         0.1  setosa
34          5.5         4.2          1.4         0.2  setosa

&gt; ir.2[,c(2,4)] #2,4열긔 값만 추출
   Sepal.Width Petal.Width
16         4.4         0.4
33         4.1         0.1
34         4.2         0.2</code></pre><h4 id="✔-매트릭스와-데이터프레임의-산술연산">✔ 매트릭스와 데이터프레임의 산술연산</h4>
<pre><code>&gt; a &lt;- matrix(1:20,4,5)
&gt; b &lt;- matrix(21:40,4,5)
&gt; a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20
&gt; b
     [,1] [,2] [,3] [,4] [,5]
[1,]   21   25   29   33   37
[2,]   22   26   30   34   38
[3,]   23   27   31   35   39
[4,]   24   28   32   36   40

&gt; 2*a
     [,1] [,2] [,3] [,4] [,5]
[1,]    2   10   18   26   34
[2,]    4   12   20   28   36
[3,]    6   14   22   30   38
[4,]    8   16   24   32   40

&gt; b-5
     [,1] [,2] [,3] [,4] [,5]
[1,]   16   20   24   28   32
[2,]   17   21   25   29   33
[3,]   18   22   26   30   34
[4,]   19   23   27   31   35

&gt; 2*a + 3*b
     [,1] [,2] [,3] [,4] [,5]
[1,]   65   85  105  125  145
[2,]   70   90  110  130  150
[3,]   75   95  115  135  155
[4,]   80  100  120  140  160

&gt; a+b
     [,1] [,2] [,3] [,4] [,5]
[1,]   22   30   38   46   54
[2,]   24   32   40   48   56
[3,]   26   34   42   50   58
[4,]   28   36   44   52   60

&gt; b-a
     [,1] [,2] [,3] [,4] [,5]
[1,]   20   20   20   20   20
[2,]   20   20   20   20   20
[3,]   20   20   20   20   20
[4,]   20   20   20   20   20

&gt; b/a
          [,1]     [,2]     [,3]     [,4]     [,5]
[1,] 21.000000 5.000000 3.222222 2.538462 2.176471
[2,] 11.000000 4.333333 3.000000 2.428571 2.111111
[3,]  7.666667 3.857143 2.818182 2.333333 2.052632
[4,]  6.000000 3.500000 2.666667 2.250000 2.000000

&gt; a*b
     [,1] [,2] [,3] [,4] [,5]
[1,]   21  125  261  429  629
[2,]   44  156  300  476  684
[3,]   69  189  341  525  741
[4,]   96  224  384  576  800

&gt; a &lt;- a*3
&gt; a
     [,1] [,2] [,3] [,4] [,5]
[1,]    3   15   27   39   51
[2,]    6   18   30   42   54
[3,]    9   21   33   45   57
[4,]   12   24   36   48   60

&gt; b &lt;- b-5
&gt; b
     [,1] [,2] [,3] [,4] [,5]
[1,]   16   20   24   28   32
[2,]   17   21   25   29   33
[3,]   18   22   26   30   34
[4,]   19   23   27   31   35</code></pre><h3 id="📖-매트릭스와-데이터프레임의-자료구조-확인">📖 매트릭스와 데이터프레임의 자료구조 확인</h3>
<h4 id="✔-매트릭스와-데이터프레임의-자료구조-확인">✔ 매트릭스와 데이터프레임의 자료구조 확인</h4>
<pre><code>&gt; class(iris) #iris 데이터셋의 자료구조 확인
[1] &quot;data.frame&quot;
&gt; class(state.x77) #state.x77의 자료구조 확인
[1] &quot;matrix&quot; &quot;array&quot; 

&gt; is.matrix(iris) #데이터셋이 매트릭스인지 확인
[1] FALSE
&gt; is.data.frame(iris) #데이터셋이 데이터프레임인지 확인
[1] TRUE

&gt; is.matrix(state.x77)
[1] TRUE
&gt; is.data.frame(state.x77)
[1] FALSE</code></pre><h4 id="✔-매트릭스와-데이터프레임의-자료구조-변환">✔ 매트릭스와 데이터프레임의 자료구조 변환</h4>
<pre><code>#매트릭스를 데이터프레임으로 변환
&gt; st &lt;- data.frame(state.x77)
&gt; class(st)
[1] &quot;data.frame&quot;

#데이터프레임을 매트릭스로 변환
&gt; iris.m &lt;- as.matrix(iris[,1:4])
&gt; class(iris.m)
[1] &quot;matrix&quot; &quot;array&quot; 
</code></pre><h4 id="✔-데이터프레임의-열-추출">✔ 데이터프레임의 열 추출</h4>
<pre><code>iris[,&quot;Species&quot;] #결과=벡터, 매트릭스와 데이터프레임 모두 가능

iris[,5] #결과=벡터, 매트릭스와 데이터프레임 모두 가능

iris[&quot;Species&quot;] #결과=데이터프레임, 데이터프레임만 가능

iris[5] #결과=데이터프레임, 데이터프레임만 가능

iris$Species #결과=벡터, 데이터프레임만 가능
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[운영체제실무] 문자열]]></title>
            <link>https://velog.io/@ming_/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%8B%A4%EB%AC%B4-%EB%AC%B8%EC%9E%90%EC%97%B4</link>
            <guid>https://velog.io/@ming_/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%8B%A4%EB%AC%B4-%EB%AC%B8%EC%9E%90%EC%97%B4</guid>
            <pubDate>Sun, 17 Oct 2021 16:04:28 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-문자열">📌 문자열</h2>
<p>✔헤더파일 string.h</p>
<h3 id="📖-문자열-길이-계산">📖 문자열 길이 계산</h3>
<blockquote>
<pre><code>size_t strlen(const char*s)</code></pre></blockquote>
<pre><code>인자 s는 널로 끝나는 문자열
마지막 널 문자를 제외한 총 바이트 수를 이 문자열의 길이로 리턴

&gt; ```
size_t strspn(const char*s1, const char*2)</code></pre><p>s2의 모든 문자열을 포함하는 s1의 첫째 세그먼트 길이를 리턴</p>
<blockquote>
<pre><code>size_t strcspn(const char*s1, const char*s2)</code></pre></blockquote>
<pre><code>s2의 모든 문자열을 포함하지 않는 s1의 첫째 세그먼트 길이를 리턴

✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main(){</p>
<pre><code>printf(%d\n&quot;, strlen(&quot;abcde&quot;)); 
printf(%d\n&quot;, strspn(&quot;unix&quot;, &quot;niua&quot;)); //출력값 3 (uni)
printf(%d\n&quot;, strspn(&quot;unix&quot;, &quot;niax&quot;)); //출력값이 0인 이유 : u가 없어서 끝남
printf(%d\n&quot;, strcspn(&quot;unix&quot;, &quot;niau&quot;)); //출력값 0인 이유 : 처음부터 봤을때 u가 있어서 0
printf(%d\n&quot;, strcspn(&quot;unix&quot;, &quot;abi&quot;)); //출력값 2 (있으면 끝냄)

exit(0);</code></pre><p>}</p>
<pre><code>💻 출력</code></pre><p>5
3
0
0
2</p>
<pre><code>
### 📖 문자열 비교

&gt; ```
int strcmp(const*s1, const char*s2)</code></pre><p>s1과 s2를 비교하여 s1이 사전 순서상 앞에 나오면 음수(-), 같으면 영(0), 뒤에 나오면 양수(+)를 리턴
(앞에 문자열이 크면 음수, 뒤에 문자열이 크면 양수, 같으면 0)
ex) abc와 de를 비교하면 a와 d를 비교했을 때 d가 크기 때문에 de가 큼</p>
<blockquote>
<pre><code>int strncmp(const char*s1, char*s2, size_t n)</code></pre></blockquote>
<pre><code>문자열의 처음 n개의 문자만 비교


✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    int cmp;</p>
<pre><code>cmp = strcmp(&quot;abc&quot;, &quot;Bc&quot;);

if (cmp &gt; 0)
    printf(&quot;s1 is greater than s2\n&quot;);
else if (cmp &lt; 0)
    printf(&quot;s2 is greater than s1\n&quot;);
else
    printf(&quot;s1  is equal to s2\n&quot;);


cmp = strncmp(&quot;abc&quot;, &quot;abd&quot;, 2);

if (cmp &gt; 0)
    printf(&quot;s1 is greater than s2\n&quot;);
else if (cmp &lt; 0)
    printf(&quot;s2 is greater than s1\n&quot;);
else
    printf(&quot;s1  is equal to s2\n&quot;);
exit(0);</code></pre><p>}</p>
<pre><code>
💻 출력</code></pre><p>s1 is greater than s2
s1  is equal to s2</p>
<pre><code>
### 📖 문자열 복사
&gt; ```
char*strcpy(char*dst, const char*src)</code></pre><p>src가 가리키는 문자열을 dst가 가리키는 배열에 복사하고 dst값을 리턴</p>
<blockquote>
<pre><code>char*strncpy(char*dst, const char*src, size_t n)</code></pre></blockquote>
<pre><code>src가 가리키는 문자열을 dst가 가리키는 배열에 n개 복사하고 dst값을 리턴

✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    char *dst;
    char src[50] = &quot;Unix system Programming&quot;;</p>
<pre><code>dst = (char *)malloc(sizeof(char) * 50); //메모리를 얼마나 사용할지 모를때 동적할당

strcpy(dst, src); 
printf(&quot;%s\n&quot;, dst);

strncpy(dst, src, 11); 
printf(&quot;%s\n&quot;, dst);

exit(0);</code></pre><p>}</p>
<pre><code>💻 출력</code></pre><p>Unix system Programming
Unix system</p>
<pre><code>
### 📖 문자열 결합
&gt; ```
char *strcat(char*dst, const char*src)</code></pre><p>dst가 가르키는 문자열 뒤에 src가 가리키는 문자열을 널 바이트 만날 때까지 읽어 붙이고 dst 문자열을 반환</p>
<blockquote>
<pre><code>char*strncat(char*dst, const char*src, size_t n)</code></pre></blockquote>
<pre><code>src가 가리키는 문자열 중 n개를 dst가 가리키는 문자열뒤에 읽어 붙이고 dst 문자열을 반환

✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    char dst[13] = &quot;Unix system &quot;; 
    char src[12] = &quot;Programming&quot;;  </p>
<pre><code>printf(&quot;%s\n&quot;, strcat(dst, src)); 
printf(&quot;%s\n&quot;, dst); 

printf(&quot;%s\n&quot;, strncat(dst, src, 5));
exit(0);</code></pre><p>}</p>
<pre><code>
💻 출력</code></pre><p>Unix system Programming
Unix system Programming
Unix system Progr</p>
<pre><code>
### 📖 문자 탐색
&gt; ```
char*strchr(const char*s, int c)</code></pre><p>문자열 s중 처음 나타나는 문자 c의 포인터를 리턴
ex) abc 와 b 이면 bc
ex) abcbd 와 b이면 bcbd</p>
<blockquote>
<pre><code>char*strrchr(const char*s, int c)</code></pre></blockquote>
<pre><code>문자열 s중 뒤에서 처음 나타나는 문자 c의 포인터를 리턴
ex) abc 와 b이면 bc
ex) abcbd 와 b이면 bd

✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    char str[25] = &quot;Unix system Programming&quot;;</p>
<pre><code>printf(&quot;%s\n&quot;, strchr(str, &#39;m&#39;)); 
printf(&quot;%s\n&quot;, strrchr(str, &#39;m&#39;)); 

exit(0);</code></pre><p>}</p>
<pre><code>
💻 출력</code></pre><p>m Programming
ming</p>
<pre><code>
&gt; ```
char*strpbrk(const char*s1, const char*s2)</code></pre><p>문자열 s1중 문자열 s2가 가리키는 문자 중 어느 문자든지 처음 등장한 곳의 포인터를 리턴
ex) abc와 bc이면 bc</p>
<p>✍실습</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

int main() {
    char str[25] = &quot;Unix system Programming&quot;;
    int s_idx;

    printf(&quot;%s\n&quot;, strpbrk(str, &quot;abcn&quot;)); 

    printf(&quot;%d\n&quot;, strlen(str) - strlen(strpbrk(str, &quot;abcnm&quot;))); //출력값 1 :몇번째에 있는지
    s_idx = strlen(str) - strlen(strpbrk(str, &quot;abcnm&quot;));

    printf(&quot;%c\n&quot;, str(strlen(str) - strlen(strpbrk(str, &quot;abcnm&quot;)))); 
    printf(&quot;%c\n&quot;, str(s_idx)); //출력값 n :무슨 글씨를 찾았는지

    exit(0);
}</code></pre><p>💻 출력</p>
<pre><code>nix system Programming
1
n
n</code></pre><p>ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ</p>
<p>✍실습</p>
<pre><code>#include &lt;stdio.h&gt;

void markline(char* line, char* start, char* stop) {
    char* p;

    for (p = line; p &lt; strat; p++)
        *p = &#39; &#39;;
    for (p = start; p &lt;= stop; p++)
        *p = &#39;^&#39;;
    for (p = stop + 1; *p != &#39;\0&#39;; p++)
        *p = &#39; &#39;;
} //unix에서 i를 찾으면 u공백 n공백 i^ x공백</code></pre><p>💻 출력</p>
<pre><code>unix
  ^</code></pre><h3 id="📖-문자열-탐색">📖 문자열 탐색</h3>
<blockquote>
<pre><code>char*strstr(const char*s1, const char*s2)</code></pre></blockquote>
<pre><code>문자열 s1중 부분 문자열 s2가 처음 나타나는 포인터를 리턴

✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    char str[25] = &quot;Unix system programming&quot;;
    char srstr[4] = &quot;nix&quot;;
    int start;
    char* find_str;</p>
<pre><code>printf(&quot;search %s in %s\n&quot;, srstr, str); //unix system programming에서 nix를 찾는데
printf(&quot;search %s\n&quot;, strstr(str, srstr));
printf(&quot;search %s\n&quot;, strstr(str, &quot;Uix&quot;)) //찾는 문자가 없음


start = strlen(str) - strlen(strstr(str, srstr)); 

printf(&quot;%d \n&quot;, start);

exit(0);</code></pre><p>}</p>
<pre><code>
💻 출력</code></pre><p>search nix in Unix system programming
search nix system programming
search (null)
1</p>
<pre><code>
*찾는 문자열이 없을 때*
✍실습</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    char str[25] = &quot;Unix system programming&quot;;
    char srstr[4] = &quot;Uix&quot;;
    int start;
    char* find_str;</p>
<pre><code>printf(&quot;search %s in %s\n&quot;, srstr, str);

if ((find_str == strstr(str,srstr) == NULL))
        printf(&quot;%s not found in %s\n&quot;, srstr, str);
else {
    printf(&quot;search %s\n&quot;, strstr(str, srstr)); 
    start = strlen(str) - strlen(strstr(str, srstr));
    printf(&quot;%d \n&quot;, start); 
}
exit(0);</code></pre><p>}</p>
<pre><code>💻 출력</code></pre><p>search Uix in Unix system Programming
Uix not Found in Unix System Programming
1</p>
<pre><code>
### 📖 문자열 토큰 분리
&gt; 토큰(token) : 프로그래밍 언어에서 문법적으로 더 이상 나눌 수 없는 기본적인 언어요소
ex) 키워드, 연산자, 구두점</code></pre><p>char <em>strtok(char *1, const char</em>s2)</p>
<pre><code>문자열 s1을 문자열 s2에 있는 토큰을 기준으로 문자열 분리

✍실습
</code></pre><p>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;</p>
<p>int main() {
    char buf[0] = &quot;5:10:45&quot;;
    char* token;</p>
<pre><code>printf(&quot;tokenizing \&quot;%s\&quot; with strtok():\n&quot;, buf);

if ((token = strtok(buf, &quot;:&quot;)) != NULL) {
    printf(&quot;token=\&quot;s\&quot;\n&quot;, token);
    while ((token = strtok(NULL, &quot;:&quot;)) != NULL) { //계속 찾기 위해 while문, 나오는곳부터 다시 찾기 위해 NULL
        printf(&quot;token=\&quot;%s\&quot;\n&quot;, token);
    }
}</code></pre><p>}</p>
<pre><code>💻 출력</code></pre><p>tokenizing &quot;5:10:45&quot; with strtok():
token=&quot;5&quot;
token=&quot;10&quot;
token=&quot;45&quot;
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[R프로그래밍] 벡터, 리스트, 팩터]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Sun, 17 Oct 2021 15:23:32 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-벡터">📌 벡터</h2>
<blockquote>
<p>1차원 배열 데이터 ex) 몸무게, 영어 성적
2차원 배열 데이터 ex) 전과목 성적</p>
</blockquote>
<h4 id="✔-벡터만들기">✔ 벡터만들기</h4>
<pre><code>&gt; x &lt;- c(1,2,3) 
&gt; y &lt;- c(&quot;a&quot;,&quot;b&quot;,&quot;c&quot;)
&gt; z &lt;- c(TRUE, TRUE, FALSE, TRUE)
&gt; w &lt;- c(1,2,3,&quot;a&quot;,&quot;b&quot;,&quot;c&quot;)
&gt; x
[1] 1 2 3
&gt; y
[1] &quot;a&quot; &quot;b&quot; &quot;c&quot;
&gt; z
[1]  TRUE  TRUE FALSE  TRUE
&gt; w
[1] &quot;1&quot; &quot;2&quot; &quot;3&quot; &quot;a&quot; &quot;b&quot; &quot;c&quot;</code></pre><h4 id="✔-연속적인-숫자로-이루어진-벡터-생성">✔ 연속적인 숫자로 이루어진 벡터 생성</h4>
<pre><code>&gt; v1 &lt;- 50:90
&gt; v1
 [1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[24] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

&gt; v2 &lt;- c(1,2,5,50:90)
&gt; v2
 [1]  1  2  5 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
[24] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90</code></pre><h4 id="✔-일정한-간격의-숫자로-이루어진-벡터-생성">✔ 일정한 간격의 숫자로 이루어진 벡터 생성</h4>
<pre><code>&gt; v3 &lt;- seq(1,101,3)
&gt; v3
 [1]   1   4   7  10  13  16  19  22  25  28  31  34  37  40  43  46  49
[18]  52  55  58  61  64  67  70  73  76  79  82  85  88  91  94  97 100

&gt; v4 &lt;- seq(0.1, 1.0, 0.1)
&gt; v4
 [1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0</code></pre><h4 id="✔-반복된-숫자로-이루어진-벡터-생성">✔ 반복된 숫자로 이루어진 벡터 생성</h4>
<pre><code>&gt; v5 &lt;- rep(1,times=5) #1을 5번 반복
&gt; v5
[1] 1 1 1 1 1

&gt; v6 &lt;- rep(1:5, times=3) #1에서 5까지 3번 반복
&gt; v6
 [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

&gt; v7 &lt;- rep(c(1,5,9), times=3) #1,5,9를 3번 반복
&gt; v7
[1] 1 5 9 1 5 9 1 5 9</code></pre><h4 id="✔-벡터의-원소값에-이름-지정">✔ 벡터의 원소값에 이름 지정</h4>
<pre><code>&gt; score &lt;- c(90,85,70) #성적
&gt; score
[1] 90 85 70

&gt; names(score) #score에 저장된 값들의 이름
NULL

&gt; names(score) &lt;- c(&quot;john&quot;, &quot;tom&quot;, &quot;jane&quot;) #값들에 이름 부여
&gt; names(score)
[1] &quot;john&quot; &quot;tom&quot;  &quot;jane&quot;

&gt; score #이름과 함께 값이 출력
john  tom jane 
  90   85   70 
</code></pre><h4 id="✔벡터에서-원소값-추출">✔벡터에서 원소값 추출</h4>
<pre><code>&gt; d &lt;- c(1,4,3,7,8)
&gt; d[1]
[1] 1
&gt; d[3]
[1] 3
&gt; d[6]
[1] NA</code></pre><h4 id="✔-여러-개의-값-한-번에-추출">✔ 여러 개의 값 한 번에 추출</h4>
<pre><code>&gt; d &lt;- c(1,4,3,7,8)

&gt; d[c(1,3,5)] #1,3,5번째 값 출력
[1] 1 3 8

&gt; d[1:3] #처음 세 개의 값 출력
[1] 1 4 3

&gt; d[seq(1,5,2)] #홀수번재 값 출력
[1] 1 3 8

&gt; d[-2] #2번째 값 제외하고 출력
[1] 1 3 7 8

&gt; d[-c(3:5)] #3~5번째 값 제외하고 출력
[1] 1 4</code></pre><h4 id="✔-이름으로-값-추출">✔ 이름으로 값 추출</h4>
<pre><code>&gt; GNP &lt;- c(2090, 2450, 960)
&gt; GNP
[1] 2090 2450  960

&gt; names(GNP) &lt;- c(&quot;korea&quot;,&quot;japan&quot;,&quot;nepal&quot;)

&gt; GNP
korea japan nepal 
 2090  2450   960 

&gt; GNP[1]
korea 
 2090 

&gt; GNP[&quot;korea&quot;]
korea 
 2090 

&gt; GNP[c(&quot;korea&quot;,&quot;japan&quot;,&quot;nepal&quot;)]
korea japan nepal 
 2090  2450   960 </code></pre><h4 id="✔-벡터에-저장된-원소값-변경">✔ 벡터에 저장된 원소값 변경</h4>
<pre><code>&gt; v1 &lt;- c(1,5,7,8,9)
&gt; v1
[1] 1 5 7 8 9

&gt; v1[2] &lt;- 3 #v1의 2번째 값을 3으로 변경
&gt; v1
[1] 1 3 7 8 9

&gt; v1[c(1,5)] &lt;- c(10,20) #v1의 1,5번째 값을 각각 10,20으로 변경
&gt; v1
[1] 10  3  7  8 20</code></pre><h4 id="✔-벡터의-연산">✔ 벡터의 연산</h4>
<blockquote>
<p>벡터와 숫자값 연산
벡터에 대한 산술 연산은 벡터 안에 포함된 값들에 대한 연산으로 바뀌어 실행</p>
</blockquote>
<pre><code>&gt; d &lt;- c(1,4,3,7,8)

&gt; 2*d
[1]  2  8  6 14 16

&gt; d-5
[1] -4 -1 -2  2  3

&gt; 3*d+4
[1]  7 16 13 25 28</code></pre><blockquote>
<p>벡터와 벡터 간의 연산
벡터 간의 대응되는 위치에 있는 값끼리의 연산으로 바꾸어 실행</p>
</blockquote>
<pre><code>&gt; x &lt;- c(1,2,3)
&gt; y &lt;- c(4,5,6)

&gt; x+y
[1] 5 7 9

&gt; x*y
[1]  4 10 18

&gt; z &lt;- x+y #x,y를 더하여 z에 저장
&gt; z
[1] 5 7 9</code></pre><h4 id="✔-벡터에-적용-가능한-함수">✔ 벡터에 적용 가능한 함수</h4>
<pre><code>&gt; d &lt;- c(1,2,3,4,5,6,7,8,9,10)

&gt; sum(d) #d에 포함된 값들의 합
[1] 55
&gt; sum(2*d) #d에 포함된 값들에 2를 곱한 후 합한 값
[1] 110

&gt; length(d) #d에 포함된 값들의 개수
[1] 10

&gt; mean(d[1:5]) #1~5번째 값들의 평균
[1] 3

&gt; max(d) #d에 포함된 값들의 최댓값
[1] 10
&gt; min(d) #d에 포함된 값들의 최솟값
[1] 1

&gt; sort(d) #오름차순 정렬
 [1]  1  2  3  4  5  6  7  8  9 10
&gt; sort(d, decreasing=FALSE) #오름차순 정렬
 [1]  1  2  3  4  5  6  7  8  9 10
&gt; sort(d, decreasing=TRUE) #내림차순 정렬
 [1] 10  9  8  7  6  5  4  3  2  1</code></pre><h4 id="✔-논리연산자-사용">✔ 논리연산자 사용</h4>
<pre><code>&gt; d &lt;- c(1,2,3,4,5,6,7,8,9)

&gt; d&gt;=5
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
&gt; d[d&gt;5] #5보다 큰 값
[1] 6 7 8 9

&gt; sum(d&gt;5) #5보다 큰 값의 개수 출력
[1] 4
&gt; sum(d[d&gt;5]) #5보다 큰 값의 합계 출력
[1] 30

&gt; d==5
[1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE

&gt; condi &lt;- d&gt;5 &amp; d&lt;8 #조건을 변수에 저장
&gt; d[condi] #조건에 맞는 값들을 선택
[1] 6 7</code></pre><h2 id="📌-리스트">📌 리스트</h2>
<blockquote>
<p>서로 다른 자료형의 값들을 1차원 배열에 저장하고 다룰 수 있도록 해주는 수단</p>
</blockquote>
<pre><code>&gt; ds &lt;- c(90,85,70,84)

&gt; my.info &lt;- list(name=&#39;Tom&#39;, age=60, status=TRUE, score=ds)
&gt; my.info #리스트에 저장된 내용을 모두 출력
$name
[1] &quot;Tom&quot;

$age
[1] 60

$status
[1] TRUE

$score
[1] 90 85 70 84

&gt; my.info[[1]] #리스트의 첫 번째 값 출력
[1] &quot;Tom&quot;
&gt; my.info$name #리스트에서 값의 이름이 name인 값 출력
[1] &quot;Tom&quot;

&gt; my.info[[4]] #리스트의 네 번째 값 출력
[1] 90 85 70 84</code></pre><h2 id="📌-팩터">📌 팩터</h2>
<blockquote>
<p>문자형 데이터가 저장된 벡터의 일종
성별, 혈액형, 선호 정당 등과 같이 저장할 문자값들이 몇 종류로 정해져 있을 때 팩터를 사용</p>
</blockquote>
<pre><code>&gt; bt &lt;- c(&#39;A&#39;,&#39;B&#39;,&#39;B&#39;,&#39;O&#39;,&#39;AB&#39;,&#39;A&#39;) #문자형 벡터 bt 정의

&gt; bt.new &lt;- factor(bt) #벡터 bt.new 정의

&gt; bt #벡터 bt의 내용 출력
[1] &quot;A&quot;  &quot;B&quot;  &quot;B&quot;  &quot;O&quot;  &quot;AB&quot; &quot;A&quot; 
&gt; bt.new #팩터 bt.new의 내용 출력
[1] A  B  B  O  AB A 
Levels: A AB B O

&gt; bt[5] #벡터 bt의 5번째 값 출력
[1] &quot;AB&quot;
&gt; bt.new[5] #팩터 bt.new의 5번째 값 출력
[1] AB
Levels: A AB B O

&gt; levels(bt.new) #팩터에 저장된 값의 종류를 출력
[1] &quot;A&quot;  &quot;AB&quot; &quot;B&quot;  &quot;O&quot; 

&gt; as.integer(bt.new) #팩터의 문자값을 숫자로 바꾸어 출력
[1] 1 3 3 4 2 1

&gt; bt.new[7] &lt;- &#39;B&#39; #팩터 bt.new의 7번째에 &#39;B&#39;저장
&gt; bt.new[8] &lt;- &#39;C&#39; #팩터 bt.new의 8번째에 &#39;C&#39;저장, C는 없어서 오류
경고메시지(들): 
In `[&lt;-.factor`(`*tmp*`, 8, value = &quot;C&quot;) :
  invalid factor level, NA generated

&gt; bt.new #팩터 bt.new의 내용 출력 (변경된 내용과 없는 건 &lt;NA&gt;로 출력
[1] A    B    B    O    AB   A    B    &lt;NA&gt;
Levels: A AB B O</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[R프로그래밍] 데이터와 빅데이터, 데이터 분석 이론]]></title>
            <link>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EC%9D%B4%EB%A1%A0</link>
            <guid>https://velog.io/@ming_/R%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EC%9D%B4%EB%A1%A0</guid>
            <pubDate>Sun, 17 Oct 2021 13:53:08 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-데이터">📌 데이터</h2>
<blockquote>
<p>현실 세계에서 단순히 관찰하거나 측정해 수집한 사실이나 값</p>
</blockquote>
<h4 id="✔-정보">✔ 정보</h4>
<p>의사결정에 유용하게 활용할 수 있도록 데이터를 처리한 결과물</p>
<h4 id="✔-4차혁명">✔ 4차혁명</h4>
<p>인공지능, 빅데이터, 로봇, 사물인터넷(IoT), 생명공학기술, 3D프린터 등 변화를 수용하고 가능성을 최대화하는 시대</p>
<h2 id="📌-빅데이터">📌 빅데이터</h2>
<blockquote>
<p>기존의 데이터베이스 관리도구의 데이터 수집, 저장, 관리, 분석 역량을 넘어서는 데이터</p>
</blockquote>
<h4 id="✔-빅데이터-3요소">✔ 빅데이터 3요소</h4>
<ol>
<li>크기(volume)</li>
<li>다양성(variety)<pre><code>- 정형데이터 : 고정된 필드에 저장되는 일정한 형식의 데이터 ex) 엑셀
- 반정형 데이터 : 일정한 구조는 없으나 구조를 파악할 수 있는 데이터
  ex) XML이나 HTML 같은 메타데이터
- 비정형 데이터 : 고정된 필드에 저장되지 않는 데이터 ex) 사진, 동영상, 위치정보 등</code></pre></li>
<li>속도(velocity)</li>
</ol>
<h2 id="📌-데이터-분석">📌 데이터 분석</h2>
<blockquote>
<p>주어진 문제를 해결하기 위해 데이터를 다루는 과정
현상의 이해를 통해 미래를 예측하는 문제 해결 기법
인사이트를 도출하기 위해 알고리즘과 수학적 처리과정을 적용하여 해당 정보에 대한 결론을 도출하고 패턴을 찾는 과정</p>
</blockquote>
<h4 id="✔-데이터-분석-목적">✔ 데이터 분석 목적</h4>
<p>다양한 내/외부, 정형/비정형 데이터를 획득하여 새로운 통찰과 가치 창출
업무에 대한 문제해결
의사결정</p>
<h4 id="✔-데이터분석을-학습하기-위한-방법">✔ 데이터분석을 학습하기 위한 방법</h4>
<p>데이터분석 기법 중심
분석 도구 중심
문제 해결 중심</p>
<h4 id="✔✔✔-데이터-분석-과정">✔✔✔ 데이터 분석 과정</h4>
<ol>
<li>문제 정의 및 계획<ul>
<li>문제가 명확해야 그 문제를 해결하기 위한 데이터가 어떤 것인지를 추정할 수 있고, 어떤 분석기법을 적용해야 할지도 계획할 수 있음<ol start="2">
<li>데이터 수집</li>
</ol>
</li>
<li>기존 시스템의 데이터베이스, 엑셀파일, 인터넷 등에서 필요한 자료를 수집<ol start="3">
<li>데이터 정제 및 전처리</li>
</ol>
<ul>
<li>수집된 데이터는 바로 분석할 수 없는 경우가 대부분</li>
<li>단위의 차이, 결측값, 오류 데이터 등의 보정 필요</li>
<li>수집된 데이터를 분석 가능한 형태로 정돈하는 과정을 데이터 정제 혹은 전처리 과정</li>
</ul>
<ol start="4">
<li>데이터 탐색</li>
</ol>
</li>
<li>가벼운 데이터 분석, 데이터 내용을 파악하는 단계<ol start="5">
<li>데이터 분석</li>
</ol>
</li>
<li>데이터 탐색 단계에서 파악한 정보를 바탕으로 보다 심화된 분석을 수행하는 단계</li>
<li>전통적인 통계분석을 포함하여 고급 분석 기법들이 사용</li>
<li>머신러닝 기술도 적용<ol start="6">
<li>결과 보고</li>
</ol>
</li>
<li>데이터의 분석과 해석이 마무리 되면 그 내용이 정리되고, 보고 되어야 함</li>
<li>결과보고 작성단계에서 중요한 기술이 데이터 시각화</li>
<li>데이터 시각화란 분석된 결과를 단순 숫자의 나열이 아니라 다양한 그래프나 그림을 통해 결과를 쉽게 이해할 수 있도록 표현하는 것</li>
</ul>
</li>
</ol>
<h4 id="✔-분석-소요-시간">✔ 분석 소요 시간</h4>
<p>데이터를 정제하고 전처리하는데 60%의 시간을 사용함
전체 분석 과정에서 약 80%의 시간이 분석을 위한 데이터 준비에 사용</p>
]]></description>
        </item>
    </channel>
</rss>