<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>do-it.log</title>
        <link>https://velog.io/</link>
        <description>Learning Data Science</description>
        <lastBuildDate>Fri, 22 Oct 2021 12:25:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>do-it.log</title>
            <url>https://images.velog.io/images/do-it/profile/a19b9a73-77ed-491c-b9ef-d3429ce3e5d7/스크린샷 2021-10-10 오후 10.06.37.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. do-it.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/do-it" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_04-01. 자료구조_튜플  & 딕셔너리]]></title>
            <link>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B004-01.-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%ED%8A%9C%ED%94%8C-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC</link>
            <guid>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B004-01.-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%ED%8A%9C%ED%94%8C-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC</guid>
            <pubDate>Fri, 22 Oct 2021 12:25:28 GMT</pubDate>
            <description><![CDATA[<h3 id="튜플tuple">튜플(Tuple)</h3>
<ul>
<li>리스트와 비슷하지만 아이템 변경이 불가하다.</li>
</ul>
<h3 id="in-과-not-in-키워드">in 과 not in 키워드</h3>
<ul>
<li>in, not in 키워드를 이용하면 아이템의 존재 유/무를 알 수 있다.</li>
</ul>
<pre><code>studentsTuple = (&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;, &#39;박승철&#39;, &#39;김지은&#39;)
searchName = input(&#39;학생 이름 입력: &#39;) 
print(&#39;studentsTuple: {}&#39;.format(stduentsTupe))

searchName = input(&#39;학생 이름 입력: &#39;_

if searchName in studentsTUple:
    print(&#39;{} 학생은 우리반 학생입니다.&#39;.format(searchName))
else:
    print(&#39;{} 학생은 우리반 학생입니다.&#39;.format(searchName))
</code></pre><h3 id="리스트-vs-튜플">리스트 VS 튜플</h3>
<ul>
<li>리스트에서 사용할 수 있는 extend() 함수를 튜플에서는 사용할 수 없다.<pre><code>studentsTuple1 = [&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;]
studentsTuple2 = [&#39;박승철&#39;, &#39;김지은&#39;, &#39;강호동&#39;]
</code></pre></li>
</ul>
<p>studentList1.extend(studentList2)
print(&#39;studnetList1: {}&#39;.format(studentList1))</p>
<p>-&gt;
studentsList&quot; [&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;, &#39;박승철&#39;, &#39;김지은&#39;, &#39;강호동&#39;]</p>
<pre><code>

### 튜플 슬라이싱
- 원하는 아이템만 뽑아내자!
- 리스트와 마찬가지로 [n:m]을 이요하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
</code></pre><p>students = (&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;, &#39;박승철&#39;, &#39;김지은&#39;)
print(&#39;students[:4]: {}&#39;.format(students[:4]))</p>
<p>numbers = (2, 50, 0.12 1, 9, 7, 17)
print(&#39;numbers: {}&#39;.format(numbers))
print(&#39;numbers[2:4]: {}&#39;.format(nubmers[2:4]))</p>
<pre><code>
- 튜플은 슬라이싱을 이용해서 아이템을 변경할 수 없다.

### 리스트와 튜플 차이점
- 튜플은 리스트와 달리 아이템 추가, 변경, 삭제가 불가하다.
- 튜플은 선언 시 고라호 생량이 가능하다.
- 튜플은 괄호 생략 가능, 콤마를 이용하여 구분하여 선언가능.

### 리스트와 튜플 변환
- 리스트와 튜플은 자료형 변환이 가능하다.


### sorted()
- sorted()함수를 이용하면 튜플도 정렬할 수도 있다.

### for 문을 이용한 조희
- for 문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.
</code></pre><p>cars = &#39;그랜저&#39;, &#39;소나타&#39;, &#39;말리부&#39;, &#39;카니발&#39;, &#39;쏘렌토&#39;
for i in range(len(cars)):
    print(cars[i])</p>
<p>for car in cars:
    print(car)</p>
<pre><code>
### for 문을 이용한 내부 튜플 조희
-for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.
</code></pre><p>cars = &#39;그랜저&#39;, &#39;쏘나타&#39;, &#39;말리부&#39;, &#39;카니발&#39;, &#39;쏘렌토&#39;
for i in rnage(len(cars)):
    print(cars[i])</p>
<p>for car in cars:
    print(Car)</p>
<p>stduentCnts = (1, 19), (2, 20), (3, 22)
for i in range(len(studentCnts)):
    print(&#39;{}학급 학생수: {}&#39;. format(studentCnts[i][0], studentCnts[i][1]))</p>
<p>for classNo, cnt in studentCnts:
    print(&#39;{}학급 학생수: {}&#39;.format(classNo, cnt))</p>
<pre><code>### for 문을 이용한 조회

- for 문과 if 문을 이용해서 과락 과목 출력하기

### 조건문과 함께 사용
- 튜플안의 값을 하나씩 꺼내서 조회</code></pre><p>for subject, score in scores:
    if score &lt; minScore:</p>
<pre><code></code></pre><p>#실습
studentCnts = (1, 18), (2, 19), (3, 23), (4, 21), (5, 20). (6, 22), (7, 17)</p>
<p>minClassNo = 0; maxClassNo = 0
minCnt = 0; maxCnt = 0</p>
<p>for classNo, cnt in studentCnts:
    if minCnt == 0 or minCnt &gt; cnt:
    minClassNo = classNo
    minCnt = cnt</p>
<pre><code>if maxCnt &lt; cnt:
    maxClassNo = classNo
    maxCnt = cnt</code></pre><p>print(&#39;학생 수가 가장 적은 학급의 수&#39;)</p>
<pre><code>
### while 문을 이용한 튜플 아이템 참조!
- while 문을 이용하면 다양한 방법으로 아이템 조회가 가능하다. 
- 튜플의 자료를 검색할 때 for문이 더 많이 쓰이긴 함.

### while 문을 이용한 조회
- while 문과 if 문을 이용해서 과락 과목 출력하기</code></pre><p>while n &lt; len(stduentCnts):
    if minCnt == 0 or minCnt &gt; studentCnts[n][1]:
    minClassNo = studentsCnt[n][0]
    minCnt = studentCnt[n][1]</p>
<pre><code>    if maxCnt &gt; studentCnts[n][1]:
    maxClassNo = studentCnts[n][0]


### Dictionary란?
- key와 value를 이용해서 자료를 관리한다.
- {}를 이용해서 선언하고 &#39;키:값&#39;의 형태로 아이템을 정의한다.</code></pre><p>student = {&#39;s1&#39; : &#39;홍길동&#39;}
            key  : value</p>
<pre><code>***key는 절대 중복되면 안되고 값은 중복되어도 된다. **
key에는 변경이 불가능한 것만 올 수 있다. key와 value에는 숫자, 문자(열), 논리형, 컨테이너 자료형 가능

students = {&#39;&#39;:&#39;&#39;}

### 딕셔너리 조회
- key를 이용해서 value를 조회한다.
</code></pre><p>print(&#39;students[&#39;s1&#39;]:{}&#39;.format(students[&#39;s1&#39;])) </p>
<pre><code>
### get()을 이용한 조회
</code></pre><p>print(students.get(&#39;s1&#39;))</p>
<pre><code>

### Key를 이용해서 아이템을 추가</code></pre><p>&#39;딕셔너리이름[&#39;key&#39;] = &#39;value&#39;</p>
<pre><code>-값을 수정할 수 있다. 
-key : value 는  항상 쌍으로 이뤄져야 한다. 

### key를 이용해서 value 형태로 아이템을 수정한다. 
</code></pre><p>scores = {&#39;kore&#39; :88, &#39;eng&#39;:55, &#39;mat&#39;:85, &#39;sci&#39;:57}
print(f&#39;scores : {scores}&#39;)</p>
<p>minScore = 60
fStr = &#39;F(재시험)&#39;</p>
<p>if scores[&#39;kor&#39;] &lt; minScore: scores[&#39;kor&#39;] = fStr
if scores[&#39;kor&#39;] &lt; minScore: scores[&#39;kor&#39;] = fStr
if scores[&#39;kor&#39;] &lt; minScore: scores[&#39;kor&#39;] = fStr
if scores[&#39;kor&#39;] &lt; minScore: scores[&#39;kor&#39;] = fStr
if scores[&#39;kor&#39;] &lt; minScore: scores[&#39;kor&#39;] = fStr</p>
<p>print(f&#39;scores : {scores}&#39;)</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_ (EDA/웹크롤링) forecast & list]]></title>
            <link>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-EDA%EC%9B%B9%ED%81%AC%EB%A1%A4%EB%A7%81-forecast</link>
            <guid>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-EDA%EC%9B%B9%ED%81%AC%EB%A1%A4%EB%A7%81-forecast</guid>
            <pubDate>Tue, 19 Oct 2021 08:27:37 GMT</pubDate>
            <description><![CDATA[<h3 id="시계열-분석">시계열 분석</h3>
<p>Python 함수</p>
<pre><code>def text_def(a,b):
    return a + b

test_def(2,3)</code></pre><pre><code>
a = 1
def edit_a(i):
    global a
    a = i 

    return a + b

test_def(2,3)</code></pre><p><strong>plot sine wave
y = a sin(2pi ft + t_0) + b</strong>
위 두줄 잘 기억하기</p>
<pre><code>import matplotlib.pyplot as plt 
import numpy as np 
%matplotlib inline 

def plotSinWave(amp, freq, endTime, sampleTime, startTime, bias):
    &quot;&quot;&quot;
    plot sine wave 
    y = a sin(2 pi f t + t_0) + b
    &quot;&quot;&quot;
    time = np.arange(startTime, endTime, sampleTime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias 
</code></pre><pre><code>plt.figure(figsize=(12, 6))
plt.plot(time, result)
plt.grid(True)
plt.xlabel(&quot;time&quot;)
plt.ylabel(&quot;sin&quot;)
plt.title(str(amp) + &quot;*sin(2*pi&quot; + str(freq) + &quot;*t+&quot; + str(startTime) + &quot;)+&quot; + str(bias))
plt.show()</code></pre><pre><code>plotSinWave(2, 1, 10, 0.01, 0.5, 0)</code></pre><p><img src="https://images.velog.io/images/do-it/post/d0a1b986-fbd6-446a-962c-65d1df6758a7/image.png" alt=""></p>
<p>**kwargs #별표 2개가 중요함. keworded arguments</p>
<ul>
<li>sin 함수를 구성하기 위해 필요한 인자들을 def의 입력변수를 받음</li>
</ul>
<pre><code>def plotSinWave(**kwargs):
    &quot;&quot;&quot;
    plot sine wave 
    y = a sin(2 pi f t + t_0) + b
    &quot;&quot;&quot;
    endTime = kwargs.get(&quot;endTime&quot;, 1)
    sampleTime = kwargs.get(&quot;sampleTime&quot;, 0.01)
    amp = kwargs.get(&quot;amp&quot;, 1)
    freq = kwargs.get(&quot;freq&quot;, 1)
    startTime = kwargs.get(&quot;startTime&quot;, 0)
    bias = kwargs.get(&quot;bias&quot;, 0)
    figsize = kwargs.get(&quot;figsize&quot;, (12, 6))</code></pre><pre><code>time = np.arange(startTime, endTime, sampleTime)
result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias 

plt.figure(figsize=(12, 6))
plt.plot(time, result)
plt.grid(True)
plt.xlabel(&quot;time&quot;)
plt.ylabel(&quot;sin&quot;)
plt.title(str(amp) + &quot;*sin(2*pi&quot; + str(freq) + &quot;*t+&quot; + str(startTime) + &quot;)+&quot; + str(bias))
plt.show()</code></pre><pre><code>plotSinWave()</code></pre><p><img src="https://images.velog.io/images/do-it/post/5791dde2-56cb-417e-9ba4-b0b46a3db6b9/image.png" alt=""></p>
<pre><code>plotSinWave(amp=2, freq=0.5, endTime=10)</code></pre><p><img src="https://images.velog.io/images/do-it/post/dcb7b7ca-0d03-40a8-9220-6e089bd70e46/image.png" alt=""></p>
<h3 id="내가-만든-함수를-import-해보자">내가 만든 함수를 import 해보자</h3>
<p>모듈로 만들어서 import할 수 있게하자. </p>
<ul>
<li>.py 파일을 만들기 위해서 vscode를 사용하자. </li>
</ul>
<pre><code>%%writefile ./drawSinWave.py

import numpy as np 
import matplotlib.pyplot as plt 

def plotSinWave(**kwargs):
    &quot;&quot;&quot;
    plot sine wave 
    y = a sin(2 pi f t + t_0) + b
    &quot;&quot;&quot;
    endTime = kwargs.get(&quot;endTime&quot;, 1)
    sampleTime = kwargs.get(&quot;sampleTime&quot;, 0.01)
    amp = kwargs.get(&quot;amp&quot;, 1)
    freq = kwargs.get(&quot;freq&quot;, 1)
    startTime = kwargs.get(&quot;startTime&quot;, 0)
    bias = kwargs.get(&quot;bias&quot;, 0)
    figsize = kwargs.get(&quot;figsize&quot;, (12, 6))

    time = np.arange(startTime, endTime, sampleTime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias 

    plt.figure(figsize=(12, 6))
    plt.plot(time, result)
    plt.grid(True)
    plt.xlabel(&quot;time&quot;)
    plt.ylabel(&quot;sin&quot;)
    plt.title(str(amp) + &quot;*sin(2*pi&quot; + str(freq) + &quot;*t+&quot; + str(startTime) + &quot;)+&quot; + str(bias))
    plt.show()

if __name__ == &quot;__main__&quot;:
    print(&quot;hello world~!!&quot;)
    print(&quot;this is test graph!!&quot;)
    plotSinWave(amp=1, endTime=2)
</code></pre><pre><code>import drawSinWave as dS</code></pre><pre><code>dS.plotSinWave()</code></pre><p><img src="https://images.velog.io/images/do-it/post/c5d17b0d-3a33-4b0d-958b-9c9d42cffca6/image.png" alt=""></p>
<pre><code>dS.plotSinWave(freq=5)</code></pre><p><img src="https://images.velog.io/images/do-it/post/ac4480c3-ef15-433d-a96a-2186c7342909/image.png" alt=""></p>
<h3 id="2-fbprophet-기초">2. Fbprophet 기초</h3>
<pre><code>import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline </code></pre><p><strong>예제1.</strong></p>
<pre><code>#데이터 프레임을 만들기
time = np.linspace(0, 1, 365*2)
result = np.sin(2*np.pi*12*time)
ds = pd.date_range(&quot;2018-01-01&quot;, periods=365*2, freq=&quot;D&quot;)
df = pd.DataFrame({&quot;ds&quot;: ds, &quot;y&quot;: result})
df.head()</code></pre><pre><code>#만든 데이터 프레임 그래프로 확인하기
df[&quot;y&quot;].plot(figsize=(10, 6));</code></pre><p><img src="https://images.velog.io/images/do-it/post/5976960e-2587-44fa-bdb3-fd055c879947/image.png" alt=""></p>
<pre><code>#시계열 데이터 예측을 위한 fbprohet 불러오기 
from fbprophet import Prophet

#학습시키기
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);

#예측하기
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)

#예측한 데이터 그래프로 확인하기
m.plot(forecast);</code></pre><p><img src="https://images.velog.io/images/do-it/post/218134c7-4f39-41b9-b026-711eddf702c9/image.png" alt=""></p>
<h3 id="3-주식-데이터-분석">3. 주식 데이터 분석</h3>
<pre><code>from bs4 import BeautifulSoup
from urllib.request import urlopen, Request

url = &quot;https://finance.yahoo.com/quote/035420.KS/history?p=035420.KS&amp;guccounter=1&quot;
req = Request(url, headers={&quot;User-Agent&quot;: &quot;Chrome&quot;})
page = urlopen(req).read()
soup = BeautifulSoup(page, &quot;html.parser&quot;)
table = soup.find(&quot;table&quot;)
df_raw = pd.read_html(str(table))[0]
df_raw.head()</code></pre><p><img src="https://images.velog.io/images/do-it/post/e6691072-922d-436a-88cd-32fee7ace315/image.png" alt=""></p>
<pre><code># fbprophet을 사용하는 형식에 맞춰준 뒤, 맨 마지막 NaN 값이 있어서 제외 
df_tmp = pd.DataFrame({&quot;ds&quot;: df_raw[&quot;Date&quot;], &quot;y&quot;: df_raw[&quot;Close*&quot;]})
df_target = df_tmp[:-1]
df_target.head()
</code></pre><p><img src="https://images.velog.io/images/do-it/post/b7731ff3-4e76-49da-8c2b-db22ffa8f03d/image.png" alt=""></p>
<pre><code># hardcopy 후, 날짜를 fbprophet이 요구하는 형태로 변형
df = df_target.copy()
df[&quot;ds&quot;] = pd.to_datetime(df_target[&quot;ds&quot;], format=&quot;%b %d, %Y&quot;)
df.head()</code></pre><pre><code>#확인해보니 데이터형 타입 중 object가 있어서 float으로 변경해야한다.
df.info()

# 데이터 프레임에 있는 것을 학습시켜보자
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);

# 학습시킨 데이터를 기반으로 예측해보자
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()

#예측한 데이터를 그래프에서 확인해보자.
plt.figure(figsize=(12, 6))
plt.plot(df[&quot;ds&quot;], df[&quot;y&quot;], label=&quot;real&quot;)
plt.grid(True)
plt.show()</code></pre><p><img src="https://images.velog.io/images/do-it/post/8f91d419-e245-4182-ab18-d17782a40f86/image.png" alt=""></p>
<pre><code>#그래프에서 트렌드를 파악해보자
m.plot_components(forecast);</code></pre><p><img src="https://images.velog.io/images/do-it/post/ca4fcae2-ec02-4558-b872-15166ff31837/image.png" alt=""></p>
<p><strong>예제) KIA 주식 분석</strong></p>
<pre><code># 기아 자동차의 종목코드를 가지고 기간을 입력한다
import yfinance as yf
from pandas_datareader import data 

yf.pdr_override()

start_date = &quot;2010-03-01&quot;
end_date = &quot;2018-02-28&quot;
KIA = data.get_data_yahoo(&quot;000270.KS&quot;, start_date, end_date) #KIA 주식 코드입력, 시작일자, 끝나는 일자

KIA.head()
![](https://images.velog.io/images/do-it/post/8c11f824-11ae-4c07-9c74-3e9349b3c5ba/image.png)

# 종가 데이터를 그래프로 확인해보자
KIA[&quot;Close&quot;].plot(figsize=(12, 6), grid=True);
![](https://images.velog.io/images/do-it/post/c00913d6-138c-4474-95a5-8dcf31d39a4e/image.png)

![](https://images.velog.io/images/do-it/post/63f234c9-c43c-479e-86d1-efb197de7f96/image.png)

# accuracy 확인을 위한 데이터 
KIA_trunc = KIA[:&quot;2017-11-30&quot;]
KIA_trunc.head()
![](https://images.velog.io/images/do-it/post/ec6b4e41-437b-4ac2-bcc2-608bd47fe06b/image.png)

#forecast를 위한 준비
# forecast를 위한 준비 
df = pd.DataFrame({&quot;ds&quot;: KIA_trunc.index, &quot;y&quot;:KIA_trunc[&quot;Close&quot;]})
df.reset_index(inplace=True)
del df[&quot;Date&quot;]
df.head()

![](https://images.velog.io/images/do-it/post/81afd5f3-6c6d-4c5f-8f35-00251b4dc46e/image.png)

#학습시키기
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);

#예측하기
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()

![](https://images.velog.io/images/do-it/post/6b2769ed-29e5-4ef3-bfb1-0cb2adb562df/image.png)

#시각화하기
m.plot(forecast);
![](https://images.velog.io/images/do-it/post/04ac73f9-1177-4e69-9c7e-24c87b02b982/image.png)

#트렌드 파악을 위해 컴포넌츠별로 확인하기
m.plot_components(forecast);</code></pre><p><img src="https://images.velog.io/images/do-it/post/37d38c4e-07ab-4176-a317-d3ffe58add23/image.png" alt=""></p>
<pre><code>plt.figure(figsize=(12, 6))
plt.plot(KIA.index, KIA[&quot;Close&quot;], label=&quot;real&quot;)
plt.plot(forecast[&quot;ds&quot;], forecast[&quot;yhat&quot;], label=&quot;forecast&quot;)
plt.grid(True)
plt.legend()
plt.show()</code></pre><p><img src="https://images.velog.io/images/do-it/post/12c62440-233f-4be1-816f-e4e477ff2c80/image.png" alt=""></p>
<p><strong>예제) 대한항공 주식 분석하기</strong></p>
<pre><code>start_date = &quot;2010-03-01&quot;
end_date = &quot;2018-02-28&quot;
KoreaAir = data.get_data_yahoo(&quot;003490.KS&quot;, start_date, end_date)
KoreaAir.tail()

#위에서 불러온 데이터의 head와 tail을 확인하여 정확하게 불러왔는지 확인한다
![](https://images.velog.io/images/do-it/post/5fb97713-deea-4afd-bdd6-770c5e048a14/image.png)

KoreaAir[&quot;Close&quot;].plot(figsize=(12, 6), grid=True);
![](https://images.velog.io/images/do-it/post/3078a7f9-09d7-4dcd-8a3e-1750467ac43c/image.png)

# accuracy 데이터 분리 
KoreaAir_trunc = KoreaAir[:&quot;2017-11-30&quot;]
KoreaAir_trunc.tail()
![](https://images.velog.io/images/do-it/post/35d71fd8-03db-4296-b20e-d83456ba4f48/image.png)

# forecast를 위한 준비: forecast에 맞는 형식으로 데이터프레임에 넣어준다
df = pd.DataFrame({&quot;ds&quot;: KoreaAir_trunc.index, &quot;y&quot;: KoreaAir_trunc[&quot;Close&quot;]})
df.reset_index(inplace=True)
del df[&quot;Date&quot;]
df.head()
![](https://images.velog.io/images/do-it/post/99d7dd10-cac6-41d9-a252-c4fba80aff8e/image.png)

#학습시켜준다
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df)

#예측해보자
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
forecast[[&quot;ds&quot;, &quot;yhat&quot;, &quot;yhat_lower&quot;, &quot;yhat_upper&quot;]].tail()

#yhat = 예측값
#yhat_lower = 예측에 대한 신뢰구간 하단
#yhat_upper = 예측에 대한 신뢰구간 상단

![](https://images.velog.io/images/do-it/post/8b6a1143-2a9f-45e6-be00-46b3ccd161cb/image.png)

#그래프로 시각화
m.plot(forecast);
![](https://images.velog.io/images/do-it/post/c597bfbc-afe6-4d13-96e9-44dce5295aaf/image.png)

#컴포넌츠별로 그래프
m.plot_components(forecast);
![](https://images.velog.io/images/do-it/post/a772ea2d-3d1b-4a83-aa93-b5c61c4417dd/image.png)

# 실제와 예측값 비교 그래프 
plt.figure(figsize=(12, 6))
plt.plot(KoreaAir.index, KoreaAir[&quot;Close&quot;], label=&quot;real&quot;)
plt.plot(forecast[&quot;ds&quot;], forecast[&quot;yhat&quot;], label=&quot;forecast&quot;)
plt.grid(True)
plt.legend()
plt.show()
![](https://images.velog.io/images/do-it/post/e857428f-026b-40dd-b017-e0fbdd1b5fda/image.png)

</code></pre><h3 id="4-조금-특이한-형태의-데이터에-대한-forecast">4. 조금 특이한 형태의 데이터에 대한 forecast</h3>
<pre><code># Logistic 성장형 그래프를 가진 데이터에 대한 forecast 
df = pd.read_csv(&quot;../data/05_example_wp_R2.csv&quot;, index_col=0)
df[&quot;y&quot;].plot(figsize=(12, 4), grid=True);</code></pre><p><img src="https://images.velog.io/images/do-it/post/629b5d92-c554-43c1-9b10-cc42b633ef31/image.png" alt=""></p>
<p>#cap 컬럼 추가</p>
<pre><code>df[&quot;cap&quot;] = 8.5
df.tail()</code></pre><p><img src="https://images.velog.io/images/do-it/post/97dd07cc-0809-4fca-b8e0-3c90bd4fa9fc/image.png" alt=""></p>
<pre><code>#logistic 함수를 이용하여 예측하기
m = Prophet(growth=&quot;logistic&quot;, daily_seasonality=True)
m.fit(df);


future = m.make_future_dataframe(periods=1826)
future[&quot;cap&quot;] = 8.5 
forecast = m.predict(future)
m.plot(forecast);</code></pre><p><img src="https://images.velog.io/images/do-it/post/3399cddc-2438-4381-8b28-b2d8a8652711/image.png" alt=""></p>
<h3 id="5-비트코인-데이터-fbprophet으로-분석하기">5. 비트코인 데이터 fbprophet으로 분석하기</h3>
<pre><code>import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import time 

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup
from fbprophet import Prophet

%matplotlib inline 

url = &quot;https://bitcoincharts.com/charts/bitstampUSD#rg730ztgSzm1g10zm2g25zv&quot;
driver = webdriver.Chrome(&quot;../driver/chromedriver&quot;)
driver.get(url)

# 스크롤 
xpath = &#39;//*[@id=&quot;content_chart&quot;]/div/div[2]/a&#39;
variable = driver.find_element_by_xpath(xpath)
driver.execute_script(&quot;return arguments[0].scrollIntoView();&quot;, variable)
variable.click()

#BeautifulSoup사용해서 태그
html = driver.page_source
soup = BeautifulSoup(html, &quot;html.parser&quot;)
table = soup.find(&quot;table&quot;, &quot;data&quot;)
table

driver.quit() 

#테이블 불러오기
df = pd.read_html(str(table))
bitcoin = df[0]
bitcoin.head()

![](https://images.velog.io/images/do-it/post/ecc44e12-0d7d-458b-8803-40e07301293e/image.png)

#저장하기
bitcoin.to_csv(&quot;../data/05_bitcoin_history.csv&quot;, sep=&quot;,&quot;) # sep옵션을 사용하여 띄어쓰기(공백) 말고 다른 문자를 넣을 수 있도록 할 수 있습니다.

bitcoin = pd.read_csv(&quot;../data/05_bitcoin_history.csv&quot;, index_col=0)
bitcoin.tail()

# 분석하고 싶은 항목(Close)만 가지고, Prophet 적용 

df = pd.DataFrame({&quot;ds&quot;: bitcoin[&quot;Timestamp&quot;], &quot;y&quot;: bitcoin[&quot;Close&quot;]})
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);

# 향후 30일간의 forecast
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
m.plot(forecast);

![](https://images.velog.io/images/do-it/post/5631cd86-c4a7-42e8-85ac-ecd33fd253ad/image.png)

# 트렌드 파악하기
m.plot_components(forecast);

![](https://images.velog.io/images/do-it/post/86319f0d-542d-4235-82b0-75487068a032/image.png)</code></pre><h1 id="list에-아이템-추가">list에 아이템 추가</h1>
<pre><code>students = [&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;, &#39;박승철&#39;, &#39;김지은&#39;]
print(&#39;students : {}&#39;. format(students))
print(&#39;students length : {}&#39;.format(len(students)))
print(&#39;last index : {}&#39;.format(len(students)-1))

students.append(&#39;강호동&#39;)
print(&#39;students : {}&#39;. format(students))
print(&#39;students length : {}&#39;.format(len(students)))
print(&#39;last index : {}&#39;.format(len(students)-1))


scores = [[&#39;국어&#39;, 88],
          [&#39;영어&#39;, 91]]</code></pre><pre><code>
print(&#39;scores : {}&#39;. format(scores))
print(&#39;scores length : {}&#39;.format(len(scores)))
print(&#39;last index : {}&#39;.format(len(scores)-1))

#과목별 점수 따로 따로
for subject, score in scores:
    print(&#39;과목: {}, 점수: {}&#39;.format(subject, score))

#리스트 append는 리스트 형식 그대로 추가됨
myFamilyAge = [[&#39;아빠&#39;, 40], [&#39;엄마&#39;, 38], [&#39;나&#39;, 9]]
print(myFamilyAge)

myFamilyAge.append([&#39;동생&#39;, 1])
print(myFamilyAge)

for name, age in myFamilyAge:
    print(&#39;{} : {}&#39;.format(name, age))</code></pre><h2 id="특정-위치에-아이템을-추가하는-방법">특정 위치에 아이템을 추가하는 방법</h2>
<ul>
<li>insert()함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다. 해당 인덱스 위치에 있는 아이템은 뒤로 밀려난다.</li>
</ul>
<pre><code>students.insert(3, &#39;홍길동&#39;)</code></pre><pre><code>#오름차순으로 정렬되어 있는 숫자들 사이에 추가
numbers = [1, 3, 6, 11, 45,  54, 62, 74, 85]
inputNumber = int(input(&#39;숫자 입력: &#39;))

insertIdx = 0

for idx, number in enumerate(numbers):
    print(idx, number)

    if insertIdx == 0 and inputNumber &lt; number:
        insertIdx = idx

numbers.insert(insertIdx, inputNumber)
print(&#39;numbers : {}&#39;.format(numbers))</code></pre><h2 id="리스트의-아이템을-삭제">리스트의 아이템을 삭제</h2>
<ul>
<li>pop()함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있다.</li>
</ul>
<pre><code>- pop(3)  #3번째 인덱스 삭제. 4번째 인덱스가 한칸씩 자동으로 앞으로 밀려온다. 
</code></pre><pre><code>studentsA = [&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;, &#39;박승철&#39;, &#39;김지은&#39;, &#39;강호동&#39;]
print(&#39;studentsA : {}&#39;.format(studentsA))
print(&#39;studentsA length: {}&#39;.format(len(studentsA)))

studentsA.pop()
print(&#39;studentsA: {}&#39;.format(studentsA))
print(&#39;students length: {}&#39;.format(len(studentsA)))


studentsA = [&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;, &#39;박승철&#39;, &#39;김지은&#39;, &#39;강호동&#39;]
print(&#39;studentsA : {}&#39;.format(studentsA))
print(&#39;studentsA length: {}&#39;.format(len(studentsA)))

#제거된 인덱스 = rValue
rValue = studentsA.pop(3)
print(&#39;rValue: {}&#39;.format(rValue))

</code></pre><p>-
**하나의 ‘강호동’ 데이터만 삭제</p>
<pre><code>students.remove(‘강호동’) </code></pre><pre><code>#여러개의 ‘강호동’데이터를 삭제하고 싶은 경우
While ‘강호동’ in students:
    students.remove(‘강호동’)</code></pre><p>-</p>
<pre><code>removeItem = input(‘t삭제 대상 입력: ‘)
While 문</code></pre><p>-
extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결할 수 있다.
덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.</p>
<pre><code>group1.extend(group2)
#group 1에 group2가 추가됨</code></pre><p>-
두 리스트가 더해져서 새로운 리스트가 됨 (겹치는 숫자 모두 추가)</p>
<pre><code>addList = myFavoriteNumbers + friendFavoriteNumbers</code></pre><pre><code>Result = []
For number in addList:
    if number not in result:
        result.append(number)
print(‘result: {}’.format(result))</code></pre><p>—
<strong>리스트 연결(확장)</strong>
-sort() 함수를 이용하면 아이템을 정렬</p>
<pre><code>내림차순 : 변수이름.sort(reverse=True)
오름차순 : 변수이름.sort(True)</code></pre><p>-</p>
<p>아이템 순서 뒤집기 (순서가 앞 뒤로 바뀜)</p>
<pre><code>reverse()</code></pre><p>-
슬라이싱 - 원하는 아이템만 뽑는 것
음수를 사용하면 뒤에서 카운트하여 시작
[-5:-2] </p>
<p>뒤에서 5번째부터 뒤에서 3번째까지  ( -2는 -3부터 카운트)</p>
<p>문자열도 슬라이싱이 가능하다.</p>
<p>슬라이싱할때 단계를 설정할 수 있다.
[2:-2:2] = 앞에서 두번째포함하여 시작. 하나 건너뛰고 그다음꺼 포함</p>
<p>슬라이싱을 이용해서 아이템을 변경할 수 있다.
Students[1:4] = [‘park chance’, ‘lee yonggyu’, ‘gang hodong’</p>
<p>앞에서 2번째부터 3번째까지 슬라이스해서 대체. 해당 슬라이스에 들어가는 아이템이 3가지이지만 들어갈 문자는 2개면 그대로 3개 사라지고 2개만 추가</p>
<p>길이는 아이템 수
숫자 하나이면 해당 숫자앞까지 슬라이싱</p>
<p>-
리스트의 나머지 기능들(1)
리스트도 곱셈 연산이 가능하다.
아이템이 3개이고 곱셈연산(ㅇㅖ, *2)를 줄경우 아이템 3개가 뒤에 한번 더 추가된다.</p>
<p>특정 아이템의 인덱스를 찾자.</p>
<p>index(item)함수를 사용하면 item의 인덱스를 알아낼 수 있다.</p>
<pre><code>searchIdx = students.index(‘강호동’, 2, 6) #리스트안에 3번째와 5번째 사이에서의 강호동의 인덱스


count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.
count(‘강호동’)


del students[index값] #인덱스 위치의 아이템 삭제 여러개인경우 하나만 삭제됨

del students[1:4] #인덱스 1-3사이가 삭제됨
del students[2: ] #인덱스 1까지 빼고 다 삭제됨</code></pre><pre><code>import random
sampleList = random.sample(Range(1,11),10) #10개 중에 1,11사이의 수</code></pre><p><strong>실습</strong></p>
<pre><code>import random

types = [&#39;A&#39;, &#39;B&#39;, &#39;AB&#39;, &#39;0&#39;]
todayData = []
typeCnt = []

for i in range(100): #for문이 100번 돌도록
    type = types[random.randrange(len(types))]
    #무작위로 뽑기위해 랜덤사용. types의 갯수 만큼 = len
    todayData.append(type)

print(&#39;todayData: {}&#39;.format(todayData))
print(&#39;todayData: {}&#39;.format(len(todayData)))

#혈액형 종류가 몇개인지
for type in types:
    print(&#39;{}형 : {}개&#39;.format(type, todayData.count(type)))
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_ 파이썬 기초 04_01. 자료구조]]></title>
            <link>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-0401.-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-0401.-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Sat, 16 Oct 2021 15:14:09 GMT</pubDate>
            <description><![CDATA[<h2 id="chapter-04_001-자료구조란">Chapter 04_001. 자료구조란?</h2>
<ul>
<li>여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료 구조라고 한다. </li>
</ul>
<h3 id="다양한-자료-구조">다양한 자료 구조</h3>
<ul>
<li>자료구조는 각가의 컨테이너 자료형에 따라서 차이가 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트(list), 튜플(Tuple), 딕셔너리(Dic), 셋트(Set)가 있다.</li>
</ul>
<p>-list = 안에 있는 데이터를 언제든지 바꿀 수 있음
-Tuple = 안에있는 데이터를 바꿀 수 없음
-Dic = key value로 이뤄짐
-Set = 중복된 데이터가 허용되지 않음</p>
<pre><code>student 1 = &#39;홍길동&#39; #단일데이터; 따로 데이터 관리
student 2 = &#39;박찬호&#39;
student 3 = &#39;이용규&#39;

#하나씩 관리하던 것을 리스트로 관리한다.
#list
students = [&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;]
#각각의 데이터를 구분하기위해 콤마를 사용, 변수명 복수형, 시각적으로 코드를 판독하는데 도움이 된다.

print(students)
print(type(students))

#Tuple
students = (&#39;홍길동&#39;, &#39;박찬호&#39;, &#39;이용규&#39;)
print(students)
print(type(students))

#Dic
#key와 value를 구분할 때 콜른을 이용
scores = {&#39;kor&#39;:95, &#39;eng&#39;:80, &#39;mat&#39;:100}

print(scores)
print(type(scores))

#set
allSales = {100, 200, 200, 300}
print(allSales)
print(type(allSales))

#컨테이너 자료형을 for문에 넣을 수있음
for student in students:
    print(student)</code></pre><h3 id="list">List</h3>
<ul>
<li>배열과 같이 여러 개의 데이터를 나열한 자료 구조</li>
<li>[] 을 이용해서 선언하고, 데이터 구분은 , 를 이용한다.</li>
<li>숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있다.</li>
</ul>
<pre><code>students = [&#39;홍길동&#39;, &#39;이용규&#39;, &#39;3.14&#39;] #&#39;홍길동&#39; = 아이템(요소)</code></pre><ul>
<li>리스트에 또 다른 컨테이너 자료형 데이터를 저장할 수도 있다.<pre><code>datas = [10, 20, 30, [40, 50]]</code></pre></li>
</ul>
<h3 id="index">Index</h3>
<ul>
<li>인덱스란 아이템에 자동으로 부여되는 번호표</li>
<li>번호표는 무조건 0에서부터 시작한다.</li>
<li>하나 하나의 데이터에 접근하고 싶을 경우 인덱스를 이용하면 된다. </li>
</ul>
<pre><code>students = [&#39;박찬호&#39;, &#39;홍길동&#39;, &#39;이용규&#39;]
print(students[0])
print(students[1])

input:
numbers = [10, &#39;20&#39;, 3.2]

print(type(numbers))
print(type(numbers[0]))
print(type(numbers[1]))

outcome:
&lt;class &#39;list&#39;&gt;
&lt;class &#39;int&#39;&gt;
&lt;class &#39;str&#39;&gt;

#for문을 이용하여 짝수 인덱스 구분
students = [&#39;박찬호&#39;, &#39;홍길동&#39;, &#39;이용규&#39;, &#39;김철수&#39;]

for i in range(5):
    if i % 2 == 0:
        print(&#39;students[{}]: {}&#39;.format(i, students[i])
    else:
        print(&#39;students[{}]: {}&#39;.format(i, students[i])</code></pre><h3 id="아이템-개수">아이템 개수</h3>
<ul>
<li>리스트 길이란 리스트에 저장된 아이템의 개수를 뜻한다.</li>
</ul>
<pre><code>students = [&#39;박찬호&#39;, &#39;홍길동&#39;, &#39;이용규&#39;, &#39;김철수&#39;]

print(len(students))</code></pre><pre><code>students = [&#39;박찬호&#39;, &#39;홍길동&#39;, &#39;이용규&#39;, &#39;김철수&#39;]

for i in range(5):
    print(student[1])

#리스트가 길 경우 셀수 없으니
for i in range(len(students)):
    print(students[i])</code></pre><pre><code>#while 문 사용: length = 5보다 작은 index 만 출력:</code></pre><pre><code>students = [&#39;박찬호&#39;, &#39;홍길동&#39;, &#39;이용규&#39;, &#39;김철수&#39;, &#39;이지영&#39;]

n = 0
slength = len(students)
while n &lt; slength:
    print(&#39;n : {}&#39;.format(n))
    print(&#39;students[{}] : {}&#39;.format(n, students[n]))
    n += 1</code></pre><p>-len 함수는 문자열에도 쓰인다. 공백도 포함해서 계산.</p>
<p>#변수명과 item 이용하면 한번에 모두 출력됨</p>
<pre><code>input:
students = [&#39;박찬호&#39;, &#39;홍길동&#39;, &#39;이용규&#39;, &#39;김철수&#39;, &#39;이지영&#39;]

for item in students:
    print(item)</code></pre><p>output:
박찬호
홍길동
이용규
김철수
이지영</p>
<h3 id="while-문">while 문</h3>
<pre><code>minScore = 60

scores = [[&#39;국어&#39;, 58],
          [&#39;영어&#39;, 70],
          [&#39;수학&#39;, 88],
          [&#39;과학&#39;, 98],
          [&#39;국사&#39;, 52]]

n = 0 #n번째 아이
while n &lt; len(scores):
    if scores[n][1] &lt; minScore: #n번째 아이템의 첫번째 index
        print(&#39;과락 과목: {}, 점수: {}&#39;.format(scores[n][0], scores[n][1]))</code></pre><pre><code>n += 1 #무한반복 빠지지않도록</code></pre><h4 id="continue-">continue :</h4>
<pre><code>minScore = 60

scores = [[&#39;국어&#39;, 58],
          [&#39;영어&#39;, 70],
          [&#39;수학&#39;, 88],
          [&#39;과학&#39;, 98],
          [&#39;국사&#39;, 52]]

n = 0
while n &lt; len(scores):
    if scores[n][1] &gt;= minScore:
       n += 1
       continue

    print(&#39;과락 과목: {}, 점수: {}&#39;.format(scores[n][0], scores[n][1]))
    n += 1</code></pre><h3 id="enumerate함수">enumerate()함수</h3>
<ul>
<li>enumerate()함수를 이용하면 아이템을 열거할 수 있다.</li>
</ul>
<pre><code>sports = [&#39;농구&#39;, &#39;수구&#39;, &#39;축구&#39;, &#39;마라톤&#39;, &#39;테니스&#39;]

for i in range(len(sports)):
    print(&#39;{} : {}&#39;.format(i, sports[1]))

#위와 같은 기능을 아래와 같은 코드로 동일하게 사용할 수 있다.

for idx, value in enumerate(sports):
    print(&#39;{} : {}&#39;.format(idx, valeu))


-enumerate()는 문자열에도 적용할 수 있다.

sports = [&#39;농구&#39;, &#39;수구&#39;, &#39;축구&#39;, &#39;마라톤&#39;]

for i in range(len(sports()))
    print(&#39;{} : {}&#39;.format(idx, value))
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_ 파이썬 기초 03-01.기초수학]]></title>
            <link>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4%ED%8C%8C%EC%9D%B4%EC%8D%AC%EA%B8%B0%EC%B4%88%EA%B8%B0%EC%B4%88-%EC%88%98%ED%95%99</link>
            <guid>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4%ED%8C%8C%EC%9D%B4%EC%8D%AC%EA%B8%B0%EC%B4%88%EA%B8%B0%EC%B4%88-%EC%88%98%ED%95%99</guid>
            <pubDate>Tue, 12 Oct 2021 12:10:11 GMT</pubDate>
            <description><![CDATA[<h4 id="01_약수">01_약수</h4>
<ul>
<li>어떤 수를 나누어떨어지게 하는 수<h4 id="02_소수">02_소수</h4>
</li>
<li>1과 자신만을 약수로 가지는 수(단, 1은 제외)</li>
</ul>
<p>실습</p>
<ul>
<li>1과 30까지 숫자 중 5로 나눈 몫과 나머지가 모두 소수인 숫자들을 찾아보자</li>
<li>1부터 30까지의 숫자 중 소수를 찾아보자.</li>
</ul>
<h4 id="파이썬을-이용해서-약수와-소수를-찾아보자">파이썬을 이용해서 약수와 소수를 찾아보자</h4>
<ul>
<li>파이썬을 이용해서 사용자가 입력한 숫자의 약수를 출력해보자.<pre><code>inputNumber = int(input(&#39;0보다 큰 정수 입력: &#39;))
</code></pre></li>
</ul>
<p>for number in range(1, inputNumber + 1):
    if inputNumber % number == 0:
        print(&#39;{}의 약수: {}&#39;.format(inputNumber, number))</p>
<pre><code>
- 파이썬을 이용해서 사용자가 입력한 숫자의 소수를 출력해보자.</code></pre><p>inputNumber = int(input(&#39;0보다 큰 정수 입력: &#39;))
for number in range(2, inputNumber + 1):
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False
            break
        if flag:
            print(&#39; {} : 소수!!&#39;.format(number))
        else:
            print(&#39; {} : 합성수!!&#39;.format(number))</p>
<pre><code>
#### 03_소인수
- 약수(인수) 중에서 소수인 숫자를 소인수라고 한다.
20의 약수(인수) 
-&gt; 1, 2, 4, 5, 10, 20
-&gt; 2, 5 = 소수 -&gt; 소인수

12의 소인수?
(1, 2, 3, 4, 6, 12) -&gt; (2,3)
36의 소인수?
(1, 2, 3, 4, 9, 12, 18, 36) -&gt; (2,3)
25의 소인수?
(1, 5, 20) -&gt; (5)
41의 소인수?
(1, 41) -&gt; (41)

#### 03_소인수분해
- 1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 한다.
20의 소인수분해
-&gt; 2 * 10 (#소수의 곱)
-&gt; 2 * 2 * 5
-&gt; 2^2 * 5

#### 소인수분해와 약수
- 소인수분해를 이용해서 약수를 정확하고 쉽게 구한다.
1, 2, 4, 5, 10, 20

#### 소인수분해(파이썬)
- 수를 소인수의 곱으로 나타내자
</code></pre><p>inputNumber = int(input(&#39;1보다 큰 정수 입력: &#39;))
#연산을 해야하기 때문에 int에 담고 inputNumber 변수에 담는다.</p>
<p>n = 2
while n &lt;= inputNumber:
    if inputNumber % n == 0:
        print(&#39;소인수: {}&#39;.format(n))
        inputNumber /= n</p>
<pre><code>else:
    n += 1</code></pre><pre><code></code></pre><p>inputNumber = int(input(&#39;1보다 큰 정수 입력: &#39;))</p>
<p>n = 2
searchNumbers = [] #list, 여러 데이터 저장
while n &lt;= inputNumber:
    if inputNumber % n == 0:
        print(&#39;소인수: {}&#39;.format(n))
        if searchNumbers.count(n)
            searchNumbers.append(n)
        elif searchNumbers.count(n) == 1:
        inputNumber /= n</p>
<pre><code>else:
    n += 1</code></pre><p>print(&#39;searchNumbers: {}&#39;.format(searchNumbers))</p>
<pre><code>
#### 05_최대공약수

**공약수**
- 두 개 이상의 수에서 공통된 약수를 공약수라고 한다.
 - 12의 약수 -&gt; 1, 2, 3, 4, 6, 12
 - 20의 약수 -&gt; 1, 2, 4, 5, 10, 20 
 - 공약수 -&gt; 1, 2, 4
 - 최대공약수(공통된 값 중에 가장 큰 값) -&gt; 4

 소인수분해를 이용하면 최대공약수 및 공약수를 구할 수 있다. 
 좀 더 편리하게 최대공약수를 구하는 방법. 소수로 나눗셈하자.

 #### 06_최대공약수 (파이썬)</code></pre><ul>
<li>두 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성하자
num1 = int(input(&#39;1보다 큰 정수 입력: &#39;))
num2 = int(input(&#39;1보다 큰 정수 입력: &#39;))</li>
</ul>
<p>for i in range(1, (num1 + 1)):
    if num1 % i == 0 and num2 % i == 0
        print(&#39;공약수: {}&#39;. format(i))
        maxNum = i</p>
<p> print(&#39;최대공약수: {}&#39;.format(maxNum)) </p>
<pre><code>
 **유클리드 호제법**
 - 유클리드 호제법을 이용해서 최대공약수를 구할 수 있다.
 - 나머지가 0일 때까지 나눗셈한다.</code></pre><p>num1 = int(input(&#39;1보다 큰 정수 입력: &#39;))
num2 = int(input(&#39;1보다 큰 정수 입력: &#39;))</p>
<p>temp1 = num1
temp2 = num2</p>
<p>while temp2 &gt; 0:
    temp = temp2
    temp2 = temp1 % temp2
    temp1 = temp</p>
<p>print(&#39;{}, {}의 최대공약수: {}&#39;.format(num1, num2, temp1))</p>
<pre><code>
 #### 07_최소공배수

 공배수
 - 두 개 이상의 수에서 공통된 배수를 공배수라고 한다.

 3의 배수: 3, 6, 12, 15, 18. 21, 24, 27, 30
 5의 배수: 5, 10, 15, 20, 25, 30

 공배수: 15, 30 --
 최소공배수: 15

 소인수분해를 이용하면 최소공배수를 구할 수 있다. 
 좀 더 편리하게 최소공배수 구하는 방법! 소수로 나눗셈 하자!

  #### 08_최소공배수(파이썬)
  - 두 개의 수를 입력하면 최소공배수를 출력하는 코드를 작성하자.</code></pre><p>num1 = int(input(&#39;1보다 큰 정수 입력: &#39;))
num2 = int(input(&#39;1보다 큰 정수 입력: &#39;))
maxNum = 0</p>
<p>for i in range(1, (num1 + 1)):
    if num1 % i == 0 and num2 % i == 0:
        print(&#39;공약수: {}&#39;. format(i))
        maxNum = i</p>
<p> print(&#39;최대공약수: {}&#39;.format(maxNum))</p>
<p> minNum = (num1 * num2) // maxNum
 print(&#39;최소공배수: {}&#39;.format(maxNum))</p>
<pre><code>
  #### 09_진법
  생활에서 사용하는 10진법 외에 프로그램에서 사용하는 다양한 진법에 대해서 살펴보자!
  진법이란 특정 숫자 몇 개를 사용하여 수를 표시하는 방법이다.

  - 2진법 : 0, 1
  - 8진법: 0, 1, 2, 3, 4, 5, 6, 7
  - 10진법: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9


  #### 09_진법(파이썬)
  파이썬을 이용한 진법 변환!
  10진수 -&gt; 2진수, 8진수, 16진수
  binary:bin() 
  print(&#39;2진수: {}&#39;.format(bin(dNum))))

  octal:oct()
  print(&#39;8진수: {}&#39;.format(oct(dNum))))


  X진수 -&gt; 10진수
  print(&#39;2진수(0b11110) -&gt; 10진수({})&#39;.format(int(&#39;0b11110&#39;, 2)))


 #### 010_수열
 수열이란? 
 - 규칙성을 가지고 나열되어 있는 수들
 - 일반항 *n의 정의역 자연수

 항들의 합과 항의 관계
 - 특정항은 특정한까지의 합에서 특정항 이전의 항까지의 합과 같다.

  #### 011_등차수열
  등차 수열 규칙성을 이용해서 일반항을 구할 수 있다.

  등차 중항
  - 연속된 세 항에서 가운데 항

  등차 수열의 합
  - 규칙성을 이용해서 모든 항들의 총합을 구할 수 있다.

  #### 012_등차수열(파이썬)
  다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.</code></pre><p>inputN1 = int(input(&#39;a1 입력: &#39;))
inputD = int(input(&#39;공차 입력: &#39;))
inputN = int(input(&#39;n 입력: &#39;))</p>
<p>valueN = 0
n= 1
while n &lt;= inputN:
    if n == 1:
    valueN = inputN1
    print(&#39;{}번째 항의 값: {}&#39;.format(n, valueN))
    n += 1
    continue</p>
<p> valueN += inputD
 print(&#39;{}번째 항의 값: {}&#39;.format(n, valueN))</p>
<pre><code>
#### 015_등비수열
- 연속된 두 항의 비가 일정한 수열

등비 수열의 합
- 규칙성을 이용해서 모든 항들의 총합을 구할 수 있다.

#### 016_등비수열(파이썬)</code></pre><p>inputN1 = int(input(&#39;a1 입력: &#39;))
inputR = int(input(&#39;공비 입력: &#39;))
inputN = int(input(&#39;n 입력: &#39;))</p>
<p>valueN = 0
n = 1
while n &lt;= inputN:
if n == 1:
valueN= inputN1
print(&#39;{}번째 항의 값: {}&#39;.format(n,valueN)
n += 1
continue </p>
<p>valueN = valueN * inputR
n += 1</p>
<p>#an = a1 * r^(n-1)
valueN = inputN1 * (inputR &amp;&amp; (inputN -1))</p>
<pre><code>
#### 018_시그마
-시그마란 수열의 합을 나타내는 기호이다.
</code></pre><p>inputN1 = int(input(&#39;ai 입력: &#39;))
inputR = int(input(&#39;공비 입력: &#39;))
inputN = int(input(&#39;n 입력: &#39;))</p>
<p>valeuN = inputN1 + (inputN - 1) inputD
sumN - inputN * (inputN1 + valueN) / 2
pritn(&#39;{}번째 항까지의 합: {}&#39;.format(inputN, int(sumN))) </p>
<p>```</p>
<h4 id="019_계차-수열">019_계차 수열</h4>
<p>-두 항의 차로 이루어진 또 다른 수열
-계차 수열을 이용해서 수열의 일반항을 구할 수 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_ 02-01. 파이썬 기초_반복문]]></title>
            <link>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-01%EB%B0%98%EB%B3%B5%EB%AC%B8</link>
            <guid>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-01%EB%B0%98%EB%B3%B5%EB%AC%B8</guid>
            <pubDate>Sun, 10 Oct 2021 12:49:39 GMT</pubDate>
            <description><![CDATA[<h2 id="반복문">반복문</h2>
<ul>
<li>반복문이란 특정 실행을 반복하는 것</li>
<li>반복문을 사용하면 프로그래밍이 간결하고 유지 보수가 쉽다.</li>
</ul>
<h4 id="예시">예시</h4>
<ul>
<li>대량 메일, 문자 발송</li>
<li>인사말 반복</li>
</ul>
<pre><code>for i in range(1, 10):
    print(&#39;{} * {} = {}&#39;. format(2, 1, (2*1)))</code></pre><h4 id="반복문-종류">반복문 종류</h4>
<ul>
<li>횟수에 의한 반복<ul>
<li>횟수 지정 -&gt; 횟수 만큼 반복 실행</li>
</ul>
</li>
</ul>
<pre><code>for i in range(100):
    print(&#39;i -&gt; {}&#39;.format(1)) #회원 100명한테 메일 발송하는 경우</code></pre><ul>
<li>조건에 의한 반복<ul>
<li>조건 지정 -&gt; 조건에 만족할 때까지 반복 실행</li>
</ul>
</li>
</ul>
<pre><code>num = 0
while (num &lt; 10):
    print(&#39;num -&gt; {}&#39;.format(num))
    num +=1 #실내온도 26도 까지 에어컨 작동</code></pre><h4 id="횟수에-의한-반복-이란">횟수에 의한 반복 이란?</h4>
<ul>
<li>정해 놓은 반복 횟수에 따라 반복 실행한다.<ul>
<li>대량 메일 또는 문자 발송</li>
<li>인사말 반복</li>
<li>mp3 반복 재생</li>
</ul>
</li>
<li>횟수에 의한 반복은 for문이 주로 사용된다.</li>
</ul>
<pre><code>for i in range(5):
    print(&#39;Hell0~&#39;) #실행문</code></pre><pre><code>for J in range(10):
    result = 7 * j
    print(&#39;{} * {} = {}&#39;. format(7, j, result))</code></pre><h4 id="반복-범위-설정range함수">반복 범위 설정(range()함수)</h4>
<ul>
<li>range() 기본 사용 방법</li>
</ul>
<pre><code>for i in range(1, 11, 1): #1부터 10까지 1씩 증가 하면서 반복
for i in range(0, 10, 2): #0부터 9까지 2씩 증가 하면서 반복
for i in range(5, 10, 1): #5부터 9까지 1씩 증가 하면서 반복</code></pre><h4 id="조건에-의한-반복이란">조건에 의한 반복이란?</h4>
<ul>
<li>조건에 만족하면 반복 실행한다. 그렇지 않으면 반복을 중단한다.</li>
<li>조건에 의한 반복은 while 문이 주로 사용된다.</li>
</ul>
<pre><code>endNum = 10
n = 10

while n &lt;= endNum: #n 이 10이하 이면 반복실행
    print(n)
    n += 1</code></pre><h4 id="무한루프">무한루프</h4>
<ul>
<li>반복문을 빠져나올 수 없는 경우를 무한루프라고 한다.</li>
<li>while 문에서 조건식의 결과가 항상 True인 경우</li>
</ul>
<p>n = 1
while n &lt; 10:
    print(&#39;Hello!&#39;)
    n += 1</p>
<p><strong>무한루프를 빠져나오는 방법:</strong></p>
<pre><code>flag = Tue
num = 0

while flag:
    num += 1
    sum += sum
    print(&#39;{}까지의 합: {}&#39;.format(num, sum))

    if sum &gt;= 10000:
    flag = False</code></pre><h4 id="continue-키워드">continue 키워드</h4>
<ul>
<li>반복 실행 중 continue를 만나면 실행을 생략하고, 다음 반복 실행문으로 넘어간다.</li>
</ul>
<pre><code>for i in range(100):
    if i % 7 != 0:
        continue
    print(&#39;{}는 7의 배수입니다.&#39;.format(i))</code></pre><h4 id="else의-실행문은-반복문이-종료된-후-실행된다">else의 실행문은 반복문이 종료된 후 실행된다.</h4>
<pre><code>cnt = 0
for i in range(100): 
    if i % 7 != 0:
        continue
    print(&#39;{}는 7의 배수입니다.&#39;.format(i))
    cnt += 1

else:
    print(&#39;99까지의 정수 중 7의 배수는 {}개입니다.&#39;.format(cnt))
</code></pre><h4 id="반복문-제어break">반복문 제어(break)</h4>
<ul>
<li>실행을 중단하고 반복문을 빠져나온다.</li>
</ul>
<pre><code>num = 0
while True:
    print(&#39;Hello~&#39;)

    num += 1
    if (num &gt;= 5):
        break 

print(&#39;The End!&#39;)</code></pre><h4 id="중첩-반복문">중첩 반복문</h4>
<ul>
<li>반복문안에 또 다른 반복문을 선언한다.</li>
</ul>
<pre><code>for i in range(1, 10):
    for j in range(i): #또 다른 반복문
        print(&#39;*&#39;, end=&#39;&#39;)
        print()</code></pre><h4 id="출처">출처</h4>
<p><a href="https://zero-base.co.kr/event/1st_ds_nklcb">https://zero-base.co.kr/event/1st_ds_nklcb</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_ 02-01. 파이썬 기초_연산자 & 조건문]]></title>
            <link>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88%EC%97%B0%EC%82%B0%EC%9E%90-%EC%A1%B0%EA%B1%B4%EB%AC%B8</link>
            <guid>https://velog.io/@do-it/%EC%A0%9C%EB%A1%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88%EC%97%B0%EC%82%B0%EC%9E%90-%EC%A1%B0%EA%B1%B4%EB%AC%B8</guid>
            <pubDate>Fri, 08 Oct 2021 12:43:31 GMT</pubDate>
            <description><![CDATA[<h3 id="연산자---산술-연산자덧셈-뺄셈">연산자 - 산술 연산자(덧셈, 뺄셈)</h3>
<h4 id="연산자란">연산자란?</h4>
<ul>
<li>result = data1 + data2</li>
<li>data1 = 피연산자</li>
</ul>
<h4 id="연산자-종류">연산자 종류</h4>
<ul>
<li>산술 연산자: +, -, <em>, /, %, //, *</em></li>
<li>할당 연산자: =, +=, -=, *=, /=, %=, //=,</li>
<li>비교 연산자: &gt;, &gt;=, &lt;, &lt;=, ==, !=</li>
<li>논리 연산자: and, or, not</li>
</ul>
<h4 id="덧셈연산자">덧셈연산자</h4>
<ul>
<li><p>정수와 실수를 이용한 덧셈</p>
</li>
<li><p>문자를 이용한 덧셈</p>
</li>
<li><p>숫자와 문자를 이용한 덧셈</p>
</li>
</ul>
<h4 id="비교연산자">비교연산자</h4>
<ul>
<li>숫자 비교
num1 =10; num2 = 5</li>
</ul>
<pre><code>result = num1 &gt; num2
print(‘num1 &gt; num2 : {}’ .format(result))

result = num1 &gt;= num2
print(‘num1 &gt;= num2 : {}’ .format(result))

result num1&lt; num2
print(‘num1 &lt;= num2 : {}’ .format(result))

result = num1 &gt;= num2
print(‘num1 &gt;= num2 : {}’ .format(result))

result = num1 == num2
print(‘num1 == num2 : {}’ .format(result))

result = num1 != num2
print(‘num1 != num2 : {}’ .format(result))</code></pre><p>연산결과는 Bool 이다. (True, False)</p>
<pre><code>num1 &gt; num2 : True
num1 &gt;= num2 : True
num1 &lt; num2 : False
num1 &lt;= num2 : False
num1 == num2 : False
num1 != num2 : True</code></pre><h3 id="조건문-종류">조건문 종류</h3>
<ul>
<li>if문 -&gt; 단일조건</li>
<li>if ~ else문 -&gt; 양자택일</li>
<li>if ~ elif문 -&gt; 다자택일(다중조건)</li>
</ul>
<h3 id="다자택일-조건문">다자택일 조건문</h3>
<ul>
<li>if-else 조건문</li>
</ul>
<h3 id="다자택일-사용시-주의할-점">다자택일 사용시 주의할 점</h3>
<ul>
<li>조건식 순서가 중요함<pre><code>exampleScore = int(input(&#39;시험 성적 입력 : &#39;))
grades = &#39;&#39;
</code></pre></li>
</ul>
<p>if exampleScore &gt;= 90:
    grades = &#39;A&#39;
elif exampleScore &gt;= 80:
    grades = &#39;B&#39;
elif exampleScore &gt;= 70:
    grades = &#39;c&#39;
elif exampleScore &gt;= 60:
    grades = &#39;D&#39;
else:
    grades = &#39;F&#39;</p>
<p>print(&#39;성정: {} \t 학점: {}&#39;.format(exampleScore, grades))</p>
<pre><code>- 조건 범위를 명시해야함</code></pre><p>exampleScore = int(input(&#39;시험 성적 입력 : &#39;))
grades = &#39;&#39;</p>
<p>if exampleScore &gt;= 70 and exampleScore &lt; 80:
    grades = &#39;C&#39;
elif exampleScore &gt;= 90 :
    grades = &#39;A&#39;
elif exampleScore &gt;= 80 and exampleScore &lt; 90:
    grades = &#39;B&#39;
elif exampleScore &gt;= 60 and exampleScore &lt; 70:
    grades = &#39;D&#39;
else:
    grades = &#39;F&#39;</p>
<p>print(&#39;성정: {} \t 학점: {}&#39;.format(exampleScore, grades))</p>
<pre><code></code></pre><pre><code>### 중첩 조건문
- 조건문 안에 또 다른 조건문을 선언
</code></pre><pre><code>#### 출처
[https://zero-base.co.kr/event/1st_ds_nklcb](https://zero-base.co.kr/event/1st_ds_nklcb)
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스] 데이터사이언스 1기_ 02-01. 파이썬 기초_데이터 & 변수]]></title>
            <link>https://velog.io/@do-it/%EB%84%A4%EC%B9%B4%EB%9D%BC%EC%BF%A0%EB%B0%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Day1-211007</link>
            <guid>https://velog.io/@do-it/%EB%84%A4%EC%B9%B4%EB%9D%BC%EC%BF%A0%EB%B0%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-1%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Day1-211007</guid>
            <pubDate>Thu, 07 Oct 2021 12:33:19 GMT</pubDate>
            <description><![CDATA[<h2 id="네카라쿠배-데이터사이언스-1기-파이썬-기초-강의-day1-211007">네카라쿠배 데이터사이언스 1기 파이썬 기초 강의 Day1 (21/10/07)</h2>
<h3 id="01_파이썬-소개">01_파이썬 소개</h3>
<p>특징</p>
<ul>
<li>무한 정수를 처리할 수 있다.</li>
<li>문법 구조가 쉽다.</li>
<li>다양하고 뛰어난 모듈이 많다.</li>
</ul>
<h3 id="02_처음-만들어보는-프로그램">02_처음 만들어보는 프로그램</h3>
<h5 id="python-idle통합-개발-환경">Python IDLE(통합 개발 환경)</h5>
<p>파이썬 셸 이용한 코딩: 간단한 코딩 테스트용</p>
<ul>
<li>셸 모드에서는 print를 입력하지 않아도 됨</li>
</ul>
<p>파이썬 코드 편집기를 이용한 코딩: 실제로 어떠한 프로그램을 만들기위해서 사용</p>
<ul>
<li>명령어 입력&gt; 저장 &gt; Run &gt; 셸 모듈에서 실행됨</li>
</ul>
<h3 id="03_프로그램-실행과정">03_프로그램 실행과정</h3>
<h4 id="컴파일러">컴파일러</h4>
<p>소스파일 —(컴파일; 기계언어로 변환)—&gt; 기계어 —(기계에서 실행)—&gt; </p>
<h4 id="인터프린터">인터프린터</h4>
<p>소스파일 —(기계에서 실행)—&gt; </p>
<ul>
<li>컴파일러와 달리 실행파일을 만들지 않음</li>
<li>컴파일 언어는 소스전체를 실행 파일로 만든 후 기계에서 실행; 번역과 같음(c/c++, java)</li>
<li>인터프린터 언어는 필요한 소스 코드만 그때 그때 실행 함; 동시통역과 같음(python)</li>
</ul>
<h3 id="02-01파이썬-기초">02-01.파이썬 기초</h3>
<h4 id="데이터와-변수">데이터와 변수</h4>
<h5 id="pycharm이란">PyCharm이란?</h5>
<ul>
<li>셸모드 코드 에디터 불편함을 해결한 코드편집기</li>
<li>실행된 결과를 바로 아래에서 볼 수 있음</li>
</ul>
<h4 id="02--3_변수">02 &amp; 3_변수</h4>
<ul>
<li>변수는 데이터를 저장하는 공간</li>
<li>변수명은 마음대로 할 수 있음</li>
<li>반복적인 단어는 변수명을 사용한다.</li>
<li>프로그램에서는 데이터가 가장 중요하고 그 다음으로는 이를 관리하는 변수명이 중요하다.</li>
</ul>
<h4 id="05_변수-작명법">05_변수 작명법</h4>
<ul>
<li>의미를 쉽게 파악할 수 있도록 작명</li>
<li>영문 사용: myAdress (구분짓는 단어 대문자로), 한글로도 가능한데 권장하지 않음</li>
<li>첫 번째는 소문자로 (Class명의 첫글자는 대문자로 하기때문에 혼란스러울 수 있음)</li>
<li>가급적 데이터의 의미를 파악할 수 있는 명사 사용</li>
<li>카멜 표기법 또는 스네이크 표기법 사용; </li>
<li>e.g., 카멜 표기법: myHomeAddress, 스네이크:my_home</li>
<li>특수문자 쓰면 에러남</li>
<li>공백문자는 사용금지</li>
<li>숫자는 사용해도 되나, 중간에나 끝만 가능. </li>
</ul>
<h4 id="06_자료형data-type">06_자료형(Data Type)</h4>
<ul>
<li>효율적인 메모리 사용을 위해서 데이터를 정수형, 실수형, 문자(열)형, 논리형으로 구분한 것</li>
<li>문자열형은 작은따옴표 또는 큰따옴표를 사용할 수 있으나, 혼용해서 사용할 수는 없다.</li>
</ul>
<p>정수는 메모리가 허용되는 한 무한 사용 가능
실수는 대략 소수점 이하 17~18번째 자리에서 끊음</p>
<p>무늬만 정수이지 작은 따옴표로 묶으면 문자열: e.g., ‘80’ = 문자열</p>
<h4 id="07_자료형-변환문자">07_자료형 변환(문자)</h4>
<ul>
<li>정수 -&gt; 문자열</li>
<li>str함수를 사용하면 바꿀 수 있음</li>
</ul>
<h4 id="08_자료형-변환그외-데이터">08_자료형 변환(그외 데이터)</h4>
<ul>
<li>데이터 문자(열)로 형변환</li>
</ul>
<h4 id="10-데이터-입력">10. 데이터 입력</h4>
<pre><code>print(‘키보드를 통해서 데이터를 입력하세요.’)
userInputData= input()
print(userInputData)</code></pre><p>입력받은 데이터형 변환</p>
<ul>
<li>형 변환 함수를 이용한 형 변환<pre><code>userInputData =input (‘문자형을 입려갛세요. ‘)
print(userInputData)
print(type(userInputData))
</code></pre></li>
</ul>
<p>userInputData = int(input(‘정수형을 입력하세요. ‘))
print(userInputData)
print(type(userInputData))</p>
<p>userInputData = float(input(‘실수형을 입력하세요. ‘))
print(userInputData)
print(type(userInputData))</p>
<p>userInputData = bool(input(‘논리형을 입력하세요. ‘))
print(userInputData)
print(type(userInputData))</p>
<pre><code>
#### 11. 데이터 출력
- print 함수를 이용한 기본적인 데이터 출력</code></pre><p>userName = ‘hong gil dong’
print(userName)</p>
<pre><code>- 콤마를 이용한 데이터 연속 출력</code></pre><p>print(‘User name : ‘, userName)
print(‘’3*5 = ‘, end=‘ ‘) #자동 개행</p>
<pre><code>
- 포맷 문자열을 이용한 데이터 출력</code></pre><p>print(f ‘User name : {userName}’)</p>
<pre><code>
#### 12. format()함수
- format()함수를 이용한 데이터 출력</code></pre><p>print(‘User name : {}’.format(userName))
print(‘User name {}, User age: {}’.format(userName, userAge))</p>
<pre><code>
형식 문자를 이용한 데이터 출력</code></pre><p>%s #문자열
%d #정수
%f #실수</p>
<pre><code>
#### 출처
[https://zero-base.co.kr/event/1st_ds_nklcb](https://zero-base.co.kr/event/1st_ds_nklcb)</code></pre>]]></description>
        </item>
    </channel>
</rss>