<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>오랑우탄의 반란</title>
    <link>https://siroro.tistory.com/</link>
    <description>코딩의 ㅋ자도 모르던 오랑우탄 오랑이의 데이터 분석가로의 성장일지</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 09:25:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>5&amp;amp;2</managingEditor>
    <image>
      <title>오랑우탄의 반란</title>
      <url>https://tistory1.daumcdn.net/tistory/6531170/attach/3777e8382a8b42ec9d0327ef863f8f98</url>
      <link>https://siroro.tistory.com</link>
    </image>
    <item>
      <title>[Python] 파이썬이란?</title>
      <link>https://siroro.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파이썬(Python)이란?&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1990년 암스테르담의 귀도 반 로섬(Guido van rossum)이 개발한 인터프리터 언어 &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;* &lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot;&gt;인터프리터 언어&lt;/span&gt; : 소스 코드를 한 줄씩 해석한 후 그때그때 실행해 결과를 바로 확인할 수 있는 언어로, 개발과 디버깅이 용이함&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;파이썬의 장점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;쉬운 문법&lt;/b&gt;: 자연어 영어 문장과 유사한 구조로 초보자도 빠르게 학습 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;오픈소스&lt;/b&gt;: 무료 오픈소스 소프트웨어로 플랫폼 상관 없이 실행 가능&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;다양한 라이브러리&lt;/b&gt;: 데이터 분석(numpy, pandas), 머신러닝(sklearn, TensorFlow), 웹 개발(Django, Flask) 등 다양한 라이브러리 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;커뮤니티 지원&lt;/b&gt;: 방대한 사용자 커뮤니티와 자료가 많아 문제 해결이 용이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;AI/데이터&amp;nbsp;과학&amp;nbsp;트렌드&lt;/b&gt;:&amp;nbsp;인공지능,&amp;nbsp;데이터&amp;nbsp;분석,&amp;nbsp;자동화&amp;nbsp;등의&amp;nbsp;분야에서&amp;nbsp;표준으로&amp;nbsp;자리&amp;nbsp;잡음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;파이썬의 단점&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;느린 실행 속도&lt;/b&gt;: C, Java에 비해 속도가 느림 (인터프리터 방식)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;모바일 개발에서의 한계&lt;/b&gt;: 안드로이드/iOS 네이티브 앱 개발에는 비효율적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문장, 표현식, 연산자, 키워드&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문장(statement)&lt;/b&gt;: 실행 가능한 코드의 최소단위&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;표현식(expression)&lt;/b&gt;: 어떤 값을 만들어내는 코드&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;리터럴(literal)&lt;/b&gt;: 코드 자체가 값이 되는 경우 (e.g. 10)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;식별자(identifier)&lt;/b&gt;: 값을 구별해주는 고유의 이름 (e.g. pi)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파이썬의 규칙&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키워드는 사용 불가하다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특수문자는 _ 만 허용한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문자로만 시작한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공백은 포함되지 않는다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;관용적 규칙&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;최대한 알파벳만 사용한다&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;의미 있는 단어를 사용한다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Snake&amp;nbsp;Case&amp;nbsp;또는&amp;nbsp;Pascal&amp;nbsp;Case&amp;nbsp;를&amp;nbsp;사용한다&amp;nbsp;(Java는&amp;nbsp;Camel&amp;nbsp;Case)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;연산자(operator)&lt;/b&gt;: 값들을 결합해주는 것&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;키워드(keyword)&lt;/b&gt;: 파이썬에서 정해준 다른 용도로 사용 불가한 문자열&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;3-style-guide-for-python-code&quot; style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Style Guide for Python Code 은 아래 문서 참고&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740924595401&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;02. 식별자(identifier)&quot; data-og-description=&quot;### 1. 식별자(identifier)란? 변수, 상수, 함수, 사용자 정의 타입 등에서 다른 것들과 구분하기 위해서 사용되는 **변수의 이름, 상수의 이름, 함수의 이름, 사&amp;hellip;&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/20559&quot; data-og-url=&quot;https://wikidocs.net/20559&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cxKaVz/hyYjo3oYWO/sLtH1RWp9kM2HyJzT05Ekk/img.png?width=100&amp;amp;height=28&amp;amp;face=0_0_100_28&quot;&gt;&lt;a href=&quot;https://wikidocs.net/20559&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/20559&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cxKaVz/hyYjo3oYWO/sLtH1RWp9kM2HyJzT05Ekk/img.png?width=100&amp;amp;height=28&amp;amp;face=0_0_100_28');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;02. 식별자(identifier)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;### 1. 식별자(identifier)란? 변수, 상수, 함수, 사용자 정의 타입 등에서 다른 것들과 구분하기 위해서 사용되는 **변수의 이름, 상수의 이름, 함수의 이름, 사&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PYTHON/개념정리</category>
      <category>Python</category>
      <category>python3</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>프로그래밍언어</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/114</guid>
      <comments>https://siroro.tistory.com/114#entry114comment</comments>
      <pubDate>Sun, 2 Mar 2025 23:12:26 +0900</pubDate>
    </item>
    <item>
      <title>HackerRank | Symmetric Pairs (MySQL)</title>
      <link>https://siroro.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오늘도 오랑이는 문제를 풉니다.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Symmetric&amp;nbsp;Pairs&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;You are given a table,&amp;nbsp;Functions, containing two columns:&amp;nbsp;X&amp;nbsp;and&amp;nbsp;Y.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4tliu/btsJ0NIcKhg/kFUD9GuOuEf5haUOJtoWm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4tliu/btsJ0NIcKhg/kFUD9GuOuEf5haUOJtoWm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4tliu/btsJ0NIcKhg/kFUD9GuOuEf5haUOJtoWm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4tliu%2FbtsJ0NIcKhg%2FkFUD9GuOuEf5haUOJtoWm0%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;316&quot; height=&quot;138&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Two pairs&amp;nbsp;(X1, Y1)&amp;nbsp;and&amp;nbsp;(X2, Y2)&amp;nbsp;are said to be&amp;nbsp;symmetric&amp;nbsp;pairs&amp;nbsp;if&amp;nbsp;X1&amp;nbsp;= Y2&amp;nbsp;and&amp;nbsp;X2&amp;nbsp;= Y1.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Write a query to output all such&amp;nbsp;symmetric&amp;nbsp;pairs&amp;nbsp;in ascending order by the value of&amp;nbsp;X. List the rows such that&amp;nbsp;X1&amp;nbsp;&amp;le; Y1.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Sample Input&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQAl91/btsJ0TBwdAx/KqCsZkcbSnlRNtpj3m5Hy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQAl91/btsJ0TBwdAx/KqCsZkcbSnlRNtpj3m5Hy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQAl91/btsJ0TBwdAx/KqCsZkcbSnlRNtpj3m5Hy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQAl91%2FbtsJ0TBwdAx%2FKqCsZkcbSnlRNtpj3m5Hy0%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;317&quot; height=&quot;305&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Sample Output&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;background-color: #000000; color: #121418; text-align: start;&quot;&gt;&lt;code&gt;20 20
20 21
22 23&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;풀이과정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;x1 = y2 &amp;amp; x2 = y1 인 행이 2개 이상인 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;x &amp;lt;= y 인 경우&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;첫번째 풀이는 셀프조인을 사용한 풀이입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;x1 와 y2, x2 와 y2 를 각각 매칭해줘 셀프 조인을 한 후 행이 2개 이상이거나 y가 x보다 큰 경우에 대해 출력해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1728523998421&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select f1.x, f1.y 
from functions f1, functions f2
where f1.x = f2.y and f1.y = f2.x
group by 1,2
having count(f1.x) &amp;gt; 1 or f1.x &amp;lt; f1.y
order by 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두번째 풀이는 서브쿼리 if문을 사용한 풀이로 첫번째 쿼리보다 더 효율적입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;functions 테이블에 대해 행마다 x &amp;lt;= y 인 조건을 만족시키면 x, y 를 그대로 두고 그렇지 않은 경우 x, y 를 교체해서 동일하게 만들어주는 방식입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때 중복되는 행이 있을 경우 (즉 쌍이 2개 이상인 경우)만 출력해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1728524042267&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select x, y
from (select if(x&amp;lt;=y,x,y) as x, if(x&amp;lt;=y,y,x) as y
    from functions) a
group by 1,2
having count(*)&amp;gt;1
order by 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/HackerRank</category>
      <category>hackerrank</category>
      <category>Symmetric Pairs</category>
      <category>셀프조인</category>
      <category>해커랭크</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/113</guid>
      <comments>https://siroro.tistory.com/113#entry113comment</comments>
      <pubDate>Thu, 10 Oct 2024 10:44:55 +0900</pubDate>
    </item>
    <item>
      <title>HackerRank | SQL Project Planning (MySQL)</title>
      <link>https://siroro.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오늘도 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;오랑이는 문제를 풉니다.&amp;nbsp;&lt;/span&gt; &lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;SQL&amp;nbsp;Project&amp;nbsp;Planning&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;You are given a table, &lt;b&gt;Projects&lt;/b&gt;, containing three columns: Task_ID, Start_Date and End_Date. It is guaranteed that the difference between the End_Date and the Start_Date is equal to 1 day for each row in the table.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;If the End_Date of the tasks are consecutive, then they are part of the same project. Samantha is interested in finding the total number of different projects completed.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Write&amp;nbsp;a&amp;nbsp;query&amp;nbsp;to&amp;nbsp;output&amp;nbsp;the&amp;nbsp;start&amp;nbsp;and&amp;nbsp;end&amp;nbsp;dates&amp;nbsp;of&amp;nbsp;projects&amp;nbsp;listed&amp;nbsp;by&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;days&amp;nbsp;it&amp;nbsp;took&amp;nbsp;to&amp;nbsp;complete&amp;nbsp;the&amp;nbsp;project&amp;nbsp;in&amp;nbsp;ascending&amp;nbsp;order.&amp;nbsp;If&amp;nbsp;there&amp;nbsp;is&amp;nbsp;more&amp;nbsp;than&amp;nbsp;one&amp;nbsp;project&amp;nbsp;that&amp;nbsp;have&amp;nbsp;the&amp;nbsp;same&amp;nbsp;number&amp;nbsp;of&amp;nbsp;completion&amp;nbsp;days,&amp;nbsp;then&amp;nbsp;order&amp;nbsp;by&amp;nbsp;the&amp;nbsp;start&amp;nbsp;date&amp;nbsp;of&amp;nbsp;the&amp;nbsp;project.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Sample Input&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dG2uRv/btsJS8lG4m9/LfslE06zNXkLOmPjORgT0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dG2uRv/btsJS8lG4m9/LfslE06zNXkLOmPjORgT0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dG2uRv/btsJS8lG4m9/LfslE06zNXkLOmPjORgT0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdG2uRv%2FbtsJS8lG4m9%2FLfslE06zNXkLOmPjORgT0k%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;338&quot; height=&quot;347&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Sample Output&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #121418; text-align: start;&quot;&gt;&lt;code&gt;2015-10-28 2015-10-29
2015-10-30 2015-10-31
2015-10-13 2015-10-15
2015-10-01 2015-10-04&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;풀이 과정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;start_date와 end_date가 같은 경우 = 하나의 프로젝트이기 때문에, 이 경우를 제외한 행들의 start_date와 end_date를 구해야 합니다. 각각의 조건이 겹치기 때문에 두 칼럼을 분리해서 조회해야 하고, 이를 이어줄 칼럼을 새로 생성해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UHEIg/btsJR0PSe9u/eocy5qoBKJzTSZbqIZP9S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UHEIg/btsJR0PSe9u/eocy5qoBKJzTSZbqIZP9S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UHEIg/btsJR0PSe9u/eocy5qoBKJzTSZbqIZP9S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUHEIg%2FbtsJR0PSe9u%2Feocy5qoBKJzTSZbqIZP9S1%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;414&quot; height=&quot;420&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;671&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저 start_date 테이블을 만들어줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;row_number를 사용해 r1이라는 칼럼을 생성해 프로젝트 시작일을 나열해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727833032569&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH SD AS (
    SELECT START_DATE, ROW_NUMBER() OVER (ORDER BY START_DATE) AS R1
    FROM PROJECTS
    WHERE START_DATE NOT IN (SELECT END_DATE FROM PROJECTS)
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마찬가지로 end_date 테이블을 만들어주고 두 테이블을 각각 조회해보면 r1, r2가 연결되어 하나의 행으로 통일할 수 있는 것을 볼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727833270621&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ED AS (
    SELECT END_DATE, ROW_NUMBER() OVER (ORDER BY END_DATE) AS R2
    FROM PROJECTS
    WHERE END_DATE NOT IN (SELECT START_DATE FROM PROJECTS)
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A5Ow4/btsJSibDPAm/02OHzJH3ZNTIiPZ4KaGPF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A5Ow4/btsJSibDPAm/02OHzJH3ZNTIiPZ4KaGPF1/img.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;442&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;51.27&quot; data-filename=&quot;blob&quot; style=&quot;width: 50.6718%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A5Ow4/btsJSibDPAm/02OHzJH3ZNTIiPZ4KaGPF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA5Ow4%2FbtsJSibDPAm%2F02OHzJH3ZNTIiPZ4KaGPF1%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;450&quot; height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGJn5s/btsJThivtHQ/0zqQRN46l2Ecqu3A2dnick/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGJn5s/btsJThivtHQ/0zqQRN46l2Ecqu3A2dnick/img.png&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;434&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;48.73&quot; data-filename=&quot;blob&quot; style=&quot;width: 48.1654%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGJn5s/btsJThivtHQ/0zqQRN46l2Ecqu3A2dnick/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGJn5s%2FbtsJThivtHQ%2F0zqQRN46l2Ecqu3A2dnick%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;420&quot; height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/div&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 메인 쿼리에서 두 테이블을 join 하고 정렬에서 datediff 로 프로젝트 일수를 구해줍니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최종 쿼리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1727832472412&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH SD AS (
    SELECT START_DATE, ROW_NUMBER() OVER (ORDER BY START_DATE) AS R1
    FROM PROJECTS
    WHERE START_DATE NOT IN (SELECT END_DATE FROM PROJECTS)
),
ED AS (
    SELECT END_DATE, ROW_NUMBER() OVER (ORDER BY END_DATE) AS R2
    FROM PROJECTS
    WHERE END_DATE NOT IN (SELECT START_DATE FROM PROJECTS)
)
SELECT START_DATE, END_DATE
FROM SD JOIN ED ON SD.R1=ED.R2
ORDER BY DATEDIFF(END_DATE,START_DATE), START_DATE&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;i&gt;오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~&lt;/i&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1727832427987&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SQL Project Planning | HackerRank&quot; data-og-description=&quot;Write a query to output the start and end dates of projects listed by the number of days it took to complete the project in ascending order.&quot; data-og-host=&quot;www.hackerrank.com&quot; data-og-source-url=&quot;https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true&quot; data-og-url=&quot;https://www.hackerrank.com/challenges/sql-projects/problem&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GRBzM/hyXax0H1Cr/XyYReSziQKGj1kuAEwIDkk/img.jpg?width=1200&amp;amp;height=640&amp;amp;face=706_91_833_229&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GRBzM/hyXax0H1Cr/XyYReSziQKGj1kuAEwIDkk/img.jpg?width=1200&amp;amp;height=640&amp;amp;face=706_91_833_229');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SQL Project Planning | HackerRank&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Write a query to output the start and end dates of projects listed by the number of days it took to complete the project in ascending order.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hackerrank.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/HackerRank</category>
      <category>datediff</category>
      <category>hackerrank</category>
      <category>mysql</category>
      <category>row_number</category>
      <category>SQL Project Planning</category>
      <category>with</category>
      <category>해커랭크</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/112</guid>
      <comments>https://siroro.tistory.com/112#entry112comment</comments>
      <pubDate>Wed, 2 Oct 2024 10:42:35 +0900</pubDate>
    </item>
    <item>
      <title>HackerRank | Weather Observation Station 20 (MySQL) 중앙값 percent_rank</title>
      <link>https://siroro.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오랜만에 오랑이는 문제를 풉니다.&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Weather&amp;nbsp;Observation&amp;nbsp;Station&amp;nbsp;20&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;A median is defined as a number separating the higher half of a data set from the lower half. &lt;b&gt;Query the median of the Northern Latitudes (LAT_N) from STATION and round your answer to decimal places.&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Input Format &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;The &lt;b&gt;STATION&lt;/b&gt; table is described as follows where LAT_N is the northern latitude and LONG_W is the western longitude. &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nh1Df/btsJMbKW3H1/dsCEKOWBVLYoBoP7o66gX1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nh1Df/btsJMbKW3H1/dsCEKOWBVLYoBoP7o66gX1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nh1Df/btsJMbKW3H1/dsCEKOWBVLYoBoP7o66gX1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnh1Df%2FbtsJMbKW3H1%2FdsCEKOWBVLYoBoP7o66gX1%2Fimg.jpg&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;300&quot; height=&quot;290&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;290&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;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;중앙값을 구하는 문제입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Oracle의 경우 MEDIAN 이라는 함수를 제공하기에 손쉽게 구할 수 있는데 MySQL에는 없는 함수여서 다른 방법을 찾아야 한다는 점.. 이때 윈도우 함수 중 백분율 순위를 계산해주는 PERCENT_RANK 함수를 사용하면 간단하게 구할 수 있습니다.&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PERCENT_RANK 즉 백분율이 50%이면 중앙값이라는 의미기 때문에 인라인 뷰 서브쿼리로 MEDIAN을 구해준 후 WHERE 조건으로 =0.5를 붙여주면 완성입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727333253910&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ROUND(LAT_N,4)
FROM (SELECT LAT_N, PERCENT_RANK() OVER (ORDER BY LAT_N) AS MEDIAN 
      FROM STATION) A
WHERE MEDIAN=0.5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1727333575144&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Weather Observation Station 20 | HackerRank&quot; data-og-description=&quot;Query the median of Northern Latitudes in STATION and round to 4 decimal places.&quot; data-og-host=&quot;www.hackerrank.com&quot; data-og-source-url=&quot;https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true&quot; data-og-url=&quot;https://www.hackerrank.com/challenges/weather-observation-station-20/problem&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9Rhy2/hyXauaBsXA/CXLJCfgfcnDhZbvTvKQHb0/img.jpg?width=1200&amp;amp;height=640&amp;amp;face=706_91_833_229&quot;&gt;&lt;a href=&quot;https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.hackerrank.com/challenges/weather-observation-station-20/problem?isFullScreen=true&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9Rhy2/hyXauaBsXA/CXLJCfgfcnDhZbvTvKQHb0/img.jpg?width=1200&amp;amp;height=640&amp;amp;face=706_91_833_229');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Weather Observation Station 20 | HackerRank&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Query the median of Northern Latitudes in STATION and round to 4 decimal places.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hackerrank.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/HackerRank</category>
      <category>hackerrank</category>
      <category>mysql 중앙값</category>
      <category>mysqlmedian</category>
      <category>percent_rank</category>
      <category>SQL</category>
      <category>weather observation station</category>
      <category>윈도우함수</category>
      <category>해커랭크</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/111</guid>
      <comments>https://siroro.tistory.com/111#entry111comment</comments>
      <pubDate>Thu, 26 Sep 2024 15:53:45 +0900</pubDate>
    </item>
    <item>
      <title>[Tableau] 랜딩 페이지 A/B 테스트 대시보드 제작 과제 실습</title>
      <link>https://siroro.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;과제 설명&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.5349%; height: 549px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 166px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 166px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; PO의 요청 업무: 실험 결과를 분석할 수 있는 대시보드 작업을 진행해주세요!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[실험 상황 시나리오]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이커머스 K사는&amp;nbsp;&lt;b&gt;웹사이트의 랜딩 페이지 UI 실험&lt;/b&gt;을 진행했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유저를 실험군과 대조군으로 나누어 랜딩 페이지 구 버전 A안과 새 버전 B안을 비교하여 약 1달 동안 실험이 진행 되었어요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실험 결과 데이터는 ab_data.csv 파일에 쌓였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;A/B 테스트의 성공 지표를 컬럼 converted(페이지 전환 유무)를 활용하여 &lt;b&gt;두가지 랜딩 페이지 실험 결과를 검증&lt;/b&gt;하고 싶습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 129px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 129px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; ✅&amp;nbsp;&lt;b&gt;실험 진행 기간:&lt;/b&gt;&amp;nbsp;약 1달간(2017/1/2 - 1/24)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅&amp;nbsp;&lt;b&gt;실험 대상:&lt;/b&gt;&amp;nbsp;총 약 29만명 랜딩 페이지 유입 유저 &amp;rarr; 실험군(약 14만명), 대조군(약 14만명)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅&amp;nbsp;&lt;b&gt;실험 목표:&lt;/b&gt;&amp;nbsp;유저의 랜딩 페이지 전환율 상승&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅&amp;nbsp;&lt;b&gt;성공 지표(실험이 성공했다고 판단할 수 있는 지표):&lt;/b&gt;&amp;nbsp;conversion rate(%)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅&amp;nbsp;&lt;b&gt;실험 검증 방법:&lt;/b&gt;&amp;nbsp;t-test&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 146px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 146px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;(참고) t-test 개념&lt;br /&gt;&lt;/b&gt;&lt;b&gt;귀무가설&lt;/b&gt;&amp;nbsp;: 일반적인 사실 또는 우리가 실험에서 틀리길 바라는 가설&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;대립가설&lt;/b&gt;&amp;nbsp;: 우리가 실험에서 맞다고 입증하고자 하는 가설, 차이가 있음을 실험을 통해 입증하고자 하는 가설&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;p-value&lt;/b&gt;&amp;nbsp;: 귀무가설이 맞다는 가정에서 실제 실험 결과와 같이 귀무가설을 지지하는 결과가 나올 확률을 의미합니다. 예를 들어, 두 그룹의 평균을 비교하는 실험에서 귀무가설이 &amp;ldquo;두 그룹의 평균은 같다&amp;rdquo;라면, p-value는 두 그룹의 평균이 같다는 결과가 나온 확률입니다. p-value가 임의의 수준(0.05)보다 작으면 귀무가설이 잘못되었을 가능성이 높기 때문에 기각하고, 대립가설을 채택합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;가설 검정(t-test)&lt;/b&gt;: 두 그룹 간의 차이가 통계적으로 유의미한지를 검정하는 방법 중 하나입니다. 일반적으로 서로 독립적인 두 그룹간의 비교를 통해 두 그룹의 평균값이 다른지를 검정합니다. t-test 결과, 귀무가설이 기각되면 두 그룹 간의 차이는 통계적으로 유의미하다는 것을 의미합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 108px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 108px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 유의사항&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅ &lt;b&gt;대시보드 뷰어&lt;/b&gt;: 프로덕트팀 구성원(Product Owner, Product Analyst, UI Designer, Software Engineer)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅ &lt;b&gt;지표 선정&lt;/b&gt;: conversion rate(%): 랜딩 페이지 전환율&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;✅ &lt;b&gt;대시보드 구성&lt;/b&gt;: &lt;br /&gt;- 레이아웃 규격: 일반 데스크톱 모니터(1920 x 1080) &lt;br /&gt;- 컬러: 컬러 팔레트 자유롭게 활용(&lt;a style=&quot;color: #000000;&quot; href=&quot;https://colorhunt.co/&quot; data-token-index=&quot;11&quot;&gt;참고 사이트&lt;/a&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;사용 데이터&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725497630767&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;A/B testing&quot; data-og-description=&quot; &quot; data-og-host=&quot;www.kaggle.com&quot; data-og-source-url=&quot;https://www.kaggle.com/datasets/zhangluyuan/ab-testing&quot; data-og-url=&quot;https://www.kaggle.com/datasets/zhangluyuan/ab-testing&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cHxsxP/hyWV0v7VvE/ilPN22hzKChCtIKxFm56B0/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600&quot;&gt;&lt;a href=&quot;https://www.kaggle.com/datasets/zhangluyuan/ab-testing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.kaggle.com/datasets/zhangluyuan/ab-testing&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cHxsxP/hyWV0v7VvE/ilPN22hzKChCtIKxFm56B0/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;A/B testing&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kaggle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dg2LWB/btsJr0PeR9K/kxam1CUJFXEhtCJLOfZMqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dg2LWB/btsJr0PeR9K/kxam1CUJFXEhtCJLOfZMqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dg2LWB/btsJr0PeR9K/kxam1CUJFXEhtCJLOfZMqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdg2LWB%2FbtsJr0PeR9K%2Fkxam1CUJFXEhtCJLOfZMqk%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;1098&quot; height=&quot;361&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;361&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;칼럼 설명&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;user_id:&lt;/b&gt; 유저 아이디(약 29만명)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;timestamp:&lt;/b&gt; 2017-01-02 ~ 2017-01-24&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;group:&lt;/b&gt; 대조군(control), 실험군(treatment)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;landing_page:&lt;/b&gt; old_page, new_page&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;converted:&lt;/b&gt; 랜딩 페이지 전환 유무(1,0)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&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;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터 시각화&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;시트1&lt;/b&gt;: 그룹별 유저 비중 파이 차트 시각화&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마크: 파이 차트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;색상: Group&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각도: User Id 카운트(고유)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;레이블: Group, 전체 카운트 (숫자 서식 백분율)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마크&amp;nbsp;레이블&amp;nbsp;표시&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccOr4b/btsJq2UFlBx/drEVEzdOSv3al6MZxQvUQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccOr4b/btsJq2UFlBx/drEVEzdOSv3al6MZxQvUQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccOr4b/btsJq2UFlBx/drEVEzdOSv3al6MZxQvUQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccOr4b%2FbtsJq2UFlBx%2FdrEVEzdOSv3al6MZxQvUQk%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;1917&quot; height=&quot;916&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;916&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;시트2&lt;/b&gt;: 그룹별 평균 전환율 막대 그래프 시각화&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열: Group&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;행: Converted 평균&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;색상: Group&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;레이블: Group, Converted 평균(숫자 서식 백분율) &amp;amp; 합계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마크 레이블 표시,&amp;nbsp;머릿글 표시 해제&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHGAt5/btsJqHcg7Sw/k4In2fcejaK1HczdnVGTL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHGAt5/btsJqHcg7Sw/k4In2fcejaK1HczdnVGTL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHGAt5/btsJqHcg7Sw/k4In2fcejaK1HczdnVGTL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHGAt5%2FbtsJqHcg7Sw%2Fk4In2fcejaK1HczdnVGTL1%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;1920&quot; height=&quot;917&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;917&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;b&gt;시트3&lt;/b&gt;&lt;/b&gt;: 일별 그룹별 평균 전환율 선 그래프 시각화&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열: Timestamp 일&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;행: Converted 평균&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;색상: Group&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;축 편집: 범우 사용자 지정으로 시작과 끝 조정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마크 레이블 표시 , 머릿글 표시 해제 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btX8vP/btsJqKtaszn/PT9dsA0VKnFNp9J3zZHPp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btX8vP/btsJqKtaszn/PT9dsA0VKnFNp9J3zZHPp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btX8vP/btsJqKtaszn/PT9dsA0VKnFNp9J3zZHPp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtX8vP%2FbtsJqKtaszn%2FPT9dsA0VKnFNp9J3zZHPp0%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;1918&quot; height=&quot;916&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;916&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;b&gt;시트4&lt;/b&gt;&lt;/b&gt;:&amp;nbsp;그룹별 유저 고유 카운트 요일별 캘린더 차트 만들기&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열: &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;Timestamp&lt;/span&gt; 년월, 요일&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;행: Group, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;Timestamp&amp;nbsp;주&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;색상: User Id 카운트 고유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;레이블: &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;Timestamp 일, User Id 카운트 고유&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;머릿글 표시 해제, 워크시트 서식 테두리, 라인 조정&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/us2RK/btsJq9MYq4B/b1uwoG1LihaAr44oDIcNG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/us2RK/btsJq9MYq4B/b1uwoG1LihaAr44oDIcNG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/us2RK/btsJq9MYq4B/b1uwoG1LihaAr44oDIcNG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fus2RK%2FbtsJq9MYq4B%2Fb1uwoG1LihaAr44oDIcNG0%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;1920&quot; height=&quot;914&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;914&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;b&gt;시트&lt;/b&gt;5&lt;/b&gt;: 데이터 정합성 체크 &amp;amp; 전처리 작업&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;control인데 new page, treatment인데 old page인 경우 유저 아이디 제거&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;계산된 필드 만들기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 필드 필터로 적용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;텍스트: Group, Converted 합계로 확인&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1725499848830&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;([Group] = 'control' AND [Landing Page] = 'old_page') OR
([Group] = 'treatment' AND [Landing Page] = 'new_page')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0zFmV/btsJsMv5Bjn/xcNJomJkHtAeJ6YMakAJp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0zFmV/btsJsMv5Bjn/xcNJomJkHtAeJ6YMakAJp1/img.png&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;630&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;37.77&quot; style=&quot;width: 37.3304%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0zFmV/btsJsMv5Bjn/xcNJomJkHtAeJ6YMakAJp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0zFmV%2FbtsJsMv5Bjn%2FxcNJomJkHtAeJ6YMakAJp1%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;544&quot; height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lvJaD/btsJqIPJZBI/WxGdGTZ5cOgme2cbPoeMR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lvJaD/btsJqIPJZBI/WxGdGTZ5cOgme2cbPoeMR1/img.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;537&quot; data-is-animation=&quot;false&quot; style=&quot;width: 61.5068%;&quot; data-widthpercent=&quot;62.23&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lvJaD/btsJqIPJZBI/WxGdGTZ5cOgme2cbPoeMR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlvJaD%2FbtsJqIPJZBI%2FWxGdGTZ5cOgme2cbPoeMR1%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;764&quot; height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;b&gt;시트6&lt;/b&gt;&lt;/b&gt;: 도넛 차트 활용 평균 전환율 지표 카드 만들기&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시트5에서 생성한 필터 적용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;도넛차트 베이스&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마크: 파이차트,&amp;nbsp;색상: Group,&amp;nbsp;각도: Converted 평균, 레이블: Group, Converted 합계&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;계산 필드 생성: 'Dummy Axis' MIN(1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;행: Dummy Axis 두 번 끌어다 넣고 두번째 인스턴스 우클릭 후 이중 축 설정&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;도넛차트 내부 원&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로 생성된 AGG(Dummy Axis) (2)에서 작업&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마크: 원, 색상 배경색으로 설정, 각도 제거, 크기 조정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;축 머릿글 표시 해제&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRtP5y/btsJsfSUUfg/yffKX1kIIqkuTmzeW4FflK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRtP5y/btsJsfSUUfg/yffKX1kIIqkuTmzeW4FflK/img.png&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;774&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.2834%; margin-right: 10px;&quot; data-widthpercent=&quot;49.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRtP5y/btsJsfSUUfg/yffKX1kIIqkuTmzeW4FflK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRtP5y%2FbtsJsfSUUfg%2FyffKX1kIIqkuTmzeW4FflK%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;1258&quot; height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wutmo/btsJsw1dd22/KaPpfwCd3DmmQB4QJeZRu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wutmo/btsJsw1dd22/KaPpfwCd3DmmQB4QJeZRu0/img.png&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;771&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.5538%;&quot; data-widthpercent=&quot;50.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wutmo/btsJsw1dd22/KaPpfwCd3DmmQB4QJeZRu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwutmo%2FbtsJsw1dd22%2FKaPpfwCd3DmmQB4QJeZRu0%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;1260&quot; height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;b&gt;시트&lt;/b&gt; 7&lt;/b&gt;: start date와 end date 매개변수 필터 만들기, 유저 카운트&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;매개 변수 만들기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;start date: 데이터 유형: 날짜, 현재 값: 실험 시작일, 허용 가능한 값: 범위, 최솟값, 고정으로 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;end date: start date 복제 후 범위 조정 (마지막 일 + 1 로 해야 마지막 일까지 표시됨)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필터 생성: Timestamp 계산 필드 생성 후 범위 입력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열: Timestamp 일&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;행: User Id 카운트 고유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필터: Filter Correct, date rage 참&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1725500914432&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Timestamp] &amp;gt;= [start date] 
AND 
[Timestamp] &amp;lt;= [end date]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkqtet/btsJqk2MWzW/aha8lZ8T4h2KFtPYUT1JhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkqtet/btsJqk2MWzW/aha8lZ8T4h2KFtPYUT1JhK/img.png&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;595&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.084%; margin-right: 10px;&quot; data-widthpercent=&quot;52.7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkqtet/btsJqk2MWzW/aha8lZ8T4h2KFtPYUT1JhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkqtet%2FbtsJqk2MWzW%2Faha8lZ8T4h2KFtPYUT1JhK%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;568&quot; height=&quot;595&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MWPGf/btsJsfFoyIW/Uh2As2SAdkWQSkPriejUiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MWPGf/btsJsfFoyIW/Uh2As2SAdkWQSkPriejUiK/img.png&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;629&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.7532%;&quot; data-widthpercent=&quot;47.3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MWPGf/btsJsfFoyIW/Uh2As2SAdkWQSkPriejUiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMWPGf%2FbtsJsfFoyIW%2FUh2As2SAdkWQSkPriejUiK%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;539&quot; height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bySe2P/btsJqjQpLH7/yySZBkxNtjFUkm5VfyRj20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bySe2P/btsJqjQpLH7/yySZBkxNtjFUkm5VfyRj20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bySe2P/btsJqjQpLH7/yySZBkxNtjFUkm5VfyRj20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbySe2P%2FbtsJqjQpLH7%2FyySZBkxNtjFUkm5VfyRj20%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;1920&quot; height=&quot;917&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;917&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-token-index=&quot;0&quot;&gt; &lt;b&gt;시트 8&lt;/b&gt;: t-test 텍스트 표시 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 왜 t-test인가요?(ratio test 해야하는거 아닌가요?) 태블로에서 구현할 수 있는 간단한 검정 방법이 t-test입니다. 제공 데이터 양이 많아서 정규 근사됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그룹별 평균, 분산, 크기 구해서 t-value 구하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;t-&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;value 를 활용해&lt;/span&gt;&amp;nbsp;p-value 로 변환 (&lt;a href=&quot;https://community.tableau.com/s/question/0D54T00000CWdNlSAL/ttest-of-two-independent-means&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;참고문서&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;텍스트: t-value, p-value, 실험 결과에 대한 설명&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQR1iC/btsJqjCJrZy/Hx6u45WHEKO2Xj3R72pvGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQR1iC/btsJqjCJrZy/Hx6u45WHEKO2Xj3R72pvGk/img.png&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;447&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.9192%; margin-right: 10px;&quot; data-widthpercent=&quot;50.51&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQR1iC/btsJqjCJrZy/Hx6u45WHEKO2Xj3R72pvGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQR1iC%2FbtsJqjCJrZy%2FHx6u45WHEKO2Xj3R72pvGk%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;826&quot; height=&quot;447&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5kIJW/btsJrs6IyuJ/47wXFFyMSX1wNmpus4jmaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5kIJW/btsJrs6IyuJ/47wXFFyMSX1wNmpus4jmaK/img.png&quot; data-origin-width=&quot;201&quot; data-origin-height=&quot;111&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.918%;&quot; data-widthpercent=&quot;49.49&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5kIJW/btsJrs6IyuJ/47wXFFyMSX1wNmpus4jmaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5kIJW%2FbtsJrs6IyuJ%2F47wXFFyMSX1wNmpus4jmaK%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;201&quot; height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;출처: 공돌이의 수학 정리 노트 t-value의 의미와 스튜던트의 T 테스트 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1725501616341&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# mean diff
AVG(IF [Group] = 'control' THEN [Converted] END) - AVG(IF [Group] = 'treatment' THEN [Converted] END)

# variance / size
VAR(IF [Group] = 'control' THEN [Converted] END) / COUNT(IF [Group] = 'control' THEN [Converted] END)

# tvalue
[mean diff] /SQRT([var/size1]+[var/size2])

# pvalue
2*(0.5*EXP(-1.2*POWER(ABS([tvalue]), 1.3)))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpVmxu/btsJqGdpnKI/peNgc6v9zqxAZY01QOiB50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpVmxu/btsJqGdpnKI/peNgc6v9zqxAZY01QOiB50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpVmxu/btsJqGdpnKI/peNgc6v9zqxAZY01QOiB50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpVmxu%2FbtsJqGdpnKI%2FpeNgc6v9zqxAZY01QOiB50%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;783&quot; height=&quot;878&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;878&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;대시보드 제작&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;대시보드 1.png&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ybkja/btsJskNlZF0/Z0mQFrZ0bvLojVO26nJAEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ybkja/btsJskNlZF0/Z0mQFrZ0bvLojVO26nJAEk/img.png&quot; data-alt=&quot;A/B 테스트 대시보드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ybkja/btsJskNlZF0/Z0mQFrZ0bvLojVO26nJAEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYbkja%2FbtsJskNlZF0%2FZ0mQFrZ0bvLojVO26nJAEk%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;1708&quot; height=&quot;960&quot; data-filename=&quot;대시보드 1.png&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;A/B 테스트 대시보드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TABLEAU</category>
      <category>AB테스트</category>
      <category>p값</category>
      <category>Tableau</category>
      <category>t값</category>
      <category>내일배움캠프</category>
      <category>대시보드</category>
      <category>데이터 시각화</category>
      <category>데이터분석</category>
      <category>태블로</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/110</guid>
      <comments>https://siroro.tistory.com/110#entry110comment</comments>
      <pubDate>Thu, 5 Sep 2024 11:12:58 +0900</pubDate>
    </item>
    <item>
      <title>[Tableau] 한 눈에 보는 테이블 구조와 스키마 종류</title>
      <link>https://siroro.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;테이블 구조&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 56px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 15.7752%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.5853%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.0735%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특징&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.5659%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.7752%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;차원 dimension&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.5853%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;측정/분석의 기준이 되는 칼럼&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;태블로 dimension table (파란색)&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.0735%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;star, snowflake 스키마의 가장자리에 있는 테이블로 수치에 대한 상세 정보&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.5659%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유저 id, 지역, 상품명 등&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.7752%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;측정값 metric&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.5853%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;측정하는 값/항목 칼럼&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;태블로 fact table (초록색)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.0735%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;star, snowflake 스키마의 중심에 있는 집계 가능한 테이블, 수치로 표현됨&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.5659%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;매출, 리텐션, 전환율 등&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;스키마 종류&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7209%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 81.2791%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;특징&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7209%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Star 스키마&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 81.2791%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 가장 간단하고 일반적으로 사용되는 유형의 데이터 웨어하우스 스키마&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- fact table 중심으로 dimension table이 둘러싸고 있는 별 모양 구조&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 주제별로 정리되어 있음 (date, product 등)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- dimension table 은 fact table 의 차원을 설명하며 FK로 연결됨&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 비즈니스 요구사항에 더 적합하며 간단하고 빠르게 쿼리 수행 가능&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 일대일 관계만 허용&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7209%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Snowflake 스키마&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 81.2791%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 계층적 구조로 star 스키마에서 일부 dimension table이 정규화 되어 dimension table끼리 연결된 형태&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- DB 설계가 복잡함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 정규화 진행으로 데이터 중복을 최소화하며 저장 공간 절약&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;-&amp;nbsp; dimension table에서는 일대다 관계 허용&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yx93n/btsJq2GXBp2/xhsUoWC6JuNSbk9lkwiNZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yx93n/btsJq2GXBp2/xhsUoWC6JuNSbk9lkwiNZ0/img.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1201&quot; data-is-animation=&quot;false&quot; style=&quot;width: 36.9803%; margin-right: 10px;&quot; data-widthpercent=&quot;37.42&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yx93n/btsJq2GXBp2/xhsUoWC6JuNSbk9lkwiNZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYx93n%2FbtsJq2GXBp2%2FxhsUoWC6JuNSbk9lkwiNZ0%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;1280&quot; height=&quot;1201&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4EnQp/btsJqE7v0pM/scRxrLjTOvS1GDUqyiY4bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4EnQp/btsJqE7v0pM/scRxrLjTOvS1GDUqyiY4bk/img.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;718&quot; data-is-animation=&quot;false&quot; style=&quot;width: 61.857%;&quot; data-widthpercent=&quot;62.58&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4EnQp/btsJqE7v0pM/scRxrLjTOvS1GDUqyiY4bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4EnQp%2FbtsJqE7v0pM%2FscRxrLjTOvS1GDUqyiY4bk%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;1280&quot; height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>TABLEAU</category>
      <category>snowflake</category>
      <category>star</category>
      <category>Tableau</category>
      <category>디멘션</category>
      <category>메트릭</category>
      <category>스키마</category>
      <category>태블로</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/109</guid>
      <comments>https://siroro.tistory.com/109#entry109comment</comments>
      <pubDate>Wed, 4 Sep 2024 19:08:03 +0900</pubDate>
    </item>
    <item>
      <title>한 눈에 보는 데이터 인프라 (ETL, 웨어하우스, 레이크, 마트)</title>
      <link>https://siroro.tistory.com/108</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sMS1y/btsJpEAieAn/temzl3VnpPNXOpg3mUTyxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sMS1y/btsJpEAieAn/temzl3VnpPNXOpg3mUTyxK/img.png&quot; data-alt=&quot;출처: Snowflake&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sMS1y/btsJpEAieAn/temzl3VnpPNXOpg3mUTyxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsMS1y%2FbtsJpEAieAn%2Ftemzl3VnpPNXOpg3mUTyxK%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;1280&quot; height=&quot;613&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: Snowflake&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 90px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 18.4884%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;용어&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 81.5116%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4884%; height: 17px; text-align: center;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;ETL&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.5116%; height: 17px;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ETL (추출, 전환, 로드/적재 Extract, Transform, Load) 은 여러 데이터 소스에서 모아진 정보(E)에 대해 품질 개선 및 구조화를 진행한 후(T), 단일 물리적 데이터베이스로 통합해 데이터 웨어하우스, 데이터 레이크, 데이터 마트 형태로 적재(L)시켜 데이터를 전송하는 프로세스&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;추출: SQL / NoSQL 서버, CRM 및 ERP 시스템, 플랫 파일, 이메일, 웹페이지 등에서 raw데이터 수집&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전환: 데이터 필터링/정제/중복 제거/유효성 검사로 1차 처리, 계산/번역/요약 등 일관성 유지, 필요 시 데이터 제거 및 암호화로 보호, 테이블로 포맷팅 (스키마 일치시키기)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4884%; height: 17px; text-align: center;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터&lt;br /&gt;웨어하우스&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.5116%; height: 17px;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;수집된 데이터가 ETL을 거쳐 한 곳에 모아진 데이터 (=창고)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다량의 데이터를 장기간 보관하는 데에 최적화 되어 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;업무적으로 중요한 데이터 저장, 전사적으로 통합 관리 필요&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4884%; height: 17px; text-align: center;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터&lt;br /&gt;레이크&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.5116%; height: 17px;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;미가공 raw 데이터 그대로 적재된 점에서 데이터 웨어하우스와 다름&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Ad-hoc/머신러닝 분석에 대한 수요가 높아지면서 가공되지 않은 데이터 그대로 사용 필요한 경우 생겨 데이터 레이크에 적재&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다량의 정형/비정형 데이터 (e.g. sns, 클릭스트림 데이터) 저장 및 실시간 분석&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4884%; height: 17px; text-align: center;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터&lt;br /&gt;마트&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.5116%; height: 17px;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 웨어하우스 데이터 중 각 부서별 필요에 따라 만들어진 단순한 형태의 데이터 웨어하우스&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비즈니스 팀에서의 효율적인 데이터 검색, 의사 결정 간소화, 효과적인 정보 제어 및 유연한 데이터 관리가 장점&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PYTHON/데이터분석</category>
      <category>BI</category>
      <category>ETL</category>
      <category>데이터 인프라</category>
      <category>데이터 파이프라인</category>
      <category>데이터레이크</category>
      <category>데이터마트</category>
      <category>데이터웨어하우스</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/108</guid>
      <comments>https://siroro.tistory.com/108#entry108comment</comments>
      <pubDate>Wed, 4 Sep 2024 18:37:18 +0900</pubDate>
    </item>
    <item>
      <title>[ML] 분류 모델 불균형 데이터에 대한 솔루션 Classification Model Imbalanced Data Solution</title>
      <link>https://siroro.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;불균형 데이터란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;불균형 데이터란&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;목표 변수가 범주형 데이터일 때 범주별 관측치의 개수/비율 차이가 큰 데이터&lt;/b&gt;&lt;/span&gt;를 뜻합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이때 데이터가 더 많은 쪽을&amp;nbsp;&lt;/span&gt;&lt;b&gt;다수 범주(majority class)&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;, 적은 쪽을&amp;nbsp;&lt;/span&gt;&lt;b&gt;소수 범주(minority class)&lt;/b&gt;라고 부릅니다.&amp;nbsp; &lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 실무에서 분류 작업을 진행할 때 균형 데이터보다 불균형 데이터를 다뤄야 하는 경우가 많습니다.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;신용카드 회사의 정상 거래 대비 사기 거래, 통신회사 기존 유저 대비 이탈(churn) 유저 등&amp;nbsp;특정 데이터의 비율이 월등히 크거나 작은 경우가 있겠지요.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 그럼 이 불균형 데이터가 왜 머신러닝 분류작업 시 문제가 될까요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JcgTp/btsJcooGSeD/mn4DE2UJ8bYkPTitRkKxm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JcgTp/btsJcooGSeD/mn4DE2UJ8bYkPTitRkKxm0/img.png&quot; data-alt=&quot;image source: Kaggle Best techniques and metrics for Imbalanced Dataset&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JcgTp/btsJcooGSeD/mn4DE2UJ8bYkPTitRkKxm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJcgTp%2FbtsJcooGSeD%2Fmn4DE2UJ8bYkPTitRkKxm0%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;687&quot; height=&quot;350&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;image source: Kaggle Best techniques and metrics for Imbalanced Dataset&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;불균형 데이터가 왜 문제인가?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;머신러닝으로 분류 작업을 진행할 때 프로그램은 자동으로 다수 범주 데이터에 더 큰 비중을 둬서 소수 범주 데이터마저 다수로 분류해버리며 정확도가 높게 나옵니다.&amp;nbsp;즉, 실제 negative를 positive로 분류하는 &lt;b&gt;Type I Error&lt;/b&gt;, 실제 positive인 것을 negative로 분류하는 &lt;b&gt;Type II Error&lt;/b&gt; 가 발생하는 것이지요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;결국 제대로 된 분류 작업에 실패함 모델이 되어버립니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;더 나아가 샘플링에서 소수 관측치가 적어 잘못하면&lt;b&gt; 과적합&lt;/b&gt;에 빠질 위험도 있습니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;721&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHc38Y/btsJbJNCE7J/rijmbtSYULuGbLsoxFTas1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHc38Y/btsJbJNCE7J/rijmbtSYULuGbLsoxFTas1/img.png&quot; data-alt=&quot;image source: Medium Beyond Accuracy: Mastering the Confusion Matrix for Advanced Model Evaluation&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHc38Y/btsJbJNCE7J/rijmbtSYULuGbLsoxFTas1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHc38Y%2FbtsJbJNCE7J%2FrijmbtSYULuGbLsoxFTas1%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;1280&quot; height=&quot;721&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;721&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;image source: Medium Beyond Accuracy: Mastering the Confusion Matrix for Advanced Model Evaluation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;br /&gt;불균형 데이터 처리 솔루션&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러면 불균형 데이터는 어떻게 처리하면 좋을까요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대표적인 솔루션 4개를 소개하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Solution 1: 임계값 (threshold) 조절&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 처리 이후 모델 적합 단계에서 모델 예측 성능을 최적화하기 위한 임계값 조정 기법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적인 0, 1 분류에서는 0으로 분류될 확률, 즉 임계값이 0.5인데 이를 0.1~0.3과 같이 매우 낮은 수준으로 직접 설정해서 0으로 분류될 확률을 낮춰줘서 소수 범주로 분류될 수 있게끔 설정하는 방식&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTMDwr/btsI90p669E/KMgAcnDgIDqNpwkUc5uiH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTMDwr/btsI90p669E/KMgAcnDgIDqNpwkUc5uiH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTMDwr/btsI90p669E/KMgAcnDgIDqNpwkUc5uiH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTMDwr%2FbtsI90p669E%2FKMgAcnDgIDqNpwkUc5uiH0%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;1280&quot; height=&quot;517&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;517&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; Solution 2: 샘플링 (Undersampling, Oversampling)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Undersampling&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다수 범주 데이터가 소수 범주 데이터와 비율이 맞게끔 데이터를 축소하는 방식으로, 보유한 데이터가 많을 때 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점: 모델 복잡도, 계산시간, 저장용량 감소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점: 데이터 제거로 인한 중요 정보 손실 발생 가능&amp;nbsp;&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Oversampling&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소수 범주 데이터를 다수 범주 데이터 수에 맞게 인위적으로 늘리는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점: 정보 손실이 없음, 대부분 언더샘플링에 비해 높은 정확도를 보임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점: (데이터 증가로 인해) 과적합 가능성 발생, 노이즈와 이상치에 민감&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tyiq3/btsJbp2WImn/cMXOInRKUHKkLFehp65JyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tyiq3/btsJbp2WImn/cMXOInRKUHKkLFehp65JyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tyiq3/btsJbp2WImn/cMXOInRKUHKkLFehp65JyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftyiq3%2FbtsJbp2WImn%2FcMXOInRKUHKkLFehp65JyK%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;1280&quot; height=&quot;376&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;376&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; Solution 3: 데이터 증강 (SMOTE)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정의: 오버샘플링 중 resampling 방법 (단순히 소수 범주 데이터 무작위로 복제)의 과적합 문제를 보완하기 위해 나온 방식으로, 임의로 정한 K값(&amp;gt;=2), 소수 범주 데이터에 대해, 가장 가까운 K개의 데이터 중 하나를 무작위로 선정해 synthetic 공식으로 가상의 데이터를 생성하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buwGZH/btsJbgFatgB/hKEHkEsgDNv0Vz2jb82TW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buwGZH/btsJbgFatgB/hKEHkEsgDNv0Vz2jb82TW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buwGZH/btsJbgFatgB/hKEHkEsgDNv0Vz2jb82TW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuwGZH%2FbtsJbgFatgB%2FhKEHkEsgDNv0Vz2jb82TW0%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;1280&quot; height=&quot;359&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;359&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; Solution 4: Two Stage&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 전체의 양이 많고 다수 범주의 비율이 과도하게 높아 때 과적합의 위험이 높을 때 사용할 수 있는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(예: 쿠팡의 추천 알고리즘)&amp;nbsp;&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) 언더샘플링으로 훨씩 적은 양의 임시 데이터셋 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) 해당 데이터에 대해 feature importance 를 측정해서 중요도가 높은 순으로 정렬 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) SMOTE로 해당 데이터 오버샘플링&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) 새로 생성된 데이터에 대해 중요도가 낮은 feature 제거하고 새로운 feature를 생성해서 지표가 더이상 개선되지 않을 때까지 모델 평가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HzDYZ/btsJbxNs5jF/K8jk2tdkCzrGEKyBqww871/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HzDYZ/btsJbxNs5jF/K8jk2tdkCzrGEKyBqww871/img.png&quot; data-alt=&quot;Dan Zhao et al. / Procedia Computer Science 221 (2023) 316&amp;amp;ndash;321&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HzDYZ/btsJbxNs5jF/K8jk2tdkCzrGEKyBqww871/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHzDYZ%2FbtsJbxNs5jF%2FK8jk2tdkCzrGEKyBqww871%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;785&quot; height=&quot;249&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Dan Zhao et al. / Procedia Computer Science 221 (2023) 316&amp;ndash;321&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AwpAG/btsJb4YkbxT/pJgEfRGQ30LRlxY4UB32I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AwpAG/btsJb4YkbxT/pJgEfRGQ30LRlxY4UB32I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AwpAG/btsJb4YkbxT/pJgEfRGQ30LRlxY4UB32I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAwpAG%2FbtsJb4YkbxT%2FpJgEfRGQ30LRlxY4UB32I1%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;728&quot; height=&quot;431&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;분류 모델 평가 지표&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분류 모델에 대한 평가를 진행할 때 대표적인 평가 지표와 모델에 적합한 평가 지표를 고르는 방법 참고해주세요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #3c4043; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;F1 score&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Precision&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Recall&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AUC score (AUC &amp;amp; ROC)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wBOdm/btsJbtRRcL8/PvMK67k4IQzn5wIieuRU7k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wBOdm/btsJbtRRcL8/PvMK67k4IQzn5wIieuRU7k/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wBOdm/btsJbtRRcL8/PvMK67k4IQzn5wIieuRU7k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwBOdm%2FbtsJbtRRcL8%2FPvMK67k4IQzn5wIieuRU7k%2Fimg.webp&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;943&quot; height=&quot;709&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;709&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>PYTHON/머신러닝</category>
      <category>classification</category>
      <category>imbalanced</category>
      <category>smote</category>
      <category>Threshold</category>
      <category>two stage</category>
      <category>머신러닝</category>
      <category>분류</category>
      <category>분류 지표</category>
      <category>불균형 데이터</category>
      <category>샘플링</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/107</guid>
      <comments>https://siroro.tistory.com/107#entry107comment</comments>
      <pubDate>Wed, 21 Aug 2024 22:21:43 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 | 둘만의 암호 (파이썬) 알파벳 순환</title>
      <link>https://siroro.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;br /&gt;오늘도&amp;nbsp;오랑이는&amp;nbsp;문제를&amp;nbsp;풉니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;둘만의&amp;nbsp;암호&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4CaPH/btsI7NQoK3f/4QoKQ6hqab5AqmapOgHKC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4CaPH/btsI7NQoK3f/4QoKQ6hqab5AqmapOgHKC0/img.png&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;420&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.6896%; margin-right: 10px;&quot; data-widthpercent=&quot;58.37&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4CaPH/btsI7NQoK3f/4QoKQ6hqab5AqmapOgHKC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4CaPH%2FbtsI7NQoK3f%2F4QoKQ6hqab5AqmapOgHKC0%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;738&quot; height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cu87kz/btsI7owFBzp/EIQkkg4eQzx1lu2nvIjBf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cu87kz/btsI7owFBzp/EIQkkg4eQzx1lu2nvIjBf1/img.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;379&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.1476%;&quot; data-widthpercent=&quot;41.63&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cu87kz/btsI7owFBzp/EIQkkg4eQzx1lu2nvIjBf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu87kz%2FbtsI7owFBzp%2FEIQkkg4eQzx1lu2nvIjBf1%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;475&quot; height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;b&gt;&lt;br /&gt;풀이&amp;nbsp;과정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;alphabet 문자열 생성 후 skip에 포함된 문자 제거&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;s 의 문자에 대해 인덱스 + index 에 해당되는 문자 alphabet에서 꺼내서 출력&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선 s 인덱스 카운트가 원활하게 되도록&amp;nbsp;alphabet 문자열 생성 후 skip 에 포함된 문자를 제거해주는 작업을 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724032156540&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s, skip, index):
    answer = ''
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    alphabet = ''.join(sorted(set(alphabet) - set(skip)))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;skip 이 제거된 알파벳을 출력해보면 아래와 같이 나옵니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVCrjO/btsI7sr8IbU/B9Ct4ukOi48Yo2AjUOXyak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVCrjO/btsI7sr8IbU/B9Ct4ukOi48Yo2AjUOXyak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVCrjO/btsI7sr8IbU/B9Ct4ukOi48Yo2AjUOXyak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVCrjO%2FbtsI7sr8IbU%2FB9Ct4ukOi48Yo2AjUOXyak%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;241&quot; height=&quot;53&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;53&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 s 인덱스+index 에 맞는 알파벳을 출력해주는 조건문을 단계별로 봅시다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724032351479&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(len(s)):
    answer += alphabet[(alphabet.find(s[i]) + index)%(26-len(skip))]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1724032507916&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(len(s)):
    alphabet.find(s[i]) # alphabet에서 s 문자별 인덱스값 찾기
    ---
    alphabet.find(s[i])+index # index 더해주기
    ---
    (alphabet.find(s[i])+index)%(26-len(skip)) 
    # z 이후에 다시 a로 순환되게 alphabet길이로 나눈 나머지값으로 치환해주기&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eEV9ZA/btsI6zeFSUY/bgmOtMgvtOQvs796d8wt2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eEV9ZA/btsI6zeFSUY/bgmOtMgvtOQvs796d8wt2K/img.png&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;138&quot; data-is-animation=&quot;false&quot; style=&quot;width: 42.2314%; margin-right: 10px;&quot; data-widthpercent=&quot;43.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eEV9ZA/btsI6zeFSUY/bgmOtMgvtOQvs796d8wt2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeEV9ZA%2FbtsI6zeFSUY%2FbgmOtMgvtOQvs796d8wt2K%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;288&quot; height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cICtyB/btsI7sThgQ3/TpRzOJhZuVUiUHSGaKiB31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cICtyB/btsI7sThgQ3/TpRzOJhZuVUiUHSGaKiB31/img.png&quot; data-origin-width=&quot;161&quot; data-origin-height=&quot;139&quot; data-is-animation=&quot;false&quot; style=&quot;width: 23.4387%; margin-right: 10px;&quot; data-widthpercent=&quot;24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cICtyB/btsI7sThgQ3/TpRzOJhZuVUiUHSGaKiB31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcICtyB%2FbtsI7sThgQ3%2FTpRzOJhZuVUiUHSGaKiB31%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;161&quot; height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUzXUt/btsI8jVADs3/Pfiz0QgeO8bkxKKqvKsyg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUzXUt/btsI8jVADs3/Pfiz0QgeO8bkxKKqvKsyg0/img.png&quot; data-origin-width=&quot;223&quot; data-origin-height=&quot;141&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.0043%;&quot; data-widthpercent=&quot;32.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUzXUt/btsI8jVADs3/Pfiz0QgeO8bkxKKqvKsyg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUzXUt%2FbtsI8jVADs3%2FPfiz0QgeO8bkxKKqvKsyg0%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;223&quot; height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최종 코드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1724031996588&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s, skip, index):
    answer = ''
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    alphabet = ''.join(sorted(set(alphabet) - set(skip)))
    
    for i in range(len(s)):
        answer += alphabet[(alphabet.find(s[i]) + index)%(26-len(skip))]
        
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;오랑우탄이&amp;nbsp;영어를 하고 오랑이가&amp;nbsp;코드마스터가 되는 그날까지~&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1724031986962&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/155652&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bcJHUP/hyWOd3bJkz/qVPhfuzt25tQV28rOHqb21/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/eaN6Ra/hyWOfUiAoG/S3s1Ya705cQBf9cZNCoVXK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/155652&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/155652&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bcJHUP/hyWOd3bJkz/qVPhfuzt25tQV28rOHqb21/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/eaN6Ra/hyWOfUiAoG/S3s1Ya705cQBf9cZNCoVXK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PYTHON/프로그래머스</category>
      <category>set중복제거</category>
      <category>둘만의 암호</category>
      <category>문자열찾기</category>
      <category>알파벳</category>
      <category>알파벳순환</category>
      <category>중복제거</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/106</guid>
      <comments>https://siroro.tistory.com/106#entry106comment</comments>
      <pubDate>Mon, 19 Aug 2024 11:02:52 +0900</pubDate>
    </item>
    <item>
      <title>LeetCode | 1484. Group Sold Products By The Date (MySQL) GROUP_CONCAT 그룹별 행 한줄에 출력</title>
      <link>https://siroro.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;br /&gt;오늘도 오랑이는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;문제를 풉니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1484.&amp;nbsp;Group&amp;nbsp;Sold&amp;nbsp;Products&amp;nbsp;By&amp;nbsp;The&amp;nbsp;Date&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEwag/btsI7sZ0LWI/jUjSc8Kz8NZDaIjtmduJTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEwag/btsI7sZ0LWI/jUjSc8Kz8NZDaIjtmduJTK/img.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;415&quot; data-is-animation=&quot;false&quot; style=&quot;width: 56.8617%; margin-right: 10px;&quot; data-widthpercent=&quot;57.53&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEwag/btsI7sZ0LWI/jUjSc8Kz8NZDaIjtmduJTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEwag%2FbtsI7sZ0LWI%2FjUjSc8Kz8NZDaIjtmduJTK%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;766&quot; height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3RJ0g/btsI7gZNNnD/Z1WvN9KLTvvUmKk80My6U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3RJ0g/btsI7gZNNnD/Z1WvN9KLTvvUmKk80My6U0/img.png&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;593&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.9755%;&quot; data-widthpercent=&quot;42.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3RJ0g/btsI7gZNNnD/Z1WvN9KLTvvUmKk80My6U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3RJ0g%2FbtsI7gZNNnD%2FZ1WvN9KLTvvUmKk80My6U0%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;808&quot; height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;풀이 과정&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;products 칼럼 출력 방법 외에는 쉬운 문제입니다. 우선 아래와 같이 코드를 작성해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724031196465&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT SELL_DATE, COUNT(DISTINCT PRODUCT) AS NUM_SOLD
FROM ACTIVITIES
GROUP BY 1
ORDER BY 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 products 칼럼을 추가해야 하는데, product 의 각 행을 &lt;b&gt;sell_date 기준으로 묶어서&lt;/b&gt; 쉼표(,)로 구분지어 &lt;b&gt;오름차순&lt;/b&gt;으로 한 줄에 나열되게 출력해야 하는데요, CONCAT 을 바로 떠올리겠지만 그룹화가 어려워 보입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mYHJR/btsI7jI0G0j/mSRL6NqPWpu00yHGf9evEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mYHJR/btsI7jI0G0j/mSRL6NqPWpu00yHGf9evEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mYHJR/btsI7jI0G0j/mSRL6NqPWpu00yHGf9evEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmYHJR%2FbtsI7jI0G0j%2FmSRL6NqPWpu00yHGf9evEk%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;253&quot; height=&quot;242&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;242&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때 사용할 수 있는 함수가 바로 &lt;b&gt;GROUP_CONCAT&lt;/b&gt; 입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;GROUP_CONCAT&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;GROUP BY 칼럼A 를 기준으로 칼럼 &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;B&lt;span&gt; &lt;/span&gt;&lt;/span&gt;의 각 행을 묶어서 &lt;b&gt;하나의 행에 나열해주는 함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;*GROUP BY 사용 필수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724031567243&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT GROUP_CONCAT(DISTINCT 칼럼B ORDER BY 칼럼B SEPARATOR '-') AS GROUP
FROM TABLE
GROUP BY 칼럼A&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;GROUP_CONCAT(DISTINCT): 중복 없이 나열&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; GROUP_CONCAT(ORDER BY): 나열 순서 지정 (오름차순 디폴트)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; GROUP_CONCAT(SEPARATOR '문자'): 구분 문자 (쉼표 디폴트)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 문제에서는 SELL_DATE 기준으로 그룹, PRODUCT 를 쉼표로 구분해 PRODUCT 기준 오름차순 나열이므로 아래와 같은 쿼리로 짜줍니다. 이때 처음 작성했던 쿼리에서 ORDER BY 는 생략이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724031784374&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT GROUP_CONCAT(DISTINCT PRODUCT ORDER BY PRODUCT) AS PRODUCTS
FROM ACTIVITIES
GROUP BY SELL_DATE&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRVBTq/btsI6WOfxq2/3y9A7VSXhV4JkLRFWO1miK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRVBTq/btsI6WOfxq2/3y9A7VSXhV4JkLRFWO1miK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRVBTq/btsI6WOfxq2/3y9A7VSXhV4JkLRFWO1miK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRVBTq%2FbtsI6WOfxq2%2F3y9A7VSXhV4JkLRFWO1miK%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;1008&quot; height=&quot;161&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;161&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 style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최종 코드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1724031133195&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT SELL_DATE, COUNT(DISTINCT PRODUCT) AS NUM_SOLD,
    GROUP_CONCAT(DISTINCT PRODUCT ORDER BY PRODUCT) AS PRODUCTS
FROM ACTIVITIES
GROUP BY 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;br /&gt;오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/group-sold-products-by-the-date/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/group-sold-products-by-the-date/&lt;/a&gt;&lt;/p&gt;</description>
      <category>SQL/LeetCode</category>
      <category>concat</category>
      <category>group by</category>
      <category>group sold products by the date</category>
      <category>Group_concat</category>
      <category>mysql</category>
      <category>SQL</category>
      <category>그룹화</category>
      <category>리트코드</category>
      <category>리트코드1484</category>
      <category>한줄에출력</category>
      <author>5&amp;amp;2</author>
      <guid isPermaLink="true">https://siroro.tistory.com/105</guid>
      <comments>https://siroro.tistory.com/105#entry105comment</comments>
      <pubDate>Mon, 19 Aug 2024 10:44:26 +0900</pubDate>
    </item>
  </channel>
</rss>