<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>흔한밀레니얼의 사람이야기</title>
    <link>https://millennials.tistory.com/</link>
    <description>코딩, AI 데이터 사이언스 공부하는 흔한 밀레니언 세대
yy001003@gmail.com</description>
    <language>ko</language>
    <pubDate>Wed, 29 Jul 2026 05:35:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Millennials</managingEditor>
    <item>
      <title>프로그래머스- 조이스틱- 그리디-파이썬</title>
      <link>https://millennials.tistory.com/147</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;h1&gt;문제&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1712&quot; data-origin-height=&quot;1620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3B8Z5/btrP7Opulvc/thlOcCXlcFiBAZhqwiClb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3B8Z5/btrP7Opulvc/thlOcCXlcFiBAZhqwiClb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3B8Z5/btrP7Opulvc/thlOcCXlcFiBAZhqwiClb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3B8Z5%2FbtrP7Opulvc%2FthlOcCXlcFiBAZhqwiClb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1712&quot; height=&quot;1620&quot; data-origin-width=&quot;1712&quot; data-origin-height=&quot;1620&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;처음 내 풀이&lt;/h2&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;def solution(name):


  def upper(char):
      return ord(char) - ord('A')
  def down(char):
      return ord('Z') - ord(char) + 1
  up_down = [min(upper(i),down(i)) for i  in name]

  right = len(name) - 1
  count = sum(up_down) + right
  if 'A' not in name:
      return count

  else :
      left = 0
      left_count = 0
      for i in range(len(name)-1):

          next = i + 1
          while name[next] == 'A' and next &amp;lt; len(name):
              left_count += (left * 2) + 1
              break
          left += 1

      final = min(left_count+sum(up_down), count)
      return final&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답 - 참고 &lt;a href=&quot;https://velog.io/@jqdjhy/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1-Greedy&quot;&gt;https://velog.io/@jqdjhy/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1-Greedy&lt;/a&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[[프로그래머스, 파이썬] 조이스틱, Greedy&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[프로그래머스, 파이썬] 코딩테스트 고득점 Kit - Greedy, level 2 조이스틱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;velog.io](&lt;a href=&quot;https://velog.io/@jqdjhy/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1-Greedy&quot;&gt;https://velog.io/@jqdjhy/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1-Greedy&lt;/a&gt;)&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;def solution(name):


    def upper(char):
        return ord(char) - ord('A')
    def down(char):
        return ord('Z') - ord(char) + 1
    up_down = [min(upper(i),down(i)) for i  in name]

    right = len(name) - 1
    count = sum(up_down) + right
    if 'A' not in name:
        return count

    else :
        left = 0
        move = []
        for i in range(len(name)):

            next = i + 1
            while next &amp;lt; len(name) and name[next] == 'A':
                next += 1
            move.append( min([right, i * 2 + len(name) - next, i + 2 * (len(name) - next)]) )
        return sum(up_down)+min(move)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>개발일지/삽질</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/147</guid>
      <comments>https://millennials.tistory.com/147#entry147comment</comments>
      <pubDate>Tue, 1 Nov 2022 20:08:15 +0900</pubDate>
    </item>
    <item>
      <title>[DA] 4-4. Importing JSON Data and Working with APIs</title>
      <link>https://millennials.tistory.com/146</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;p&gt;해당 내용은 Datacamp의 Data engineering track을 정리했습니다.&lt;br&gt;4. Streamlined Data Ingestion with pandas의 chapter 1에 대한 내용입니다.&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h1&gt;1. Introduction to JSON&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Javascript Object Notation 의 약어로 웹을 통해 데이터를 전송하는 일반적인 형식입니다. &lt;/li&gt;
&lt;li&gt;테이블이 아니기에 더 효율적으로 데이터를 저장할 수 있습니다.&lt;/li&gt;
&lt;li&gt;python의 dict 형식과 같이 key-value 형태 즉 attribute-value 쌍을 가지고 있습니다.&lt;/li&gt;
&lt;li&gt;JSON은 중첩될 수 있습니다.&lt;br&gt;
pandas에서는 &lt;code&gt;read_json()&lt;/code&gt;를 사용해서 불러올 수 있습니다.
&lt;code&gt; orient &lt;/code&gt; argument를 줘서 특수한 경우의 json 파일들도 불러올 수 있습니다.

&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# Load pandas as pd
import pandas as pd

# Load the daily report to a dataframe
pop_in_shelters = pd.read_json(&amp;quot;dhs_daily_report.json&amp;quot;)

# View summary stats about pop_in_shelters
print(pop_in_shelters.describe())
&amp;#39;&amp;#39;&amp;#39;
total_single_adults_in_shelter  
count                        1000.000  
mean                        11472.880  
std                          1113.664  
min                          9610.000  
25%                         10381.750  
50%                         11633.500  
75%                         12437.500  
max                         13270.000 
&amp;#39;&amp;#39;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;2. Introduction to APIs&lt;/h1&gt;
&lt;p&gt;API는 Application Programming Interfaces의 약어로 하나의 어플리케이션이 다른 프로그램과 소통하는 방법을 정의한 것입니다. API를 통해 데이터베이스 구조를 디테일하게 알지 못해도 데이터를 얻을 수 있도록 합니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;code&gt; Requests &lt;/code&gt;를 이용해서 API를 알아봅시다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt; requests.get(url_string) &lt;/code&gt; 는 URL에서 데이터를 가져올 때 사용합니다.&lt;/li&gt;
&lt;li&gt;여러가지 arguments들이 있습니다.&lt;ul&gt;
&lt;li&gt;&lt;code&gt; params &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt; headers &lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과 반환은 &lt;code&gt; response &lt;/code&gt; 코드를 사용 합니다. &lt;ul&gt;
&lt;li&gt;&lt;code&gt; response.json() &lt;/code&gt; 데이터만 가지고 오려할 떄 사용합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt; response.json() &lt;/code&gt; 은 dictionary 형태를 반환하는데 pandas의 &lt;code&gt; pd.read_json() &lt;/code&gt;은 string 형태의 데이터만 읽을 수 있습니다. 그래서 이 경우 &lt;code&gt; pd.DataFrame() &lt;/code&gt;을 사용해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;api_url = &amp;quot;https://api.yelp.com/v3/businesses/search&amp;quot;

# Get data about NYC cafes from the Yelp API
# headers 와 params는 미리 주어진 것을 사용한다.
response = requests.get(api_url, 
                headers=headers, 
                params=params)

# Extract JSON data from the response
data = response.json()

# Load data to a dataframe
cafes = pd.DataFrame(data[&amp;quot;businesses&amp;quot;])

# View the data&amp;#39;s dtypes
print(cafes.dtypes)&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;3. Working with nested JSONs&lt;/h1&gt;
&lt;p&gt;중첩된 JSON에 대해서 어떻게 해야할까요?&lt;br&gt;&lt;code&gt;pandas.io.json&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;json_normalize()&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt; sep &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;record_path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;meta_prefix&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# Load other business attributes and set meta prefix
flat_cafes = json_normalize(data[&amp;quot;businesses&amp;quot;],
                            sep=&amp;quot;_&amp;quot;,
                            record_path=&amp;quot;categories&amp;quot;,
                            meta=[&amp;quot;name&amp;quot;, 
                                  &amp;quot;alias&amp;quot;,  
                                  &amp;quot;rating&amp;quot;,
                                    [&amp;quot;coordinates&amp;quot;, &amp;quot;latitude&amp;quot;], 
                                    [&amp;quot;coordinates&amp;quot;, &amp;quot;longitude&amp;quot;]],
                            meta_prefix=&amp;quot;biz&amp;quot;)





# View the data
print(flat_cafes.head())&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>IT/가짜연구소 스터디</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/146</guid>
      <comments>https://millennials.tistory.com/146#entry146comment</comments>
      <pubDate>Tue, 13 Sep 2022 22:59:55 +0900</pubDate>
    </item>
    <item>
      <title>[DA] 4-3. Importing Data from Databases</title>
      <link>https://millennials.tistory.com/145</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용은 Datacamp의 Data engineering track을 정리했습니다.&lt;br /&gt;4. Streamlined Data Ingestion with pandas의 chapter 1에 대한 내용입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;1. Introduction to databases&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 데이터베이스는 테이블(table)들에 행(rows)와 열(columns)로 이루어져 있습니다. 행들에 각 실제 값들이 들어가게 되고, column에 그 속성이 들어가게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 데이터베이스는 고유한 식별자(unique keys)를 통해 테이블을 연결하거나 관리할 수 있다는 점에서 다른 종류의 데이터들 데이터프레임, excel 등과 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스에서 데이터를 읽는 것은 2단계 프로세스를 거칩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;database에 연결(connect)합니다.&lt;/li&gt;
&lt;li&gt;SQL 혹은 Pandas 언어로 query를 보내 가져옵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 데이터베이스와 작업할 수 있는 도구가 있는 &lt;code&gt;SQLAlchemy&lt;/code&gt; 라이브러리를 사용하게 될 것입니다. 특히 &lt;code&gt;SQLAlchemy&lt;/code&gt; 의 &lt;code&gt;create_engine()&lt;/code&gt; 을 이용해서 데이터 베이스에 연결해서 핸들할 수 있는 엔진을 만들 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔진은 데이터 베이스의 URL을 가져와 데이터베이스에 연결하도록 합니다. 이 URL 패턴은 데이터베이스 종류마다 조금씩 다를 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas 에서는 &lt;code&gt;pd.read_sql(query, engine)&lt;/code&gt; 을 사용합니다.&lt;br /&gt;&lt;code&gt;query&lt;/code&gt; : SQL 문&lt;br /&gt;&lt;code&gt;engine&lt;/code&gt; : 데이터베이스에 연결하는 engine&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;# Load libraries
import pandas as pd
from sqlalchemy import create_engine

# Create the database engine
engine = create_engine('sqlite:///data.db')

# Load hpd311calls without any SQL
hpd_calls = pd.read_sql(&quot;hpd311calls&quot;, engine)

# View the first few rows of data
print(hpd_calls.head())&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# Create a SQL query to load the entire weather table
query = &quot;&quot;&quot;
SELECT * 
  FROM weather;
&quot;&quot;&quot;

# Load weather with the SQL query
weather = pd.read_sql(query, engine)

# View the first few rows of data
print(weather.head())

# 두 쿼리의 결과는 같습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2. Refining imports with SQL queries&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블 열에서 고유한 값들을 가져오는 것은 SQL에서 &lt;code&gt;DISTINCT&lt;/code&gt;을 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;SUM, AVG, MAX, MIN () 괄호 안에 하나의 목표하는 COLUMN 이름이 들어옵니다.&lt;/li&gt;
&lt;li&gt;COUNT(*)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;    # Create query for unique combinations of borough and complaint_type
    # borough와 complaint_type 각각 유니크 한 값이 아니라 쌍이 unique한 값이 불러와진다.
    query = &quot;&quot;&quot;
    SELECT DISTINCT borough, 
         complaint_type
    from hpd311calls;
    &quot;&quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;livescript&quot;&gt;&lt;code&gt;
# Load results of query to a dataframe

issues\_and\_boros = pd.read\_sql(query, engine)

# Check assumption about issues and boroughs

print(issues\_and\_boros)
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;3. Loading multiple tables with joins&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL은 테이블끼리 연결된 테이블 값이 있을 경우, 해당 테이블들을 join시키는 것이 가능합니다.&lt;/p&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;
# Query to get heat/hot water call counts by created\_date
'''
query = &quot;&quot;&quot;  
SELECT hpd311calls.created\_date,  
COUNT(\*)  
FROM hpd311calls  
WHERE hpd311calls.complaint\_type = &quot;HEAT/HOT WATER&quot;  
GROUP BY hpd311calls.created\_date;  
&quot;&quot;&quot;

# Query database and save results as df

df = pd.read\_sql(query, engine)

# View first 5 records

print(df.head())&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>IT/가짜연구소 스터디</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/145</guid>
      <comments>https://millennials.tistory.com/145#entry145comment</comments>
      <pubDate>Tue, 13 Sep 2022 21:37:50 +0900</pubDate>
    </item>
    <item>
      <title>[DA]4-2. Importing Data From Excel Files</title>
      <link>https://millennials.tistory.com/144</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;해당 내용은 Datacamp의 Data engineering track을 정리했습니다.&lt;br /&gt;4. Streamlined Data Ingestion with pandas의 chapter 2에 대한 내용입니다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 1. Introduction&amp;nbsp;to&amp;nbsp;spreadsheets&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로소프트의 Excel 프로그램은 아주 잘 알려진 소프트웨어이고, Excel file은 데이터를 다룰때 흔히 볼 수 있는 양식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판다스에서는 pd.read_excel() 함수를 통해 Excel형식의 파일을 읽어 올 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mFZCl/btrL3z25rzv/PnQaaqPf9hem3dnTbvadw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mFZCl/btrL3z25rzv/PnQaaqPf9hem3dnTbvadw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mFZCl/btrL3z25rzv/PnQaaqPf9hem3dnTbvadw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmFZCl%2FbtrL3z25rzv%2FPnQaaqPf9hem3dnTbvadw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;853&quot; height=&quot;79&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;read_excel 또한 read_csv()와 같이 많은 argument들을 공유합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JMht0/btrLWnpfVxS/tQZQVLPlCmulS6HM21fNq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JMht0/btrLWnpfVxS/tQZQVLPlCmulS6HM21fNq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JMht0/btrLWnpfVxS/tQZQVLPlCmulS6HM21fNq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJMht0%2FbtrLWnpfVxS%2FtQZQVLPlCmulS6HM21fNq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;791&quot; height=&quot;196&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- nrows : 불러올 행의 숫자를 제한합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- skiprows : 행을 건너띄고 불러옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- usecols : 불러올 열을 지정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.1 Get data from a spreadsheet&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAWHyJ/btrL3RJb1iz/BkQOoS7vlUde6pwWXjWvK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAWHyJ/btrL3RJb1iz/BkQOoS7vlUde6pwWXjWvK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAWHyJ/btrL3RJb1iz/BkQOoS7vlUde6pwWXjWvK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAWHyJ%2FbtrL3RJb1iz%2FBkQOoS7vlUde6pwWXjWvK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;893&quot; height=&quot;756&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.2 Load a portion of a spreadsheet&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEVBSz/btrL0S9Y8XN/cXkV4HhBz0OX6Ov7GYVFwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEVBSz/btrL0S9Y8XN/cXkV4HhBz0OX6Ov7GYVFwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEVBSz/btrL0S9Y8XN/cXkV4HhBz0OX6Ov7GYVFwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEVBSz%2FbtrL0S9Y8XN%2FcXkV4HhBz0OX6Ov7GYVFwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;891&quot; height=&quot;764&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 2. Getting data from multiple worksheets&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Excel에 여러 시트의 데이터를 가져오는 방법을 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시트는 sheet_name의 argument를 추가하면서 가져올 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceGL1j/btrLWlSulex/wcLQhXnhfAwvXKK1qT3M41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceGL1j/btrLWlSulex/wcLQhXnhfAwvXKK1qT3M41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceGL1j/btrLWlSulex/wcLQhXnhfAwvXKK1qT3M41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceGL1j%2FbtrLWlSulex%2FwcLQhXnhfAwvXKK1qT3M41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;704&quot; height=&quot;231&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yPJNJ/btrLZPMmi8b/a2qOg1kv6hLc7WGdMGpg80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yPJNJ/btrLZPMmi8b/a2qOg1kv6hLc7WGdMGpg80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yPJNJ/btrLZPMmi8b/a2qOg1kv6hLc7WGdMGpg80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyPJNJ%2FbtrLZPMmi8b%2Fa2qOg1kv6hLc7WGdMGpg80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;689&quot; height=&quot;299&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러개의 sheet를 동시에 가져오는 경우 Dict형태로 가지고 오게 됩니다. key에는 sheet_name이, value에는 Dataframe이 오게 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1663052558726&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Create empty dataframe
all_responses = pd.DataFrame()

# Iterate
for sheet_name, frame in survey_responses.items():
	frame['Year'] = sheet_name
    
    # Add each dataframe to all_responses
    all_responses = all_responses.append(frame)
   
print(all_responses.Year.unique())&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 2.1 Select a single sheet&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 2.2 Select multiple sheets&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 3. Modifying imports: true/false data&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Boolean 데이터 타입을 통해 필터링을 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pandas에서는 dtype으로 Boolean 타입이 포함되어 있지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판다스에서 True는 1으로 False는 0으로 인식합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- null 값은 isna()를 사용해서 찾을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dtype={&quot;대상 column&quot;:bool} 형식을 통해 boolean 타입으로 변환할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- true_values 와 false_values argument를 통해 각각 true값과 false 값을 변경할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663056192117&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Load file with Yes as a True value and No as a False value
survey_subset = pd.read_excel(&quot;fcc_survey_yn_data.xlsx&quot;,
                              dtype={&quot;HasDebt&quot;: bool,
                              &quot;AttendedBootCampYesNo&quot;: bool},
                              true_values=['Yes'],
                              false_values=['No'])

# View the data
print(survey_subset.head())&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 4. Modifying imports:parsing dates&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 datetime을 만져보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;datetime은 dtype argument가 아니라 parse_dates argument를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 parse_dates로 읽어오기 위해서는 pandas가 인식할 수 있게 표현된 datetime 데이터가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 pandas가 인식하지 못하는 형태이라면 pd.to_datetime()으로 해당 데이터를 datetime 형식으로 바꾸어줄 필요가 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E7USQ/btrL4CdU8iU/wyQBdHBKo6Q9uPSUmlb9Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E7USQ/btrL4CdU8iU/wyQBdHBKo6Q9uPSUmlb9Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E7USQ/btrL4CdU8iU/wyQBdHBKo6Q9uPSUmlb9Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE7USQ%2FbtrL4CdU8iU%2FwyQBdHBKo6Q9uPSUmlb9Xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;315&quot; height=&quot;288&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1663057199126&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Create dict of columns to combine into new datetime column
datetime_cols = {&quot;Part2Start&quot;: [&quot;Part2StartDate&quot;,&quot;Part2StartTime&quot;]}


# Load file, supplying the dict to parse_dates
survey_data = pd.read_excel(&quot;fcc_survey_dts.xlsx&quot;,
                            parse_dates=datetime_cols)

# View summary statistics about Part2Start
print(survey_data.Part2Start.describe())&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1663057594081&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Parse datetimes and assign result back to Part2EndTime
survey_data[&quot;Part2EndTime&quot;] = pd.to_datetime(survey_data[&quot;Part2EndTime&quot;], 
                                             format=&quot;%m%d%Y %H:%M:%S&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>IT/가짜연구소 스터디</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/144</guid>
      <comments>https://millennials.tistory.com/144#entry144comment</comments>
      <pubDate>Tue, 13 Sep 2022 17:27:52 +0900</pubDate>
    </item>
    <item>
      <title>[DA] 4-1. Importing Data from Flat Files</title>
      <link>https://millennials.tistory.com/143</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;해당 내용은 Datacamp의 Data engineering track을 정리했습니다.&lt;br /&gt;4. Streamlined Data Ingestion with pandas의 chapter 1에 대한 내용입니다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 1. Introduction to flat files&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서는 데이터를 수집하는 것에 초점을 두고 수업이 진행될 것입니다. 특히 Pandas를 이용해서 데이터를 쉽게 로드하고 조작 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjyKoz/btrLMxskRHt/RBwzUDMmIHhmrXxwHAuRH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjyKoz/btrLMxskRHt/RBwzUDMmIHhmrXxwHAuRH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjyKoz/btrLMxskRHt/RBwzUDMmIHhmrXxwHAuRH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjyKoz%2FbtrLMxskRHt%2FRBwzUDMmIHhmrXxwHAuRH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1480&quot; height=&quot;658&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas의 핵심은 &lt;b&gt;데이터 프레임&lt;/b&gt; 입니다. 데이터 프레임은 행(Index) 열(Column)로 이루어진 2차원 데이터 구조입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQn4KG/btrLQxx63SS/vI1cmkNhZScbfvPkCNza5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQn4KG/btrLQxx63SS/vI1cmkNhZScbfvPkCNza5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQn4KG/btrLQxx63SS/vI1cmkNhZScbfvPkCNza5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQn4KG%2FbtrLQxx63SS%2FvI1cmkNhZScbfvPkCNza5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;680&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Flat Files&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플랫 파일은 단순하고 데이터를 저장하고 공유하는데 널리 사용된 포멧입니다. 일반적으로 CSV파일로 이루어지며 ,로 구분되어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas 에서는 read_csv() 함수를 이용하여 플랫파일을 읽어들입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1493&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0S2Vm/btrLTU7rKIw/KeFaJlirKSxgmhLgar3dSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0S2Vm/btrLTU7rKIw/KeFaJlirKSxgmhLgar3dSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0S2Vm/btrLTU7rKIw/KeFaJlirKSxgmhLgar3dSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0S2Vm%2FbtrLTU7rKIw%2FKeFaJlirKSxgmhLgar3dSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1493&quot; height=&quot;537&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1493&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분자가 ' , ' 가 아닌경우 sep 을 argument로 넣어서 구분자를 설정 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.1 Get data from CSVs&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;1946&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMaeGU/btrLYkq2mMb/tyIcS85JIBihxZ6kyGPTA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMaeGU/btrLYkq2mMb/tyIcS85JIBihxZ6kyGPTA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMaeGU/btrLYkq2mMb/tyIcS85JIBihxZ6kyGPTA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMaeGU%2FbtrLYkq2mMb%2FtyIcS85JIBihxZ6kyGPTA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2282&quot; height=&quot;1946&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;1946&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.2 Get data from other flat files&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vHN1q/btrLPcA1d4l/ARhEf5WC3Nyfjl2JKhnLn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vHN1q/btrLPcA1d4l/ARhEf5WC3Nyfjl2JKhnLn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vHN1q/btrLPcA1d4l/ARhEf5WC3Nyfjl2JKhnLn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvHN1q%2FbtrLPcA1d4l%2FARhEf5WC3Nyfjl2JKhnLn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2272&quot; height=&quot;1934&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;1934&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 2. Modifying flat file imports&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 양을 조절해서 가져오는 방법을 실습해봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Column 수의 조절&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAaAU2/btrLVYhxB9A/zDM7detKz5QrqgRkJMugQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAaAU2/btrLVYhxB9A/zDM7detKz5QrqgRkJMugQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAaAU2/btrLVYhxB9A/zDM7detKz5QrqgRkJMugQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAaAU2%2FbtrLVYhxB9A%2FzDM7detKz5QrqgRkJMugQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1492&quot; height=&quot;360&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 column수가 너무 많을 때 usecols 를 argument로 넣어서 가져올 컬럼의 가짓수를 제한 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXsEe7/btrLXOFJ4zF/Uf8VUVWpOvsBFeD2rp44zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXsEe7/btrLXOFJ4zF/Uf8VUVWpOvsBFeD2rp44zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXsEe7/btrLXOFJ4zF/Uf8VUVWpOvsBFeD2rp44zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXsEe7%2FbtrLXOFJ4zF%2FUf8VUVWpOvsBFeD2rp44zK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1470&quot; height=&quot;580&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index(row)의 조절&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index는 nrows 와 skiprows 를 argument로 넣어서 가져올 양을 조절할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJPy3M/btrLSuBbWns/kdKdE7cC7dhgXM5WlzMkO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJPy3M/btrLSuBbWns/kdKdE7cC7dhgXM5WlzMkO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJPy3M/btrLSuBbWns/kdKdE7cC7dhgXM5WlzMkO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJPy3M%2FbtrLSuBbWns%2FkdKdE7cC7dhgXM5WlzMkO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1484&quot; height=&quot;492&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드의 경우 index 1000까지는 skip되고 row를 500개 가져온다. 즉 1000~ 1500 까지의 row를 가져오게 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 열 이름 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열 이름은 names argument를 지정해서 가져오면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bun3pT/btrLQmwMz7q/dLo7oYEVVdUPwDVepm9sY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bun3pT/btrLQmwMz7q/dLo7oYEVVdUPwDVepm9sY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bun3pT/btrLQmwMz7q/dLo7oYEVVdUPwDVepm9sY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbun3pT%2FbtrLQmwMz7q%2FdLo7oYEVVdUPwDVepm9sY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1472&quot; height=&quot;454&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 2.1 Import a subset of columns&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2240&quot; data-origin-height=&quot;1944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PAtQm/btrLXOls3om/bxxCnK4NMjeodAwKXRPuI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PAtQm/btrLXOls3om/bxxCnK4NMjeodAwKXRPuI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PAtQm/btrLXOls3om/bxxCnK4NMjeodAwKXRPuI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPAtQm%2FbtrLXOls3om%2FbxxCnK4NMjeodAwKXRPuI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2240&quot; height=&quot;1944&quot; data-origin-width=&quot;2240&quot; data-origin-height=&quot;1944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 2.2 Import a file in chunks&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;2012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vtjb5/btrLMwUBUYQ/a4lKnEcEvy24BScUxX2Jz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vtjb5/btrLMwUBUYQ/a4lKnEcEvy24BScUxX2Jz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vtjb5/btrLMwUBUYQ/a4lKnEcEvy24BScUxX2Jz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVtjb5%2FbtrLMwUBUYQ%2Fa4lKnEcEvy24BScUxX2Jz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2268&quot; height=&quot;2012&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;2012&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 3. Handling errors and missing data&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 데이터에 오류가 있는 경우 어떻게 조정할 것인가를 다룹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Data types error&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lqZPj/btrLQnJbTc7/EYoixepFd7JmBKhx22gjU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lqZPj/btrLQnJbTc7/EYoixepFd7JmBKhx22gjU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lqZPj/btrLQnJbTc7/EYoixepFd7JmBKhx22gjU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlqZPj%2FbtrLQnJbTc7%2FEYoixepFd7JmBKhx22gjU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1460&quot; height=&quot;710&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dtype 을 argument로 넣고 바꾸려는 column과 type을 dict 형태로 넣습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Missing Data&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판다스에는 isnull() 메서드와 같이 Null 을 찾아내고 값을 넣는 메서드가 잘 생성되어있습니다. 그런데 더미 데이터로 공백(Null) 대신 0이 들어가 있는 경우도 있습니다. 이 0 을 missing data로 처리해야한다고 했을 때 어떻게 해야할지 아래 예제로 알아볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1474&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAGinu/btrLNo29PoY/uUKhV0J4yar2TZHhn3GaEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAGinu/btrLNo29PoY/uUKhV0J4yar2TZHhn3GaEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAGinu/btrLNo29PoY/uUKhV0J4yar2TZHhn3GaEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAGinu%2FbtrLNo29PoY%2FuUKhV0J4yar2TZHhn3GaEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1474&quot; height=&quot;716&quot; data-origin-width=&quot;1474&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예제에서 0으로 처리되었던 zipcode 컬럼의 값들이 NaN으로 missing value 취급이 되었다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Lines with Errors&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 csv 파일중에 손상된 라인이 있어서 행 열 간격이 맞지 않게 되어 csv파일을 읽지 못하는 경우가 있습니다. 이런 경우 error_bad_lines=False 로 손상된 라인은 건너뛰도록 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2PFpN/btrLXNUn6wN/ZNfkyvr8Hl1UFhWzrOKqk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2PFpN/btrLXNUn6wN/ZNfkyvr8Hl1UFhWzrOKqk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2PFpN/btrLXNUn6wN/ZNfkyvr8Hl1UFhWzrOKqk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2PFpN%2FbtrLXNUn6wN%2FZNfkyvr8Hl1UFhWzrOKqk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1502&quot; height=&quot;384&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.1 Specify data types&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2254&quot; data-origin-height=&quot;1926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNLWGI/btrLNqzUVYT/f7d9TeRbKk3EJtta1eAbRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNLWGI/btrLNqzUVYT/f7d9TeRbKk3EJtta1eAbRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNLWGI/btrLNqzUVYT/f7d9TeRbKk3EJtta1eAbRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNLWGI%2FbtrLNqzUVYT%2Ff7d9TeRbKk3EJtta1eAbRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2254&quot; height=&quot;1926&quot; data-origin-width=&quot;2254&quot; data-origin-height=&quot;1926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.2 Set custom NA values&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2254&quot; data-origin-height=&quot;1930&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4iocY/btrLZyCE3aI/23wAkd0QgK6jOC2oxD0elk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4iocY/btrLZyCE3aI/23wAkd0QgK6jOC2oxD0elk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4iocY/btrLZyCE3aI/23wAkd0QgK6jOC2oxD0elk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4iocY%2FbtrLZyCE3aI%2F23wAkd0QgK6jOC2oxD0elk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2254&quot; height=&quot;1930&quot; data-origin-width=&quot;2254&quot; data-origin-height=&quot;1930&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.3 Skip bad data&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2262&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxxQox/btrLVXQufCd/mUpSzIxfhFgkquEOLri6I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxxQox/btrLVXQufCd/mUpSzIxfhFgkquEOLri6I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxxQox/btrLVXQufCd/mUpSzIxfhFgkquEOLri6I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxxQox%2FbtrLVXQufCd%2FmUpSzIxfhFgkquEOLri6I0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2262&quot; height=&quot;1280&quot; data-origin-width=&quot;2262&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2266&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G3DHt/btrLOfkAGQ5/Mr6ju7WIZ3vzzE3McWoAo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G3DHt/btrLOfkAGQ5/Mr6ju7WIZ3vzzE3McWoAo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G3DHt/btrLOfkAGQ5/Mr6ju7WIZ3vzzE3McWoAo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG3DHt%2FbtrLOfkAGQ5%2FMr6ju7WIZ3vzzE3McWoAo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2266&quot; height=&quot;1200&quot; data-origin-width=&quot;2266&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/가짜연구소 스터디</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/143</guid>
      <comments>https://millennials.tistory.com/143#entry143comment</comments>
      <pubDate>Mon, 12 Sep 2022 20:38:35 +0900</pubDate>
    </item>
    <item>
      <title>[DA] 3-4. Case Study: DataCamp</title>
      <link>https://millennials.tistory.com/142</link>
      <description>&lt;div class=&quot;markdown-body&quot;&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;해당 내용은 Datacamp의 Data engineering track을 정리했습니다.&lt;br /&gt;3. Introduction to data engineering의 chapter 4에 대한 내용입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 1. Course ratings&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataCamp의 학생은 한 장을 완료한 후 평가할 수 있습니다. 이 챕터 등급을 집계하여 사람들이 특정 코스를 어떻게 평가하는지 추정할 수 있습니다. 이러한 종류의 등급 데이터는 추천 시스템에서 사용하기에 적합합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSDoW/btrLVZmZSFc/gI5ad02Js0fPN2f8OQImUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSDoW/btrLVZmZSFc/gI5ad02Js0fPN2f8OQImUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSDoW/btrLVZmZSFc/gI5ad02Js0fPN2f8OQImUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSDoW%2FbtrLVZmZSFc%2FgI5ad02Js0fPN2f8OQImUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1514&quot; height=&quot;612&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;추천시스템에 평가 데이터를 사용하기 위해서는, 저장된 평가 데이터들을 추출(Extract)하고, 변환(Transform)한후, 데이터 베이스에 저장(Load)하는 일련의 과정이 필요합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1454&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H1lXR/btrLTWqug4v/cRbU2wkMb8CIxCzaMuyuY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H1lXR/btrLTWqug4v/cRbU2wkMb8CIxCzaMuyuY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H1lXR/btrLTWqug4v/cRbU2wkMb8CIxCzaMuyuY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH1lXR%2FbtrLTWqug4v%2FcRbU2wkMb8CIxCzaMuyuY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1454&quot; height=&quot;714&quot; data-origin-width=&quot;1454&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이 챕터에서는 Course와 Rating 두 개의 테이블을 이용할 것입니다. Rating의 course_id는 외래키로 Course 테이블에서 받아오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.1 Exploring the schema&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1764&quot; data-origin-height=&quot;1414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vw3im/btrLTUMYc9Y/KaWxutwGKpLFvnldN623Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vw3im/btrLTUMYc9Y/KaWxutwGKpLFvnldN623Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vw3im/btrLTUMYc9Y/KaWxutwGKpLFvnldN623Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvw3im%2FbtrLTUMYc9Y%2FKaWxutwGKpLFvnldN623Mk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1764&quot; height=&quot;1414&quot; data-origin-width=&quot;1764&quot; data-origin-height=&quot;1414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.2 Querying the table&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;1970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/STsDn/btrLLV7UUQ2/88guVJI25pUYckxZOCfPtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/STsDn/btrLLV7UUQ2/88guVJI25pUYckxZOCfPtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/STsDn/btrLLV7UUQ2/88guVJI25pUYckxZOCfPtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSTsDn%2FbtrLLV7UUQ2%2F88guVJI25pUYckxZOCfPtk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2268&quot; height=&quot;1970&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;1970&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 1.3 Average rating per course&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2256&quot; data-origin-height=&quot;1956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lOiu5/btrLZyoVmr7/IAK7oCXZRNlT5Z2RmP23o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lOiu5/btrLZyoVmr7/IAK7oCXZRNlT5Z2RmP23o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lOiu5/btrLZyoVmr7/IAK7oCXZRNlT5Z2RmP23o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlOiu5%2FbtrLZyoVmr7%2FIAK7oCXZRNlT5Z2RmP23o0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2256&quot; height=&quot;1956&quot; data-origin-width=&quot;2256&quot; data-origin-height=&quot;1956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 2. From ratings to recommendations&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서는 Raw 평가 테이블에서 데이터를 추출하고 변환하였습니다. 이제 이 변환된 데이터를 가지고 추천 시스템을 만들어 볼 차례입니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M9zu8/btrLOgDAyXn/30MHV0vF6a5WTkWLHShod1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M9zu8/btrLOgDAyXn/30MHV0vF6a5WTkWLHShod1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M9zu8/btrLOgDAyXn/30MHV0vF6a5WTkWLHShod1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM9zu8%2FbtrLOgDAyXn%2F30MHV0vF6a5WTkWLHShod1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1480&quot; height=&quot;756&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;목표로하는 추천시스템의 테이블 형태는 위와 같습니다. Course와 Rating 테이블에서 추출한 데이터를 사용하여, 유저별로 각 강의마다 평가점수를 예측해서, Top3의 강의를 추천해 주는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 추천시스템을 만드는 과정은 &lt;b&gt;Matrix factorization&lt;/b&gt;이라는 추천시스템 알고리즘 모델을 사용할 것입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;고려할점&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;- 첫번째로 고려할 것은 높은 평점을 가진 강의를 추천하는 것입니다. 이전까지 우리는 각 코스 ID에 대한 평균 코스 평점을 도출해냈습니다. 이 과정을 연계해서 사용할 것입니다.&amp;nbsp;&lt;br /&gt;- 두번째로 고려할 것은 사용자의 관심을 끄는 프로그래밍 언어로된 과정을 추천할 것입니다. 사용자가 평가한 강의 중 가장 높은 비중을 차지하는 언어를 추천해 줄 것입니다.&lt;br /&gt;- 세번째로 사용자가 아직 평가하지 않은 강의만 추천할 것입니다. 즉 Rating 테이블에 user_id와 course_id의 조합이 있으면 안된다는 것입니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;생성할 추천시스템의 규칙&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 강의 추천수가 높은 강의들로 추천을 합니다.&lt;br /&gt;2. 사용자가 평가하지 않은 강의들로 추천을 합니다.&lt;br /&gt;3. 가장 높은 등급 3개의 코스를 추천합니다.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 2.1 Filter out corrupt data&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;1948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vtr0h/btrLPnCp9HP/Dxq3wX8rRsSqQXUweoRL21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vtr0h/btrLPnCp9HP/Dxq3wX8rRsSqQXUweoRL21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vtr0h/btrLPnCp9HP/Dxq3wX8rRsSqQXUweoRL21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvtr0h%2FbtrLPnCp9HP%2FDxq3wX8rRsSqQXUweoRL21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2284&quot; height=&quot;1948&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;1948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 2.2 Using the recommender transformation&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;1922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vk1C4/btrLNwfywvo/I2kta05OCNkIr3AprbtGkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vk1C4/btrLNwfywvo/I2kta05OCNkIr3AprbtGkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vk1C4/btrLNwfywvo/I2kta05OCNkIr3AprbtGkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvk1C4%2FbtrLNwfywvo%2FI2kta05OCNkIr3AprbtGkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2284&quot; height=&quot;1922&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;1922&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 추천시스템이 만들어진다... 해당 과정은 추천시스템 알고리즘 교육과정이 아니기 때문에 Matrix factorization 등의 과정은 생략되어있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;# 3. Scheduling daily jobs&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwQfej/btrLLWlpT8X/3VnR1p0MYVROelLRPtUWM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwQfej/btrLLWlpT8X/3VnR1p0MYVROelLRPtUWM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwQfej/btrLLWlpT8X/3VnR1p0MYVROelLRPtUWM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwQfej%2FbtrLLWlpT8X%2F3VnR1p0MYVROelLRPtUWM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1492&quot; height=&quot;636&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이제 데이터를 Postgres 테이블에 로드하고, Airflow를 통해 테이블을 최신화하는 일련의 과정을 해볼 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천테이블을 Sql로 만들어 load해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1662963560999&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;recommendations.to_sql(
	&quot;recommendations&quot;,
    	db_engine,
    	if_exists=&quot;append&quot;,
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The&amp;nbsp;etl()&amp;nbsp;function&lt;/p&gt;
&lt;pre id=&quot;code_1662964040582&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def etl(db_engines):
	# Extract the data
    courses = extract_course_data(db_engines)
    rating = extract_rating_data(db_engines)
    
    # Clean up courses data
    courses = transtorm_fill_programming_language(courses)
    
    # Get the average course ratings
    avg_course_rating = transform_avg_rating(rating)
    
    # Get eligible user and course id pairs
    courses_to_recommend = transform_courses_to_recommend(
    	rating,
        courses,
    )
    
    # Calculate the recommendations
    recommendations = transform_recommendations(
    	avg_course_rating,
        courses_to_recommend,
    )
    
    # Load the recommendations into the database
    load_to_dwh(recommendations, db_engine))&lt;/code&gt;&lt;/pre&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;Creating&amp;nbsp;the&amp;nbsp;DAG&lt;/p&gt;
&lt;pre id=&quot;code_1662964336294&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator

# 매일 0시에 실행
dag = DAG(dag_id=&quot;recommendations&quot;,
		  scheduled_interval=&quot;0 0 * * *&quot;)
task_recommendations = PythonOperator(
	task_id=&quot;recommendations_task&quot;,
    python_callable=etl,
)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.1 The target table&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2266&quot; data-origin-height=&quot;1972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eA9ieh/btrLYj6AfDY/Yr8BHKJ9iC3zokkvktylJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eA9ieh/btrLYj6AfDY/Yr8BHKJ9iC3zokkvktylJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eA9ieh/btrLYj6AfDY/Yr8BHKJ9iC3zokkvktylJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeA9ieh%2FbtrLYj6AfDY%2FYr8BHKJ9iC3zokkvktylJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2266&quot; height=&quot;1972&quot; data-origin-width=&quot;2266&quot; data-origin-height=&quot;1972&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if_exists=&quot;replace&quot;에서 조금 tricky한 문제&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.2 Defining the DAG&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2270&quot; data-origin-height=&quot;1956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brQbK9/btrLNpnhzfl/BYK2Fmj33rolWcTXwnMaf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brQbK9/btrLNpnhzfl/BYK2Fmj33rolWcTXwnMaf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brQbK9/btrLNpnhzfl/BYK2Fmj33rolWcTXwnMaf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrQbK9%2FbtrLNpnhzfl%2FBYK2Fmj33rolWcTXwnMaf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2270&quot; height=&quot;1956&quot; data-origin-width=&quot;2270&quot; data-origin-height=&quot;1956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.3 Enable the DAG&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2286&quot; data-origin-height=&quot;1564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2jG0y/btrLPnibn0g/G1AEnxGV1C8oI0cq43u0lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2jG0y/btrLPnibn0g/G1AEnxGV1C8oI0cq43u0lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2jG0y/btrLPnibn0g/G1AEnxGV1C8oI0cq43u0lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2jG0y%2FbtrLPnibn0g%2FG1AEnxGV1C8oI0cq43u0lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2286&quot; height=&quot;1564&quot; data-origin-width=&quot;2286&quot; data-origin-height=&quot;1564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;## 3.4 Querying the recommendations&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;1932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QCbH0/btrLOmjvNug/qkuDI0cJzy7MYNMLUkKRi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QCbH0/btrLOmjvNug/qkuDI0cJzy7MYNMLUkKRi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QCbH0/btrLOmjvNug/qkuDI0cJzy7MYNMLUkKRi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQCbH0%2FbtrLOmjvNug%2FqkuDI0cJzy7MYNMLUkKRi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2258&quot; height=&quot;1932&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;1932&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
  
&lt;/div&gt;</description>
      <category>IT/가짜연구소 스터디</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/142</guid>
      <comments>https://millennials.tistory.com/142#entry142comment</comments>
      <pubDate>Mon, 12 Sep 2022 16:42:48 +0900</pubDate>
    </item>
    <item>
      <title>[YOLOv5]Colab Tutorial을 이용하여 학습 및 Inference시키기 2.</title>
      <link>https://millennials.tistory.com/141</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://millennials.tistory.com/140&quot;&gt;https://millennials.tistory.com/140&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 포스팅 &lt;i&gt;[YOLOv5]Colab Tutorial을 이용하여 학습 및 Inference시키기 1.&amp;nbsp;&lt;/i&gt;에 이어지는 글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 YOLOv5에 내가 원하는 학습데이터셋을 fine-tunning 할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 먼저 준비물이 필요합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 학습할 사진 데이터(train, validation)과 Label(class, x, y, width, height) 데이터&lt;br /&gt;2. yaml 파일&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1EuSwMZTNb0tQnDO-3lhzhkn1JXOneYls/view?usp=sharing&quot;&gt;https://drive.google.com/file/d/1EuSwMZTNb0tQnDO-3lhzhkn1JXOneYls/view?usp=sharing&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 글에서 사용한 raw 데이터를 구글 드라이브에 업로드 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.&amp;nbsp;YOLOv5&amp;nbsp;Training&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1 구글 드라이브 불러오기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 아래에 나온 순서대로 실행하여 내 계정의 구글 드라이브와 연동시킵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q44uJ/btrJ8mdYPM3/4WqQKO1gENDyXOQ5KfufHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q44uJ/btrJ8mdYPM3/4WqQKO1gENDyXOQ5KfufHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q44uJ/btrJ8mdYPM3/4WqQKO1gENDyXOQ5KfufHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ44uJ%2FbtrJ8mdYPM3%2F4WqQKO1gENDyXOQ5KfufHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;427&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 연동이 끝나면 아래 표시된 새로고침을 누르면 drive 폴더가 나타납니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAnVP/btrKbsEh85v/9L54nxq5DKmNNvxMxd2YV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAnVP/btrKbsEh85v/9L54nxq5DKmNNvxMxd2YV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAnVP/btrKbsEh85v/9L54nxq5DKmNNvxMxd2YV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAnVP%2FbtrKbsEh85v%2F9L54nxq5DKmNNvxMxd2YV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;292&quot; height=&quot;258&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 구글드라이브에 업로드한 toy-project 폴더의 경로를 복사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BKEJs/btrJ6OiiBES/b2n83q73vGkBj6FjcdwGEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BKEJs/btrJ6OiiBES/b2n83q73vGkBj6FjcdwGEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BKEJs/btrJ6OiiBES/b2n83q73vGkBj6FjcdwGEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBKEJs%2FbtrJ6OiiBES%2Fb2n83q73vGkBj6FjcdwGEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;305&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 yaml 파일 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굉장히 중요한 포인트임으로 집중해서 아래 yaml 파일을 수정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lNfzU/btrJ6VIb7rQ/tMeZAIcKP5Ui9uX6N0BQC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lNfzU/btrJ6VIb7rQ/tMeZAIcKP5Ui9uX6N0BQC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lNfzU/btrJ6VIb7rQ/tMeZAIcKP5Ui9uX6N0BQC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlNfzU%2FbtrJ6VIb7rQ%2FtMeZAIcKP5Ui9uX6N0BQC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1439&quot; height=&quot;547&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) data.yaml 파일을 더블클릭하면 오른쪽에 텍스트 창이 열린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) train, val 폴더 경로 앞에 아까 복사한 경로를 붙인다.(toy-project를 드래그한 후 붙여넣기 한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) ctrl + s 를 해서 저장한 후 텍스트 창을 닫는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 Training 시키기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) data.yaml의 경로를 복사한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnprut/btrKbtpEyOp/mLLiU6wfm1IMP8JPZcB7L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnprut/btrKbtpEyOp/mLLiU6wfm1IMP8JPZcB7L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnprut/btrKbtpEyOp/mLLiU6wfm1IMP8JPZcB7L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdnprut%2FbtrKbtpEyOp%2FmLLiU6wfm1IMP8JPZcB7L0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;308&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Train 셀의 coco128.yaml 을 방금 복사한 data.yaml경로로 수정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1463&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsPwPK/btrJ8HCbKQh/4QUiSKMfKdufQaGAVMlVT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsPwPK/btrJ8HCbKQh/4QUiSKMfKdufQaGAVMlVT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsPwPK/btrJ8HCbKQh/4QUiSKMfKdufQaGAVMlVT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsPwPK%2FbtrJ8HCbKQh%2F4QUiSKMfKdufQaGAVMlVT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1463&quot; height=&quot;216&quot; data-origin-width=&quot;1463&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 수정한 셀을 실행시킨 후 아래와 같은 화면이 나오면 훈련시키기에 성공한 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPLtLF/btrJ8lTFDUn/axrO79K6Ak5McT7bnrr2d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPLtLF/btrJ8lTFDUn/axrO79K6Ak5McT7bnrr2d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPLtLF/btrJ8lTFDUn/axrO79K6Ak5McT7bnrr2d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPLtLF%2FbtrJ8lTFDUn%2FaxrO79K6Ak5McT7bnrr2d1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;913&quot; height=&quot;705&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 - 훈련 과정 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 yolov5- runs-train-exp2 경로에 들어가면 훈련되고 있는 과정을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;weights 폴더에 훈련되고 있는 모델의 가중치가 저장된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wpppD/btrJ74YvoYZ/VNqA0fTO4GxI4jeAxtnpj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wpppD/btrJ74YvoYZ/VNqA0fTO4GxI4jeAxtnpj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wpppD/btrJ74YvoYZ/VNqA0fTO4GxI4jeAxtnpj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwpppD%2FbtrJ74YvoYZ%2FVNqA0fTO4GxI4jeAxtnpj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;279&quot; height=&quot;572&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4 Inference&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;훈련된 모델에 테스트하고 싶은 사진을 넣어보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 아래 코드를 복사하여 코드를 붙여넣는다.&lt;/p&gt;
&lt;pre id=&quot;code_1660994187938&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!python detect.py --weights 가중치경로 --img 640 --conf 0.25 --source 사진경로&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 아래 사진과 같이 훈련이 진행된 경로로 가서, 훈련된 가중치의 경로를 복사한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzXI61/btrJ70WyCjR/H6pEGd8Rky7UMsaeR5gio0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzXI61/btrJ70WyCjR/H6pEGd8Rky7UMsaeR5gio0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzXI61/btrJ70WyCjR/H6pEGd8Rky7UMsaeR5gio0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzXI61%2FbtrJ70WyCjR%2FH6pEGd8Rky7UMsaeR5gio0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;301&quot; height=&quot;529&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 붙여넣은 코드에 '가중치경로'를 지우고 복사한 경로를 붙여 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 모델 대상이 되는 사진을 업로드한 후, 경로를 복사하여 '사진경로'를 지우고 복사한 경로를 붙여 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 아래 사진 경로의 마지막 exp 폴더에서 결과를 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bduQEs/btrJ9tX06eM/BJcLS82kAKxtJv36RrpUf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bduQEs/btrJ9tX06eM/BJcLS82kAKxtJv36RrpUf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bduQEs/btrJ9tX06eM/BJcLS82kAKxtJv36RrpUf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbduQEs%2FbtrJ9tX06eM%2FBJcLS82kAKxtJv36RrpUf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;289&quot; height=&quot;231&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT/AI-ML</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/141</guid>
      <comments>https://millennials.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 20 Aug 2022 19:48:29 +0900</pubDate>
    </item>
    <item>
      <title>[YOLOv5]Colab Tutorial을 이용하여 학습 및 Inference시키기 1.</title>
      <link>https://millennials.tistory.com/140</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022-08-20 기준 Colab에서 YOLOv5를 이용한 기본적 학습 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따로 코딩을 하지 않고 YOLOv5 Tutorial.ipynb을 이용 및 수정하여 진행할 예정입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. YOLOv5 Tutorial&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1 YOLOv5 공식 Git-Hub 방문&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 주소의 공식 YOLOv5 깃허브 주소를 방문합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/ultralytics/yolov5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ultralytics/yolov5&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2 tutorial.ipynb Colab으로 실행&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1pIe6/btrJ8qGWvNH/QaEwxbokW5i2u6q9IxRjlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1pIe6/btrJ8qGWvNH/QaEwxbokW5i2u6q9IxRjlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1pIe6/btrJ8qGWvNH/QaEwxbokW5i2u6q9IxRjlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1pIe6%2FbtrJ8qGWvNH%2FQaEwxbokW5i2u6q9IxRjlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;875&quot; height=&quot;357&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 사진에 표시된 tutorial.ipynb 파일을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plcNy/btrJ8It9MKz/1tRXUT2BeO8mW91QaVbYIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plcNy/btrJ8It9MKz/1tRXUT2BeO8mW91QaVbYIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plcNy/btrJ8It9MKz/1tRXUT2BeO8mW91QaVbYIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FplcNy%2FbtrJ8It9MKz%2F1tRXUT2BeO8mW91QaVbYIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;927&quot; height=&quot;538&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 표시된 Open in Colab을 클릭하여 Colab으로 실행시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.3 Colab환경세팅&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgTdY7/btrJ8ZPQZu1/luK1gwfERdNkbNsKoLftY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgTdY7/btrJ8ZPQZu1/luK1gwfERdNkbNsKoLftY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgTdY7/btrJ8ZPQZu1/luK1gwfERdNkbNsKoLftY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgTdY7%2FbtrJ8ZPQZu1%2FluK1gwfERdNkbNsKoLftY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;923&quot; height=&quot;346&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위에 보이는 Setup 셀을 실행시켜 Colab 환경에 YOLOv5 모델을 다운받습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PgHi5/btrJ9tXQizQ/Q3r6mBDc2YJzUGQQNIEI5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PgHi5/btrJ9tXQizQ/Q3r6mBDc2YJzUGQQNIEI5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PgHi5/btrJ9tXQizQ/Q3r6mBDc2YJzUGQQNIEI5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPgHi5%2FbtrJ9tXQizQ%2FQ3r6mBDc2YJzUGQQNIEI5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;560&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌측에 폴더 표시를 열었을때 위의 사진과 같이 yolov5 폴더가 있으면 잘 받아진 것입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.4 예제사진으로 제대로 가동하는지 여부 확인&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4LGf7/btrKauB4AJ8/yPXvxoYlpWyPRPubVi5RHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4LGf7/btrKauB4AJ8/yPXvxoYlpWyPRPubVi5RHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4LGf7/btrKauB4AJ8/yPXvxoYlpWyPRPubVi5RHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4LGf7%2FbtrKauB4AJ8%2FyPXvxoYlpWyPRPubVi5RHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;906&quot; height=&quot;391&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Detect 셀의 두번째 셀의 주석을 풀고 실행시킵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mq2Kk/btrJ8nDQwhi/B4xnfxipN84qySKwmY2vHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mq2Kk/btrJ8nDQwhi/B4xnfxipN84qySKwmY2vHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mq2Kk/btrJ8nDQwhi/B4xnfxipN84qySKwmY2vHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmq2Kk%2FbtrJ8nDQwhi%2FB4xnfxipN84qySKwmY2vHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;879&quot; height=&quot;614&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 셀안에 바운딩박스가 쳐진 지단의 예제사진이 뜬다면 성공한 것입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추가 정보&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- 마지막 inference 셀 코드 의미&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1660982099082&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images
display.Image(filename='runs/detect/exp/zidane.jpg', width=600)&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;!python detect.py : detect.py 파일을 실행&lt;br /&gt;--weights : 사용할 모델 가중치&lt;br /&gt;--img : 이미지 크기&lt;br /&gt;--conf : threshold&lt;br /&gt;--source : 모델을 돌릴 사진이 되는 있는 위치&lt;br /&gt;&lt;br /&gt;display.Image : 이미지를 보여라&lt;br /&gt;- filename : 보여줄 이미지&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;- 다른 사진으로 inference하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 아래 사진의 images 란에 내가 모델에 넣고 싶은 사진을 업로드 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1sjRW/btrJ8lF3kks/qB0wPMF3mFlby3GwmYH3l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1sjRW/btrJ8lF3kks/qB0wPMF3mFlby3GwmYH3l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1sjRW/btrJ8lF3kks/qB0wPMF3mFlby3GwmYH3l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1sjRW%2FbtrJ8lF3kks%2FqB0wPMF3mFlby3GwmYH3l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;272&quot; height=&quot;187&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 아래 코드 실행&lt;/p&gt;
&lt;pre id=&quot;code_1660982859412&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 아래 사진의 detect 폴더의 마지막 exp 폴더에서 결과 사진을 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIlRy5/btrKbtpzqhl/mfnwcBTkgo9M4lN8viX2y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIlRy5/btrKbtpzqhl/mfnwcBTkgo9M4lN8viX2y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIlRy5/btrKbtpzqhl/mfnwcBTkgo9M4lN8viX2y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIlRy5%2FbtrKbtpzqhl%2FmfnwcBTkgo9M4lN8viX2y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;289&quot; height=&quot;231&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT/AI-ML</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/140</guid>
      <comments>https://millennials.tistory.com/140#entry140comment</comments>
      <pubDate>Sat, 20 Aug 2022 16:08:27 +0900</pubDate>
    </item>
    <item>
      <title>[Window]Tensorflow, Pytorch 둘 다 호환되는 Nvidia Cuda설치</title>
      <link>https://millennials.tistory.com/139</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 기존 설치된 nvidia 관련 파일 삭제&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qsrVJ/btrI1V9SG8J/qj6pW9nS8lwDd72CzEBLNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qsrVJ/btrI1V9SG8J/qj6pW9nS8lwDd72CzEBLNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qsrVJ/btrI1V9SG8J/qj6pW9nS8lwDd72CzEBLNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqsrVJ%2FbtrI1V9SG8J%2Fqj6pW9nS8lwDd72CzEBLNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1085&quot; height=&quot;798&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD8gm0/btrI4VOlECw/I0k4omvWKCcK0xKsLsqSv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD8gm0/btrI4VOlECw/I0k4omvWKCcK0xKsLsqSv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD8gm0/btrI4VOlECw/I0k4omvWKCcK0xKsLsqSv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD8gm0%2FbtrI4VOlECw%2FI0k4omvWKCcK0xKsLsqSv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;430&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 프로그램 추가제거에서 nvidia 관련 프로그램을 전부 삭제하고, program files 폴더에 있는 NVIDIA 관련 파일까지 모두 삭제한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. CUDA Toolkit 11.3.0 버전을 다운받아 설치한다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.nvidia.com/cuda-toolkit-archive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNoh9H/btrI2wIAvDP/x7N8togvB46LwQynhmMsZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNoh9H/btrI2wIAvDP/x7N8togvB46LwQynhmMsZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNoh9H/btrI2wIAvDP/x7N8togvB46LwQynhmMsZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNoh9H%2FbtrI2wIAvDP%2Fx7N8togvB46LwQynhmMsZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;945&quot; height=&quot;404&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분이 가장 중요한 핵심이다. 다른 상위 버전은 보지도 말고 11.3.0을 다운 받는 것이 가장 정신건강에 이롭다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 pytorch 공홈에서 보면 호환되는 버전이 10.2 와 11.3, 11.6이 있는데 11.6은 tensorflow에서 호환이 어렵다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니 그냥 11.3.0을 받도록하자. 혹시 그래픽카드가 좋은거라서 더 높은 버전을 써야하는 것 아닌가 싶을 수 있는데, 그냥 11.3.0 을 받아서 돌아가면 마음편하다. (본인 경험상 11.5 이상은 텐서플로우에서 크러시날 확률이 높다. 10.2는 시도 안해봤지만 10.2버전은 호환이 될 가능성이 높다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi2SOH/btrI1VINymB/VPpQd9uxxM9emuksaWfTw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi2SOH/btrI1VINymB/VPpQd9uxxM9emuksaWfTw0/img.png&quot; data-alt=&quot;pytorch 공홈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi2SOH/btrI1VINymB/VPpQd9uxxM9emuksaWfTw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi2SOH%2FbtrI1VINymB%2FVPpQd9uxxM9emuksaWfTw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1114&quot; height=&quot;460&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pytorch 공홈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치는 그냥 권장으로 쭉쭉 밀면 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. cuDNN v8.2.0 버전 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cudnn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.nvidia.com/cudnn&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 cuDNN을 다운받아야 하는데, 로그인이 필요하다. NVIDIA 아이디가 없을시 가입이 강제된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한 포인트는 cuDNN v8.2.0을 받아야 한다는 점이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;받아보면 파일명에 11.3이라고 박혀있는 주제에 공홈에는 11.x라고 적혀있다. 왜인지 모르겠으나 그냥 v8.2.0으로 받자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qyjQg/btrI6qAAnY2/m1mdmYvgYba9w6M67lJ2FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qyjQg/btrI6qAAnY2/m1mdmYvgYba9w6M67lJ2FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qyjQg/btrI6qAAnY2/m1mdmYvgYba9w6M67lJ2FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqyjQg%2FbtrI6qAAnY2%2Fm1mdmYvgYba9w6M67lJ2FK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;916&quot; height=&quot;545&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OdKZo/btrIZ6XVrOd/CB9pGMeTSDiS1rHMRCcZeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OdKZo/btrIZ6XVrOd/CB9pGMeTSDiS1rHMRCcZeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OdKZo/btrIZ6XVrOd/CB9pGMeTSDiS1rHMRCcZeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOdKZo%2FbtrIZ6XVrOd%2FCB9pGMeTSDiS1rHMRCcZeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1632&quot; height=&quot;566&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치는 받은 cuDNN zip 압축을 푼 이후 내용물을 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3 폴더에 덮어씌운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Tensorflow, pytorch 간단한 훈련 진행 테스트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1659763647225&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# tensorflow 확인
import tensorflow as tf
tf.test.is_gpu_available()

# torch 확인
import torch
torch.cuda.is_available()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드로 GPU를 인식하고 있는 여부를 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 GPU를 인식하고 있어도 kernel crash 오류가 날 수 있음으로 간단한 학습을 진행시켜보는 것을 권장한다.&lt;/p&gt;</description>
      <category>IT/TroubleShooting</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/139</guid>
      <comments>https://millennials.tistory.com/139#entry139comment</comments>
      <pubDate>Sat, 6 Aug 2022 14:29:08 +0900</pubDate>
    </item>
    <item>
      <title>Tensorflow GPU kerner died 문제, kernel&amp;nbsp;process&amp;nbsp;died&amp;nbsp;ExitCode:&amp;nbsp;3221226505</title>
      <link>https://millennials.tistory.com/138</link>
      <description>&lt;p&gt;tensorflow 학습을 GPU로 돌리려고 하니 VSCode 커널이 계속 죽는 문제가 발생하였다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;error 16:56:55.300: Disposing session as kernel process died ExitCode: 3221226505, Reason: c:\\Users\\y0010\\anaconda3\\envs\\CV2\\lib\\site-packages\\traitlets\\traitlets.py:2392: FutureWarning: Supporting extra quotes around strings is deprecated in traitlets 5.0. You can use &amp;#39;hmac-sha256&amp;#39; instead of &amp;#39;&amp;quot;hmac-sha256&amp;quot;&amp;#39; if you require traitlets &amp;gt;=5.  
  warn(  
c:\\Users\\y0010\\anaconda3\\envs\\CV2\\lib\\site-packages\\traitlets\\traitlets.py:2346: FutureWarning: Supporting extra quotes around Bytes is deprecated in traitlets 5.0. Use &amp;#39;5b3a69ad-bb15-4fcf-9417-58c368705aae&amp;#39; instead of &amp;#39;b&amp;quot;5b3a69ad-bb15-4fcf-9417-58c368705aae&amp;quot;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이 문제를 해결하기 위해 stackoverflow에 비슷한 사례들을 계속 서칭하였고,  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/69879188/could-not-load-library-cudnn-cnn-infer64-8-dll-error-code-126&quot;&gt;https://stackoverflow.com/questions/69879188/could-not-load-library-cudnn-cnn-infer64-8-dll-error-code-126&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;몇번의 삽질을 반복하고 위의 답변을 따라했더니 해결이 되었다.&lt;/p&gt;
&lt;p&gt;본인의 컴퓨터는 CUDA 11.5 version 이었고, 이에 맞는 cuDNN 8.4.1을 설치하였는데 이게 문제였다.&lt;br&gt;이 문제는 CUDA 11.5 version에 cuDNN 8.3.0 이상의 버전을 설치할 경우 발생하는 것이었고&lt;br&gt;Cuda version: 11.4 에 맞는 cuDNN version: 8.2.4 를 설치하니 문제가 해결되었다.&lt;/p&gt;
&lt;p&gt;어이가 없는 트러블 슈팅이었다. &lt;/p&gt;
&lt;p&gt;..................&lt;/p&gt;
&lt;p&gt;tensorflow에서 문제를 해결했더니 이게 pytorch에서 문제가 생겼다.&lt;br&gt;cuDNN 버전을 건드렸더니 pytorch에서 GPU를 인식하지 못하는 문제가 발생.&lt;/p&gt;</description>
      <category>IT/TroubleShooting</category>
      <author>Millennials</author>
      <guid isPermaLink="true">https://millennials.tistory.com/138</guid>
      <comments>https://millennials.tistory.com/138#entry138comment</comments>
      <pubDate>Wed, 3 Aug 2022 17:17:59 +0900</pubDate>
    </item>
  </channel>
</rss>