<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jupakk.log</title>
        <link>https://velog.io/</link>
        <description>juppak</description>
        <lastBuildDate>Tue, 01 Mar 2022 07:15:32 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jupakk.log</title>
            <url>https://images.velog.io/images/juyoung_ppak/profile/82d14013-52a0-42a3-bcb4-10c12883978f/simon-english-48nerZQCHgo-unsplash.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jupakk.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/juyoung_ppak" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Python & AI Math]]></title>
            <link>https://velog.io/@juyoung_ppak/Python-AI-Math</link>
            <guid>https://velog.io/@juyoung_ppak/Python-AI-Math</guid>
            <pubDate>Tue, 01 Mar 2022 07:15:32 GMT</pubDate>
            <description><![CDATA[<h1 id="강의-소개">강의 소개</h1>
<h2 id="python-basics-for-ai">Python Basics for AI</h2>
<ol>
<li>파이썬 AI 개발 환경 준비하기</li>
</ol>
<ul>
<li>Basic computer class for newbies</li>
<li>파이썬 개요</li>
<li>파이썬 코딩 환경</li>
</ul>
<ol start="2">
<li>파이썬 기초 문법 1</li>
</ol>
<ul>
<li>Variables</li>
<li>Function and Console I/O</li>
<li>Conditionals and Loops</li>
<li>String and advanced function concept</li>
</ul>
<ol start="3">
<li>파이썬 기초 문법 2</li>
</ol>
<ul>
<li>Python Data Structure</li>
<li>Pythonic code</li>
</ul>
<ol start="4">
<li>파이썬 객체 지향 프로그래밍</li>
</ol>
<ul>
<li>Python Object Oriented Programming</li>
<li>Module and Project</li>
</ul>
<ol start="5">
<li>파이썬으로 데이터 다루기</li>
</ol>
<ul>
<li>File / Exception / Log Handling</li>
<li>Python data handling</li>
</ul>
<ol start="6">
<li>Numpy 기초</li>
</ol>
<ul>
<li>선형대수의 계산식을 다루는 라이브러리를 다뤄봅니다</li>
</ul>
<ol start="7">
<li>Pandas 기초</li>
</ol>
<ul>
<li>Pandas 1,2 : 기본,심화 (데이터 처리에 유용한 pandas 라이브러리를 다뤄봅니다)<h2 id="ai-math">AI Math</h2>
</li>
</ul>
<ol>
<li>벡터가 뭐에요?</li>
</ol>
<ul>
<li>벡터의 기초에 대해 학습합니다.</li>
</ul>
<ol start="2">
<li>행렬이 뭐에요?</li>
</ol>
<ul>
<li>행렬의 기초에 대해 학습합니다.</li>
</ul>
<ol start="3">
<li>경사하강법 (순한맛)</li>
</ol>
<ul>
<li>경사하강법과 미분의 개념, 그레디언트 벡터에 대해 학습합니다.</li>
</ul>
<ol start="4">
<li>경사하강법 (매운맛)</li>
</ol>
<ul>
<li>경사하강법 기반 선형회귀 알고리즘과 확률적 경사하강법을 알아봅니다.</li>
</ul>
<ol start="5">
<li>딥러닝 학습방법 이해하기</li>
</ol>
<ul>
<li>비선형 모델인 신경망과 역전파 알고리즘 및 활성함수에 대해 학습합니다.</li>
</ul>
<ol start="6">
<li>확률론 맛보기</li>
</ol>
<ul>
<li>확률론의 기초인 확률분포, 조건부확률, 기대값과 몬테카를로 샘플링 방법을 알아봅니다.</li>
</ul>
<ol start="7">
<li>통계학 맛보기</li>
</ol>
<ul>
<li>통계학의 기초인 모수의 개념과 모수를 추정하는 방법 중 하나인 최대가능도 추정법을 학습합니다.</li>
</ul>
<ol start="8">
<li>베이즈 통계학 맛보기</li>
</ol>
<ul>
<li>베이즈 정리와 인과관계 추론에 대해 학습합니다.</li>
</ul>
<ol start="9">
<li>CNN 첫걸음</li>
</ol>
<ul>
<li>Convolution 연산과 다양한 차원에서의 연산 방법, 연산의 역전파에 대해 소개합니다.</li>
</ul>
<ol start="10">
<li>RNN 첫걸음</li>
</ol>
<ul>
<li>시퀀스 데이터의 개념과 특징, 그리고 이를 처리하기 위한 RNN에 대해 알아봅니다.<h2 id="overview-map">Overview Map</h2>
<img src="https://images.velog.io/images/juyoung_ppak/post/e21d76fc-122d-4ce6-9dd1-ad635717ffb5/image.png" alt=""><h2 id="과제-및-퀴즈-소개">과제 및 퀴즈 소개</h2>
<h3 id="기본-과제">기본 과제</h3>
<h4 id="python-basics-for-ai-강의">Python Basics for AI 강의</h4>
</li>
</ul>
<ol>
<li>Basic Math</li>
</ol>
<ul>
<li>간단한 수학을 계산해주는 함수를 python 코드로 구현
: 주어진 리스트에서 가장 큰 숫자, 작은 숫자, 평균, 중간값 반환</li>
<li>관련 강의: Python_1-1강  Basic Math</li>
</ul>
<ol start="2">
<li>Text Processing 1</li>
</ol>
<ul>
<li>string을 다루는 방법을 학습(1): 정규화된 스트링 반환</li>
<li>관련 강의: Python_2-1, 2-2, 2-3, 2-4 강 파이썬 기초 문법 I</li>
</ul>
<ol start="3">
<li>Text Processing 2</li>
</ol>
<ul>
<li>string을 다루는 방법을 학습(2): 인풋으로 받는 스트링에서 숫자만 추출하여 영어 단어로 변환</li>
<li>관련 강의: Python_2-1, 2-2, 2-3, 2-4 강 파이썬 기초 문법 I<h4 id="ai-math-강의">AI Math 강의</h4>
</li>
<li>AI Math는 각 강의마다 5 문항의 퀴즈가 포함되어 있습니다. (OX, 객관식, 단답형 주관식 등)<h3 id="심화-과제">심화 과제</h3>
</li>
</ul>
<ol>
<li>Gradient Descent</li>
</ol>
<ul>
<li>경사하강법을 직접 구현</li>
<li>관련 강의: AI Math_3강 경사하강법(순한 맛), 4강 경사하강법(매운 맛)</li>
</ul>
<ol start="2">
<li>Backpropagation</li>
</ol>
<ul>
<li>RNN의 Backpropagation을 직접 구현</li>
<li>관련 강의: AI Math_10강 RNN 첫걸음</li>
</ul>
<ol start="3">
<li>Maximum Likelihood Estimation</li>
</ol>
<ul>
<li>정규분포의 모수에 대한 최대가능도 추정 문제 풀이 및 실습</li>
<li>관련 강의: AI Math_7강 통계학 맛보기</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Python - HackerRank]]></title>
            <link>https://velog.io/@juyoung_ppak/Python-HackerRank</link>
            <guid>https://velog.io/@juyoung_ppak/Python-HackerRank</guid>
            <pubDate>Wed, 29 Dec 2021 11:22:51 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Python - docs정리]]></title>
            <link>https://velog.io/@juyoung_ppak/Python-docs%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@juyoung_ppak/Python-docs%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 29 Dec 2021 11:21:45 GMT</pubDate>
            <description><![CDATA[<h1 id="▼-1-점프-투-파이썬-▼">▼ 1. 점프 투 파이썬 ▼</h1>
<blockquote>
<p><a href="https://wikidocs.net/book/1">https://wikidocs.net/book/1</a></p>
</blockquote>
<p>✓ Tab = 4 Spacebar
✓ .py 파일을 cmd창(명령 프롬프트 창)에서 실행하기 위해서는 directory를 파일이 있는 위치로 변경한 후에 <code>python ☐☐☐.py</code>  이 형식으로 명령어 입력하면 됨
✓ Visual Studio / PyCharm 같은 에디터 사용하면 좋음
✓ index는 0부터 시작 (-:뒤에서부터 카운트, -1:뒤에서 첫번째 것)</p>
<h2 id="❖-자료형">❖ 자료형</h2>
<h3 id="숫자">숫자</h3>
<p>(정수:integer, 실수:floating-point,8진수,16진수) </p>
<h3 id="문자">문자</h3>
<p>(String) (\n:줄바꿈, \t:탭 간격, \:\출력, &#39;:&#39;출력)
▷ formatting하는 것 ex&gt; <code>&quot;I ate %d apples&quot; % 3</code>
▷ %s : 문자열, %c : 문자1개, %d : 정수, %f : 실수, %% : %출력
▷ %10s : 10개의 문자열 공간에 대입, %0.4f : 소수점 표현 개수
★ format 함수 사용
<code>&quot;I ate {} apples&quot;.format(10)</code> # {}안에 index나 name이 들어갈 수 있음
 <code>&quot;{}&quot;.format(&quot;hi&quot;)</code> 
{}안에 (0:&gt;10 = 오른쪽 정렬, 0&lt;:10 = 왼쪽 정렬, :^10 = 가운데 정렬, :!^10 = !채우기)
★ f 문자열 포매팅
1.선언된 변수를 받아올 수 있고 2.딕셔너리 value를 받아올 수 있다</p>
<pre><code>&gt;&gt;&gt; name = &#39;jupakk&#39;
&gt;&gt;&gt; age = 28
&gt;&gt;&gt; d = {&#39;favorate sport&#39; : &#39;soccer&#39;, &#39;favorate food&#39; : &#39;sushi&#39;}
&gt;&gt;&gt; f&#39;나의 이름은 {name}이고 나이는 {age}이다&#39;
~~~~~ 결과 나옴
&gt;&gt;&gt; f&#39;나는 {d[&quot;favorate sport&quot;]} 하는거 좋아하고 {d[&quot;favorate food&quot;]} 먹는거 좋아한다&#39;
~~~~~ 결과 나옴</code></pre><p>★ 관련 함수
▷ 공백 지우기, 문자열 나누기 등</p>
<pre><code>&gt;&gt;&gt; a = &quot;   hi   &quot;
&gt;&gt;&gt; a.strip()
&#39;hi&#39;
&gt;&gt;&gt; b = &quot;Life is too short&quot;
&gt;&gt;&gt; b.split() # 공백을 기준으로 나눔 (여기에 : 같은거 넣으면 그걸 기준으로 나눔)
[&#39;Life&#39;, &#39;is&#39; &#39;too&#39;, &#39;short&#39;]</code></pre><h3 id="리스트">리스트</h3>
<pre><code>&gt;&gt;&gt; a = [1,2,3,4,5,6,[1,2]]
&gt;&gt;&gt; a[1] # 이렇게 인덱스로 요소 가져오는 것
&gt;&gt;&gt; del a[2] # 인덱스로 요소 삭제 가능
&gt;&gt;&gt; a[-1][0] # 리스트 안의 리스트도 가져올 수 있다 (다중 구조 리스트)</code></pre><h3 id="튜플">튜플</h3>
<p>▷ 리스트와 거의 비슷하지만 값의 생성,삭제,수정이 불가능 하다
▷ ()로 둘러싸는 형태이다(괄호생략가능)
▷ 인덱싱,슬라이싱,연산 등이 가능함</p>
<pre><code>&gt;&gt;&gt; t1 = (1,2,3,4,&#39;a&#39;,&#39;b&#39;)
&gt;&gt;&gt; t1[0]      ------ 인덱싱
&gt;&gt;&gt; t1[1:]     ------ 슬라이싱
&gt;&gt;&gt; t1 + t1*2  ------ 연산
&gt;&gt;&gt; len(t1)    ------ 함수</code></pre><h3 id="딕셔너리">딕셔너리</h3>
<p>▷ 대응 관계를 나타내는 자료형 - 연관 배열(Associate array), 해시(Hash)라고 한다
▷ Key 와 Value가 한쌍이 된다</p>
<pre><code>&gt;&gt;&gt; 기본구조 - {Key1:Value1, Key2:Value2, Key3:Value3, ...}
&gt;&gt;&gt; a = {1: &#39;a&#39;, 2: &#39;b&#39;, &#39;name&#39;: &#39;pey&#39;, 3: [1,2,3]}
&gt;&gt;&gt; a[★] - ★은 리스트와 같은 인덱스가 아니라 key를 입력해야 한다</code></pre><p>▷ dict_keys, dict_values, dict_items 
(리스트 형식이 아니라서 list(a.keys()) 이렇게 리스트로 변환하면 되고 변환하지 않더라도 dict_keys, dict_values, dict_items 등은 반복(iterate)구문을 실행할 수 있다 ex.for문 )</p>
<pre><code>&gt;&gt;&gt; a.keys()   - 딕셔너리 a의 key만을 모아서 dict_keys 객체로 돌려줌
&gt;&gt;&gt; a.values()  - 딕셔너리 a의 value만을 모아서 dict_value 객체로 돌려줌
&gt;&gt;&gt; a.items()   - 딕셔너리의 key,value 쌍을 튜플로 묶은 객체를 돌려줌
&gt;&gt;&gt; a.get(&#39;foo&#39;, &#39;bar&#39;)  - key &#39;foo&#39;에 해당하는 value를 돌려 받는 함수로 만약 key 값이 없을 경우 디폴트 값을 가져오게 하는 함수이다</code></pre><h3 id="집합">집합</h3>
<p>▷ 중복을 허용하지 않는다
▷ 순서가 없다 (따라서 인덱스를 사용할 수 없다)
▷ 교집합, 차집합, 합집합을 구할 때 유용함</p>
<pre><code>&gt;&gt;&gt; s1 = set([1,2,3,4,5,6])
&gt;&gt;&gt; s2 = set([4,5,6,7,8,9])
&gt;&gt;&gt; s1 &amp; s2    ---- 교집합
&gt;&gt;&gt; s1.intersection(s2)
&gt;&gt;&gt; s1 | s2    ---- 합집합
&gt;&gt;&gt; s1.union(s2)
&gt;&gt;&gt; s1 - s2    ---- 차집합
&gt;&gt;&gt; s1.difference(s2)</code></pre><pre><code>&gt;&gt;&gt; s1.add(4)
&gt;&gt;&gt; s1.update([5,7,8])
&gt;&gt;&gt; s1.remove(2)</code></pre><h3 id="불bool">불(bool)</h3>
<p>▷ True, False 값으로 된 자료형</p>
<pre><code>★ bool 내장함수 사용
&gt;&gt;&gt; bool(&#39;python&#39;)
&gt;&gt;&gt; bool(&#39;&#39;)</code></pre><h3 id="변수-자료형의-값을-저장하는-공간">변수 (자료형의 값을 저장하는 공간)</h3>
<p>▷ 변수 이름(메모리의 주소) = 변수에 저장할 값(객체가 메모리에 생성됨)
▷ 복사할 때 유의 점</p>
<pre><code>&gt;&gt;&gt; a = [1,2,3]
&gt;&gt;&gt; b = a        ----- b와 a가 같은 메모리 주소를 갖게 됨(하나를 바꾸면 나머지에 영향이 간다)
&gt;&gt;&gt; b = a[:]     ----- 다른 주소를 갖는 변수 생성
&gt;&gt;&gt; b = copy(a)  ----- 다른 주소를 갖는 변수 생성</code></pre><h2 id="❖-제어문">❖ 제어문</h2>
<h3 id="if문">if문</h3>
<p>▷ 기본 구조</p>
<pre><code>&gt;&gt;&gt; if &lt;조건문&gt;:
    &lt;수행할 문장&gt;
    elif &lt;조건문&gt;:
        pass
    else:
        &lt;수행할 문장&gt;</code></pre><p>▷ 조건부 표현식 ==== <strong>조건문이 참인 경우</strong> if <strong>조건문</strong> else <strong>조건문이 거짓인 경우</strong></p>
<pre><code>&gt;&gt;&gt; if score &gt;= 60:
        message = &quot;success&quot;
    else:
        message = &quot;failure&quot;</code></pre><p><code>message = &quot;success&quot; if score &gt;= 60 else &quot;failure&quot;</code></p>
<h3 id="while문">while문</h3>
<p>▷ 기본 구조</p>
<pre><code>&gt;&gt;&gt; while &lt;조건문&gt;:
        &lt;수행할 문장1&gt;
        &lt;수행할 문장2&gt;</code></pre><p>▷ continue : while문의 처음 조건으로 돌아감
▷ break : while문을 빠져나감</p>
<h3 id="for문">for문</h3>
<p>▷ 기본 구조</p>
<pre><code>&gt;&gt;&gt; for 변수 in 리스트(또는 튜플, 문자열):
        수행할 문장1
        수행할 문장2</code></pre><p>▷ 리스트 내포 (list comprehension)
<code>[표현식 for 항목 in 반복가능객체 if 조건문]</code></p>
<pre><code>&gt;&gt;&gt; a = [1,2,3,4]
&gt;&gt;&gt; result = [num * 3 for num in a if num % 2 == 0]
&gt;&gt;&gt; print(result)
[6, 12]</code></pre><p>여러개 for문 쓸 때</p>
<pre><code>[표현식 for 항목1 in 반복가능객체1 if 조건문1
        for 항목2 in 반복가능객체2 if 조건문2
        ...
        for 항목n in 반복가능객체n if 조건문n]</code></pre><h2 id="❖-입출력">❖ 입출력</h2>
<h3 id="함수">함수</h3>
<p>▷ 기본 구조</p>
<pre><code>def 함수명(매개변수):
    &lt;수행할 문장1&gt;
    &lt;수행할 문장2&gt;</code></pre><p>▷ 매개변수(parameter) 와 인수(arguments)</p>
<pre><code>def add(a, b):  # a, b는 매개변수
    return a+b

print(add(3, 4))  # 3, 4는 인수</code></pre><p>▷ 여러개의 입력값을 받는 함수
☞ * 은 입력값(매개변수)을 모아서 튜플로 만들어준다
args는 arguments의 약자로 관례적으로 많이 사용한다</p>
<pre><code>def add_many(*args):
    &lt;수행할 문장&gt;</code></pre><p>☞ ** 은 입력값(매개변수)을 모아서 딕셔너리로 만들어준다
kwargs는 keyword arguments의 약자로 관례적으로 많이 사용한다</p>
<pre><code>def print_kwargs(**kwargs):
    &lt;수행할 문장&gt;</code></pre><p>▷ 결과값은 항상 하나다
return 이후에 여러 결과 값을 넣은 것은 하나의 튜플로 구성되어 반환된다
return으로 함수를 빠져나가는 방법을 사용할 수 있다</p>
<p>▷ 매개변수의 초기값을 설정할 수 있다</p>
<pre><code>def say_myself(name, old, man=True):
def say_myself(name, man=True, old): --- 이렇게 하면 사용 불가능</code></pre><p>▷ 함수 안에서 변수를 사용하는 것은 global을 쓰면 된다 (비추천)</p>
<pre><code>a = 1 
def vartest(): 
    global a 
    a = a+1</code></pre><p>▷ def 대신에 lambda를 사용할 수 있다 (return명령어가 없어도 결과값을 돌려 줌)
<code>lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식</code></p>
<pre><code>&gt;&gt;&gt; add = lambda a, b: a+b
&gt;&gt;&gt; result = add(3, 4)
&gt;&gt;&gt; print(result)</code></pre><h3 id="사용자의-입출력을-받고-줄-때">사용자의 입,출력을 받고 줄 때</h3>
<p>▷ input을 사용하여 사용자로부터 입력을 받는다 (입력되는 것은 모두 문자열로 받는다)</p>
<pre><code>&gt;&gt;&gt; a = input()              ---- a는 입력되는 변수이다
&gt;&gt;&gt; b = input(&quot;질문 내용&quot;)     ---- 질문 내용을 프롬프트로 띄워준다</code></pre><p>▷ print 활용</p>
<pre><code>&gt;&gt;&gt; print(&quot;life&quot; &quot;is&quot; &quot;too short&quot;) # ①
lifeistoo short
&gt;&gt;&gt; print(&quot;life&quot;+&quot;is&quot;+&quot;too short&quot;) # ②
lifeistoo short
&gt;&gt;&gt; print(&quot;life&quot;, &quot;is&quot;, &quot;too short&quot;)
life is too short
&gt;&gt;&gt; for i in range(10):
        print(i, end=&#39; &#39;)    --- 0 1 2 3 4 5 6 7 8 9
        print(i, end=&#39;_&#39;)    --- 0_1_2_3_4_5_6_7_8_9_
        print(i, end=&#39;&#39;)     --- 0123456789
        print(i)             --- 한줄씩 띄어서 출력</code></pre><h3 id="파일-읽고-쓰기">파일 읽고 쓰기</h3>
<p>▷ 파일 생성
파이썬 내장함수 open
<code>파일 객체 = open(파일 이름, 파일열기 모드)</code>
파일 열기 모드 (r:읽기모드, w:쓰기모드, a:추가모드)
이미 존재하는 파일 위에 쓰려면 추가모드를 사용해야 한다</p>
<pre><code>f = open(test.txt,&#39;w&#39;)
f.close()   ---- 파일 닫기
f.write()   ---- 파일에 쓰기</code></pre><p>▷ 외부 파일 읽기
<code>readline()</code>을 사용해서 파일을 한 줄씩 읽는다
<code>readlines()</code>을 사용해서 파일을 한 줄씩 읽어와 리스트로 반환한다
<code>read()</code>을 사용해서 파일 전체를 문자열로 반환한다</p>
<p>▷ with문 사용
with문을 사용하면 with문을 벗어나는 순간 자동으로 파일 객체가 close된다</p>
<pre><code>with open(&quot;foo.txt&quot;, &quot;w&quot;) as f:
    f.write(&quot;Life is too short, you need python&quot;)</code></pre><p>▷ sys 모듈로 매개변수 주기
??? 명령 프롬프트에서 sys모듈을 사용해서 매개변수를 직접 준다는 내용인데 왜 쓰는지, 이득이 뭔지 모르겠다</p>
<h2 id="❖-클래스-모듈-패키지-라이브러리-등">❖ 클래스, 모듈, 패키지, 라이브러리 등</h2>
<h3 id="클래스">클래스</h3>
<p>▷ 클래스(class)와 객체(object)의 관계 --&gt; 클래스는 틀,도면으로 생각할 수 있고 객체는 클래스로 만든 것을 의미한다 (임의의 클래스로 만든 객체를 그 클래스의 인스턴스라고 표현한다)
▷ 클래스의 기본 구조</p>
<pre><code>def 함수명(매개변수):
    수행할 문장
    ...</code></pre><p>▷ 클래스 안에 함수들이 구성 되는데 이것들은 메서드(method)라고 한다
▷ 각 메서드별로 사용할 매개변수를 받게 되는데 첫번째 매개변수로 self를 받는다 (호출한 객체가 자동으로 전달되는 것)
▷ 각 객체별로 매개변수를 받아서 사용하는데 이에 따라서 객체변수들이 독립적으로 유지되는 것을 볼 수 있다
▷ 생성자 (constructor)
<code>__init__</code> 매서드를 사용하면 생성자가 된다 (초기값을 설정해줌)
▷ 상속 (inheritance)
새로운 클래스를 생성할 때 다른 클래스의 기능을 물려받아서 사용하는 것
<code>class 클래스이름(상속받을 클래스 이름)</code>
(기존 클래스가 라이브러리 형태로 제공되거나 수정이 어려울 때 사용하면 좋음)
▷ 매서드 오버라이딩(overriding)
클래스를 상속 받을 때 매서드를 변경하고 싶으면 해당 매서드를 다시 만들면 된다
▷ 클래스 변수
클래스를 선언할 때 객체 변수가 아닌 클래스 변수로 선언한 것은 다른 객체들에서도 동일하게 사용되는 변수가 된다</p>
<h3 id="모듈">모듈</h3>
<p>▷ 함수나 변수 또는 클래스를 모아 놓은 파일이다
▷ <code>module1.py</code> 이렇게 모듈을 만들 수 있다
▷ 저장한 모듈을 사용하기 위해서는 <code>import 모듈이름</code> 이렇게 불러오면 된다
▷ 모듈에서 특정 함수만을 사용하기 위해서는 <code>from 모듈이름 import 모듈함수</code> 이렇게 불러오면 된다 (모듈 함수에 * 문자를 넣으면 모든 함수를 불어오는 것)
▷ import 는 <strong>현재의 디렉토리</strong>에 있는 파일이나 <strong>파이썬 라이브러리가 저장된 디렉토리</strong>에 있는 모듈만 불러올 수 있다
◆ <code>if __name__ == &quot;__main__&quot;</code>의 의미
☞ 명령 프롬프트에서 파일을 실행하면 위의 if문이 참이되어 수행이 되는 것이고
☞ 대화형 인터프리터나 다른 파일에서 모듈을 불러서 사용할 때는 위의 if문이 거짓이 되어 if문이 수행되지 않는다
◆ <code>__name__</code>변수는 모듈을 직접 실행할 때는 <code>__main__</code>으로 되고 import해서 사용할 경우 모듈의 이름이 저장된다</p>
<p>◉ 모듈을 불러올 때 방법</p>
<ol>
<li>sys.path.append 사용
<code>import sys</code> sys 모듈을 불러와서 &gt;&gt; <code>sys.path</code>로 파이썬 라이브러리가 설치되어 있는 디렉토리들을 보고 &gt;&gt; <code>sys.path.append(&quot;디렉토리&quot;)</code> 사용할 모듈이 있는 디렉토리를 추가한 뒤에 모듈을 불러와 사용함</li>
<li>PYTHONPATH 사용
명령 프롬프트에서 <code>set PYTHONPATH=디렉토리</code> 이렇게 하면 모듈을 불러와 사용 가능함</li>
</ol>
<h3 id="패키지">패키지</h3>
<p>▷ 패키지는(packages) 도트(.)를 사용해서 파이썬 모듈을 계층적으로 관리할 수 있게 해줌
﹡ 파이썬에서 모듈은 하나의 .py파일이다</p>
<p>▷ 패키지 예 (game)</p>
<pre><code>game/
    __init__.py
    sound/
        __init__.py
        echo.py
        wav.py
    graphic/
        __init__.py
        screen.py
        render.py
    play/
        __init__.py
        run.py
        test.py</code></pre><p>﹡ game : 루트 디렉토리 
﹡ sound, graphic, play : 서브 디렉토리</p>
<p>▷ 패키지 안의 함수 실행하는 방법</p>
<ol>
<li>모듈을 import하여 함수 실행<pre><code>&gt;&gt;&gt; import game.sound.echo
&gt;&gt;&gt; game.sound.echo.echo_test()</code></pre></li>
<li>모듈의 디렉토리까지를 from...import하여 함수 실행<pre><code>&gt;&gt;&gt; from game.sound import echo
&gt;&gt;&gt; echo.echo_test()</code></pre></li>
<li>모듈의 함수를 직접 import하여 함수 실행<pre><code>&gt;&gt;&gt; from game.sound.echo import echo_test
&gt;&gt;&gt; echo_test()</code></pre>▷ <code>__init__.py</code> 의 용도
﹡ <code>__init__.py</code> 은 해당 디렉토리가 패키지의 일부임을 알려줌 (<code>__init__.py</code> 이 없다면 패키지로 인식 안됨)
```<blockquote>
<blockquote>
<blockquote>
<p>from game.sound import *
echo.echo_test()
[결과 에러]</p>
</blockquote>
</blockquote>
</blockquote>
</li>
</ol>
<p>*로 패키지의 특정 디렉토리들을 불러올 때는 
<strong>init</strong>.py에 <strong>all</strong> = [&#39;echo&#39;] 이런 식으로 정의해줘야 함
하지만 *로 특정 모듈을 불러올 때는 from a.b.c import * 에서 c가 특정 모듈이면 된다</p>
<pre><code>▷ relative 패키지
임의의 서브 패키지에서 다른 서브 패키지의 모듈을 사용하는 것 가능함</code></pre><p>graphic 디렉토리의 render.py모듈이 sound 디렉토리의 echo.py 모듈 사용할 때 render.py의 예</p>
<p>example 1)</p>
<blockquote>
<blockquote>
<blockquote>
<p>from game.sound.echo import echo_test
def render_test():
        print(&quot;render&quot;)
        echo_test()</p>
</blockquote>
</blockquote>
</blockquote>
<p>example 2)</p>
<blockquote>
<blockquote>
<blockquote>
<p>..sound.echo import echo_test
def render_test():
        print(&quot;render&quot;)
        echo_test()</p>
</blockquote>
</blockquote>
</blockquote>
<p><code>﹡</code>..<code>: 부모 디렉토리
﹡</code>.``` : 현재 디렉토리</p>
<h3 id="예외-처리">예외 처리</h3>
<p>▷ </p>
<h3 id="내장-함수">내장 함수</h3>
<p>▷ </p>
<h3 id="라이브러리">라이브러리</h3>
<p>▷ </p>
<h2 id="❖-연습-문제---link">❖ 연습 문제 - Link</h2>
<p>★ Link - <a href="https://colab.research.google.com/drive/13NsxsWn7WvJ9Z7YVZL25gqPVc4WacyOz#scrollTo=-Ta85-tF1tai">Google Colab</a></p>
<h1 id="▼-2-왕초보를-위한-파이썬-▼">▼ 2. 왕초보를 위한 파이썬 ▼</h1>
<blockquote>
<p><a href="https://wikidocs.net/book/2">https://wikidocs.net/book/2</a></p>
</blockquote>
<h1 id="▼-3-파이썬---데이터-시각화-▼">▼ 3. 파이썬 - 데이터 시각화 ▼</h1>
<blockquote>
<p><a href="https://wikidocs.net/book/2454">https://wikidocs.net/book/2454</a></p>
</blockquote>
<h1 id="▼-4-레벨업-파이썬-▼">▼ 4. 레벨업 파이썬 ▼</h1>
<blockquote>
<p><a href="https://wikidocs.net/book/4170">https://wikidocs.net/book/4170</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pandas.DataFrame (2D) - Exercise]]></title>
            <link>https://velog.io/@juyoung_ppak/Pandas.DataFrame-2D-Exercise</link>
            <guid>https://velog.io/@juyoung_ppak/Pandas.DataFrame-2D-Exercise</guid>
            <pubDate>Wed, 29 Dec 2021 10:50:34 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Pandas.Panel (3D)]]></title>
            <link>https://velog.io/@juyoung_ppak/Pandas.Panel-3D</link>
            <guid>https://velog.io/@juyoung_ppak/Pandas.Panel-3D</guid>
            <pubDate>Wed, 29 Dec 2021 10:48:52 GMT</pubDate>
            <description><![CDATA[<h1 id="★-panel-3d">★ Panel (3D)</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pandas.DataFrame (2D) - 구조]]></title>
            <link>https://velog.io/@juyoung_ppak/Pandas.DataFrame-2D</link>
            <guid>https://velog.io/@juyoung_ppak/Pandas.DataFrame-2D</guid>
            <pubDate>Wed, 29 Dec 2021 10:47:34 GMT</pubDate>
            <description><![CDATA[<h1 id="★-dataframe-2d">★ DataFrame (2D)</h1>
<p>✓ 2차원의 <strong>labeled data structure</strong> with columns of potentially different types이다.
✓ <strong>index</strong> = row labels / <strong>columns</strong> = column labels
✓ <strong>Kinds of input Data type</strong>
    ◼︎Dict of 1D ndarrays,lists,dicts,Series 
    ◼︎2D numpy.ndarray 
    ◼︎Structured or record ndarray 
    ◼︎A Series 
    ◼︎Another DataFrame)</p>
<h2 id="▼-구성-방법-예시-▼-data-type별">▼ 구성 방법 예시 ▼ (data type별)</h2>
<h3 id="1-from-dict-of-series-or-dicts-구성-예시">1. From dict of Series or dicts 구성 예시</h3>
<pre><code>&gt;&gt;&gt; d = {
    &quot;one&quot; = pd.Series([1.0, 2.0, 3.0], index=[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]),
    &quot;two&quot; = pd.Series([1.0, 2.0, 3.0, 4.0], index=[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;]),
}
&gt;&gt;&gt; df = pd.DataFrame(d)
&gt;&gt;&gt; df
&gt;&gt;&gt;
    one    two
a    1.0    1.0
b    2.0    2.0
c    3.0    3.0
d    NaN    4.0
&gt;&gt;&gt; df.index
&gt;&gt;&gt; Index([&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;],dtype=&#39;object&#39;)
&gt;&gt;&gt; df.columns
&gt;&gt;&gt; Index([&#39;one&#39;,&#39;two&#39;],dtype=&#39;object&#39;)    
# When a particular set of columns is passed along with a dict of data, 
the passed columns override the keys in the dict</code></pre><h3 id="2-from-dict-of-ndarrays--lists">2. From dict of ndarrays / lists</h3>
<p>✓ The ndarrrays must all be the same length. </p>
<pre><code>&gt;&gt;&gt; d = {&quot;one&quot;: [1.0, 2.0, 3.0, 4.0], &quot;two&quot;: [4.0, 3.0, 2.0, 1.0]}
&gt;&gt;&gt; pd.DataFrame(d)
&gt;&gt;&gt;
    one    two
a    1.0    4.0
b    2.0    3.0
c    3.0    2.0
d    4.0    1.0</code></pre><h3 id="3-frome-structured-or-record-array">3. Frome structured or record array</h3>
<p>✓ DataFrame이 2D NumPy ndarrray처럼 정확히 work 안함</p>
<pre><code>&gt;&gt;&gt; data = np.zeros((2,), dtype=[(&quot;A&quot;, &quot;i4&quot;), (&quot;B&quot;, &quot;f4&quot;), (&quot;C&quot;, &quot;a10&quot;)]) # 이 부분 체크 필요
&gt;&gt;&gt; data[:] = [(1, 2.0, &quot;Hello&quot;), (2, 3.0, &quot;World&quot;)]
&gt;&gt;&gt; pd.DataFrame(data)
&gt;&gt;&gt; 
    A    B    C
0    1    2.0    b&#39;Hello&#39;
1    2    3.0    b&#39;World&#39;
&gt;&gt;&gt; pd.DataFrame(data, index=[&quot;first&quot;, &quot;second&quot;])
    A    B    C
first    1    2.0    b&#39;Hello&#39;
second    2    3.0    b&#39;World&#39;
&gt;&gt;&gt; pd.DataFrame(data, columns=[&quot;C&quot;, &quot;A&quot;, &quot;B&quot;]) # column name 바꾸는거
    C        A    B
0    b&#39;Hello&#39;    1    2.0
1    b&#39;World&#39;    2    3.0</code></pre><h3 id="4-from-a-list-of-dicts">4. From a list of dicts</h3>
<pre><code>&gt;&gt;&gt; data2 = [{&quot;a&quot;: 1, &quot;b&quot;: 2}, {&quot;a&quot;: 5, &quot;b&quot;: 10, &quot;c&quot;: 20}]
&gt;&gt;&gt; pd.DataFrame(data2)
&gt;&gt;&gt; 
    a    b    c
0    1    2    NaN
1    5    10    20.0</code></pre><h3 id="5-from-a-dict-of-tuples">5. From a dict of tuples</h3>
<p>✓ 이게 잘 활용되는 예를 찾아봐야 할 듯???</p>
<pre><code>&gt;&gt;&gt; pd.DataFrame(
    {
        (&quot;a&quot;,&quot;b&quot;): {(&quot;A&quot;,&quot;B&quot;):1, (&quot;A&quot;,&quot;C&quot;):2},
        (&quot;a&quot;,&quot;a&quot;): {(&quot;A&quot;,&quot;C&quot;):3, (&quot;A&quot;,&quot;B&quot;):4},
        (&quot;a&quot;,&quot;c&quot;): {(&quot;A&quot;,&quot;B&quot;):5, (&quot;A&quot;,&quot;C&quot;):6},
        (&quot;b&quot;,&quot;a&quot;): {(&quot;A&quot;,&quot;C&quot;):7, (&quot;A&quot;,&quot;B&quot;):8},
        (&quot;b&quot;,&quot;b&quot;): {(&quot;A&quot;,&quot;D&quot;):9, (&quot;A&quot;,&quot;B&quot;):10},
    }
)
&gt;&gt;&gt; 
        a            b
            b    a    c    a    b
A    B    1.0    4.0    5.0    8.0    10.0
    C    2.0    3.0    6.0    7.0    NaN
        D    NaN    NaN    NaN    NaN    9.0</code></pre><h3 id="6-from-a-series">6. From a Series</h3>
<p>✓ The result will be a DataFame (same index as the input Series, one column whose name is the original name of the Series)</p>
<h3 id="7-from-a-list-of-namedtuples">7. From a list of namedtuples</h3>
<p>✓ namedtuple의 field names가 DataFrame의 columns를 결정한다.
✓ namedtuple 특성 파악 필요</p>
<pre><code>&gt;&gt;&gt; from collections import namedtuple
&gt;&gt;&gt; Point = namedtuple(&quot;Point&quot;, &quot;x y&quot;)
&gt;&gt;&gt; pd.DataFrame([Point(0,0), Point(0,3), (2,3)])
&gt;&gt;&gt;
    x    y
0    0    0
1    0    3
2    2    3
&gt;&gt;&gt; Point3D = namedtuple(&quot;Point3D&quot;, &quot;x y z&quot;)
&gt;&gt;&gt; pd.DataFrame([Point3D(0, 0, 0), Point3D(0, 3, 5), Point(2, 3)])
&gt;&gt;&gt;
    x    y    z
0    0    0    0.0
1    0    3    5.0
2    2    3    NaN</code></pre><h3 id="8-from-a-list-of-dataclasses">8. From a list of dataclasses</h3>
<p>✓ Data Classes 의 list를 passing하는 것 (list of dictionaries를 passing하는 것과 같다)
✓ 다만 all values가 dataclasses여야하고 mixing types이면 TypeError뜸.</p>
<pre><code>&gt;&gt;&gt; from dataclasses import make_dataclass
&gt;&gt;&gt; Point = make_dataclass(&quot;Point&quot;, [(&quot;x&quot;, int), (&quot;y&quot;, int)])
&gt;&gt;&gt; pd.DataFrame([Point(0, 0), Point(0, 3), Point(2, 3)])
&gt;&gt;&gt;
    x    y
0    0    0
1    0    3
2    2    3</code></pre><h3 id="000-missing-data">000. Missing data</h3>
<p>✓ pandas에서 missing values를 어떻게 다루는지...(정리 예정)</p>
<blockquote>
<p><a href="https://pandas.pydata.org/docs/user_guide/missing_data.html#missing-data">https://pandas.pydata.org/docs/user_guide/missing_data.html#missing-data</a></p>
</blockquote>
<h2 id="▼-alternate-constructors-▼">▼ Alternate constructors ▼</h2>
<h3 id="1-dataframefrom_dict">1. DataFrame.from_dict</h3>
<p>✓ dict of dicts / array-like sequences를 가지고 DataFrame을 return함</p>
<pre><code>&gt;&gt;&gt; pd.DataFrame.from_dict(dict([(&quot;A&quot;, [1, 2, 3]), (&quot;B&quot;, [4, 5, 6])]))
&gt;&gt;&gt; 
    A    B
0    1    4
1    2    5
2    3    6
# default로 dict의 key가 columns로 받아짐
# orient=&#39;index&#39;로 하면 key가 row labels로 받아짐
&gt;&gt;&gt; pd.DataFrame.from_dict(
    dict([(&quot;A&quot;, [1, 2, 3]), (&quot;B&quot;, [4, 5, 6])]),
    orient=&quot;index&quot;,
    columns=[&quot;one&quot;,&quot;two&quot;,&quot;three&quot;],
)
&gt;&gt;&gt;
    one    two    three
A    1    2    3
B    4    5    6</code></pre><h3 id="2-dataframefrom_records">2. DataFrame.from_records</h3>
<p>✓ list of tuples / ndarray with structured dtype을 가지고 DataFrame 구성
✓ 일반적으로 DataFrame 구성하지만 specific field를 index로 할 수 있다</p>
<pre><code>&gt;&gt;&gt; data
&gt;&gt;&gt; array([(1, 2., b&#39;Hello&#39;), (2, 3., b&#39;World&#39;)], dtype=[(&#39;A&#39;, &#39;&lt;i4&#39;), (&#39;B&#39;, &#39;&lt;f4&#39;), (&#39;C&#39;, &#39;S10&#39;)])
&gt;&gt;&gt; pd.DataFrame.from_records(data, index=&quot;C&quot;)
&gt;&gt;&gt;
        A    B
C
b&#39;Hello&#39;    1    2.0
b&#39;World&#39;    2    3.0</code></pre><h2 id="▼-handlings-▼">▼ Handlings ▼</h2>
<h3 id="column-selection-addition-deletion">Column selection, addition, deletion</h3>
<pre><code># getting, setting, deleting
&gt;&gt;&gt; df[&quot;one&quot;]
&gt;&gt;&gt;
a    1.0
b    2.0
c    3.0
d    NaN
&gt;&gt;&gt; df[&quot;three&quot;] = df[&quot;one&quot;] * df[&quot;two&quot;]
&gt;&gt;&gt; df[&quot;flag&quot;] = df[&quot;one&quot;] &gt; 2
&gt;&gt;&gt; df
&gt;&gt;&gt;
    one    two    three    flag
a    1.0    1.0    1.0    False
b    2.0    2.0    4.0    False
c    3.0    3.0    9.0    True
d    NaN    4.0    NaN    False
# delete / pop
&gt;&gt;&gt; del df[&quot;two&quot;]
&gt;&gt;&gt; three = df.pop(&quot;three&quot;)
&gt;&gt;&gt; df
&gt;&gt;&gt;
    one    flag
a    1.0    False
b    2.0    False
c    3.0    True
d    NaN    False
&gt;&gt;&gt; df[&quot;foo&quot;] = &quot;bar&quot; # insert scalar value
&gt;&gt;&gt;    df
&gt;&gt;&gt;
    one    flag    foo
a    1.0    False    bar
b    2.0    False    bar
c    3.0    True    bar
d    NaN    False    bar
&gt;&gt;&gt; df[&quot;one_trunc&quot;] = df[&quot;one&quot;][:2] # insert a Series
&gt;&gt;&gt; df
&gt;&gt;&gt; 
    one flag    foo    one_trunc
a    1.0    False    bar    1.0
b    2.0    False    bar    2.0
c    3.0    True    bar    NaN
d    NaN    False    bar    NaN
# insert raw ndarray (length는 같아야 함)
&gt;&gt;&gt; df.insert(1, &quot;bar&quot;, df[&quot;one&quot;])
&gt;&gt;&gt; df
&gt;&gt;&gt;
    one bar    flag    foo    one_trunc
a    1.0    1.0    False    bar    1.0
b    2.0    2.0    False    bar    2.0
c    3.0    3.0    True    bar    NaN
d    NaN    NaN    False    bar    NaN</code></pre><h3 id="assigning-new-columns-in-method-chains">Assigning new columns in method chains</h3>
<p>✓ <strong>assign</strong> always returns a copy of the data, leaving the original DataFrrame untouched
✓ 보완 필요...</p>
<pre><code>&gt;&gt;&gt; iris = pd.read_csv(&quot;data/iris.data&quot;)
&gt;&gt;&gt; iris.head()
&gt;&gt;&gt;
    SepalLength    SepalWidth    PetalLength    PetalWidth    Name
0    5.1        3.5        1.4        0.2        Iris-setosa
1    4.9        3.0        1.4        0.2        Iris-setosa
2    4.7        3.2        1.3        0.2        Iris-setosa
3    4.6        3.1        1.5        0.2        Iris-setosa
4    5.0        3.6        1.4        0.2        Iris-setosa
&gt;&gt;&gt; iris.assign(sepal_ratio=iris[&quot;SepalWidth&quot;] / iris[&quot;SepalLength&quot;]).head()
&gt;&gt;&gt;
    SepalLength    SepalWidth    PetalLength    PetalWidth    Name        sepal_ratio
0    5.1        3.5        1.4        0.2        Iris-setosa    0.686275
1    4.9        3.0        1.4        0.2        Iris-setosa    0.612245
2    4.7        3.2        1.3        0.2        Iris-setosa    0.680851
3    4.6        3.1        1.5        0.2        Iris-setosa    0.673913
4    5.0        3.6        1.4        0.2        Iris-setosa    0.720000
&gt;&gt;&gt; iris.assign(sepal_ratio=lambda x: (x[&quot;SepalWidth&quot;] / x[&quot;SepalLength&quot;])).head()
&gt;&gt;&gt; # output 위와 같다
&gt;&gt;&gt; (
        iris.query(&quot;SepalLength &gt; 5&quot;)
        .assign(
            SepalRatio=lambda x: x.SepalWidth / x.SepalLength,
            PetalRatio=lambda x: x.PetalWidth / x.PetalLength,
        )
        .plot(kind=&quot;scatter&quot;, x=&quot;SepalRatio&quot;, y=&quot;PetalRatio&quot;)
)</code></pre><img width="300" src="https://images.velog.io/images/juyoung_ppak/post/1a1b244f-ec95-4f8b-9106-85a102278091/image.png">

<pre><code>&gt;&gt;&gt; dfa = pd.DataFrame({&quot;A&quot;: [1, 2, 3], &quot;B&quot;: [4, 5, 6]})
&gt;&gt;&gt; dfa.assign(C=lambda x: x[&quot;A&quot;] + x[&quot;B&quot;], D=lambda x: x[&quot;A&quot;] + x[&quot;C&quot;])
&gt;&gt;&gt; 
    A    B    C    D
0    1    4    5    6
1    2    5    7    9
2    3    6    9    12</code></pre><h3 id="indexing--selection">Indexing / selection</h3>
<img width=300 src="https://images.velog.io/images/juyoung_ppak/post/175c0076-46be-4cce-89c4-2b50400d6f32/image.png">

<blockquote>
<p>참고(추가 예정)
Indexing : <a href="https://pandas.pydata.org/docs/user_guide/indexing.html#indexing">https://pandas.pydata.org/docs/user_guide/indexing.html#indexing</a>
Reindexing : <a href="https://pandas.pydata.org/docs/user_guide/basics.html#basics-reindexing">https://pandas.pydata.org/docs/user_guide/basics.html#basics-reindexing</a></p>
</blockquote>
<h3 id="data-alignment-and-arithmetic">Data alignment and arithmetic</h3>
<p>✓ DataFrame object들 사이의 alignment에서 보면, union of column and index로 결과가 구해짐
✓ DataFrame 과 Series 사이의 alignment에서 보면, DataFrame의 columns에 Series의 index가 정렬되고 이것이 row 방향으로 broadcasting 되며 결과 구해짐</p>
<pre><code>&gt;&gt;&gt; df = pd.DataFrame(np.random.randn(10, 4), columns=[&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;])
&gt;&gt;&gt; df2 = pd.DataFrame(np.random.randn(7, 3), columns=[&quot;A&quot;, &quot;B&quot;, &quot;C&quot;])
&gt;&gt;&gt; df + df2
&gt;&gt;&gt; # index와 column에 맞춰 연산
    A        B        C        D
0    0.045691    -0.014138    1.380871    NaN
1    -0.955398    -1.501007    0.037181    NaN
2    -0.662690     1.534833    -0.859691    NaN
3    -2.452949     1.237274    -0.133712    NaN
4     1.414490     1.951676    -2.320422    NaN
5    -0.494922    -1.649727    -1.084601    NaN
6    -1.047551    -0.748572    -0.805479    NaN
7    NaN        NaN        NaN        NaN
8    NaN        NaN        NaN        NaN
9    NaN        NaN        NaN        NaN
&gt;&gt;&gt; df - df.iloc[0]
&gt;&gt;&gt; # Series가 broadcasting 되면서 연산
    A        B        C        D
0    0.000000    0.000000    0.000000    0.000000
1    -1.359261    -0.248717    -0.453372    -1.754659
2    0.253128    0.829678    0.010026    -1.991234
3    -1.311128    0.054325    -1.724913    -1.620544
4    0.573025    1.500742    -0.676070    1.367331
5    -1.741248    0.781993    -1.241620    -2.053136
6    -1.240774    -0.869551    -0.153282    0.000430
7    -0.743894    0.411013    -0.929563    -0.282386
8    -1.194921    1.320690    0.238224    -1.482644
9    2.293786    1.856228    0.773289    -1.446531
# scalars로 연산 될 때
&gt;&gt;&gt; df * 5 + 2
&gt;&gt;&gt; 1 / df
&gt;&gt;&gt; df ** 4
# Boolean로 연산 될 때
&gt;&gt;&gt; df1 = pd.DataFrame({&quot;a&quot;: [1, 0, 1], &quot;b&quot;: [0, 1, 1]}, dtype=bool)
&gt;&gt;&gt; df2 = pd.DataFrame({&quot;a&quot;: [0, 1, 1], &quot;b&quot;: [1, 1, 0]}, dtype=bool)
&gt;&gt;&gt; df1 &amp; df2
&gt;&gt;&gt;
    a    b
0    False    False
1    False    True
2    True    False
&gt;&gt;&gt; df1 | df2
&gt;&gt;&gt; df1 ^ df2
&gt;&gt;&gt; -df1</code></pre><blockquote>
<p>참고(추가 예정)
Broadcasting : <a href="https://numpy.org/doc/stable/user/basics.broadcasting.html">https://numpy.org/doc/stable/user/basics.broadcasting.html</a>
Flexible binary operations : <a href="https://pandas.pydata.org/docs/user_guide/basics.html#basics-binop">https://pandas.pydata.org/docs/user_guide/basics.html#basics-binop</a></p>
</blockquote>
<h3 id="transposing">Transposing</h3>
<p>✓ transpose하는 것은 &#39;T&#39;를 사용하면 된다(ndarray와 비슷하게)</p>
<pre><code>&gt;&gt;&gt; df[:5].T
&gt;&gt;&gt;
    0        1        2        3        4
A    0.271860    -1.087401    0.524988    -1.039268     0.844885
B    -0.424972    -0.673690     0.404705    -0.370647     1.075770
C    0.567020    0.113648     0.577046    -1.157892    -0.109050
D    0.276232    -1.478427    -1.715002    -1.344312     1.643563</code></pre><h3 id="dataframe-interoperability-with-numpy-functions">DataFrame interoperability with NumPy functions</h3>
<p>✓ Elementwise로 연산되는 NumPy functions(log, exp, sqrt ...)는 Series와 DataFrame에서 사용 가능하다
✓ DataFrame은 ndarray와 같이 적용하기 어렵지만, Series 같은 경우에는 NumPy&#39;s universal functions를 적용할 수 있다.</p>
<pre><code>&gt;&gt;&gt; np.exp(df)
&gt;&gt;&gt; np.asarray(df)
&gt;&gt;&gt; 
array([[ 0.2719, -0.425 ,  0.567 ,  0.2762],
       [-1.0874, -0.6737,  0.1136, -1.4784],
       [ 0.525 ,  0.4047,  0.577 , -1.715 ],
       [-1.0393, -0.3706, -1.1579, -1.3443],
       [ 0.8449,  1.0758, -0.109 ,  1.6436],
       [-1.4694,  0.357 , -0.6746, -1.7769],
       [-0.9689, -1.2945,  0.4137,  0.2767],
       [-0.472 , -0.014 , -0.3625, -0.0062],
       [-0.9231,  0.8957,  0.8052, -1.2064],
       [ 2.5656,  1.4313,  1.3403, -1.1703]])
&gt;&gt;&gt; ser = pd.Series([1, 2, 3, 4])
&gt;&gt;&gt;
0     2.718282
1     7.389056
2    20.085537
3    54.598150
# index 순서 달라도 가능 (label별로 자동 정렬)
&gt;&gt;&gt; ser1 = pd.Series([1, 2, 3], index=[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;])
&gt;&gt;&gt; ser2 = pd.Series([1, 3, 5], index=[&quot;b&quot;, &quot;a&quot;, &quot;c&quot;])
&gt;&gt;&gt; np.remainder(ser1, ser2)    
&gt;&gt;&gt;
a    1
b    0
c    3
&gt;&gt;&gt; ser3 = pd.Series([2, 4, 6], index=[&quot;b&quot;, &quot;c&quot;, &quot;d&quot;])
# index 다른 것은 missing value
&gt;&gt;&gt; np.remainder(ser1, ser3)    
&gt;&gt;&gt;
a    NaN
b    0.0
c    3.0
d    NaN
# 
&gt;&gt;&gt; 
# Series와 Index에 binary ufunc 적용되면, 우선적으로 Series로 return함
&gt;&gt;&gt; ser = pd.Series([1, 2, 3])
&gt;&gt;&gt; idx = pd.Index([4, 5, 6])
&gt;&gt;&gt; np.maximum(ser, idx)
&gt;&gt;&gt;
0    4
1    5
2    6</code></pre><h3 id="console-display">Console display</h3>
<p>✓ DataFrame이 너무 클 때 console에 잘려서 display될 수 있다.</p>
<pre><code>&gt;&gt;&gt; baseball = pd.read_csv(&quot;data/baseball.csv&quot;) # dataset from plyr R package
&gt;&gt;&gt; print(baseball)
&gt;&gt;&gt;
       id     player  year  stint team  lg   g   ab   r    h  X2b  X3b  hr   rbi   sb   cs  bb    so  ibb  hbp   sh   sf  gidp
0   88641  womacto01  2006      2  CHN  NL  19   50   6   14    1    0   1   2.0  1.0  1.0   4   4.0  0.0  0.0  3.0  0.0   0.0
1   88643  schilcu01  2006      1  BOS  AL  31    2   0    1    0    0   0   0.0  0.0  0.0   0   1.0  0.0  0.0  0.0  0.0   0.0
..    ...        ...   ...    ...  ...  ..  ..  ...  ..  ...  ...  ...  ..   ...  ...  ...  ..   ...  ...  ...  ...  ...   ...
98  89533   aloumo01  2007      1  NYN  NL  87  328  51  112   19    1  13  49.0  3.0  0.0  27  30.0  5.0  2.0  0.0  3.0  13.0
99  89534  alomasa02  2007      1  NYN  NL   8   22   1    3    1    0   0   0.0  0.0  0.0   0   3.0  0.0  0.0  0.0  0.0   0.0

[100 rows x 23 columns]

# to_string으로 tabular form으로 representation할 수 있음(단,console width랑 안 맞을 수도)
&gt;&gt;&gt; print(baseball.iloc[-20:, :12].to_string())
&gt;&gt;&gt;
       id     player  year  stint team  lg    g   ab   r    h  X2b  X3b
80  89474  finlest01  2007      1  COL  NL   43   94   9   17    3    0
81  89480  embreal01  2007      1  OAK  AL    4    0   0    0    0    0
82  89481  edmonji01  2007      1  SLN  NL  117  365  39   92   15    2
83  89482  easleda01  2007      1  NYN  NL   76  193  24   54    6    0
84  89489  delgaca01  2007      1  NYN  NL  139  538  71  139   30    0
85  89493  cormirh01  2007      1  CIN  NL    6    0   0    0    0    0
86  89494  coninje01  2007      2  NYN  NL   21   41   2    8    2    0
87  89495  coninje01  2007      1  CIN  NL   80  215  23   57   11    1
88  89497  clemero02  2007      1  NYA  AL    2    2   0    1    0    0
89  89498  claytro01  2007      2  BOS  AL    8    6   1    0    0    0
90  89499  claytro01  2007      1  TOR  AL   69  189  23   48   14    0
91  89501  cirilje01  2007      2  ARI  NL   28   40   6    8    4    0
92  89502  cirilje01  2007      1  MIN  AL   50  153  18   40    9    2
93  89521  bondsba01  2007      1  SFN  NL  126  340  75   94   14    0
94  89523  biggicr01  2007      1  HOU  NL  141  517  68  130   31    3
95  89525  benitar01  2007      2  FLO  NL   34    0   0    0    0    0
96  89526  benitar01  2007      1  SFN  NL   19    0   0    0    0    0
97  89530  ausmubr01  2007      1  HOU  NL  117  349  38   82   16    3
98  89533   aloumo01  2007      1  NYN  NL   87  328  51  112   19    1
99  89534  alomasa02  2007      1  NYN  NL    8   22   1    3    1    0

# display.width로 얼마나 한 row에 display할 지 결정
&gt;&gt;&gt; pd.set_option(&quot;display.width&quot;, 40)  # default is 80
&gt;&gt;&gt; pd.DataFrame(np.random.randn(3, 12))
&gt;&gt;&gt;
         0         1         2         3         4         5         6         7         8         9         10        11
0 -2.182937  0.380396  0.084844  0.432390  1.519970 -0.493662  0.600178  0.274230  0.132885 -0.023688  2.410179  1.450520
1  0.206053 -0.251905 -2.213588  1.063327  1.266143  0.299368 -0.863838  0.408204 -1.048089 -0.025747 -0.988387  0.094055
2  1.262731  1.289997  0.082423 -0.055758  0.536580 -0.489682  0.369374 -0.034571 -2.484478 -0.281461  0.030711  0.109121

# individual column별로 max width를 조절 가능
&gt;&gt;&gt; datafile = {
    &quot;filename&quot;: [&quot;filename_01&quot;, &quot;filename_02&quot;],
    &quot;path&quot;: [
        &quot;media/user_name/storage/folder_01/filename_01&quot;,
        &quot;media/user_name/storage/folder_02/filename_02&quot;,
    ],}
&gt;&gt;&gt; pd.set_option(&quot;display.max_colwidth&quot;,30)
&gt;&gt;&gt; pd.DataFrame(datafile)
&gt;&gt;&gt;
      filename                           path
0  filename_01  media/user_name/storage/fo...
1  filename_02  media/user_name/storage/fo...
&gt;&gt;&gt; pd.set_option(&quot;display.max_colwidth&quot;,100)
&gt;&gt;&gt; pd.DataFrame(datafile)
&gt;&gt;&gt;
      filename                                           path
0  filename_01  media/user_name/storage/folder_01/filename_01
1  filename_02  media/user_name/storage/folder_02/filename_02

# expand_frame_repr 로 table을 one block으로 print 가능</code></pre><h3 id="dataframe-column-attribute-access-and-ipython-completion">DataFrame column attribute access and IPython completion</h3>
<p>✓ column attribute access (column label이 valid Python variable name일때)</p>
<pre><code>&gt;&gt;&gt; df = pd.DataFrame({&quot;foo1&quot;: np.random.randn(5), &quot;foo2&quot;: np.random.randn(5)})
&gt;&gt;&gt; df
&gt;&gt;&gt;
       foo1      foo2
0  1.126203  0.781836
1 -0.977349 -1.071357
2  1.474071  0.441153
3 -0.064034  2.353925
4 -1.282782  0.583787
&gt;&gt;&gt; df.foo1
&gt;&gt;&gt;
0    1.126203
1   -0.977349
2    1.474071
3   -0.064034
4   -1.282782
Name: foo1, dtype: float64</code></pre><p>✓ column이 IPython completion mechanism과 connect될 때</p>
<pre><code>&gt;&gt;&gt; df.foo&lt;TAB&gt;  # noqa: E225, E999
&gt;&gt;&gt;
df.foo1  df.foo2</code></pre><blockquote>
<ul>
<li>참고 자료 및 최종 수정 &gt;&gt;&gt; [2021_12_29]
<a href="https://pandas.pydata.org/docs/user_guide/dsintro.html#dsintro">https://pandas.pydata.org/docs/user_guide/dsintro.html#dsintro</a></li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pandas.Series (1D) - 구조]]></title>
            <link>https://velog.io/@juyoung_ppak/Pandas.Series-1D</link>
            <guid>https://velog.io/@juyoung_ppak/Pandas.Series-1D</guid>
            <pubDate>Wed, 29 Dec 2021 10:46:32 GMT</pubDate>
            <description><![CDATA[<h1 id="★-series-1d">★ Series (1D)</h1>
<p>✓ 1차원의 labeled array이다. 
✓ can holding any data type(integers, strings, floating point numbers, python objects, etc.)
✓ axis label은 <strong>index</strong> 로 나타낸다.
✓ 기본 구조 &gt;&gt;&gt; <code>s = pd.Series(data,index=index)</code>
✓ <code>s = pd.Series(,name = &#39;something&#39;)</code> &gt;&gt; 이걸로 object 생성 가능 (<code>s1 = s.rename(&#39;another&#39;)</code>으로 해서 다른 object 생성 가능)
✓ data는 1.Python dict 2.ndarray 3.scalar value등으로 이뤄진다.</p>
<h2 id="1-python-dict-예시">1. Python dict 예시</h2>
<p>✓ index가 pass되면, 그에 맞는 value도 pull된다</p>
<pre><code>In[] : dict = {&quot;b&quot;:1,&quot;a&quot;:0,&quot;c&quot;:2}
In[] : pd.Series(dict)
Out[] : 
b 1
a 0
c 2
dtype: int64
In[] : pd.Series(dict, index=[&quot;b&quot;,&quot;a&quot;,&quot;d&quot;,&quot;c&quot;])
Out[] : 
b 1
a 0
d NaN
c 2
dtype: int64
s[&quot;a&quot;]
&quot;e&quot; in s
s[&quot;f&quot;]
s.get(&quot;f&quot;)</code></pre><h2 id="2-ndarray-예시">2. ndarray 예시</h2>
<p>✓ data의 길이와 index의 개수가 같아야 한다(ex)<code>s = pd.Series(np.random.randn(5), index={[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;]}</code>
✓ ndarray와 비슷하게 작동됨</p>
<pre><code>s[0] 
s[:3]
s[s &gt; s.median()]
s[[4,3,1]] &gt;&gt;&gt; indexing 부분 더 보기
np.exp(s)</code></pre><p>✓ Series가 ndarray-like일때, 1.actual array를 얻으려면 </p>
<pre><code># 1.actual array 얻으려면
s.array
# 2.actual ndarray 얻으려면
s.to_numpy()</code></pre><h2 id="3-scalar-value-예시">3. scalar value 예시</h2>
<p><code>pd.Series(5.0, index=[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;])</code></p>
<h2 id="000-thinking">000. Thinking</h2>
<p>✓ Series와 ndarray의 key difference (Series는 automatically align the data based on label)</p>
<pre><code>Input[]: s[1:] + s[:-1]
Output[]:
a    NaN
b    -0.565727
c    -3.018117
d    -2.271265
e    NaN</code></pre><blockquote>
<ul>
<li>참고 자료 및 최종 수정 &gt;&gt;&gt; [2021_12_08]
<a href="https://pandas.pydata.org/docs/user_guide/dsintro.html#dsintro">https://pandas.pydata.org/docs/user_guide/dsintro.html#dsintro</a></li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pandas 들어가기]]></title>
            <link>https://velog.io/@juyoung_ppak/Pandas-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@juyoung_ppak/Pandas-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Thu, 02 Dec 2021 10:30:29 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/juyoung_ppak/post/92903ff6-244d-4fc6-8bb7-75d90bd58628/photo-1625510181276-93500201866a.jpeg" alt=""></p>
<h1 id="pandas">Pandas</h1>
<p>: 데이터 분석에 필요한 패키지</p>
<ul>
<li><p>install pandas
<code>pip install pandas</code></p>
</li>
<li><p>import
<code>import pandas as pd</code></p>
</li>
<li><p>version check
<code>pd.__version__</code></p>
</li>
<li><p>object에 data type 지정, indexing, axis labeling/alignment 등을 적용할 수 있다.</p>
</li>
</ul>
<blockquote>
<ul>
<li>참고 자료 및 최종 수정 &gt;&gt;&gt; [2021_12_29]
<a href="https://pandas.pydata.org/docs/user_guide/10min.html#">https://pandas.pydata.org/docs/user_guide/10min.html#</a></li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[0.마음을 새롭게 함으로]]></title>
            <link>https://velog.io/@juyoung_ppak/%EB%A7%88%EC%9D%8C%EC%9D%84-%EC%83%88%EB%A1%AD%EA%B2%8C-%ED%95%A8%EC%9C%BC%EB%A1%9C</link>
            <guid>https://velog.io/@juyoung_ppak/%EB%A7%88%EC%9D%8C%EC%9D%84-%EC%83%88%EB%A1%AD%EA%B2%8C-%ED%95%A8%EC%9C%BC%EB%A1%9C</guid>
            <pubDate>Thu, 02 Dec 2021 09:01:50 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h5 id="시작-----2021_12_02">시작 --- [2021_12_02]</h5>
</blockquote>
<p><img src="https://images.velog.io/images/juyoung_ppak/post/6545c37d-8fd3-4935-83a7-897560b7cf33/simon-english-48nerZQCHgo-unsplash.jpg" alt="">
그 동안 딥러닝, 신호처리 등을 배워오며 어렴풋이 따라갔던 것 같다.
시간에 쫓겨 정신 없이 따라다니며 여러 일들을 경험한 것 같다.
이제와서 생각해보니 내 손에 쥔 것이 없는 것 같다.
앞으로 정리하며 걸음을 걸어야 겠다.</p>
<p>@ 몇개의 platform 을 봤는데 Medium 은 영어라 어렵다... 나중에 꼭 도전해야겠다.</p>
]]></description>
        </item>
    </channel>
</rss>