<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>j-jae0</title>
        <link>https://velog.io/</link>
        <description>데이터 분린이:)</description>
        <lastBuildDate>Thu, 27 Oct 2022 08:26:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>j-jae0</title>
            <url>https://velog.velcdn.com/images/j-jae0/profile/219d670f-79fc-419f-9938-ab475ddb9652/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. j-jae0. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/j-jae0" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Pandas] 결측치 제거 및 채우기 (Handling Missing Data) - Cheat Sheet🔥]]></title>
            <link>https://velog.io/@j-jae0/Pandas-cheat-sheet-6</link>
            <guid>https://velog.io/@j-jae0/Pandas-cheat-sheet-6</guid>
            <pubDate>Thu, 27 Oct 2022 08:26:13 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>Pandas Cheat Sheet 에서 누락값(결측치 값) 다루는 방법 학습하기</li>
<li>학습 부분<ul>
<li><code>Handling Missing Data</code><ul>
<li>결측치 제거 : dropna</li>
<li>결측치 채우기 : fillna</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="📍실습에-사용할-데이터">📍실습에 사용할 데이터</h2>
<pre><code class="language-python">import pandas as pd
import numpy as np

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, np.nan],
                   [np.nan, 3, np.nan, 4]],
                 columns=list(&quot;ABCD&quot;))

df</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">A</th>
<th align="left">B</th>
<th align="left">C</th>
<th align="left">D</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">NaN</td>
<td align="left">2.0</td>
<td align="left">NaN</td>
<td align="left">0.0</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">3.1</td>
<td align="left">4.0</td>
<td align="left">NaN</td>
<td align="left">1.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">NaN</td>
<td align="left">3.0</td>
<td align="left">NaN</td>
<td align="left">4.0</td>
</tr>
</tbody></table>
<hr>
<h1 id="결측값-제거">결측값 제거</h1>
<p><code>df.dropna()</code></p>
<blockquote>
<p><strong>📍파라미터 정리</strong></p>
</blockquote>
<ul>
<li><code>axis</code> : 축 (기본값 : axis=0 행 / axis=1은 열) <ul>
<li>누락값이 포함된 행 또는 열 삭제<br></li>
</ul>
</li>
<li><code>how</code> : 제거방법<ul>
<li>any : NA 값이 있으면 해당 행이나 열 삭제 (기본값)</li>
<li>all : 모든 값이 NA 이면 해당 행이나 열 삭제<br></li>
</ul>
</li>
<li><code>thresh</code> : 정수 입력 (선택사항)<ul>
<li>thresh=3 이면, NA가 아닌 값이 3개 이상인 경우만 제거하지 않음<br></li>
</ul>
</li>
<li><code>subset</code> : 컬럼명 (선택사항)<ul>
<li>subset=[컬럼명1, 컬럼명2] 이면, 두 컬럼에 대해서만 누락값을 찾도록 지정할 수 있음<br></li>
</ul>
</li>
<li><code>inplace</code> : 수정여부 (기본값 False)<ul>
<li>inplace=True 하면, 데이터프레임을 수정</li>
</ul>
</li>
</ul>
<h2 id="👩🏻💻실습으로-배우는-dropna">👩🏻‍💻실습으로 배우는 dropna</h2>
<ul>
<li><p>열에 포함된 값 전체가 결측치일 때만 제거</p>
<pre><code class="language-python">df.dropna(axis=1, how=&quot;all&quot;)</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">A</th>
<th align="left">B</th>
<th align="left">D</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">NaN</td>
<td align="left">2.0</td>
<td align="left">0.0</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">3.0</td>
<td align="left">4.0</td>
<td align="left">1.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">NaN</td>
<td align="left">3.0</td>
<td align="left">4.0</td>
</tr>
</tbody></table>
</li>
<li><p>위 결과물을 저장하고자 할 때 <code>inplace=True</code> 넣어주면 된다.</p>
<br>

</li>
</ul>
<h1 id="결측값-채우기">결측값 채우기</h1>
<p><code>df.fillna()</code></p>
<ul>
<li>채워줄 값만 넣게 되면, 모든 결측치 값에 채워지게 된다.</li>
<li>특정 값으로 채우려면 values </li>
</ul>
<h2 id="👩🏻💻실습으로-배우는-fillna">👩🏻‍💻실습으로 배우는 fillna</h2>
<ul>
<li><p>누락값 부분을 특정 값으로 채우기</p>
<pre><code class="language-python">df.fillna(&quot;결측값&quot;)</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">A</th>
<th align="left">B</th>
<th align="left">C</th>
<th align="left">D</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">결측값</td>
<td align="left">2.0</td>
<td align="left">결측값</td>
<td align="left">0.0</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">3.1</td>
<td align="left">4.0</td>
<td align="left">결측값</td>
<td align="left">1.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">결측값</td>
<td align="left">결측값</td>
<td align="left">결측값</td>
<td align="left">결측값</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">결측값</td>
<td align="left">3.0</td>
<td align="left">결측값</td>
<td align="left">4.0</td>
</tr>
</tbody></table>
</li>
<li><p>딕셔너리 값으로 열을 기준으로 다른 값 채워주기</p>
<pre><code class="language-python">values = {&quot;A&quot;: &quot;A&quot;, &quot;B&quot;: &quot;B&quot;, &quot;C&quot;: &quot;C&quot;, &quot;D&quot;: &quot;D&quot;}
</code></pre>
</li>
</ul>
<p>df.fillna(value=values)</p>
<pre><code>||A|B|C|D|
|:---------|:---------|:---------|:---------|:---------|
|0    |A|2.0|C|0.0|
|1    |3.1|4.0|C|1.0|
|2    |A|B|C|D|
|3    |A|3.0|C|4.0|


## 적용을 하게 된다면?
- 결측값이 많은 데이터프레임에서 각 열별로, 다른 평균값을 넣어줄 일이 있다면 value 파라미터를 사용하면 좋을 것 같다!



-------
# 참고문헌
- [[PDF] Pandas Cheat Sheet](https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf)
- [[판다스 공식 문서] pandas.DataFrame.dropna](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html?highlight=dropna#pandas.DataFrame.dropna)
- [[판다스 공식 문서] pandas.DataFrame.fillna](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html?highlight=fillna#pandas.DataFrame.fillna)



</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] sorting, reindexing, renaming - Cheat Sheet🔥
]]></title>
            <link>https://velog.io/@j-jae0/Pandas-Cheat-Sheet-5</link>
            <guid>https://velog.io/@j-jae0/Pandas-Cheat-Sheet-5</guid>
            <pubDate>Tue, 25 Oct 2022 19:22:04 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>Pandas Cheat Sheet 에서 데이터 재구조화 부분 학습하기</li>
<li>학습 부분<ul>
<li><code>Reshaping Data - Change layout, sorting, reindexing, renaming</code><ul>
<li>sort_values</li>
<li>rename</li>
<li>sort_index</li>
<li>reset_index</li>
<li>drop</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="데이터-정렬">데이터 정렬</h1>
<p><code>df.sort_values(by=컬럼명, ascending=False)</code></p>
<ul>
<li><strong>컬럼에 대한 값을 정렬 (행을 기준)</strong></li>
<li>ascending=False 를 넣어주지 않으면, 기본값인 작은 값 -&gt; 큰 값 (오름차순) 정렬</li>
<li>ascending=True 를 넣어주면, 큰 값 -&gt; 작은 값 (내림차순) 정렬</li>
<li><strong>해당 값을 이후에도 사용하려면, 변수에 할당해 주어야 한다.</strong></li>
<li>만약 컬럼에 대한 값이 A, b, C, d 처럼 약간의 차이가 있다면?<ul>
<li>key 값을 사용하면 됨!</li>
<li>예 : <code>df.sort_value(by=&quot;컬럼명&quot;, key=lambda x: x.str.lower())</code></li>
</ul>
</li>
</ul>
<p><br></br></p>
<h1 id="인덱스-및-컬럼명-변경">인덱스 및 컬럼명 변경</h1>
<p><code>df.rename(index={이전인덱스명: 바꿀인덱스명, ...}, columns={이전컬럼명: 바꿀컬럼명, ...})</code></p>
<ul>
<li>index 이름 바꿀 땐, index 만 사용! </li>
<li>columns 이름 바꿀 땐, columns 만 사용!</li>
<li><strong>변경 후 다시 변수에 할당해 주어야 저장된다.</strong><ul>
<li>예 : <code>df = df.rename(columns={&quot;연도정보&quot;: &quot;연도&quot;})</code> </li>
<li>연도정보 라는 컬럼명을 연도로 바꿀 때, 다시 df에 저장해 주어야 함
<br></br> <h1 id="인덱스-정렬">인덱스 정렬</h1>
<code>df.sort_index()</code></li>
</ul>
</li>
<li>위 코드와 같이 사용하면, 오름차순 정렬 (인덱스값 기준)</li>
<li><strong>ascending=False</strong> 추가 시, 내림차순 정렬</li>
<li><strong>해당 값을 이후에도 사용하려면, 변수에 할당해 주어야 한다.</strong></li>
<li>만약 인덱스 값이 A, b, C, d 처럼 약간의 차이가 있다면?<ul>
<li>key 값을 사용하면 됨!</li>
<li>예 : <code>df.sort_index(key=lambda x: x.str.lower())</code>
<br></br>  <h1 id="인덱스-정렬-초기화">인덱스 정렬 초기화</h1>
<code>df.reset_index()</code></li>
</ul>
</li>
<li>위 코드와 같이 사용하면, 기존에 인덱스로 저장되어있던 값들이 index라는 이름을 가진 컬럼으로 생성되고, 인덱스값은 0 ~ 정수로 변한다.</li>
<li>기존 인덱스 값을 0 ~ 정수로 초기화 시키려면, <strong>drop=True</strong> 를 넣어주면 된다.</li>
<li><strong>해당 값을 이후에도 사용하려면, 변수에 할당해 주어야 한다.</strong>
<br></br>  <h1 id="특정-인덱스-및-컬럼-제거">특정 인덱스 및 컬럼 제거</h1>
<code>df.drop(index=[인덱스명1, 인덱스명2, ...], columns=[컬럼명1, 컬럼명2, ...])</code></li>
<li>지정한 특정 인덱스 및 컬럼을 제거할 수 있음</li>
<li><strong>해당 값을 이후에도 사용하려면, 변수에 할당해 주어야 한다.</strong></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] 데이터 재구조화(Reshaping) Pivot, Pivot_table - Cheat Sheet🔥]]></title>
            <link>https://velog.io/@j-jae0/Pandas-Cheat-Sheet-4</link>
            <guid>https://velog.io/@j-jae0/Pandas-Cheat-Sheet-4</guid>
            <pubDate>Sun, 23 Oct 2022 19:39:34 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>Pandas Cheat Sheet 에서 데이터 재구조화 학습하기</li>
<li>학습 부분<ul>
<li><code>Reshaping Data - Change layout, sorting, reindexing, renaming</code><ul>
<li>Pivot</li>
<li>Pivot_table</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="reshaping">Reshaping</h1>
<blockquote>
<ul>
<li><strong>재구조화(Reshaping data) 종류</strong></li>
</ul>
</blockquote>
<ul>
<li><code>pd.melt(df)</code> : 열을 모아 행으로 녹이기</li>
<li><code>pd.concat([df1, df2])</code> : 여러 데이터프레임 하나로 병합</li>
<li><code>df.pivot(columns=&#39;var&#39;, values=&#39;val&#39;)</code> : 행을 열로 올리기</li>
<li><code>pd.pivot_table(df, values=&#39;val&#39;, index=[], columns=[], aggfunc=func)</code> : 연산이 가능한 피벗 테이블<br>
- **pivot 과 pivot_table 차이**</li>
<li>pivot은 집계함수를 사용할 수 없는 반면, pivot_table 은 <code>aggfunc</code> 을 사용할 수 있음</li>
</ul>
<h2 id="실습에-사용할-데이터">실습에 사용할 데이터</h2>
<ul>
<li>Dataset : KOSIS 의료기관종별 환자 수 (2014 ~ 2017)</li>
<li>Dataset 미리보기 ( 아래 코드의 결과물 )<pre><code class="language-python"># 데이터 로드
df = pd.read_excel(file_name)
# 컬럼을 구성하고 있는 연월 정보를 행으로 녹이기
df_1 = df[df[&quot;의료기관종별(1)&quot;]!=&quot;의료기관종별(1)&quot;].copy()
df_1 = df_1.melt(id_vars=&quot;의료기관종별(1)&quot;, var_name=&quot;연도&quot;, value_name=&quot;환자수&quot;)
df_1.head()</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">의료기관종별(1)</th>
<th align="left">연도</th>
<th align="left">환자수</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">전체</td>
<td align="left">2014</td>
<td align="left">9105050.0</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">상급종합병원</td>
<td align="left">2014</td>
<td align="left">1615801.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">종합병원</td>
<td align="left">2014</td>
<td align="left">2929371.0</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">병원</td>
<td align="left">2014</td>
<td align="left">2751873.0</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">요양병원</td>
<td align="left">2014</td>
<td align="left">267349.0</td>
</tr>
</tbody></table>
</li>
</ul>
<hr>
<h1 id="pivot">Pivot</h1>
<ul>
<li><code>index</code> : 피봇테이블에서 index 로 설정할 컬럼명</li>
<li><code>columns</code> : 피봇테이블에서 colum 으로 설정할 컬럼명</li>
<li><code>values</code> : 데이터를 구성하는 값</li>
</ul>
<h1 id="pivot_table">Pivot_table</h1>
<ul>
<li><code>values</code> : 데이터를 구성하는 값</li>
<li><code>index</code> : 피봇테이블에서 index 로 설정할 컬럼명</li>
<li><code>columns</code> : 피봇테이블에서 colum 으로 설정할 컬럼명</li>
<li><code>aggfunc</code> : 연산 기능</li>
<li><code>fill_value</code> : 결측치를 채우는 기능</li>
</ul>
<hr>
<h2 id="실습으로-배우는-pivot">실습으로 배우는 Pivot</h2>
<blockquote>
<ul>
<li><strong>목표</strong> : 행으로 구성하고있는 의료기관종별 데이터를 열로 올리고, 연도를 인덱스로 넣기   </li>
</ul>
</blockquote>
<pre><code class="language-python">df_2.pivot(index=&quot;연도&quot;, columns=&quot;의료기관종별(1)&quot;)[&quot;환자수&quot;].head()
# 위 코드와 같은 기능을 하는 코드
df_2.pivot(index=&quot;연도&quot;, columns=&quot;연도기관종별(1)&quot;, values=&quot;환자수&quot;).head()</code></pre>
<table>
<thead>
<tr>
<th align="left">의료기관종별(1)</th>
<th align="left">병원</th>
<th align="left">보건소</th>
<th align="left">보건의료원</th>
<th align="left">보건지소</th>
<th align="left">보건진료소</th>
<th align="left">상급종합병원</th>
<th align="left">요양병원</th>
<th align="left">의원</th>
<th align="left">전체</th>
<th align="left">조산원</th>
<th align="left">종합병원</th>
<th align="left">치과병원</th>
<th align="left">치과의원</th>
<th align="left">한방병원</th>
<th align="left">한의원</th>
</tr>
</thead>
<tbody><tr>
<td align="left">연도</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">2014</td>
<td align="left">2751873.0</td>
<td align="left">-</td>
<td align="left">3257.0</td>
<td align="left">-</td>
<td align="left">-</td>
<td align="left">1615801.0</td>
<td align="left">267349.0</td>
<td align="left">1301524.0</td>
<td align="left">9105050.0</td>
<td align="left">-</td>
<td align="left">2929371.0</td>
<td align="left">3499.0</td>
<td align="left">2.0</td>
<td align="left">202590.0</td>
<td align="left">29784.0</td>
</tr>
<tr>
<td align="left">2014.1</td>
<td align="left">60630401.0</td>
<td align="left">5934208.0</td>
<td align="left">634956.0</td>
<td align="left">3949565.0</td>
<td align="left">4543564.0</td>
<td align="left">34915453.0</td>
<td align="left">3018508.0</td>
<td align="left">537948803.0</td>
<td align="left">892637667.0</td>
<td align="left">-</td>
<td align="left">62107328.0</td>
<td align="left">3299112.0</td>
<td align="left">62456280.0</td>
<td align="left">3934930.0</td>
<td align="left">109264559.0</td>
</tr>
<tr>
<td align="left">2014.2</td>
<td align="left">2841399.0</td>
<td align="left">-</td>
<td align="left">3318.0</td>
<td align="left">-</td>
<td align="left">-</td>
<td align="left">1642113.0</td>
<td align="left">358071.0</td>
<td align="left">1327641.0</td>
<td align="left">9410734.0</td>
<td align="left">-</td>
<td align="left">2995106.0</td>
<td align="left">3534.0</td>
<td align="left">2.0</td>
<td align="left">209154.0</td>
<td align="left">30396.0</td>
</tr>
<tr>
<td align="left">2015</td>
<td align="left">2866076.0</td>
<td align="left">-</td>
<td align="left">3126.0</td>
<td align="left">-</td>
<td align="left">-</td>
<td align="left">1655144.0</td>
<td align="left">278419.0</td>
<td align="left">1235564.0</td>
<td align="left">9289026.0</td>
<td align="left">-</td>
<td align="left">2968978.0</td>
<td align="left">3504.0</td>
<td align="left">6.0</td>
<td align="left">245320.0</td>
<td align="left">32889.0</td>
</tr>
<tr>
<td align="left">2015.1</td>
<td align="left">61411640.0</td>
<td align="left">5577059.0</td>
<td align="left">589570.0</td>
<td align="left">3646317.0</td>
<td align="left">4419824.0</td>
<td align="left">35945441.0</td>
<td align="left">2789817.0</td>
<td align="left">531295541.0</td>
<td align="left">889305558.0</td>
<td align="left">-</td>
<td align="left">62302768.0</td>
<td align="left">3633522.0</td>
<td align="left">65292770.0</td>
<td align="left">4149692.0</td>
<td align="left">108251597.0</td>
</tr>
</tbody></table>
<ul>
<li><strong>결과</strong> : pivot 을 사용하면 원하는 컬럼을 index, columns, values 값으로 지정할 수 있다.</li>
<li>위 테이블을 보면 연도가 마치 하나의 행으로 자리잡고 있는 것 처럼 보이지만, 출력된 값을 보면 아래와 같다.</li>
<li>아래 그림과 같이 pivot 테이블의 구조를 형성한다.
<img src="https://velog.velcdn.com/images/j-jae0/post/e7388628-3a9b-4380-9c38-063bd99e23ed/image.png" alt=""></li>
</ul>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<ul>
<li><a href="https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf">[PDF] Pandas Cheat Sheet</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html#pandas.DataFrame.pivot">[판다스 공식 문서] pandas.DataFrame.pivot</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot_table.html#pandas.DataFrame.pivot_table">[판다스 공식 문서] pandas.DataFrame.pivot_table</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] 데이터 재구조화(Melt, Concat) - cheat sheet🔥]]></title>
            <link>https://velog.io/@j-jae0/Pandas-cheat-sheet-3</link>
            <guid>https://velog.io/@j-jae0/Pandas-cheat-sheet-3</guid>
            <pubDate>Sat, 22 Oct 2022 21:18:42 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>Pandas Cheat Sheet 에서 데이터 재구조화 중 melt, concat 학습하기</li>
<li>학습 부분<ul>
<li><code>Reshaping Data - Change layout, sorting, reindexing, renaming</code><ul>
<li>Melt</li>
<li>Concat</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="reshaping">Reshaping</h1>
<blockquote>
<ul>
<li><strong>재구조화(Reshaping data) 종류</strong></li>
</ul>
</blockquote>
<ul>
<li><code>pd.melt(df)</code> : 열을 모아 행으로 녹이기</li>
<li><code>pd.concat([df1, df2])</code> : 여러 데이터프레임 하나로 병합</li>
<li><code>df.pivot(columns=&#39;var&#39;, values=&#39;val&#39;)</code> : 행을 열로 올리기</li>
<li><code>pd.pivot_table(df, values=&#39;val&#39;, index=[], columns=[], aggfunc=func)</code> : 연산이 가능한 피벗 테이블</li>
</ul>
<h2 id="실습에-사용할-데이터">실습에 사용할 데이터</h2>
<ul>
<li>Dataset : KOSIS 의료기관종별 환자 수 (2014 ~ 2017)</li>
<li>Dataset 미리보기 ( <code>df.head()</code> 결과물 )</li>
</ul>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">의료기관종별(1)</th>
<th align="left">2014</th>
<th align="left">2014.1</th>
<th align="left">2014.2</th>
<th align="left">2015</th>
<th align="left">2015.1</th>
<th align="left">2015.2</th>
<th align="left">2016</th>
<th align="left">2016.1</th>
<th align="left">2016.2</th>
<th align="left">2017</th>
<th align="left">2017.1</th>
<th align="left">2017.2</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">의료기관종별(1)</td>
<td align="left">입원환자 (건)</td>
<td align="left">외래환자 (회)</td>
<td align="left">퇴원환자 (건)</td>
<td align="left">입원환자 (건)</td>
<td align="left">외래환자 (회)</td>
<td align="left">퇴원환자 (건)</td>
<td align="left">입원환자 (건)</td>
<td align="left">외래환자 (회)</td>
<td align="left">퇴원환자 (건)</td>
<td align="left">입원환자 (건)</td>
<td align="left">외래환자 (회)</td>
<td align="left">퇴원환자 (건)</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">전체</td>
<td align="left">9105050.0</td>
<td align="left">892637667.0</td>
<td align="left">9410734.0</td>
<td align="left">9289026.0</td>
<td align="left">889305558.0</td>
<td align="left">9616010.0</td>
<td align="left">9668108.0</td>
<td align="left">924554212.0</td>
<td align="left">9992759.0</td>
<td align="left">9490057.0</td>
<td align="left">925584924.</td>
<td align="left">9825940.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">상급종합병원</td>
<td align="left">1615801.0</td>
<td align="left">34915453.0</td>
<td align="left">1642113.0</td>
<td align="left">1655144.0</td>
<td align="left">35945441.0</td>
<td align="left">1683153.0</td>
<td align="left">1783450.0</td>
<td align="left">38193925.0</td>
<td align="left">1810729.0</td>
<td align="left">1833377.0</td>
<td align="left">39140685.0</td>
<td align="left">1861502.0</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">종합병원</td>
<td align="left">2929371.0</td>
<td align="left">62107328.0</td>
<td align="left">2995106.0</td>
<td align="left">2968978.0</td>
<td align="left">62302768.0</td>
<td align="left">3039013.0</td>
<td align="left">3171355.0</td>
<td align="left">66437801.0</td>
<td align="left">3238960.0</td>
<td align="left">3098763.0</td>
<td align="left">67228052.0</td>
<td align="left">3169089.0</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">병원</td>
<td align="left">2751873.0</td>
<td align="left">60630401.0</td>
<td align="left">2841399.0</td>
<td align="left">2866076.0</td>
<td align="left">61411640.0</td>
<td align="left">2959724.0</td>
<td align="left">2920029.0</td>
<td align="left">64220984.0</td>
<td align="left">3009903.0</td>
<td align="left">2771038.0</td>
<td align="left">63776830.0</td>
<td align="left">2852455.0</td>
</tr>
</tbody></table>
<hr>
<h1 id="melt">Melt</h1>
<ul>
<li><code>id_vars</code> : 그대로 나둘 Column 명</li>
<li><code>value_vars</code> : 녹일 Column 명</li>
<li><code>var_name</code> : 열에 사용할 이름 (행으로 녹일 때, 열로 지정할 이름)</li>
<li><code>value_name</code> : 열의 값에 사용할 이름 (행으로 녹일 때, 열의 값에 지정할 이름)</li>
</ul>
<h2 id="실습으로-배우는-melt">실습으로 배우는 Melt</h2>
<blockquote>
<ul>
<li><strong>목표</strong> : Columns 을 구성하고있는 연월 데이터를 행으로 녹이기   </li>
</ul>
</blockquote>
<pre><code class="language-python">df_melt = df.melt(id_vars=&#39;의료기관종별(1)&#39;, var_name=&quot;연도&quot;, value_name=&quot;환자수&quot;)
df_melt.head()</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">의료기관종별(1)</th>
<th align="left">연도</th>
<th align="left">환자수</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2014</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">전체</td>
<td align="left">2014</td>
<td align="left">9105050.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">상급종합병원</td>
<td align="left">2014</td>
<td align="left">1615801.0</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">종합병원</td>
<td align="left">2014</td>
<td align="left">2929371.0</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">병원</td>
<td align="left">2014</td>
<td align="left">2751873.0</td>
</tr>
<tr>
<td align="left">- <strong>결과</strong> : 행에 있으면 좋을 데이터가 열로 구성되어 있을 때, Melt 를 이용해 쉽게 DataFrame의 구조를 변경할 수 있다.</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
</tbody></table>
<h1 id="concat">Concat</h1>
<ul>
<li><code>axis</code> : 행을 기준으로 붙이기 (0 : 기본값), 열을 기준으로 붙이기 (axis=1)</li>
<li><code>ignore_index=True</code> : 인덱스값 reset 하는 방법</li>
</ul>
<h2 id="실습으로-배우는-concat">실습으로 배우는 Concat</h2>
<blockquote>
<ul>
<li><strong>목표</strong> : 나누어져있는 두 데이터프레임을 합치기   </li>
</ul>
</blockquote>
<pre><code class="language-python"># 2014년, 2015년 데이터 일부 가져와서 변수에 할당하기
df1 = df_melt[df_melt[&quot;연도&quot;] == &#39;2014&#39;][:2]
df2 = df_melt[df_melt[&quot;연도&quot;] == &#39;2015&#39;][:2]</code></pre>
<pre><code class="language-python"># 2014년, 2015년 병합 (병합기준 : default=행)
df_concat = pd.concat([df1, df2])
df_concat</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">의료기관종별(1)</th>
<th align="left">연도</th>
<th align="left">환자수</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2014</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">전체</td>
<td align="left">2014</td>
<td align="left">9105050.0</td>
</tr>
<tr>
<td align="left">48</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2015</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">49</td>
<td align="left">전체</td>
<td align="left">2015</td>
<td align="left">9289026.0</td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 인덱스 값 reset 하여 가져오는 방법</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df_concat = pd.concat([df1, df2], ignore_index=True)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df_concat</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">의료기관종별(1)</td>
<td align="left">연도</td>
<td align="left">환자수</td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2014</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">전체</td>
<td align="left">2014</td>
<td align="left">9105050.0</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2015</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">전체</td>
<td align="left">2015</td>
<td align="left">9289026.0</td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 열을 기준으로 데이터 병합</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df_concat = pd.concat([df1, df2], axis=1)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df_concat</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">의료기관종별(1)</td>
<td align="left">연도</td>
<td align="left">환자수</td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2014</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">전체</td>
<td align="left">2014</td>
<td align="left">9105050.0</td>
</tr>
<tr>
<td align="left">48</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
</tr>
<tr>
<td align="left">49</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
</tr>
<tr>
<td align="left">- <strong>주의사항</strong></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"><code>ignore_index</code> 는 <code>axis=1</code>와 함께 사용하면 <strong>컬럼명을 기준으로 reset</strong> 해준다.</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df_concat = pd.concat([df1, df2], axis=1, ignore_index=True)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df_concat</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">0</td>
<td align="left">1</td>
<td align="left">2</td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">의료기관종별(1)</td>
<td align="left">2014</td>
<td align="left">입원환자 (건)</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">전체</td>
<td align="left">2014</td>
<td align="left">9105050.0</td>
</tr>
<tr>
<td align="left">48</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
</tr>
<tr>
<td align="left">49</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
<td align="left">NaN</td>
</tr>
</tbody></table>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<ul>
<li><a href="https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf">[PDF] Pandas Cheat Sheet</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.melt.html?highlight=melt#pandas.DataFrame.melt">[판다스 공식 문서] pandas.DataFrame.melt</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html?highlight=concat#pandas.concat">[판다스 공식 문서] pandas.concat</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] 데이터 요약하기 - cheat sheet🔥]]></title>
            <link>https://velog.io/@j-jae0/Pandas-cheat-sheet-2</link>
            <guid>https://velog.io/@j-jae0/Pandas-cheat-sheet-2</guid>
            <pubDate>Fri, 21 Oct 2022 17:06:13 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>Pandas Cheat Sheet 에서 데이터 요약, 기술통계 학습하기</li>
<li>학습 부분<ul>
<li><code>Summarize Data</code></li>
</ul>
</li>
</ul>
<hr>
<h1 id="기술-통계">기술 통계</h1>
<ul>
<li><strong>기술통계</strong>란? 측정이나 실험에서 수집한 자료(data)의 정리, 요약, 해석, 표현 등을 통해 자료의 특성을 규명하는 통계적 방법</li>
</ul>
<blockquote>
<ul>
<li><strong>데이터프레임을 이루고 있는 정보 요약</strong>
<code>df.info()</code> : 메모리 사용량, 각 컬럼별 데이터타입 등을 알 수 있음<br>
</li>
</ul>
</blockquote>
<ul>
<li><strong>데이터프레임의 행, 열의 수</strong>
<code>df.shape</code> : (행의수, 열의수) 형식 확인 가능<br></li>
<li><strong>데이터프레임의 행의 수</strong>
<code>len(df)</code> <br></li>
<li><strong>특정 컬럼의 unique 값에 대한 빈도수</strong>
<code>df[컬럼명].value_counts()</code><br></li>
<li><strong>특정 컬럼의 unique 값</strong>
<code>df[컬럼명].unique()</code> <br></li>
<li><strong>특정 컬럼의 unique 개수</strong>
<code>df[컬럼명].nunique()</code><br></li>
<li><strong>수치형 변수에 대한 기술통계</strong>
<code>df.describe()</code> 
: 수치형 데이터에 대한 count, mean, std, min, 25%, 50%, 75%, max 값 확인<br></li>
<li><strong>범주형 변수에 대한 기술통계</strong>
<code>df.describe(include=&quot;object&quot;)</code> 또는 <code>df.describe(include=&quot;O&quot;)</code> 
: 범주형 변수에 대한 count, unique, top, freq 값 확인<br></li>
<li><strong>집계 함수</strong><ul>
<li><code>df.sum(axis, skipna)</code> <ul>
<li>행을 기준으로 더하기(defaulf), 열을 기준으로 더하기(axis=1)</li>
<li>skipna(기본값:True) : 결과 계산 시, NA/Null 제외<br></li>
</ul>
</li>
<li><code>df.count(axis)</code> <ul>
<li>행을 기준으로 Null값 제외 셀의 개수(defaulf)</li>
<li>열을 기준으로 Null값 제외 셀의 개수(axis=1)<br></li>
</ul>
</li>
<li><code>df.median()</code> : 중앙값 반환<br></li>
<li><code>df.quantile(q, axis)</code> : 요청된 축에 대해 지정된 분위수의 값을 반환<ul>
<li>q : 계산할 분위 수 (기본값 : .5) : 0 &lt;= q &lt;= 1</li>
<li>행을 기준 (기본값 : axis=0), 열을 기준 (axis=1)</li>
<li><code>예) df.quantile([.25, .75])</code> : 1사분위와 3사분위에 해당하는 값 반환<br></li>
</ul>
</li>
<li><code>df.min()</code> : 최솟값<br></li>
<li><code>df.max()</code> : 최댓값<br></li>
<li><code>df.mean()</code> : 평균<br></li>
<li><code>df.var()</code> : 분산<br></li>
<li><code>df.std()</code> : 표준편차</li>
</ul>
</li>
</ul>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<ul>
<li><a href="https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf">[PDF] Pandas Cheat Sheet</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html">[판다스 공식 문서] Indexing and selecting data</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] 데이터 인덱싱 및 선택 - cheat sheet🔥]]></title>
            <link>https://velog.io/@j-jae0/Pandas-cheat-sheet-1</link>
            <guid>https://velog.io/@j-jae0/Pandas-cheat-sheet-1</guid>
            <pubDate>Thu, 20 Oct 2022 20:41:16 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>Pandas Cheat Sheet 에서 Sebset 부분 학습하기</li>
<li>학습 부분<ul>
<li><code>Subset Observations - rows</code></li>
<li><code>Subset Variables - columns</code></li>
<li><code>Subsets - rows and columns</code></li>
</ul>
</li>
</ul>
<hr>
<h1 id="indexing">Indexing</h1>
<ul>
<li>데이터프레임(DataFrame) 에서 <strong>특정한 데이터만</strong> 골라내는 것을 인덱싱(indexing) 이라고 한다.</li>
<li>실습에 사용할 Dataset : <code>df = sns.load_dataset(&quot;mpg&quot;)</code></li>
</ul>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">mpg</th>
<th align="left">cylinders</th>
<th align="left">displacement</th>
<th align="left">horsepower</th>
<th align="left">weight</th>
<th align="left">acceleration</th>
<th align="left">model_year</th>
<th align="left">origin</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">307.0</td>
<td align="left">130.0</td>
<td align="left">3504</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">15.0</td>
<td align="left">8</td>
<td align="left">350.0</td>
<td align="left">165.0</td>
<td align="left">3693</td>
<td align="left">11.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">318.0</td>
<td align="left">150.0</td>
<td align="left">3436</td>
<td align="left">11.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">16.0</td>
<td align="left">8</td>
<td align="left">304.0</td>
<td align="left">150.0</td>
<td align="left">3433</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">17.0</td>
<td align="left">8</td>
<td align="left">302.0</td>
<td align="left">140.0</td>
<td align="left">3449</td>
<td align="left">10.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
</tbody></table>
<h2 id="행row">행(row)</h2>
<h3 id="📍특정-조건에-맞는-행-가져오기">📍특정 조건에 맞는 행 가져오기</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df[df.컬럼명 + 조건]</code></pre>
<ul>
<li><strong>적용해 보기</strong><pre><code class="language-python">df[df.mpg &gt; 16]</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">mpg</th>
<th align="left">cylinders</th>
<th align="left">displacement</th>
<th align="left">horsepower</th>
<th align="left">weight</th>
<th align="left">acceleration</th>
<th align="left">model_year</th>
<th align="left">origin</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">307.0</td>
<td align="left">130.0</td>
<td align="left">3504</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">318.0</td>
<td align="left">150.0</td>
<td align="left">3436</td>
<td align="left">11.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">17.0</td>
<td align="left">8</td>
<td align="left">302.0</td>
<td align="left">140.0</td>
<td align="left">3449</td>
<td align="left">10.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
</tbody></table>
</li>
<li><strong>알아두기</strong><ul>
<li>조건식을 여러개 사용할 수 있음 <pre><code class="language-python"># mpg 값이 15보다 크고 horsepower가 150보다 큰 경우의 데이터 가져오기
df[(df[&quot;mpg&quot;]&gt;15)&amp;(df[&quot;horsepower&quot;]&gt;150)]</code></pre>
</li>
<li><code>&amp;</code> : 교집합 (and), <code>|</code> : 합집합 (or)</li>
</ul>
</li>
</ul>
<h3 id="📍중복-제거drop_duplicates">📍중복 제거(drop_duplicates)</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df.drop_duplicates(subset=[컬럼명], keep={&#39;last&#39; , &#39;first&#39; 또는 False})</code></pre>
<ul>
<li><strong>적용해 보기</strong><pre><code class="language-python">df.drop_duplicates(subset=[&#39;mpg&#39;, &#39;cylinders&#39;])</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">mpg</th>
<th align="left">cylinders</th>
<th align="left">displacement</th>
<th align="left">horsepower</th>
<th align="left">weight</th>
<th align="left">acceleration</th>
<th align="left">model_year</th>
<th align="left">origin</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">307.0</td>
<td align="left">130.0</td>
<td align="left">3504</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">15.0</td>
<td align="left">8</td>
<td align="left">350.0</td>
<td align="left">165.0</td>
<td align="left">3693</td>
<td align="left">11.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">16.0</td>
<td align="left">8</td>
<td align="left">304.0</td>
<td align="left">150.0</td>
<td align="left">3433</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">17.0</td>
<td align="left">8</td>
<td align="left">302.0</td>
<td align="left">140.0</td>
<td align="left">3449</td>
<td align="left">10.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
</tbody></table>
</li>
<li><strong>알아두기</strong><ul>
<li>중복제거한 것은, 변수에 할당해주지않으면 저장이 안됨</li>
<li>subset 에 넣어준 컬럼을 기준으로 중복 제거</li>
<li>keep을 작성하지 않으면 중복제거 시, default 값인 &#39;first&#39; 첫 번째 요소를 남기고 나머지 제거<ul>
<li><code>&#39;first&#39;</code>: 중복 시, 첫 번째 요소만 남기기</li>
<li><code>&#39;last&#39;</code> : 중복 시, 마지막 요소만 남기기</li>
<li><code>False</code> : 중복 시, 남김없이 제거</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="📍특정-데이터-불러오기">📍특정 데이터 불러오기</h3>
<blockquote>
<h4 id="상위-n개-데이터-불러오기">상위 n개 데이터 불러오기</h4>
<p><code>df.head(n)</code> : n 작성안할 시, default 값인 5로 실행</p>
</blockquote>
<h4 id="하위-n개-데이터-불러오기">하위 n개 데이터 불러오기</h4>
<p><code>df.tail(n)</code> : n 작성안할 시, default 값인 5로 실행</p>
<h4 id="n개-데이터-랜덤으로-불러오기">n개 데이터 랜덤으로 불러오기</h4>
<p><code>df.sample(n)</code> : n 작성안할 시, default 값인 1로 무작위로 데이터 반환</p>
<h4 id="전체-데이터의-특정비율로-랜덤-데이터-불러오기">전체 데이터의 특정비율로 랜덤 데이터 불러오기</h4>
<p><code>df.sample(frac=n)</code> : 0&lt;=n&lt;=1 로 작성 (0 입력 시, 데이터 반환X, 1 입력 시, 전체 데이터 반환)</p>
<h4 id="특정-컬럼의-값이-가장-큰-데이터-n개-불러오기">특정 컬럼의 값이 가장 큰 데이터 n개 불러오기</h4>
<p><code>df.nlargest(n, columns, keep=&#39;first&#39;)</code> : keep의 default가 &#39;first&#39;이고, &#39;first&#39;, &#39;last&#39;, &#39;all&#39;을 사용할 수 있음</p>
<h4 id="특정-컬럼의-값이-가장-작은-데이터-n개-불러오기">특정 컬럼의 값이 가장 작은 데이터 n개 불러오기</h4>
<p><code>df.nsmallest(n, columns, keep=&#39;first&#39;)</code> : keep의 default가 &#39;first&#39;이고, <code>&#39;first&#39;, &#39;last&#39;, &#39;all&#39;</code>을 사용할 수 있음</p>
<hr>
<h2 id="열column">열(column)</h2>
<p>컬럼 선택하는 방법 : <code>df[컬럼명] or df.컬럼명</code></p>
<h3 id="📍특정-컬럼들만-뽑아오기">📍특정 컬럼들만 뽑아오기</h3>
<blockquote>
<h4 id="방법-1-df컬럼명1-컬럼명2-">방법 1. df[[컬럼명1, 컬럼명2 ,...]]</h4>
</blockquote>
<h4 id="방법-2-dffilterregexregex">방법 2. df.filter(regex=&#39;regex&#39;)</h4>
<ul>
<li>기본 구조
<code>df.filter(items, like, regex, axis)</code></li>
<li>적용해 보기<pre><code class="language-python"># 컬럼명으로 가져오기
df.filter(items=[&#39;mpg&#39;, &#39;horsepower&#39;, &#39;origin&#39;])</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">mpg</th>
<th align="left">horsepower</th>
<th align="left">origin</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left">130.0</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">15.0</td>
<td align="left">165.0</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">16.0</td>
<td align="left">150.0</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">17.0</td>
<td align="left">140.0</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 정규표현식으로 가져오기 =&gt; ^mp : mp로 시작하는!</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># axis = 1 (열) axis = 0 (행)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df.filter(regex=&#39;^mp&#39;, axis=1)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">mpg</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">15.0</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">16.0</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">17.0</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 특정 문자열을 포함하고 있는 컬럼 또는 행으로 가져오기 =&gt; del 이 들어간 컬럼</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># axis = 1 (열) axis = 0 (행)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df.filter(like=&#39;del&#39;, axis=1)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">````</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">model_year</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">70</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">70</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">70</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">70</td>
<td align="left"></td>
<td align="left"></td>
</tr>
</tbody></table>
</li>
</ul>
<hr>
<h2 id="행과-열row-and-column">행과 열(row and column)</h2>
<h3 id="📍위치로-데이터-뽑아오기">📍위치로 데이터 뽑아오기</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code>df.iloc[] : 행, 열 또는 행-열 불러올 수 있음</code></pre><ul>
<li><strong>적용해 보기</strong><pre><code class="language-python"># 특정 행만 가져오기 (행을 0~2까지 가져오기)
df.iloc[:3] </code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">mpg</th>
<th align="left">cylinders</th>
<th align="left">displacement</th>
<th align="left">horsepower</th>
<th align="left">weight</th>
<th align="left">acceleration</th>
<th align="left">model_year</th>
<th align="left">origin</th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">307.0</td>
<td align="left">130.0</td>
<td align="left">3504</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">15.0</td>
<td align="left">8</td>
<td align="left">350.0</td>
<td align="left">165.0</td>
<td align="left">3693</td>
<td align="left">11.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">318.0</td>
<td align="left">150.0</td>
<td align="left">3436</td>
<td align="left">11.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 특정 열만 가져오기 (열을 1~4까지 가져오기)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df.iloc[:, 1:5]</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">cylinders</td>
<td align="left">displacement</td>
<td align="left">horsepower</td>
<td align="left">weight</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">8</td>
<td align="left">307.0</td>
<td align="left">130.0</td>
<td align="left">3504</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">8</td>
<td align="left">350.0</td>
<td align="left">165.0</td>
<td align="left">3693</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">8</td>
<td align="left">318.0</td>
<td align="left">150.0</td>
<td align="left">3436</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">8</td>
<td align="left">304.0</td>
<td align="left">150.0</td>
<td align="left">3433</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">8</td>
<td align="left">302.0</td>
<td align="left">140.0</td>
<td align="left">3449</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 특정 행, 열에 대한 데이터만 가져오기</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df.iloc[:2, 1:5]</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">cylinders</td>
<td align="left">displacement</td>
<td align="left">horsepower</td>
<td align="left">weight</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">8</td>
<td align="left">307.0</td>
<td align="left">130.0</td>
<td align="left">3504</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">8</td>
<td align="left">350.0</td>
<td align="left">165.0</td>
<td align="left">3693</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
</tbody></table>
</li>
<li><strong>알아두기</strong><ul>
<li><code>df.head() =&gt; df.iloc[:5] 기능</code></li>
<li><code>df.tail() =&gt; df.iloc[-5:] 기능</code></li>
</ul>
</li>
</ul>
<h3 id="📍label로-데이터-뽑아오기">📍label로 데이터 뽑아오기</h3>
<ul>
<li>레이블 : 단일 레이블(0 또는 &#39;age&#39;), list/array([&#39;mpg&#39;, &#39;weight&#39;]), 슬라이스객체(&#39;mpg&#39;:&#39;weight&#39;)</li>
</ul>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code>df.loc[] : 행, 열 또는 행-열 불러올 수 있음</code></pre><ul>
<li><strong>적용해 보기</strong><pre><code class="language-python"># 특정 행만 가져오기 (레이블이 2인 행부터 4인 행까지 가져오기)
df.loc[2:4] </code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">mpg</th>
<th align="left">cylinders</th>
<th align="left">displacement</th>
<th align="left">horsepower</th>
<th align="left">weight</th>
<th align="left">acceleration</th>
<th align="left">model_year</th>
<th align="left">origin</th>
</tr>
</thead>
<tbody><tr>
<td align="left">2</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left">318.0</td>
<td align="left">150.0</td>
<td align="left">3436</td>
<td align="left">11.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">16.0</td>
<td align="left">8</td>
<td align="left">304.0</td>
<td align="left">150.0</td>
<td align="left">3433</td>
<td align="left">12.0</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">17.0</td>
<td align="left">8</td>
<td align="left">302.0</td>
<td align="left">140.0</td>
<td align="left">3449</td>
<td align="left">10.5</td>
<td align="left">70</td>
<td align="left">usa</td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 특정 열만 가져오기 (레이블이 0~2인 행, &quot;mpg&quot; 열)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df.loc[0:2, &quot;mpg&quot;]</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">0    18.0</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">1    15.0</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">2    18.0</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">Name: mpg, dtype: float64</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```python</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"># 특정 행-열 가져오기 (dataframe)</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">df.loc[0:2, [&quot;mpg&quot;,&quot;cylinders&quot;]]</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">```</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
<td align="left">mpg</td>
<td align="left">cylinders</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left">:---------</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">0</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">1</td>
<td align="left">15.0</td>
<td align="left">8</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">18.0</td>
<td align="left">8</td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
<td align="left"></td>
</tr>
</tbody></table>
</li>
<li><strong>알아두기</strong><ul>
<li><code>df.loc</code> 는 조건식을 추가하여 특정 조건에 대한 데이터를 선택해올 수 있음<pre><code class="language-python">df.loc[df.mpg &lt; 18, [&quot;horsepower&quot;, &quot;weight&quot;, &quot;acceleration&quot;]]</code></pre>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">horsepower</th>
<th align="left">weight</th>
<th align="left">acceleration</th>
</tr>
</thead>
<tbody><tr>
<td align="left">1</td>
<td align="left">165.0</td>
<td align="left">3693</td>
<td align="left">11.5</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">150.0</td>
<td align="left">3433</td>
<td align="left">12.0</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">140.0</td>
<td align="left">3449</td>
<td align="left">10.5</td>
</tr>
</tbody></table>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<ul>
<li><a href="https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf">[PDF] Pandas Cheat Sheet</a></li>
<li><a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html">[판다스 공식 문서] Indexing and selecting data</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] DataFrame의 컬럼 선택, 추가, 삭제하기 - del, pop, drop,  insert]]></title>
            <link>https://velog.io/@j-jae0/Pandas-Series-DataFrame-2</link>
            <guid>https://velog.io/@j-jae0/Pandas-Series-DataFrame-2</guid>
            <pubDate>Wed, 19 Oct 2022 17:36:49 GMT</pubDate>
            <description><![CDATA[<h1 id="dataframe">DataFrame</h1>
<ul>
<li>행(row) 과 열(column) 로 이루어진 2차원 자료 구조</li>
<li>이미지 : <a href="https://pandas.pydata.org/pandas-docs/stable/getting_started/intro_tutorials/01_table_oriented.html">데이터프레임 구조</a></li>
</ul>
<img src="https://velog.velcdn.com/images/j-jae0/post/bfb44cd1-2ec6-44dc-8a68-06292b6c97cb/image.png" width=300>


<hr>
<h2 id="컬럼column-선택">컬럼(Column) 선택</h2>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df[&quot;불러올 컬럼명&quot;]</code></pre>
<ul>
<li><strong>적용해 보기</strong><pre><code class="language-python">df = pd.DataFrame({&quot;주문수&quot;: [3, 1, 4, 2], &quot;판매가&quot;: [500, 1000, 2000, 5500]})
df[&quot;주문수&quot;]</code></pre>
<pre><code>0    3
1    1
2    4
3    2
Name: 주문수, dtype: int64</code></pre></li>
<li><strong>알아두기</strong><ul>
<li>dataframe 에서 특정 컬럼을 가져오면, Name, dtype 정보도 출력됨<ul>
<li>Name 은 컬럼명, dtype 은 데이터를 구성하고 있는 데이터의 타입</li>
</ul>
</li>
<li>데이터 타입은 <code>pandas.core.series.Series</code> 으로 불러와짐</li>
</ul>
</li>
</ul>
<hr>
<h2 id="컬럼column-추가">컬럼(Column) 추가</h2>
<h3 id="📍맨-마지막에-컬럼-추가">📍맨 마지막에 컬럼 추가</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df[&quot;새로추가할 컬럼명&quot;] = value 값 넣기</code></pre>
<blockquote>
<ul>
<li><strong>적용해 보기</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df[&quot;픽업여부&quot;] = &quot;Y&quot;
df[&quot;총매출&quot;] = df[&quot;주문수&quot;] * df[&quot;판매가&quot;]
df</code></pre>
<pre><code>  주문수 판매가 픽업여부 총매출
0    3    500        Y    1500
1    1    1000    Y    1000
2    4    2000    Y    8000
3    2    5500    Y    11000</code></pre><h3 id="📍원하는-위치에-컬럼-추가insert">📍원하는 위치에 컬럼 추가(insert)</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df.insert(위치, 컬럼명, 컬럼값)</code></pre>
<blockquote>
<ul>
<li><strong>적용해 보기</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df.insert(1, &quot;단골여부&quot;, [&quot;N&quot;, &quot;Y&quot;, &quot;Y&quot;, &quot;N&quot;])
df</code></pre>
<pre><code>  주문수 단골여부 판매가    픽업여부    총매출
0    3    N       500      Y        1500
1    1    Y       1000      Y        1000
2    4    Y       2000      Y        8000
3    2    N       5500      Y        11000</code></pre><ul>
<li><strong>알아두기</strong><ul>
<li><code>insert</code> 에서, 위치값은 int로 넣기  </li>
<li><code>insert</code> 는 <strong>변수에 다시 할당하지 않아도 됨</strong></li>
<li>컬럼 위치는 앞에서 부터 0으로 시작 함</li>
</ul>
</li>
</ul>
<hr>
<h2 id="컬럼column-삭제">컬럼(Column) 삭제</h2>
<h3 id="📍del">📍del</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">del df[&quot;컬럼명&quot;]</code></pre>
<blockquote>
<ul>
<li><strong>적용해 보기</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">del df[&quot;주문수&quot;]
df</code></pre>
<pre><code> 단골여부    판매가 픽업여부    총매출
0    N    500        Y    1500
1    Y    1000    Y    1000
2    Y    2000    Y    8000
3    N    5500    Y    11000</code></pre><ul>
<li><strong>알아두기</strong><ul>
<li><code>del</code> 는 <strong>변수에 다시 할당하지 않아도 됨</strong></li>
</ul>
</li>
</ul>
<h3 id="📍pop">📍pop</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df.pop(&quot;컬럼명&quot;)</code></pre>
<blockquote>
<ul>
<li><strong>적용해 보기</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df.pop(&quot;픽업여부&quot;)
df</code></pre>
<pre><code> 단골여부    판매가    총매출
0    N    500        1500
1    Y    1000    1000
2    Y    2000    8000
3    N    5500    11000</code></pre><ul>
<li><strong>알아두기</strong><ul>
<li><code>pop</code> 는 <code>del</code> 과 동일하게 <strong>변수에 다시 할당하지 않아도 됨</strong></li>
</ul>
</li>
</ul>
<h3 id="📍drop">📍drop</h3>
<blockquote>
<ul>
<li><strong>기본 구조</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">df = df.drop(labels=&quot;컬럼명&quot;, axis=0또는1)</code></pre>
<blockquote>
<ul>
<li><strong>적용해 보기</strong></li>
</ul>
</blockquote>
<pre><code class="language-python"># 열을 기준으로 단골여부 컬럼 삭제
df = df.drop(labels=&quot;단골여부&quot;, axis=1)
df</code></pre>
<pre><code>    판매가    총매출
0    500        1500
1    1000    1000
2    2000    8000
3    5500    11000</code></pre><pre><code class="language-python"># 행을 기준으로 0번 인덱스 행 삭제
df = df.drop(labels=0, axis=0)
df</code></pre>
<pre><code>    판매가    총매출
1    1000    1000
2    2000    8000
3    5500    11000</code></pre><ul>
<li><strong>알아두기</strong><ul>
<li><code>drop</code> 는 <code>del</code>, <code>pop</code> 과 다르게 <strong>변수에 다시 할당해주어야 저장이 됨</strong></li>
<li><code>axis</code> = 0 : 행을 기준, <code>axis = 1</code> : 열을 기준</li>
</ul>
</li>
</ul>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<ul>
<li><a href="https://pandas.pydata.org/docs/user_guide/dsintro.html#column-selection-addition-deletion">판다스 공식 문서 : Intro to data structures</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 파이썬 프로파일링(Profiling) - time, timeit]]></title>
            <link>https://velog.io/@j-jae0/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EB%A7%81-Profiling</link>
            <guid>https://velog.io/@j-jae0/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC%EB%A7%81-Profiling</guid>
            <pubDate>Tue, 18 Oct 2022 17:16:39 GMT</pubDate>
            <description><![CDATA[<h1 id="프로파일링profiling-이란">프로파일링(Profiling) 이란?</h1>
<ul>
<li>어떤 것이 더 나은지 특정 코드의 성능을 조사함</li>
<li>속도가 어느정도 차이나는지 비교해볼 수 있음</li>
</ul>
<h2 id="time">%time</h2>
<blockquote>
<ul>
<li>한 번 실행으로 실행되는데 소요된 time 측정</li>
</ul>
</blockquote>
<pre><code class="language-python">%time 코드</code></pre>
<h2 id="timeit">%timeit</h2>
<blockquote>
<ul>
<li>여러 번 실행하여 소요된 평균 time 측정 (100000 loops)</li>
</ul>
</blockquote>
<pre><code class="language-python">%timeit 코드</code></pre>
<hr>
<h1 id="적용">적용</h1>
<pre><code class="language-python"># 1번 방법 
%timeit list(map(int, &#39;1 2 3 4 5 6&#39;.split()))

# 2번 방법 
%timeit list(int(x) for x in &#39;123456&#39;)</code></pre>
<pre><code>1번 결과 : 612 ns ± 12.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
2번 결과 : 1.63 µs ± 29.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)</code></pre><ul>
<li>결론 : 1번 방법이 실행되는데 더 적은 시간이 소요된다. (효율적임)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Pandas] 판다스의 구조 - Series, DataFrame 생성하기]]></title>
            <link>https://velog.io/@j-jae0/Pandas-Series-DataFrame-1</link>
            <guid>https://velog.io/@j-jae0/Pandas-Series-DataFrame-1</guid>
            <pubDate>Tue, 18 Oct 2022 16:46:18 GMT</pubDate>
            <description><![CDATA[<h1 id="pandas-란">Pandas 란?</h1>
<p><strong>pandas</strong> is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.</p>
<ul>
<li>엑셀과 같이 행, 열로 된 구조를 다루는 데이터 분석 도구</li>
<li><code>DataFrame</code> 과 <code>Series</code> 이해 필요</li>
</ul>
<blockquote>
<p><strong>How to load Pandas</strong></p>
</blockquote>
<pre><code class="language-python">import pandas as pd</code></pre>
<p><strong>Series</strong> </p>
<pre><code>1차원 자료구조
1차원 리스트와 유사하지만 Series는 index에 이름을 부여할 수 있음</code></pre><p><strong>DataFrame</strong></p>
<pre><code>2차원 자료구조
행 (row) 과 열(column) 으로 이루어 짐</code></pre><h2 id="시리즈-series">시리즈 (Series)</h2>
<p><strong>Series</strong> is a <strong>one-dimensional labeled array</strong> capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). 
The axis labels are collectively referred to as the <strong>index</strong></p>
<ul>
<li><strong>list 와 다른 점</strong> : 시리즈는 index를 사용할 수 있음</li>
</ul>
<blockquote>
<ul>
<li><strong>How to create a Series</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">s = pd.Series(data, index=index, name=&quot;name&quot;)</code></pre>
<ul>
<li><strong>data</strong> 
```</li>
<li>python dictionary</li>
<li>an ndarray</li>
<li>a scalar Value 
```</li>
<li><strong>index</strong> 
```</li>
<li>인덱스를 지정하지 않으면, 0을 시작으로 정수로 자동으로 생성 됨</li>
<li>반면에, data에 딕셔너리를 넣으면 key 값이 index로 들어감 =&gt; 따로 지정해주지 않아도 됨
```</li>
<li><strong>Name</strong> <pre><code>name = &quot;&quot; 로 시리즈에 이름을 부여할 수 있음
=&gt; DataFrame 에선, column 하나를 셀렉하여 이름을 부여할 수 있음 </code></pre></li>
</ul>
<h2 id="데이터프레임-dataframe">데이터프레임 (DataFrame)</h2>
<p><strong>DataFrame</strong> is a <strong>2-dimensional labeled data structure</strong> with columns of potentially different types. </p>
<blockquote>
<ul>
<li><strong>How to create a DataFrame</strong></li>
</ul>
</blockquote>
<pre><code class="language-python">d = pd.DataFrame(data, index=index, columns=columns, dtype=dtype)</code></pre>
<ul>
<li><strong>data</strong>
```</li>
<li>Dict of 1D ndarrays, lists, dicts, or Sereis</li>
<li>2D numpy.ndarray</li>
<li>Structured or record ndarray</li>
<li>A Series</li>
<li>Another DataFrame
```</li>
<li><strong>index</strong>
```</li>
<li>인덱스 지정하지 않으면, 0을 시작으로 정수로 자동으로 생성 됨</li>
<li>인덱스를 지정하려면, index = [] 로 설정하면 됨
```</li>
<li><strong>columns</strong>
```</li>
<li>data에 딕셔너리 형태를 넣으면, key 값이 컬럼명이 됨</li>
<li>columns = [] 에 넣어줘도 됨
```</li>
<li><strong>dtype</strong>
```</li>
<li>데이터 타입을 지정할 수 있음</li>
<li>dtype = float (정수를 넣어도 실수형태로 데이터 만들어 짐)<pre><code></code></pre></li>
</ul>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<ul>
<li><a href="https://pandas.pydata.org/docs/user_guide/dsintro.html">판다스 공식 문서 : Intro to data structures</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 파이썬 제어문과 함수 이해하기 - for, while, def, 연산자]]></title>
            <link>https://velog.io/@j-jae0/Python-%EC%A0%9C%EC%96%B4%EB%AC%B8-%ED%95%A8%EC%88%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@j-jae0/Python-%EC%A0%9C%EC%96%B4%EB%AC%B8-%ED%95%A8%EC%88%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 18 Oct 2022 15:48:20 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>멋쟁이사자 AI 스쿨 2일차(220920) 학습 내용 정리하기</li>
<li>파이썬 프로그램의 구조를 만드는 제어문(조건문, 반복문)과 함수 이해하기</li>
</ul>
<hr>
<h1 id="조건문">조건문</h1>
<blockquote>
<p><strong>if문</strong>은 조건을 판단하여 해당 조건에 맞는 상황을 수행하는데 쓰는 것으로, 기본 구조는 if와 else로 구성됨</p>
</blockquote>
<ul>
<li><strong>들여쓰기</strong> : 4개의 공백 or Tab</li>
<li><code>if</code> 조건문 뒤에 콜론(:) 사용하기</li>
<li><code>elif</code> : 여러번 사용할 수 있다. / 조건문을 넣어야 한다.</li>
<li><code>else</code> : 한번만 사용할 수 있다. / 조건문을 넣지 않는다.<pre><code class="language-python">number = int(input(&quot;숫자를 입력하세요 : &quot;))
if number % 2 == 0:
  print(&quot;입력하신 숫자는 짝수입니다.&quot;)
else:
  print(&quot;입력하신 숫자는 홀수입니다.&quot;)</code></pre>
</li>
</ul>
<h2 id="조건-2개-이상일-때">조건 2개 이상일 때</h2>
<ul>
<li>해결 방법 : if-elif-else 사용 (elif는 1개 이상 사용 가능) / and, or, not 연산자 사용<pre><code class="language-python"># 컴퓨터와 하는 가위바위보 게임
from random import choice
</code></pre>
</li>
</ul>
<p>auto = choice([&#39;가위&#39;, &#39;바위&#39;, &#39;보&#39;])
user = input(&quot;가위, 바위, 보 : &quot;)</p>
<p>if user in [&#39;가위&#39;, &#39;바위&#39;, &#39;보&#39;]:
    if user == auto:
        print(f&quot;user : {user}, computer : {auto} 으로 비겼습니다.&quot;)
    elif (user == &#39;가위&#39; and auto == &#39;보&#39;) or (user == &#39;바위&#39; and auto == &#39;가위&#39;) or (user == &#39;보&#39; and auto == &#39;바위&#39;):
        print(f&quot;user : {user}, computer : {auto} 으로 이겼습니다.&quot;)
    else:
        print(f&quot;user : {user}, computer : {auto} 으로 졌습니다.&quot;)
else:
    print(&quot;옳지않은 값을 입력하셨습니다.&quot;)</p>
<pre><code>
## pass 문
- 조건문에서 아무일도 일어나지 않게 설정할 때 사용
```python
# 파티 참석 명단에 이미 등록되어있으면 아무것도 출력되지 않음
party = [&quot;Jane&quot;, &quot;Michael&quot;, &quot;Rose&quot;, &quot;Justin&quot;, &quot;Jimmy&quot;]
name = input(&quot;파티에 참석하신다면 이름을 입력하세요 : &quot;)

if name in party:
    pass
else:
    print(f&quot;{name}, 파티 참석 명단에 등록되었습니다.&quot;)</code></pre><h1 id="반복문">반복문</h1>
<blockquote>
<p><strong>반복문</strong>은 반복해서 문장을 수행해야 할 경우 사용한다.</p>
</blockquote>
<ul>
<li><code>for문</code> : 반복할 횟수를 알 때 사용</li>
<li><code>while문</code> : 반복할 횟수를 모를 때 사용 ( 조건문이 참인 동안 순회 )</li>
<li><code>range(start, end, step)</code>, <code>range(len())</code> 나 index와 요소를 함께 사용해야 되는 경우 <code>enumerate()</code> 사용하기</li>
</ul>
<h2 id="for-문">for 문</h2>
<pre><code class="language-python">all_kr = &quot;가나다라마바사아자차카타파하&quot;
kr_list = []

for kr in all_kr:
    kr_list.append(kr)

kr_list # [&#39;가&#39;, &#39;나&#39;, &#39;다&#39;, &#39;라&#39;, &#39;마&#39;, &#39;바&#39;, &#39;사&#39;, &#39;아&#39;, &#39;자&#39;, &#39;차&#39;, &#39;카&#39;, &#39;타&#39;, &#39;파&#39;, &#39;하&#39;]</code></pre>
<h2 id="while-문">while 문</h2>
<pre><code class="language-python">num = int(input(&quot;숫자를 입력해 주세요 : &quot;))

while num != 0:
    print(num)
    num -= 1</code></pre>
<h1 id="함수">함수</h1>
<blockquote>
<p>똑같은 내용을 반복해서 작성할 때, 하나의 함수로 정의해두면 편리하게 사용할 수 있음
예를 들어, 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산 기능이 가능한 함수를 만들어 두면 함수 한줄로 계산 가능</p>
</blockquote>
<pre><code>함수에는 매개변수와 전달인자(인수)가 있다.
- keywords 인자 : ** 두 개 (딕셔너리 형태로 전달)
- arguments 인자 : * 한 개 (리스트나 튜플 형태로 전달)</code></pre><pre><code>** 함수에서 인자 등 정보 찾을 때
? : Docstring
?? : Source
예) range? add? 함수??</code></pre><pre><code class="language-python"># 계산기 기능을 하는 함수
def calculate(num1, num2, sign):
    if sign == &#39;+&#39;:
        return num1 + num2
    elif sign == &#39;-&#39;:
        return num1 - num2
    elif sign == &#39;*&#39;:
        return num1 * num2
    elif sign == &#39;/&#39;:
        return num1 / num2
    else:
        return &quot;지원하지 않는 기능입니다.&quot;
calculate(3, 10, &#39;*&#39;)</code></pre>
<pre><code>출력값 : 30</code></pre><ul>
<li>위 코드에서 num1, num2, sign 은 함수에서 매개변수이며 함수를 요청할 때 입력한 3, 10, &#39;*&#39;은 변수에 대한 인수이다.</li>
</ul>
<h1 id="연산자">연산자</h1>
<table>
<thead>
<tr>
<th align="left">연산자</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">x or y</td>
<td align="left">x와 y 둘 중에 하나만 참이어도 참</td>
</tr>
<tr>
<td align="left">x and y</td>
<td align="left">x와 y 모두 참이어야 참</td>
</tr>
<tr>
<td align="left">not x</td>
<td align="left">x가 거짓이면 참</td>
</tr>
<tr>
<td align="left"><br></td>
<td align="left"></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="left">in과 not in</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">x in (리스트/튜플/문자열)</td>
<td align="left">자료형 안에 x가 있으면 참</td>
</tr>
<tr>
<td align="left">x not in (리스트/튜플/문자열)</td>
<td align="left">자료형 안에 x가 없으면 참</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"><a href="https://wikidocs.net/19">점프 투 파이썬 : 03장 프로그램의 구조를 쌓는다! 제어문</a></td>
<td align="left"></td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 파이썬 자료형 이해하기 - number, string, list, tuple, dictionary, set, bool]]></title>
            <link>https://velog.io/@j-jae0/Python-%EC%9E%90%EB%A3%8C%ED%98%95-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@j-jae0/Python-%EC%9E%90%EB%A3%8C%ED%98%95-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 18 Oct 2022 14:48:13 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>멋쟁이사자 AI 스쿨 1일차(220919) 학습 내용 정리하기</li>
<li>파이썬의 기초인 자료형 (Bool, 숫자, 문자열, 리스트, 딕셔너리, 튜플, 집합) 이해하기</li>
</ul>
<hr>
<h1 id="자료형이란-">자료형이란 ?</h1>
<blockquote>
<p><strong>자료형</strong>은 데이터의 &#39;종류&#39;를 말하며 영어로는 Type이라고 한다. 정수라면 integer 타입, 실수라면 float 타입, 이름과 같이 문자 형태라면 string 타입 등 데이터 종류에는 여러가지 타입이 있다.</p>
</blockquote>
<h2 id="숫자형-number">숫자형 (Number)</h2>
<blockquote>
<p>파이썬에서 수는 <strong>정수 (int)</strong> 와 <strong>실수 (float)</strong> 로 구분되며 천 단위 구분기호 없이 오로지 숫자로만 구성된 데이터 이다.</p>
</blockquote>
<ul>
<li>정수 (interger) : 소수점 이하의 값을 갖지 않는 수 ( 표현 방식 : 부호 없는 정수 / 부호 있는 정수 )</li>
<li>실수 (floating-point) : 소수점이 포함된 수 ( 표현 방식: 부호 없는 실수 / 부호 있는 실수 )</li>
</ul>
<h3 id="📍-숫자-연산">📍 숫자 연산</h3>
<p>파이썬의 숫자는 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산과 제곱, 나누기 연산 후 몫 또는 나머지를 구할 수 있음
특히, 거듭 제곱(**)은 정수형 상수의 표현 범위는 제한이 없으며, CPU 레지스터로 표현할 수 있는 크기보다 큰 정수를 다룰 때는 연산 속도가 느려짐</p>
<pre><code>- 사칙연산 : 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)
- 그 외 연산자 : 제곱(**), 나눗셈 후 몫(//), 나눗셈 후 나머지(%)</code></pre><p>나눗셈을 할 때, 정수 / 정수 를 해도 결과는 항상 실수 (float) 로 반환 됨 
덧셈, 뺄셈, 곱셈, 제곱에서 실수를 하나 이상 사용하면 실수형으로 반환 됨</p>
<h2 id="문자열-자료형-string">문자열 자료형 (String)</h2>
<blockquote>
<p><strong>문자열 (string)</strong> 이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 문자열이다.</p>
</blockquote>
<pre><code>&quot;내 이름은 김삼순&quot;
&quot;The Zen of Python&quot;
&#39;12345&#39;</code></pre><ul>
<li>위 문자열을 보면 모두 따옴표 (<code>&quot;&quot;</code> 또는 <code>&#39;&#39;</code>) 로 둘러싸여 있다.</li>
<li>파이썬에서 문자열은 여러 줄의 문장을 처리할 때 백슬래시 문자와 소문자 n을 조합한 \n 이스케이프 코드를 사용한다.</li>
</ul>
<h3 id="📍-문자열-연산">📍 문자열 연산</h3>
<p>파이썬에서는 문자열을 더하거나 곱할 수 있다. (파이썬만의 장점!!!)
<strong>문자열 더해서 연결하기(Concatenation)</strong> : 문자열 끼리 덧셈 기호(+)를 사용하여 문자열을 연결할 수 있음
<strong>문자열 곱해서 반복하기</strong> : 문자열과 숫자를 곱셈 기호(<em>)를 사용하여 문자열을 반복할 수 있음
*</em>문자열 길이 구하기** : len() 함수를 사용해서 문자열의 총 길이를 구할 수 있음</p>
<h3 id="📍-문자열-인덱싱과-슬라이싱">📍 문자열 인덱싱과 슬라이싱</h3>
<p>파이썬에서 문자열을 인덱싱, 슬라이싱으로 원하는 부분을 잘라내어 가져올 수 있음
<strong>인덱싱(Indexing)</strong> : 문자열의 인덱스 번호를 사용하여 문자열 안의 특정한 값을 뽑아냄
<strong>슬라이싱(Slicing)</strong> : 문자열의 인덱스 번호를 사용하여 문자열 안의 특정한 부분을 뽑아냄</p>
<h3 id="📍-문자열-포매팅formatting">📍 문자열 포매팅(Formatting)</h3>
<p>문자열 포메팅이란 문자열 안에 어떤 값을 삽입하는 방법이다.</p>
<h4 id="format-함수">format 함수</h4>
<pre><code class="language-python"># 1개의 값 넣기
&gt;&gt;&gt; &quot;오늘 강수확률은 {}% 입니다.&quot;.format(0)
&#39;오늘 강수확률은 0% 입니다.&#39;

# 2개 이상의 값 넣기
# .format(21, 11)로 넣어도 됨
&gt;&gt;&gt; &quot;오늘 서울의 최고온도는 {highest}°C 이고, 최저온도는 {lowest}°C입니다.&quot;.format(highest=21, lowest=11)
&#39;오늘 서울의 최고온도는 21°C 이고, 최저온도는 11°C입니다.&#39;</code></pre>
<h4 id="f-string">f-string</h4>
<pre><code class="language-python">&gt;&gt;&gt; f&quot;오늘 서울지역의 최고온도는 {21}도, 최저온도는 {11}도 입니다.&quot;
&#39;오늘 서울지역의 최고온도는 21도, 최저온도는 11도 입니다.&#39;</code></pre>
<h3 id="📍-문자열-함수">📍 문자열 함수</h3>
<ul>
<li>문자 개수 세기 : .count()</li>
<li>문자 위치 알려주기 : .find() / .index()</li>
<li>문자열 삽입 : .join()</li>
<li>소문자로 변환 : .lower()</li>
<li>대문자로 변환 : .upper()</li>
<li>양쪽 공백 제거 : .strip()</li>
<li>왼쪽 공백 제거 : .lstrip()</li>
<li>오른쪽 공백 제거 : .rstrip()</li>
<li>문자열 바꾸기 : .replace(바뀌게 될 문자열, 바꿀 문자열)</li>
<li>문자열 나누기 : .split()</li>
<li>사용가능한 함수 목록 보기 : dir(변수이름)</li>
</ul>
<h2 id="리스트-자료형-list">리스트 자료형 (List)</h2>
<blockquote>
<p><strong>리스트</strong> 는 대괄호로 묶여진 자료형을 말하며 아래 예시와 같은 형태임
대괄호는 리스트, 인덱싱, 슬라이싱에 사용됨</p>
</blockquote>
<pre><code class="language-python">menu = [&quot;짜장면&quot;, &quot;짬뽕&quot;, &quot;볶음밥&quot;, &quot;탕수육&quot;, &quot;깐풍기&quot;, &quot;유산슬&quot;]
menu_price = [4000, 5000, 5500, 18000, 20000, 30000]
menu_sourses = [&quot;짜장면&quot;, [&quot;춘장&quot;, &quot;면&quot;, &quot;채소&quot;, &quot;고기&quot;], &quot;볶음밥&quot;, [&quot;쌀&quot;, &quot;새우&quot;, &quot;채소&quot;, &quot;소스&quot;]]</code></pre>
<h3 id="📍-리스트-인덱싱과-슬라이싱">📍 리스트 인덱싱과 슬라이싱</h3>
<pre><code class="language-python"># 인덱싱
menu[0]  →  &#39;짜장면&#39;
menu_price[-1]  →  30000

# 슬라이싱
menu[:5]  →  [&#39;짜장면&#39;, &#39;짬뽕&#39;, &#39;볶음밥&#39;, &#39;탕수육&#39;, &#39;깐풍기&#39;]
menu[::2]  →  [&#39;짜장면&#39;, &#39;볶음밥&#39;, &#39;깐풍기&#39;]
menu_price[::-1]  →  [30000, 20000, 18000, 5500, 5000, 4000]

# 리스트 요소 불러오기
menu_sourses[1][0] →  &#39;춘장&#39;
menu_sourses[3][1] →  &#39;새우&#39;</code></pre>
<h3 id="📍-리스트-수정과-삭제">📍 리스트 수정과 삭제</h3>
<pre><code class="language-python"># 리스트 값 수정하기
&gt;&gt;&gt; menu[0] = &quot;짜장&quot;
&gt;&gt;&gt; menu
[&quot;짜장&quot;, &quot;짬뽕&quot;, &quot;볶음밥&quot;, &quot;탕수육&quot;, &quot;깐풍기&quot;, &quot;유산슬&quot;]

# 리스트 값 삭제하기 (del 함수)
&gt;&gt;&gt; del menu[3:]
&gt;&gt;&gt; menu
[&#39;짜장&#39;, &#39;짬뽕&#39;, &#39;볶음밥&#39;]

# 리스트 값 삭제하기 (remove 함수)
&gt;&gt;&gt; menu.remove(&quot;짬뽕&quot;)
&gt;&gt;&gt; menu
[&#39;짜장&#39;, &#39;볶음밥&#39;]</code></pre>
<h3 id="📍-리스트-함수">📍 리스트 함수</h3>
<p><strong>문자열과 마찬가지로</strong> 리스트 변수 이름 뒤에 <code>.</code> 를 붙여 여러 가지 함수를 사용할 수 있다.</p>
<ul>
<li>리스트에 요소 추가 (append) : 리스트 맨 뒤에 값 추가 됨</li>
<li>리스트 정렬 (sort)</li>
<li>리스트 뒤집기 (reverse)</li>
<li>위치 반환 (index) : 리스트 내의 요소 값을 넣으면 그 요소의 인덱스 값을 반환</li>
<li>리스트에 요소 삽입 (insert(a, b))  →  a : 위치, b : 삽입할 요소</li>
<li>리스트 요소 제거 (remove) : 리스트에서 첫 번째로 나오는 요소 삭제</li>
<li>리스트 요소 끄집어내기 (pop) : 리스트의 맨 마지막 요소를 돌려주고, 그 요소 삭제</li>
<li>리스트에 포함된 요소 개수 세기 (count) : 리스트 안에 포함된 개수 반환</li>
<li>리스트 확장 (extend) : 리스트에 리스트를 더함  →  리스트 += [] 와 동일한 기능</li>
</ul>
<h2 id="튜플-자료형-tuple">튜플 자료형 (Tuple)</h2>
<blockquote>
<p><strong>튜플(tuple)</strong> 은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 차이점은 아래와 같다.</p>
</blockquote>
<ul>
<li>리스트는 []로 둘러싸여있지만 튜플은 ()으로 둘러싼다.</li>
<li>리스트는 그 값의 생성, 삭제, 수정이 가능하지만, 튜플은 그 값을 바꿀 수 없다.</li>
<li>튜플은 콤마(,)가 있다면 괄호를 생략해도 tuple로 저장이 된다.</li>
<li><u>튜플의 요솟값은 한번 정하면, 내부의 값을 바꿀 수 없다.</u></li>
</ul>
<pre><code class="language-python">characters = (&#39;고길동&#39;, &#39;둘리&#39;, &#39;박희동&#39;)
new_characters = (&#39;도우너&#39;, &#39;또치&#39;, &#39;마이콜&#39;)

# 인덱싱하기
characters[0]  →  &#39;홍길동&#39;

# 슬라이싱하기
characters[1:]  →  (&#39;둘리&#39;, &#39;박희동&#39;)

# 튜플 더하기
characters + new_characters  →  (&#39;고길동&#39;, &#39;둘리&#39;, &#39;박희동&#39;, &#39;도우너&#39;, &#39;또치&#39;, &#39;마이콜&#39;)

# 튜플 곱하기
new_characters * 2  →  (&#39;도우너&#39;, &#39;또치&#39;, &#39;마이콜&#39;, &#39;도우너&#39;, &#39;또치&#39;, &#39;마이콜&#39;)

# 튜플 길이 구하기
len(characters)  →  3</code></pre>
<h2 id="딕셔너리-자료형-dictionary">딕셔너리 자료형 (Dictionary)</h2>
<blockquote>
<p><strong>딕셔너리</strong> 란? 값에게 이름을 붙여서 매칭시켜주는 것이다.</p>
</blockquote>
<ul>
<li>앞에서 배운 리스트, 튜플의 각 요소들은 어떤 값인지 알 수 없다.</li>
<li>하지만, 딕셔너리의 key : value 를 이용하면 값이 어떤 의미를 가지는지 알 수 있다.</li>
<li>형식 : {키 : 값} 으로, 아래와 같이 사용할 수 있다.</li>
<li>딕셔너리에서 key는 고유한 값으로, 중복된 값을 포함하면 안된다. (중복시, 맨 뒤에 적힌 key:value 값만 살아남음)</li>
</ul>
<h3 id="📍-key-리스트-만들기-keys">📍 Key 리스트 만들기 (keys)</h3>
<pre><code class="language-python">&gt;&gt;&gt; menu.keys()
dict_keys([&#39;짜장면&#39;, &#39;짬뽕&#39;, &#39;유산슬&#39;])​
&gt;&gt;&gt; list(menu.keys())
[&#39;짜장면&#39;, &#39;짬뽕&#39;, &#39;유산슬&#39;]</code></pre>
<h3 id="📍-value-리스트-만들기-values">📍 Value 리스트 만들기 (values)</h3>
<pre><code class="language-python">&gt;&gt;&gt; menu.values()
dict_values([4000, 5000, 15000])
&gt;&gt;&gt; list(menu.values())
[4000, 5000, 15000]</code></pre>
<h3 id="📍-key-value-쌍-얻기-items">📍 Key, Value 쌍 얻기 (items)</h3>
<pre><code class="language-python">&gt;&gt;&gt; menu.items()
dict_items([(&#39;짜장면&#39;, 4000), (&#39;짬뽕&#39;, 5000), (&#39;탕수육&#39;, 15000)])
&gt;&gt;&gt; list(menu.items())
[(&#39;짜장면&#39;, 4000), (&#39;짬뽕&#39;, 5000), (&#39;탕수육&#39;, 15000)]</code></pre>
<h3 id="📍-key-value-쌍-다-지우기-clear">📍 Key: Value 쌍 다 지우기 (clear)</h3>
<pre><code class="language-python">&gt;&gt;&gt; menu.clear()
&gt;&gt;&gt; menu
{}</code></pre>
<h3 id="📍-key로-value-얻기-get">📍 Key로 Value 얻기 (get)</h3>
<pre><code class="language-python">&gt;&gt;&gt; dict_num = {&quot;고길동&quot; : 1, &quot;둘리&quot; : 2, &quot;희동&quot; : 3, &quot;도우너&quot; : 4}
&gt;&gt;&gt; dict_num.get(&quot;고길동&quot;)
1</code></pre>
<h3 id="📍-key-유무-확인-in">📍 Key 유무 확인 (in)</h3>
<pre><code class="language-python">&gt;&gt;&gt; &quot;또치&quot; in dict_num
False
&gt;&gt;&gt; &quot;도우너&quot; in dict_num
True</code></pre>
<h1 id="집합-자료형-set">집합 자료형 (set)</h1>
<blockquote>
<p>집합 자료형은 순서가 없고, 중복을 허용하지 않는다는 특징이 있다.</p>
</blockquote>
<ul>
<li>리스트와 튜플은 순서가 있기 때문에 입력해준 값 대로 정렬되는데, 집합은 뒤죽박죽으로 정렬된다.</li>
<li>리스트와 튜플은 중복된 값을 포함할 수 있지만, 집합은 중복된 값은 스스로 필터링한다.</li>
<li><strong>알아둘 것</strong> : 순서가 없는 자료형이기 때문에 인덱싱을 사용하려면, 리스트나 튜플 형태로 변환 후 사용해야 함<pre><code class="language-python">&gt;&gt;&gt; order_list = [&quot;짜장면&quot;, &quot;탕수육&quot;, &quot;짬뽕&quot;, &quot;짜장면&quot;, &quot;볶음밥&quot;]
&gt;&gt;&gt; order_set = set(order_list)
&gt;&gt;&gt; order_set
{&#39;볶음밥&#39;, &#39;짜장면&#39;, &#39;짬뽕&#39;, &#39;탕수육&#39;}</code></pre>
</li>
</ul>
<h2 id="교집합-합집합-차집합">교집합, 합집합, 차집합</h2>
<ul>
<li>교집합 (&amp;) : 두 집합의 교집합 값 반환</li>
<li>합집합 (|) : 두 집합의 전체 값 반환 (중복된 값은 하나씩 반환)</li>
<li>차집합 (-) : 두 집합의 차집합 값 반환</li>
</ul>
<h2 id="집합-함수">집합 함수</h2>
<p><strong>문자열과 마찬가지</strong>로 집합 변수 이름 뒤에 <code>.</code> 를 붙여 여러 가지 함수를 사용할 수 있음</p>
<ul>
<li>값 1개 추가 (add) : 한개의 값 추가 (순서 무작위로 들어감)</li>
<li>값 여러 개 추가 (update) : 리스트 또는 튜플 형태로 여러 개의 요소 추가 (순서 무작위로 들어감)</li>
<li>특정 값 제거 (remove) : set 자료형에 들어가있는 특정 값 제거</li>
</ul>
<h1 id="불-자료형-bool">불 자료형 (Bool)</h1>
<blockquote>
<p><strong>불(bool)</strong> 자료형이란 <strong>참(True)</strong> 과 <strong>거짓(False)</strong> 를 나타내는 자료형으로, True와 False 값만 가질 수 있다.</p>
</blockquote>
<ul>
<li>True : 참 ( True == 1 )</li>
<li>False : 거짓 ( False == 0 )</li>
<li>조건문, 반복문에 사용할 때 주의하기</li>
</ul>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<p><a href="https://wikidocs.net/11">점프 투 파이썬 : 02장 파이썬 프로그래밍의 기초, 자료형</a>
<a href="https://docs.python.org/ko/3/tutorial/introduction.html#">Python 문서 : 3. 파이썬의 간략한 소개</a>
<a href="https://twpower.github.io/119-python-list-slicing-examples">[Python] 파이썬 슬라이싱(slicing) 기본과 예제</a>
<a href="https://jfine-python-classes.readthedocs.io/en/latest/type-name-bases-dict.html">Objects and classes in Python : Docs &gt;&gt; type(name, bases, dic)</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TECHIT] 구글 번역기 만들기 - Googletrans ]]></title>
            <link>https://velog.io/@j-jae0/LikeLion-TIL-220916-3</link>
            <guid>https://velog.io/@j-jae0/LikeLion-TIL-220916-3</guid>
            <pubDate>Tue, 18 Oct 2022 13:51:19 GMT</pubDate>
            <description><![CDATA[<h1 id="목표설정">목표설정</h1>
<ul>
<li>Google에서 제공하는 Open API, <code>googletrans</code> 사용하여 번역 기능을 하는 함수 만들기</li>
</ul>
<hr>
<h1 id="googletrans">Googletrans</h1>
<blockquote>
<p><strong>Googletrans</strong> is a <strong>free</strong> and <strong>unlimited python library</strong> that implemented Google Translate API. </p>
</blockquote>
<ul>
<li>구글에서 제공하는 오픈소스 (무료 API)</li>
<li>하루에 사용할 수 있는 횟수가 제한되어 있음<pre><code class="language-markdown">라이브러리 설치 방법
pip install googletrans</code></pre>
<pre><code class="language-python"># 라이브러리 로드
from googletrans import Translator
# 보통 메서드를 translate 변수에 담아서 사용
translate = Translator()</code></pre>
</li>
<li>메서드를 변수에 담아서 사용하는 이유는 편의성 때문이다.</li>
<li>아래 두 코드를 보면 변수에 할당하여 사용하는 이유를 알 수 있다.<pre><code class="language-python">sentence = &quot;안녕하세요.&quot;
lang = &#39;en&#39;
# 언어 감지 - 방법 1 (변수 할당 X)
Translator().detect(sentence)
# 언어 번역 - 방법 2 (변수 할당 O)
translator.translate(sentence, dest=lang)</code></pre>
</li>
</ul>
<hr>
<h1 id="👩🏻💻구글-번역기">👩🏻‍💻구글 번역기</h1>
<h2 id="코드-입력">코드 입력</h2>
<pre><code class="language-python">from googletrans import Translator

def google_translate():
    translator = Translator()

    sentence = input(&quot;번역하고자 하는 문장을 입력해주세요 : &quot;)
    lang = input(&quot;번역할 언어를 입력해주세요 : &quot;)

    # 언어 번역 (sentence 를 lang 언어로 번역)
    result = translator.translate(sentence, dest=lang)
    # 언어 감지 (sentence 의 lang 언어를 감지)
    detected = translator.detect(sentence)

    # 문장의 언어와 lang에 입력한 언어가 같다면 오류 문구 출력
    if detected.lang == lang:
        print(&quot;변경하실 언어를 잘 못 입력하셨습니다.&quot;)
    else:
        print(&quot;============출 력 결 과============&quot;)
        print(detected.lang, &quot;:&quot;, sentence)
        print(result.dest, &quot;:&quot;, result.text)

google_translate()</code></pre>
<h2 id="코드-출력">코드 출력</h2>
<pre><code>번역하고자 하는 문장을 입력해주세요 : 안녕하세요.
번역할 언어를 입력해주세요 : fr
============출 력 결 과============
ko : 안녕하세요.
fr : bonjour.</code></pre><hr>
<h1 id="참고문헌">참고문헌</h1>
<p><a href="https://pypi.org/project/googletrans/">GoogleTrans 라이브러리 공식문서</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TECHIT] 실시간 날씨 정보 받기 - API, Requests, Json]]></title>
            <link>https://velog.io/@j-jae0/LikeLion-TIL-220916-2</link>
            <guid>https://velog.io/@j-jae0/LikeLion-TIL-220916-2</guid>
            <pubDate>Tue, 18 Oct 2022 13:14:56 GMT</pubDate>
            <description><![CDATA[<h1 id="목표설정">목표설정</h1>
<ul>
<li><strong>API</strong> 이해하기</li>
<li>Requests, json 라이브러리를 이용해 실시간 날씨 정보 받아오기</li>
</ul>
<hr>
<h1 id="server">Server</h1>
<ul>
<li>웹 페이지를 Response의 Body에 담아서 보내주는 서버 (Web Server)</li>
<li>요청을 처리하고 처리한 결과를 Response의 Body에 담아서 보내주는 서버 (API Server ~ Json 형식으로 Resoponse의 Body에 담아서 보냄)</li>
<li>컴퓨터가 Web Server, API Server 역할을 모두 할 수 있으나, 실무에서는 확실한 역할분담, 트래픽 분산 등을 위해 서버를 따로 둔다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/j-jae0/post/bd4cf094-7f39-45ef-94b9-ff7c7757c7af/image.png" alt=""></p>
<h1 id="api">API</h1>
<blockquote>
<p><strong>API (Application Programming Interface)</strong> 는 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 매커니즘
요청을 보내는 애플리케이션을 <strong>클라이언트</strong>, 응답을 보내는 애플리케이션을 <strong>서버</strong>라고 함<br>
예를 들어, 기상청의 날씨 데이터베이스는 서버이고 모바일앱은 클라이언트 이다.</p>
</blockquote>
<h1 id="requests">Requests</h1>
<blockquote>
<p>Python 용 HTTP 라이브러리, requests 를 사용하면 HTTP 요청을 쉽게 보낼 수 있다.</p>
</blockquote>
<ul>
<li>웹사이트를 읽어오기 위해 사용 함</li>
<li>HTTP 요청 method : 대표적으로 <code>GET</code> / <code>POST</code></li>
</ul>
<h2 id="http-요청-메서드">HTTP 요청 메서드</h2>
<table>
<thead>
<tr>
<th align="left">method</th>
<th align="left">URL</th>
</tr>
</thead>
<tbody><tr>
<td align="left">GET</td>
<td align="left">Query String</td>
</tr>
<tr>
<td align="left">POST</td>
<td align="left">Form Data</td>
</tr>
</tbody></table>
<h2 id="method-확인하는-방법">Method 확인하는 방법</h2>
<p>HTTP 요청할 사이트에서 오른쪽 마우스 클릭 &gt; 검사(Inspection) &gt; Network &gt; Request Headers &gt; method 확인</p>
<h3 id="📍-get-방식">📍 GET 방식</h3>
<p><img src="https://velog.velcdn.com/images/j-jae0/post/544ed993-ffa1-4545-b8de-d71ffb62eb7b/image.png" alt=""></p>
<ul>
<li><strong>네이버 사전</strong>에서 확인해 보면, Request Method : <code>GET</code> 이다.</li>
<li>Status Code : 200 확인하기 <br>

</li>
</ul>
<h3 id="📍-post-방식">📍 POST 방식</h3>
<p><img src="https://velog.velcdn.com/images/j-jae0/post/34f884f1-7311-4f48-91f6-5a58e4bc04c4/image.png" alt=""></p>
<ul>
<li><strong>교보문고 베스트셀러</strong>를 보면, Request Method : <code>POST</code> 이다.</li>
<li>요청할 때, HTTP 메시지의 Body에 <strong>Form data</strong> 를 입력해야 한다.</li>
<li><strong>Form data</strong> 는 아래와 같이 Payload &gt; Query String Parameters 에서 볼 수 있다.<img src="https://velog.velcdn.com/images/j-jae0/post/bcb3a198-7cf3-4b3b-a01e-0570d315bc8e/image.png" width="500" height="350">


</li>
</ul>
<h1 id="json">Json</h1>
<blockquote>
<p>응용 프로그램 프로그래밍 인터페이스 <strong>json</strong>은 <strong>javascript object notation</strong>의 줄임말로, 데이터를 주고 받을 때 사용하는 포맷이다.<br></p>
</blockquote>
<ul>
<li><code>json.loads(str)</code> → <code>json type</code>으로 변경하여 데이터 통 안에 넣어준다.</li>
<li>아래 사진과 같이 <code>dictionary</code> 형태로 데이터를 받아온다.<img src="https://velog.velcdn.com/images/j-jae0/post/08079c9b-a8c2-48a0-af02-c944b9477ca2/image.png" width="500">


</li>
</ul>
<hr>
<h1 id="👩🏻💻실시간-날씨-정보">👩🏻‍💻실시간 날씨 정보</h1>
<h2 id="코드-입력">코드 입력</h2>
<pre><code class="language-python">import requests
import json

city = &quot;Seoul&quot;
apikey = ############################
lang = &quot;kr&quot;

# 요청하기 위한 서버 주소, units=metric (섭씨온도로 변경)
api = f&quot;https://api.openweathermap.org/data/2.5/weather?q={city}&amp;appid={apikey}&amp;lang={lang}&amp;units=metric&quot; # 요청하기 위한 서버 주소

# 받아온 데이터는 문자열 형태
result = requests.get(api)
type(result.text) 

# Json 형태로 받아오기
data = json.loads(result.text)
type(data)

print(data[&quot;name&quot;],&quot;의 날씨입니다.&quot;)
print(&quot;날씨는 &quot;, data[&quot;weather&quot;][0][&quot;description&quot;],&quot;입니다.&quot;)
print(&quot;현재 온도는 &quot;, data[&quot;main&quot;][&quot;temp&quot;],&quot;입니다.&quot;)
print(&quot;하지만 체감 온도는 &quot;, data[&quot;main&quot;][&quot;feels_like&quot;],&quot;입니다.&quot;)
print(&quot;최저 기온은 &quot;,data[&quot;main&quot;][&quot;temp_min&quot;],&quot;입니다.&quot;) 
print(&quot;최고 기온은 &quot;,data[&quot;main&quot;][&quot;temp_max&quot;],&quot;입니다.&quot;) 
print(&quot;습도는 &quot;,data[&quot;main&quot;][&quot;humidity&quot;],&quot;입니다.&quot;)
print(&quot;기압은 &quot;,data[&quot;main&quot;][&quot;pressure&quot;],&quot;입니다.&quot;)
print(&quot;풍향은 &quot;,data[&quot;wind&quot;][&quot;deg&quot;],&quot;입니다.&quot;)
print(&quot;풍속은 &quot;,data[&quot;wind&quot;][&quot;speed&quot;],&quot;입니다.&quot;)</code></pre>
<h2 id="코드-출력">코드 출력</h2>
<pre><code class="language-markdown">Seoul 의 날씨입니다.
날씨는  맑음 입니다.
현재 온도는  7.08 입니다.
하지만 체감 온도는  5.74 °C 입니다.
최저 기온은  5.66 °C 입니다.
최고 기온은  9.69 °C 입니다.
습도는  61 % 입니다.
기압은  1023 hPa 입니다.
풍향은  320 N 입니다.
풍속은  2.06 m/s입니다.</code></pre>
<hr>
<h1 id="참고문헌">참고문헌</h1>
<p><a href="https://aws.amazon.com/ko/what-is/api/">aws 공식 문서 : API란 무엇입니까?</a>
<a href="https://requests.readthedocs.io/en/latest/">Requests 공식 문서</a>
<a href="https://openweathermap.org/">OpenWeather : 날씨 API 요청 사이트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TECHIT] 실시간 IT 뉴스 정보 가져오기 - 함수, 파일, datetime, BeautifulSoup, Requests]]></title>
            <link>https://velog.io/@j-jae0/LikeLion-TIL-220916-1</link>
            <guid>https://velog.io/@j-jae0/LikeLion-TIL-220916-1</guid>
            <pubDate>Tue, 18 Oct 2022 05:48:52 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>프로그램의 입출력과 관련된 <strong>함수</strong> 이해하기</li>
<li>프로그램의 결괏값을 <strong>파일</strong>에 <code>write</code>, <code>read</code>, <code>add</code> 해 보기</li>
<li>datetime, BeautifulSoup, requests 라이브러리 이용하여 실시간 IT 뉴스를 확인하기</li>
</ul>
<hr>
<h1 id="함수">함수</h1>
<blockquote>
<p>똑같은 내용을 반복해서 작성할 때, 하나의 함수로 정의해두면 편리하게 사용할 수 있음<br>
함수에는 <strong>매개변수</strong>와 <strong>전달인자(인수)</strong>가 있다.</p>
</blockquote>
<ul>
<li>keywords 인자 : ** 두 개 (딕셔너리 형태로 전달)</li>
<li>arguments 인자 : * 한 개 (리스트나 튜플 형태로 전달)
```markdown</li>
<li><ul>
<li>함수에서 인자 등 정보 찾을 때
? : Docstring
?? : Source
예) range? add? 함수??<pre><code></code></pre></li>
</ul>
</li>
</ul>
<h1 id="파일">파일</h1>
<blockquote>
<p>프로그램이 만든 결과물은 <strong>파일을 생성하여</strong> 넣고, 넣은 내용을 읽고, 새로운 내용을 추가할 수 있다.</p>
</blockquote>
<pre><code class="language-python"># 첫 번째 방법
f = open(&quot;파일명 이름&quot;, &quot;파일 열기 모드&quot;)
f.close() # 생략해도 되지만, 열려있는 파일 객체를 닫아주는 역할을 함</code></pre>
<pre><code class="language-python"># 두 번째 방법 -- with문을 사용하면 close가 자동으로 불러와짐
with open(&quot;파일명 이름&quot;, &quot;파일 열기 모드&quot;) as 파일명_별명:
    파일을 열어 실행시킬 문장 작성</code></pre>
<table>
<thead>
<tr>
<th align="left">파일열기모드</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">r</td>
<td align="left">읽기모드 - 파일을 읽기만 할 때 사용</td>
</tr>
<tr>
<td align="left">w</td>
<td align="left">쓰기모드 - 파일에 내용을 쓸 때 사용</td>
</tr>
<tr>
<td align="left">a</td>
<td align="left">추가모드 - 파일의 마지막에 새로운 내용을 추가시킬 때 사용</td>
</tr>
</tbody></table>
<hr>
<h1 id="👩🏻💻실시간-it-뉴스-확인하기">👩🏻‍💻실시간 IT 뉴스 확인하기</h1>
<h2 id="코드-입력">코드 입력</h2>
<pre><code class="language-python">from datetime import datetime
from bs4 import BeautifulSoup
import requests

# 네이버 it 일반 뉴스를 가져오는 함수
def scraping_it_news():
    url = &quot;https://news.naver.com/main/list.naver?mode=LS2D&amp;mid=shm&amp;sid2=230&amp;sid1=105&quot;
    response = requests.get(url, headers={&quot;user-agent&quot;: &quot;Mozilla/5.0&quot;})
    soup = BeautifulSoup(response.text, &#39;html.parser&#39;)

    # html 을 텍스트로 가져오고, 파일에 넣어주기
    file = open(&quot;it_news.html&quot;,&quot;w&quot;)
    file.write(response.text)   
    file.close()

    # 뉴스 헤드라인만 가져오기
    results = soup.select(&quot;dl &gt; dt &gt; a &gt; img&quot;)
    headlines = []
    for result in results:
        headlines.append(result[&quot;alt&quot;])

    # 오늘의 날짜 정보 가져오기
    print(datetime.today().strftime(&quot;%Y년 %m월 %d일의 네이버 IT 일반 뉴스 정보입니다.\n&quot;))

    # 순서에 맞게 뉴스 출력하기
    rank = 1
    for headline in headlines:
        print(f&quot;{rank}: {headline}\n&quot;)
        rank += 1

# 함수 호출하기
scraping_it_news()</code></pre>
<h2 id="코드-출력">코드 출력</h2>
<pre><code class="language-markdown">2022년 10월 18일의 네이버 IT 일반 뉴스 정보입니다.

1: 카카오 &quot;다음 메일 오늘 복구 완료 예상&quot;

2: 원익그룹, 배터리 장비 통합법인 &#39;원익피앤이&#39; 11월 출범

3: 원자력硏 연구소기업 ‘서울프로폴리스’…연매출 500억 도전장

4: 인스웨이브 &quot;PC·모바일·키오스크 연결 `유니버설 앱 플랫폼` 완성하겠다&quot;

5: 인공지능 석학 한 자리에 모인다…삼성 AI 포럼 개최

6: &quot;40억 주인공은 누구?&quot;…스타트업 50여곳 경쟁 벌인다

7: SK텔레콤, ZEM 업그레이드…&#39;습관 리포트&#39; 추가

8: 쿠카게임즈, ‘삼국지 전략판’ 게임 예능 ‘G식의 밤’ 시즌 3서 선

9: 카카오-SK C&amp;C, &#39;전력차단&#39; 시점 놓고 대립…1만대 여전히 장애

10: &#39;먹통 사태&#39; 그날, 네이버 라인·티맵은 웃었다…카카오톡 &#39;침울&#39;

11: 라이엇 게임즈, 호주 워게이밍 시드니 스튜디오 인수

12: &#39;카카오 사태&#39; 나흘째, 완전 복구 언제쯤?…&quot;주요 서비스 14개 중 11개 복구&quot;

13: 알서포트, 라이브 스트리밍 서비스 &#39;모비즌 스튜디오&#39; 출시

14: 네이버 &quot;판교 화재 관련 장애 모두 정상 복구&quot;…일부 블로그 문제만 남아

15: &#39;러쉬코리아&#39; 20주년 쇼케이스…5800명 감탄시킨 IT와 자연주의 철학

16: LG전자, 하프코 2022서 멀티브이 아이 등 공조솔루션 선보여

17: 카카오 데이터센터 규제 한 목소리 낸 언론, 과거엔 달랐다

18: CJ ENM, 일본서 876만명에게 2030부산세계박람회 알렸다

19: [그래픽] 카카오 먹통 사태 중 대체 앱 사용시간 증가율

20: &#39;CES2023&#39; 규모 두 배 확장 &#39;역대 최대&#39;</code></pre>
<hr>
<p><a href="https://wikidocs.net/23">점프 투 파이썬 : 04장 프로그램의 입력과 출력은 어떻게 해야 할까?</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TECHIT] 메뉴 자판기 만들기 - 조건문, 반복문, 연산자, random, time]]></title>
            <link>https://velog.io/@j-jae0/LikeLion-TIL-220914</link>
            <guid>https://velog.io/@j-jae0/LikeLion-TIL-220914</guid>
            <pubDate>Tue, 18 Oct 2022 02:19:01 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-설정">목표 설정</h1>
<ul>
<li>파이썬 프로그램의 구조를 만드는 <strong>제어문 (조건문, 반복문)</strong> 이해하기</li>
<li><code>random</code>, <code>time</code> 라이브러리 이용하여 <strong>메뉴 자판기</strong> 실습하기</li>
</ul>
<hr>
<h1 id="조건문">조건문</h1>
<blockquote>
<p><strong>if문</strong>은 조건을 판단하여 해당 조건에 맞는 상황을 수행하는데 쓰는 것으로, 기본 구조는 if와 else로 구성 됨</p>
</blockquote>
<ul>
<li>들여쓰기 : 4개의 공백 or Tab</li>
<li><code>if</code> 조건문 뒤에 콜론(:) 사용하기</li>
<li><code>elif</code> 여러 번 사용할 수 있으며 조건문을 넣어야 한다.</li>
<li><code>else</code> 한번 만 사용할 수 있으며 조건문을 넣지 않는다.</li>
<li><em>조건문의 기본 구조*</em><pre><code class="language-python">if (조건식):
   조건식에 해당 시, 실행시킬 문장
elif (조건식):
   조건식에 해당 시, 실행시킬 문장
else:
   위 조건식들에 해당되지 않는 경우, 실행시킬 문장</code></pre>
</li>
</ul>
<h1 id="반복문">반복문</h1>
<blockquote>
<p><strong>반복문</strong>은 반복해서 문장을 수행해야 할 경우에 사용 함</p>
</blockquote>
<ul>
<li><code>for문</code> : 반복할 횟수를 알 때 사용</li>
<li><code>while문</code> : 반복할 횟수를 모를 때 사용 ( 조건문이 참인 동안 순회 )</li>
<li><code>range(start, end, step)</code>, <code>range(len())</code> : 반복 횟수 제한 가능</li>
<li><code>enumerate()</code> : index와 요소를 함께 사용해야 되는 경우<br></li>
<li><em>반복문의 기본 구조*</em><pre><code class="language-python"># for 구문
for (조건식):
   반복시킬 문장
# while 구문
while (조건식):
   반복시킬 문장</code></pre>
</li>
</ul>
<h1 id="알아두면-좋은-연산자">알아두면 좋은 연산자</h1>
<table>
<thead>
<tr>
<th align="left">연산자</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">x or y</td>
<td align="left">x와 y 둘 중에 하나만 참이어도 참</td>
</tr>
<tr>
<td align="left">x and y</td>
<td align="left">x와 y 모두 참이어야 참</td>
</tr>
<tr>
<td align="left">not x</td>
<td align="left">x가 거짓이면 참</td>
</tr>
<tr>
<td align="left"><br></td>
<td align="left"></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="left">in과 not in</th>
<th align="left">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="left">x in (리스트/튜플/문자열)</td>
<td align="left">자료형 안에 x가 있으면 참</td>
</tr>
<tr>
<td align="left">x not in (리스트/튜플/문자열)</td>
<td align="left">자료형 안에 x가 없으면 참</td>
</tr>
</tbody></table>
<h2 id="📍-연산자를-사용한-조건문">📍 연산자를 사용한 조건문</h2>
<h3 id="코드-입력">코드 입력</h3>
<pre><code class="language-python"># 컴퓨터와 하는 가위바위보 게임
from random import choice

auto = choice([&#39;가위&#39;, &#39;바위&#39;, &#39;보&#39;])
user = input(&quot;가위, 바위, 보 : &quot;)

# 입력한 값이 &#39;가위, 바위, 보&#39;가 맞다면 게임 실행, 아니면 else 문 출력
if user in [&#39;가위&#39;, &#39;바위&#39;, &#39;보&#39;]:
    if user == auto:
        print(f&quot;user : {user}, computer : {auto} 으로 비겼습니다.&quot;)
    elif (user == &#39;가위&#39; and auto == &#39;보&#39;) or (user == &#39;바위&#39; and auto == &#39;가위&#39;) or (user == &#39;보&#39; and auto == &#39;바위&#39;):
        print(f&quot;user : {user}, computer : {auto} 으로 이겼습니다.&quot;)
    else:
        print(f&quot;user : {user}, computer : {auto} 으로 졌습니다.&quot;)
else:
    print(&quot;옳지않은 값을 입력하셨습니다.&quot;)</code></pre>
<h3 id="코드-출력">코드 출력</h3>
<pre><code>가위, 바위, 보 : 가위
user : 가위, computer : 가위 으로 비겼습니다.</code></pre><h2 id="📍-연산자를-사용한-반복문">📍 연산자를 사용한 반복문</h2>
<h3 id="코드-입력-1">코드 입력</h3>
<pre><code class="language-python"># 익명 질문 게시판 
question_list = []

# 질문 받기
while True:
    question = input(&quot;질문을 입력해주세요 : &quot;)
    if question == &quot;q&quot;:
        break
    else:
        question_list.append({&quot;질문&quot; : question, &quot;답변&quot; : &quot;&quot;})

# 질문에 대한 답변 받기
for i in question_list:
    print(i[&quot;질문&quot;])
    answer = input(&quot;답변을 입력해주세요 : &quot;)
    i[&quot;답변&quot;] = answer

print(&quot;=&quot;*80)
print(question_list)</code></pre>
<h3 id="코드-출력-1">코드 출력</h3>
<pre><code>질문을 입력해주세요 : 가장 좋아하는 음식
질문을 입력해주세요 : 가장 좋아하는 음료
질문을 입력해주세요 : q
가장 좋아하는 음식
답변을 입력해주세요 : 설렁탕
가장 좋아하는 음료
답변을 입력해주세요 : 아아
================================================================================
[{&#39;질문&#39;: &#39;가장 좋아하는 음식&#39;, &#39;답변&#39;: &#39;설렁탕&#39;}, {&#39;질문&#39;: &#39;가장 좋아하는 음료&#39;, &#39;답변&#39;: &#39;아아&#39;}]</code></pre><hr>
<h1 id="👩🏻💻저녁-메뉴-자판기">👩🏻‍💻저녁 메뉴 자판기</h1>
<h2 id="코드-입력-2">코드 입력</h2>
<pre><code class="language-python">import random, time

# 저녁 메뉴 리스트
dinner = [&quot;된장찌개&quot;, &quot;김치찌개&quot;, &quot;짬뽕&quot;, &quot;마라탕&quot;]

# 저녁 메뉴 추가
while True:
    print(dinner)
    item = input(&quot;음식을 추가해주세요 : &quot;)
    # 반복문 종료 시점
    if(item == &quot;stop&quot;):
        break
    else:
        dinner.append(item)
print(dinner)
print(&quot;=&quot;*70)

# 중복된 메뉴 제거
set_dinner = set(dinner)

# 저녁 메뉴 삭제
while True:
    print(f&quot;저녁 메뉴 리스트 : {set_dinner}&quot;)
    item = input(&quot;음식을 삭제해주세요 : &quot;)
    if (item == &quot;stop&quot;):
        break
    else:
        set_dinner = set_dinner - set([item])

print(set_dinner, &quot;중에서 선택합니다.&quot;)
print(&quot;=&quot;*70)

print(&quot;5&quot;)
time.sleep(1)
print(&quot;4&quot;)
time.sleep(1)
print(&quot;3&quot;)
time.sleep(1)
print(&quot;2&quot;)
time.sleep(1)
print(&quot;1&quot;)
time.sleep(1)
print(f&quot;오늘 저녁 메뉴는 &#39;{random.choice(list(set_dinner))}&#39; 입니다.&quot;)</code></pre>
<h2 id="코드-출력-2">코드 출력</h2>
<pre><code class="language-markdown">[&#39;된장찌개&#39;, &#39;김치찌개&#39;, &#39;짬뽕&#39;, &#39;마라탕&#39;]
음식을 추가해주세요 : 차돌박이짬뽕
[&#39;된장찌개&#39;, &#39;김치찌개&#39;, &#39;짬뽕&#39;, &#39;마라탕&#39;, &#39;차돌박이짬뽕&#39;]
음식을 추가해주세요 : 짬뽕
[&#39;된장찌개&#39;, &#39;김치찌개&#39;, &#39;짬뽕&#39;, &#39;마라탕&#39;, &#39;차돌박이짬뽕&#39;, &#39;짬뽕&#39;]
음식을 추가해주세요 : stop
[&#39;된장찌개&#39;, &#39;김치찌개&#39;, &#39;짬뽕&#39;, &#39;마라탕&#39;, &#39;차돌박이짬뽕&#39;, &#39;짬뽕&#39;]
======================================================================
저녁 메뉴 리스트 : {&#39;김치찌개&#39;, &#39;마라탕&#39;, &#39;차돌박이짬뽕&#39;, &#39;짬뽕&#39;, &#39;된장찌개&#39;}
음식을 삭제해주세요 : 짬뽕
저녁 메뉴 리스트 : {&#39;김치찌개&#39;, &#39;마라탕&#39;, &#39;차돌박이짬뽕&#39;, &#39;된장찌개&#39;}
음식을 삭제해주세요 : stop
{&#39;김치찌개&#39;, &#39;마라탕&#39;, &#39;차돌박이짬뽕&#39;, &#39;된장찌개&#39;} 중에서 선택합니다.
======================================================================
5
4
3
2
1
오늘 저녁 메뉴는 &#39;김치찌개&#39; 입니다.</code></pre>
]]></description>
        </item>
    </channel>
</rss>