<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>milanryu_d.log</title>
        <link>https://velog.io/</link>
        <description>개발자가 되어가는 오르미의 기록</description>
        <lastBuildDate>Wed, 18 Aug 2021 06:50:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>milanryu_d.log</title>
            <url>https://images.velog.io/images/milanryu_d/profile/6baf2414-e787-4457-8e9b-57a825af961b/프로필.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. milanryu_d.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/milanryu_d" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[활성화 함수의 이해(FUN23)]]></title>
            <link>https://velog.io/@milanryu_d/%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98%EC%9D%98-%EC%9D%B4%ED%95%B4FUN23</link>
            <guid>https://velog.io/@milanryu_d/%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98%EC%9D%98-%EC%9D%B4%ED%95%B4FUN23</guid>
            <pubDate>Wed, 18 Aug 2021 06:50:13 GMT</pubDate>
            <description><![CDATA[<h3 id="1-활성화-함수activation-function">(1) 활성화 함수(activation function)</h3>
<ul>
<li><p>활성화(activated) or 비활성화(deactivated) = 조건을 만족  or  조건 불만족</p>
</li>
<li><p>신경망 속의 <strong>퍼셉트론(혹은 노드)</strong> 도 <strong>특정조건이 만족</strong>하면 <strong>활성화</strong>가 되도록 디자인되어 있음</p>
</li>
<li><p><strong>노드에 입력으로 들어오는 값</strong>이 어떤 <strong>임계치를 넘어</strong>가면 <strong>활성화</strong>가 되고, <strong>넘어가지 않으면 비활성화</strong>가 되게끔 코딩이 되어있음</p>
<ul>
<li>예로 ReLU 함수 : 입력값 음수(0미만) 조건 만족 0출력, 0이상이면 입력값 그대로 출력</li>
</ul>
</li>
<li><p><strong>활성화 혹은 비활성화 표현</strong>하려면, <strong>활성화되는 기준</strong>이 먼저 정해져야함</p>
<ul>
<li>예로 출력값이 0보다 큰 경우를 활성화 되었다고 정의한다면, ReLU 함수란 0미만일때는 비활성화가 되고 0이상인 경우에 활성화가 되는 함수가 된다고 할수있다. </li>
</ul>
</li>
<li><p><strong>시그모이드</strong></p>
<ul>
<li>−∞ 로 갈수록 0을 출력하고 +∞ 로 갈수록 1을 출력하며, 0일 때는 1/2 을 출력하는 함수</li>
<li>입력값에 &#39;무관하게&#39; 0∼1 사이의 값으로 출력하는 특징이 있으며, 따라서 &quot;참&quot; / &quot;거짓&quot; 혹은 &quot;앞면&quot; / &quot;뒷면&quot; 처럼 2가지 상황을 구분할 때 용이(참=0, 거짓=1 로 대응 시켜 구분)<h4 id="-활성화-함수를-쓰는-결정적-이유">@ 활성화 함수를 쓰는 결정적 이유!!!!</h4>
</li>
</ul>
</li>
<li><p>딥러닝 모델의 표현력을 향상시켜주기 위해서</p>
</li>
<li><p><strong>모델의 representation capacity 또는 expressivity를 향상시킨다</strong>라고 함</p>
<ul>
<li>선형&quot; 함수(직선)로는 &quot;비선형&quot;함수(사인곡선 혹은 고차항)을 표현할 수 없다</li>
<li>딥러닝 모델의 파라미터(f(x)= Wx+b 에서 W 와 b를 가리킴)들은 입력과 x와 선형관계임, 곱하고 더하는 연산만 하면서 그다음 레이어로 전달 하는데 이런것들이 아무리 겹쳐도 결과는 선형이 된다. </li>
<li>사인곡선처럼 직선으로는 근사시킬수없는(고양이,강아지사진처럼 무수히 많고 복잡한 특징을 가진) 비선형 데이터를 표현하려면 딥러닝 모델도 <strong>비선형</strong>을 지니고 있어야함</li>
<li>이때 쓰인것이 <strong>&#39;활성화 함수&#39;</strong></li>
<li><strong>활성화 함수를 레이어 사이 사이에 넣어줌</strong> -&gt; 모델이 비선형 데이터도 표현할수 있게 되었음</li>
<li><strong>활성화 함수 : 하이퍼볼릭 탄젠트, 시그모이드, 소프트맥스, 렐루</strong> 등이있다.</li>
</ul>
</li>
</ul>
<h3 id="2-퍼셉트론">(2) 퍼셉트론</h3>
<ul>
<li><p>우리가 알고있는 딥러닝 모델은 보통 여러개의 층으로 이루어져있음</p>
</li>
<li><p>그 한 층을 가져와 다시 쪼개면 &#39;노드&#39;라고 불리는 것으로 쪼개짐</p>
</li>
<li><p>쪼개진 노드를 퍼셉트론이라고 함</p>
</li>
<li><p>퍼셉트론을 쌓으면 단층 퍼셉트론, 이 단층퍼셉트론을 쌓으면 다층 퍼셉트론이 됨</p>
</li>
<li><p>결국 딥러닝 모델은 퍼셉트론들이 다양한 구조로 쌓인것</p>
</li>
<li><p>퍼셉트론은 어떻게 나온것일까?</p>
<ul>
<li>우리의 목표는 컴퓨터를 학습시키는 것</li>
<li>학습시키는 방법은 잘 자인 머신이라고할수잇는 동물의 학습방법을 모방하기로함</li>
<li>학습방법을 모방하기 위한 학습시킬 머신자체를 동물의 신경세포와 유사하게 설계해 나오게 된것이 최초의 퍼셉트론!</li>
</ul>
</li>
</ul>
<p>(2-1) 신경세포의 구조</p>
<ul>
<li>신경세포(Nueron)</li>
<li>신경세포의 구성 <ul>
<li>세포체(몸) : 각 가지돌기로부터 들어온 신호드롤부터 자신의 출력신호를 만들어 다음 세포에 전송, 출력신호는 비선형방식으로 결정, 합이 일정수준이하이면 비활성상태로 무시, 일정수준을 넘으면 활성상태가 되어 신호를 다음 세포로 전송</li>
<li>가지돌기(머리) : 세포로 전달되는 신호를 받아들이는 부분</li>
<li>축삭돌기(발) : 세포에서 다른 세포로 신호를 전달하는 부분</li>
<li>시냅스 : 가지돌기와 축삭돌기 사이에 있는 부분, 신호전달의 세기 담당, 발달정도에 따라 같은 신호도 강하게 전달되거나 약하게 전달됨, 사용빈도에 따라 커지거나 작아지며 자체가 사라지기도함</li>
<li>한 신경세포의 축삭돌기와 그다음 신경세포의 가지돌기는 연결되어 있고, 그 연결되어 있는 부분에 존재하는 것이 시냅스</li>
</ul>
</li>
</ul>
<p>(2-2) 퍼셉트론의 구조</p>
<ul>
<li>입력 : 신경세포에서 가지돌기로 받아들이는 신호</li>
<li>각 입력항에 곱해지는 가중치: 신경세포들의 연결 부위에 형성된 시냅스의 발달 정도, </li>
<li>wx 값들은 각 가지돌기에서 스냅스를 거쳐서 오는 신호들에 해당되고 세포체(몸)에서 이 신호들이 합쳐짐, 여기에 신경세포에는 없는 편향이라고 불리는 b 신호가 합산에 포함됨.</li>
<li>wx값들이 합쳐치고거기에 b신호가 합쳐진 신호는 세포체에서 신호를 처리하는 하는 방식과 비슷하게 적절한 활성한 함수 f 를 거쳐서 출력이 결정됨</li>
<li>식을 나타내면 <img src="https://images.velog.io/images/milanryu_d/post/19b70e69-3c29-4afe-bf1e-47fa2a2c32c9/image.png" alt=""></li>
<li>X는 합쳐진 신호, Y는 퍼셉트론의 최종 출력</li>
<li>퍼셉트론을 다양한 구조로 연결, 가중치와 편향값을 적절히 조정해주는것이 신경세포와 유사하게 작동하게끔 만들어줄수있다. </li>
<li>적절히 조정하는 과정이 학습이며, 학습을 통해 동물과 비슷한 일(과일분류, 결함 탐지, 음성인식등)을 처리할 수 있게됨</li>
</ul>
<p>(2-3) 활성화 함수</p>
<ul>
<li>세포체(몸,f)에서 일어나는 일을 맡고있다. </li>
<li>들어온 신호가 특정 임계점을 넘으면 출력, 넘지못하면 무시</li>
<li>활성화 함수는 <strong>신호를 전달</strong>하기때문에 <strong>Transfer function</strong>라고 함</li>
<li>활성호 함수의 표현에 따라 두가지로 나눔<ul>
<li>선형 활성화 함수(Linear activation function)</li>
<li>비선형 활성화 함수(Non-linear activation function)</li>
</ul>
</li>
<li>딥러닝에서는 일반적으로 비선형 활성화 함수를 사용.
 선형 활성화 함수를 딥러닝에서 사용하지 않는 이유는 무엇일까?</li>
</ul>
<h2 id="2-선형과-비선형">2. 선형과 비선형</h2>
<h3 id="1-선형linear">(1) 선형(Linear)</h3>
<ul>
<li>선형 활성화 함수를 사용한다면, 노드의 개수를 아무리 많이 붙여도 결국 하나의 노드를 사용하는 것과 차이가 없다.</li>
<li>선형 활성화 함수를 사용한다면, 모델의 표현력이 떨어지게 됨</li>
</ul>
<h3 id="2-비선형non-linear">(2) 비선형(Non-linear)</h3>
<ul>
<li>딥러닝에서 비선형 활성화 함수를 주로 사용하는 이유는 러닝 모델의 표현력을 향상시키기 위해서</li>
<li><h3 id="3-비선형-함수를-쓰는-이유">(3) 비선형 함수를 쓰는 이유</h3>
</li>
<li>그렇다면..(비선형 함수를 쓴다면?)</li>
</ul>
<h2 id="3활성화-함수의-종류hidden-layer-사이에-들어가는-활성화-함수">3.활성화 함수의 종류(hidden layer 사이에 들어가는 활성화 함수)</h2>
<h3 id="1-이진-계단-함수">(1) 이진 계단 함수</h3>
<ul>
<li><p>초기의 퍼셉트론에서 쓰이던 것</p>
</li>
<li><p>이 함수로 들어온 입력이 특정 임계점을 넘으면 1(혹은 True)를 출력하고 그렇지 않을 때는 0을 출력</p>
</li>
<li><p>이진 분류 문제에서 꽤 유용</p>
</li>
<li><p>이진 계단 함수의 치역(range)은 00,11 (00과 11만 나온다는 뜻)</p>
</li>
<li><p>단층 퍼셉트론(single layer perceptrons)라는 초기의 신경망에서 자주 사용</p>
</li>
<li><p>선형적으로 구분 가능한(linearly separable) 문제(예를 들면, AND gate 또는 OR gate)를 구현 가능</p>
</li>
<li><p>하나의 선으로 구분할 수 있는 문제를 풀 수 있다.</p>
</li>
<li><p>단층 퍼셉트론은 이 XOR gate를 구현할 수 없</p>
</li>
<li><p>이진 계단 함수의 한계</p>
<ul>
<li>역전파 알고리즘(backpropagation algorithm)을 사용하지 못하는 것</li>
<li>이진 계단 함수는 00에서는 미분이 안 될 뿐더러 00인 부분을 제외하고 미분을 한다고 해도 미분값이 전부 00이 나옵니다. 때문에 역전파에서 가중치들이 업데이트되지않음</li>
<li>현실의 복잡한 문제는 사실상 해결하기 어렵다</li>
<li>다중 출력은 할 수 없다<ul>
<li>이진 계단 함수는 출력을 11 또는 00으로 밖에 주지 못하기 때문에 다양한 클래스를 구분해야 하는 문제는 해결할 수 없음</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="2-선형-활성화-함수">(2) 선형 활성화 함수</h3>
<ul>
<li>선형 활성화 함수(linear activation function)은 말 그대로 <strong>선형</strong>인 활성화 함수</li>
<li>다중 출력이 가능, 이진 분류는 물론이고 간단한 다중 분류 문제까지도 해결가능</li>
<li>미분이 가능해서 역전파 알고리즘 사용가능</li>
<li>대표적인 선형 함수는 f(x)=x, 신호를 받은 그대로 출력</li>
<li>선형 활성화 함수의 치역은 실수 전체</li>
<li>선형적으로 구분 가능한 문제를 해결가능</li>
<li>선형 활성화 함수의 한계는 비선형적 특성을 지닌 데이터를 예측하지 못 한다는 것<h3 id="3-비선형-활성화-함수">(3) 비선형 활성화 함수</h3>
</li>
<li>역전파 알고리즘을 사용가능, 다중 출력도 가능, 비선형적 특성을 지닌 데이터도 예측가능</li>
</ul>
<h4 id="3-1-시그모이드로지스틱sigmoid-혹은-로지스틱-logistic">(3-1) 시그모이드/로지스틱(sigmoid 혹은 로지스틱 logistic)</h4>
<ul>
<li>시그모이드 함수의 치역은 (0,1) 즉, 0&lt;&lt;σ(x)&lt;1</li>
<li>시그모이드 함수를 쓰는 가장 주된 이유가 바로 치역이 0과 1사이라는 것</li>
<li><strong>확률을 예측해야하는 모델에서 자주 사용</strong></li>
<li>로그램을 이용해서는 해석 미분을 구할 수 없기 때문에 꽤 많은 분들이 모르는 함수의 미분을 구할 때 수치 미분(numerical differentiation) 을 구한다. <img src="https://images.velog.io/images/milanryu_d/post/62a06497-8091-475f-b456-430fb0a4116b/image.png" alt=""><ul>
<li>수치 미분:  h의 값을 최대한 0에 가까운 값으로 잡아서 실제 미분값에 근사하게 만들어주는 것</li>
<li>h의 값을 0에 가까운 아주 작은 수로 잡으면 수치 미분을 통해 계산한 값과 실제 미분을 통해 계산한 값은 차이가 없을 것.적당한 h를 주지 않는다면 생각보다 큰 차이가 있을 수 있음 ((아주 작은 hh를 주려고 h=1e−20이라고 선언한다면, 컴퓨터가 이를 그냥 0으로 인식해 x+h=x라는 결과를 출력)</li>
</ul>
</li>
<li>시그모이드 함수 단점<ul>
<li>시그모이드 함수는 0 또는 1에서 포화(saturate) : 입력값이 아무리 커져도 함수의 출력은 1에 더 가까워져 갈 뿐 11 이상으로 높아 않고, 입력값이 아무리 작아져도 함수의 출력은 00에 더 가까워져 갈 뿐 00 이하로 떨어지지 않는다 -&gt; 포화가 되면 그래디언트가 0과 아주 가까워지는 것, -&gt; 역전파에서 이 0과 가까워진 그래디언트는 앞에서 온 역전파 값에 곱해지게 되는데 그렇게 되면 그 이후로 전파되는 모든 역전파 값이 0에 근접하게 되어 사실상 가중치 업데이트가 일어나지 않게된다 -&gt; 이것이 <strong>그래디언트를 죽인다</strong>라고 함(어떤 모델의 초기 가중치 값들을 아주 크게 잡아 포화상태를 만들면 역전파 때 그래디언트가 죽기 때문에 아무리 많이 에포크를 돌려도 훈련이 거의 되지 않음)</li>
<li>시그모이드 함수의 출력은 0이 중심(zero-centered)이 아님</li>
<li>훈련의 시간이 오래걸리는 것:  upstream gradient의 부호에 따라 이 노드의 가중치는 모두 양의 방향으로 업데이트되거나, 모두 음의 방향으로 업데이트가 됨 -&gt; 지그재그로 업데이트(2,4분면방향으로만)되어서, 최적값을 향해 직선적으로 업데이트되는 것보다 훨씬 시간이 오래걸림<img src="https://images.velog.io/images/milanryu_d/post/2a525fcb-8ccf-4441-be04-09a24cfe077b/image.png" alt=""></li>
</ul>
</li>
</ul>
<h4 id="3-2-softmax">(3-2) Softmax</h4>
<ul>
<li>10가지, 100가지 class 등 class의 수에 제한 없이 &quot;각 class의 확률&quot;을 구할 때</li>
<li>가위, 바위, 보 사진 분류 문제는 3개 class 분류 문제-&gt; softmax는 각 class의 확률값, 즉 (0.2, 0.5, 0.3)(0.2,0.5,0.3) 이렇게 출력값을 준다.</li>
<li>Softmax는 모델의 마지막 layer에서 활용 : 확률의 성질인 모든 경우의 수(=모든 class)의 확률을 더하면 1이 되는 성질(100%) 때문에</li>
</ul>
<p>(3-3) 하이퍼볼릭 탄젠트(tanh, Hyperbolic tangent)</p>
<ul>
<li>쌍곡선 함수 중 하나</li>
<li>시그모이드 함수의 치역은 (−1,1), 즉, -1&lt;&lt;σ(x)&lt;1</li>
<li>하이퍼볼릭 탄젠트 함수를 사용한 모델이 시그모이드 함수를 사용한 모델보다 더 빨리 훈련됨</li>
<li>하이퍼볼릭 탄젠트 함수의 단점<ul>
<li>-1 또는 1에서 포화</li>
</ul>
</li>
</ul>
<p>(3-4) ReLU(rectified linear unit)</p>
<ul>
<li>최근 가장 많이 사용되고 있는 활성화 함수</li>
<li>f(x)=max(0,x)</li>
<li>치역은 [0,∞]</li>
<li>하이퍼볼릭 탄젠트를 사용한 모델보다 몇 배 더 빠르게 훈련됨</li>
<li>시그모이드나 하이퍼볼릭 탄젠트처럼 비용이 높은 (예를 들면, exponential와 같은) 연산을 사용하지 않기 때문에 처리 속도가 빠름</li>
<li>0을 제외한 구간에서 미분이 가능</li>
<li>ReLU함수를 사용해도 충분히 x^2와 같은 비선형적 데이터를 예측해낼 수 있다</li>
<li>ReLU함수의 단점<ul>
<li>학습률을 크게 잡게되면 노드가 죽어버림-&gt; ReLU를 사용한 노드가 비활성화 되며 출력을 0으로만 하게되는것, 노드의 출력값과 그래디언트가 0이되는것(노드가죽는것)</li>
</ul>
</li>
</ul>
<p>(3-5) ReLU의 단점을 극복하기 위한 시도들</p>
<ul>
<li><p><strong>Leaky ReLU</strong></p>
<ul>
<li>ReLU 함수의 &#39;Dying ReLU&#39;를 해결하기 위한 시도 중 하나</li>
<li>f(x)=max(0.01x,x)</li>
<li>&#39;Dying ReLU&#39;를 발생시켰던 0을 출력하던 부분을 아주 작은 음수값을 출력하게 만들어 주어 해당 문제를 해결</li>
</ul>
</li>
<li><p><strong>PReLU</strong></p>
<ul>
<li>Leaky ReLU와 유사하지만 새로운 파라미터를 추가하여 0 미만일 때의 &#39;기울기&#39;가 훈련되게 함</li>
<li>f(x)=max(αx,x)</li>
<li>여기서 α 가 훈련과정에서 업데이트</li>
</ul>
</li>
<li><p><strong>ELU</strong></p>
<ul>
<li>ReLU의 모든 장점을 포함</li>
<li>0이 중심점이 아니었던 단점과, &#39;Dying ReLU&#39;문제를 해결한 활성화 함수</li>
<li>이 함수의 단점은 exponential 연산이 들어가서 계산 비용이 높아졌다</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 전처리 (FUN7~9)]]></title>
            <link>https://velog.io/@milanryu_d/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%84%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@milanryu_d/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%84%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Fri, 13 Aug 2021 02:44:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="data-표현">DATA 표현</h1>
</blockquote>
<h2 id="-numpy-as-npfun7">@ Numpy (as np)(Fun7)</h2>
<ol>
<li><p>벡터의 산술연산과 브로드캐스팅연산을 지원하는 다차원 배열 <code>ndarray</code>데이터 타입을 지원</p>
</li>
<li><p>Numpy를 이용하기 위해서는 <code>ndarray</code> 객체를 만드러야 함. <code>array</code>라고 부르기도함</p>
</li>
<li><p>import numpy as np 로 호출</p>
</li>
<li><p>np.array([1, 3, 5, 7])는 print했을때 <code>[1 3 5 7]</code>로 보여짐</p>
</li>
<li><ul>
<li>.size: 행렬내 원소개수</li>
<li>.shape: 행렬의 모양(행,렬)</li>
<li>.ndim: 행렬의 축(axis)의 갯수</li>
<li>.reshape(): 행렬의 모양을 바꿔주는 메소드, 모양을 바꾸기전후 행렬의 총원소개수 맞아야함-&gt; 10개의 원소를 3*3으로 reshape불가</li>
<li>np.zeros([행, 열]): 0으로 이루어짐</li>
<li>np.ones([행, 열]) : 1로 이루어짐<pre><code class="language-python">  np.zeros([2,3])
  array([[0., 0., 0.],
         [0., 0., 0.]])</code></pre>
</li>
</ul>
<ol start="6">
<li><p>브로드캐스팅</p>
</li>
<li><p>random : 다양한 난수생성</p>
</li>
</ol>
<ul>
<li>np.random.random(): 0과 1사이 실수형</li>
<li>np.random.rand() : 0 부터 1사이의 균일분포에서 난수 matrix array 생성, 괄호 안 숫자는 생성할 난수의 크기, 여러개의 인수를 넣으면 해당 크기를 가진 행렬을 생성함</li>
<li>np.random.randn() : 가우시안 표준 정규 분포에서 난수 matrix array 생성</li>
<li>가우시안 표준정규분포 </li>
<li>np.random.randint(0,10): 0~9 사이 정수형난수하나생성</li>
<li>np.random.choice:</li>
<li>np.random.permutation(10):원소의순서임의로바꿈</li>
<li>np.random.normal(loc=0, scale=1, size=5):정규분포를 따르는 변수를 임의로 표본추출, 평균(loc), 표준편차(scale), 추출개수(size)</li>
<li>np.random.uniform(low=-1, high=1, size=5): 균등분포를 따르는 변수를 임의로 표본추출, 최소(low), 최대(high), 추출개수(size)</li>
</ul>
<ol start="8">
<li>-arr.T</li>
</ol>
</li>
</ol>
<ul>
<li>np.transpose
<img src="https://images.velog.io/images/milanryu_d/post/694017a2-57b2-423a-953d-0ebecd1233d4/image.png" alt="">
<img src="https://images.velog.io/images/milanryu_d/post/1985dae3-724e-4a18-a202-5132c20f9a31/image.png" alt=""></li>
</ul>
<ol start="9">
<li>이미지의 행렬변환
1) matplotlib<br>2) PIL
3) from PIL import Image, ImageColor
4) 이미지 조작에쓰이는 메소드<ul>
<li>Image.open()</li>
<li>Image.size : 가로X세로</li>
<li>Image.filename</li>
<li>Image.crop((x0,y0,xt,yt))</li>
<li>Image.risize((w, h))</li>
<li>Image.save()</li>
</ul>
</li>
</ol>
<p>5) 이미지파일 행렬로 변환</p>
<ul>
<li>Pillow 라이브러리는 손쉽게 이미지를 Numpy ndarray로 변환<pre><code class="language-python">import numpy as np
img_arr = np.array(img)
print(type(img))
print(type(img_arr))
print(img_arr.shape)
print(img_arr.ndim)</code></pre>
</li>
<li>Data augmentation: 데이터 증강, 딥러닝에서 데이터 개수를 늘릴때 사용되는 기법</li>
<li><a href="https://www.tensorflow.org/tutorials/images/data_augmentation">https://www.tensorflow.org/tutorials/images/data_augmentation</a></li>
<li>컬러(RGB)이미지 파일이니 변환된 행렬은 Height X Width X RGB Channel의 모양, 3차원 </li>
</ul>
<ol start="10">
<li>구조화된데이터</li>
</ol>
<ul>
<li>자체적인 서브구조를 가진 데이터(ex: coin과 pcs 내부구조를 가지고, 테이블형태로 전개, 행(row)과 열(column)을 가진 데이터</li>
<li><code>.format()</code> : {} 사용해서 문자열출력할때 쓰는 함수(ex: my = &quot;My name is {}, I&#39;m {}&quot;.format(&quot;mimi&quot;,26))</li>
</ul>
<h4 id="11pandas">11.Pandas</h4>
<ul>
<li>구조화된 데이터를 key&amp; value 로만 나타내기에는 제한적이고 양이 많을때는 일일이 확인이 어렵다.</li>
<li>표형태로 보는것이 편하다. </li>
<li>pandas 라이브러리에서 제공하는 Series와 DataFrame 을 통해 자료구조확인</li>
<li>NumPy 기반으로 개발,</li>
<li>축의 이름에 따라 데이터를 정렬가능, </li>
<li>다양한 방식으로 데이터를 다룰수있음, 통합된 시계열 기능과 시계열데이터와 비시계열 데이터를 함께 다룰수있는 통합자료구조, </li>
<li>누락된 데이터 처리가능, </li>
<li>데이터통합 및 관계연산 수행가능</li>
</ul>
<p>11- 1. Series</p>
<ul>
<li>객체를 담을수있는 1차원 배열과 비슷한 자료구조, 배열형태(리스트, 튜플)를 통해 만들거나 NumPy 자료형으로 만들수있음
1) index</li>
<li>딕셔너리의 키가 인덱스로 설정됨</li>
<li>인덱스변경가능 -&gt; list의 인덱스(0부터시작하는 정수형태) 이면서 딕셔너리의 키(값이 할당되어있음)와 같은 기능으로 작용가능하다는 의미-&gt; 데이터에 유연하게 접근가능</li>
<li>슬라이싱(slicing) 기능을 지원</li>
<li>ser 이라는 Series 객체를 만듦. </li>
<li>index와 value가 존재<pre><code class="language-python">  ser = pd.Series([&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,3])
   ser 
   0    a
  1    b
  2    c
  3    3
  dtype: object</code></pre>
</li>
<li>ser.values로 Series 객체를 호출하며 array 형태로 반환됨<code>array([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, 3], dtype=object)</code></li>
<li>ser.index는 RangeIndex가 반환
<code>RangeIndex(start=0, stop=4, step=1)</code></li>
<li>인덱스에 다른값넣기(.index)
<code>ser2 = pd.Series([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, 3], index=[&#39;i&#39;,&#39;j&#39;,&#39;k&#39;,&#39;h&#39;])</code>
0대신에 i, j, k, h가 들어감</li>
<li><code>ser2.index = [&#39;Jhon&#39;, &#39;Steve&#39;, &#39;Jack&#39;, &#39;Bob&#39;]</code> 입력하면 i, j, k, h 대신 Jhon..이 들어감
2) name</li>
<li>Series 객체와 Series 인덱스는 모두 name 속성이 존재 DataFrame 에서 매우중요
<code>ser3.name = &#39;Country_PhoneNumber&#39;</code>
<code>ser3.index.name = &#39;Country_Name</code><pre><code class="language-python">Country_Name 
Korea      82
America     1
Swiss      41
Italy      39
Japan      81
China      86
Rusia       7
Name: Country_PhoneNumber, dtype: int64</code></pre>
</li>
<li>Series 객체의 이름을 설정</li>
<li>Series Index의 name 속성을 이용해 인덱스 이름을 설정(korea가 country_name으로 설정됨)</li>
</ul>
<p>11-2. DataFrame</p>
<ul>
<li>표(table)와 같은 자료 구조</li>
<li>여러개의 칼럼을 나타낼수있다.</li>
<li>csv 파일이나 excel 파일을 DataFrame으로 변환</li>
<li>index 는 세로 대표값(변경가능), coloumns는 가로 대표값들(변경가능)
<img src="https://images.velog.io/images/milanryu_d/post/49dfa425-6a69-4d6b-85e4-904ed99fec03/image.png" alt=""></li>
</ul>
<p>11-3. EDA(데이터탐색)</p>
<ul>
<li><p>.head() :  데이터셋의 처음 5개 행을 보여줌</p>
</li>
<li><p>.tail() :  마지막 5개 행 보여줌</p>
</li>
<li><p>.columns :  이용해서 데이터셋에 존재하는 컬럼명을 확인</p>
</li>
<li><p>.info() : 각 컬럼별로 Null값과 자료형을 보여주는 메소드</p>
</li>
<li><p>.describe() </p>
<ul>
<li>기본적 통계 데이터(평균, 표준편차 등)를 pandas에서 손쉽게 보기</li>
<li>각 컬럼별로 기본 통계데이터를 보여주는 메소드</li>
<li>개수(Count), 평균(mean), 표준편차(std), 최솟값(min), 4분위수(25%, 50% 75%), 최댓값(max)</li>
</ul>
</li>
<li><p>.isnull().sum()</p>
<ul>
<li>결측값(missing value) 확인시 필요</li>
<li>결측값을 isnull()로 확인후, sum()로 데이터갯수총합구하기</li>
</ul>
</li>
<li><p>.value_counts() : 범주형데이터(case,category)로 기재되는 컬럼(가로)이 각 범주별로 값이 몇개 있는지 구할수있다. (피벗같은 느낌..메소드앞에 있는 데이터들의 카테고리별 갯수를 알수있음) ex) <code>data[&#39;RegionName&#39;].value_counts()</code> 같은 경우 RegionName열 에 있는 값들의 갯수를 알려줌, </p>
</li>
<li><p>.value_counts().sum() : sum()메소드 추가해서 컬럼별 통계수치의 합을 구할수있음, 
(🤔결측치 확인이 가능할지도..그러나 메소드 앞 데이터명을 써서 일일이 확인해하는것은 비효율적인것같다.)</p>
</li>
<li><p>*<em>.corr() *</em></p>
<ul>
<li>상관관계를 나타내는 메소드. 모든 컬럼이 다른 컬럼 사이에 가지는 상관관계를 일목요연하게 확인해볼수있다. </li>
<li><strong>EDA에서 매우 중요한 단계. 불필요한 컬럼제외하기 위해 무엇이 불필요한지 알기위해 필요</strong></li>
<li>함께 움직이는 경향이 있다는 것, 두 변수의 연관된 정도를 나타낼뿐</li>
<li>인과관계를 설명하는 것은 아님. 원인결과를 알고싶으면 회귀분석을 통해 알수있음</li>
<li>r값은 x와 y가 완전히 동일하면 +1, 전혀다르면 0, 반대방향으로 완전히 동일하면 -1 </li>
<li>.drop(삭제할 값, 행에서 삭제할지 or 열에서 삭제할지, 원본에서 바로 바꾸려면)
<code>data.drop([&#39;Latitude&#39;,&#39;Longitude&#39;,&#39;Country&#39;,&#39;Date&#39;,&#39;HospitalizedPatients&#39;,  &#39;IntensiveCarePatients&#39;, &#39;TotalHospitalizedPatients&#39;,&#39;HomeConfinement&#39;,&#39;RegionCode&#39;,&#39;SNo&#39;], axis=1, inplace=True)</code></li>
<li>해석하자면, 행(디폴드값), 열에서 lat~삭제하고, 원본에서 바로 바꾸자<ul>
<li>axis=0 행(디폴드값), aixs=1 열(column):함수에 index, column이라는 파라미터를 사용하지 않을때 </li>
<li>axis = 1의 경우 정 열을 통째로 수정하는게 아닌 열의 각 요소들을 수정</li>
<li>원본에서 바로 바꾸고 싶다면 inplace=True</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<h1 id="visualization시각화">Visualization(시각화)</h1>
</blockquote>
<h2 id="-matplotlibfun8">@ matplotlib(Fun8)</h2>
<h3 id="1-막대그래프">1. 막대그래프</h3>
<p><img src="https://images.velog.io/images/milanryu_d/post/5b445f71-bbdb-4664-a683-078df42fde74/image.png" alt=""></p>
<ul>
<li>코드 뜯어보기<ul>
<li><code>import matplotlib.pyplot as plt</code> : 그래프 그리기 위해 라이브러리 가져오기</li>
<li><code>%matplotlib inline</code>  : 주피터 노트북을 실행할때 주로 같이 씀, 쥬피터노트북을 실행한 브라우저에서 바로 그림을 볼수있게함</li>
<li><code>subject = [&#39;English&#39;, &#39;Math&#39;, &#39;Korean&#39;, &#39;Science&#39;, &#39;Computer&#39;]
points = [40, 90, 50, 60, 100]</code> : 그래프 데이터 </li>
<li><code>fig = plt.figure()</code> :  figure()라는 객체는 도화지(그래프)<ul>
<li>figsize 인자값을 주어 그래프의 크기를 정할 수 있다.</li>
<li>fig = plt.figure(figsize=(5,2))</li>
</ul>
</li>
<li><code>ax1 = fig.add_subplot(1,1,1)</code> : figure()객체에 add_subplot 메소드를 이용해 축을 그려준다.<ul>
<li>add_subplot의 인자 (행, 열, 그려지는 좌표위치) 좌우순서 </li>
</ul>
</li>
<li><code>ax1.bar(subject, points)</code> : bar() 메소드를 이용해 막대그래프를 그립<ul>
<li>인자에 위에서 정의한 데이터들을 x, y순으로 넣어 줌</li>
</ul>
</li>
<li><code>plt.xlabel(&#39;Subject&#39;)</code> : x 라벨(제목)</li>
<li><code>plt.ylabel(&#39;Points&#39;)</code> : y 라벨(제목)</li>
<li><code>plt.title(&quot;Yuna&#39;s Test Result&quot;)</code> : 표제목</li>
</ul>
</li>
</ul>
<h3 id="2-선그래프">2. 선그래프</h3>
<p>-그래프 데이터 
csv_path = os.getenv(&quot;HOME&quot;) + &quot;/aiffel/data_visualization/AMZN.csv&quot;
data = pd.read_csv(csv_path ,index_col=0, parse_dates=True)
price = data[&#39;Close&#39;]</p>
<ul>
<li><p>축 그리기 및 좌표축 설정
<code>fig = plt.figure()</code> 도화지
<code>ax = fig.add_subplot(1,1,1)</code> 사각형만듬 1*1 총 1개의 그래프 1사분면에
<code>price.plot(ax=ax, style=&#39;black&#39;)</code> AxesSubplot:xlabel=&#39;Date&#39;
<code>plt.ylim([1600,2200])</code>  (1600.0, 2200.0) y축 범위
<code>plt.xlim([&#39;2019-05-01&#39;,&#39;2020-03-01&#39;])</code>  (18017.0, 18322.0) x 축 범위</p>
</li>
<li><p>주석달기
important_data = [(datetime(2019, 6, 3), &quot;Low Price&quot;),(datetime(2020, 2, 19), &quot;Peak Price&quot;)]
for d, label in important_data:
  ax.annotate(label, xy=(d, price.asof(d)+10), #주석을 달 좌표(x,y)</p>
<pre><code>         xytext=(d,price.asof(d)+100), #주석 텍스트가 위차할 좌표(x,y)
          arrowprops=dict(facecolor=&#39;red&#39;)) #화살표 추가 및 색 설정</code></pre></li>
<li><p>보여주기
plt.show()# 위에 검은창 사라짐</p>
</li>
<li><p>Pandas Series 데이터 활용</p>
<ul>
<li>price = data[&#39;Close&#39;]가 바로 Pandas의 Series</li>
<li>rice.plot(ax=ax, style=&#39;black&#39;)에서 Pandas의 plot을 사용</li>
<li>matplotlib에서 정의한 subplot 공간 ax를 사용</li>
</ul>
</li>
<li><p>plt.xlim(), plt.ylim()을 통해 x, y 좌표축의 범위를 설정</p>
</li>
<li><p>그래프 안에 추가적으로 글자나 화살표 등 주석을 그릴 때는 <code>annotate()</code>메소드  </p>
</li>
<li><p>grid() 메소드를 이용하면 그리드(격자눈금)를 추가</p>
</li>
<li><p>plt.plot() </p>
<ul>
<li><p>figure()객체를 생성하고 add_subplot()으로 서브 플롯을 생성하며 plot을 그리는 과정 생략 할수있는 명령</p>
</li>
<li><p>matplotlib은 가장 최근의 figure객체와 그 서브플롯을 그림</p>
</li>
<li><p>서브플롯이 없으면 서브플롯 하나를 생성</p>
</li>
<li><p>x데이터, y데이터, 마커옵션, 색상 이용가능 
-<code>plt.plot(x, np.sin(x),&#39;o&#39;)</code>
-<code>plt.plot(x, np.cos(x),&#39;--&#39;, color=&#39;black&#39;)</code> </p>
</li>
<li><p>plt.subplot(2,1,1) (행갯수, 열갯수, 위치(min: 1 max: 행*열)</p>
</li>
<li><p><code>linestyle=&#39;dotted&#39;</code></p>
</li>
</ul>
</li>
</ul>
<h3 id="3-그래프-사대천왕">3. 그래프 사대천왕</h3>
<p>(1) 데이터준비</p>
<ul>
<li>데이터 불러오기 <ul>
<li>Seaborn의 load_dataset() 메소드를 이용하여 api를 통해 다운로드가능</li>
<li><code>import pandas as pd</code>
 <code>import seaborn as sns</code>
 <code>tips = sns.load_dataset(&quot;tips.csv&quot;)</code></li>
</ul>
</li>
</ul>
<p>(2) EDA(데이터 살펴보기</p>
<ul>
<li>df = pd.DataFrame(tips) / df.head()</li>
</ul>
<p>(3) 범주형데이터</p>
<ul>
<li>막대 그래프를 사용하여 수치를 요약</li>
<li>일반적으로 가로, 세로, 누적, 그룹화된 막대 그래프를 사용</li>
<li><code>grouped = df[&#39;tip&#39;].groupby(df[&#39;sex&#39;])</code><ul>
<li>df[&#39;tip&#39;] 컬럼을 groupby()한다는 뜻</li>
<li>괄호안 인자 그룹에 대한 정보(총합,평균,데이터 량 등)가 grouped객체에 저장됨</li>
<li><code>grouped.size()</code> ;성별에 따른 데이터 량(팁 횟수)</li>
<li><code>grouped.mean()</code> : 위에서 선언된 변수 grouped 의 평균(mean)</li>
<li><code>sex = dict(grouped.mean())</code> : sex 변수는 평균데이터가 딕셔너리형태로 들어가있음</li>
<li>x = list(sex.keys()) x값</li>
<li>y = list(sex.values()) y값</li>
<li>그래프그리기<pre><code class="language-python">import matplotlib.pyplot as plt
plt.bar(x = x, height = y)
plt.ylabel(&#39;tip[$]&#39;)
plt.xlabel(&#39;sex&#39;)
plt.title(&#39;Tip by Sex&#39;)</code></pre>
</li>
</ul>
</li>
</ul>
<p>(4) (3)을 Seaborn과 Matplotlib을 활용해 간단히 보여줌</p>
<ul>
<li><code>sns.barplot(data=df, x=&#39;sex&#39;, y=&#39;tip&#39;)</code><ul>
<li>sns.barplot의 인자로 df를 넣고 원하는 컬럼을 지정</li>
<li><code>.barplot</code> : 지정한 변수의 평균을 계산<pre><code class="language-python">plt.figure(figsize=(10,6)) # 도화지 사이즈를 정합니다.
sns.barplot(data=df, x=&#39;sex&#39;, y=&#39;tip&#39;)
plt.ylim(0, 4) # y값의 범위를 정합니다.
plt.title(&#39;Tip by sex&#39;) # 그래프 제목을 정합니다.</code></pre>
</li>
<li>x값을 day로 주면 요일에 따른 그래프 그릴수있음</li>
</ul>
</li>
<li>범주형 그래프를 나타내기에 좋은 <strong>violineplot</strong> 을 사용
<img src="https://images.velog.io/images/milanryu_d/post/89c07cba-fcb5-41c8-8d1e-d8b2ca679711/image.png" alt="">
팁을 2달러 받은 사람은 6달러 받은 사람보다 많은것을 알수있게됨</li>
<li>catplot : 동일한 데이터가 얼마나 모여있는지 알수잇음
<img src="https://images.velog.io/images/milanryu_d/post/388f0a73-e830-49a2-9014-a886c2772158/image.png" alt=""></li>
</ul>
<p>(5) 시계열 데이터 시각화</p>
<ul>
<li><p>데이터 불러오기
<code>data = pd.read_csv(csv_path)</code>
<code>flights = pd.DataFrame(data)</code></p>
</li>
<li><p>그래프그리기
<code>sns.barplot(data=flights, x=&#39;year&#39;, y=&#39;passengers&#39;)</code> 평균
<code>sns.pointplot(data=flights, x=&#39;year&#39;, y=&#39;passengers&#39;)</code> 점으로 나타내기
<code>sns.lineplot(data=flights, x=&#39;year&#39;, y=&#39;passengers&#39;)</code> 선으로 나타내기
<code>sns.distplot(flights[&#39;passengers&#39;])</code>히스토그램 </p>
</li>
<li><p>히스토그램(Heatmap)</p>
<ul>
<li>데이터 차원에 대한 제한은 없으나 모두 2차원으로 시각화하여 표현</li>
<li>Heatmap을 그리기 위해 데이터를 pivot(어떤 축, 점을 기준으로 바꾸다)</li>
<li><code>pivot = flights.pivot(index=&#39;year&#39;, columns=&#39;month&#39;, values=&#39;passengers&#39;)</code> index는 왼쪽 첫번째열, colums는 값을 나눌 기준,year과 month로 pivot한을 코드로 짠거</li>
</ul>
</li>
</ul>
<blockquote>
<h1 id="다양한-데이터-전처리기법">다양한 데이터 전처리기법</h1>
</blockquote>
<h2 id="1-결측치missing-data">1. 결측치(Missing Data)</h2>
<h3 id="1-처리방법">1) 처리방법</h3>
<ul>
<li>결측치가 있는 데이터 제거</li>
<li>결측치를 어떤 값으로 대체</li>
</ul>
<h3 id="2-결측치-여부-확인하기">2) 결측치 여부 확인하기</h3>
<ul>
<li><code>trade = pd.read_csv(csv_file_path)</code></li>
<li><code>len(trade)</code> : 전체 데이터 건수</li>
<li><code>len(trade) - trade.count()</code> : 전체 데이터 건수에서 각 컬럼별 값이 있는 데이터 수를 빼기 , 숫자가 클수록 결측치가 많음</li>
<li><code>trade = trade.drop(&#39;기타사항&#39;, axis=1)</code> : 기타사항이 전체다 결측치라 컬럼 삭제 , .drop 메소드로 삭제, axis=1 은 열(칼럼)을 타나냄</li>
<li><code>DataFrame.isnull()</code> : 데이터마다 결측치 여부를 True, False로 반환</li>
<li><code>DataFrame.any(axis=1)</code> : 행마다 하나라도 True가 있으면 True, 그렇지 않으면 False를 반환</li>
<li><code>trade.isnull().any(axis=1)</code> : 각 행이 결측치가 하나라도 있는지&#39; 여부를 불리언 값으로 가진 Series가 출력</li>
<li><code>trade[trade.isnull().any(axis=1)]</code> : 결측치(빈칸)이 있는 데이터만 볼수있음, </li>
<li>결측치 데이터(수치형)일때 보완할 방법
(1) 특정값 지정 : 결측치 많을 경우 데이터분산이 실제보다 작아지는 문제발생
(2) 평균, 중앙값등으로 대체: 결측치 많을 경우 1번과 같은 문제발생
(3) 예측값으로 대체: 다른 데이터를 이용한 예측값
(4) 시계열 특성을 가진 데이터의 경우 : 앞뒤 데이터를 통해 결측치 대체(ex: 기온측정센서데이터 같은 경우  전후 데이터의 평균으로 보완)</li>
<li><strong><code>DataFrame.loc[행 라벨, 열 라벨]</code></strong> 을 입력하면 해당 라벨 데이터를 출력해줌, (ex : trade.loc[[188, 191, 194]] 같은경우 행 188,191,194만 보임, 열라벨이 없으므로)</li>
</ul>
<h2 id="2-중복데이터">2. 중복데이터</h2>
<h3 id="중복된-데이터-확인">중복된 데이터 확인</h3>
<ul>
<li><code>DataFrame.duplicated()</code> : 중복된 데이터 여부를 불리언 값으로 반환</li>
<li><code>trade[trade.duplicated()]</code> : 중복된 값을 직접 확인가능</li>
<li><code>trade.drop_duplicates(inplace=True)</code> : 중복된 데이터 삭제, 중복된 값이 있을경우 true 로 불리언값이 나오기때문에</li>
</ul>
<h2 id="3-이상치outlier">3. 이상치(Outlier)</h2>
<h3 id="1-이상치는-대부분-값의-범위에서-벗어나-극단적으로-크거나-작은-값-">(1) 이상치는 *<em>대부분 값의 범위에서 벗어나 극단적으로 크거나 작은 값 *</em></h3>
<h3 id="2-이상치-찾아내고-판단하기">(2) 이상치 찾아내고 판단하기</h3>
<ul>
<li><code>z score</code> <ul>
<li>평균과 표준편차를 이용하는 방법</li>
<li>평균을 빼주고 표준편차로 나눠서 계산 후 z score가 특정 기준을 넘어서는 데이터에 대해 이상치라고 판단</li>
<li>기준을 작게 하면 이상치라고 판단하는 데이터가 많아지고, 기준을 크게 하면 이상치라고 판단하는 데이터가 적어짐.<h3 id="3-이상치-판단후-이상치-처리방법-4가지">(3) 이상치 판단후 이상치 처리방법 4가지</h3>
</li>
</ul>
</li>
<li>이상치는 원래데이터에서 삭제후 이상치끼리 따로 분석</li>
<li>다른값으로 대체: 데이터가 적을 경우 다른값 대체가 나음. 최대값 최솟값을 설정 하여 데이터의 범위를 제한함</li>
<li><strong>다른 데이터를 활용하여 예측모델을 만들어</strong> 예측값 활용</li>
<li>binning을 통해 수치형 데이터를 범주형으로 바꾸기<ul>
<li>binning :비닝일과 부름, 변수구간화, 연속형 변수를 특정구간으로 나누어 범주형 또는 순위형 변수로변환하는 방법
<img src="https://images.velog.io/images/milanryu_d/post/b13e369b-b4fa-493b-a2c6-bf6f26530f64/image.png" alt=""></li>
<li>수치형데이터 : 양적자료, 관측된 값이 수치로 측정되는 자료, 키, 몸무게, 시험성적 등<ul>
<li>연속형 자료: 키, 몸무게와 같이 값이 연속적인 자료</li>
<li>이산형 자료: 자동차 사고건수와 같이 값이 셀수있는 자료</li>
</ul>
</li>
<li>범주형데이터 : 질적자료, 관측 결과가 몇개의 범주 또는 항목의형태로 나타나는 자료, 성별, 선호도(좋다, 그저그렇다, 싫다), 혈액형, 지역 등,머신러닝이나 딥러닝 프레임워크에서 범주형을 지원하지 않는 경우 <strong>원-핫 인코딩</strong>을 해야 합<ul>
<li>범주형 자료를 수치형 자료처럼 표현할수 있다. 예로 여자는 1, 남자는 0으로 표현, 수치형 자료처럼 표현되어있는 범주형 자료를 잘 구분해야함</li>
<li>순위형 자료 : 범주간에 순서의 의미가 있는 자료, 선호도(매우좋다, 좋다, 그저그렇다...)범주가 주어졌을때 순서가주어짐</li>
<li>명목형 자료: 혈액형과 같이 순서의 의미가 없는 자료<h3 id="4-z-score-메소드">(4) z-score 메소드</h3>
</li>
</ul>
</li>
</ul>
</li>
<li><code>def outlier(df, col, z)</code><ul>
<li>이상치인 데이터의 인덱스를 리턴하는 outlier라는 함수 만들기</li>
<li>데이터프레임 df, 컬럼 col, 기준 z를 인풋으로 받음</li>
</ul>
</li>
<li><code>abs(df[col] - np.mean(df[col]))</code> : 데이터에서 평균을 빼준 것에 절대값을 취하기</li>
<li><code>abs(df[col] - np.mean(df[col]))/np.std(df[col])</code> : 위에 한 작업에 표준편차로 나눠주기</li>
<li><code>df[abs(df[col] - np.mean(df[col]))/np.std(df[col])&gt;z].index</code> : 값이 z보다 큰 데이터의 인덱스를 추출</li>
<li>z의 값이 클수록 이상치가 적어짐</li>
<li><code>not_outlier</code> 는 <code>&lt;= z</code> : 이상치 값이 아닌 데이터만 추출</li>
</ul>
<h3 id="5-iqr-메소드">(5) IQR 메소드</h3>
<ul>
<li>z-score가 한계점이 있어 그에 따른 대안으로 이상치를 알아내는 방법임<ul>
<li>한계점 : 평균과 표준편차에 의존하기때문에 그 자체가 이상치의 영향을 많이 받음, 작은 데이터셋의 경우 z-score의 방법으로 이상치를 알아내기 어렵다. 특히 아이템이 12개이하인 데이터셋에서는 불가능함</li>
</ul>
</li>
<li>사분위범위수(Interquartile range) 라고 함</li>
<li>IQR은 제 3사분위수에서 제 1사분위 값을 뺀 값으로 <strong>데이터의 중간 50%의 범위</strong>
def outlier2(df, col):
  q1 = df[col].quantile(0.25)
  q3 = df[col].quantile(0.75)
  iqr = q3 - q1
  return df[(df[col] &lt; q1-1.5<em>iqr)|(df[col] &gt; q3+1.5</em>iqr)] <strong>&lt;이상치&gt;</strong></li>
</ul>
<p>outlier2(trade, &#39;무역수지&#39;)</p>
<h2 id="4-정규화normalization">4. 정규화(Normalization)</h2>
<ul>
<li>컬럼마다 단위가 다른 스케일이 크게 차이나는 데이터 입력시 머신러닝 모델 학습에 문제발생</li>
<li>모델의 파라미터를 업데이트하는 과정에서 범위가 큰 컬럼의 파라메터만 집중적으로 업데이트하는 문제가 생김</li>
<li>컬럼간에 범위가 크게 다를 경우 전처리 과정에서 데이터를 정규화</li>
<li>방법은 <strong>표준화(Standardization)</strong> 와 <strong>Min-Max Scaling</strong>가 있음<ul>
<li>Standardization 데이터의 평균은 0, 분산은 1로 변환<ul>
<li>코드로 나타내면 아래와 같음, (mean 평균, std는 표준편차)</li>
<li>x_standardization = (x - x.mean())/x.std()</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>Min-Max Scaling 데이터의 최솟값은 0, 최댓값은 1로 변환<ul>
<li>코드로 나타내면 아래와 같음(min 최소값, max 최대값)</li>
<li>x_min_max = (x-x.min())/(x.max()-x.min())</li>
<li>원래파일<img src="https://images.velog.io/images/milanryu_d/post/259276a0-eb26-47b7-b063-970d69d04f51/image.png" alt=""></li>
<li>표준화
<img src="https://images.velog.io/images/milanryu_d/post/1b65bd05-5efc-4607-8dc4-21137c9e7b60/image.png" alt=""></li>
<li>Min-Max Scaling<img src="https://images.velog.io/images/milanryu_d/post/b8a8614d-574d-4d0f-8baf-2bae885e1086/image.png" alt=""><br></li>
<li>그 외 방법으로 scikit-learn의 StandardScaler, MinMaxScaler 도있다.</li>
</ul>
</li>
<li><code>from sklearn.preprocessing import MinMaxScaler</code>
<code>scaler = MinMaxScaler()</code><ul>
<li>로그 변환 기법도 존재함</li>
</ul>
</li>
</ul>
<h2 id="5-원-핫-인코딩one-hot-encoding">5. 원-핫 인코딩(One-Hot Encoding)</h2>
<ul>
<li><p>머신러닝이나 딥러닝 프레임워크에서 범주형을 지원하지 않는 경우 </p>
</li>
<li><p>원-핫 인코딩이란 카테고리별 이진 특성을 만들어 해당하는 특성만 1, 나머지는 0으로 만드는 방법</p>
</li>
<li><p>pandas로 함</p>
</li>
<li><p><code>pd.get_dummies</code>함수</p>
</li>
<li><p>pd.concat(연결함 함수, 연결할 함수, axis=1(열, 옆으로 붙임)</p>
</li>
<li><p>pd.drop( 삭제할 컬럼명, axis=1 (열삭제), inplace=True)</p>
<ul>
<li>inplace 옵션은 drop과 같은 주요 메소드들이 가지고 있으며, 디폴트 값은 False</li>
<li>inplace 옵션이 True이면,  명령어를 실행 한 후 메소드가 적용된 데이터 프레임으로 반환, 반환값은 컬럼이 삭제된 Dataframe이 됨(삭제된값이 보임)</li>
</ul>
<h2 id="6-구간화binning">6. 구간화(Binning)</h2>
<ul>
<li>연속된 데이터를 구간을 나눠 분석할때 쓰는 방법</li>
<li><code>Data binning</code>혹은 <code>bucketing</code> 라고함</li>
<li>pandas의 cut 과 qcut을 이용해 수치형 데이터를 범주형 데이터로 변형</li>
<li>pd.cut함수 설명 : <a href="https://www.delftstack.com/ko/api/python-pandas/pandas-cut-function/">https://www.delftstack.com/ko/api/python-pandas/pandas-cut-function/</a></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[정규화(FUN22)_210811]]></title>
            <link>https://velog.io/@milanryu_d/%EC%A0%95%EA%B7%9C%ED%99%94</link>
            <guid>https://velog.io/@milanryu_d/%EC%A0%95%EA%B7%9C%ED%99%94</guid>
            <pubDate>Wed, 11 Aug 2021 03:02:20 GMT</pubDate>
            <description><![CDATA[<h4 id="1--regularization">1.  Regularization</h4>
<ul>
<li>정칙화</li>
<li>L1, L2 Regularization( Lasso와 Ridge 모델), Dropout, Batch normalization</li>
<li>모델이 train set의 정답을 맞추지 못하도록 <strong>오버피팅을 방해(train loss가 증가)</strong> 하는 역할</li>
<li>오버피팅 :  한국어로 과적합이라고 하며, train set은 매우 잘 맞추지만, validation/test set은 맞추지 못하는 현상</li>
<li>train loss는 약간 증가하지</li>
<li>validation loss나 최종적인 test loss를 감소시키려는 목적</li>
</ul>
<h4 id="2-normalization">2. Normalization</h4>
<ul>
<li>정규화</li>
<li><strong>데이터</strong>의 형태를 좀 더 의미 있게, 혹은 트레이닝에 적합하게 <strong>전처리</strong>하는 과정</li>
<li>데이터를 z-score로 바꾸거나 minmax scaler를 사용하여 0과 1사이의 값으로 분포를 조정하는 것</li>
<li>모든 피처의 범위 분포를 동일하게 하여 모델이 풀어야 하는 문제를 좀 더 간단하게 바꾸어 주는 전처리 과정<ul>
<li>돈 천원~ 일억사이, 시간 0시~ 24시</li>
<li>학습 초반에는 데이터 거리 간의 측정이 피처 값의 범위 분포 특성에 의해 왜곡되어 학습에 방해를 받게 되는 문제</li>
<li>피처의 스케일이 0과 1 사이로 변환, </li>
<li>가장 큰 값을 1, 가장 작은 값을 0으로 하여 축 범위가 바뀜</li>
<li>데이터의 상대적인 분포는 바뀌지 않음</li>
</ul>
</li>
</ul>
<h4 id="3-linear-regression의-결과값과-l2-regularization-결과값은-비슷함">3. Linear regression의 결과값과 L2 Regularization 결과값은 비슷함</h4>
<p><img src="https://images.velog.io/images/milanryu_d/post/c02827ba-2c07-4ea2-9856-0d0bef0f50f3/image.png" alt=""></p>
<h4 id="4-l1-regularization">4. L1 Regularization</h4>
<ul>
<li><strong>가중치가 적은 벡터에 해당하는 계수를 0으로 보내면서 차원 축소와 비슷한 역할</strong></li>
<li>iris 데이터로 한것</li>
<li>Linear Regression 문제를 푸는데 L1 Regularization에서는 문제가 풀리지 않음<pre><code class="language-python">#L1 regularization은 Lasso로 import 합니다.
from sklearn.linear_model import Lasso
</code></pre>
</li>
</ul>
<p>L1 = Lasso()
L1.fit(X.reshape(-1,1), Y)
a, b=L1.coef_, L1.intercept_
print(&quot;기울기 : %0.2f, 절편 : %0.2f&quot; %(a,b))</p>
<p>plt.figure(figsize=(5,5))
plt.scatter(X,Y)
plt.plot(X,L1.predict(X.reshape(-1,1)),&#39;-b&#39;)
plt.title(&#39;petal-sepal scatter with L1 regularization(Lasso)&#39;) 
plt.xlabel(&#39;petal length (cm)&#39;)
plt.ylabel(&#39;sepal length (cm)&#39;)
plt.grid()
plt.show()</p>
<pre><code>![](https://images.velog.io/images/milanryu_d/post/e0a41f8b-aa81-4ea7-975c-69ddb102dd4b/image.png)
-  X가 1차원 값인 선형회귀분석 같은 경우에는 L1 Regularization이 의미가 없다
- L1 Regularization을 사용할 때는 **X가 2차원 이상인 여러 컬럼 값이 있는 데이터**일 때 실제 효과를 볼 수 있음
- wine dataset(13개의값을 가짐,1행)이용하여 Linear Regression과 L1 Regularization의 차이확인가능(iris 데이터는 특성이 4개로 컬럼수가 너무작아서)
  - print(모델명.coef_)을 통해 확인가능
    - coef_: 기울기(가중치)

  - Linear Regression
    - 모든 컬럼의 가중치를 탐색

  -  L1 Regularization
     - 총 13개 중 7개를 제외한 나머지의 값들이 모두 0임을 확인
     - 어떤 컬럼이 결과에 영향을 더 크게 미치는지 확실히 확인가능

- 다른 문제에서도 error의 차이가 크게 나지 않는다면, 차원 축소와 비슷한 개념으로 변수의 값을 7개만 남겨도 충분히 결과를 예측할 수 있다
- Linear Regression과 L1, L2 Regularization의 차이 중 하나는 α라는 하이퍼파라미터(수식에서는 λ)가 하나 더 들어간다는 것이고, 그 값에 따라 error에 영향을 미친다는 점

#### 5. L2 Regularization
- iteration:  iteration은 1-epoch를 마치는데 필요한 미니배치 갯수를 의미합니다. 다른 말로, 1-epoch를 마치는데 필요한 파라미터 업데이트 횟수 이기도 합니다. 각 미니 배치 마다 파라미터 업데이터가 한번씩 진행되므로 iteration은 파라미터 업데이트 횟수이자 미니배치 갯수입니다. 예를 들어, 700개의 데이터를 100개씩 7개의 미니배치로 나누었을때, 1-epoch를 위해서는 7-iteration이 필요하며 7번의 파라미터 업데이트가 진행
- 0이 아닌 0에 가깝게 보내지만 제곱 텀이 있기 때문에 L1 Regularization보다는 수렴 속도가 빠르다는 장점

#### 6. norm
- norm : 벡터, 함수, 행렬에 대해서 크기를 구하는 것,  행렬의 Norm
- vector norm
  - p=∞ 인 Infinity norm의 경우는 가장 큰 숫자를 출력
- matrix norm
  - 행렬의 norm
  -  p=1인 경우에는 컬럼의 합이 가장 큰 값이 출력되고, p=∞인 경우에는 로우의 합이 가장 큰 값이 출력

#### 7. Dropout
- 확률적으로 랜덤하게 몇 가지의 뉴럴만 선택하여 정보를 전달하는 과정
- 몇 가지의 값들을 모든 뉴런에 전달하는 것이 아닌 **확률적으로 버리면서 전달**하는 기법
-  오버피팅을 막는 Regularization layer 중 하나
- 확률을 너무 높이면, 제대로 전달되지 않으므로 학습이 잘되지 않고, 확률을 너무 낮추는 경우는 FC(fully connected layer)와 같습니다. fully connected layer에서 오버피팅이 생기는 경우에 주로 Dropout layer를 추가
  - fully connected layer란
    - 완전히 연결 되었다라는 뜻으로,한층의 모든 뉴런이 다음층이 모든 뉴런과 연결된 상태로 2차원의 배열 형태 이미지를 1차원의 평탄화 작업을 통해 이미지를 분류하는데 사용되는 계층입니다.
      1. 2차원 배열 형태의 이미지를 1차원 배열로 평탄화
      2. 활성화 함수(Relu, Leaky Relu, Tanh,등)뉴런을 활성화
      3. 분류기(Softmax) 함수로 분류
      1~3과정을 Fully Connected Layer
      [출처] [딥러닝 레이어] FC(Fully Connected Layers)
![](https://images.velog.io/images/milanryu_d/post/24997804-3b01-4818-b24c-2fe054b7d6ad/image.png)그림출처 : https://dsbook.tistory.com/59
- 코드 : https://keras.io/api/layers/regularization_layers/dropout/
- optimizer=&#39;adam&#39; : 옵티마이저란, 머신러닝 학습 프로세스에서 실제로 파라미터를 갱신시키는 부분을 의미,오차역전파법과 같은 방식으로, 각 파라미터의 기울기를 그라디언트로 구하여 재료를 구해왔으면, 이를 이용하여 실제 가중치 변화를 주는 부분

#### 8. Batch Normalization
- gradient vanishing, explode 문제를 해결하는 방법
  - gradient vanishing : 역전파 과정에서 입력층으로 갈 수록 기울기(Gradient)가 점차적으로 작아지는 현상, 입력층에 가까운 층들에서 가중치들이 업데이트가 제대로 되지 않으면 결국 최적의 모델을 찾을 수 없게 됨.
  - explode : 기울기가 점차 커지더니 가중치들이 비정상적으로 큰 값이 되면서 결국 발산되기도 합니다. 이를 기울기 폭주(Gradient Exploding)이라고 하며, 순환 신경망(Recurrent Neural Network, RNN)에서 발생할수있다.
  출처: https://wikidocs.net/21690
 -  z-score로 normalize 
    - Z-점수 정규화, 
    - 이상치(outlier) 문제를 피하는 데이터 정규화 전략
    - X라는 값을 Z-점수로 바꿔주는 식 -&gt; (X - mean(평균)) / .std(표준편차)
    - feature의 값이 평균과 일치하면 0으로 정규화
    - 표준편차 : 자료들이 갖는 분포를 확인하기 위한 것이 분산 또는 표준편차, 자료들이 평균 근처에 모여 있는지 아니면 떨어져 있는지를 나타내는 지표, 표준편차의제곱=분산
    - 평균보다 작으면 음수, 평균보다 크면 양수
    - 계산되는 음수와 양수의 크기는 그 feature의 표준편차에 의해 결정
    - 데이터의 표준편차가 크면(값이 넓게 퍼져있으면) 정규화되는 값이 0에 가까워짐

- batch_size=2048
- epoch: 전체 데이터를 1회 훑어 학습하는거
- Step: 파라미터를 1회 업데이트 하는것
- batch_size : step 1회에 사용되는 데이터갯수

&gt; 예제 참고
- Fashion MNIST 이미지 분류하기https://codetorial.net/tensorflow/fashion_mnist_classification.html
 - Iteration * Batch Size = Epoch 이므로, 한 데이터셋을 도는데 최대한 병렬처리가 가능하게끔 배치 크기를 주는게 이득


</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[210702_교육 5일차]]></title>
            <link>https://velog.io/@milanryu_d/210702</link>
            <guid>https://velog.io/@milanryu_d/210702</guid>
            <pubDate>Mon, 05 Jul 2021 01:07:15 GMT</pubDate>
            <description><![CDATA[<p>🔒 오늘의 담임쌤 </p>
<blockquote>
<h1 id="aiffel-노드스터디">AIFFEL 노드스터디</h1>
</blockquote>
<h2 id="텍스트의-다양한-변신">텍스트의 다양한 변신</h2>
<ol>
<li>텍스트 데이터를 문자열로 저장한다는것. 
type(변수)를 넣으면 자료형확인가능</li>
</ol>
<ul>
<li>인코딩 (encoding): 문자열을 바이트로 변환하는 과정</li>
<li>디코딩 (decoding) : 바이트를 문자열로 변환하는 과정</li>
</ul>
<h3 id="정규표현식-시작하기">정규표현식 시작하기</h3>
<ol>
<li><p>import re : 파이썬에서 표준라이브러리인 re 모듈을 import해서 정규표현식을 사용할수있음.</p>
<ul>
<li>정규표현식 사용법
1) 컴파일: 찾고자 하는 문자열의 패턴을 정의
2) 정의된 패턴과 매칭되는 경우를 찾아 다양한 처리를 하는
2단계로 나누어짐.<img src="https://images.velog.io/images/milanryu_d/post/e7b7f8be-5f05-4000-ad00-62d98eeda68a/image.png" alt=""></li>
</ul>
</li>
<li><p>메소드</p>
</li>
</ol>
<ul>
<li>search() : 일치하는 패턴 찾기 (일치 패턴이 있으면 MatchObject를 반환합니다)</li>
<li>match() : search()와 비슷하지만, 패턴이 검색대상에 처음부터 일치해야 합니다.</li>
<li>findall() : 일치하는 모든 패턴 찾기 (모든 일치 패턴을 리스트에 담아서 반환합니다)</li>
<li>split() : 패턴으로 나누기</li>
<li>sub() : 일치하는 패턴으로 대체하기
아래는 search(), match() 등이 리턴하는 MatchObject가 가진 메소드입니다.</li>
<li>group() : 실제 결과에 해당하는 문자열을 반환합니다.</li>
</ul>
<p><img src="https://images.velog.io/images/milanryu_d/post/a78fde65-a45e-49dd-9254-9019f450baf1/image.png" alt=""></p>
<blockquote>
<h1 id="풀잎스쿨">풀잎스쿨</h1>
</blockquote>
<p>****25.1 딕셔너리(중요도높음, 코딩테스트, )조작방법 함수는 많이 문제를 풀어봐야 외워진다. </p>
<p>popitem
get
****딕셔너리 다룰때 많이 쓰이는 메소드
1.items 키랑 값을 불러와
2.key
3.values
4. defaultdict 모듈 </p>
<p>zip 도 종종 볼수있다. </p>
<p>리스트 for문
for i range(1)</p>
<p>딕셔너리 for 문
for 키, 값 in 딕셔너리.items():
 반복할 코드
for 키, 값 in 딕셔너리.keys():
 반복할 코드
for 키, 값 in 딕셔너리.vlaues():
 반복할 코드</p>
<p>****딕셔너리 컴프렌션 표현식
딕셔너리 안에다가 for 문을 넣어서 딕셔너리 생성 
형태를 눈에 잘 익혀두면 좋다. </p>
<p>리스트보다 복잡한 구조.</p>
<p>***key와 value 자리 바꾸기: 유용한기법</p>
<p>심사문제
26.9
reult = 0 쓰는 이유는 return 할때 초기화시키기위해</p>
<p>백준 코테 문제 
<img src="https://images.velog.io/images/milanryu_d/post/33c91ada-7770-4f20-aeb8-4d6f2c3bfa82/image.png" alt=""></p>
<p>나의문제: 답을 먼저 찾았다...</p>
<p>🔑담임선생님 질문 답하기</p>
<ol>
<li>선형 회귀란</li>
</ol>
<ul>
<li>머신 러닝의 가장 큰 목적은 실제 데이터를 바탕으로 </li>
<li>모델을 생성해서  </li>
<li>만약 다른 입력 값을 넣었을 때 발생할 아웃풋을 예측하는 데에 있다.</li>
<li>이때 우리가 찾아낼 수 있는 가장 직관적이고 간단한 모델은 선(line)이다. </li>
<li>그래서 데이터를 놓고 그걸 가장 잘 설명할 수 있는 <strong>선을 찾는 분석하는 방법</strong>을 <strong>선형 회귀(Linear Regression) 분석</strong>이라 부른다.</li>
</ul>
<h4 id="--실제-값과-예측-밧의-차이를-최소화하는-직선형-회귀선을-최적화하는-방식">- 실제 값과 예측 밧의 차이를 최소화하는 직선형 회귀선을 최적화하는 방식</h4>
<h4 id="--회귀계수를-선형-결합으로-표한할수이는-모델-우리가-추정할-대상의-파라미터가-어떻게-생겼느냐">- 회귀계수를 선형 결합으로 표한할수이는 모델 우리가 추정할 대상의 파라미터가 어떻게 생겼느냐</h4>
<ul>
<li>회기란:회귀는 여러개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링하는 기법</li>
</ul>
<ol start="2">
<li><p>여기서 선형은 무엇을 의미할까?-----</p>
</li>
<li><p>우리는 왜 딥러닝에서 선형회귀를 배울까-----</p>
</li>
<li><p>선형 회귀로 어떤 데이터 또는 주제에 대한 모델을 만들수있을까----</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[210701_교육 4일차]]></title>
            <link>https://velog.io/@milanryu_d/210701</link>
            <guid>https://velog.io/@milanryu_d/210701</guid>
            <pubDate>Fri, 02 Jul 2021 00:09:24 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="aiffel-노드스터디">AIFFEL 노드스터디</h1>
</blockquote>
<h2 id="3일차터미널로-배우는-리눅스-운영체제">(3일차)터미널로 배우는 리눅스 운영체제</h2>
<h3 id="1-명령어">1. 명령어</h3>
<p>❤️: 필수로 꼭 알아두어야 하는 가장 기본적인 명령어입니다.
👍️: 사용법을 기억해두면 편리한 명령어입니다.
👌️: 이런 명령어가 있다는 것만 알아두고 필요할 때마다 검색해서 사용하면 충분합니다.</p>
<p>❤️<code>echo</code> : 뒤이어입력한 내용출력
👍️<code>pwd</code> : Present Workong Directory 약자 현재 내가 위치한 디렉토리 위치 출력
❤️<code>ls</code> : 현재 디렉토리 내의 파일 및 폴더들을 출력
<code>~</code>홈디렉토리 /<code>.</code> 현재폴더 /<code>..</code> 상위폴더 .으로 시작하는 파일은 숨김파일 
<code>ls --all(-a)</code> 숨김파일들까지 표시
<code>ls --help</code> : 도움말
❤️cd: Change Directory의 약자로, 뒤에 따라오는 폴더로 내가 있는 셸의 현재 위치를 이동
 @<code>상대경로</code> 와<code>절대경로</code>: 명령을 입력하는 시점에 내가 현재 있는 디렉토리에 영향을 받는 위치 표시 방식을 상대 경로라고 합니다. 반면에 /home/june/aiffel와 같이 어디서 입력하든 똑같은 곳을 가리키도록 위치 전체를 적어주는 것을 절대 경로
👍️<code>ls -alrt</code> :유용할때가 많다.
=ls -l -a -rt(최신파일이라래쪽으로 표시됨)
👌️ 일부 주요 폴더들의 용도 및 내용물
<code>/home</code>: 사용자별 홈 디렉토리들이 있는 곳
<code>/root</code>: 최고 관리자 계정의 홈 디렉토리
<code>/mnt</code>: 저장장치(HDD, SSD)가 붙는 위치
<code>/media</code>: 이동식 미디어(USB 드라이브)가 붙는 위치
<code>/tmp</code>: 재부팅 시 삭제될 임시 파일들을 저장하는 폴더
<code>/dev</code>: 컴퓨터에 연결된 하드웨어 및 가상 기기(device)들을 가리키는 파일들
<code>/proc</code>: 현재 실행 중인 프로세스들을 가리키는 파일들
<code>/etc</code>: 각종 설정 파일들
<code>/bin</code>: 실행 가능한 프로그램(binary)들
<code>/sbin</code>: 시스템 관리용 프로그램들
<code>/usr</code>: 다중 사용자 모드에서 사용 가능한 파일 및 프로그램들 (root 계정만 있는 단일 사용자 모드에서는 사용 불가)
<code>/var</code>: 캐시, 로그 등 시스템 구동 간 계속 내용이 바뀌는 파일들</p>
<h3 id="2-운영체제">2. 운영체제</h3>
<p>2.1 운영체제란</p>
<ul>
<li><p>컴퓨터라는 대저택을 관리하는 집사와 같은 존재. 집주인(최고관리자)의 권한을 위임받아 요리사, 정원사, 청소부 등 각각의 보조 인원(어플리케이션)들에게 재산(연산 자원)을 적절히 분배하여 운영하고, 서로 권한을 침범할 수 없도록 관리하는 역할</p>
</li>
<li><p>커널은 보안, 자원관리, 디바이스 인터페이스 추상화 등 바로 대저택의 집사와 같은 역할을 하는 운영체제의 가장 핵심적인 구성요소</p>
</li>
</ul>
<p>2.2 셀 </p>
<ul>
<li><p>운영체제껍데기</p>
</li>
<li><p>그래픽기반 GUI셀 컴퓨팅작업을 수행하기 위해 그래픽(아이콘 및 이미지)를 제공, GUI 사용하는 동안 명령을 기억할 필요없다. window, 우분투 및 mac</p>
</li>
<li><p>텍스트기반 CLI 셀  명령을 사용해서 컴퓨팅 작업을 수행함. 사용자는 명령에 대해 잘 알고있어야 한다 . Dos Linux 운영체제</p>
</li>
</ul>
<p>2.3 프로세스와 스레드
😥프로세스와 스레드라는 것에 대해 이해하기가 쉽지않아 여러자료를 살펴봄
유튜브:<a href="https://www.youtube.com/watch?v=LLiV5Yz1AWg%5C">https://www.youtube.com/watch?v=LLiV5Yz1AWg\</a></p>
<h3 id="3-리눅스-기반-운영체제">3. 리눅스 기반 운영체제</h3>
<p>3.1 프로세스 관리와 시스템 콜
👍️ <code>ps</code>: 현재 터미널과 관련된 프로세스 목록을 출력합니다.
👍️ <code>ps -ef</code>: 모든 터미널에서 현재 실행중인 프로세스 목록 및 부가정보를 출력합니다.
👍️ <code>grep</code>: 입력으로 전달된 내용에서 특정 문자열을 포함한 라인만 선택해서 출력합니다. 파이프(|)를 통해 다른 명령문 실행결과와 결합해서 사용할 때 특히 유용합니다.
❤️ <code>sudo</code>: 이어지는 명령을 최고 관리자 권한으로 실행합니다.
👍️ <code>kill</code>: PID에 해당하는 프로세스에 시그널을 보냅니다.</p>
<p>3.2 프로그램과 환경변수
👌️ <code>which</code>: 명령어의 전체 경로를 출력합니다.</p>
<p>✅<code>$PATH</code> </p>
<ul>
<li>셸에서 단어 앞에 <code>$</code>가 붙으면 환경 변수(environment variable) 를 의미 <code>echo $PATH</code>는 <code>PATH</code>라는 이름의 환경 변수(<code>$</code>)의 값을 출력(<code>echo</code>)하라는 뜻</li>
<li>PATH 환경 변수는 셸이 프로그램을 실행할 때 참조할 경로들을 나타냄</li>
</ul>
<p>👌️ <code>export</code>: 셸 변수나 함수를 현재 환경으로 내보냅니다.
👌️ <code>env</code>: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 실행합니다. 명령어가 제공되지 않은 경우 현재 환경의 정보를 출력합니다.
❤️ <code>apt-get</code>: APT 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거합니다.
❤️ <code>cat</code>: 하나 이상의 텍스트 파일을 순서대로 출력합니다.
👍️ <code>chown</code>: 대상 파일의 소유 사용자와 그룹을 변경합니다.
👍️ <code>chmod</code>: 대상 파일의 권한을 변경합니다.
👍️ sort: 입력된 텍스트를 줄 단위로 정렬합니다.</p>
<p>✅<code>sudo</code>(Switch User Do) 명령어</p>
<p>✅ 셸 편리한 기능</p>
<ul>
<li>터미널 에뮬레이터에서 무언가를 복사하거나 붙여넣을 때에는 Ctrl+Shift+C, Ctrl+Shift+V를 사용해야 합니다.</li>
<li>위아래 화살표를 통해 이전에 실행한 명령들을 다시 입력할 수 있습니다.</li>
<li>history 명령을 통해 기존에 실행한 명령들을 표시할 수 있습니다. 여기서 나오는 번호를 참고하여 !번호를 실행하면 해당 번호의 명령이 다시 실행됩니다.</li>
<li>Ctrl+A, Ctrl+E를 통해 명령어의 앞, 뒤로 커서를 이동할 수 있습니다.</li>
<li>clear 명령어 또는 Ctrl+L을 통해 기존에 터미널에 출력되었던 내용을 깨끗이 지울 수 있습니다.</li>
<li>실수로 Ctrl+z를 눌러 프로세스를 중지시켰다면, fg를 통해 다시 재개시킬 수 있습니다.</li>
<li>실수로 vi 편집기에 처음 들어갔다면, Ctrl+C 또는 Esc를 누른 뒤 :q!를 입력하고 엔터를 눌러 편집기를 종료할 수 있습니다.</li>
</ul>
<p>✅ 셸 명령어모음
셸 환경
👍history: 셸 명령어 이력을 출력합니다.
👍man: 프로그램의 매뉴얼 페이지를 출력합니다.
👌which: 명령어의 전체 경로를 출력합니다.
👌export: 셸 변수나 함수를 현재 환경으로 내보냅니다.
👌env: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 실행합니다. 명령어가 제공되지 않은 경우 현재 환경의 정보를 출력합니다.
텍스트 처리
❤️echo: 뒤이어 입력한 내용을 출력합니다.
❤️cat: 하나 이상의 텍스트 파일을 순서대로 출력합니다.
👍sort: 입력된 텍스트를 줄 단위로 정렬합니다.
👍less: 텍스트 파일의 내용을 자유롭게 조회하고 검색합니다.
👍head: 텍스트 파일의 앞 몇 줄만 출력합니다.
👍tail: 텍스트 파일의 마지막 몇 줄만 출력합니다.
👍cut: 텍스트를 구분자(delimiter)에 따라 나눕니다.
👍uniq: 텍스트 중 중복 값들을 제거합니다.
👍grep: 정규식을 활용해 텍스트를 검색합니다.
👍wc: 텍스트를 단어, 줄, 문자 등 단위로 셉니다.
👌comm: 텍스트 파일을 비교합니다.
👌zcat: 압축된 텍스트 파일을 출력합니다.
👌sed: 정규식을 활용해 텍스트를 변형합니다.
👌awk: 텍스트를 스캔하고 변형합니다.
파일 제어 및 이동
❤️ls: 현재 디렉토리 내의 파일 및 폴더들을 출력합니다.
❤️cd: Change Directory의 약자로, 뒤에 따라오는 폴더로 내가 있는 셸의 현재 위치를 이동시킵니다.
❤️cp: 파일을 복사합니다.
❤️mv: 파일을 이동합니다.
❤️rm: 파일을 삭제합니다. 폴더를 삭제하기 위해서는 -r (recursive) 옵션을, 빈 폴더가 아니더라도 내부까지 삭제하려면 -f (force) 옵션을 함께 사용해야 합니다.
👍chown: 대상 파일의 소유 사용자와 그룹을 변경합니다.
👍chmod: 대상 파일의 권한을 변경합니다.
👍find: 파일을 찾습니다.
👍pwd: Present Working Directory의 약자입니다. 현재 내가 &gt;위치한 디렉토리 위치를 출력합니다.
👌ln: 파일에 대한 링크를 생성합니다.
👌touch: 파일 접근 및 수정 시간을 변경합니다. 빈 파일을 만드는데도 사용할 수 있습니다.
👌tar: 파일 및 폴더를 하나의 아카이브 파일로 통합하고 압축합니다.
👌mount: 새로운 저장장치를 파일시스템으로서 추가합니다.
👌rename: 여러 파일들의 이름을 규칙에 따라 한번에 변경합니다.
👌df: 파일시스템의 남은 용량을 표시합니다.
시스템 및 프로세스 제어
❤️sudo: 이어지는 명령을 최고 관리자 권한으로 실행합니다.
❤️apt-get: APT 패키지 관리자를 통해 공인 저장소에서 패 &gt;키지를 가져다 설치하거나 제거합니다.
👍ps: 현재 프로세스 목록을 출력합니다.
👍kill: PID에 해당하는 프로세스에 시그널을 보냅니다.
👌fg: 배경에서 실행되는 작업을 전경(foreground)으로 가져옵니다.
👌bg: 작업을 배경(backgound)으로 보냅니다.
👌jobs: 전경 및 배경 작업의 목록을 표시합니다.
기타
❤️ssh: 원격으로 셸에 접속합니다.
👍tmux: 여러 개의 셸 세션을 관리하고, 터미널 접속이 끊어지더라도 셸 세션을 유지합니다.
👍watch: 이어지는 명령을 주기적으로 실행하여 표시합니다.
👍curl: 주어진 URL과 통신합니다.
👍wget: 네트워크를 통해 파일을 다운로드합니다.
👍scp: SSH를 통해 원격으로 파일을 전송합니다.
👌ssh-keygen: SSH 공개키 비밀키 쌍을 생성합니다.
👌ssh-copy: SSH 공개키를 해당 서버에 등록합니다.
👌rsync: 원격으로 파일을 동기화합니다.
👌xarg: 명령어를 구성하여 실행합니다. 이전 명령에서 인자를 넘겨받아 실행하거나, 다중 프로세스를 사용하여 명령을 병렬로 실행하는 등의 작업이 가능합니다.
👌cron: 주기적으로 실행될 명령을 등록합니다.
👌htop: 프로세스 목록 및 자원 사용량을 시각적으로 표시합니다.</p>
<hr>
<h2 id="4일차python">(4일차)Python</h2>
<h3 id="학습목표">학습목표</h3>
<ul>
<li>파이썬 기본개념 이해 &amp; 사용<ul>
<li>변수(variable)</li>
<li>함수(function)</li>
<li>연산자(operator)</li>
<li>제어문(control statments)</li>
<li>자료형(data types)</li>
</ul>
</li>
<li>오류메세지 </li>
<li>코드 이해 &amp; 수정<h4 id="1-함수와-변수">1. 함수와 변수</h4>
</li>
</ul>
<p>1.1 print(1) : 함수(인자)</p>
<ul>
<li>인자 = 입력값 = argument</li>
<li><code>str</code> 타입간의 <code>-</code>연산은 지원하지않음</li>
</ul>
<p>1.2 변수: 어떤 관계나 범위 안에서 여러 가지 값으로 변할 수 있는 수, 스스로 값을 갖기보단 다른 값을 가리키는 존재
ex) x = &#39;안녕하세요&#39;  =&gt; [변수명] = [변수값]</p>
<p>1.3 새로운 함수 정의</p>
<ul>
<li>def</li>
<li>함수를 정의(define)할때 사용하는 일종의 예약어</li>
<li>함수명은 임의로 만들수 있다. </li>
<li>함수명 뒤에 붙은 괄호는 이 함수에 입력으로 전달되는 값을 받는 자리이며, 입력값이 필요없는 경우에는 함수명뒤에 ()를 붙여주면 됨</li>
<li>def 함수명() 뒤에 <code>:</code> 붙여주고 이어서 <strong>함수가 불릴때 실행할 작업</strong>들을 한줄씩 나열</li>
<li>해당 함수에 포함 된 작업이라는 것을 나타내기 위해 <code>def</code>줄부터 함수가 끝날때 까지 띄어쓰기 4칸으로 들여쓰기를 해주어야함</li>
<li>함수안에 한줄 더 표시하고 싶다면 print() 함수 더 추가하면됨
<img src="https://images.velog.io/images/milanryu_d/post/e8d431e1-16e4-44ba-be39-211fa3c54fe6/image.png" alt=""></li>
</ul>
<p>1.4 스코프: 함수의 유효범위</p>
<ul>
<li>함수내에서 변수 정의 가능, 함수안에서만 일어난 일, 함수가 끝나면 해당 변수를 사라지고 볼수없다.
특정 위치에서 어떤 변수에 접근할 수 있는지, 또 한 곳에서 정의된 변수가 어디까지 유효한지 정의된 범위를 변수의 스코프(scope) 라고 합니다.
<img src="https://images.velog.io/images/milanryu_d/post/0c8868b5-ebd4-4d7f-b2e8-5c1e609cbe69/image.png" alt="">즉, 위의 코드에서 name = &#39;하루&#39;는 함수 내부를 포함해 코드 어디에서든 참조할 수 있으므로, 전역 스코프(global scope) 를 갖는 변수라고 할 수 있습니다. 반대로 name = &#39;시우&#39;는 change_name() 내부에서 정의되어 밖에서 볼 수 없으므로, 지역 스코프(local scope) 를 갖는 변수이다.</li>
</ul>
<p>1.5 매개변수</p>
<ul>
<li>입력값으로 주어진 인자(argument)를 받는 변수를 매개변수(parameter) 
<img src="https://images.velog.io/images/milanryu_d/post/9ae0fd2b-3766-4f1d-ad0d-da2a8c172715/image.png" alt="">위 예제에서 함수 내부의 name은 매개변수이고, 외부에서 함수를 부를 때 넣어준 &#39;로이&#39;는 그 매개변수에 들어가는 인자입니다. <img src="https://images.velog.io/images/milanryu_d/post/0a7cf922-aa6e-4169-9df5-cf676c38f426/image.png" alt="">위 예제는 하무를 만들때 매개변수에 기본값을 넣어서 함수를 호출할때 넣어준 &#39;콩순이&#39;(인자)가 없을때 &#39;아무나&#39;가 기본값으로 나옴.</li>
</ul>
<p>1.6 함수에 인자 여러개 한꺼번에 전달하기</p>
<ul>
<li>기본값이 있는 인자들이 기본값이 없는 필수 인자들의 뒤에 와야함 <img src="https://images.velog.io/images/milanryu_d/post/9ec04946-a5ab-4d51-b09e-9ab880e83969/image.png" alt=""></li>
</ul>
<p>1.7 함수의 결과로 값 반환  <strong>return</strong></p>
<ul>
<li>아래의 코드가 어떤 순서로 실행될까
마치 수학식처럼, 가장 안쪽의 괄호를 가진 add(1, 2)가 먼저 실행되고, 그 이후 옆의 + 3을 더한 뒤, 가장 바깥쪽의 괄호인 print()가 실행됩니다. add()로 인해 입력값인 1과 2의 합인 3이 나오고, 거기에 3을 다시 더해서 print()를 했으니 6이 표시되어야 할 것 같지만!<strong>에러!!!!</strong><img src="https://images.velog.io/images/milanryu_d/post/3ee130ab-a3f3-408b-b710-700d69808e74/image.png" alt=""></li>
<li>오류메세지는<code>NoneType과 int(정수, integer) 사이에 + 연산은 금지</code></li>
<li>Type은 뭔지 아직 잘 모르겠지만 그 앞의 None을 보면 무언가가 없다는 것. </li>
<li>add()에서 우리는 화면에 표시하라는 print() 함수를 부르긴 했지만, 이 함수의 결과가 무엇인지 명시하지 않아서 생긴오류</li>
<li>이럴때 필요한건 뭐?!!! <strong><code>return</code></strong>
<img src="https://images.velog.io/images/milanryu_d/post/2e39754d-86bf-4cca-91f4-6911573f525c/image.png" alt="">print() 안의 add_and_return(1, 2)가 먼저 실행되면서, add_and_return() 함수 안 첫 번째 줄인 print(number1 + number2)가 실행되어 화면에 3이 표시되고, 이후에 return number1 + number2로 3이 add_and_return() 함수의 출력값으로서 반환됩니다. 그럼 이제 print(add_and_return(1, 2) + 3)은 print(3 + 3)과 같게 되고, 최종적으로 print(6)이 되어 화면에 6이 출력됩니다.
<img src="https://images.velog.io/images/milanryu_d/post/7144f31c-70d5-4e31-aa99-1bd2237c08e1/image.png" alt="">🤯내가 설명해보자.(....언젠가...ㅠㅠ)</li>
</ul>
<h4 id="2-제어문">2. 제어문</h4>
<p>2.1 if
2.2 while
2.3 for : for 뒤에는 a in A의 형태로, 값이 여러 개 들어있는 목록 A에서 값을 하나씩 꺼내서 a 변수에 담아 반복문을 실행</p>
<ol start="3">
<li>재귀함수: 재귀함수란, 함수 내에서 그 함수 스스로를 사용하는 인셉션 같은 함수 종류입니다. 즉, def f(): 안의 코드 블럭에서 f()를 호출한다면, 그 함수는 재귀함수입니다. <ul>
<li>피보나치 수열 만들기!!!!
1,1,2,3,5,8,13,21,...
피보나치 수열의 n번째 숫자만큼의 사람이 있다면, n-1번째 피보나치 숫자만큼 주문하면된다는 그런 코드만들기(천천히 다시보자ㅠㅠ)</li>
</ul>
</li>
</ol>
<blockquote>
<h1 id="풀잎스쿨">풀잎스쿨</h1>
</blockquote>
<h3 id="1-많이-쓰임">1. 많이 쓰임</h3>
<h4 id="split-공백한칸이-디폴트값">split 공백한칸이 디폴트값</h4>
<h4 id="join">join</h4>
<h4 id="strip">strip</h4>
<h4 id="문자열-포매팅">문자열 포매팅</h4>
<h4 id="--f-서식지정-f스트링-많이-쓴다-36">- f&#39; 서식지정&#39; f스트링 많이 쓴다. 3.6</h4>
<h3 id="2-심사문제-the-갯수찾기">2. 심사문제 the 갯수찾기</h3>
<p>the grown-ups&#39; response, this time, was to advise me to lay aside my drawings of boa constrictors, whether from the inside or the outside, and devote myself instead to geography, history, arithmetic, and grammar. That is why, at the, age of six, I gave up what might have been a magnificent career as a painter. I had been disheartened by the failure of my Drawing Number One and my Drawing Number Two. Grown-ups never understand anything by themselves, and it is tiresome for children to be always and forever explaining things to the.</p>
<p>Q. 왜 count = 0 으로 시작하고 for문을 생각해내는 것의 포인트는 무엇인가?
A. 질문방에 올렸고, 그분 덕분에 문제를 보고 해결방법을 찾아내가는 과정을 적어봄</p>
<ol>
<li>print(a.count(&#39;the&#39;))= the를 가지고있는 there 같은것도 세어버리기때문에 이건 아님.</li>
<li>갯수세는건 리스트가 좋겠다. 문장을 리스트로 나누려면 띄어쓰기가 있으니 split()을 쓰자</li>
<li>리스트를 세자. </li>
<li>리스트 요소중에 the 가 있는지 확인하려면 for 반복문으로 하나씩 돌아가야 한다. 하나씩 돌아가며 갯수를 샌다. 갯수를 확인하는 코드는 무엇일까.</li>
<li>+= 를 사용하려면 0 초기화를 해야한다.</li>
<li>리스트에서 the를 세어보았더니 특수문자때문에 적게 나온다. </li>
<li>특수문자를 없애는 코드를 이용하자</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[210630_교육3일차(D+5)]]></title>
            <link>https://velog.io/@milanryu_d/210630</link>
            <guid>https://velog.io/@milanryu_d/210630</guid>
            <pubDate>Wed, 30 Jun 2021 17:21:26 GMT</pubDate>
            <description><![CDATA[<h3 id="🔒-오늘의-담임선생님의-미션">🔒 오늘의 담임선생님의 미션:</h3>
<h4 id="1-선형회귀란-무엇일까">1. 선형회귀란 무엇일까?</h4>
<h4 id="2-여기서-선형은-무엇을-의미할까">2. 여기서 선형은 무엇을 의미할까?</h4>
<h4 id="3-우리는-왜-딥러닝에서-선형회귀를-배울까">3. 우리는 왜 딥러닝에서 선형회귀를 배울까?</h4>
<h4 id="4-선형-회귀로-어떤-데이터-또는-주제에-대한-모델을-만들-수-있을까">4. 선형 회귀로 어떤 데이터 또는 주제에 대한 모델을 만들 수 있을까?</h4>
<h4 id="참고링크"><a href="https://youtu.be/fNk_zzaMoSs">참고링크</a></h4>
<h4 id="-문답하기-순서">$ 문답하기 순서</h4>
<ol>
<li>질문에 대한 이유와 맥락 알기(why질문)</li>
<li>너무 큰 질문은 잘게 쪼개기</li>
<li>모호한 질문은 명확하게 하기(What 정의 질문)</li>
<li>질문하는 것에 부끄러워하지않기</li>
</ol>
<hr>
<blockquote>
<h1 id="aiffel-노드스터디">AIFFEL 노드스터디</h1>
<p>오늘 정리는 내일로ㅠㅠ  파이썬 리스트 할게 많음.ㅠㅠ</p>
</blockquote>
<blockquote>
<h1 id="풀잎스쿨">풀잎스쿨</h1>
</blockquote>
<h3 id="unit-22-리스트-응용">unit 22 리스트 응용</h3>
<ol>
<li><p>리스트를 추가하는 method(객체에 속한 함수를 뜻함)
 1.1 append : 리스트끝에 요소하나추가
<img src="https://images.velog.io/images/milanryu_d/post/35766cda-36cf-4113-9763-b1a10ed55e7d/image.png" alt=""></p>
</li>
<li><p>2 extend: 리스트 끝에 다른 리스트를 연결하여 리스트를 확장함
<img src="https://images.velog.io/images/milanryu_d/post/5bfcbedf-7e5e-4dbe-962f-6c78e73cbd43/image.png" alt=""></p>
</li>
<li><p>3 insert(인덱스, 요소): 리스트의 특정 인덱스에 <strong>요소하나</strong>를 추가 - 자주사용하는 패턴은 : </p>
<ul>
<li>insert(0, 요소)  -&gt; 리스트처음에 요소 추가</li>
<li>insert(len(리스트), 요소) -&gt; 리스트 끝에 요소추가
<img src="https://images.velog.io/images/milanryu_d/post/fff5a70a-47b5-4d42-8b52-633de9205f85/image.png" alt=""></li>
</ul>
</li>
<li><p>4 <a href="https://dojang.io/mod/page/view.php?id=2281">리스트로 스택과 큐 만들기</a>는 추후 조금더 배우면 나오는거니 위치만 알고있자.</p>
</li>
<li><p>리스트에서 요소 삭제하기</p>
</li>
<li><p>1 pop() : 리스트의 마지막, 혹은 특정인덱스 요소 삭제( del)<img src="https://images.velog.io/images/milanryu_d/post/d517cf01-32a5-49a0-b8de-634993765187/image.png" alt=""></p>
</li>
<li><p>2 remove() : 특정 값을 찾아서 삭제<img src="https://images.velog.io/images/milanryu_d/post/92a56900-c910-4207-8f12-a61cd248882c/image.png" alt=""></p>
</li>
<li><p>리스트에서 특정 값 구하기</p>
</li>
<li><p>1 index(값): 리스트에서 특정값의 인덱스를 구한다. 같은 값이 여러개일경우 처음 찾은 인덱스를 구함<img src="https://images.velog.io/images/milanryu_d/post/92e2718c-4c2b-498b-a4c8-0b7c8d232b7c/image.png" alt=""></p>
</li>
<li><p>2 count(값) : 리스트에서 특정 값의 개수를 구함<img src="https://images.velog.io/images/milanryu_d/post/ff64c6b5-8b58-45bf-a22b-075417901b17/image.png" alt=""></p>
</li>
<li><p>리스트 순서 뒤집기</p>
</li>
<li><p>1 reverse() : 리스트에서 요소의 순서를 반대로 뒤집음<img src="https://images.velog.io/images/milanryu_d/post/3195f669-122b-41de-ad6e-85b864a73422/image.png" alt=""></p>
</li>
<li><p>리스트 요소 정렬</p>
</li>
<li><p>1 sort() 또는 sort(reverse=false): 리스트 요소를 작은 순서대로 정렬(오름차순)</p>
</li>
<li><p>2 sort(reverse=True) : 리스트의 값을 큰순서대로 정렬(내림차순)<img src="https://images.velog.io/images/milanryu_d/post/7894ddfd-4913-4282-bdee-686c6eeb8e30/image.png" alt=""></p>
</li>
<li><p>sort 메서드와 sorted 함수
내장 함수 sorted도 제공합니다. 
sort와 sorted 모두 정렬을 해주는 함수</p>
</li>
</ol>
<ul>
<li><code>sort</code>는 메서드를 사용한 리스트를 변경</li>
<li><code>sorted</code> 함수는 정렬된 새 리스트를 생성
<img src="https://images.velog.io/images/milanryu_d/post/6638efda-71da-445d-996d-1f69d3a36c02/image.png" alt="">
🔼이미지 출처: <a href="https://blog.naver.com/wideeyed/221745416992">https://blog.naver.com/wideeyed/221745416992</a></li>
</ul>
<ol start="7">
<li><p>반복문으로 리스트 요소 모두 출력하기</p>
</li>
<li><p>1 for 반복문: in 뒤에 리스트 지정하면됨
<img src="https://images.velog.io/images/milanryu_d/post/6e573c9b-1d92-4284-9c4b-80b497c2d575/image.png" alt=""></p>
</li>
<li><p>2 인덱스와 요소를 함께 출력하기
for 인덱스, 요소 in enumerate(리스트):
<img src="https://images.velog.io/images/milanryu_d/post/19546ca7-a33d-4947-8f1f-9fa45906f251/image.png" alt=""></p>
</li>
<li><p>3 for 반복문에서 인덱스로 요소를 출력하기</p>
<ul>
<li>for에 리스트를 지정하면 요소를 바로 가져와서 편리한데, for에서 인덱스를 지정하여 요소를 가져올 수는 없을까요? 이때는 range에 len으로 리스트의 길이(요소 개수)를 구해서 넣어주면 인덱스를 순서대로 만들어줍니다. 따라서 a[i]와 같이 리스트에 인덱스를 지정하여 값을 가져올 수 있습니다.
즉, for i in range(len(a))를 실행하면 i에는 요소가 아닌 0부터 마지막 인덱스까지 인덱스가 들어갑니다.
<img src="https://images.velog.io/images/milanryu_d/post/b7b0e80b-fd4e-452d-9d11-8c587b6f183e/image.png" alt=""></li>
</ul>
</li>
<li><p>반복문으로 가장 작은수와 큰수 구하기</p>
</li>
</ol>
<ul>
<li>먼저 리스트 a의 첫 번째 요소 a[0]를 변수 smallest에 저장합니다. 그리고 for로 리스트의 요소를 모두 반복하면서 i가 smallest보다 작으면 smallest에 i를 할당합니다. 즉, 숫자를 계속 비교해서 숫자가 작으면 smallest를 바꾸는 방식 가장큰수는 largest와 i &gt; largest 로 변경하면됨
(아래로 갈수록 점점 간단한 방법의 코딩)
<img src="https://images.velog.io/images/milanryu_d/post/fefb8b9c-e10b-46fe-87aa-125be74e8bd1/image.png" alt="">
<img src="https://images.velog.io/images/milanryu_d/post/a06a3462-204c-40bf-8e1b-1cb7ed79fb0b/image.png" alt=""></li>
</ul>
<ol start="9">
<li>리스트 컴프리헨션(list comprehension)</li>
</ol>
<ul>
<li>리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것(리스트 내장, 리스트 축약, 리스트 해석)</li>
<li>for 변수 in 리스트]-&gt; 파이썬다운 코드 </li>
<li>list(식 for 변수 in 리스트)
<img src="https://images.velog.io/images/milanryu_d/post/85bd10e0-9df9-473f-95c2-81a0ceaf0909/image.png" alt="">
리스트 안에 식, for, 변수, in, 리스트 순서로 들어있지만 뒤에서 앞으로 읽으면 간단합니다. 즉, range(10)으로 0부터 9까지 생성하여 변수 i에 숫자를 꺼내고, 최종적으로 i를 이용하여 리스트를 만든다
<img src="https://images.velog.io/images/milanryu_d/post/8cd412b1-bbe6-4680-b4db-bad36b84ec0f/image.png" alt="">
🔼이미지 출처:<a href="https://dojang.io/mod/page/view.php?id=2285">https://dojang.io/mod/page/view.php?id=2285</a></li>
</ul>
<p><img src="https://images.velog.io/images/milanryu_d/post/89a26035-0184-4e71-aace-ed07de76dcb3/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/milanryu_d/post/61442b1f-37a7-4a72-8876-e66fa7f50846/image.png" alt="">
<img src="https://images.velog.io/images/milanryu_d/post/a0aba2bd-877a-47c2-ad33-5990bba1af58/image.png" alt="">
🔼이미지 출처:<a href="https://dojang.io/mod/page/view.php?id=2285">https://dojang.io/mod/page/view.php?id=2285</a></p>
<p><br><br></p>
<blockquote>
<h3 id="코딩테스트에-많이나온다고-함">코딩테스트에 많이나온다고 함</h3>
</blockquote>
<h4 id="--list와-관련된-유용한-메소드">- list와 관련된 유용한 메소드</h4>
<h4 id="--for-문-enumerate-많이-씀">- for 문 enumerate 많이 씀.</h4>
<h4 id="--smallest">- smallest</h4>
<h4 id="--sort-min-max-sum">- sort min max sum</h4>
<h4 id="--리스트-컴프리헨션list-comprehension">- 리스트 컴프리헨션(list comprehension)</h4>
<h3 id="q심사문제-2210">Q.심사문제 22.10</h3>
<p>표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1<del>20, 두 번째 입력 값의 범위는 10</del>30이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 첫 번째 정수부터 두 번째 정수까지를 지수로 하는 2의 거듭제곱 리스트를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 리스트의 두 번째 요소와 뒤에서 두 번째 요소는 삭제한 뒤 출력하세요. 출력 결과는 리스트 형태라야 합니다.
<img src="https://images.velog.io/images/milanryu_d/post/6ee0c646-41a8-4a42-a0cd-39b86984afa9/image.png" alt=""></p>
<p>A. 어떻게 접근할것인가.</p>
<p>두개가 입력된다,정수,  : a, b = map(int, input().split())</p>
<p><code>여기까지 생각이 진행되었으나 이후로는 어려워서..어떻게 해야할지 너무 고민이 많아졌다...ㅠㅠ</code></p>
<p><code>리마인드 하면서 생각더 해봄.</code></p>
<p>1~10 : range 사용.
첫번째 정수 부터 두번째 정수까지를 지수로 하는 2의 거듭제곱 
a를 1 b를 10 넣었을때 2의 1승 , 2의 2승, 이 나와야 하니 print 할 최종값 c가 있어야 한다.
출력 결과는 리스트 형태 ....
리스트의 두 번째 요소와 뒤에서 두 번째 요소는 삭제한 뒤 출력 del 메소드 이용</p>
<blockquote>
<h3 id="오늘-오르미의-생각🤔-및-다짐👍">오늘 오르미의 생각🤔 및 다짐👍</h3>
</blockquote>
<p>🤔 처음부터 너무 욕심내는 것인가 싶다가도 이것이 제일 기본인가 싶다가도.. 맡은 역할중에 나의 꿈을 위한 투자를 위해서 이정도는 해야할까 싶은 생각도 든다. 9시반~ 5시반 매우 소중한 시간. 그리고 아이들이 잠든 11시.. 하루의 공부를 정리하고 다짐도 해본다. 
작심삼일이라고.. 오늘이 삼일째! 내일 할까 하는 마음 내려놓고 맥주한캔들고 자리에 앉아 정리하는 나!! 
칭찬해. 칭찬해. 그러나 한모금도 못먹고.. 2시20분까지..ㅇㅁㅇ...도중에 불려가고.ㅠ
미션이랑 노드스터디는 내일정리.ㅠㅠ</p>
<p>👍 1. 많은 글과 친해지기, 영어와 친해지기<br>2. 매일 리마인드 하는것! 다 할려고 욕심내지말고 차근히.
3. colab 코드창 열어서 코딩도장것 연습하기( 새로운 코드 추가시엔 <code>ctrl+M+B</code>
4. 코딩테스트 관련 내가 찾은 것:<a href="https://covenant.tistory.com/220">https://covenant.tistory.com/220</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[210629_교육2일차(D+4)]]></title>
            <link>https://velog.io/@milanryu_d/210629</link>
            <guid>https://velog.io/@milanryu_d/210629</guid>
            <pubDate>Tue, 29 Jun 2021 15:09:08 GMT</pubDate>
            <description><![CDATA[<h3 id="오늘의-담임선생님의-미션-인공지능으로-할수있는-일-찾아보기">$오늘의 담임선생님의 미션: 인공지능으로 할수있는 일 찾아보기</h3>
<p> 참고 URL: <a href="https://www.notion.so/AI-92b8c8eca0294fc7a9a2538bca205bdf">https://www.notion.so/AI-92b8c8eca0294fc7a9a2538bca205bdf</a></p>
<hr>
<blockquote>
<h1 id="aiffel-노드스터디">AIFFEL 노드스터디</h1>
</blockquote>
<h2 id="1-git--github">1. Git &amp; GitHub</h2>
<h3 id="잔디밭만들기commit">잔디밭만들기(commit)</h3>
<p><img src="https://images.velog.io/images/milanryu_d/post/0c2a8351-9837-446b-8666-fb763cf219f7/image.png" alt=""></p>
<h4 id="버전관리를-위해-만들어-진-git">버전관리를 위해 만들어 진 Git</h4>
<ul>
<li><p>특정시점 진행상황 저장해두고 다시돌아와서 그시점으로 다시 시작할수있게. </p>
</li>
<li><p>개발에서는 버전관리가 필수</p>
</li>
<li><p>첫 코딩공부에 누구나 만난다는 <code>생활코딩</code> 에서 Git에 대해 다 한후에 공부할것.
(쉴수없는 공부....👀)
<a href="https://opentutorials.org/module/2676">https://opentutorials.org/module/2676</a></p>
<ul>
<li>** 완전 공감한 글**!!!!!!
<code>개발을 공부하다보면 애매모호하게 알고 넘어가는 용어들이 참 많습니다. 받아들일 당시에는 어렴풋이 그 의미를 이해했다고 생각하지만, 사실 입문자가 그 본질을 제대로 이해하기에는 어려운 것들이 많기 때문이죠.</code> </li>
</ul>
</li>
<li><p>늘 헛갈리는 Git과 Git Hub..ㅠㅠ</p>
<ul>
<li><p>Git은 개발을 진행하며 작성하는 소스코드가
업데이트 되는 버전을 
기록해두고 관리할 수있는 
소스코드 버전관리시스템 
버전기록저장</p>
</li>
<li><p>GitHub는 Git으로 관리하는 프로젝트를 호스팅하고
시간과 공간의제약없이 협업할수 있는
온라인서비스 작업공간</p>
</li>
<li><p>GitHub는 Git이라는 도구를 더 쉽게 사용하게 해주는 사설서비스..</p>
</li>
</ul>
</li>
<li><p>나의 깃허브 주소는 😎<br><a href="https://github.com/milan-d">https://github.com/milan-d</a></p>
</li>
</ul>
<ul>
<li>Git과 동기화를 해서 온라인으로 관리할 수 있는 원격저장소를 GitHub에서는 레파지토리(Repository) Git과 GitHub 연결하는 명령어
 <code>$ git config --global user.email &quot;my-email@gmail.com&quot;</code>
<code>$ git config --global user.name &quot;my-username&quot;</code></li>
</ul>
<br>  

<ul>
<li><p>각종 명령어 및  파일 넣기<br></p>
<ol>
<li><p>아래와 같은 명령어 입력시README.md 파일 생성과 동시에 그 파일내에 &quot;&quot; 안의 글자 한줄이 입력됨
<code>echo &quot;# first-repository&quot; &gt;&gt; README.md</code></p>
<ol start="2">
<li>cat 명령어는 해당파일에 작성되어잇는 내용을 확인</li>
</ol>
</li>
<li><p>Git이 추적하고 있는 변화는 git stauts 명령어로 확인</p>
</li>
<li><p><code>git add README.md</code>
<code>git commit -m “new readme file”</code></p>
<ul>
<li>add 와 commit 의 차이<ul>
<li>add: 파일추가</li>
<li>commit: 변경상황 확정
<code>git comit -m</code> 뒤에는 해당커밋에 대한 설명을 작성하면 됨</li>
</ul>
</li>
</ul>
<ol start="5">
<li>GitHub 원격저장소를 first-repository 로 생성 후 내 로컬 저장소와 원격저장소 연결
<code>$ git remote add origin https://github.com/xxx/first-repository.git</code>
<code>git config credential.helper store</code>
<code>$ git push origin main</code></li>
</ol>
</li>
</ol>
</li>
</ul>
<hr>
<p>😢위 상태 그대로 진행했으나 두번째 명령어에서 에러가 나기 시작함...
구글링 후 이유를 찾음 -&gt; github 암호를 변경한상태여서 진행이 안됨.
에러가 날경우 <code>git push origin master</code>로 진행하라고 나옴. 위 코드를 입력시 아이디와 비밀번호를 입력하면 진행됨.
가져올때는 push 대신 pull을 적으면 된다. </p>
<p>그런데.. 나는 git config credential.helper store 이 코드를 쓰고 싶은데.. 방법을 조금더 찾아봐야할것같다.ㅠㅠ 만들었던것을 삭제하고 다시 진행해도...자동으로 안되어서.. 방법을 알고싶다ㅠㅠ</p>
<hr>
<p>위에서 한것을 그림으로 나타내면 아래와 같다.
<img src="https://images.velog.io/images/milanryu_d/post/79824789-f848-41ba-bca6-7b45505c1548/20210629_173103_4.png" alt=""></p>
<h2 id="2-jupyter-notebook">2. jupyter notebook</h2>
<h3 id="--데이터-분석을-하는-사람이라면-모두가-한번쯤-사용해-본">- 데이터 분석을 하는 사람이라면 모두가 한번쯤 사용해 본!!!</h3>
<h3 id="--데이터-클리닝과-변형-통계-모델링-머신러닝-등-데이터-분석을-편리하게-할-수-있도록-최적화-되어있는-오픈소스-웹-어플리케이션">- 데이터 클리닝과 변형, 통계 모델링, 머신러닝 등 데이터 분석을 편리하게 할 수 있도록 최적화 되어있는 오픈소스 웹 어플리케이션</h3>
<h3 id="--단축키중-가장-많이-쓰이는-것은-esc키-단축키-모음은-명령모드에서-h-누르기brbrbrbr">- 단축키중 가장 많이 쓰이는 것은 esc키/ 단축키 모음은 명령모드에서 H 누르기<br><br><br><br></h3>
<blockquote>
<h1 id="풀잎스쿨">풀잎스쿨</h1>
</blockquote>
<h2 id="1-if-else-elif-for-while-에-대해서-공부함">1. if, else, elif, for, while 에 대해서 공부함.</h2>
<h3 id="11-딕셔너리--key--value-">1.1 딕셔너리 ={ key : value }</h3>
<p>딕셔너리 만들기
dic = {}
dic [&#39;키&#39;] = 값</p>
<h3 id="12-if--elif-esle-끝에는--콜론이-붙어요">1.2 if , elif, esle 끝에는 : (콜론)이 붙어요!</h3>
<pre><code class="language-python">button = int(input())

if button == 1:
    print(&#39;콜라&#39;)
elif button == 2:
    print(&#39;사이다&#39;)
else:
    print(&#39;제공하지않는 메뉴&#39;)</code></pre>
<h3 id="13-for">1.3 for</h3>
<p>1.3.1 기본형
<code>for 변수 in range(횟수):</code>
<code>반복할 코드</code></p>
<p>1.3.2 시퀀스 객체로 반복하기</p>
<pre><code class="language-python">fruits = (&#39;apple&#39;, &#39;orange&#39;, &#39;grape&#39;)`
for fruit in fruits:
    print(fruit) </code></pre>
<h3 id="14-while">1.4 while</h3>
<ul>
<li>while 조건문을 써야해서 i = 0초기화 기본<pre><code class="language-python">i = 0                          # 초기식
while i &lt; 100:                 # while 조건식
   print(&#39;Hello, world!&#39;)    # 반복할 코드
   i += 1                    # 변화식</code></pre>
</li>
<li>입력횟수대로 반복하기(증가)<pre><code class="language-python">count = int(input(&#39;반복할 횟수를 입력하세요: &#39;))
</code></pre>
</li>
</ul>
<p>i = 0
while i &lt; count:     # i가 count보다 작을 때 반복
    print(&#39;Hello, world!&#39;, i)
    i += 1</p>
<pre><code>`실행결과`
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2 

- 입력횟수대로 반복하기(감소)
```python 
count = int(input(&#39;반복할 횟수를 입력하세요: &#39;))

while count &gt; 0:     # count가 0보다 클 때 반복
    print(&#39;Hello, world!&#39;, count)
    count -= 1       # count를 1씩 감소시킴</code></pre><p><code>실행결과</code>
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 3
Hello, world! 2
Hello, world! 1    </p>
<h3 id="15-많이-쓰이는-import-randomrandom-모듈을-가져옴">1.5 많이 쓰이는 import random(random 모듈을 가져옴)</h3>
<p>반복횟수가 정해지지않는 경우</p>
<pre><code class="language-python">import random    # random 모듈을 가져옴

i = 0
while i != 3:    # 3이 아닐 때 계속 반복
    i = random.randint(1, 6)    # randint(정수를 생성하는 random모듈의 함수)를 사용하여 1과 6 사이의 난수를 생성
    print(i)</code></pre>
<ul>
<li>random.choice 함수는 시퀀스 객체를 받으므로 리스트뿐 아니라 튜플, range, 문자열 등을 넣어도 됨.<pre><code class="language-python">dice = [1, 2, 3, 4, 5, 6]
random.choice(dice)</code></pre>
<h3 id="16-무한루프만들기">1.6 무한루프만들기</h3>
while True:  = while 1: =  while &#39;Hello&#39;:  / True
0, &quot; &quot;: / FALSE<br>while True = while 1   while &#39;Hello&#39; = <h3 id="17-break-continue">1.7 break, continue</h3>
if ~일때 : break(멈춤) ,if ~일때: continue(건너뛰기),<pre><code class="language-python">i = 0
while True : #무한루프
  print(i)   
  i += 1   #i를 1씩 증가시킴
  if i == 100:  # i 가 100일때
      break   # 반복문을 끝냄</code></pre>
실행결과는
0
1
2
.... 
99<pre><code class="language-python">for i in range(10000):   #0부터 9999까지반복
  print(i)
  if i == 100:  # i가 100
      break    # 반복문 종료</code></pre>
실행결과는
0
1
....
100</li>
</ul>
<pre><code class="language-python">for i in range(100):    # 0부터 99까지 증가&amp;반복
    if i %2 == 0:       # i를 2로 나누었을때 나머지 0 (짝수)
        continue        # 건너뛰기(코드실행안함)
    print(i)</code></pre>
<p>실행결과
1
3
....
99</p>
<h3 id="18-중첩루프-반복문안으로-들어갈수록-i-j-k-순서대로무언의-약속">1.8 중첩루프 반복문안으로 들어갈수록 i j k 순서대로..무언의 약속</h3>
<h3 id="19코딩테스트-문제풀어보기백준">1.9코딩테스트 문제풀어보기(<a href="https://www.acmicpc.net/">백준</a>)</h3>
<ul>
<li>단계별로 풀어보기를 추천함</li>
<li>if 문에서 윤년계산해봄</li>
</ul>
<hr>
<p>😢 생각보다 오래 걸렸다. 그리고 결국 풀지못했다. if 문 문제라는 것을 보고난뒤 문제를 풀수있었다. 코딩테스트에서는 문제가 <strong>&#39;나 if 문제임!!!!&#39;</strong> 이라고 적혀 있지 않을것이기 때문에 문제를 보고 내가 어떤 함수를 써야하는지 고민해보아야 하므로...</p>
<p>윤년이다 보니 공배수 문제였고, 조건에 대해서 &#39;그리고&#39;와 &#39;또한&#39; 이라는 단어를 보고 나는
and 와 or 을 다 쓰는것으로 코드를 짰다. 그리고 연도라고 적혀있음에도 x 라는 변수를 쓰는.. 진짜 초초초초초초초초초!!!!신생아 개발공부하는 사람인것같아 부끄러워졌다. </p>
<hr>
<pre><code class="language-python">x = int(input())
if (x % 4 == 0 and x $ 100 != 0 ) or x % 400 == 0: 
    print(1)
else :
    print(0)</code></pre>
<p>겨우 겨우 작성한 코드였고 같은 조와 퍼실님에게 or 을 쓰는 것에 대해서 함께 논의하고 피드백을 받을수있었다. </p>
<p>가독성에 대한 고민을 할수있는 시간이었다. </p>
<p>아래는 퍼실님이 작성한 코드이다.
<img src="https://images.velog.io/images/milanryu_d/post/9a69db34-e981-4e39-9c47-36eae40de0f4/20210629_173103_9.png" alt=""></p>
<blockquote>
<h3 id="오늘-오르미의-생각-및-다짐">오늘 오르미의 생각 및 다짐</h3>
</blockquote>
<p>🤔 역시 세상은 넓고 배울것은 겁나 많다..</p>
<p>👍 혼자 공부보단 역시 함께 하는 것이 힘이 난다!!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[210628_교육1일차(D+3)]]></title>
            <link>https://velog.io/@milanryu_d/210628</link>
            <guid>https://velog.io/@milanryu_d/210628</guid>
            <pubDate>Mon, 28 Jun 2021 11:22:26 GMT</pubDate>
            <description><![CDATA[<h2 id="담임님의-질문">$담임님의 질문</h2>
<h3 id="딥러닝을-배운다-이앞에-딥과-러닝을-구분해서-찾아볼수있지안을까-그다음에-머신러닝-이라는-것은-머신과-러닝을-구분해서-볼수있지않을까-인공지능은-실제로-멀까라는-의문을-가져보자">딥러닝을 배운다. 이앞에 딥과 러닝을 구분해서 찾아볼수있지안을까. 그다음에 머신러닝 이라는 것은 머신과 러닝을 구분해서 볼수있지않을까 인공지능은 실제로 멀까라는 의문을 가져보자.</h3>
<h3 id="스스로에게-질문을-던져보는-연습">스스로에게 질문을 던져보는 연습.</h3>
<h3 id="q-데이터-러닝은-무엇인가">Q. 데이터 러닝은 무엇인가,</h3>
<h4 id="데이터의-무엇을-학습하나-데이터의-패턴을-학습한다">데이터의 무엇을 학습하나? 데이터의 패턴을 학습한다.</h4>
<p>데이터의 패턴이란? 데이터의 특정한 규칙이나 간격, 사람의 눈으로 보기 힘들고, 정밀한 분석을 통해 볼수있다.(같이 이야기듣던 학생의 말)</p>
<h4 id="패턴을-찾는방식-모델을-통해서-패턴을-찾아낸다-모델을-만드려고-하는거-궁극적으로는-데이터에서-어떤-패턴을-추출하는-모델을-만들려고-하는게-목적">패턴을 찾는방식: 모델을 통해서 패턴을 찾아낸다. 모델을 만드려고 하는거. 궁극적으로는 데이터에서 어떤 패턴을 추출하는 모델을 만들려고 하는게 목적</h4>
<h2 id="-내가-찾아내야하는-답">$ 내가 찾아내야하는 답</h2>
<h3 id="q모델에-대한-정의">Q.모델에 대한 정의</h3>
<h3 id="q데이터가-하나있거나-패턴이-없을때-모델링을-어떻게할수있을까">Q.데이터가 하나있거나 패턴이 없을때 모델링을 어떻게할수있을까?</h3>
<h4 id="ps-내가-해왔던-직장-이나-업무중에서-ai와-인공지능-딥러닝으로-이용할수있는-것은-무엇이-잇을까">ps. 내가 해왔던 직장 이나 업무중에서 AI와 인공지능, 딥러닝으로 이용할수있는 것은 무엇이 잇을까.</h4>
<p>아마도 옷, 도서관, 안 퍼져있는 분야는 없는것 같고, 공부를 더해봐야하겠다.</p>
<blockquote>
<h2 id="aiffel-노드스터디">AIFFEL 노드스터디</h2>
</blockquote>
<h3 id="tensorflow">TensorFlow</h3>
<h3 id="command-line--cd-pwd-mkdir-디렉터리명-ls-cd---rm--r-디렉터리명">Command Line : cd, pwd, mkdir 디렉터리명, ls, cd .. , rm -r 디렉터리명</h3>
<h3 id="가상환경">가상환경</h3>
<h3 id="리눅스-ls--l-파일정보확인">리눅스 ls -l 파일정보확인</h3>
<p> <code>-rw- r--r-- 1 root root 0 3월 27 01:22 test.txt</code>
 먼저 맨 앞의 &#39;-&#39;는 파일 유형이다. 
해당 파일이 어떤 종류의 파일인지를 알 수 있다. &#39;-&#39;는 일반 파일, &#39;d&#39;는 디렉터리, &#39;b&#39;는 블록 디바이스, &#39;c&#39;는 문자 디바이스, &#39;l&#39;은 링크를 뜻한다.
두번째로 오는 &#39;rw-r--r--&#39;는 파일 허가권을 뜻한다.
세번째 &#39;1&#39; 은 링크의 수이다.
네번째 &#39;root&#39;는 해당 파일에 대한 소유권을 가진 소유 사용자의 이름이다.
다섯번째 &#39;root&#39;는 파일을 소유한 그룹의 이름이다.
여섯번째 &#39;0&#39;은 파일 크기이다.
test.txt파일은 touch 명령어로 만든 빈 파일이기 때문에 크기가 0이다.
일곱번째 &#39;3월 27 01:22&#39;는 파일의 최종 수정 일시이다.
마지막 여덟번째 &#39;test.txt&#39;는 해당 파일의 이름</p>
<h3 id="apt-get-명령어">apt-get 명령어</h3>
<h4 id="우분투에서-새로운-패키지프로그램을-설치할때-가장-보편적으로-사용하고있는-강력한-명령어">우분투에서 새로운 패키지(프로그램을 설치할때) 가장 보편적으로 사용하고있는 강력한 명령어</h4>
<h4 id="사용법">사용법</h4>
<p>root 계정이 아니라는 가정하에는 sudo(슈퍼유저...)apt-get install, sudo apt-get remove, sudo apt-get clean, sudo apt-get update..... 존재</p>
<h4 id="자주-쓰는-명령어-중-설치된-패키지-리스트-확인">자주 쓰는 명령어 중 설치된 패키지 리스트 확인:</h4>
<p>apt --installed list 설치된 패키지 이름 및 버전정보, 수동/자동 설치 여부 출력
dpkg --get-selections 설치된 패키지 이름만 출력
dpkg -l : 설치왼 패키지의 이름 및 버번 간단한 용도확인</p>
<blockquote>
<h2 id="풀잎스쿨">풀잎스쿨</h2>
</blockquote>
<h3 id="코딩도장-리마인드-자주쓰이니-익숙해지자">코딩도장 리마인드 (자주쓰이니 익숙해지자)</h3>
<ol>
<li>파이썬은 ; 안쓴다</li>
<li>주석은 #</li>
<li>float{실수 int(정수)} float 이 더 큰개념..</li>
<li>연산기호: / 와 % : 나누기와 % 나머지구하기 // 소수점이하버림</li>
<li>변수 자료형 알아내기 type(x)</li>
<li>a, b = input().split() -&gt; 입력값 공백기준.. 
map(int, input).split()) int 변환</li>
<li>줄바꿈활용 : \n</li>
<li>리스트는 =[] =list()</li>
<li>인덱스는 [0] 부터<h4 id="10-슬라이스-앞-뒤--생략하는거-잘-찾기">**10. 슬라이스 앞 뒤 : 생략하는거 잘 찾기</h4>
a[:n+1] n인덱스까지 가져오기
ex) a[:10] 은 인덱스 0~9까지 갖고옴 
a[7:]  인덱스 7부터 끝까지
a[:] , a[::] 리스트전체갖고오기 
a[::-1] 리스트를 반대로 뒤집음, </li>
</ol>
<blockquote>
<h3 id="오르미의-생각-및-다짐">오르미의 생각 및 다짐</h3>
</blockquote>
<p>졸업!!!!!!
<img src="https://images.velog.io/images/milanryu_d/post/1ec559bc-1fdc-43f0-9c09-46bdc108245b/20210625_131541_8.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AIFFEL 양재 OT 2일차]]></title>
            <link>https://velog.io/@milanryu_d/AIFFEL-%EC%96%91%EC%9E%AC-OT-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@milanryu_d/AIFFEL-%EC%96%91%EC%9E%AC-OT-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Fri, 25 Jun 2021 08:14:49 GMT</pubDate>
            <description><![CDATA[<p>직장과 병행중...ㅇㅁㅇ........</p>
]]></description>
        </item>
    </channel>
</rss>