<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>kimse_1225.log</title>
        <link>https://velog.io/</link>
        <description>KimSe's 주절주절</description>
        <lastBuildDate>Wed, 05 Jul 2023 14:23:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. kimse_1225.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kimse_1225" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 웹데이터 분석]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%9B%B9%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%9B%B9%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Wed, 05 Jul 2023 14:23:49 GMT</pubDate>
            <description><![CDATA[<h2 id="웹데이터-분석">웹데이터 분석</h2>
<h3 id="beautiful-soup">Beautiful Soup</h3>
<ul>
<li>HTML과 XML 문서들의 구문을 분석하기 위한 파이썬 패키지<pre><code>from bs4 import BeautifulSoup
</code></pre></li>
</ul>
<p>page = open(&quot;../data/test.html&quot;, &quot;r&quot;).read()
soup = BeautifulSoup(page, &quot;html.parser&quot;)</p>
<p>print(soup.prettify())</p>
<h1 id="태그-검색지정된-태그-중-첫번째-항목만-검색">태그 검색(지정된 태그 중 첫번째 항목만 검색)</h1>
<p>soup.find(&quot;p&quot;)</p>
<h1 id="태그-검색지정된-태그-전부-검색">태그 검색(지정된 태그 전부 검색)</h1>
<p>soup.find_all(&quot;p&quot;)</p>
<h1 id="class-속성의-경우-예약어이므로-형태를-달리해야함">class 속성의 경우 예약어이므로 형태를 달리해야함</h1>
<p>soup.find_all(class_=&quot;outer-text&quot;)</p>
<pre><code>
### urllib
- 웹주소에 접근 시 필요</code></pre><p>from urllib.request import urlopen</p>
<p>url = &quot;<a href="https://finance.naver.com/marketindex/&quot;">https://finance.naver.com/marketindex/&quot;</a>
page = urlopen(url)</p>
<p>soup = BeautifulSoup(page, &quot;html.parser&quot;)
print(soup.prettify())</p>
<pre><code>
### Regular Expression
- 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
![](https://velog.velcdn.com/images/kimse_1225/post/e6272acf-ab2d-45f8-985b-399b16bb66cc/image.png)
</code></pre><p>import re</p>
<p>tmp_str = tmp_one.find(class_=&quot;sammyListing&quot;).get_text()
re.split((&quot;\n|\r\n&quot;), tmp_str)</p>
<p>...</p>
<p>tmp = re.search(&quot;$\d+.(\d+)?&quot;, price_tmp).group()
print(price_tmp[len(tmp) + 2:])</p>
<pre><code>
### 웹페이지 추출 반복</code></pre><p>price = []
address = []</p>
<h1 id="기존-방식대로-코딩하였다면-이런식으로-했을수도">기존 방식대로 코딩하였다면 이런식으로 했을수도?...</h1>
<h1 id="데이터프레임의-행-정보를-index-값의-바탕으로-반복">데이터프레임의 행 정보를 index 값의 바탕으로 반복</h1>
<p>for n in df.index:
    req = Request(df[&quot;URL&quot;][n], headers={&quot;User-Agent&quot;:&quot;Mozilla/5.0&quot;})
    html = urlopen(req).read()</p>
<pre><code>soup_tmp = BeautifulSoup(html, &quot;lxml&quot;)
...</code></pre><h1 id="데이터프레임의-iterrows-활용-행-정보-추출">데이터프레임의 iterrows() 활용 행 정보 추출</h1>
<h1 id="tqdm--반복문의-진행율을-프로그레스-바-형태로-표현">tqdm : 반복문의 진행율을 프로그레스 바 형태로 표현</h1>
<p>for idx, row in tqdm(df.iterrows()):
    req = Request(row[&quot;URL&quot;], headers={&quot;User-Agent&quot;:&quot;Chrome&quot;})
    html = urlopen(req).read()</p>
<pre><code>soup_tmp = BeautifulSoup(html, &quot;lxml&quot;)</code></pre><pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] SQL]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-SQL</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-SQL</guid>
            <pubDate>Tue, 04 Jul 2023 15:02:13 GMT</pubDate>
            <description><![CDATA[<h2 id="sql-구성">SQL 구성</h2>
<ol>
<li><p>데이터 정의 언어 (DDL : Data Definition Language)</p>
<ul>
<li>create, alter, drop 등</li>
</ul>
</li>
<li><p>데이터 조작 언어 (DML : Data Manipulation Language)</p>
<ul>
<li>select, insert, update, delete 등</li>
</ul>
</li>
<li><p>데이터 제어 언어 (DCL : Data Control Language)</p>
<ul>
<li>grant, revoke, commit, rollback 등</li>
</ul>
</li>
</ol>
<h3 id="권한관리">권한관리</h3>
<ul>
<li>grant, revoke<pre><code># 사용자에게 특정 데이터베이스 모든 권한 부여
GRANT ALL ON dbname.* to &#39;username&#39;@&#39;localhost&#39;;
</code></pre></li>
</ul>
<h1 id="사용자에게-특정-데이터베이스-모든-권한-삭제">사용자에게 특정 데이터베이스 모든 권한 삭제</h1>
<p>REVOKE ALL ON dbname.* from &#39;username&#39;@&#39;localhost&#39;;</p>
<pre><code>
### UNION
여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어주는 방법
(합치는 SQL문의 컬럼 개수 같아야 함)
 - union : 중복된 값을 제거
 - union all : 중복된 값 포함</code></pre><p>select * from test1
union (all)
select * from test2;</p>
<pre><code>
### JOIN
두 개 이상의 데이블을 결합하는 방법
 - inner join, left join, right join, full outer join
 - self join
![](https://velog.velcdn.com/images/kimse_1225/post/371fb798-207b-4c38-b1a3-5f91b5806274/image.png)
</code></pre><h1 id="inner-join">inner join</h1>
<p>select column1, column2 from tableA
inner join tableB
on tableA.column = tableB.column
where condition;</p>
<h1 id="left-join">left join</h1>
<p>select column1, column2 from tableA
left join tableB
on tableA.column = tableB.column
where condition;</p>
<h1 id="right-join">right join</h1>
<p>select column1, column2 from tableA
right join tableB
on tableA.column = tableB.column
where condition;</p>
<h1 id="full-outer-join">full outer join</h1>
<p>select column1, column2 from tableA
full outer join tableB
on tableA.column = tableB.column
where condition;</p>
<h1 id="self-join">self join</h1>
<p>select column1, column2 from tableA, tableB
where condition;</p>
<pre><code>
### Primary Key (기본키)
 - 테이블의 각 레코드를 식별
 - 중복되지 않은 고유값을 포함
 - Null 값 허용 안됨
 - 테이블 당 하나의 기본키를 가짐

### Foreign Key (외래키)
 - 한 테이블을 다른 테이블과 연결해 주는 역할
 - 참조되는 테이블의 항목은 그 테이블의 기본키

### Aggregate Functions (집계함수)
 - count, sum, avg, min, max, first, last

### Having
조건에 집계함수가 포함되는 경우 where절 대신 having 사용</code></pre><p>select column1, column2, ... from table
where condition
group by column1, column2
having condition (Aggregate Functions)
order by column1</p>
<pre><code>
### Sub Query
 - 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말함
 - 메인쿼리가 서브쿼리를 포함하는 종속적인 관계
 - Sub Query는 괄호로 묶어서 사용
 - 단일행 혹은 복수행 비교 연산자와 함께 사용 가능
 - Sub Query에서는 order by를 사용 안 함</code></pre><h1 id="scalar-sub-query-select절에-사용">Scalar Sub Query (select절에 사용)</h1>
<p>select column1, (select column2 from table2 where condition)
from table1
where condition;</p>
<h1 id="inline-view-from절에-사용">Inline View (from절에 사용)</h1>
<p>select a.column, b.column
from table1 a, (select column1, column2, from table2) b
where condition;</p>
<h1 id="nested-sub-query-where절에-사용">Nested Sub Query (where절에 사용)</h1>
<h1 id="-single-row--하나의-열을-검색하는-서브쿼리"># Single Row : 하나의 열을 검색하는 서브쿼리</h1>
<h1 id="-multiple-row--하나-이상의-열을-검색하는-서브쿼리"># Multiple Row : 하나 이상의 열을 검색하는 서브쿼리</h1>
<h1 id="-multiple-column--하나-이상의-행을-검색하는-서브쿼리"># Multiple Column = 하나 이상의 행을 검색하는 서브쿼리</h1>
<p>```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 서울시 범죄 현황 데이터 분석]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%84%9C%EC%9A%B8%EC%8B%9C-%EB%B2%94%EC%A3%84-%ED%98%84%ED%99%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%84%9C%EC%9A%B8%EC%8B%9C-%EB%B2%94%EC%A3%84-%ED%98%84%ED%99%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Sun, 02 Jul 2023 12:49:32 GMT</pubDate>
            <description><![CDATA[<h2 id="서울시-범죄-현황-데이터-분석">서울시 범죄 현황 데이터 분석</h2>
<h4 id="1-pandas-pivot-table">1. Pandas Pivot Table</h4>
<p>피벗 테이블이란 많은 양의 데이터에서 필요한 자료만을 뽑아 새롭게
테이블을 작성해 주는 기능</p>
<pre><code>import pandas as pd

crime_raw_data = pd.read_csv(&quot;../data/02. crime_in_Seoul.csv&quot;, thousands=&quot;,&quot;, encoding=&quot;euc-kr&quot;)

crime_station = crime_raw_data.pivot_table(
    crime_raw_data,
    index=&quot;구분&quot;,
    columns=[&quot;죄종&quot;, &quot;발생검거&quot;],
    aggfunc=[np.sum]
)

crime_station.head()</code></pre><p><img src="https://velog.velcdn.com/images/kimse_1225/post/86702d5c-0beb-4b9f-99e7-827cc28c02f3/image.png" alt=""></p>
<h4 id="2-google-maps">2. Google Maps</h4>
<pre><code>import googlemaps

gmaps_key = &quot;...&quot;
gmaps = googlemaps.Client(key=gmaps_key)

count = 0

for idx, rows in crime_station.iterrows():
    station_name = &quot;서울&quot; + str(idx) + &quot;경찰서&quot;
    tmp = gmaps.geocode(station_name, language=&quot;ko&quot;)

    tmp_gu = tmp[0].get(&quot;formatted_address&quot;)

    lat = tmp[0].get(&quot;geometry&quot;)[&quot;location&quot;][&quot;lat&quot;]
    lng = tmp[0].get(&quot;geometry&quot;)[&quot;location&quot;][&quot;lng&quot;]

    crime_station.loc[idx, &quot;lat&quot;] = lat
    crime_station.loc[idx, &quot;lng&quot;] = lng
    crime_station.loc[idx, &quot;구별&quot;] = tmp_gu.split()[2]

    count = count + 1

crime_station.head()</code></pre><p><img src="https://velog.velcdn.com/images/kimse_1225/post/a3a8f892-b877-49ad-a7ba-31fcdbe9b46b/image.png" alt=""></p>
<h3 id="서울시-범죄현황-데이터-시각화">서울시 범죄현황 데이터 시각화</h3>
<h4 id="1-seaborn">1. seaborn</h4>
<p>파이썬 데이터 시각화 라이브러리</p>
<pre><code>from matplotlib import rc, font_manager
import matplotlib.pyplot as plt
import seaborn as sns

font_path = &quot;../../ds_study/malgun.ttf&quot;
font = font_manager.FontProperties(fname=font_path).get_name()
rc(&#39;font&#39;, family=font)

sns.pairplot(data=crime_anal_norm, vars=[&quot;강도&quot;, &quot;살인&quot;, &quot;폭력&quot;], kind=&quot;reg&quot;, height=3)</code></pre><p><img src="https://velog.velcdn.com/images/kimse_1225/post/2f5c19a9-d661-497d-8788-35498961b126/image.png" alt=""></p>
<h4 id="2-folium">2. Folium</h4>
<p>파이썬 지도 시각화 라이브러리</p>
<pre><code>crime_anal_station = pd.read_csv(&quot;../data/02. crime_in_Seoul_1st.csv&quot;, index_col=0, encoding=&quot;utf-8&quot;)

col = [&quot;살인검거&quot;, &quot;강도검거&quot;, &quot;강간검거&quot;, &quot;절도검거&quot;, &quot;폭력검거&quot;]
tmp = crime_anal_station[col] / crime_anal_station[col].max()
crime_anal_station[&quot;검거&quot;] = np.mean(tmp, axis=1)
crime_anal_station.head()

my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11)

for idx, rows in crime_anal_station.iterrows():
    folium.CircleMarker(
        [rows[&quot;lat&quot;], rows[&quot;lng&quot;]],
        radius=rows[&quot;검거&quot;] * 50,
        popup=rows[&quot;구분&quot;] + &quot; : &quot; + &quot;%.2f&quot; % rows[&quot;검거&quot;],
        color=&quot;#3186cc&quot;,
        fill=True,
        fill_color=&quot;#3186cc&quot;
    ).add_to(my_map)

my_map</code></pre><p><img src="https://velog.velcdn.com/images/kimse_1225/post/2e2d8b05-83a4-4025-a5f4-c572774b2ea4/image.png" alt=""></p>
<p>※ 본 블로그에서 사용된 코드는 제로베이스 수업 자료에서 참고하였습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 알고리즘]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Fri, 23 Jun 2023 15:04:29 GMT</pubDate>
            <description><![CDATA[<h2 id="알고리즘">알고리즘</h2>
<h3 id="선형검색">선형검색</h3>
<ul>
<li>선형으로 나열되어 있는 데이터를 순차적으로 스캔하면서 원하는 값을 찾는 방법
<img src="https://velog.velcdn.com/images/kimse_1225/post/6f11e135-bd70-4770-a73e-7fa2b700bab8/image.png" alt=""></li>
</ul>
<h3 id="이진검색">이진검색</h3>
<ul>
<li>정렬되어 있는 자료구조에서 중앙값의 크고 작음을 이용해서 데이터를 검색하는 방법
<img src="https://velog.velcdn.com/images/kimse_1225/post/6048226c-b2ab-4946-97ef-18c8eda1b37d/image.png" alt=""></li>
</ul>
<h3 id="버블정렬">버블정렬</h3>
<ul>
<li>처음부터 끝까지 인접하는 인덱스의 값을 순차적으로 비교하면서 큰 숫자를 가장 끝으로 옮기는 알고리즘
<img src="https://velog.velcdn.com/images/kimse_1225/post/b716fbc2-df21-45e1-bd1f-1796d1513c59/image.png" alt=""></li>
</ul>
<h3 id="삽입정렬">삽입정렬</h3>
<ul>
<li>정렬되어 있는 자료 배열과 비교해서, 정렬 위치를 찾음
<img src="https://velog.velcdn.com/images/kimse_1225/post/1c5c490f-ce14-44b1-bff6-7a76fc24920f/image.png" alt=""></li>
</ul>
<h3 id="선택정렬">선택정렬</h3>
<ul>
<li>주어진 리스트 중에 최소값을 찾아, 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 자료를 정렬하는 알고리즘
<img src="https://velog.velcdn.com/images/kimse_1225/post/fe289b6f-eaab-41db-9eec-a1adb1336304/image.png" alt=""></li>
</ul>
<h3 id="병합정렬">병합정렬</h3>
<ul>
<li>자료구조를 분할하고 각각의 분할된 자료구조를 정렬한 후 다시 병합하여 정렬
<img src="https://velog.velcdn.com/images/kimse_1225/post/b1031582-16b9-4827-9930-684df8900c3a/image.png" alt=""></li>
</ul>
<h3 id="퀵정렬">퀵정렬</h3>
<ul>
<li>기준 값보다 작은 값돠 큰 값으로 분리한 후 다시 합침
<img src="https://velog.velcdn.com/images/kimse_1225/post/349933c1-e707-4a87-92fe-e30c3357d440/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 자료구조]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Tue, 20 Jun 2023 13:11:10 GMT</pubDate>
            <description><![CDATA[<h2 id="자료구조">자료구조</h2>
<h3 id="list">List</h3>
<pre><code># 여러 개의 데이터를 나열한 자료구조
company = [&#39;samsung&#39;, &#39;LG&#39;, &#39;Kia&#39;, &#39;Lego&#39;]

print(company[1])
--------------------------------------------
LG

# len() : 리스트 길이 반환
len(company)

# for 문
for i in range(len(company)):
    print(company[i])

for item in company:
    print(item)

# append() : List 마지막에 item 추가
# insert(i) : 특정 index에 item 추가
# pop() : List 마지막 item 삭제
# pop(i) : index에 해당하는 item 삭제
# remove(v) : 특정 item 삭제

# extend() : List 연결
extendList = a.extend(b)

# sort() : 정렬(디폴트 오름차순)
# sort(reverse=True) : 정렬(내림차순)</code></pre><h3 id="tuple">Tuple</h3>
<pre><code># List와 유사하지만 item 변경이 불가능함
# 추가, 삭제, 변경 불가능
company = (&#39;samsung&#39;, &#39;LG&#39;, &#39;Kia&#39;, &#39;Lego&#39;)

# Tuple은 변경이 불가능하기 때문에 정렬도 불가능
# sorted()를 사용하면 정렬이 가능하나 List Type으로 반환</code></pre><h3 id="dictionary">Dictionary</h3>
<pre><code># key, value를 이용해서 data 관리
grade = {&#39;kor&#39;:90, &#39;mat&#39;:95, &#39;eng&#39;:80}

# key 중복 허용 안함
# 추가하려는 key가 존재하면 기존 key를 대체함

# key 값이 존재하지 않으면 조회 시 에러 발생
for key in grade.keys():
    print(f&#39;{key}: {grade[key]}&#39;)

# key 값이 존재하지 않아도 에러 발생 하지 않음 : None
grade.get(&#39;kor&#39;)

grade.keys()
grade.values()
grade.items()

# 삭제
del grade[&#39;eng&#39;]
grade.pop(&#39;mat&#39;)

# 모든 아이템 삭제
grade.clear()</code></pre><h3 id="set">Set</h3>
<pre><code># Set 자료형은 중복을 허용하지 않음
number = {100, 90, 80, 70}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 중급 (4)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-4</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-4</guid>
            <pubDate>Tue, 13 Jun 2023 13:41:47 GMT</pubDate>
            <description><![CDATA[<h3 id="텍스트-파일">텍스트 파일</h3>
<h4 id="파일-열기">파일 열기</h4>
<ul>
<li>open()</li>
<li>&#39;w&#39; : 쓰기 전용 (파일이 존재하면 덮어 씌움)</li>
<li>&#39;a&#39; : 쓰기 전용 (파일이 존재하면 덮붙임)</li>
<li>&#39;x&#39; : 쓰기 전용 (파일이 존재하면 에러 발생)</li>
<li>&#39;r&#39; : 읽기 전용 (파일이 존재하지 않으면 에러 발생)<h4 id="파일-쓰기">파일 쓰기</h4>
</li>
<li>write()</li>
<li>writelines()<h4 id="파일-읽기">파일 읽기</h4>
</li>
<li>read()</li>
<li>readlines()</li>
<li>readline()<h4 id="파일-닫기">파일 닫기</h4>
</li>
<li>close()</li>
</ul>
<pre><code>path = &#39;D:/test/&#39;

def writePrimeNumber(n):
    file = open(uri + &#39;prime_numbers.txt&#39;, &#39;a&#39;)
    file.write(str(n))
    file.write(&#39;\n&#39;)

    file.close()

inputNumber = int(input(&quot;0보다 큰 정수 입력: &quot;))
for number in range(2, (inputNumber + 1)):
    flag = True
    for n in range(2, number):
        if number % n == 0:
            flag = False
            break

    if (flag):
        writePrimeNumber(number)
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 중급 (3)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-3</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-3</guid>
            <pubDate>Tue, 13 Jun 2023 13:31:31 GMT</pubDate>
            <description><![CDATA[<h4 id="생성자">생성자</h4>
<ul>
<li>객체를 생성하면 해당 class의 생성자를 호출</li>
<li>생성자는 개발자가 작성하는 것이 아닌 내부적으로 자동 생성</li>
<li>생성자는 class 내부의 init 함수를 호출</li>
</ul>
<h4 id="오버라이딩overriding">오버라이딩(overriding)</h4>
<ul>
<li>상위 클래스의 함수를 재정의 하기 위해 사용</li>
</ul>
<h4 id="추상클래스">추상클래스</h4>
<ul>
<li>상위 클래스에서 하위 클래스에게 함수 구현을 강요</li>
<li>추상 클래스에서 뼈대를 잡아 놓았다면 추상 클래스를 상속하는
하위 클래스는 살을 붙여주는 역할<pre><code>from abc import ABCMeta
from abc import abstractmethod
</code></pre></li>
</ul>
<p>class Airplane(metaclass=ABCMeta):</p>
<pre><code>@abstractmethod
def flight(self):
    pass</code></pre><p>class Airliner(Airplane):</p>
<pre><code>def flight(self):
    print(&#39;go away....&#39;)</code></pre><pre><code>
#### 예외
- 프로그램 실행 중 발생하는 예상치 못한 문제
- ZeroDivisionError
- IOError
- IndexError
- 등등

#### 예외처리 구문</code></pre><p>try:
    pass
except:
    pass</p>
<p>try:
    pass
except(Exception as e):
    pass<br>```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 중급 (2)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-2</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-2</guid>
            <pubDate>Tue, 13 Jun 2023 13:15:51 GMT</pubDate>
            <description><![CDATA[<h3 id="객체지향-프로그래밍oop">객체지향 프로그래밍(OOP)</h3>
<ul>
<li>코드 재사용 및 모듈화에 좋음</li>
</ul>
<h4 id="class">class</h4>
<pre><code>class Airplane:

    def __init__(self, type, company):
        self.type = type
        self.company = company

    drf info(self):
        print(f&#39;항공사 : {self.company}, 기종 : {self.type}&#39;)

    def doFlying(self):
        print(&#39;Flying.....&#39;)

    def doLanding(self):
        pint(&#39;Landing....&#39;)

ap1 = Airplane(&#39;380&#39;, &#39;korean air&#39;)

ap1.info()
ap1.doFlying()

------------------------------------------------------------------
항공사 : korean air, 380
Flying.....
------------------------------------------------------------------</code></pre><h4 id="얕은-복사-깊은-복사">얕은 복사, 깊은 복사</h4>
<ul>
<li>얕은 복사 : 객체 주소를 복사하는 것으로
복사된 객체의 값을 변경 시 원본 객체의 데이터도 변경됨</li>
<li>깊은 복사 : 객체 자체를 복사하는 것으로 새로운 객체가 생성됨<pre><code>arrNum = [10, 4, 6, 2, 5, 7]
</code></pre></li>
</ul>
<p>copy1 = arrNum
copy2 = arrNum.copy()</p>
<p>print(arrNum)</p>
<p>copy1[1] = 8
print(arrNum)
print(copy1)</p>
<p>copy2[2] = 12
print(arrNum)
print(copy2)</p>
<hr>
<p>[10, 4, 6, 2, 5, 7]
[10, 8, 6, 2, 5, 7]
[10, 8, 6, 2, 5, 7]
[10, 8, 6, 2, 5, 7]
[10, 4, 12, 2, 5, 7]</p>
<hr>
<pre><code>
#### 상속
- 자식 클래스는 부모 클래스의 기능을 사용 가능</code></pre><p>class Parents():</p>
<pre><code>def add(self, num1, num2):
    return num1 + num2

def sub(self, num1, num2):
    return num1 - num2</code></pre><p>class Child(Parents):</p>
<pre><code>def mul(self, num1, num2):
    return num1 * num2

def div(self, num1, num2):
    return num1 / num2</code></pre><p>cal = Child()
print(f&#39;sum : {cal.add(10, 20}&#39;)
print(f&#39;mul : {cal.add(10, 20}&#39;)</p>
<hr>
<p>30
200</p>
<hr>
<p>```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 중급 (1)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-1</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-1</guid>
            <pubDate>Tue, 13 Jun 2023 12:49:15 GMT</pubDate>
            <description><![CDATA[<h3 id="함수">함수</h3>
<h4 id="내장함수">내장함수</h4>
<pre><code>input()            # 데이터 입력
print()            # 데이터 출력</code></pre><h4 id="사용자함수">사용자함수</h4>
<pre><code>def calculator(num1, num2):
    print(f&#39;Sum : {num1 + num2}&#39;)

    return num1 + num2

sum = calculator(10, 20)</code></pre><h3 id="모듈">모듈</h3>
<h4 id="내부모듈">내부모듈</h4>
<ul>
<li>파이썬 설치 시 기본 제공<h4 id="외부모듈">외부모듈</h4>
</li>
<li>별도의 설치 과정을 통해 사용 가능<h4 id="사용자모듈">사용자모듈</h4>
</li>
<li>사용자가 직접 만든 모듈</li>
</ul>
<pre><code>import math                    # 내부모듈
import pandas as pd            # 외부모듈
import calculator as cal    # 사용자모듈</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 기초 (3)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-3</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-3</guid>
            <pubDate>Thu, 08 Jun 2023 12:53:32 GMT</pubDate>
            <description><![CDATA[<h4 id="operator-모듈">operator 모듈</h4>
<pre><code>import operator as op

num1 = 10
num2 = 25

# 산술 연산
op.add(num1, num2)
op.sub(num1, num2)
op.mul(num1, num2)
op.truediv(num1, num2)
op.mod(num1, num2)
op.floordiv(num1, num2)
op.pow(num1, num2)

# 비교 연산
op.eq(num1, num2)
op.ne(num1, num2)
op.gt(num1, num2)
op.ge(num1, num2)
op.lt(num1, num2)
op.le(num1, num2)

# 논리 연산
op.and_(num1, num2)
op.or_(num1, num2)
op.not_(num1, num2)
</code></pre><h4 id="조건문">조건문</h4>
<ul>
<li>if</li>
<li>if ~ else</li>
<li>if ~ elif</li>
</ul>
<h4 id="반복문">반복문</h4>
<ul>
<li><p>for</p>
<pre><code>for i in range(10):
for i in range(0, 10):
for i in range(0, 10, 2):</code></pre></li>
<li><p>while</p>
</li>
<li><p>continue : 반복문에서 continue를 만나면 이하 코드 생략 후 다음 반복 실행</p>
</li>
<li><p>break : 반복문에서 break를 만나면 반복문 종료</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 기초 (2)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-2</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-2</guid>
            <pubDate>Mon, 05 Jun 2023 22:42:06 GMT</pubDate>
            <description><![CDATA[<h4 id="데이터-입력">데이터 입력</h4>
<pre><code>strData = input(&quot;문자 입력&quot;)
numInt = input(&quot;정수 입력&quot;)
numFloat = input(&quot;실수 입력&quot;)</code></pre><h4 id="데이터-출력">데이터 출력</h4>
<pre><code>print(&#39;Age : &#39;, age)
print(&#39;Age : &#39;, age, &#39;, Sex : &#39;, sex)

print(f&#39;Name : {name}&#39;)
print(f&#39;Name : {name}, Age : {age}&#39;)

print(&#39;Name : {}&#39;.format(name))
print(&#39;Name : {}, Age : {}&#39;.format(name, age))

print(&#39;Name : %s, Age : %d&#39; % (name, age))

print(&#39;Pi : %.4f&#39; % 3.141592)        # 3.1416</code></pre><h4 id="나머지와-몫을-구하는-함수">나머지와 몫을 구하는 함수</h4>
<pre><code>rtnValue = divmod(15, 4)
print(rtnValue)            # (3, 3)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] matplot 한글 깨짐]]></title>
            <link>https://velog.io/@kimse_1225/%ED%8C%8C%EC%9D%B4%EC%8D%AC-matplot-%ED%95%9C%EA%B8%80-%EA%B9%A8%EC%A7%90</link>
            <guid>https://velog.io/@kimse_1225/%ED%8C%8C%EC%9D%B4%EC%8D%AC-matplot-%ED%95%9C%EA%B8%80-%EA%B9%A8%EC%A7%90</guid>
            <pubDate>Mon, 05 Jun 2023 14:18:47 GMT</pubDate>
            <description><![CDATA[<p>파이썬에서 matplot 사용 시 한글 깨짐 현상이 나타나는데 아래의 코드로 해결 가능</p>
<pre><code>import matplotlib.pyplot as plt
from matplotlib import rc, font_manager

# 폰트 경로는 자신에 맞게 수정 필요
font_path = &quot;../../ds_study/malgun.ttf&quot;
font = font_manager.FontProperties(fname=font_path).get_name()
rc(&#39;font&#39;, family=font)</code></pre><p><img src="https://velog.velcdn.com/images/kimse_1225/post/8cca6cde-42b2-4d59-a8f1-2460fbe14b83/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 서울시 CCTV 현황 데이터 분석]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%84%9C%EC%9A%B8%EC%8B%9C-CCTV-%ED%98%84%ED%99%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%EC%84%9C%EC%9A%B8%EC%8B%9C-CCTV-%ED%98%84%ED%99%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Mon, 05 Jun 2023 14:11:14 GMT</pubDate>
            <description><![CDATA[<h3 id="데이터프레임">데이터프레임</h3>
<ol start="0">
<li>기본 함수<pre><code># 데이터프레임 기본 정보 확인
df.info()
</code></pre></li>
</ol>
<h1 id="데이터프레임-기술통계정보-확인">데이터프레임 기술통계정보 확인</h1>
<p>df.describe()</p>
<pre><code>![](https://velog.velcdn.com/images/kimse_1225/post/896a75b1-2455-4c7b-89bf-9b7b9eaeb2c1/image.png)

1. 컬럼명 변경</code></pre><p>CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]: &quot;구별&quot;}, inplace=True)</p>
<pre><code>
inplace=True 를 지정하면 데이터프레임에 바로 적용. 아래의 코드와 동일한 결과</code></pre><p>CCTV_Seoul = CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]: &quot;구별&quot;})</p>
<pre><code>
여러 컬럼 동시에 변경 가능</code></pre><p>pop_Seoul.rename(
    columns={
        pop_Seoul.columns[0]: &quot;구별&quot;,
        pop_Seoul.columns[1]: &quot;인구수&quot;,
        pop_Seoul.columns[2]: &quot;한국인&quot;,
        pop_Seoul.columns[3]: &quot;외국인&quot;,
        pop_Seoul.columns[4]: &quot;고령자&quot;
    },
    inplace=True
)</p>
<pre><code>
2. 정렬</code></pre><p>CCTV_Seoul.sort_values(by=&quot;소계&quot;, ascending=True).head()</p>
<pre><code>
3. 병합</code></pre><p>pd.merge(left, right, how=&quot;inner&quot;, on=&quot;key&quot;)</p>
<pre><code>- how : inner(디폴트), left, right, outer


4. 삭제</code></pre><p>del data_result[&quot;2014년&quot;]</p>
<h1 id="drop은-axis이-지정되어야-함">drop은 axis이 지정되어야 함</h1>
<p>data_result = data_result.drop([&quot;2015년&quot;, &quot;2016년&quot;], axis=1)</p>
<pre><code>
5. 인덱스 변경</code></pre><p>data_result.set_index(&quot;구별&quot;, inplace=True)</p>
<pre><code>
### matplot
1. Numpy 이용한 1차 직선 생성</code></pre><p>fp1 = np.polyfit(data_result[&quot;인구수&quot;], data_result[&quot;소계&quot;], 1)
f1 = np.poly1d(fp1)
f1(400000)</p>
<pre><code>2. 경향선을 그리기 위한 데이터 생성</code></pre><p>fx = np.linspace(100000, 700000, 100)</p>
<pre><code>![](https://velog.velcdn.com/images/kimse_1225/post/fd86ca4a-f1c8-4a05-aa11-027b0d66619f/image.png)



&gt; 본 블로그에서 사용된 코드는 제로베이스 데이터 스쿨 수업자료에서 일부 발췌함</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] 파이썬 기초 (1)]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-1</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-1</guid>
            <pubDate>Mon, 05 Jun 2023 13:38:06 GMT</pubDate>
            <description><![CDATA[<h4 id="자료형data-type">자료형(Data Type)</h4>
<ul>
<li>효율적인 메모리 사용을 위해 데이터를 구분한 것
i. 정수형 (int)
ii. 실수형 (float)
iii. 문자(열)형 (str)
iv. 논리형 (bool)</li>
</ul>
<blockquote>
<p>파이썬의 데이터 타입은 다른 언어와는 다르게 크기에 제한이 없다.</p>
</blockquote>
<p>ex) 정수형의 경우 메모리가 허용되는 한 무한 사용 가능</p>
<p><img src="https://velog.velcdn.com/images/kimse_1225/post/f697b6a9-2d66-4727-958c-7b4b527928cf/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[제로베이스_데이터 취업 스쿨 16기] OT 후기]]></title>
            <link>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-OT-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@kimse_1225/%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%B7%A8%EC%97%85-%EC%8A%A4%EC%BF%A8-16%EA%B8%B0-OT-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Fri, 02 Jun 2023 13:22:36 GMT</pubDate>
            <description><![CDATA[<p>딥러닝 분야 공부를 위해 여러 온라인 강의 사이트를 알아보다가
제로베이스라는 곳을 알게 되었다.</p>
<p>타사이트 보다 제로베이스에 끌렸던 점은 강의만 듣는 것이 아니라 취업이 연계되는 부분이었다.
재직중이긴 하지만 공부를 시작한 이유는 궁극적으!
로 딥러닝 관련 분야에서 일하고자하는
목표가 있었기 때문에 최종적으로 제로베이스를 선택하게 되었다.</p>
<p>온라인 교육이라 강제성이 없어 끝까지 잘 마무리할 수 있을까 하는 걱정이 있었지만
체계적으로 관리되고 있는 부분과 팀 플젝에서 민폐를 끼치지 않기 위해서라도 6개월간 빡시게
진행하게될 것 같다.</p>
]]></description>
        </item>
    </channel>
</rss>