<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Jaeyoung.log</title>
        <link>https://velog.io/</link>
        <description>데이터 분린이 :)</description>
        <lastBuildDate>Fri, 07 Oct 2022 08:41:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Jaeyoung.log</title>
            <url>https://velog.velcdn.com/images/jaeyoung_jung/profile/4736adc4-7160-43f4-9bec-8e6ace712226/image.PNG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Jaeyoung.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jaeyoung_jung" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Pandas] Series, DataFrame 이해하기 (2)]]></title>
            <link>https://velog.io/@jaeyoung_jung/pandas-Series-DataFrame-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2</link>
            <guid>https://velog.io/@jaeyoung_jung/pandas-Series-DataFrame-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2</guid>
            <pubDate>Fri, 07 Oct 2022 08:41:28 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p><strong>Series</strong> : 1차원 자료구조</p>
<ul>
<li>1차원 리스트와 유사하지만 Series는 index에 이름을 부여할 수 있음<br>  </li>
</ul>
</li>
<li><p><strong>DataFrame</strong> : 2차원 자료구조</p>
<ul>
<li>행(row)와 열(column) 으로 이루어 짐</li>
</ul>
<hr>
<h2 id="series">Series</h2>
<h3 id="📍series와-list의-차이">📍series와 list의 차이</h3>
<blockquote>
<h4 id="i-연산">(i) 연산</h4>
</blockquote>
<pre><code class="language-python">nums = [1, 5, 7, 9, 11]
s_nums = pd.Series(data=nums)
s_nums * 10
&gt;&gt;&gt;&gt; 
0  10
1  50
2  70
3  90
4  110
dtype: int64</code></pre>
</li>
<li><p><code>nums * 10</code> 를 하면, 안에 있는 요소들이 10번 반복됨</p>
</li>
<li><p><code>nums + 3</code> 를 하면, 아래와 같은 오류 발생
<code>TypeError: can only concatenate list (not &quot;int&quot;) to list</code></p>
<h4 id="ii-인덱스">(ii) 인덱스</h4>
<pre><code class="language-python">bunsick_price = [3000, 1500, 4000, 2000, 3500]
bunsick_list = [&quot;떡볶이&quot;, &quot;어묵&quot;, &quot;순대&quot;, &quot;닭강정&quot;, &quot;우동&quot;]
bunsick = pd.Series(data=bunsick_price, index=bunsick_list)
bunsick
&gt;&gt;&gt;&gt;
떡볶이    3000
어묵     1500
순대     4000
닭강정    2000
우동     3500
dtype: int64</code></pre>
<pre><code class="language-python">print(bunsick[0])
print(bunsick[&quot;닭강정&quot;])
&gt;&gt;&gt;&gt;
3000
2000</code></pre>
<p>인덱스 값에 이름을 부여할 수 있다. 
<code>dictionary</code> 와 유사하게 값과 이에 대응되는 인덱스 값으로 서로 연결되어 있음</p>
<h4 id="iii-index와-value">(iii) index와 value</h4>
<pre><code class="language-python">bunsick.index
&gt;&gt;&gt;&gt; Index([&#39;떡볶이&#39;, &#39;어묵&#39;, &#39;순대&#39;, &#39;닭강정&#39;, &#39;우동&#39;], dtype=&#39;object&#39;)
bunsick.values
&gt;&gt;&gt;&gt; array([3000, 1500, 4000, 2000, 3500])</code></pre>
<p>각 데이터 타입은 <code>pandas.core.indexes.base.Index</code>, <code>numpy.ndarray</code> 이다.</p>
</li>
</ul>
<hr>
<h2 id="dataframe">DataFrame</h2>
<h3 id="📍데이터-선택-방법">📍데이터 선택 방법</h3>
<ul>
<li>loc : 라벨값 기반의 2차원 인덱싱</li>
<li>iloc : 순서를 나타내는 정수 기반의 2차원 인덱싱</li>
<li>at : 라벨값 기반의 2차원 인덱싱 (하나의 스칼라 값만 찾음)<br>
### 📍데이터 추가</li>
<li>Column 추가 : <code>df[&#39;column명&#39;]</code> = 추가할 데이터</li>
<li>Index 추가 : <code>df.loc[&#39;index명&#39;]</code> = 추가할 데이터<br>
### 📍데이터 삭제</li>
<li><code>drop()</code> : 데이터 삭제 함수</li>
<li>대표적인 매개 변수<ul>
<li><code>axis = 0 or 1</code> (행:0, 열:1 을 기준으로 삭제)</li>
<li><code>index</code> : 특정 index 에 대해 데이터 삭제</li>
<li><code>columns</code> : 특정 column 에 대해 데이터 삭제</li>
<li><code>inplace = True or False</code> : 원본 데이터를 수정할 지, 말 지에 대해 선택<br>
### 📍누락 데이터 처리
: Null, NaN을 처리할 때 사용하는 함수</li>
</ul>
</li>
<li><code>dropna()</code> : 누락된 데이터가 있는 축 제외 (매개변수 : axis, how, thresh, inplace 등)</li>
<li><code>fillna()</code> : 누락된 데이터를 특정 값으로 대체 (ex: fillna(0))</li>
<li><code>isnull()</code> : Null 값인지 확인 (True, False 로 반환)</li>
<li><code>notnull()</code> : Null 값이 아닌지 확인 (True, False로 반환)<br>
### 📍기술 통계 함수
> * ```sum``` : 합</li>
<li><code>mean</code> : 평균</li>
<li><code>count</code> : Null 값을 제외한 데이터의 수를 반환</li>
<li><code>argmin</code>, <code>argmax</code> : 최소, 최대를 갖고 있는 데이터의 위치를 반환</li>
<li><code>quantile</code> : 0부터 1 까지의 분위수를 계산</li>
<li><code>describe</code> : 시리즈나 데이터프레임의 각 칼럼에 대한 요약 통계를 계산</li>
<li><code>var</code> / <code>std</code> : 표준 분산 / 표준 정규 분산</li>
<li><code>cumsum</code> / <code>cumprod</code> : 누적 합 / 누적 곱</li>
<li><code>pct_change</code> : 퍼센트 변화율</li>
</ul>
<hr>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://harryp.tistory.com/868">[Python] 파이썬 Pandas 데이터 구조, Series, DataFrame</a></li>
<li><a href="https://wikidocs.net/4364">파이썬으로 배우는 알고리즘 트레이</a></li>
<li><a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.at.html">Pandas 공식문서</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] Series, DataFrame 이해하기 (1)]]></title>
            <link>https://velog.io/@jaeyoung_jung/pandas-Series-DataFrame-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@jaeyoung_jung/pandas-Series-DataFrame-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 06 Oct 2022 12:19:54 GMT</pubDate>
            <description><![CDATA[<ul>
<li><strong>Series</strong> : 1차원 자료구조<ul>
<li>1차원 리스트와 유사하지만 Series는 index에 이름을 부여할 수 있음<br>  </li>
</ul>
</li>
<li><strong>DataFrame</strong> : 2차원 자료구조<ul>
<li>행(row)와 열(column) 으로 이루어 짐</li>
</ul>
</li>
</ul>
<hr>
<h2 id="1-series">1. Series</h2>
<h3 id="series-만드는-방법">series 만드는 방법</h3>
<blockquote>
<p>: dictionary, list, np.array 를 pd.Series로 타입 변환 가능</p>
</blockquote>
<pre><code class="language-python">age = [10, 20, 30]
pd.Series(data=age)</code></pre>
<pre><code class="language-markdown">&gt;&gt;&gt;&gt; 
0  10
1  20
2  30
dtype: int64</code></pre>
<blockquote>
<p>: index 이름 부여</p>
</blockquote>
<pre><code class="language-python">price = [1200, 2000, 3000]
pd.Series(data=price, index=[&#39;떡볶이&#39;, &#39;라면&#39;, &#39;우동&#39;])</code></pre>
<pre><code class="language-markdown">&gt;&gt;&gt;&gt; 
떡볶이  1200
라면  2000
우동  3000
dtype: int64</code></pre>
<p>=&gt; dtype은 index의 데이터 타입이 아님!</p>
<h2 id="2-dataframe">2. DataFrame</h2>
<h3 id="데이터프레임-만드는-방법">데이터프레임 만드는 방법</h3>
<pre><code class="language-python">pd.DataFrame(data, index=) </code></pre>
<h3 id="데이터프레임-속성값">데이터프레임 속성값</h3>
<ul>
<li><code>index</code> : index 반환</li>
<li><code>columns</code> : 컬럼 명 반환</li>
<li><code>values</code> : 각 값들을 반환</li>
<li><code>dtypes</code> : 컬럼 데이터 타입을 반환</li>
<li><code>T</code> : 데이터프레임 행, 열 치환<br>

</li>
</ul>
<h3 id="데이터프레임-정렬">데이터프레임 정렬</h3>
<ul>
<li><code>sort_index()</code> : 행으로 정렬(axis=0), 열로 정렬(axis=1)</li>
<li><code>sort_values()</code> : 데이터 값을 기준으로 정렬</li>
<li>오름차순 : <code>ascending=True</code>, 내림차순 : <code>ascending=False</code><br>
- **MultiIndex**
정렬할 때, 값들이 비교하기에 적절하지 않은 상태라면?
예를 들어, 1, 3, "4" | A c D e 등의 형태를 정렬해야한다면?
=> **lambda를 이용해 같은 형태로 변환 후 정렬하기**
```python
df = pd.DataFrame({"A": [5, 1, 3, 4]}, index=['b', 'A', 'E', 'd'])
df.sort_index(key=lambda x: x.str.lower())
>>>> 
 a
A  1
b  5
d  4
E  3
```




</li>
</ul>
<hr>
<h2 id="reference">Reference</h2>
<ul>
<li><a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.html">Pandas 공식 문서</a></li>
<li><a href="https://harryp.tistory.com/868">[Python] 파이썬 Pandas 데이터 구조, Series, DataFrame</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 백준(Baekjoon) 문제풀이 - 조건문(2)]]></title>
            <link>https://velog.io/@jaeyoung_jung/Python-%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%A1%B0%EA%B1%B4%EB%AC%B8-2</link>
            <guid>https://velog.io/@jaeyoung_jung/Python-%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%A1%B0%EA%B1%B4%EB%AC%B8-2</guid>
            <pubDate>Fri, 30 Sep 2022 15:01:20 GMT</pubDate>
            <description><![CDATA[<h1 id="📝-문제">📝 문제</h1>
<ul>
<li>문제는 <a href="https://www.acmicpc.net/">Baekjoon</a>에 등록되어 있음</li>
<li>문제는 <strong>조건문(if문)</strong>과 관련 됨</li>
</ul>
<hr>
<h2 id="📍-14681번-문제---사분면-고르기">📍 14681번 문제 - 사분면 고르기</h2>
<blockquote>
<ul>
<li><strong>문제</strong>
흔한 수학 문제 중 하나는 주어진 점이 <strong>어느 사분면에 속하는지</strong> 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. &quot;Quadrant n&quot;은 &quot;제n사분면&quot;이라는 뜻이다.
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/e4d509ab-7d08-4351-8bd7-30abd8af8f1d/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li>예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.<br></li>
<li>점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.
<br></br><ul>
<li><strong>입력</strong> 
: 첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)<br></li>
<li>*<em>출력 *</em>
: 점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.<br>



</li>
</ul>
</li>
</ul>
<h3 id="💡-문제-해결법-구조화">💡 문제 해결법 구조화</h3>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/4f337965-0d9c-43f3-b04b-87a9fc2e409e/image.png" alt=""></p>
<h3 id="💡-문제-풀이">💡 문제 풀이</h3>
<pre><code class="language-python"># 입력 값을 받고, int로 dtype 변경
x = int(input(&quot;x : &quot;))
y = int(input(&quot;y : &quot;))

# 정수 x, y 입력 제한
if (-10000 &lt;= x &lt;= 10000 and x != 0) and (-10000 &lt;= y &lt;= 10000 and y != 0):   

    # 사분면 출력 범위 
    if x &gt; 0 and y &gt; 0:
        print(1)
    elif x &lt; 0 and y &gt; 0:
        print(2)
    elif x &lt; 0 and y &lt; 0:
        print(3)
    else:
        print(4)

# 친절하게 입력값이 이상하다는 것을 알려주기 :)
else:
    print(&quot;범위에서 벗어난 값을 작성했습니다.&quot;)</code></pre>
<h3 id="👩🏻💻-코드-실행">👩🏻‍💻 코드 실행</h3>
<blockquote>
<h4 id="1-범위-제한-되어있는지-확인">1. 범위 제한 되어있는지 확인</h4>
</blockquote>
<ul>
<li>범위에서 벗어난 값을 입력하면 알려 줌
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/170dac20-044e-4591-8814-85adce2b07fe/image.png" alt=""><h4 id="2-사분면-출력-확인">2. 사분면 출력 확인</h4>
</li>
<li>기대한 값이 잘 반환되는 것을 확인 함
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8b4fcabc-9da0-41e0-b55e-71044388721c/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/374c85f3-2f9c-410b-9582-502be8dcf13d/image.png" alt=""></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.acmicpc.net/problem/1330">문제 14681번. 사분면 고르기</a></small></p>
<hr>
<h2 id="📍-2884번-문제---알람-시계">📍 2884번 문제 - 알람 시계</h2>
<blockquote>
<ul>
<li><strong>문제</strong>
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.<br>
상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.<br>
이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.<br>
바로 <strong>&quot;45분 일찍 알람 설정하기&quot;</strong>이다.<br>
이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.<br>
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.<br>
</li>
</ul>
</blockquote>
<ul>
<li><strong>입력</strong> <ul>
<li>첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.</li>
<li>입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.<br></li>
</ul>
</li>
<li><strong>출력</strong>
: 첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)</li>
</ul>
<h3 id="💡-문제-해결법-구조화-1">💡 문제 해결법 구조화</h3>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8879fccb-06a9-4f6f-8749-d223054bd127/image.png" alt=""></p>
<h3 id="💡-문제-풀이-1">💡 문제 풀이</h3>
<pre><code class="language-python"># h, m 문자열 분리, dtype 변경
h, m = map(int, input().split())

# h, m 범위 제한
if (0 &lt;= h &lt;= 24) and (0 &lt;= m &lt;= 60):

    # m 45 미만, 45 이상으로 나눔
    if m &lt; 45:
        # h = 0 또는 이상으로 나눔
        if h == 0:
            print(f&quot;{h + 23} {m + 15}&quot;)
        else:
            print(f&quot;{h - 1} {m + 15}&quot;)        
    else:
        print(f&quot;{h} {m - 45}&quot;)
</code></pre>
<h3 id="👩🏻💻-코드-실행-1">👩🏻‍💻 코드 실행</h3>
<blockquote>
<h4 id="1-범위-제한-되어있는지-확인-1">1. 범위 제한 되어있는지 확인</h4>
</blockquote>
<ul>
<li>범위에서 벗어난 값을 입력하면 출력값 X
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/87506c95-51f5-4603-8ead-1a6e866482b7/image.png" alt=""><h4 id="2-알람-시계-설정값-출력">2. 알람 시계 설정값 출력</h4>
</li>
<li>기대한 값이 잘 반환되는 것을 확인 함
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/331bb0f9-f119-448d-b491-e467483cb998/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/d6dc9de0-ff01-4139-9820-59704d4948f9/image.png" alt=""></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.acmicpc.net/problem/2884">문제 2884번. 알람 시계</a></small></p>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p> 알람시계 문제를 풀 때, 45분 전 값을 반환하기 위해 어떻게 코드를 작성하면 좋을까 고민을 많이 했었다. 
 문제 풀이를 위해 풀이 구조를 그려보았을 때, <code>출력 시간 = 입력 시간 - 1 + 24</code> 와 <code>출력 분 = 입력 분 - 45 + 60</code> 을 옮기는 데엔 고민을 조금 했었다.</p>
<p>그래도 아직까진 어려워서 못풀겠다 싶은 것은 없다!</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p>내 핸드폰 속 알람도 저런 기능이 있었으면 좋겠다.
일어나야 하는 시간을 설정하면 45분 전부터 5~10분 단위로 자동 세팅해주는 기능!!!
다음에 조금씩 만들어봐야겠다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] EDA - 수치형 데이터 (2)]]></title>
            <link>https://velog.io/@jaeyoung_jung/Python-EDA-%EC%88%98%EC%B9%98%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-2</link>
            <guid>https://velog.io/@jaeyoung_jung/Python-EDA-%EC%88%98%EC%B9%98%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-2</guid>
            <pubDate>Thu, 29 Sep 2022 13:22:48 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯목표-설정">🎯목표 설정</h1>
<ul>
<li>seaborn의 <code>mpg</code> 데이터셋을 이용하여 <code>수치형 변수</code>에 대해 시각화</li>
<li><code>히스토그램</code>, <code>displot</code>, <code>kdeplot</code>, <code>rugplot</code>, <code>boxplot</code>, <code>violinplot</code> 그려보기</li>
<li>스케일링에 대해 이해하기</li>
</ul>
<h1 id="👩🏻💻이해-과정">👩🏻‍💻이해 과정</h1>
<blockquote>
<p><strong>목차</strong></p>
</blockquote>
<ol>
<li><code>import</code> pandas, numpy, seaborn, matplotlib.pyplot</li>
<li><code>load_dataset</code></li>
<li>seaborn 시각화</li>
</ol>
<hr>
<h1 id="1-데이터-로드">1. 데이터 로드</h1>
<blockquote>
<p><strong>💡 Library</strong></p>
</blockquote>
<pre><code class="language-python">import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt</code></pre>
<p><strong>💡 Dataset : mpg(mile per galon)</strong></p>
<pre><code class="language-python"># 앤스컴 데이터셋 불러오기
df = sns.load_dataset(&quot;mpg&quot;)</code></pre>
<pre><code class="language-python"># 데이터셋 구조 파악
df.shape
&gt;&gt;&gt; (398, 9)</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><code>mpg</code> : 행 398, 열 9 로 구성된 데이터셋</small></p>
<hr>
<h1 id="2-데이터-구조">2. 데이터 구조</h1>
<ul>
<li>데이터가 무엇으로 구성되어있는지 확인하기</li>
<li>데이터 type 확인하기</li>
</ul>
<h2 id="1-데이터-형태-확인하기">1) 데이터 형태 확인하기</h2>
<blockquote>
<p><strong>💡 데이터셋 일부만 가져오기</strong></p>
</blockquote>
<pre><code class="language-python"># 상위 5개 데이터만 불러오기
df.head()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/f38a50cf-32df-426c-b198-e94e9940f8e9/image.png" alt=""></p>
<pre><code class="language-python"># 하위 5개 데이터만 불러오기
df.tail()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/1675049c-4edc-468b-8a46-b3f3bf4f7661/image.png" alt=""></p>
<ul>
<li>열 : <code>mpg</code>, <code>cylinders</code>, <code>displacement</code>, <code>horsepower</code>, <code>weight</code>, <code>acceleration</code>, <code>model_year</code>, <code>origin</code>, <code>name</code></li>
</ul>
<hr>
<h2 id="2-데이터-정보-확인하기">2) 데이터 정보 확인하기</h2>
<blockquote>
<p><strong>💡 데이터셋 요약</strong></p>
</blockquote>
<pre><code class="language-python"># 데이터 기본 정보 요약
df.info()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/49a92921-156d-4cd1-a585-e917022fb50c/image.png" alt=""></p>
<ul>
<li>데이터셋은 총 398개의 데이터를 가지고 있다.</li>
<li><code>origin</code>, <code>name</code>은 type이 <code>object</code> 이다.</li>
<li>데이터 타입, 결측치의 유무, 메모리 사용량 등의 정보를 알 수 있다.</li>
</ul>
<hr>
<blockquote>
<p><strong>💡 데이터셋 결측치</strong></p>
</blockquote>
<pre><code class="language-python"># 데이터 결측치를 True, False로 확인
df.isnull()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/b9caed57-d05d-421f-aeea-c4774e8f5540/image.png" alt=""></p>
<hr>
<p><strong>🔥 결측치 시각화 해보기</strong></p>
<pre><code class="language-python">plt.figure(figsize=(12, 8))
sns.heatmap(df.isnull(), cmap=&quot;Blues&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/4f76513e-886e-4f01-aba1-4546b4a145b5/image.png" alt=""></p>
<ul>
<li>그래프에서 <code>y축(왼) : 데이터 인덱스 번호</code> / <code>x축 : 컬럼명</code> 을 나타낸다.</li>
<li><code>mpg</code> 데이터셋에서 결측치는 <code>horsepower</code>에서 총 6개 존재한다.</li>
</ul>
<hr>
<blockquote>
<p><strong>💡 데이터셋 기술통계</strong></p>
</blockquote>
<pre><code class="language-python"># 데이터 기술 통계값
df.describe()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/bbe04af7-2ea6-4da4-b228-5a1cf1f53f01/image.png" alt="">
<strong>💡 데이터셋 유일값</strong></p>
<pre><code class="language-python"># 데이터 unique 개수
df.nunique()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/d06752cf-5b90-4b9c-ab5c-8d4cc0f7df87/image.png" alt=""></p>
<ul>
<li><code>cylinders</code>, <code>model_year</code>, <code>origin</code> 의 유일값을 보면 전체 데이터 개수(398개)에 비해 매우 적다.<ul>
<li><strong>수치형 변수</strong>이지만 <strong>범주형 변수</strong>에 가깝다고 생각할 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h1 id="3-데이터-시각화">3. 데이터 시각화</h1>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/cfd07c3e-4872-4f77-80fc-0d8ea7dca571/image.png" alt=""></p>
<ul>
<li>1개 변수에 대한 그래프, <code>히스토그램</code>, <code>displot</code>, <code>kdeplot</code>, <code>rugplot</code>, <code>boxplot</code>, <code>violinplot</code> 이전 복습시간에 그려보았다.<ul>
<li><small><a href="https://velog.io/@jaeyoung_jung/Python-EDA-%EC%88%98%EC%B9%98%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-1">참고 : [Python] EDA - 수치형 데이터 (1)</a></small><br></li>
</ul>
</li>
<li>2개 이상의 변수에 대한 그래프 <code>Scatterplot</code>, <code>regplot</code>, <code>residplot</code>, <code>lmplot</code>, <code>jointplot</code>, <code>pairplot</code>, <code>lineplot</code>, <code>heatmap</code> 를 그려 변수들 간의 상관 관계를 알아본다.</li>
</ul>
<hr>
<h3 id="📍scatterplot-시각화">📍Scatterplot 시각화</h3>
<ul>
<li><code>Scatterplot</code> : 두 개 변수 간의 관계를 나타내는 그래프 방법</li>
</ul>
<pre><code class="language-python"># 전체 변수에 대한 관계
sns.scatterplot(data=df)

# 연비와 마력의 관계
sns.scatterplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/482f19e8-46f8-4fde-af77-8925696060de/image.png" alt=""></p>
<ul>
<li>전체 변수에 대해 <code>Scatterplot</code>을 그려보니, 범위가 준구난방이라서 그래프가 어떤 의미를 담고있는지 알기 어려움</li>
<li>비교해볼 변수를 x, y로 지정하여 그리면 어떤 관계를 가지는지 알 수 있음<br></li>
<li><strong>그래프 해석</strong><ul>
<li>연비와 마력은 반비례 관계를 가짐</li>
<li>특히, 연비가 10~20 사이에서 급격하게 마력이 떨어짐</li>
</ul>
</li>
</ul>
<p><br></br></p>
<hr>
<h3 id="📍회귀-잔차-시각화">📍회귀, 잔차 시각화</h3>
<ul>
<li><code>Regplot(회귀)</code> : scatterplot에 회귀선이 추가 된 그래프</li>
<li><code>Residplot(잔차)</code> : 회귀선을 y=0인 축으로 Regplot을 옮긴 그래프</li>
<li>회귀와 잔차 그래프를 그릴 때, <code>x</code>, <code>y</code>값에 컬럼을 기입해줘야 실행 됨</li>
</ul>
<pre><code class="language-python"># 1) regplot 으로 회귀선 그리기
sns.regplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;)

# 2) 회귀선의 잔차를 시각화 하기
sns.residplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/cc2f8b5f-b4aa-45cd-a60a-7cfc4dd9f6fb/image.png" alt=""></p>
<h3 id="💡회귀-분석을-하는-이유">💡회귀 분석을 하는 이유?</h3>
<blockquote>
<p>관찰이나 실험으로 얻은 샘플자료(적은 수의 자료)를 분석하고 설명하기 위해서는 그 <strong>자료를 잘 표현할 수 있는 &#39;방정식&#39;을 예측</strong>해야 한다.<br>
자료를 가장 잘 설명하는 방정식이란, <u>원래 자료와의 오차(error)를 가장 적게 만든 식 입니다.</u><br>
<small><a href="https://gggggeun.tistory.com/4">출처 : 회귀 분석을 하는 이유(feat.회귀선, 회귀 계수)</a></small></p>
</blockquote>
<hr>
<h3 id="📍lmplot-시각화">📍Lmplot 시각화</h3>
<ul>
<li><code>Lmplot</code> : 범주값에 따라 색상을 다르게 할 수 있으며 subplot을 그릴 수 있다.</li>
</ul>
<pre><code class="language-python"># 1) 회귀 시각화 그래프에 origin으로 색상 부여
sns.lmplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;, hue=&quot;origin&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/17ccf4ed-6f0d-4f77-a4c2-f3664af37204/image.png" alt=""></p>
<pre><code class="language-python"># 2) 그래프 나눠서 보기 - subplot 생성
sns.lmplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;, hue=&quot;origin&quot;, col=&quot;origin&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/206769e6-2f62-45c9-b076-d04b97ab537f/image.png" alt=""></p>
<ul>
<li><code>x=mpg</code>, <code>y=horsepower</code>에 대한 변수를 <code>origin</code>별로 색상을 부여하여 <code>lmplot</code>을 그려봄<br></li>
<li><strong>그래프 해석</strong><ul>
<li>연비가 10~20 사이에서 급격하게 마력이 떨어지는데 <code>usa</code> 제품임</li>
<li><code>japan</code>, <code>europe</code> 에서 생산된 것은 비교적 연비와 마력 관계가 완만해 보임</li>
</ul>
</li>
</ul>
<p><br></br></p>
<hr>
<h3 id="📍jointplot-시각화">📍Jointplot 시각화</h3>
<ul>
<li><code>jointplot</code> : 두 개의 수치형 변수 간의 관계를 연구 할 수 있다.</li>
<li>차트의 중앙에서 상관 관계 그래프를 표시해주는데 스캐터 플롯(산점도), 헥스 빈 플롯, 2D 히스토그램 또는 2D 밀도(density) 플롯을 사용하는 것이 일반적이다.</li>
<li><strong>중앙 그래프 선택</strong><ul>
<li><code>kind</code> = &quot;scatter&quot; | &quot;reg&quot; | &quot;resid&quot; | &quot;kde&quot; | &quot;hex&quot; 등 타입명 입력
<br></br></li>
</ul>
</li>
</ul>
<p><strong>(i) 전체 변수에 대한 상관관계</strong></p>
<pre><code class="language-python"># 1) 전체 변수의 상관관계
sns.jointplot(data=df)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/f680ae30-3105-491f-80a0-306a4d3220bc/image.png" alt=""></p>
<ul>
<li>전체 데이터에 대한 <code>jointplot</code> 을 그리면 변수간의 상관관계를 한눈에 알아보기 힘듦</li>
<li>변수가 많고 범위가 넓은 경우 따로 그래프를 그리는 것이 이해하기 쉬움
<br></br></li>
</ul>
<p><strong>(ii) <code>mpg</code>, <code>horsepower</code>에 대한 상관관계</strong></p>
<pre><code class="language-python"># 2) 연비와 마력의 상관관계
sns.jointplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;)

# 3) 연비와 마력의 상관관계 - kde(밀도함수)로 보기
sns.jointplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;, kind=&quot;kde&quot;)

#) 연비와 마력의 상관관계 - hex(헥스빈)으로 밀집도 보기
sns.jointplot(data=df, x=&quot;mpg&quot;, y=&quot;horsepower&quot;, kind=&quot;hex&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/fa378986-0a66-4ac9-970e-36d3bcfdb948/image.png" alt=""></p>
<ul>
<li><code>jointplot</code> 을 그리면 변수간의 상관관계를 한눈에 볼 수 있음</li>
<li><code>kind</code> 를 설정하여 어디에 밀집되어있는지, 등 원하는 분석이 가능함</li>
</ul>
<p><br></br></p>
<hr>
<h3 id="📍pairplot-시각화">📍Pairplot 시각화</h3>
<ul>
<li><code>pairplot</code> : 각 column 별 데이터에 대한 상관관계나 분류적 특성 확인 가능</li>
<li>대각선 방향으로는 하나의 열의 히스토그램을 나타냄</li>
<li>대각선 기준 위 아래는 축이 전환된 것일 뿐, 보여주는 결과는 같음</li>
<li><code>hue</code> 를 추가하여 기존 pairplot에 hue에 지정한 것을 기준으로 나누어 그릴 수 있음<br>

</li>
</ul>
<p><strong>(i) <code>hue=&quot;origin&quot;</code> 을 기준으로 한 pairplot</strong></p>
<pre><code class="language-python"># origin에 대한 pairplot
sns.pairplot(data=df, hue=&quot;origin&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/75f5b464-e0c5-4db7-9a62-ba0cbb60bf93/image.png" alt=""></p>
<p><strong>(ii) 일부 데이터로 그린 pairplot</strong></p>
<pre><code class="language-python"># sample(100) 설정하여 시각화 소요 시간 단축
sns.pairplot(data=df.sample(100), hue=&quot;origin&quot;) # 전체에서 무작위로 100개 데이터 선택</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/7527546f-9b76-400a-8936-fe8391afce17/image.png" alt=""></p>
<ul>
<li><code>pairplot</code> 을 그릴 땐, 여러 그래프를 한 번에 처리하기 때문에 대량의 데이터를 사용하면 시간이 오래 걸림<ul>
<li><code>sample()</code> 로, 데이터를 무작위로 선정하기 </li>
<li><u>전체적인 상관관계를 빠르게 확인하고싶을 때 사용하면 좋은 기능</u></li>
</ul>
</li>
</ul>
<p><br></br></p>
<hr>
<h3 id="📍lineplot-시각화">📍Lineplot 시각화</h3>
<ul>
<li><code>lineplot</code> : 지정한 변수 간의 선형 관계를 알 수 있음</li>
<li><code>hue</code> 별 구분이 가능함<br>

</li>
</ul>
<p><strong>(i) 전체 변수에 대한 선형 그래프</strong></p>
<pre><code class="language-python">sns.lineplot(data=df)</code></pre>
<p><strong>(ii) <code>model_year</code>와 <code>mpg</code>에 대한 선형 그래프</strong></p>
<pre><code class="language-python">sns.lineplot(data=df, x=&quot;model_year&quot;, y=&quot;mpg&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/d85f8886-bdb4-4e71-a92a-2b6544595f65/image.png" alt=""></p>
<ul>
<li>전체 변수에 대해 선형 그래프를 그리게 되면, 알아보기 쉽지않음 (<code>x</code> : 데이터 인덱스, <code>y</code> : 수치형 변수에 대한 값)</li>
<li>변수를 지정하여 그림을 그리면 한 눈에 알아보기 쉬움<br></li>
<li><strong>그래프 해석</strong><ul>
<li>최근에 출시된 모델이 연비가 크다.</li>
<li>80년도에 연비가 약 32 이상인 데이터 때문에 급격히 상승한 구간이 발견 됨</li>
<li><code>hue</code> 를 추가하면 더 의미있는 분석이 될 것으로 생각 됨<br>

</li>
</ul>
</li>
</ul>
<p><strong>(iii) <code>origin</code> 을 기준으로 구분 된 그래프</strong></p>
<pre><code class="language-python">sns.lineplot(data=df, x=&quot;model_year&quot;, y=&quot;mpg&quot;, hue=&quot;origin&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/0eef2fe6-b186-434a-86a5-5c5aebaed436/image.png" alt=""></p>
<ul>
<li><strong>그래프 해석</strong><ul>
<li>나라별로 출시년도가 82년도에 가까워지면서 연비 상승</li>
<li>72 ~ 74 년도 사이에 연비 개선이 이루어지지 않음이 발견 됨</li>
</ul>
</li>
</ul>
<p><br></br></p>
<hr>
<h3 id="📍relplot-시각화">📍Relplot 시각화</h3>
<ul>
<li><code>Relplot</code> <ul>
<li><code>scatterplot</code>과 <code>lineplot</code>를 그릴 수 있다.</li>
<li><strong>범주형 변수</strong> 에 따라 서브플롯을 그릴 수 있다.</li>
<li><code>ci</code> : 신뢰구간을 의미함 (defalt : 포함되어 있음)<br>

</li>
</ul>
</li>
</ul>
<p><strong>(i) <code>scatterplot</code> 서브플롯 그리기</strong></p>
<pre><code class="language-python"># kind의 defalt : scatterplot
sns.relplot(data=df, x=&quot;model_year&quot;, y=&quot;mpg&quot;, hue=&quot;origin&quot;, col=&quot;origin&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/dbae4e98-bf8d-4977-828c-54800d182172/image.png" alt=""></p>
<p><strong>(ii) <code>lineplot</code> 서브플롯 그리기</strong></p>
<pre><code class="language-python"># 신뢰구간 포함
sns.relplot(data=df, x=&quot;model_year&quot;, y=&quot;mpg&quot;,
            hue=&quot;origin&quot;, col=&quot;origin&quot;, kind=&#39;line&#39;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/fbcb9fc1-c8cb-4b01-b15c-4478d3bb6e75/image.png" alt=""></p>
<pre><code class="language-python"># 신뢰구간 포함 X
sns.relplot(data=df, x=&quot;model_year&quot;, y=&quot;mpg&quot;,
            hue=&quot;origin&quot;, col=&quot;origin&quot;, kind=&#39;line&#39;, ci=None)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8dcedbfc-aa77-461a-942a-ba199ef07532/image.png" alt="">
<Br></p>
<h3 id="💡-replot를-사용하는-이유">💡 replot를 사용하는 이유?</h3>
<blockquote>
<ul>
<li><code>Relplot</code> 을 그리면 추정 회귀선과 신뢰구간을 함께 볼 수 있다.</li>
</ul>
</blockquote>
<ul>
<li>신뢰 구간은 <strong>bootstrapping</strong>을 사용하여 계산되며, 대규모 데이터셋에 대해 시간이 많이 소요될 수 있으므로 <code>ci=None</code>을 이용해 비활성화시킬 수 있다.</li>
<li><code>ci=&quot;sd&quot;</code> 로 설정하면 신뢰구간을 <strong>표준 편차</strong>로 표시할 수 있다.<br> 
- ```replot()```의 장점</li>
<li><code>return</code> 값이 <strong>FacetGrid</strong> (여러개의 AxesSubplot를 포함)</li>
<li>scatterplot(), lineplot()의 <code>return</code> 값은 <strong>AxesSubplot</strong> (1장의 그림에 모든 것을 담음)</li>
</ul>
<hr>
<h3 id="📍heatmap-시각화">📍Heatmap 시각화</h3>
<ul>
<li><code>heatmap</code> : 열을 뜻하는 히트(heat)와 지도를 뜻하는 맵(map)을 결합시킨 단어</li>
<li>색상으로 표현할 수 있는 다양한 정보를 일정한 이미지 위에 열분포 형태로 출력</li>
<li><strong>목적</strong> : <code>heatmap</code> 을 통해 <code>상관계수</code>를 시각화 해보자!<br>  

</li>
</ul>
<h3 id="💡-상관계수">💡 상관계수</h3>
<ul>
<li>확률론과 통계학에서 두 변수 간에 어떤 선형적 관계를 갖고 있는 지를 분석하는 방법</li>
<li>두 변수는 서로 독립적인 관계이거나 상관된 관계일 수 있으며 이때 두 변수간의 관계의 강도를 <strong>상관관계(Correlation, Correlation coefficient)</strong>라 한다.</li>
<li>옵션을 따로 쓰지 않으면, <strong>피어슨 상관 계수</strong>로 구함 <br>

</li>
</ul>
<h3 id="💡-피어슨-상관계수">💡 피어슨 상관계수</h3>
<ul>
<li>r 값은 X와 Y가 완전히 동일하면 +1, 전혀 다르면 0, 반대방향으로 완전히 동일하면 -1 을 가진다.</li>
<li>결정계수(coefficient of determination)는 r^2로 계산하며 이것은 X로부터 Y를 예측할 수 있는 정도를 의미한ㄷ.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/a55c2a25-4a7b-4702-ba67-bebf12617fcb/image.png" alt=""></p>
<blockquote>
<pre><code class="language-markdown">r이 -1.0과 -0.7 사이이면, 강한 음적 선형관계,
r이 -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계,
r이 -0.3과 -0.1 사이이면, 약한 음적 선형관계,
r이 -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계,
r이 +0.1과 +0.3 사이이면, 약한 양적 선형관계,
r이 +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계,
r이 +0.7과 +1.0 사이이면, 강한 양적 선형관계</code></pre>
</blockquote>
<pre><code>
  &lt;small&gt;- 서로 다른 상관계수 값을 갖는 산포도 다이어그램의 예&lt;/small&gt;
![](https://velog.velcdn.com/images/jaeyoung_jung/post/10a078d1-3b06-4a9f-8db1-55c0b185f3c6/image.png)

  -----
**(i) 상관계수 구하기**
```python
# 옵션을 따로 쓰지 않으면, 피어슨 상관계수로 구해짐
corr = df.corr()

# np.triu 함수를 이용해 matrix를 상삼각행렬로 만들기   
mask = np.triu(np.ones_like(corr))</code></pre><p><strong>(ii) heatmap 그리기</strong></p>
<pre><code class="language-python"># heatmap으로 상관계수 시각화  
sns.heatmap(corr, cmap=&quot;coolwarm&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/b839fd16-20a6-44e7-bab1-b1e302f4dce1/image.png" alt=""></p>
<pre><code class="language-python"># 대각선을 기준으로 윗부분 제거 + 각 셀에 숫자 입력 
sns.heatmap(corr, cmap=&quot;coolwarm&quot;, annot=True, mask=mask)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/34a770ef-92c0-4edc-813a-c440ac05e078/image.png" alt=""></p>
<ul>
<li>seaborn을 이용해 히트맵을 그려보았다.</li>
<li>heatmap의 paramets<ul>
<li><code>mask</code> : bool array or DataFrame, optional If passed, data will not be shown in cells where <code>mask</code> is True.</li>
<li><code>annot=True</code> : annotate each cell with numeric value<br></li>
</ul>
</li>
<li><strong>그래프 해석</strong><ul>
<li>히트맵 위에 표기된 상관계수 값을 보면, 빨간색으로 되어 있는(+1 값에 가까운) 부분은 양적 선형 관계에 가깝다는 것을 의미 함</li>
<li>예를 들어, <code>displavement</code>와 <code>cylinders</code>는 선형 관계가 강하다는 뜻임</li>
</ul>
</li>
</ul>
<blockquote>
<ul>
<li><strong>🔥 확인해 보기</strong></li>
</ul>
</blockquote>
<pre><code class="language-python"># 위 히트맵에서 알아낸 &#39;cylinders&#39;와 &#39;displacement&#39;의 선형관계를 그래프로 그려보기 
sns.lineplot(data=df, x=&quot;cylinders&quot;, y=&quot;displacement&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/7d31f508-3c58-4de5-b90b-9af50f69324e/image.png" alt=""></p>
<ul>
<li>상관계수를 계산하여 <strong>heatmap</strong>을 그려보면 변수 간의 <strong>선형성</strong>을 파악할 수 있다.</li>
<li>위 그래프에서 cylinders가 5 부분에서 신뢰구간이 커짐<ul>
<li>이유? 이상치때문에 신뢰구간이 급격히 커진 것으로 생각 됨</li>
</ul>
</li>
</ul>
<hr>
<h1 id="🤔느낀점">🤔느낀점</h1>
<p>  2개 이상의 변수에 대한 그래프를 그려보았다. 그릴 수 있는 그래프는 거의 다 그려본 것 같다. 이렇게 배운 것을 데이터셋이 주어졌을 때 무엇을 전달하기 위해 어떤 그래프를 그릴 것인지 선택하기 위해선 여러 실습이 중요하겠다고 생각했다. </p>
<p>Kaggle에 올라온 데이터를 이용해서 배운 것들을 적용시켜봐야겠다.</p>
<hr>
<h1 id="📄참고문헌">📄참고문헌</h1>
<p><a href="https://ko.wikipedia.org/wiki/%EC%82%B0%EC%A0%90%EB%8F%84">참고 1. 산점도 </a>
<a href="https://gggggeun.tistory.com/4">참고 2. 회귀 분석의 필요성</a>
<a href="https://m.blog.naver.com/youji4ever/221943453636">참고 3. 파이썬 seaborn : 시각화 유형 : 상관관계 - 조인트 플롯</a>
<a href="https://ko.wikipedia.org/wiki/%EC%83%81%EA%B4%80_%EB%B6%84%EC%84%9D">참고 4. 상관 분석</a>
<a href="https://steadiness-193.tistory.com/198">참고 5. Seaborn - 관계 그래프 : pairplot</a>
<a href="https://dsbook.tistory.com/52">참고 6. Seaborn으로 시각화하기 - [relplot(), scatter(), lineplot()]</a>
<a href="https://www.beusable.net/blog/?p=1497">참고 7. 히트맵(heatmap)</a>
<a href="https://rfriend.tistory.com/419">참고 8. [Python] 히트맵 그리기 (Heatmap by python matplotlib, seaborn, pandas</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 백준(Baekjoon) 문제풀이 - 조건문(1)]]></title>
            <link>https://velog.io/@jaeyoung_jung/Python-%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%A1%B0%EA%B1%B4%EB%AC%B8-1</link>
            <guid>https://velog.io/@jaeyoung_jung/Python-%EB%B0%B1%EC%A4%80-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%A1%B0%EA%B1%B4%EB%AC%B8-1</guid>
            <pubDate>Thu, 29 Sep 2022 08:10:30 GMT</pubDate>
            <description><![CDATA[<h1 id="📝-문제">📝 문제</h1>
<ul>
<li>문제는 <a href="https://www.acmicpc.net/">Baekjoon</a>에 등록되어 있음</li>
<li>문제는 <strong>조건문(if문)</strong>과 관련 됨</li>
</ul>
<hr>
<h2 id="📍-1330번-문제---두-수-비교하기">📍 1330번 문제 - 두 수 비교하기</h2>
<blockquote>
<ul>
<li><strong>문제</strong>
: 두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.<br>
</li>
</ul>
</blockquote>
<ul>
<li><strong>입력</strong> 
: 첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.<br></li>
<li>*<em>출력 *</em>
: 첫째 줄에 다음 세 가지 중 하나를 출력한다.<ul>
<li>A가 B보다 큰 경우에는 &#39;&gt;&#39;를 출력한다.</li>
<li>A가 B보다 작은 경우에는 &#39;&lt;&#39;를 출력한다.</li>
<li>A와 B가 같은 경우에는 &#39;==&#39;를 출력한다.<br></li>
</ul>
</li>
<li><strong>제한</strong>
: -10,000 ≤ A, B ≤ 10,000</li>
</ul>
<h3 id="💡-문제-해결법-구조화">💡 문제 해결법 구조화</h3>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/127f4e28-f26d-472e-a723-c4e4b4c9bc5b/image.png" alt=""></p>
<h3 id="💡-문제-풀이">💡 문제 풀이</h3>
<pre><code class="language-python"># 입력 값을 a, b로 나눠줌
a, b = map(int, input().split())

# 범위 제한, 비교연산자 출력 조건문 
if (-10000 &lt;= a &lt;= 10000) and (-10000 &lt;= b &lt;= 10000):   

    if a == b:
        print(&#39;==&#39;)
    elif a &gt; b:
        print(&#39;&gt;&#39;)
    else:
        print(&#39;&lt;&#39;)        
else:
    pass # 결과 안 나오게 설정</code></pre>
<h3 id="👩🏻💻-코드-실행">👩🏻‍💻 코드 실행</h3>
<blockquote>
<h4 id="1-범위-제한-되어있는지-확인">1. 범위 제한 되어있는지 확인</h4>
</blockquote>
<ul>
<li>범위 벗어나면 아무것도 출력되지 않게 <code>pass</code> 문 사용
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/e1d8e8c5-315a-460b-a1ca-c2cd711fd746/image.png" alt=""><h4 id="2-비교연산자-출력-확인">2. 비교연산자 출력 확인</h4>
</li>
<li><code>==</code> 
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/c432e7d1-d7ff-4fdf-9d64-62d76cd84954/image.png" alt=""><br></li>
<li><code>&gt;</code>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/83d9a8b3-6b2b-4247-8be9-c66e06a95bb9/image.png" alt=""><br></li>
<li><code>&lt;</code>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/2d76d42c-34c2-425c-a01e-9ec7bd95d3f6/image.png" alt=""></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.acmicpc.net/problem/1330">문제 1330번. 두 수 비교하기</a></small></p>
<hr>
<h1 id="📍-9498번-문제---시험-성적">📍 9498번 문제 - 시험 성적</h1>
<blockquote>
<ul>
<li><strong>문제</strong>
: 시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.<br>
</li>
</ul>
</blockquote>
<ul>
<li><strong>입력</strong> 
: 첫째 줄에 시험 점수가 주어진다. <u>시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.</u><br></li>
<li>*<em>출력 *</em>
: 시험 성적을 출력한다.</li>
</ul>
<h3 id="💡-문제-해결법-구조화-1">💡 문제 해결법 구조화</h3>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8e652d16-6624-4d7b-82de-cd4ac8817952/image.png" alt=""></p>
<h3 id="💡-문제-풀이-1">💡 문제 풀이</h3>
<pre><code class="language-python">score = int(input())

if 0 &lt;= score &lt;= 100:

    # 성적 출력
    if 90 &lt;= score &lt;= 100:
        print(&#39;A&#39;)
    elif 80 &lt;= score &lt;= 89:
        print(&#39;B&#39;)
    elif 70 &lt;= score &lt;= 79:
        print(&#39;C&#39;)
    elif 60 &lt;= score &lt;= 69:
        print(&#39;D&#39;)
    else:
        print(&#39;F&#39;)

else:
    pass</code></pre>
<h3 id="👩🏻💻-코드-실행-1">👩🏻‍💻 코드 실행</h3>
<blockquote>
<h4 id="1-범위-제한-되어있는지-확인-1">1. 범위 제한 되어있는지 확인</h4>
</blockquote>
<ul>
<li>범위 벗어나면 아무것도 출력되지 않게 <code>pass</code> 문 사용
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/f033b60d-0318-4623-89c3-3434712913da/image.png" alt=""><br><h4 id="2-시험-성적-출력-확인">2. 시험 성적 출력 확인</h4>
</li>
<li><code>if문</code> 에 시험 점수가 높은 순부터 입력함
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/ed8768fd-ed13-4194-948b-ef9e532b9111/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/7c86c4b8-e613-431e-8ca3-3c4d354650d6/image.png" alt=""></li>
</ul>
<h3 id="👩🏻💻-코드-적용">👩🏻‍💻 코드 적용</h3>
<ul>
<li><strong>실생활에 적용해 보기</strong><pre><code class="language-python"># 기사 시험 성적
score = int(input(&quot;시험 성적을 입력해 주세요 : &quot;))
</code></pre>
</li>
</ul>
<h1 id="기사-시험-합격-불합격-공지">기사 시험 합격 불합격 공지</h1>
<p>if 0 &lt;= score &lt;= 100:</p>
<pre><code># 성적 출력
if score &gt;= 60:
    print(f&#39;{score}점으로 합격하셨습니다.&#39;)
else:
    print(f&#39;{score}점으로 불합격하셨습니다.&#39;)        </code></pre><p>else:
    print(&quot;옳지 않은 값을 입력하셨습니다.&quot;)</p>
<pre><code>

&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;small&gt;[문제 9498번. 시험 성적](https://www.acmicpc.net/problem/9498)&lt;/small&gt;

------
## 📍 2753번 문제 - 윤년
&gt;- **문제**
  -  연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
  - 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
  - 예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
&lt;br&gt;
- **입력** 
: 첫째 줄에 연도가 주어진다. &lt;u&gt;연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.&lt;/u&gt;
&lt;br&gt;
- **출력 **
: 첫째 줄에 윤년이면 1, 아니면 0을 출력한다.


### 💡 문제 해결법 구조화
![](https://velog.velcdn.com/images/jaeyoung_jung/post/38a3e84e-bfea-4042-99b5-9dbf71fe8077/image.png)



### 💡 문제 풀이
```python
year = int(input())

if 1 &lt;= year &lt;= 4000:

    if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):
        print(&#39;1&#39;)
    else:
        print(&#39;0&#39;)</code></pre><h3 id="👩🏻💻-코드-실행-2">👩🏻‍💻 코드 실행</h3>
<blockquote>
<h4 id="1-범위-제한-되어있는지-확인-2">1. 범위 제한 되어있는지 확인</h4>
</blockquote>
<ul>
<li>범위 벗어나면 아무것도 출력되지 않음
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/e7f7ee1b-5646-401a-92d9-705c348fc5ec/image.png" alt=""><br><h4 id="2-결과-출력">2. 결과 출력</h4>
</li>
<li>윤년인 경우
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/62a06c2b-23c1-48ec-be64-7203a2d9b5be/image.png" alt=""><br></li>
<li>윤년이 아닌 경우
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/b2d019df-bb4d-4584-a510-7fec45575a74/image.png" alt=""></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.acmicpc.net/problem/2753">문제 2753번. 윤년</a></small></p>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p> 윤년 문제를 풀 때, 어떻게 코드를 작성하면 간결하게, 보기 쉽게 적을 수 있을 까 고민을 많이 했다.
 여러줄 풀어서 작성할 수 있지만 간결하게! 작성하고 싶어서 고민을 많이 했었다.
 조건문을 깔끔하게! 사용할 수 있도록 연습을 많이 해봐야겠다 :)</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p>배울 것이 참... 많다.</p>
<h1 id="📄-참고문헌">📄 참고문헌</h1>
<p><a href="https://ko.wikipedia.org/wiki/%EC%9C%A4%EB%85%84">참고 1. 윤년 - 위키백과</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 해커랭크(HackerRank) 문제풀이 3]]></title>
            <link>https://velog.io/@jaeyoung_jung/SQL-%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-3</link>
            <guid>https://velog.io/@jaeyoung_jung/SQL-%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-3</guid>
            <pubDate>Thu, 29 Sep 2022 07:52:03 GMT</pubDate>
            <description><![CDATA[<h1 id="📝-문제">📝 문제</h1>
<ul>
<li>문제는 <a href="https://www.hackerrank.com/dashboard">HackerRank</a>에 등록되어 있음</li>
<li>모든 문제는 아래에 첨부한 <code>STUDENTS</code>, <code>Employee</code> 테이블 사용</li>
<li>데이터베이스로는 <code>MySQL</code>을 사용</li>
</ul>
<p><br><small><strong>테이블 명 : STUDENTS</strong></small></p>
<table>
<thead>
<tr>
<th align="center">Column</th>
<th align="center">Type</th>
</tr>
</thead>
<tbody><tr>
<td align="center">ID</td>
<td align="center">Integer</td>
</tr>
<tr>
<td align="center">NAME</td>
<td align="center">String</td>
</tr>
<tr>
<td align="center">Marks</td>
<td align="center">Integer</td>
</tr>
<tr>
<td align="center"><small>The Name column only contains uppercase (A-Z) and lowercase (a-z) letters.</small></td>
<td align="center"></td>
</tr>
</tbody></table>
<p><br><small><strong>테이블 명 : Employee</strong></small></p>
<table>
<thead>
<tr>
<th align="center">Column</th>
<th align="center">Type</th>
</tr>
</thead>
<tbody><tr>
<td align="center">employee_id</td>
<td align="center">Integer</td>
</tr>
<tr>
<td align="center">name</td>
<td align="center">String</td>
</tr>
<tr>
<td align="center">months</td>
<td align="center">Integer</td>
</tr>
<tr>
<td align="center">salary</td>
<td align="center">Integer</td>
</tr>
<tr>
<td align="center"><small>where employee_id is an employee&#39;s ID number, name is their name, months is the total number of months they&#39;ve been working for the company, and salary is their monthly salary.</small></td>
<td align="center"></td>
</tr>
</tbody></table>
<hr>
<h3 id="📍-1번-문제">📍 1번 문제</h3>
<blockquote>
<p>Query the Name of any student in <strong>STUDENTS</strong> who scored higher than <code>75</code> Marks. Order your output by the last three characters of each name. If two or more students both have names ending in the same last three characters (i.e.: Bobby, Robby, etc.), secondary sort them by ascending ID.</p>
</blockquote>
<pre><code class="language-markdown">1) 점수가 75점보다 높은 학생의 이름을 출력
2) 정렬은 이름의 마지막 3자로 정렬한 후, 중복값이 있으면 id로 정렬 -- ASC</code></pre>
<pre><code class="language-sql">SELECT name
FROM students
WHERE marks &gt; 75
ORDER BY RIGHT(name, 3), id -- name의 오른쪽 3자로 정렬 후, 중복이면 id로 정렬 
</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/more-than-75-marks/problem?isFullScreen=true">문제 1. Higher Than 75 Marks</a></small></p>
<hr>
<h3 id="📍-2번-문제">📍 2번 문제</h3>
<blockquote>
<p>Write a query that prints a list of employee names (i.e.: the name attribute) from the <strong>Employee</strong> table in alphabetical order.</p>
</blockquote>
<pre><code class="language-markdown">: Employee 테이블에 있는 name 값을 알파벳순으로 정렬</code></pre>
<pre><code class="language-sql">SELECT name
FROM employee
ORDER BY name -- ORDER BY (defalt값이 ASC)
</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/name-of-employees/problem?isFullScreen=true">문제 2. Employee Names</a></small></p>
<hr>
<h3 id="📍-3번-문제">📍 3번 문제</h3>
<blockquote>
<p>Write a query that prints a list of employee names (i.e.: the name attribute) for employees in <strong>Employee</strong> having a salary greater than <code>$2000</code> per month who have been employees for less than <code>10</code> months. Sort your result by ascending employee_id.</p>
</blockquote>
<pre><code class="language-markdown">1) 근무기간이 10개월 미만, 월 급여가 $2000 를 넘는 직원 이름
2) 직원 ID 오름차순으로 결과 정렬</code></pre>
<pre><code class="language-sql">SELECT name
FROM employee
WHERE months &lt; 10 AND salary &gt; 2000 -- 두 조건을 만족시키기 위해 AND 사용
ORDER BY employee_id</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/salary-of-employees/problem?isFullScreen=true">문제 3. Employee Salaries</a></small></p>
<hr>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<blockquote>
<p>맞춰야하는 조건이 많이 없어서 아직까진 어려운 점이 없었다!
기억해야될 부분이 있다면 문자열을 자르는 방법!?<Br>
<strong>MySQL의 문자열 자르기 방법</strong> (<code>LEFT</code>, <code>RIGHT</code>, <code>SUBSTRING</code>) 을 기억해두면 이름에서 성을 가져와야하는 경우,  주민등록번호에서 앞 6자리만 가져오는 방법 등에 사용할 수 있을 것이다!</p>
</blockquote>
<blockquote>
<h3 id="🔥-배운-것-적용해-보기">🔥 배운 것 적용해 보기</h3>
</blockquote>
<ul>
<li><code>Customer</code> 테이블은 고객의 이름과 주민등록번호로 구성되어있음</li>
<li><strong>조건</strong>
1) 이때, <code>******-*******</code>로 되어있는 데이터 중 앞 6자만 가져와보기
2) 반환할 데이터 : <code>이름</code>, <code>생년월일</code> </li>
</ul>
<p><strong>INPUT</strong> (<code>Customer</code>)</p>
<table>
<thead>
<tr>
<th align="center">Name</th>
<th align="center">BirthNum</th>
</tr>
</thead>
<tbody><tr>
<td align="center">홍길동</td>
<td align="center">550202-1234567</td>
</tr>
<tr>
<td align="center">김영희</td>
<td align="center">770303-1234567</td>
</tr>
<tr>
<td align="center">김철수</td>
<td align="center">990404-1234567</td>
</tr>
<tr>
<td align="center">고길동</td>
<td align="center">110505-1234567</td>
</tr>
</tbody></table>
<p><strong>CODE</strong></p>
<pre><code class="language-sql">SELECT Name AS &quot;이름&quot;, LEFT(BirthNum, 6) AS &quot;생년월일&quot;
FROM Customer</code></pre>
<p>  <strong>OUTPUT</strong></p>
<table>
<thead>
<tr>
<th align="center">이름</th>
<th align="center">생년월일</th>
</tr>
</thead>
<tbody><tr>
<td align="center">홍길동</td>
<td align="center">550202</td>
</tr>
<tr>
<td align="center">김영희</td>
<td align="center">770303</td>
</tr>
<tr>
<td align="center">김철수</td>
<td align="center">990404</td>
</tr>
<tr>
<td align="center">고길동</td>
<td align="center">110505</td>
</tr>
</tbody></table>
<blockquote>
<p>다음에는 더 복잡한 구조의 데이터를 수집하고, 조건에 맞게 추출, 분석해보는 연습을 해봐야겠다!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] EDA - 수치형 데이터 (1)]]></title>
            <link>https://velog.io/@jaeyoung_jung/Python-EDA-%EC%88%98%EC%B9%98%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-1</link>
            <guid>https://velog.io/@jaeyoung_jung/Python-EDA-%EC%88%98%EC%B9%98%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-1</guid>
            <pubDate>Wed, 28 Sep 2022 14:39:34 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯목표-설정">🎯목표 설정</h1>
<ul>
<li>seaborn의 <code>mpg</code> 데이터셋을 이용하여 <code>수치형 변수</code>에 대해 시각화</li>
<li><code>히스토그램</code>, <code>displot</code>, <code>kdeplot</code>, <code>rugplot</code>, <code>boxplot</code>, <code>violinplot</code> 그려보기</li>
<li>스케일링에 대해 이해하기</li>
</ul>
<h1 id="👩🏻💻이해-과정">👩🏻‍💻이해 과정</h1>
<blockquote>
<p><strong>목차</strong></p>
</blockquote>
<ol>
<li><code>import</code> pandas, numpy, seaborn, matplotlib.pyplot</li>
<li><code>load_dataset</code></li>
<li>seaborn 시각화</li>
</ol>
<hr>
<h1 id="1-데이터-로드">1. 데이터 로드</h1>
<blockquote>
<p><strong>💡 Library</strong></p>
</blockquote>
<pre><code class="language-python">import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt</code></pre>
<p><strong>💡 Dataset : mpg(mile per galon)</strong></p>
<pre><code class="language-python"># 앤스컴 데이터셋 불러오기
df = sns.load_dataset(&quot;mpg&quot;)</code></pre>
<pre><code class="language-python"># 데이터셋 구조 파악
df.shape
&gt;&gt;&gt; (398, 9)</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><code>mpg</code> : 행 398, 열 9 로 구성된 데이터셋</small></p>
<hr>
<h1 id="2-데이터-구조">2. 데이터 구조</h1>
<ul>
<li>데이터가 무엇으로 구성되어있는지 확인하기</li>
<li>데이터 type 확인하기</li>
</ul>
<h2 id="1-데이터-형태-확인하기">1) 데이터 형태 확인하기</h2>
<blockquote>
<p><strong>💡 데이터셋 일부만 가져오기</strong></p>
</blockquote>
<pre><code class="language-python"># 상위 5개 데이터만 불러오기
df.head()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/f38a50cf-32df-426c-b198-e94e9940f8e9/image.png" alt=""></p>
<pre><code class="language-python"># 하위 5개 데이터만 불러오기
df.tail()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/1675049c-4edc-468b-8a46-b3f3bf4f7661/image.png" alt=""></p>
<ul>
<li>열 : <code>mpg</code>, <code>cylinders</code>, <code>displacement</code>, <code>horsepower</code>, <code>weight</code>, <code>acceleration</code>, <code>model_year</code>, <code>origin</code>, <code>name</code></li>
</ul>
<hr>
<h2 id="2-데이터-정보-확인하기">2) 데이터 정보 확인하기</h2>
<blockquote>
<p><strong>💡 데이터셋 요약</strong></p>
</blockquote>
<pre><code class="language-python"># 데이터 기본 정보 요약
df.info()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/49a92921-156d-4cd1-a585-e917022fb50c/image.png" alt=""></p>
<ul>
<li>데이터셋은 총 398개의 데이터를 가지고 있다.</li>
<li><code>origin</code>, <code>name</code>은 type이 <code>object</code> 이다.</li>
<li>데이터 타입, 결측치의 유무, 메모리 사용량 등의 정보를 알 수 있다.</li>
</ul>
<hr>
<blockquote>
<p><strong>💡 데이터셋 결측치</strong></p>
</blockquote>
<pre><code class="language-python"># 데이터 결측치를 True, False로 확인
df.isnull()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/b9caed57-d05d-421f-aeea-c4774e8f5540/image.png" alt=""></p>
<hr>
<p><strong>🔥 결측치 시각화 해보기</strong></p>
<blockquote>
<p><small><strong>CMAP (colormaps)</strong></p>
</blockquote>
<ul>
<li><p><code>print(plt.colormaps())</code> : colormap 종류 확인</p>
</li>
<li><p><code>coolwarm</code> : heatmap에서 한눈에 파악하기 좋은 컬러</p>
</li>
<li><p>Sequential, Diverging, Cyclinc 등 다양한 상황에서 색상 적용할 수 있음</small></p>
<pre><code class="language-python">plt.figure(figsize=(12, 8))
sns.heatmap(df.isnull(), cmap=&quot;Blues&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/4f76513e-886e-4f01-aba1-4546b4a145b5/image.png" alt=""></p>
</li>
<li><p>그래프에서 <code>y축(왼) : 데이터 인덱스 번호</code> / <code>x축 : 컬럼명</code> 을 나타낸다.</p>
</li>
<li><p><code>mpg</code> 데이터셋에서 결측치는 <code>horsepower</code>에서 총 6개 존재한다.</p>
</li>
</ul>
<hr>
<blockquote>
<p><strong>💡 데이터셋 기술통계</strong></p>
</blockquote>
<pre><code class="language-python"># 데이터 기술 통계값
df.describe()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/bbe04af7-2ea6-4da4-b228-5a1cf1f53f01/image.png" alt="">
<strong>💡 데이터셋 유일값</strong></p>
<pre><code class="language-python"># 데이터 unique 개수
df.nunique()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/d06752cf-5b90-4b9c-ab5c-8d4cc0f7df87/image.png" alt=""></p>
<ul>
<li><code>cylinders</code>, <code>model_year</code>, <code>origin</code> 의 유일값을 보면 전체 데이터 개수(398개)에 비해 매우 적다.<ul>
<li><strong>수치형 변수</strong>이지만 <strong>범주형 변수</strong>에 가깝다고 생각할 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h1 id="3-데이터-시각화">3. 데이터 시각화</h1>
<blockquote>
<h4 id="👀-수치형-데이터numberical-data란">👀 수치형 데이터(numberical data)란?</h4>
</blockquote>
<ul>
<li>관측된 값이 수치로 측정되는 자료를 말한다.</li>
<li>양적 자료(quantitative data)라고도 불린다.</li>
<li>관측되는 값의 성질에 따라 <strong>연속형 자료(continuous data)</strong>, <strong>이산형 자료(discrete data)</strong>로 구분된다.</li>
</ul>
<h2 id="1-수치형-데이터-찾기">1) 수치형 데이터 찾기</h2>
<h3 id="📍히스토그램-그리기">📍히스토그램 그리기</h3>
<pre><code class="language-python"># 막대 개수 50개로 설정
df.hist(figsize=(12, 10), bins=50)
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/ed02231a-551c-4e06-a5d7-e0a5a9953eb4/image.png" alt=""></p>
<pre><code class="language-python"># 막대 개수 100개로 설정
df.hist(figsize=(12, 10), bins=1000)
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/2a2b10b0-27de-4859-88be-261c3f54ba12/image.png" alt=""></p>
<ul>
<li><code>hist</code> : 각 변수에 대한 따른 y축(count) 관계이다.</li>
<li><code>bins</code> : 막대그래프의 개수이다.<br></li>
<li><strong>그래프 해석</strong><ul>
<li><code>cylinders</code> 는 범주형 데이터로 볼 수 있다.</li>
<li><code>mpg</code>, <code>displacement</code>, <code>horsepower</code>, <code>weight</code> 는 왼쪽으로 치우쳐있다.</li>
<li><code>acceleration</code> 은 15를 기준으로 대칭성을 보인다.<br></li>
<li>수치형 데이터로 시각화 해 볼 column은 <code>mpg</code>, <code>displacement</code>, <code>horsepower</code>, <code>weight</code> 이다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="2-수치형-데이터-시각화">2) 수치형 데이터 시각화</h2>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/cfd07c3e-4872-4f77-80fc-0d8ea7dca571/image.png" alt=""></p>
<ul>
<li>1)에서 찾은 <code>수치형 변수</code>를 시각화 해보자.<ul>
<li>변수의 <code>count</code> 값에 대해 시각화</li>
<li>변수의 밀도 값에 대해 시각화
<br></br></li>
</ul>
</li>
</ul>
<h3 id="📍displot-시각화">📍Displot 시각화</h3>
<ul>
<li>y축 기본값 : <strong>개수(count)</strong></li>
</ul>
<blockquote>
<h4 id="1-비대칭도왜도">1) 비대칭도(왜도)</h4>
</blockquote>
<ul>
<li>skew 출력 : <code>df.skew()</code></li>
<li>skew 값 정렬 : <code>df.skew().sort_values()</code> <ul>
<li><strong>default</strong> : ascending <strong>ASC</strong><h4 id="2-첨도">2) 첨도</h4>
</li>
</ul>
</li>
<li>kurt 출력 : <code>df.kurt()</code></li>
<li>kurt 값 정렬 : <code>df.kurt().sort_values(ascending=False)</code><ul>
<li><code>ascending=False</code> : <strong>DESC</strong> 정렬<h4 id="3-피어슨의-비대칭-계수">3) 피어슨의 비대칭 계수</h4>
</li>
</ul>
</li>
<li>칼 피어슨이 비대칭도 측정을 위해 제안한 간단한 계산법</li>
<li>왜도와 비슷하게 분포가 좌우로 얼마나 대칭적인지를 나타내는 통계값</li>
<li>비대칭도 정의<ul>
<li><code>(평균-최빈값) / 표준편차</code></li>
</ul>
</li>
</ul>
<p>(i) <strong>한 개의 수치변수에 대한 시각화</strong></p>
<pre><code class="language-python"># hist, kde 그래프를 한번에 그리기
sns.displot(data=df, x=&quot;mpg&quot;, kde=True)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8d509dc7-8c46-4e84-b578-fa796081ea47/image.png" alt=""></p>
<p>(ii) <strong>두 개의 수치변수에 대한 시각화</strong></p>
<pre><code class="language-python"># hist, kde 그래프를 한번에 그리기 
# origin에 대해 subplot 생성
sns.displot(data=df, x=&quot;mpg&quot;, kde=True,
            hue=&quot;origin&quot;, col=&quot;origin&quot;, bins=30)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/5960629d-7144-4151-9314-37fbb0b22858/image.png" alt=""></p>
<ul>
<li><code>displot</code> : <code>히스토그램</code>, <code>kdeplot</code>을 한 번에 그릴 수 있는 그래프</li>
<li><code>hue</code> : 설정한 값에 대해 색상 부여</li>
<li><code>col</code> : 설정한 값에 대해 subplot 생성<br></li>
<li><strong>그래프 해석</strong><ul>
<li>전체 데이터에 대한 연비는 약 10 ~ 45 범위에서 왼쪽으로 치우쳐져 있다. (positive skewness)</li>
<li><code>usa</code> : 연비는 10~25 사이로 치우쳐져 있다.</li>
<li><code>europe</code>에 대한 연비는 <strong>정규 분포</strong>에 가깝다는 것을 알 수 있다.
<br></br></li>
</ul>
</li>
</ul>
<hr>
<h3 id="📍kdeplot-rugplot-시각화">📍Kdeplot, Rugplot 시각화</h3>
<blockquote>
<ul>
<li><code>KDE(Kernel Density Estimate)</code> </li>
</ul>
</blockquote>
<ul>
<li>관측치에 대한 <strong>확률밀도함수</strong>를 그림 (히스토그램의 밀도를 추정한 것)</li>
<li>y축 기본값 : <strong>밀도(Density)</strong><br>
- ```RUG(선분)```</li>
<li>작은 선분(rug)으로 데이터들의 위치 및 분포를 보여줌</li>
</ul>
<p><strong>(i) 전체 데이터에 대한 밀도함수</strong></p>
<pre><code class="language-python">sns.kdeplot(data=df) # 부드러운 곡선
sns.rugplot(data=df, x=&quot;mpg&quot;) # 아래의 작은 선분</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/fbffdc0d-13a4-4edb-9bb0-bcd9960b33b6/image.png" alt=""></p>
<ul>
<li>데이터별로 값의 범위가 다르기 때문에 한눈에 의미 분석하기 어렵다.</li>
<li><code>subplot 기능</code>을 사용할 수 없기 때문에, <code>x=&quot;&quot;</code> 를 추가하여 데이터별 그래프 그려야 한다.
<br></br></li>
</ul>
<p><strong>(ii) <code>mpg</code>에 대한 밀도함수</strong></p>
<pre><code class="language-python"># kdeplot
sns.kdeplot(data=df, x=&quot;mpg&quot;)

# rugplot 
sns.rugplot(data=df, x=&quot;mpg&quot;)

# kde + rug plot
sns.kdeplot(data=df, x=&quot;mpg&quot;)
sns.rugplot(data=df, x=&quot;mpg&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/be27137d-882b-4cb8-8ff7-3b37878db916/image.png" alt=""></p>
<ul>
<li><code>kdeplot</code>, <code>rugplot</code>으로 어디에 데이터가 몰려있는지 알 수 있다.</li>
<li><code>violinplot</code> : <code>kdeplot</code>을 x축을 기준으로 데칼코마니 한 모양</li>
</ul>
<p><br></br></p>
<hr>
<h3 id="📍boxplot-violinplot-시각화">📍Boxplot, Violinplot 시각화</h3>
<ul>
<li><code>boxplot</code> : 사분위 수, 이상치를 나타내는 그래프</li>
<li><code>violingplot</code> : <code>kdeplot</code>을 마주보고 그린 그래프<ul>
<li>그래프에서 흰 점 (중간값)
<br></br></li>
</ul>
</li>
</ul>
<p><strong>(i) 전체 변수에 대한 밀도함수</strong></p>
<pre><code class="language-python"># boxplot으로 전체 변수 시각화
sns.boxplot(data=df)

# violinplot으로 전체 변수 시각화
sns.violinplot(data=df)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/3b159f0e-fb7c-4c34-a982-14281cb91e63/image.png" alt=""></p>
<ul>
<li>전체 변수에 대해 시각화를 해보면 범위가 커서 그래프가 전달하고자하는 의미를 파악하기 힘들다.</li>
<li>범위를 <strong>스케일링</strong>하여 위 문제를 해결해보자.</li>
</ul>
<blockquote>
<p><strong>💡 스케일링(Scaling)이란?</strong>
모든 특성의 범위(또는 분포)를 같게 만드는 것</p>
<blockquote>
<p>** 👀 주로 사용되는 스케일링 개념 **</p>
</blockquote>
</blockquote>
<pre><code class="language-markdown">(1) Standardization (표준화)
- 특성들의 평균을 0, 분산을 1로 스케일링하는 것
- 즉, 특성들을 정규분포로 만드는 것</code></pre>
<pre><code class="language-markdown">(2) Normalization (정규화)
  - 특성들을 특정 범위 (주로 [0, 1]) 로 스케일 하는 것
  - 가장 작은 값은 0, 가장 큰 값은 1로 변환되므로, 모든 특성들은 [0, 1] 범위를 갖게 됨</code></pre>
<p><br></br></p>
<p>*<em>(ii) 스케일링 후, 밀도함수 *</em></p>
<ul>
<li><strong>정규화 과정</strong><pre><code class="language-python"># 수치형 데이터를 변수 df_num에 할당 
df_num = df.select_dtypes(include=&quot;number&quot;)
</code></pre>
</li>
</ul>
<h1 id="정규화--관측치---평균--표준편차">정규화 : (관측치 - 평균) / 표준편차</h1>
<p>df_std = (df_num - df_num.mean())/df_num.std()</p>
<h1 id="정규화-후-전체-변수에-대한-기술통계값-확인-소수점-2자리까지">정규화 후, 전체 변수에 대한 기술통계값 확인 (소수점 2자리까지)</h1>
<p>df_std.describe().round(2)</p>
<pre><code>![](https://velog.velcdn.com/images/jaeyoung_jung/post/0c5fbcd8-4784-485c-b663-ce8183a6fd8f/image.png)


- **정규화된 변수에 대한 밀도함수**
```python
# boxplot으로 전체 변수 시각화 
sns.boxplot(data=df_std)

# Violinplot으로 전체 변수 시각화
sns.violinplot(data=df_std)</code></pre><p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/dd17b7af-09f1-40a8-9314-10fa961befc7/image.png" alt=""></p>
<ul>
<li>범위가 중구난방인 변수를 스케일링 하게 되면, 위와 같이 그래프가 한 눈에 파악하기 쉬워진다.</li>
<li>특히, <code>violinplot</code> 을 보면, 값의 분포를 더 잘 확인할 수 있다.</li>
</ul>
<p><br></br></p>
<p><strong>(iii) <code>mpg</code> 변수에 대한 밀도함수</strong></p>
<pre><code class="language-python"># mpg 의 사분위 수 표현
sns.boxplot(data=df, x=&quot;mpg&quot;)

# mpg 의 밀도 
sns.violinplot(data=df, x=&quot;mpg&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/4eba5829-6914-4e31-baec-feca08747a0a/image.png" alt=""></p>
<ul>
<li><strong>그래프 해석</strong><ul>
<li><code>boxplot</code>을 보면, 1사분위(전체 데이터 중 하위 25%에 해당하는 값)이 약 17, 중간값은 24, 3 사분위(전체 데이터 중 상위 25%에 해당하는 값)은 29임을 알 수 있다.</li>
<li>두 그래프를 종합하여 보면 전체 데이터에 대한 연비는 17 ~ 29 사이에 집중되어있음을 알 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h1 id="🤔느낀점">🤔느낀점</h1>
<p>우선, 주어진 데이터가 수치형인지 범주형인지 판단하는 방법을 배웠다. dtype이 object가 아닌 경우에도 범주형 데이터로 취급하는 경우가 있다. 이는 unique 값을 구해보거나 histogram을 그려보면 알 수 있다.</p>
<ul>
<li>히스토그램을 그려보았을 때, 연속적이지 않고 뚝뚝 끊기는 경우엔 그 변수를 범주형 변수에 가깝다고 생각할 수 있다.</li>
<li>이번에 그려본 히스토그램, kdeplot, displot, 등의 그래프는 1개의 변수에 대한 count, 밀도, 사분위 등을 의미했다. </li>
<li>다음엔 2개 이상의 변수에 대한 상관 관계를 알아보기 위해 scatterplot, 회귀 등을 시각화해 보아야겠다.</li>
</ul>
<p>boxplot과 violinplot은 전체 변수를 모아서 한 그래프로 볼 수 있다.
하지만 범위가 준구난방이라면 한 그래프에 담게 되었을 때, 어떤 의미를 담고있는지 파악하기 힘들다.
이럴 땐, 범위를 스케일링하여 그래프를 보기 쉽게, 이해하기 쉽게 만들 수 있도록! 여러 실습을 통해 감을 익혀야겠다.</p>
<hr>
<h1 id="📄참고문헌">📄참고문헌</h1>
<p><a href="https://matplotlib.org/stable/tutorials/colors/colormaps.html">참고 1. Matplotlib - Colormaps</a>
<a href="https://seaborn.pydata.org/tutorial/function_overview.html">참고 2. seaborn 공식문서</a>
<a href="https://leedakyeong.tistory.com/entry/%EC%88%98%EC%B9%98%ED%98%95-%EC%9E%90%EB%A3%8Cnumerical-data%EC%99%80-%EB%B2%94%EC%A3%BC%ED%98%95-%EC%9E%90%EB%A3%8Ccategorical-data">참고 3. [기초통계] 수치형 자료(numberical data)</a>
<a href="https://ko.wikipedia.org/wiki/%EB%B9%84%EB%8C%80%EC%B9%AD%EB%8F%84">참고 4. 비대칭도</a>
<a href="https://ko.wikipedia.org/wiki/%EC%B2%A8%EB%8F%84">참고 5. 첨도</a>
<a href="https://wooono.tistory.com/96">참고 6. 스케일링</a>
<a href="https://ko.wikipedia.org/wiki/%EC%83%81%EC%9E%90_%EC%88%98%EC%97%BC_%EA%B7%B8%EB%A6%BC">참고 7. 상자 수염 그림</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 앤스컴 콰르텟 (2) - 시각화]]></title>
            <link>https://velog.io/@jaeyoung_jung/Python-%EC%95%A4%EC%8A%A4%EC%BB%B4-%EC%BD%B0%EB%A5%B4%ED%85%9F-2</link>
            <guid>https://velog.io/@jaeyoung_jung/Python-%EC%95%A4%EC%8A%A4%EC%BB%B4-%EC%BD%B0%EB%A5%B4%ED%85%9F-2</guid>
            <pubDate>Mon, 26 Sep 2022 18:51:26 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯목표-설정">🎯목표 설정</h1>
<ul>
<li>Seaborn에서 제공되는 &quot;anscombe&quot; 데이터셋을 시각화하여 앤스컴 콰르텟 이해하기</li>
</ul>
<hr>
<h1 id="👩🏻💻이해-과정">👩🏻‍💻이해 과정</h1>
<blockquote>
<p><strong>목차</strong></p>
</blockquote>
<ol>
<li><code>import pandas, numpy, seaborn</code></li>
<li><code>load_dataset</code></li>
<li><code>seaborn 시각화</code></li>
</ol>
<hr>
<h3 id="📍데이터-로드">📍데이터 로드</h3>
<pre><code class="language-python">import pandas as pd
import numpy as np
import seaborn as sns</code></pre>
<pre><code class="language-python"># 앤스컴 데이터셋 불러오기
df = sns.load_dataset(&quot;anscombe&quot;)</code></pre>
<pre><code class="language-python"># 데이터셋 구조 파악
df.shape
&gt;&gt;&gt; (44, 3)</code></pre>
<hr>
<h3 id="📍countplot-시각화">📍Countplot 시각화</h3>
<blockquote>
<ul>
<li>기본 값 : <code>count</code> (count를 지정하지 않아도 자동 출력)</li>
</ul>
</blockquote>
<ul>
<li>x 축 설정 : <strong>범주형 데이터</strong><pre><code class="language-python">sns.countplot(data=df, x=&quot;dataset&quot;)</code></pre>
<pre><code class="language-python"># 축 변경
sns.countplot(data=df, y=&quot;dataset&quot;)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8d9d24e4-ff04-4b52-be85-85dbabb20905/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/500c8d85-9323-4932-a948-aae37a3ae8da/image.png" alt=""></p>
<ul>
<li><strong>이산값</strong>을 나타내는 그래프 (각 범주에 속하는 데이터의 개수를 막대그래프로 나타냄)</li>
<li>학년별 인원 파악하는 그래프 등에 쓸 수 있음</li>
</ul>
<hr>
<h3 id="📍barplot-시각화">📍Barplot 시각화</h3>
<blockquote>
<ul>
<li>기본 값 : <code>평균</code> (평균을 지정하지 않아도 자동 출력)</li>
</ul>
</blockquote>
<ul>
<li>x 축 설정 : <strong>범주형 데이터</strong></li>
<li>검은 막대 : 신뢰구간<pre><code class="language-python"># 신뢰구간 자동 출력
sns.barplot(data=df, x=&quot;dataset&quot;, y=&quot;x&quot;) # y축 이름은 임의로 정함</code></pre>
<pre><code class="language-python"># 신뢰구간(ci) 제거
sns.barplot(data=df, x=&quot;dataset&quot;, y=&quot;x&quot;, ci=None) </code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/2551fb54-5285-4037-ac32-2a5686bc28f8/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8a0979f4-b75d-487e-81b8-93ee01102e78/image.png" alt=""></p>
<ul>
<li><code>sns.barplot(data=df, x=“dataset”, y=“x”, ci=“sd”)</code> 에서 <code>sd</code> : 표준편차</li>
<li><code>n_boot</code> : 표본을 몇 개 할 것인지 (defalt : 1000)</li>
<li>큰 데이터를 시각화할 때, <code>ci</code> 넣으면 시간 오래 걸림 (표본 추출 과정 포함)</li>
<li>대표값만 나타내기 때문에 자세한 표현이 어려움 (<code>boxplot</code> 이용하면 분포 확인 가능)</li>
</ul>
<blockquote>
<p>*<em>🔥 Groupby *</em></p>
</blockquote>
<pre><code class="language-python"># groupby 로 barplot의 x, y 평균 값 구하기
df.groupby(&quot;dataset&quot;)[[&quot;x&quot;, &quot;y&quot;]].mean()</code></pre>
<table>
<thead>
<tr>
<th align="center">dataset</th>
<th align="center">x</th>
<th align="center">y</th>
</tr>
</thead>
<tbody><tr>
<td align="center">I</td>
<td align="center">9.0</td>
<td align="center">7.500909</td>
</tr>
<tr>
<td align="center">II</td>
<td align="center">9.0</td>
<td align="center">7.500909</td>
</tr>
<tr>
<td align="center">III</td>
<td align="center">9.0</td>
<td align="center">7.500000</td>
</tr>
<tr>
<td align="center">IV</td>
<td align="center">9.0</td>
<td align="center">7.500909</td>
</tr>
</tbody></table>
<hr>
<h3 id="📍boxplot-시각화">📍Boxplot 시각화</h3>
<blockquote>
<ul>
<li>기본 값 : 최솟값, 사분위값, 최댓값</li>
</ul>
</blockquote>
<ul>
<li>x 축 설정 : <strong>범주형 데이터</strong></li>
<li>검은 박스<code>♦︎</code> : 이상치<pre><code class="language-python"># 상자 수염 그림
sns.boxplot(data=df, x=&quot;dataset&quot;, y=&quot;y&quot;)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/6eefd554-303e-448c-9f86-88f0dca5805c/image.png" alt=""></p>
<ul>
<li>히스토그램과 비교 했을 때, <code>Robust</code> 함</li>
<li>중앙값은 잘 변하지 않음</li>
<li>값이 변해도 사분위수가 정해져있으면 변하지 않음</li>
<li><a href="https://www.autodesk.com/research/publications/same-stats-different-graphs">참고 1. Fig 8</a></li>
<li><a href="https://www.hira.or.kr/ebooksc/ebook_659/ebook_659_202109300534201190.pdf">참고 2. p17 부터</a></li>
</ul>
<hr>
<h3 id="📍히스토그램-시각화">📍히스토그램 시각화</h3>
<blockquote>
<ul>
<li>기본 값 : 데이터프레임의 (x, y) </li>
</ul>
</blockquote>
<pre><code class="language-python"># pandas에 내장되어있는 기능
df.hist() </code></pre>
<pre><code class="language-python"># bins : 막대 개수 (bins=1이면 막대 1개로 그림)
df.hist(bins=1) </code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/d1c96d1e-61a6-426c-b6ce-0b408fc8e2bc/image.png" alt=""> <img src="https://velog.velcdn.com/images/jaeyoung_jung/post/f891c2a4-56fd-4854-bcf3-fbadc598f7a5/image.png" alt=""></p>
<ul>
<li>정해진 계급에 변량이 포함되어 있는 정도를 표로 나타낸 것</li>
<li>어떤 기준에 대한 수의 분포</li>
</ul>
<hr>
<h3 id="📍displot-시각화">📍Displot 시각화</h3>
<blockquote>
<ul>
<li>기본 값 : <code>count</code> (cout를 지정하지 않아도 자동 출력)</li>
</ul>
</blockquote>
<ul>
<li><code>히스토그램</code>은 전체 데이터에 대한 그래프라면, <code>Displot</code>은 <strong>범주형 데이터</strong>별로 나누어 그래프를 그릴 수 있음<pre><code class="language-python"># hue : 범주형 데이터를 색별로 나눔 (Group by 기능)
# kde : 부드러운 곡선을 나타내줌
sns.displot(data=df, x=&quot;y&quot;, hue=&quot;dataset&quot;, kde=True)</code></pre>
<pre><code class="language-python"># col : 범주형에 따라 서브플롯을 만들어 줌
sns.displot(data=df, x=&quot;y&quot;, hue=&quot;dataset&quot;, kde=True, col=&quot;dataset&quot;)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/9be44d5b-6870-4006-9641-aed7ee3e432b/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/b35e61ca-82fe-4be2-9881-80e4ef51c573/image.png" alt=""></p>
<ul>
<li>데이터셋에 대한 <code>히스토그램</code> 확인 가능</li>
<li><code>히스토그램</code> 과 <code>kdeplot</code> 이 합쳐진 그래프 그릴 수 있음</li>
</ul>
<hr>
<h3 id="📍kdeplot-시각화">📍Kdeplot 시각화</h3>
<blockquote>
<ul>
<li>기본 값 : <code>Density</code> (밀도를 지정하지 않아도 자동 출력)</li>
</ul>
</blockquote>
<ul>
<li>부드러운 곡선을 그려주는 도구</li>
<li><strong>범주형 데이터</strong>에 따라 색 부여 가능(<code>hue</code>)<pre><code class="language-python">sns.kdeplot(data=df, x=&quot;y&quot;, hue=&quot;dataset&quot;)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/a46d04c1-6797-4982-ba61-2a1056287c0f/image.png" alt=""></p>
<ul>
<li><code>커널 밀도 추정(kernal density estimation)</code> 그래프</li>
<li><code>히스토그램</code>이 절대량(count)을 표현한다면 <code>kdeplot</code>은 상대량(비율)을 시각화</li>
<li>히스토그램과 마찬가지로 한 개 혹은 두 개의 변수에 대한 분포 그릴 수 있음</li>
<li>밀도 추정 그래프</li>
</ul>
<hr>
<h3 id="📍violinplot-시각화">📍Violinplot 시각화</h3>
<blockquote>
<ul>
<li><code>kdeplot</code>을 데칼코마니 하듯 마주보고 그린 값</li>
</ul>
</blockquote>
<pre><code class="language-python">sns.violinplot(data=df, x=&quot;dataset&quot;, y=&quot;y&quot;)</code></pre>
<pre><code class="language-python"># 축 변경
sns.violinplot(data=df, x=&quot;dataset&quot;, y=&quot;y&quot;, orient=&quot;h&quot;)</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/dbeac3d4-2f66-4620-b029-0ef532d431e5/image.png" alt=""><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/eb8d8c60-5758-4279-a7b4-2fc506d492c5/image.png" alt=""></p>
<ul>
<li><code>히스토그램</code>의 밀도를 나타낸 것을 마주보고 그린 값</li>
<li><code>kdeplot</code>으로 그린 그래프를 x축을 기준으로 마주보고 그린 그래프</li>
<li>어디에 많이 몰려있냐에 따라 그래프 모양이 달라짐</li>
</ul>
<hr>
<h3 id="📍scatterplot-시각화">📍Scatterplot 시각화</h3>
<blockquote>
<ul>
<li><code>x</code>, <code>y</code>에 입력한 데이터로 그려지는 그래프</li>
</ul>
</blockquote>
<ul>
<li><strong>범주형 데이터</strong>에 따라 색 부여 가능(<code>hue</code>)<pre><code class="language-python">sns.scatterplot(data=df, x=&quot;x&quot;, y=&quot;y&quot;, hue=&quot;dataset&quot;)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/de5aa0ad-af09-4890-af5e-62a21fdd4936/image.png" alt=""></p>
<ul>
<li>수치변수간의 분포를 확인하고자 할 때 사용</li>
<li>범주형 그래프에도 사용함 (권장 X)</li>
</ul>
<hr>
<h3 id="📍regplot-시각화">📍Regplot 시각화</h3>
<blockquote>
<ul>
<li><code>x</code>, <code>y</code>에 입력한 데이터로 그려지는 그래프</li>
</ul>
</blockquote>
<ul>
<li><u>범주형 데이터에 따라 색 부여 불가능</u></li>
<li>반투명 영역 : <code>신뢰구간</code><pre><code class="language-python">sns.regplot(data=df, x=&quot;x&quot;, y=&quot;y&quot;)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/314403b3-2c9c-4d08-b553-b6e57c42be17/image.png" alt=""></p>
<ul>
<li><code>scatterplot</code>에선 <code>hue</code> 지원하지만, <code>regplot</code>에선 지원 X</li>
<li>데이터별 표현이 필요할 땐 <code>lmplot</code> 사용</li>
</ul>
<hr>
<h3 id="📍lmplot-시각화">📍Lmplot 시각화</h3>
<blockquote>
<ul>
<li><code>x</code>, <code>y</code>에 입력한 데이터로 그려지는 그래프</li>
</ul>
</blockquote>
<ul>
<li><strong>범주형 데이터</strong>에 따라 색 부여 가능(<code>hue</code>)</li>
<li><code>displot</code>처럼 데이터별 분포 확인 가능</li>
<li>반투명 영역 : <code>신뢰구간</code><pre><code class="language-python"># col_wrap : 한 줄에 2개씩 정렬
sns.lmplot(data=df, x=&quot;x&quot;, y=&quot;y&quot;, hue=&quot;dataset&quot;, 
          col=&quot;dataset&quot;, col_wrap=2)</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/b6b78153-a9a3-4670-baf5-01266c2285a6/image.png" alt=""></p>
<ul>
<li>그래프 <code>dataset = IV</code> 를 보면, 이상치 하나때문에 신뢰구간 넓게 형성됨</li>
<li><a href="https://seaborn.pydata.org/tutorial/regression.html">참고 1. Estimating regression fits</a></li>
<li><a href="https://www.hira.or.kr/ebooksc/ebook_659/ebook_659_202109300534201190.pdf">참고 2. p49 상관계수 관련</a></li>
</ul>
<hr>
<h1 id="🤔느낀점">🤔느낀점</h1>
<p>앤스컴 콰르텟(Anscombe&#39;s quartet) 데이터로 여러 그래프를 그려보았다. 실제로 데이터를 시각화 해보니, 범주형 데이터에선 어떤 그래프가 필요한지 수치형 데이터에선 어떤 그래프가 필요한지 조금 이해할 수 있었다. </p>
<p>하지만, 내가 다뤄본 데이터가 아직 하나여서 데이터 활용도에 대한 감을 높이기 위해선 여러 사례를 봐야할 것같다고 느꼈다!</p>
<p>주어진 데이터를 효율적으로 사용하기 위해 ! 오늘보다 더 발전한 내일을 위해 ! 모르는 것은 해결될 때까지 찾아보고 내 것으로 만들 수 있도록 노력해야겠다 !! 🔥</p>
<p>만약, 내게 지금 당장 공정 데이터가 주어진다면? 어떤 그래프를 그리면 좋을 지 생각해보았다. 공정 데이터가 단순한다면 <code>scatterplot</code> 이나 <code>lmplot</code> 으로 입력변수에 따른 결과치의 관계를 알아보지 않을까??</p>
<p>이 부분에 대해선 공부를 하면서 더 고민해봐야겠다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 앤스컴 콰르텟 (1) - pandas, numpy, seaborn]]></title>
            <link>https://velog.io/@jaeyoung_jung/Python-%EC%95%A4%EC%8A%A4%EC%BB%B4-%EC%BD%B0%EB%A5%B4%ED%85%9F-1</link>
            <guid>https://velog.io/@jaeyoung_jung/Python-%EC%95%A4%EC%8A%A4%EC%BB%B4-%EC%BD%B0%EB%A5%B4%ED%85%9F-1</guid>
            <pubDate>Mon, 26 Sep 2022 14:32:47 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>앤스컴 콰르텟(Anscombe&#39;s quarter)</strong>는 기술통계량은 유사하지만 분포나 그래프는 매우 다른 4개의 데이터셋이다.<br>
각 데이터셋은 11개의 (x, y) 좌표로 이루어진다. <br>
1973년, 통계학자인 프란시스 앤스컴이 데이터분석 전 <strong>1) 시각화의 중요성</strong>과 <strong>2) 특이치 및 주영향관측값의 영향</strong>을 보여주기 위해 만들었다. <br>
<strong>목적</strong> : &quot;숫자 계산은 정확하지만, 그래프는 거칠다&quot;는 통계학자들의 통념을 상쇄</p>
</blockquote>
<hr>
<h1 id="🎯목표-설정">🎯목표 설정</h1>
<ul>
<li>Seaborn에서 제공되는 &quot;anscombe&quot; 데이터셋으로 앤스컴 콰르텟 이해하기</li>
</ul>
<h1 id="👩🏻💻이해-과정">👩🏻‍💻이해 과정</h1>
<blockquote>
<p><strong>목차</strong><small></p>
</blockquote>
<ol>
<li>import pandas, numpy, seaborn</li>
<li>데이터 로드</li>
<li>데이터 형태 확인</li>
<li>데이터 기본 정보 확인</li>
<li>데이터 기술통계 구하기</li>
<li>데이터셋 나누기</li>
<li>데이터셋 별 기술통계, 상관계수, 빈도수 구하기</small></li>
</ol>
<hr>
<h3 id="📍데이터-로드">📍데이터 로드</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="1-라이브러리-로드">1. 라이브러리 로드</h1>
<p>import pandas as pd
import numpy as np
import seaborn as sns</p>
<pre><code>```python
# 2. 데이터 로드
df = sns.load_dataset(&quot;anscombe&quot;)</code></pre><pre><code class="language-python"># 3. 데이터 형태 파악
df.head()</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/211472cf-aaa8-4c05-ba8b-33b6e0540fc2/image.png" alt=""></p>
<pre><code class="language-markdown">-  데이터는 (44, 3)으로 행이 44개, 열이 3개로 구성되어 있다.
-  dataset의 범위는 I ~ IV 이며 각 11개의 데이터를 포함한다.</code></pre>
<hr>
<h3 id="📍데이터-정보">📍데이터 정보</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="4-기본-정보-확인">4. 기본 정보 확인</h1>
<p>print(df.info())</p>
<pre><code>![](https://velog.velcdn.com/images/jaeyoung_jung/post/b6d8e0a8-f879-41ce-b552-63cd91f98cf0/image.png)


```markdown
-  총 44개의 데이터가 있으며, 결측치(NULL) 값은 없다.
-  dataset은 object type이고, x와 y는 float64 type이다.</code></pre><hr>
<h3 id="📍데이터-기술통계">📍데이터 기술통계</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="5-기술-통계값">5. 기술 통계값</h1>
<h1 id="수치형-데이터의-기술-통계">수치형 데이터의 기술 통계</h1>
<p>print(df.describe())</p>
<pre><code>```python
# 범주형 데이터의 기술 통계
print(df.describe(include=&quot;object&quot;))</code></pre><p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/ed4dc852-d204-4cbe-89b3-f1499ca8806a/image.png" alt=""></p>
<hr>
<h3 id="📍dataset-나누기">📍dataset 나누기</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="dataset의-unique값-찾기">dataset의 unique값 찾기</h1>
<p>df[&quot;dataset&quot;].unique()</p>
<blockquote>
<blockquote>
<blockquote>
<p>array([&#39;I&#39;, &#39;II&#39;, &#39;III&#39;, &#39;IV&#39;], dtype=object)</p>
</blockquote>
</blockquote>
</blockquote>
<pre><code>```python
# bool indexing 
df_1 = df[df[&quot;dataset&quot;] == &quot;I&quot;]
df_2 = df[df[&quot;dataset&quot;] == &quot;II&quot;]
df_3 = df[df[&quot;dataset&quot;] == &quot;III&quot;]
df_4 = df[df[&quot;dataset&quot;] == &quot;IV&quot;]</code></pre><hr>
<h3 id="📍dataset별-기술통계-비교">📍dataset별 기술통계 비교</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="데이터셋-별-기술-통계">데이터셋 별 기술 통계</h1>
<p>print(df_1.describe())
print(df_2.describe())
print(df_3.describe())
print(df_4.describe())</p>
<pre><code>&lt;img src=&quot;https://velog.velcdn.com/images/jaeyoung_jung/post/26eb8549-a12e-4778-ad21-bd3f4990efff/image.png&quot; width=&quot;70%&quot; height=&quot;70%&quot;&gt;
&lt;small&gt;&lt;span style=&quot;color: gray&quot;&gt;그림5. 데이터셋 별 기술 통계값&lt;/span&gt;&lt;/small&gt;

```markdown
      1.  COUNT, MEAN, std(표준편차), 4분위값은 거의 동일
    2.  MIN, MAX 값은 다르지만 각 기술 통계값은 동일</code></pre><hr>
<h3 id="📍dataset별-상관관계-비교">📍dataset별 상관관계 비교</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="각-데이터셋에-대한-상관계수">각 데이터셋에 대한 상관계수</h1>
<p>df_1.corr()
df_2.corr()
df_3.corr()
df_4.corr()</p>
<pre><code>&lt;img src=&quot;https://velog.velcdn.com/images/jaeyoung_jung/post/5c64a070-c5f9-4a1c-920a-bb23a86890c0/image.png&quot; width=&quot;70%&quot; height=&quot;70%&quot;&gt;
&lt;small&gt;&lt;span style=&quot;color: gray&quot;&gt;그림6. 데이터셋 별 상관계수&lt;/span&gt;&lt;/small&gt;

```markdown
      1. 상관계수를 알아볼 때, 옵션을 지정하지 않으면 피어슨 상관계수가 사용된다.
       -  -1 ~ +1 사이의 값을 가짐
       - +1에 가까우면 양의 상관을 가짐 (= x축 증가 시, y축 증가하는 경향 = 대각선에 가깝게 그려짐)

      2. 데이터셋의 상관계수 값을 보면 알 수 있는 점 
       - 각 데이터셋 별로 대각선으로 같은 값을 가짐 (자기 자신과의 상관 관계)
       - 4개의 데이터셋은 소수점 아래 세자리까지의 값이 모두 일치</code></pre><hr>
<h3 id="📍데이터-빈도수">📍데이터 빈도수</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="dataset의-빈도수-구하기">dataset의 빈도수 구하기</h1>
<p>df[&quot;dataset&quot;].value_counts()</p>
<pre><code>```python
# dataset의 빈도수 normalize 비율 구하기
df[&quot;dataset&quot;].value_counts(normalize=True)</code></pre><p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/4ac90eb0-0461-476f-bc16-418cd3a7a142/image.png" alt=""></p>
<hr>
<h3 id="📍그룹별-기술통계">📍그룹별 기술통계</h3>
<blockquote>
<pre><code class="language-python"></code></pre>
</blockquote>
<h1 id="groupby를-통한-데이터셋-별-기술통계-구하기">Groupby를 통한 데이터셋 별 기술통계 구하기</h1>
<p>df.groupby(&quot;dataset&quot;).describe()</p>
<pre><code>&lt;img src=&quot;https://velog.velcdn.com/images/jaeyoung_jung/post/0e58d262-2438-4adc-af5d-5a843529190f/image.png&quot; width=&quot;70%&quot; height=&quot;70%&quot;&gt;



-----
### 📍그룹별 상관계수
&gt;```python
# Groupby를 통한 데이터셋 별 상관계수 구하기
df.groupby(&quot;dataset&quot;).corr()</code></pre><p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/cfcc7471-5250-4f65-8537-926cb7b625eb/image.png" alt=""></p>
<hr>
<h1 id="🤔느낀점">🤔느낀점</h1>
<p>여러 데이터 셋의 평균, 사분위값, 표준편차 등의 기술통계값이 동일한 값을 가져도 동일한 데이터가 아니라는 점을 기억해야겠다고 생각했다. Seaborn에서 가져온 데이터셋을 출력해보면 I ~ IV 의 (x, y) 는 동일하지 않다.</p>
<p>만약 각 데이터 셋의 (x, y) 리스트를 알지 못한 상태에서, 평균, 사분위값, 표준편차 등의 기술통계값이 동일함을 접한다면 유사한 그래프를 가진다고 생각했을 것이다.</p>
<p>앤스컴 콰르텟(Anscombe&#39;s quartet) 데이터 셋을 통해 데이터 분석 전 ! <strong>1) 시각화의 중요성</strong>, <strong>2) 특이치 및 주영향관측값의 영향</strong>을 잘 고려해야겠다고 느꼈다.</p>
<p>다음엔 위 데이터를 이용해 시각화를 해보아야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 해커랭크(HackerRank) 문제풀이 2]]></title>
            <link>https://velog.io/@jaeyoung_jung/SQL-%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-2</link>
            <guid>https://velog.io/@jaeyoung_jung/SQL-%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-2</guid>
            <pubDate>Sun, 25 Sep 2022 15:24:42 GMT</pubDate>
            <description><![CDATA[<h1 id="📝-문제">📝 문제</h1>
<ul>
<li>문제는 <a href="https://www.hackerrank.com/">HackerRank</a>에 등록되어 있음</li>
<li>모든 문제는 아래에 첨부한 <code>STATION</code> 테이블 사용</li>
<li>데이터베이스로는 <code>MySQL</code>을 사용</li>
</ul>
<p><br><small><strong>테이블 명 : STATION</strong></small></p>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
</tr>
</thead>
<tbody><tr>
<td align="left">ID</td>
<td align="left">NUMBER</td>
</tr>
<tr>
<td align="left">CITY</td>
<td align="left">VARCHAR2(21)</td>
</tr>
<tr>
<td align="left">STATE</td>
<td align="left">VARCHAR2(2)</td>
</tr>
<tr>
<td align="left">LAT_N</td>
<td align="left">NUMBER</td>
</tr>
<tr>
<td align="left">LONG_W</td>
<td align="left">NUMBER</td>
</tr>
<tr>
<td align="left"><small>where <strong>LAT_N</strong> is the northern latitude and <strong>LONG_W</strong> is the western longitude.</small></td>
<td align="left"></td>
</tr>
</tbody></table>
<hr>
<h3 id="📍-1번-문제">📍 1번 문제</h3>
<blockquote>
<p>Query a list of <strong>CITY</strong> and <strong>STATE</strong> from the <strong>STATION</strong> table.</p>
</blockquote>
<pre><code class="language-markdown">: STATION 테이블의 CITY, STATE 열에 해당하는 데이터 출력</code></pre>
<pre><code class="language-sql">SELECT city, state
FROM station</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-1/problem?isFullScreen=true">문제 1. Weather Observation Station 1</a></small></p>
<hr>
<h3 id="📍-2번-문제">📍 2번 문제</h3>
<blockquote>
<p>Query a list of <strong>CITY</strong> names from <strong>STATION</strong> for cities that have an even <strong>ID</strong> number. 
Print the results in any order, but exclude duplicates from the answer.</p>
</blockquote>
<pre><code class="language-markdown">: ID 값이 짝수인 CITY name 데이터를 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE id LIKE &#39;%0&#39;
OR id LIKE &#39;%2&#39;
OR id LIKE &#39;%4&#39;
OR id LIKE &#39;%6&#39;
OR id LIKE &#39;%8&#39;</code></pre>
<p><code>Short version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE id % 2 = 0 -- 짝수는 2로 나누면 나머지가 0임을 이용</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-3/problem?isFullScreen=true">문제 2. Weather Observation Station 3</a></small></p>
<hr>
<h3 id="📍-3번-문제">📍 3번 문제</h3>
<blockquote>
<p>Find the difference between the total number of <strong>CITY</strong> entries in the table and the number of distinct <strong>CITY</strong> entries in the table.
<small>
  For example, if there are three records in the table with <strong>CITY</strong> values &#39;New York&#39;, &#39;New York&#39;, &#39;Bengalaru&#39;, there are 2 different city names: &#39;New York&#39; and &#39;Bengalaru&#39;, The query returns 1, because <strong>total number of records - number of unique city names = 3 - 2 = 1</strong>
</small></p>
</blockquote>
<pre><code class="language-markdown">: CITY의 전체 데이터 개수와 중복 없이 유일한 값을 가지는 데이터 개수의 차이</code></pre>
<pre><code class="language-sql">SELECT COUNT(city) - COUNT(DISTINCT city)
FROM station</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-4/problem?isFullScreen=true">문제 3. Weather Observation Station 4</a></small></p>
<hr>
<h3 id="📍-4번-문제">📍 4번 문제</h3>
<blockquote>
<p>Query the list of CITY names starting with vowels (i.e., <code>a</code>, <code>e</code>, <code>i</code>, <code>o</code>, or <code>u</code>) from <strong>STATION</strong>. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 모음으로 시작되는 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city LIKE &#39;a%&#39;
   OR city LIKE &#39;e%&#39;
   OR city LIKE &#39;i%&#39;
   OR city LIKE &#39;o%&#39;
   OR city LIKE &#39;u%&#39;</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;^[aeiou]&#39; -- ^는 []안 문자열로 시작될 경우를 뜻 함</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-6/problem?isFullScreen=true">문제 4. Weather Observation Station 6</a></small></p>
<hr>
<h3 id="📍-5번-문제">📍 5번 문제</h3>
<blockquote>
<p>Query the list of CITY names ending with vowels (<code>a</code>, <code>e</code>, <code>i</code>, <code>o</code>, <code>u</code>) from <strong>STATION</strong>. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 모음으로 끝나는 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city LIKE &#39;%a&#39;
   OR city LIKE &#39;%e&#39;
   OR city LIKE &#39;%i&#39;
   OR city LIKE &#39;%o&#39;
   OR city LIKE &#39;%u&#39;</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;[aeiou]$&#39; -- $는 []안 문자열로 끝날 경우를 뜻 함</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-7/problem?isFullScreen=true">문제 5. Weather Observation Station 7</a></small></p>
<hr>
<h3 id="📍-6번-문제">📍 6번 문제</h3>
<blockquote>
<p>Query the list of CITY names from <strong>STATION</strong> which have vowels (i.e., <code>a</code>, <code>e</code>, <code>i</code>, <code>o</code>, and <code>u</code>) as both their first and last characters. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 첫 자와 끝 자가 모음인 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE (city LIKE &#39;a%&#39;
    OR city LIKE &#39;e%&#39;
    OR city LIKE &#39;i%&#39;
    OR city LIKE &#39;o%&#39;
    OR city LIKE &#39;u%&#39;)
    AND (city LIKE &#39;%a&#39;
    OR city LIKE &#39;%e&#39;
    OR city LIKE &#39;%i&#39;
    OR city LIKE &#39;%o&#39;
    OR city LIKE &#39;%u&#39;)</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;^[aeiou]&#39; AND city REGEXP &#39;[aeiou]$&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-8/problem?isFullScreen=true">문제 6. Weather Observation Station 8</a></small></p>
<hr>
<h3 id="📍-7번-문제">📍 7번 문제</h3>
<blockquote>
<p>Query the list of CITY names from <strong>STATION</strong> that do not start with vowels. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 모음으로 시작되지 않는 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city NOT LIKE &#39;a%&#39;
  AND city NOT LIKE &#39;e%&#39;
  AND city NOT LIKE &#39;i%&#39;
  AND city NOT LIKE &#39;o%&#39;
  AND city NOT LIKE &#39;u%&#39;</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;^[^aeiou]&#39; -- []안의 ^는 일치하지 않음을 의미</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-9/problem?isFullScreen=true">문제 7. Weather Observation Station 9</a></small></p>
<hr>
<h3 id="📍-8번-문제">📍 8번 문제</h3>
<blockquote>
<p>Query the list of CITY names from <strong>STATION</strong> that do not end with vowels. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 모음으로 끝나지 않는 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city NOT LIKE &#39;%a&#39;
  AND city NOT LIKE &#39;%e&#39;
  AND city NOT LIKE &#39;%i&#39;
  AND city NOT LIKE &#39;%o&#39;
  AND city NOT LIKE &#39;%u&#39;</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;[^aeiou]$&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-9/problem?isFullScreen=true">문제 8. Weather Observation Station 10</a></small></p>
<hr>
<h3 id="📍-9번-문제">📍 9번 문제</h3>
<blockquote>
<p>Query the list of CITY names from <strong>STATION</strong> that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 모음으로 시작되지 않거나 모음으로 끝나지 않는 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE (city NOT LIKE &#39;a%&#39;
   AND city NOT LIKE &#39;e%&#39;
   AND city NOT LIKE &#39;i%&#39;
   AND city NOT LIKE &#39;o%&#39;
   AND city NOT LIKE &#39;u%&#39;)
   OR (city NOT LIKE &#39;%a&#39;
   AND city NOT LIKE &#39;%e&#39;
   AND city NOT LIKE &#39;%i&#39;
   AND city NOT LIKE &#39;%o&#39;
   AND city NOT LIKE &#39;%u&#39;)</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;^[^aeiou]&#39; OR city REGEXP &#39;[^aeiou]$&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-11/problem?isFullScreen=true">문제 9. Weather Observation Station 11</a></small></p>
<hr>
<h3 id="📍-10번-문제">📍 10번 문제</h3>
<blockquote>
<p>Query the list of CITY names from <strong>STATION</strong> that do not start with vowels and do not end with vowels. Your result cannot contain duplicates.</p>
</blockquote>
<pre><code class="language-markdown">: 모음으로 시작되지 않고 모음으로 끝나지 않는 CITY 명을 중복 제거하여 출력</code></pre>
<p><code>Long version</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city NOT LIKE &#39;a%&#39;
  AND city NOT LIKE &#39;e%&#39;
  AND city NOT LIKE &#39;i%&#39;
  AND city NOT LIKE &#39;o%&#39;
  AND city NOT LIKE &#39;u%&#39;
  AND city NOT LIKE &#39;%a&#39;
  AND city NOT LIKE &#39;%e&#39;
  AND city NOT LIKE &#39;%i&#39;
  AND city NOT LIKE &#39;%o&#39;
  AND city NOT LIKE &#39;%u&#39;</code></pre>
<p><code>Short version - 정규 표현식(REGEXP)</code></p>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city REGEXP &#39;^[^aeiou]&#39; AND city REGEXP &#39;[^aeiou]$&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/weather-observation-station-12/problem?isFullScreen=true">문제 10. Weather Observation Station 12</a></small></p>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p>7번 문제에서 <code>AND</code>를 <code>OR</code>로 바꾸었을 때 오류가 발생해서 어려움이 있었다. 출력된 결과물을 보니 <code>A</code>로 시작되는 이름이 있었다.</p>
<blockquote>
<p><code>my version</code></p>
</blockquote>
<pre><code class="language-sql">SELECT DISTINCT city
FROM station
WHERE city NOT LIKE &#39;a%&#39;
  AND city NOT LIKE &#39;e%&#39;
  AND city NOT LIKE &#39;i%&#39;
  AND city NOT LIKE &#39;o%&#39;
  AND city NOT LIKE &#39;u%&#39;</code></pre>
<p>잘 생각해보니, <code>OR</code>은 연결된 조건들 중 하나만 속해도 된다. 예를 들어, &#39;Arlington&#39;은 <code>e</code>로 시작되는 단어가 아니니, 출력될 수 있다. 문제를 읽고 코드를 작성했을 때, 논리 연산(<code>AND</code>, <code>OR</code>)의 쓰임새를 정확히 알고 있어야겠다!!!! 이번 문제들을 풀면서 논리 연산에 대해 완벽하게 이해했다!!</p>
<h1 id="👩🏻💻-보충한-내용">👩🏻‍💻 보충한 내용</h1>
<p>논리 연산(<code>AND</code>, <code>OR</code>)에 대한 이해력을 높이기 위해 여러 블로그를 참고하여 헷갈렸던 부분을 완벽하게 보충하였다!
<code>NOT LIKE</code>를 배우며, 이해를 높이는 과정에서 <code>정규 표현식</code>을 배웠다. </p>
<table>
<thead>
<tr>
<th align="left">Metacharacter</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">^</td>
<td align="left">시작하는 문자열</td>
</tr>
<tr>
<td align="left">$</td>
<td align="left">끝나는 문자열</td>
</tr>
<tr>
<td align="left">[]</td>
<td align="left">임의의 그룹</td>
</tr>
<tr>
<td align="left">[^]</td>
<td align="left">[] 안에서의 ^는 일치하지 않음을 의미</td>
</tr>
</tbody></table>
<p><code>정규 표현식</code>을 사용하면 긴 코드를 간결하게 만들 수 있다. 그리고 추후에 전화번호 등의 데이터에서 어떤 패턴을 찾을 때 유용하게 사용할 수 있을 것 같다. 이번 기회에 어떤 상황에서 사용되는지에 대해 알아보며 이해력을 높여야겠다 !!</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p>코드를 작성하고 나서 그대로 끝내는 것이 아닌, 리뷰하는 습관을 가져야겠다고 생각했다. 코드가 잘 실행된다고 끝내면 완벽하게 이해가 안된 느낌! 이번에 7번 문제의 논리 연산과 <code>NOT LIKE</code>때문에 리뷰하고, 이해를 높이기 위해 여러 사이트를 참고했는데 그 시간이 있었기 때문에 완전하게 이해했다!!!!!!! </p>
<p>어떻게 보면 정말 어이없는 질문이지만,,, 나에겐 그 질문이 성장할 수 있는 계기랄까!!! :) 앞으로도 열심히 달려볼 것이다🔥</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 해커랭크(HackerRank) 문제풀이 1 ]]></title>
            <link>https://velog.io/@jaeyoung_jung/SQL-%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-1</link>
            <guid>https://velog.io/@jaeyoung_jung/SQL-%ED%95%B4%EC%BB%A4%EB%9E%AD%ED%81%AC-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-1</guid>
            <pubDate>Sun, 25 Sep 2022 12:42:07 GMT</pubDate>
            <description><![CDATA[<h1 id="📝-문제">📝 문제</h1>
<ul>
<li>문제는 <a href="https://www.hackerrank.com/dashboard">HackerRank</a>에 등록되어 있음</li>
<li>모든 문제는 아래에 첨부한 <code>CITY</code> 테이블 사용</li>
<li>데이터베이스로는 <code>MySQL</code>을 사용</li>
</ul>
<p><br><small><strong>테이블 명 : CITY</strong></small></p>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
</tr>
</thead>
<tbody><tr>
<td align="left">ID</td>
<td align="left">NUMBER</td>
</tr>
<tr>
<td align="left">NAME</td>
<td align="left">VARCHAR2(17)</td>
</tr>
<tr>
<td align="left">COUNTRYCODE</td>
<td align="left">VARCHAR2(3)</td>
</tr>
<tr>
<td align="left">DISTRICT</td>
<td align="left">VARCHAR2(20)</td>
</tr>
<tr>
<td align="left">POPULATION</td>
<td align="left">NUMBER</td>
</tr>
</tbody></table>
<hr>
<h3 id="📍-1번-문제">📍 1번 문제</h3>
<blockquote>
<p>Query all columns (attributes) for every row in the <strong>CITY</strong> table.</p>
</blockquote>
<pre><code class="language-markdown">: CITY 테이블의 모든 행에 대한 모든 열 출력</code></pre>
<pre><code class="language-sql">SELECT *
FROM city</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/select-all-sql/problem?isFullScreen=true">문제 1. Select All</a></small></p>
<hr>
<h3 id="📍-2번-문제">📍 2번 문제</h3>
<blockquote>
<p>Query all columns for a city in <strong>CITY</strong> with the ID <code>1661</code>.</p>
</blockquote>
<pre><code class="language-markdown">: ID가 1661인 데이터의 모든 열을 출력</code></pre>
<pre><code class="language-sql">SELECT *
FROM city
WHERE id = 1661</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/select-by-id/problem?isFullScreen=true">문제 2. Select By ID</a></small></p>
<hr>
<h3 id="📍-3번-문제">📍 3번 문제</h3>
<blockquote>
<p>Query all attributes of every Japanese city in the <strong>CITY</strong> table. The COUNTRYCODE for Japan is <code>JPN</code>.</p>
</blockquote>
<pre><code class="language-markdown">: countrycode가 JPN인 데이터의 모든 열을 출력</code></pre>
<pre><code class="language-sql">SELECT *
FROM city
WHERE countrycode = &#39;JPN&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/japanese-cities-attributes/problem?isFullScreen=true">문제 3. Japanese Cities’ Attributes</a></small></p>
<hr>
<h3 id="📍-4번-문제">📍 4번 문제</h3>
<blockquote>
<p>Query the names of all the Japanese cities in the <strong>CITY</strong> table. The COUNTRYCODE for Japan is <code>JPN</code>.</p>
</blockquote>
<pre><code class="language-markdown">: countrycode가 JPN인 데이터의 name 열 출력</code></pre>
<pre><code class="language-sql">SELECT name
FROM city
WHERE countrycode = &#39;JPN&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/japanese-cities-name/problem?isFullScreen=true">문제 4. Japanese Cities’ Names</a></small></p>
<hr>
<h3 id="📍-5번-문제">📍 5번 문제</h3>
<blockquote>
<p>Query all columns for all American cities in the <strong>CITY</strong> table with populations larger than 100000. The CountryCode for America is <code>USA</code>.</p>
</blockquote>
<pre><code class="language-markdown">🔥 문제 요약
1. popluation이 100000보다 큰 데이터
2. countrycode가 USA인 데이터 
3. 1, 2번을 만족한 데이터의 모든 열을 출력</code></pre>
<pre><code class="language-sql">SELECT *
FROM CITY 
WHERE population &gt; 100000 AND countrycode = &#39;USA&#39; </code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/revising-the-select-query/problem?isFullScreen=true">문제 5. Revising the select query1</a></small></p>
<hr>
<h3 id="📍-6번-문제">📍 6번 문제</h3>
<blockquote>
<p>Query the NAME field for all American cities in the <strong>CITY</strong> table with populations larger than 120000. The CountryCode for America is <code>USA</code>.</p>
</blockquote>
<pre><code class="language-markdown">🔥 문제 요약
1. population이 120000보다 큰 데이터 
2. countrycode가 USA인 데이터 
3. 1, 2번을 만족한 데이터의 NAME 열만 출력 </code></pre>
<pre><code class="language-sql">SELECT name
FROM city
WHERE population &gt; 120000 AND countrycode = &#39;USA&#39;</code></pre>
<p>&nbsp;&nbsp;&nbsp;<small><a href="https://www.hackerrank.com/challenges/revising-the-select-query-2/problem?isFullScreen=true">문제 6. Revising the select query2</a></small></p>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p>아직 <code>SQL</code>의 기본중의 기본인 <code>SELECT 문</code>, <code>WHERE 절</code> 을 사용하여서 어려운 점이 없다.</p>
<h1 id="👩🏻💻-보충한-내용">👩🏻‍💻 보충한 내용</h1>
<p>문제가 쉽지만 바로 코드에 옮기지 않고, 어떤 조건을 만족해야하는지 조건을 생각해보는 연습을 했다. 이후에 복잡한 구조를 실습할 때 이러한 습관이 도움이 될 것이다.</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p><code>SQL</code>은 데이터 결과를 바로바로 한눈에 볼 수 있다는 점이 너무너무 재밌다! 
3줄 정도로 필요한 데이터를 출력하는 과정이 참 좋다 :) 
비록 아직은 3줄 코드이지만,, 조금씩 더 배우다보면 많이 복잡해질 것이다. 그때를 생각해서 코드 예쁘게 정리하는 case를 많이 봐두어야겠다고 생각했다!!🔥</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 간단한 데이터 추출하고 분석하기(2) - 집계 함수, GROUP BY, HAVING, ORDER BY]]></title>
            <link>https://velog.io/@jaeyoung_jung/SQL-%EA%B8%B0%EC%B4%882</link>
            <guid>https://velog.io/@jaeyoung_jung/SQL-%EA%B8%B0%EC%B4%882</guid>
            <pubDate>Sat, 24 Sep 2022 14:29:03 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯-목표-설정">🎯 목표 설정</h1>
<ul>
<li>집계 함수 <code>COUNT()</code>, <code>SUM()</code>, <code>AVG()</code>, <code>MIN()</code>, <code>MAX()</code> 이해하기</li>
<li>데이터를 <code>GROUP BY</code>, <code>HAVING</code>, <code>ORDER BY</code>를 사용해 <strong>그룹별</strong>로 요약해보기</li>
</ul>
<h1 id="📝-오늘-공부한-내용">📝 오늘 공부한 내용</h1>
<h2 id="1-집계-함수">1. 집계 함수</h2>
<blockquote>
<p><strong>집계 함수(Aggregate Function)란?</strong>
여러 행으로부터 하나의 결괏값을 반환하는 함수입니다.
<u>SELECT 구문에서만 사용되며,</u> 이전에 다룬 기본 함수들이 행(row)끼리 연산을 수행했다면, 집계 함수는 <strong>열(column)</strong>끼리 수행됩니다.<br>
<strong>집계 함수</strong>에는 <code>COUNT()</code>, <code>SUM()</code>, <code>AVG()</code>, <code>MIN()</code>, <code>MAX()</code> 가 있습니다.</p>
</blockquote>
<h3 id="📍집계-함수-종류">📍집계 함수 종류</h3>
<ul>
<li><code>COUNT()</code> : 특정 열(Column)의 행의 개수를 세는 함수</li>
<li><code>SUM()</code> : 선택한 열(Column)의 합 계산</li>
<li><code>AVG()</code> : 선택한 열(Column)의 평균 계산</li>
<li><code>MIN()</code> : 선택한 열(Column)의 최솟값</li>
<li><code>MAX()</code> : 선택한 열(Column)의 최댓값</li>
</ul>
<h3 id="📍코드로-실습하기">📍코드로 실습하기</h3>
<ul>
<li>모든 실습은 관계형 데이터베이스의 기능을 제공하는 <strong>MySQL</strong>을 사용했습니다.</li>
<li>실습은 <a href="https://www.w3schools.com/SQl/">w3shcools</a> 에서 수행했습니다.</li>
</ul>
<blockquote>
<p><strong>실습 전, Products의 데이터 형태 알아보기</strong></p>
</blockquote>
<pre><code class="language-sql">SELECT *
FROM products
LIMIT 5</code></pre>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/d7947c13-521b-4e5a-b27e-1f9afac3530d/image.png" height="500px" width="800px">


<blockquote>
<p><strong>실습1. OrderDetails의 데이터 개수 알아보기</strong></p>
</blockquote>
<pre><code class="language-sql">-- COUNT 함수 이용하기
SELECT COUNT(*) AS &#39;총 데이터 수&#39;
FROM orderdetails</code></pre>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/a41f622f-bf84-47e5-8dba-22906fc5858b/image.png" height="500px" width="800px">
<small>► 위 코드를 통해 OrderDetails 테이블 내 데이터(행)의 수가 518개라는 것을 알 수 있다.</small><br>

<blockquote>
<p><strong>실습2. 테이블 내 등록된 제품에 대한 총 가격 알아보기</strong></p>
</blockquote>
<pre><code class="language-sql">-- SUM 함수 이용하기
SELECT SUM(price)
FROM products
-&gt; 2222.71</code></pre>
<p><strong>실습3. 전 제품에 대한 평균 가격 알아보기</strong></p>
<pre><code class="language-sql">-- AVG 함수 이용하기
SELECT AVG(price)
FROM products
-&gt; 28.866363636363637</code></pre>
<p><strong>실습4. Products 내에서 가장 저렴한 가격 알아보기</strong></p>
<pre><code class="language-sql">-- MIN 함수 이용하기
SELECT MIN(price)
FROM products
-&gt; 2.5</code></pre>
<p><strong>실습5. Products 내에서 가장 비싼 가격 알아보기</strong></p>
<pre><code class="language-sql">-- MAX 함수 이용하기
SELECT MAX(price)
FROM products
-&gt; 263.5</code></pre>
<br>

<h3 id="👩🏻💻-만약-데이터에-null이-있다면">👩🏻‍💻 만약, 데이터에 NULL이 있다면?</h3>
<blockquote>
<ul>
<li><code>NULL</code>, <code>NaN</code> : <strong>Not a Number</strong>의 약자로, 문자도 아니고 숫자도 아닌 <strong>비어있는 값</strong>이다.</li>
</ul>
</blockquote>
<ul>
<li>아래 그림의 테이블은 orderdetails이며, null값 계산 예시를 위해 임의로 데이터를 지웠습니다.<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/8ce334c4-fc9f-43a9-b251-962e7d24903a/image.png" height="500px" width="500px">
```sql</li>
<li><ul>
<li>전체 데이터 개수 구하기
SELECT COUNT(*)
FROM orderdetails</li>
</ul>
</li>
<li><blockquote>
<p>15</p>
</blockquote>
<code></code>sql</li>
<li><ul>
<li>NULL 포함 열의 데이터 개수 구하기
SELECT COUNT(ProductID)
FROM orderdetails</li>
</ul>
</li>
<li><blockquote>
<p>12</p>
</blockquote>
<pre><code>► 특정 열에 대해서 COUNT 등의 집계 함수를 수행하면 **해당 열이 NULL이 아닌 행에 대한 정보**를 반환합니다. 
</code></pre></li>
</ul>
<hr>
<h2 id="2-group-by">2. GROUP BY</h2>
<ul>
<li><strong>GROUP BY</strong>를 사용하면 <u>유형별로 개수를 알고 싶을 때 컬럼에 데이터를 그룹화 할 수 있습니다.</u></li>
<li><strong>기본 구조</strong>는 <code>GROUP BY A</code> 로, <code>A</code>는 그룹화할 컬럼을 입력하면 됩니다.</li>
<li><code>A</code>는 <code>SELECT</code> 문에 넣어야 어떤 컬럼으로 그룹화되었는지 알기 좋습니다.</li>
</ul>
<h3 id="📍코드로-실습하기-1">📍코드로 실습하기</h3>
<blockquote>
<p><strong>실습 전, OrderDetails의 데이터 형태 알아보기</strong></p>
</blockquote>
<pre><code class="language-sql">SELECT *
FROM orderdetails
LIMIT 5</code></pre>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/c4e8cf80-2f7a-4939-8ef5-2cc81f75c429/image.png" height="500px" width="800px">

<blockquote>
<p><strong>실습1. 제품별로 구매되고 있는 평균 수량 구하기</strong></p>
</blockquote>
<pre><code class="language-sql">-- GROUP BY 절 사용하기
SELECT productid, AVG(quantity)
FROM orderdetails
GROUP BY productid</code></pre>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/ad580b15-f262-4e05-8876-f03b47a0bd07/image.png" height="500px" width="800px">
► 위 결과를 보면, 제품별로 주문되고 있는 평균 수량을 알 수 있습니다.<br>
► 1번 제품은 평균적으로 19.875개씩 주문이 들어오고 있네요.<br>
► GROUP BY를 사용하면, 컬럼을 그룹화하여 유형별 정보를 알 수 있습니다.


<hr>
<h2 id="3-having">3. HAVING</h2>
<ul>
<li><strong>HAVING</strong>을 사용하면 <code>GROUP BY</code> 연산 결과물을 필터링할 수 있습니다. (<code>WHERE</code> : GROUP BY 하기 전 필터링)</li>
<li><strong>기본 구조</strong>는 <code>HAVING A</code> 로, <code>A</code>에는 필터링할 조건식을 입력하면 됩니다.</li>
</ul>
<h3 id="📍코드로-실습하기-2">📍코드로 실습하기</h3>
<blockquote>
<p><strong>실습1. 구매 평균 수량이 40 이상인 제품 찾기</strong></p>
</blockquote>
<pre><code class="language-sql">-- HAVING 절 사용하기
SELECT productid, AVG(quantity) AS avg_quantity
FROM orderdetails
GROUP BY productid
HAVING avg_quantity &gt;= 40</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/db2f75e4-97dc-4908-8578-7a785513e73f/image.png" alt=""> ► 위 결과를 보면, 1회 주문 시 평균 40개 이상이 판매되고 있는 제품은 3, 8번을 포함해 총 7제품이 있네요.
► HAVING을 사용하면, 그룹화된 이후의 데이터를 추가적으로 필터링할 수 있습니다.</p>
<hr>
<h2 id="4-order-by">4. ORDER BY</h2>
<ul>
<li><strong>ORDER BY</strong>를 사용하면 주어진 기준으로 데이터를 정렬할 수 있습니다.</li>
<li><strong>기본 구조</strong>는 <code>ORDER BY A</code> 로, <code>A</code>는 정렬하고자 하는 컬럼 명을 입력하면 됩니다.</li>
</ul>
<h3 id="📍코드로-실습하기-3">📍코드로 실습하기</h3>
<blockquote>
<p><strong>실습1. 제품별 판매 수가 300을 넘는 데이터를 출력해주세요. 높은 판매수부터 출력해주세요.</strong></p>
</blockquote>
<pre><code class="language-sql">-- ORDER BY 절 사용하기
SELECT productid, SUM(quantity) AS sum_quantity
FROM orderdetails
GROUP BY productid
HAVING sum_quantity &gt; 300
ORDER BY sum_quantity DESC</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/2d7a9c76-aa11-417f-b3a7-bacb5721c2ba/image.png" alt=""> </p>
<pre><code class="language-sql">-- LIMIT 절 추가하여 판매수 TOP 5 구하기
SELECT productid, SUM(quantity) AS sum_quantity
FROM orderdetails
GROUP BY productid
HAVING sum_quantity &gt; 300
ORDER BY sum_quantity DESC
LIMIT 5</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/6e15f0a3-e2a0-490a-ad42-689c5f82f46c/image.png" alt="">► 위 결과를 보면, 31번 제품이 총 458개로 가장 많이 판매되었네요.</p>
<p>이렇게, <code>집계 함수</code>와 <code>GROUP BY</code>, <code>HAVING</code>, <code>ORDER BY</code> 절을 추가하여 보다 상세한 데이터를 추출하고 분석해보는 실습을 해보았습니다.</p>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p>처음 <code>HAVING</code>을 배웠을 때, <code>WHERE 절</code> 과 유사한 기능을 하기 때문에 어떤 기준으로 나누어 사용해야될지 고민이 되었습니다. 하지만, 그룹화 하기 전, 1차적으로 필터링을 할 때 <code>WHERE</code>, 그룹화를 한 후 2차적으로 필터링할 땐 <code>HAVING</code>을 사용한다고 정의를 하니 더이상 두 기능에 대해 헷갈리지 않습니다.</p>
<p><code>HAVING</code>, <code>WHERE</code> 두 절을 모두 사용한 예를 통해 이해를 높였습니다.</p>
<h2 id="📍코드로-정리하기">📍코드로 정리하기</h2>
<blockquote>
<p><strong>예시) 제품번호가 30보다 작은 제품을 대상으로 하시오. 제품 총 주문량이 10개 이하인 고객을 출력하되, 하위 10개만 출력하시오.</strong></p>
</blockquote>
<pre><code class="language-sql">SELECT OrderId, SUM(Quantity) AS sum_quantity
FROM OrderDetails
WHERE ProductID &gt; 30 -- 제품 번호를 제한하여 검색 대상 제한
GROUP BY OrderID -- 고객을 기준으로 알아 봄
HAVING sum_quantity &lt;= 10 -- 제품 총 구매량이 10 이하인 데이터로 제한
ORDER BY sum_quantity -- DESC를 작성하지 않으면 default 값으로 ASC(오름차순) 적용 됨
LIMIT 10 -- 상위 10개 항목만 출력</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/ffb92a2a-6f37-44b0-8cc3-ba634d86d6e6/image.png" alt=""> </p>
<ul>
<li>다음 코드를 통해, 아래 조건들을 만족한 데이터를 출력해보았다.</li>
<li>만약 제품 번호(ProductID)가 30 아래의 제품을 화장품 목록이라고 생각해보자.</li>
</ul>
<ol>
<li>제품을 화장품으로 제한 (<code>WHERE ProductID &gt; 30</code>)</li>
<li>사이트에서 제품을 구매한 고객별로 화장품 총 구매량을 출력 (<code>SELECT OrderId, SUM(Quantity)</code>, <code>GROUP BY OrderID</code>)</li>
<li>고객별 화장품 총 구매량이 10 이하인 데이터 출력 (<code>HAVING sum_quantity &lt;= 10</code>)</li>
<li>고객ID 순이 아닌 구매량을 오름차순으로 정렬 (<code>ORDER BY sum_quantity</code>)</li>
<li>상위 10개 항목만 출력 (<code>LIMIT 10</code>)</li>
</ol>
<h1 id="👩🏻💻-보충한-내용">👩🏻‍💻 보충한 내용</h1>
<p>배운 내용을 바탕으로, 무료로 사용할 수 있는 DataBase를 이용해 실습해보았다.</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p>몇 줄 안되는 코드로 바로바로 데이터를 출력해볼 수 있어서 재미있다!! 
열심히 배워서 대량의 데이터를 추출하고, 분석할 수 있는 데이터 분석가가 될테다!!!!!!🔥</p>
<h1 id="📄-참고문헌">📄 참고문헌</h1>
<p><a href="https://rebro.kr/154">1. 집계함수, GROUP BY, HAVING</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 간단한 데이터 추출하고 분석하기(1) - SELECT, FROM, WHERE, LIMIT]]></title>
            <link>https://velog.io/@jaeyoung_jung/SQL-%EA%B8%B0%EC%B4%881</link>
            <guid>https://velog.io/@jaeyoung_jung/SQL-%EA%B8%B0%EC%B4%881</guid>
            <pubDate>Sat, 24 Sep 2022 09:45:47 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯-목표-설정">🎯 목표 설정</h1>
<p><code>SELECT</code>, <code>FROM</code>, <code>WHERE</code>, <code>LIMIT</code> 을 사용해 간단한 데이터를 추출하고 분석해보기</p>
<h1 id="📝-오늘-공부한-내용">📝 오늘 공부한 내용</h1>
<h2 id="1-sql">1. SQL</h2>
<blockquote>
<p><strong>SQL(Structured Query Language) 이란?</strong><br>: 관계형데이터베이스 시스템에서 자료를 관리 및 처리하기 위해 설계된 언어<br><br><strong>SQL의 기본 조작 명령어</strong></p>
</blockquote>
<ul>
<li>SELECT : 검색</li>
<li>INSERT : 등록</li>
<li>UPDATE : 수정</li>
<li>DELETE : 제거
<br>우선, <strong>SELECT</strong> 명령어를 이용해 SQL에서 기존에 있는 데이터를 조회, 검색해 봅시다.</li>
</ul>
<p><br></br></p>
<h2 id="2-select-문">2. SELECT 문</h2>
<p><strong>SELECT의 기본 구조</strong>는 <code>SELECT A FROM B</code>로, <code>A</code>는 참조할 열의 정보, <code>B</code>는 참조할 테이블의 정보를 입력하면 됩니다.</p>
<h3 id="📍코드로-실습하기">📍코드로 실습하기</h3>
<ul>
<li>모든 실습은 관계형 데이터베이스의 기능을 제공하는 <strong>MySQL</strong>을 사용했습니다.</li>
<li>실습은 <a href="https://www.w3schools.com/SQl/">w3shcools</a> 에서 수행했습니다.</li>
</ul>
<blockquote>
<p><strong>실습1. Employees 테이블 모든 정보 불러오기</strong></p>
</blockquote>
<pre><code class="language-sql">SELECT * 
FROM Employees</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/9d9d7f42-65d6-46ea-9355-da5d88b1e330/image.png" alt="실습1 결과"></p>
<ul>
<li><code>SELECT *</code>에서 <code>*</code>은 Table에서 모든 열을 불러온다는 뜻입니다.</li>
<li>위 코드를 입력하면 Employees 테이블에 있는 10개의 데이터를 불러올 수 있습니다.</li>
</ul>
<blockquote>
<p><strong>실습2. Employees 테이블에서 데이터 일부만 불러오기</strong></p>
</blockquote>
<pre><code class="language-sql">SELECT * 
FROM Employees
LIMIT 5 -- 상위 5개의 데이터만 가져오는 방법</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/bb9f2c76-6644-48e2-b91f-79b0eaedbf8d/image.png" alt="실습2 결과"></p>
<ul>
<li><code>LIMIT n</code>은 SELECT, FROM으로 불러온 데이터들 중 상위 n개를 불러온다는 뜻입니다.</li>
<li><code>LIMIT</code>문을 추가하면 데이터의 형태가 어떤지 알아보기 편하겠죠🤔?</li>
</ul>
<blockquote>
<p><strong>실습3. Employees 테이블에서 특정 열만 불러오기</strong></p>
</blockquote>
<pre><code class="language-sql">-- Table에서 EmployeeID, Notes 열만 불러오기
SELECT employeeid, notes
FROM employees
LIMIT 5</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/0fb97331-4ec4-4714-901c-cb74c82e2b4c/image.png" alt="실습3 결과"></p>
<ul>
<li>위 코드를 보면 앞에서 실습한 코드와 차이가 있습니다. (힌트 : 대소문자)</li>
<li>SQL에서는 <strong>대소문자를 구분하지 않기 때문에</strong> <code>EmployeeID</code> 열을 <code>employeeid</code>로 작성해도 됩니다.<br></li>
<li><em>🔥 <code>AS</code>로 출력하는 컬럼에 별칭주기 🔥*</em>
```sql</li>
<li><ul>
<li>Table에서 EmployeeID를 &#39;ID&#39;, Notes를 &#39;개인 정보&#39;로 데이터 불러오기
SELECT employeeid AS ID, notes AS &#39;개인 정보&#39;
FROM employees
LIMIT 5
```
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/6b2761a0-c52c-422b-af07-51ad84e4241b/image.png" alt="AS 실습"></li>
</ul>
</li>
<li><code>AS</code>를 사용하면 위와 같이 컬럼에 별칭을 부여할 수 있습니다.</li>
<li>따옴표 없이 <code>ID</code>라고 작성해도 되지만, <strong>띄어쓰기와 함께 별칭</strong>을 부여하고 싶다면, <code>&#39;개인 정보&#39;</code>와 같이 <strong>따옴표</strong>로 묶어주어야 됩니다.</li>
</ul>
<p><br></br></p>
<h2 id="3-where-절">3. WHERE 절</h2>
<ul>
<li><strong>WHERE 조건</strong>을 사용하면 특정 행을 불러올 수 있습니다.</li>
<li><strong>기본 구조</strong>는 <code>WHERE A</code>로, <code>A</code>에는 필터링할 조건식을 입력하면 됩니다.</li>
</ul>
<h3 id="📍코드로-실습하기-1">📍코드로 실습하기</h3>
<ul>
<li>이번 실습은 DataBase를 <code>Customers</code> Table을 이용해보겠습니다.</li>
</ul>
<blockquote>
<p><strong>실습 전, TABLE의 데이터 형태 확인하기</strong></p>
</blockquote>
<pre><code class="language-sql">SELECT *
FROM customers
LIMIT 10</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/bfdf6e08-779a-4b34-949d-b53a13278d9c/image.png" alt="실습전"></p>
<ul>
<li>열(column)은 <code>CustomerID</code>, <code>CustomerName</code>, <code>ContactName</code> 등 총 7개 입니다.</li>
</ul>
<blockquote>
<p><strong>실습1. 고객 이름이 A로 시작되는 데이터만 불러오기</strong></p>
</blockquote>
<pre><code class="language-sql">-- 방법 1
SELECT *
FROM customers
WHERE customername &lt; &#39;B&#39;</code></pre>
<p><img src="https://velog.velcdn.com/images/jaeyoung_jung/post/abf15810-031f-4214-97bb-d58f7e4ea417/image.png" alt="실습1 where"></p>
<ul>
<li><code>WHERE</code> 절을 이용하면 고객이름이 <code>B</code>로 시작되는 데이터의 이전 정보만 불러올 수 있습니다.</li>
</ul>
<h3 id="📍비교-연산자">📍비교 연산자</h3>
<table>
<thead>
<tr>
<th align="center">연산자</th>
<th align="center">의미</th>
</tr>
</thead>
<tbody><tr>
<td align="center">=</td>
<td align="center">같다</td>
</tr>
<tr>
<td align="center">!=, &lt;&gt;</td>
<td align="center">같지 않다</td>
</tr>
<tr>
<td align="center">&gt;, &lt;</td>
<td align="center">크다, 작다</td>
</tr>
<tr>
<td align="center">&gt;=, &lt;=</td>
<td align="center">크거나 같다, 작거나 같다</td>
</tr>
</tbody></table>
<br>

<p>💡 <strong>주의해야할 점</strong></p>
<ul>
<li><code>WHERE 절</code>에서 필터링 조건 등을 쓸 땐, 데이터 원소의 <u>대소문자를 구분해야 합니다.</u></li>
</ul>
<blockquote>
<p><strong>예시</strong></p>
</blockquote>
<pre><code class="language-sql">-- 대소문자 잘 지킨 경우
SELECT *
FROM customers
WHERE country = &#39;Mexico&#39;</code></pre>
<pre><code class="language-sql">-- 대소문자 안 지킨 경우
SELECT *
FROM customers
WHERE country = &#39;mexico&#39; -- 이렇게 쓰면, 데이터가 나오지 않음</code></pre>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p><code>실습5. 특정 조건의 데이터만 불러오기</code>에서 <strong>비교 연산자</strong>를 사용하는데 어려움이 있었다.<br>해당 실습에서 <code>WHERE customername &lt; &#39;B&#39;</code>를 입력했을 때 &#39;B&#39; 이전의 값들만 출력된다는 점은 이해가 되었다.<br> <code>WHERE customername &lt;= &#39;B&#39;</code>를 입력했을 때, &#39;B&#39;로 시작되는 고객 데이터도 불러올 줄 알았는데 앞 코드와 동일한 결과가 나왔다. <br> </p>
<h2 id="💡이해의-과정">💡이해의 과정</h2>
<blockquote>
<p>어려움을 해결하기 위해, 아래와 같이 직접 코드로 입력해보았다.</p>
</blockquote>
<pre><code class="language-sql">SELECT &#39;A&#39; = &#39;A&#39;, &#39;A&#39; != &#39;B&#39;, &#39;A&#39; &lt; &#39;B&#39;, &#39;A&#39; &gt; &#39;B&#39;;
-- 출력(1, 1, 1, 0)</code></pre>
<pre><code class="language-sql">SELECT &#39;A&#39; &gt;= &#39;B&#39;, &#39;A&#39; &lt;= &#39;B&#39;, &#39;A&#39; &lt; &#39;AA&#39;
-- 출력(1, 0, 1)</code></pre>
<p><small>*<em>► 문자를 위와 같이 비교할 때, 알파벳 순서대로 뒤에오는 것이 더 크다는 걸 알 수 있다.<br>► 만약 고객 이름이 &#39;B&#39;라는 데이터가 있다면 <code>WHERE customername &lt;= &#39;B&#39;</code> 적용 시, 그 데이터도 불러올 것이다.  *</em></small></p>
<p>처음엔, 왜 &#39;B&#39;로 시작되는 데이터는 가져오지 않는 걸까 고민했지만 생각보다 단순했다. <code>WHERE customername &lt;= &#39;B&#39;</code> 절을 사용하면, <code>B</code>까지만 조건이 허용된다는 것!!<br> 그 다음 데이터인 <code>Berglunds snabbköp</code>부터는 <code>B</code>보다 크기 때문에 불러올 수 없다는 것!! <br></p>
<h2 id="📍코드로-정리하기">📍코드로 정리하기</h2>
<blockquote>
<pre><code class="language-sql">SELECT *
FROM customers
WHERE customername &lt; &#39;Bo&#39;</code></pre>
</blockquote>
<p>```
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/19bf09ef-3aef-469d-a50a-1e4c8a4f1d50/image.png" alt=""></p>
<ul>
<li>지금 생각해보면 참 바보같은 질문이었지만... 나에게 던지는 그 바보같은 질문 덕분에 완전히 이해했다!!!!!!!</li>
</ul>
<h1 id="👩🏻💻-보충한-내용">👩🏻‍💻 보충한 내용</h1>
<p>여러 사이트를 참고하여 내용을 보충하려고 노력했습니다.
그리고 비교 연산자 종류를 표로 추가했습니다.</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p>SQL에서 데이터를 필요한 부분만 불러오는 과정을 배웠다. 아직 <code>SELECT</code>, <code>FROM</code>, <code>LIMIT</code>, <code>WHERE</code> 만 사용했지만 파이썬을 배우다 SQL을 배우니 너무 재밌다!!!!!</p>
<h1 id="📄-참고문헌">📄 참고문헌</h1>
<p><a href="https://gomguard.tistory.com/89">1. SQL의 기본중의 기본 - SELECT 문</a>
<a href="http://www.sqlprogram.com/Basics/sql-where.aspx">2. WHERE 쿼리 조건</a>
<a href="https://extbrain.tistory.com/50">3. [MySQL] 연산자(Operator)</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 숫자, 문자열 이해하기]]></title>
            <link>https://velog.io/@jaeyoung_jung/python-%EC%9E%90%EB%A3%8C%ED%98%95%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@jaeyoung_jung/python-%EC%9E%90%EB%A3%8C%ED%98%95%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Thu, 22 Sep 2022 08:37:56 GMT</pubDate>
            <description><![CDATA[<h1 id="🎯-목표-설정">🎯 목표 설정</h1>
<p>자료형에 대해 이해해 봅시다.</p>
<h1 id="📝-오늘-공부한-내용">📝 오늘 공부한 내용</h1>
<blockquote>
<p><strong>자료형</strong>은 데이터의 &#39;종류&#39;를 말하며 영어로는 Type이라고 합니다. 정수라면 integer 타입, 실수라면 float 타입, 이름과 같이 문자 형태라면 string 타입 등 데이터 종류에는 여러가지 타입이 있습니다.</p>
</blockquote>
<h2 id="1-파이썬의-숫자">1. 파이썬의 숫자</h2>
<p>우선 여러가지 자료형 중, 숫자에 대해 알아봅시다.
파이썬에서 수는 <strong>정수(int)</strong>와 <strong>실수(float)</strong>로 구분되며 천단위 구분기호 없이 오로지 숫자로만 구성된 데이터입니다.
<strong>정수(integer)</strong>는 소수점 이하의 값을 갖지 않는 수이며 표현 방식은 부호 없는 정수(unsigned integer)와 부호 있는 정수(signed integer)로 나눌 수 있습니다.
<strong>실수(floate)</strong>는 소수점 이하의 값을 갖는 수이며 정수 표현 방식과 달리 부동 소수점(floating point) 방식을 사용합니다.</p>
<p><a href="https://suyeon96.tistory.com/9">참고 : 부동 소수점 이해하기</a></p>
<h3 id="📍코드로-실습하기">📍코드로 실습하기</h3>
<pre><code class="language-python">12345 # 정수
12.345 # 실수
0.12345 # 실수

print(type(12345)) # int
print(type(12.345)) # floate</code></pre>
<p>👀 <strong>만약, 숫자 외 기호가 추가된다면?</strong></p>
<ul>
<li>아래는 colab에서 실행시킨 코드로, colab과 jupyter notebook에선 print 구문을 사용하지 않아도 다음과 같이 출력이 가능하다.<ul>
<li>오류 메세지 중 TypeError는 자료형이 맞지 않거나 함수 호출 규약이 틀리면 발생합니다. 즉, 데이터 유형과 관련된 오류라는 뜻입니다. </li>
<li>type() takes 1 or 3 arguments라는 오류 메세지는 type 함수에 1개 또는 3개의 arguments를 담아야한다는 뜻입니다. 아래 코드에선 1,000 즉 2개의 전달인자가 입력되었기 때문에 발생한 것으로 보입니다.</li>
<li>코드를 입력하는 과정엔 수많은 오류 메세지를 보게 될 것입니다. 발생한 오류를 보고 어떤 문제 때문에 발생한 것인지를 알아보는 것은 실력 향상에 큰 도움이 될 것입니다.</li>
</ul>
</li>
</ul>
<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/98a76540-6e75-4801-b1bc-c745fc3d89b3/image.png" height="350px" width="700px">
<br></br>

<h3 id="📍퀴즈로-복습하기">📍퀴즈로 복습하기</h3>
<blockquote>
<p><strong>Q1) 다음 중 숫자인 것은?</strong>
① &quot;310&quot;
② 22-12-25
③ 20,000
④ I<br>
<strong>Q1) 정답 및 해설</strong>
① : &quot;&quot;(큰따옴표)로 묶여진 것으로 파이썬에서는 문자열로 인식합니다.
③ : 숫자와 기호가 함께 사용되면 문법 에러가 발생됩니다.
④ : 숫자 1이 아닌 문자 i 입니다.
정답② : 22-12-15는 연산기호인 (-)가 들어갔기 때문에 22-12-15=-5 이므로 int 입니다.</p>
</blockquote>
<p><br></br></p>
<h3 id="11-숫자-연산">1.1) 숫자 연산</h3>
<p>파이썬의 숫자는 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산과 제곱, 나누기 연산 후 몫 또는 나머지를 구할 수 있습니다. 
특히, <strong>거듭 제곱(\</strong>)**은 정수형 상수의 표현 범위는 제한이 없으며, CPU 레지스터로 표현할 수 있는 크기보다 큰 정수를 다룰 때는 연산 속도가 느려집니다.</p>
<h3 id="📍코드로-실습하기-1">📍코드로 실습하기</h3>
<pre><code class="language-python"># 덧셈(+)
&gt;&gt;&gt; 1 + 4
5

# 뺄셈(-)
&gt;&gt;&gt; 6 - 8
-2

# 곱셈(*)
&gt;&gt;&gt; 4 * 8
32
&gt;&gt;&gt; 4.0 * 8.0
32.0

# 나눗셈(/)
&gt;&gt;&gt; 9 / 3
3.0
&gt;&gt;&gt; 10 / 4 
2.5</code></pre>
<p>👀 <strong>위 코드에서 무엇을 알 수 있나요?</strong><br>1. 나눗셈의 결과는 항상 실수(float)형태입니다.<br>2. 나눗셈을 제외한 나머지 연산에서는 데이터가 정수형태로만 구성될 시, 정수로 실행되고 실수가 하나 이상 포함되면 결과는 실수로 발생합니다.<br><br><strong>👀 파이썬의 숫자는 사칙연산 외 연산자도 사용할 수 있습니다. 아래 코드를 봅시다.</strong></p>
<pre><code class="language-python"># 제곱(**) 
&gt;&gt;&gt; 2 ** 3
8

# 나눗셈 후 몫 반환(//)
11 // 2
5

# 나눗셈 후 나머지 반환(%)
23 % 5
3</code></pre>
<h3 id="📍퀴즈로-복습하기-1">📍퀴즈로 복습하기</h3>
<blockquote>
<p><strong>Q2) 다음 코드의 출력 값들은?</strong></p>
</blockquote>
<pre><code class="language-python">#1번
15.0 * 2 </code></pre>
<pre><code class="language-python">#2번
4 ** 3</code></pre>
<pre><code class="language-python">#3번 
12 / 6</code></pre>
<pre><code class="language-python">#4번
23 % 4</code></pre>
<pre><code class="language-python">#5번
2 + 5 * 7</code></pre>
<pre><code class="language-python">#6번
(3 + 2) // 2</code></pre>
<p><strong>Q2) 정답 및 해설</strong>
1번 : 30.0 (float와 int 두 유형의 데이터가 계산될 시, float로 출력됩니다.)
2번 : 64 (<code>4*4*4</code>)
3번 : 2.0 (나눗셈을 하게 되면 float로 출력됩니다.)
4번 : 3 (<code>23/4</code>는 몫이 5, 나머지가 3입니다.)
5번 : 37 (연산은 <code>*</code>,<code>/</code>가 <code>+</code>,<code>-</code>보다 먼저 이루어집니다.)
6번 : 2 (괄호 안에 있는 연산을 우선으로 <code>5//2</code>가 됩니다. 몫은 2, 나머지는 1입니다.)<br>
👀 <strong>위 코드에서 무엇을 알 수 있나요?</strong><br>1. 연산은 우선적으로 해야 될 요소가 없을 시, 왼쪽에서 오른쪽으로 수행합니다..<br>2. 괄호의 연산 순서는 소괄호 ▶ 중괄호 ▶ 대괄호 순 입니다.<br>3. 부호의 연산 순서는 (*와 /) ▶ (+와 -) 순 입니다.<br> </p>
<hr>
<h2 id="2-파이썬의-문자열">2. 파이썬의 문자열</h2>
<p><strong>문자열(string)</strong>이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 문자열이다.<br>
  <small>&quot;내 이름은 김삼순&quot;<br>&quot;The Zen of Python&quot;<br>&quot;12345&quot;</small><br>
  위 문자열을 보면 모두 <strong>큰따옴표(&quot;&quot;)</strong>로 둘러싸여 있다.
  파이썬에서 문자열은 여러 줄의 문장을 처리할 때 백슬래시 문자와 소문자 n을 조합한 <strong>\n</strong> <a href="https://wikidocs.net/11013">이스케이프 코드</a>를 사용합니다. </p>
<h3 id="21-문자열-연산">2.1) 문자열 연산</h3>
<blockquote>
<p>파이썬에서는 문자열을 더하거나 곱할 수 있습니다. 다른 언어에서는 쉽게 찾아볼 수 없는 재미있는 기능입니다. 추상화가 잘 되어있는 파이썬 언어만의 장점인 문자열을 더하거나 곱하는 방법을 배워봅시다.<br>
💡 문자열 연산 중 더하기 기능은 <strong>동일한 데이터 type</strong>에서만 허용됩니다.</p>
</blockquote>
<h3 id="211-문자열-더해서-연결하기">2.1.1) 문자열 더해서 연결하기</h3>
<h3 id="📍코드로-실습하기-2">📍코드로 실습하기</h3>
<pre><code class="language-python">&gt;&gt;&gt; print(&quot;점심&quot; + &quot;메뉴&quot; + &quot;추천&quot;)
&#39;점심메뉴추천&#39;</code></pre>
<p>👀 <strong>만약, 문자열과 숫자를 더한다면?</strong></p>
<ul>
<li>오류 메세지 중 TypeError는 자료형이 맞지않거나 함수 호출 규약이 틀리면 발생한다는 것을 배웠습니다.<ul>
<li>Can only concatenate str (not &quot;int&quot;) to str 라는 오류는 str만 str에 연결할 수 있다는 뜻입니다.</li>
<li>즉, str엔 str 형태만 연결시킬 수 있지만 type이 int인 3000을 연결시켜서 난 오류입니다.<img src="https://velog.velcdn.com/images/jaeyoung_jung/post/587c1900-b076-4621-bcd2-b6560c8e43c9/image.png" height="350px" width="700px">


</li>
</ul>
</li>
</ul>
<blockquote>
<p>👩🏻‍💻 <strong>코드를 옳게 수정하려면?</strong>
    <small>- 3000 =&gt; &quot;3000&quot;으로 바꾸는 방법
    - 3000 =&gt; str(3000)으로 바꾸는 방법
    - <a href="https://docs.python.org/ko/3/tutorial/inputoutput.html"><strong>f-string</strong></a> 이용<br>
    이때, <strong>str()</strong>를 이용하면 str이 아닌 type을 문자열로 반환합니다.</small></p>
<pre><code class="language-python">&gt;&gt;&gt; print(&quot;짜장면 가격은&quot; + str(3000))
&#39;짜장면 가격은 : 3000&#39;</code></pre>
</blockquote>
<pre><code>&gt; ```python
# f-string을 이용해 문자열과 숫자를 한번에 처리해 봅시다.
 print(f&quot;짜장면 가격은 : {3000}&quot;)
&#39;짜장면 가격은 : 3000&#39;</code></pre><p><small></small></p>
<h3 id="212-문자열-곱해서-반복하기">2.1.2) 문자열 곱해서 반복하기</h3>
<h3 id="📍코드로-실습하기-3">📍코드로 실습하기</h3>
<pre><code class="language-python">&gt;&gt;&gt; print(&quot;안녕하세요&quot; * 2)
&#39;안녕하세요안녕하세요&#39;</code></pre>
<p>위 소스 코드에서 <code>*</code>의 의미는 숫자 곱하기의 의미와는 다릅니다. 위 소스 코드에서의 문장은 <code>&quot;안녕하세요&quot;</code>를 2번 반복하라는 뜻입니다. 
즉  <code>*</code>는 문자열의 반복을 뜻하는 의미로 사용됩니다.</p>
<h3 id="📍코드-응용하기">📍코드 응용하기</h3>
<pre><code class="language-python">lunch = input(&quot;추천해줄 점심 메뉴를 입력해주세요 : &quot;)
dinner = input(&quot;추천해줄 저녁 메뉴를 입력해주세요 : &quot;)

print(&quot;=&quot; * 30)
print(f&quot;점메추 : {lunch}&quot;)
print(&quot;=&quot; * 30)
print(f&quot;저메추 : {dinner}&quot;)</code></pre>
<p>위 소스 코드에서 <code>*</code>를 이용해 두 문장을 구분하는 구분선을 만들어보았습니다. </p>
<h3 id="22-문자열-인덱싱-슬라이싱">2.2) 문자열 인덱싱, 슬라이싱</h3>
<blockquote>
</blockquote>
<p>&quot;Python&quot;이라는 문자열 중에서 &quot;Py&quot;라는 글자만 구하고 싶다면 <strong>인덱싱</strong>과 <strong>슬라이싱</strong>을 이해하면 됩니다.
파이썬에서는 슬라이싱(slice) 기능을 제공하는데, 다음과 같이 가져오고 싶은 문자열의 범위를 지정하면 됩니다.</p>
<pre><code class="language-python"># index 익히기
&gt;&gt;&gt; phone_num = &quot;010-5060-****&quot;
&gt;&gt;&gt; print(phone_num[1])
&#39;1&#39;</code></pre>
<pre><code class="language-python"># slice 익히기, 010만 출력해 보겠습니다.
&gt;&gt;&gt; phone_num = &quot;010-5060-****&quot;
&gt;&gt;&gt; print(phone_num[:3])
&#39;010&#39;</code></pre>
<p><a href="https://wikidocs.net/2838"><small>참고 : 인덱싱, 슬라이싱</small> </a></p>
<h3 id="23-문자열-함수">2.3) 문자열 함수</h3>
<blockquote>
</blockquote>
<p>문자열 내 가지고 있는 함수를 의미하며 내장함수라고 칭하기도 합니다.
형태 : <strong>(변수이름.)</strong>
<small></p>
<ol>
<li>소문자로 변환 : .lower()</li>
<li>대문자로 변환 : .upper()</li>
<li>양끝 공백 제거 : .strip()</li>
<li>문자열 길이 : len(변수이름)</li>
<li>사용가능한 함수 목록 보기 : dir(변수이름)</small> 
[<small>참고 : 문자열 함수 알아보기</small> ](https://wikidocs.net/13)  

</li>
</ol>
<hr>
<h1 id="🧨-어려웠던-내용">🧨 어려웠던 내용</h1>
<p>해당 교육 과정에 참여하기 전, 파이썬에 대한 강의를 짧게 들은 적이 있습니다. 
3시간 10분 강의였는데요, python 강의를 몰아보고싶은 분들은 참고하시면 좋을 것 같습니다. </p>
<p><a href="https://www.youtube.com/watch?v=dpwTOQri42s">참고 : 파이썬 강의 몰아보기</a></p>
<h1 id="👩🏻💻-보충한-내용">👩🏻‍💻 보충한 내용</h1>
<p>교육 과정에서 배운 내을 base로 하되, 더 자세히 공부하려고 노력했습니다. 
실습 내용을 직접 만들어 보는 등 학습 내용을 보충하였습니다 :)</p>
<h1 id="🤔-느낀점">🤔 느낀점</h1>
<p>배워야 할 내용이 정말 많다고 느꼈습니다. 파이썬을 미리 학습한 경험이 있어서 강의를 쉽게 따라갔지만 이후에 Pandas, EDA 등의 내용을 배울 때를 대비해 미리 파이썬을 정복할 것입니다! </p>
<h1 id="📄-참고문헌">📄 참고문헌</h1>
<p><a href="https://wikidocs.net/book/1">1. 점프 투 파이썬</a>
<a href="https://wikidocs.net/10792">2. Python 언어 공부</a></p>
]]></description>
        </item>
    </channel>
</rss>