<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jsy</title>
    <link>https://soyom.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 12 Jul 2026 17:41:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jsys</managingEditor>
    <item>
      <title>GCP - Github 연동</title>
      <link>https://soyom.tistory.com/60</link>
      <description>&lt;pre id=&quot;code_1713407704733&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(base) $ ssh-keygen -t rsa -b 4096 -C &quot;깃허브 이메일&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔터를 치면 아래와 같이 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B0NwG/btsGIWbomC5/4pKK5U5zaoC88LC5vke87K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B0NwG/btsGIWbomC5/4pKK5U5zaoC88LC5vke87K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B0NwG/btsGIWbomC5/4pKK5U5zaoC88LC5vke87K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB0NwG%2FbtsGIWbomC5%2F4pKK5U5zaoC88LC5vke87K%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;236&quot; height=&quot;184&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;184&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;pre id=&quot;code_1713407890011&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(base) $ cat .ssh/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 입력하면 ssh키가 뜬다. 이걸 복사한다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NavIL/btsGINS41lQ/KhYfgQ9MLZamtOqb5z9Fr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NavIL/btsGINS41lQ/KhYfgQ9MLZamtOqb5z9Fr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NavIL/btsGINS41lQ/KhYfgQ9MLZamtOqb5z9Fr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNavIL%2FbtsGINS41lQ%2FKhYfgQ9MLZamtOqb5z9Fr0%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;248&quot; height=&quot;549&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;717&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 깃허브에 로그인하여 Settings에 들어간다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bajNQA/btsGJlohjKX/Bxz9Q6JG5ha0Wg79FmWePk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bajNQA/btsGJlohjKX/Bxz9Q6JG5ha0Wg79FmWePk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bajNQA/btsGJlohjKX/Bxz9Q6JG5ha0Wg79FmWePk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbajNQA%2FbtsGJlohjKX%2FBxz9Q6JG5ha0Wg79FmWePk%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;1218&quot; height=&quot;588&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SSH and GPG keys&lt;/b&gt;에서 아까 복사한 SSH키를 붙여넣기 한 후 추가한다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8f9l4/btsGIepL06R/DmpSsVkHVuUKG5wbgKIw30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8f9l4/btsGIepL06R/DmpSsVkHVuUKG5wbgKIw30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8f9l4/btsGIepL06R/DmpSsVkHVuUKG5wbgKIw30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8f9l4%2FbtsGIepL06R%2FDmpSsVkHVuUKG5wbgKIw30%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;572&quot; height=&quot;232&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 SSH키가 추가된다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzEnE7/btsGJRf7A2V/c8dDtSTpCg9r8z0DASlPJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzEnE7/btsGJRf7A2V/c8dDtSTpCg9r8z0DASlPJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzEnE7/btsGJRf7A2V/c8dDtSTpCg9r8z0DASlPJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzEnE7%2FbtsGJRf7A2V%2Fc8dDtSTpCg9r8z0DASlPJk%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;251&quot; height=&quot;546&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GCP로 돌아와서 메타데이터로 들어간다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fh8OV/btsGIPpPTLH/y6Kwak3kePkkzz3iylO1Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fh8OV/btsGIPpPTLH/y6Kwak3kePkkzz3iylO1Bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fh8OV/btsGIPpPTLH/y6Kwak3kePkkzz3iylO1Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFh8OV%2FbtsGIPpPTLH%2Fy6Kwak3kePkkzz3iylO1Bk%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;1081&quot; height=&quot;636&quot; data-origin-width=&quot;1081&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH키 추가를 누른다.&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(이미 저장된 SSH키가 있었던 경우 &lt;b&gt;수정&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSnIZ/btsGKeWu8KC/UYCYUwbZR9C8JrTUhmIVIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSnIZ/btsGKeWu8KC/UYCYUwbZR9C8JrTUhmIVIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSnIZ/btsGKeWu8KC/UYCYUwbZR9C8JrTUhmIVIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrSnIZ%2FbtsGKeWu8KC%2FUYCYUwbZR9C8JrTUhmIVIK%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;1055&quot; height=&quot;130&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복사했던 SSH키를 붙여넣고 엔터로 저장한다.&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;pre id=&quot;code_1713408434883&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install git
git --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 통해 git을 설치한다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qJcu7/btsGJn0FHcW/8d53INoAHPjKubxrM7xiK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qJcu7/btsGJn0FHcW/8d53INoAHPjKubxrM7xiK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qJcu7/btsGJn0FHcW/8d53INoAHPjKubxrM7xiK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqJcu7%2FbtsGJn0FHcW%2F8d53INoAHPjKubxrM7xiK1%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;773&quot; height=&quot;517&quot; data-origin-width=&quot;773&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;깃허브에서 New Repository를 &lt;b&gt;Private&lt;/b&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOLaKY/btsGJRUHcnQ/tKjp5epz5lJcKyB3eAqLl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOLaKY/btsGJRUHcnQ/tKjp5epz5lJcKyB3eAqLl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOLaKY/btsGJRUHcnQ/tKjp5epz5lJcKyB3eAqLl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOLaKY%2FbtsGJRUHcnQ%2FtKjp5epz5lJcKyB3eAqLl0%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;419&quot; height=&quot;187&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH key를 복사한다.&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;pre id=&quot;code_1713408631469&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone SSH KEY&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git clone + 복사했던 SSH key를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls를 입력해보면 레파지토리 폴더가 생성된 것이 보인다. cd를 통해 폴더에 접속한다.&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;pre id=&quot;code_1713408696842&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi README.md&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi 명령어로 README.md 파일을 수정해본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; i (INSERT)로 수정한 뒤 esc 누르고 :wq! 로 나오기&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;pre id=&quot;code_1713408792612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git config --global user.email &quot;your_id@email.com&quot; 
git config --global user.name &quot;yourname&quot;
git add .
git commit -m &quot;UPDATED&quot;
git push&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git push를 진행하고 다시 레파지토리로 돌아와 확인해본다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Google Cloud</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/60</guid>
      <comments>https://soyom.tistory.com/60#entry60comment</comments>
      <pubDate>Thu, 18 Apr 2024 11:53:39 +0900</pubDate>
    </item>
    <item>
      <title>GCP 인스턴스 SSH - pyspark 재설치</title>
      <link>https://soyom.tistory.com/59</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;p data-ke-size=&quot;size16&quot;&gt;구글 클라우드 인스턴스 SSH에서 pyspark를 설치하고 jupyter notebook 실행 후 코드를 입력했는데 오류가 생겼다.&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;1130&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4TGOX/btsGGPqqq9o/n2BtIzNmgTME7rdkEDPf5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4TGOX/btsGGPqqq9o/n2BtIzNmgTME7rdkEDPf5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4TGOX/btsGGPqqq9o/n2BtIzNmgTME7rdkEDPf5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4TGOX%2FbtsGGPqqq9o%2Fn2BtIzNmgTME7rdkEDPf5K%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;1130&quot; height=&quot;673&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;673&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;pyspark와 python의 버전이 맞지 않아 오류가 발생하는 것이었다.&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;python 버전을 변경하는 것보다 pyspark 버전을 바꾸는 것이 더 수월하므로 pyspark를 재설치한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;* 현재 pyspark의 버전은 3.1.1이고, 3.5.1로 재설치할 것이다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH에서 아래 코드를 입력하여 pyspark를 uninstall한다.&lt;/p&gt;
&lt;pre id=&quot;code_1713336198952&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt$ pip uninstall pyspark&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 data-ke-size=&quot;size16&quot;&gt;이후 opt 내 파일을 제거한다.&lt;/p&gt;
&lt;pre id=&quot;code_1713336291701&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt$ sudo rm -rf *&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;명령어 ls를 통해 파일이 제거된 것을 확인할 수 있다.&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;pre id=&quot;code_1713336391695&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt$ sudo wget -q https://dlcdn.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 통해 spark 3.5.1 버전을 다운로드 받는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;18&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2eBRM/btsGFnuqZaq/EU5GJUgQhmi4uYb0EJYLN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2eBRM/btsGFnuqZaq/EU5GJUgQhmi4uYb0EJYLN1/img.png&quot; data-alt=&quot;다운로드 된 것을 확인할 수 있음(ls)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2eBRM/btsGFnuqZaq/EU5GJUgQhmi4uYb0EJYLN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2eBRM%2FbtsGFnuqZaq%2FEU5GJUgQhmi4uYb0EJYLN1%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;219&quot; height=&quot;18&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;18&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다운로드 된 것을 확인할 수 있음(ls)&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713336576333&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt$ sudo tar -zxf spark-3.5.1-bin-hadoop3.tgz&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축을 풀어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;15&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJbrC/btsGG9hTYN8/fAGPimmqJfvkVfj2zbaqwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJbrC/btsGG9hTYN8/fAGPimmqJfvkVfj2zbaqwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJbrC/btsGG9hTYN8/fAGPimmqJfvkVfj2zbaqwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJbrC%2FbtsGG9hTYN8%2FfAGPimmqJfvkVfj2zbaqwK%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;416&quot; height=&quot;15&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;15&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;pre id=&quot;code_1713336705325&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt$ sudo mkdir spark   #spark 폴더 생성
/opt$ sudo mv spark-3.5.1-bin-hadoop3/* /opt/spark  #spark-3.5.1-bin-hadoop3의 파일을 spark로 옮김
/opt$ cd spark
/opt/spark$ ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 잘 실행됐다면 spark폴더에 아래와 같이 파일이 이동된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X32L4/btsGH0R71Vw/Y3mM9Bs6lyGKkoEFgToTp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X32L4/btsGH0R71Vw/Y3mM9Bs6lyGKkoEFgToTp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X32L4/btsGH0R71Vw/Y3mM9Bs6lyGKkoEFgToTp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX32L4%2FbtsGH0R71Vw%2FY3mM9Bs6lyGKkoEFgToTp1%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;545&quot; height=&quot;30&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;30&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;pre id=&quot;code_1713337304753&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install pyspark==3.5.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pyspark 버전에 맞춰 다시 설치를 진행한다.&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;이후 jupyter notebook을 다시 열어 버전을 확인했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8ohA0/btsGG8iZUR7/D1R65EVQIfqzff2uB5Kbgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8ohA0/btsGG8iZUR7/D1R65EVQIfqzff2uB5Kbgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8ohA0/btsGG8iZUR7/D1R65EVQIfqzff2uB5Kbgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8ohA0%2FbtsGG8iZUR7%2FD1R65EVQIfqzff2uB5Kbgk%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;1149&quot; height=&quot;98&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.5.1 버전으로 설치가 된 것을 확인할 수 있다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg8RGv/btsGGQbPYwf/T7temZNv9KfGVdXWcaZkFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg8RGv/btsGGQbPYwf/T7temZNv9KfGVdXWcaZkFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg8RGv/btsGGQbPYwf/T7temZNv9KfGVdXWcaZkFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg8RGv%2FbtsGGQbPYwf%2FT7temZNv9KfGVdXWcaZkFK%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;1147&quot; height=&quot;466&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1568&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/51MEv/btsGFl4vKag/j3G0SHNGxb0AvmzOE67yTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/51MEv/btsGFl4vKag/j3G0SHNGxb0AvmzOE67yTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/51MEv/btsGFl4vKag/j3G0SHNGxb0AvmzOE67yTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F51MEv%2FbtsGFl4vKag%2Fj3G0SHNGxb0AvmzOE67yTK%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;1568&quot; height=&quot;460&quot; data-origin-width=&quot;1568&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Error</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/59</guid>
      <comments>https://soyom.tistory.com/59#entry59comment</comments>
      <pubDate>Wed, 17 Apr 2024 16:09:57 +0900</pubDate>
    </item>
    <item>
      <title>코호트 분석(Cohort Analysis)</title>
      <link>https://soyom.tistory.com/55</link>
      <description>&lt;h4 style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;코호트란?&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특정 기간동안 공통된 특성이나 경험을 갖는 사용자 집단. 비즈니스에서는 같은 시기에 제품 및 서비스를 처음 구매한 집단, 비슷한 유형의 제품 및 서비스를 구매하는 고객들의 그룹을 의미한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;코호트 분석이란?&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특정 기간동안 고객이나 사용자 그룹을 기준에 따라 분류하고, 그 그룹의 행동 패턴을 시간에 따라 추적하여 분석&lt;/b&gt;하는 기법이다. 이를 통해 시간이 지남에 따라 제품, 서비스, 마케팅 전략 등이 특정 그룹에 어떻게 영향을 미치는지 알 수 있다. 마케팅에서 주로 사용되며 대표적인 툴은 Google Analytics가 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;코호트 &lt;/b&gt;&lt;b&gt;분석이 중요한 이유&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 고객 유지율&lt;/b&gt; : 고객 유지율, 이탈 패턴 분석 가능&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 제품 개선&lt;/b&gt;: 사용자 피드백과 사용 패턴을 바탕으로 제품 및 서비스 분석 가능&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 마케팅 : &lt;/b&gt;캠페인의 성공 여부 확인 가능.&amp;nbsp;고객을 세분화하여 타겟 마케팅의 효과적 시행 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 예측&lt;/b&gt; : 미래의 소비자 행동에 대해 정확한 예측 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(ex. Spotify: 노래 설정, 듣는 시간대, 노래 선호도 등의 사용자 활동 추적 / 에어비앤비 : 시간이 지남에 따라 변하는 사용자 참여도/이탈률 등을 추적)&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;코호트 분석의 유형&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 전향적 코호트 연구&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반적인 코호트 연구. &lt;u&gt;특정 시점에 개별 그룹을 모집하고 특정 결과의 발생을 평가하기 위해 전향적으로 추적&lt;/u&gt;하는 연구. 연구를 시작할 때 결과가 0인 상태를 기준으로 참가자가 등록되며, 시간이 지남에 따라 특정 결과값이 나왔는지 평가한다. 원인과 결과 사이의 시간적 관계를 설정해야 할 때 선호된다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 장점 : 다수의 원인 및 결과 평가 가능 / 원인과 결과 사이 시간적 인과 관계 설정 가능 / 기억 편향에 덜 민감&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 단점 : 시간과 비용이 많이 듦 / 편향이 발생할 수 있음 / 희귀한 결과값을 도출하려면 표본 크기가 커야할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 후향적 코호트 연구&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;관심 위험 요인에 &lt;u&gt;이미 노출된 개별 그룹을 특정 시점에 식별하고, 결과가 발생한 이유를 알고자 과거를 추적&lt;/u&gt;하는 연구. 윤윤리적/물리적 이유로 전향적 연구를 수행할 수 없을 때 유용하다. 또한 관심 결과가 연구 모집단에서 이미 발생했으며, 새로운 사례가 발생하기를 기다리는 것이 불가능할 때 유용하다. 원인과 결과 사이의 연관성에 대한 평가가 빠르고 비용 효율적인 필요가 있을 때 선호된다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 장점 :비교적 빠르고 저렴 / 희귀한 결과 연구 가능 / 위험 요인과 결과 사이의 연관성 평가에 짧은 기간 소요 가능&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 단점 : 편향(선택 편향/회상 편향)의 경향 / 시간적 인과관계가 불완전할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 시간 기반 코호트 (Time Cohort)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;고객이 서비스에 가입한 시간, 제품을 처음 구매한 시간 등 시간 기준의 그룹화&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;ex) 매월 새로운 사용자 그룹을 분석하여 첫 구매 후 일정 기간 동안의 재구매율 측정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 행동 기반 코호트 (Behavior Cohort)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자의 특정 행동이나 이벤트(예: 앱 내 구매, 특정 기능 사용 등)를 기준으로 그룹화&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;ex) 특정 캠페인을 본 후 구매한 고객들의 그룹을 분석하여 캠페인의 효과를 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 크기 기반 코호트 (Size Cohort)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그룹의 상대적 크기를 기준으로 분류&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;ex) 특정 기간 동안 가입한 사용자 수를 기준으로 그룹을 나누고, 그룹별 행동을 비교&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;&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;color: #1b711d;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 아래와 같이 사업 시작 후 4개월 매출 현황이 있다고 가정한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;전체 고객 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;명&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;2,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;3,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;4,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;고객 당 평균 매출&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;50,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;45,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;43,300&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;45,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;고객 당 평균 매출이 소폭 감소한 후 상승하는데, 위 표를 통해서는 상황이 좋아지는지 나빠지는지 정의하기 어렵다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 표는 같은 데이터를 고객의 가입 시기에 따라 나누어 표를 다시 그린 것이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;코호트&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;볼륨&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;개월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;개월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;개월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;개월&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;월 가입자&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;50,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;30,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;20,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;10,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;월 가입자&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;60,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;40,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;20,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;월 가입자&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;70,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;60,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;월 가입자&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;80,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;평균&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;1,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;70,000&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&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;&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;&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;&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;&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;color: #9d9d9d;&quot;&gt;+) 참고 링크 : &lt;a href=&quot;https://datarian.io/blog/cohort-analysis&quot;&gt;https://datarian.io/blog/cohort-analysis&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>데이터 분석</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/55</guid>
      <comments>https://soyom.tistory.com/55#entry55comment</comments>
      <pubDate>Thu, 11 Apr 2024 00:31:51 +0900</pubDate>
    </item>
    <item>
      <title>[머신러닝] 분류모델 평가지표</title>
      <link>https://soyom.tistory.com/51</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;lt;Confusion Matrix(혼동 행렬, 오차 행렬)&amp;gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; colspan=&quot;2&quot; rowspan=&quot;2&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;span&gt;&lt;span&gt;예측&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;양성&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;음성&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; rowspan=&quot;2&quot;&gt;&lt;span&gt;&lt;span&gt;실제&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;양성&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;TP&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;FN&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;음성&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;FP&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;TN&lt;/span&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;* &lt;b&gt;TP&lt;/b&gt; : True Positive(&lt;span style=&quot;color: #006dd7;&quot;&gt;예측 Positive&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;실제 값도 Positive&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;b&gt;TN&lt;/b&gt; : True Negative(&lt;span style=&quot;color: #ee2323;&quot;&gt;예측 Negative&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;실제 값도 Negative&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;b&gt;FP&lt;/b&gt; : False Positive(&lt;span style=&quot;color: #006dd7;&quot;&gt;예측 Positive&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;실제 값은 Negative&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;b&gt;FN&lt;/b&gt; : False Negative(&lt;span style=&quot;color: #ee2323;&quot;&gt;예측 Negative&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;실제 값은 Positive&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;&amp;lt;분류의 성능 평가지표&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;* &lt;b&gt;정확도(Accuracy)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예측 결과와 실제 값이 동일한 건수/전체 데이터 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 분류 모델을 평가하기에 가장 단순한 지표이나, 불균형한 클래스를 가진 데이터셋을 평가하기 어렵다는 단점 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0 ~ 1 사이의 값을 가짐. 1에 가까울수록 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정확도 = &lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;(TN + TP) / (TN + TP + FN + FP)&lt;/b&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;size18&quot;&gt;* &lt;b&gt;정밀도(Precision)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;b&gt; 예측&lt;/b&gt;을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터 비율&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Positive로 검출된 결과가 얼마나 정확한지 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정밀도를 높이려면 FP를 낮추어야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0 ~ 1 사이의 값을 가짐. 1에 가까울수록 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정밀도 = &lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;TP / (TP + FP)&lt;/b&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;size18&quot;&gt;* &lt;b&gt;재현율(Recall) (=민감도, Sensitivity)(=TPR, True Positive Rate)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;실제 값&lt;/b&gt;이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터 비율&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 분류 모델이 실제 Positive 클래스를 얼마나 빠지지 않고 잡아내는지 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 재현율을 높이려면 FN을 낮추어야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0 ~ 1 사이의 값을 가짐. 1에 가까울수록 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 재현율 =&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt; TP / (TP + FN)&lt;/b&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;size18&quot;&gt;* &lt;b&gt;특이도(&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;Specificity)(= TNR, True Negative Rate)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실제 값이 Negative인 대상 중에 예측과 실제 값이 Negative로 일치한 데이터 비율&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특이도 = &lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;TN / (TN + FP)&lt;/b&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* F1 Score &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;정밀도와 재현율을 결합&lt;/b&gt;한 지표.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;정밀도와 재현율의 맹점을 보완&lt;/b&gt;하기 위해 만들어짐&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;nbsp; + Positive 예측의 임계값을 변경함에 따라 정밀도와 재현율의 수치가 변경되는데, 이러한 변경은 업무 환경에 맞게 두 개의 수치를 상호 보완할 수 있는 수준에서 적용돼야 함. 즉 둘 중 하나만 강조하면 안된다는 뜻&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 클래스가 불균형된 데이터에서 주요 평가지표로 사용함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 정밀도와 재현율이 한쪽으로 치우치지 않을 때 상대적으로 큰 값을 가짐&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- F1 = &lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;2 &amp;times; 정밀도 &amp;times; 재현율 / 정밀도 + 재현율&lt;/b&gt;&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;* ROC 곡선(Receiver Operation Characteristic Curve)&lt;/b&gt;&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;color: #333333;&quot;&gt;- 수신자 판단 곡선&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;color: #333333;&quot;&gt;- 머신러닝 이진 분류 모델의 예측 성능을 판단하는 중요한 평가 지표&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;color: #333333;&quot;&gt;- FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate)이 어떻게 변하는지를 나타내는 곡선&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;color: #666666;&quot;&gt;&lt;i&gt;&amp;nbsp; + FPR을 x축으로, TPR을 Y축으로 잡는다 -&amp;gt; FPR 변화에 따른 TPR 변화가 곡선 형태로 나타남.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 대각선을 기준으로 좌상단으로 붙어있는 ROC 곡선일수록 성능이 뛰어난 것&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* AUC(Area Under Curve)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- ROC 곡선 밑의 면적을 구한 것&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 분류의 성능 지표로 사용되는 것은 ROC 곡선 면적에 기반한 AUC 값&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 1에 가까울수록 좋은 수치&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- AUC 수치가 커지려면 FPR이 작은 상태에서 얼마나 큰 TPR을 얻을 수 있느냐가 관건&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 대각선 직선이 랜덤 수준의 이진 분류 AUC값 0.5이기 때문에 보통의 분류는 0.5 이상의 AUC 값을 가짐.&lt;/p&gt;</description>
      <category>Python</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/51</guid>
      <comments>https://soyom.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 20 Feb 2024 09:49:54 +0900</pubDate>
    </item>
    <item>
      <title>Feature Enginering</title>
      <link>https://soyom.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;데이터&amp;nbsp;가공&amp;nbsp;및&amp;nbsp;변환&amp;nbsp;:&amp;nbsp;모든&amp;nbsp;데이터를&amp;nbsp;숫자로&amp;nbsp;변경하는&amp;nbsp;것이&amp;nbsp;중요 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;데이터&amp;nbsp;가공&amp;nbsp;정의&amp;nbsp;:&amp;nbsp;Raw&amp;nbsp;데이터를&amp;nbsp;적절하게&amp;nbsp;변환 &lt;br /&gt;-&amp;nbsp;데이터&amp;nbsp;전처리&amp;nbsp;정의&amp;nbsp;:&amp;nbsp;Raw&amp;nbsp;데이터를&amp;nbsp;적절하게&amp;nbsp;처리 &lt;br /&gt;&lt;br /&gt;-&amp;gt;&amp;nbsp;둘의&amp;nbsp;차이가&amp;nbsp;무엇인가?&amp;nbsp;헷갈림 &lt;br /&gt;&amp;nbsp;&amp;nbsp;Feature Enginerring 용어를 사용함. 데이터 전처리&amp;nbsp;&lt;br /&gt;&lt;br /&gt;1차적으로&amp;nbsp;데이터&amp;nbsp;가공을&amp;nbsp;함.&amp;nbsp;:&amp;nbsp;쓰지&amp;nbsp;않을&amp;nbsp;컬럼&amp;nbsp;삭제/행&amp;nbsp;추출(예:&amp;nbsp;조건문&amp;nbsp;부여,&amp;nbsp;이상치&amp;nbsp;제거)/파생&amp;nbsp;변수 &lt;br /&gt;&lt;br /&gt;Feature Engineering : 인코딩 변환(문자 컬럼을 숫자로 변경)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature&amp;nbsp;Scaling&amp;nbsp;:&amp;nbsp;숫자&amp;nbsp;컬럼을&amp;nbsp;적절하게&amp;nbsp;표준화,&amp;nbsp;정규화) &lt;br /&gt;주성분 분석(PCA)(숫자 컬럼을 적절하게 줄여주는 역할, 차원축소) &lt;br /&gt;요인분석(Factor Analysis)(숫자 및 문자 컬럼을 적절하게 줄여주는 역할)&lt;/p&gt;</description>
      <category>Python</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/50</guid>
      <comments>https://soyom.tistory.com/50#entry50comment</comments>
      <pubDate>Mon, 19 Feb 2024 17:45:25 +0900</pubDate>
    </item>
    <item>
      <title>하이퍼 파라미터 - Grid Search, Random Search</title>
      <link>https://soyom.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 하이퍼 파라미터&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 머신러닝 알고리즘을 구성하는 주요 구성 요소. 모델의 학습 과정이나 구조를 제어하는 매개변수로, 이 값을 조정해 알고리즘의 예측 성능을 개선할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 학습 알고리즘들은 각각 다른 하이퍼 파라미터를 가지게 되는데, 모델은 주어진 하이퍼 파라미터를 가지고 데이터를 학습하게 된다.(ex. 의사 결정 트리의 최대 깊이, 랜덤 포레스트의 트리 개수 등)&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;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;* Grid Search&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;gt; 주어진 각 하이퍼파라미터에 대해 미리 정의된 값의 그리드(격자)를 만들고, 이 그리드의 모든 조합을 탐색함&lt;br /&gt;&amp;gt; 각 조합에 대해 교차 검증을 사용하여 모델을 평가하고, 최적의 하이퍼파라미터 조합을 선택한다.&lt;br /&gt;&amp;gt; 순차적으로 파라미터를 테스트하므로 수행시간이 상대적으로 오래 걸린다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Scikit-learn&amp;nbsp;라이브러리가&amp;nbsp;&lt;b&gt;GridSearchCV&lt;/b&gt;라는&amp;nbsp;함수를&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;&amp;gt; 다음은 결정 트리 알고리즘의 최적화 파라미터를 순차적으로 적용해 붓꽃 데이터를 예측 분석하는 데 GridSearchCV를 이용한 예제이다.&lt;/p&gt;
&lt;pre id=&quot;code_1708330036433&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

# 데이터를 로딩하고 학습데이터와 테스트 데이터 분리
iris_data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, 
                                                    test_size=0.2, random_state=121)
dtree = DecisionTreeClassifier()

# 파라미터를 딕셔너리 형태로 설정
parameters = {
    &quot;max_depth&quot; : [1, 2 ,3],
    &quot;min_samples_split&quot; : [2, 3]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; max_depth와 min_sample_split의 값을 변화시키면서 최적화를 진행&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;pre id=&quot;code_1708330325530&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

# Grid Search
grid_dtree = GridSearchCV(dtree, param_grid = parameters, cv = 3, refit=True)  # 가장 좋은 파라미터 설정으로 재학습 시킴

# Grid Search 학습
grid_dtree.fit(X_train, y_train)

# GridSearchCV 결과 추출
scores_df = pd.DataFrame(grid_dtree.cv_results_)
scores_df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 학습 데이터 세트를 GridSearchSV 객체의 fit 메서드에 인자로 입력&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;color: #9d9d9d;&quot;&gt;* &lt;b&gt;param_grid&lt;/b&gt; : key+리스트 값을 가지는 딕셔너리가 주어짐. 파라미터명과 사용될 여러 파라미터 값 지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;* &lt;b&gt;cv&lt;/b&gt; : Cross Validation의 약자. 교차 검증을 위해 분할되는 학습/테스트 세트의 개수를 지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;* &lt;b&gt;refit&lt;/b&gt; : 디폴트가 True로, True이면 가장 최적의 하이퍼 파라미터 설정으로 재학습시킴.&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;&amp;gt;&amp;gt; 결과 칼럼별 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;params : 수행할 때마다 적용된 개별 하이퍼 파라미터값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rank_test_score : 하이퍼 파라미터별로 성능이 좋은 socre 순위를 나타냄. 1이 가장 뛰어난 순위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mean_test_score : 개별 하이퍼 파라미터별로 CV의 폴딩 테스트 세트에 대해 총 수행한 평가 평균값&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;pre id=&quot;code_1708331920076&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 최적의 파라미터
grid_dtree.best_params_&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; out:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{'max_depth': 3, 'min_samples_split': 2}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708331985203&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 최고 정확도
grid_dtree.best_score_&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; out:&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.975&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;gt;&amp;gt; max_depth가 3, min_samples_split가 2일 때 평균 최고 정확도가 97.50%&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;pre id=&quot;code_1708332077043&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;estimator = grid_dtree.best_estimator_  # 재학습
pred = estimator.predict(X_test)
accuracy_score(y_test, pred)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; out:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.9666666666666667&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;gt;&amp;gt; 테스트 데이터 세트의 정확도가 약 96.67%라는 결과가 도출됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;* Random Search&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;gt; 미리 지정된 횟수나 시간 동안 무작위로 하이퍼파라미터를 샘플링하여 모델을 평가함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Random Search는 하이퍼파라미터로 시도할 숫자의 구간과, 횟수를 정해준다.&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(&lt;span style=&quot;text-align: start;&quot;&gt;Grid Search는 실험할 하이퍼파라미터들을 명시적으로 정해줘야 함)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;gt; Grid Search와 달리 모든 조합을 탐색하지 않기 때문에 계산 비용이 덜 들 수 있음.&lt;br /&gt;&amp;gt; 무작위로 샘플링하기 때문에 어떤 경우에는 Grid Search보다 더 나은 성능을 보일 수 있다. 특히 하이퍼파라미터의 중요도나 상호작용이 불분명한 경우에 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(Grid를 만들어서 하이퍼파라미터를 찾는 것보다, 랜덤으로 숫자를 뽑아서 그걸 하이퍼파라미터로 시도해보는 것이 더 좋은 성능의 모델을 찾는 확률을 높일 수 있다는 것)&lt;/span&gt;&lt;br /&gt;&amp;gt; Scikit-learn의 &lt;b&gt;RandomSearchCV&lt;/b&gt;라는 함수를 활용하면 짧은 코드로도 Random Search를 구현할 수 있음&lt;br /&gt;&lt;br /&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;&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;size18&quot;&gt;&lt;b&gt;* Grid Search VS Random Search&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(참고: &lt;a href=&quot;https://www.linkedin.com/pulse/tale-hyperparameter-tuning-random-search-cv-grid-swaroop-piduguralla&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.linkedin.com/pulse/tale-hyperparameter-tuning-random-search-cv-grid-swaroop-piduguralla&lt;/a&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;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;Random Search CV: 조합을 무작위로 샘플링하여 탐색에 중점을 둔다. (더 넓은 범위 탐색 가능)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt; Grid Search CV: 모든 조합을 체계적으로 평가한다. (지정된 범위 내 철저한 탐색 가능)&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;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;gt;&amp;gt; 검색 공간이 큰 경우 Random Search CV가 더 효율적/ &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;검색 공간이 상대적으로 작고 계산이 가능한 경우 Grid Search CV&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&amp;gt;&amp;gt; Random Search CV는 조합을 무작위로 선택하기 때문에 최상의 하이퍼파라미터 세트를 찾을 수 없을 가능성이 있다./ 반면에 Grid Search CV는 지정된 그리드 내에서 최적의 설정을 찾을 가능성이 높다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/49</guid>
      <comments>https://soyom.tistory.com/49#entry49comment</comments>
      <pubDate>Mon, 19 Feb 2024 17:44:26 +0900</pubDate>
    </item>
    <item>
      <title>PyCaret Windows 10 아나콘다 설치</title>
      <link>https://soyom.tistory.com/48</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;PyCaret 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;Anaconda Prompt&lt;/b&gt;를 &lt;b&gt;관리자로 실행&lt;/b&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;2. 아래 명령어로 conda 환경이 잘 작동되는지 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1707871310506&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conda --version&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oVXYS/btsEQN7OPKM/gqqd06g9yIEnNOaNQUMswK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oVXYS/btsEQN7OPKM/gqqd06g9yIEnNOaNQUMswK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oVXYS/btsEQN7OPKM/gqqd06g9yIEnNOaNQUMswK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoVXYS%2FbtsEQN7OPKM%2Fgqqd06g9yIEnNOaNQUMswK%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;425&quot; height=&quot;55&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;gt;&amp;gt; 이렇게 버전이 뜨면 된다.&lt;/i&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;3. conda 가상환경을 만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1707871513307&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conda create --name ml_pycaret python=3.10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;gt;&amp;gt; 여기서 ml_pycaret은 폴더명임&lt;/span&gt;&lt;/i&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;4. conda 가상환경에 접속한다.&lt;/p&gt;
&lt;pre id=&quot;code_1707871578777&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conda activate ml_pycaret&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 data-ke-size=&quot;size16&quot;&gt;5. 아래 명령어를 통해 pycaret을 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1707871672809&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install pycaret&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 data-ke-size=&quot;size16&quot;&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;&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;Jupyter lab 실행&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 폴더 경로로 접속한다.&lt;/p&gt;
&lt;pre id=&quot;code_1707874149641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd &quot;C:\Users\jeong\Desktop\ml_pycaret&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;gt;&amp;gt; 형식 : cd &quot;폴더 경로&quot;&lt;/i&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;2. 아래 명령어를 입력하여 jupyter lab을 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1707874204641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conda install -c conda-forge jupyterlab&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 data-ke-size=&quot;size16&quot;&gt;3. jupyter lab을 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1707874344736&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pycaret
pycaret.__version__&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1707874360233&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import lightgbm
lightgbm.__version__&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;gt;&amp;gt; 위와 같이 pycaret과 lightgbm 버전을 확인하여 설치가 잘 되었는지 확인한다.&lt;/i&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9SR1P/btsEQLoCJsJ/o1xBmqlxU1wQ6wADDJbAk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9SR1P/btsEQLoCJsJ/o1xBmqlxU1wQ6wADDJbAk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9SR1P/btsEQLoCJsJ/o1xBmqlxU1wQ6wADDJbAk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9SR1P%2FbtsEQLoCJsJ%2Fo1xBmqlxU1wQ6wADDJbAk0%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;978&quot; height=&quot;225&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;gt;&amp;gt; 이렇게 나오면 된다.&lt;/i&gt;&lt;/p&gt;</description>
      <category>Python</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/48</guid>
      <comments>https://soyom.tistory.com/48#entry48comment</comments>
      <pubDate>Wed, 14 Feb 2024 10:37:14 +0900</pubDate>
    </item>
    <item>
      <title>환경 변수 설정으로 API 키 숨기기</title>
      <link>https://soyom.tistory.com/46</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;환경변수 이용한 API 크롤링을 할 때, 깃허브 등 온라인에 코드 업로드 시 API 인증키에 대한 보안을 유지하기 위해 &lt;b&gt;환경 변수&lt;/b&gt;를 설정해야 한다. (이 외에 DB username, password 등 민감한 정보를 사용할 때 설정함)&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;*** 그 전에 .env와 .streamlit을 이용해야 하므로&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; text-align: left;&quot;&gt;.gitignore에 해당 폴더 등을 사전에 미리 정의해서 업로드 한 후 진행한다.(깃허브에 커밋되지 않게 하는 것)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xWdhS/btsEdIgvzPy/g7k7KLXrrEkFP5EKtqnJO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xWdhS/btsEdIgvzPy/g7k7KLXrrEkFP5EKtqnJO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xWdhS/btsEdIgvzPy/g7k7KLXrrEkFP5EKtqnJO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxWdhS%2FbtsEdIgvzPy%2Fg7k7KLXrrEkFP5EKtqnJO1%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;623&quot; height=&quot;617&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #1d1c1d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;gt;&amp;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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706760418516&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add .gitignore&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; text-align: left;&quot;&gt;&amp;gt;&amp;gt; 이후 git commit &amp;amp; push하면 된다.&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;1. python-dotenv 이용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmwmvb/btsEdU2arOz/erPjdGqwuU7IbK9WdobRR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmwmvb/btsEdU2arOz/erPjdGqwuU7IbK9WdobRR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmwmvb/btsEdU2arOz/erPjdGqwuU7IbK9WdobRR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmwmvb%2FbtsEdU2arOz%2FerPjdGqwuU7IbK9WdobRR0%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;256&quot; height=&quot;28&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 프로젝트 폴더 내에 .env 파일을 생성한다.&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;pre id=&quot;code_1706760819459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install python-dotenv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; python-dotenv 라이브러리를 설치한다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QIAtQ/btsEhnP6fwE/qKpwf8k5p84W1GGcEK8eBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QIAtQ/btsEhnP6fwE/qKpwf8k5p84W1GGcEK8eBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QIAtQ/btsEhnP6fwE/qKpwf8k5p84W1GGcEK8eBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQIAtQ%2FbtsEhnP6fwE%2FqKpwf8k5p84W1GGcEK8eBK%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;470&quot; height=&quot;70&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; .env 파일에 사용할 인증키를 정리한다.&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;pre id=&quot;code_1706761411851&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from dotenv import load_dotenv
import os&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;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;pre id=&quot;code_1706761511205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;load_dotenv()  # .env 파일 활성화

SERVICE_KEY = os.getenv('SERVICE_KEY')  # SERVICE_KEY 값 가져오기
print(SERVICE_KEY)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; print를 이용해 확인해보면 env 파일에 있는 값이 불러와졌음을 알 수 있음&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;&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;size18&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;2. Streamlit Secerets Management 활용&lt;/b&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;Streamlit 배포의 경우 .streamlit/secrets.toml 파일을 생성하여 환경 변수를 정의할 수 있고, 이 파일은 Streamlit 클라우드로 배포할 때 Streamlit에 의해 자동으로 처리되어 환경 변수로 사용됨&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;(1) Streamlit 앱에서 환경 변수 접근하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmraZp/btsEj7SSP1x/cROdecUndDU9maqV89B2L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmraZp/btsEj7SSP1x/cROdecUndDU9maqV89B2L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmraZp/btsEj7SSP1x/cROdecUndDU9maqV89B2L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmraZp%2FbtsEj7SSP1x%2FcROdecUndDU9maqV89B2L1%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;800&quot; height=&quot;678&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;678&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; Streamlit 접속 후 &quot;New app&quot;을 누르고 정보 입력하고 Advanced settings 누른다.&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGXZoR/btsEhrEWtKA/KYY6VyWVDiP4ee1S0zEJBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGXZoR/btsEhrEWtKA/KYY6VyWVDiP4ee1S0zEJBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGXZoR/btsEhrEWtKA/KYY6VyWVDiP4ee1S0zEJBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGXZoR%2FbtsEhrEWtKA%2FKYY6VyWVDiP4ee1S0zEJBk%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;621&quot; height=&quot;633&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; Secrets에 인증키를 입력하면 된다.&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;(2) secrets.toml 파일 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BLzF8/btsEhVeFYxh/ccnkphEnG0SoJz5YypggiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BLzF8/btsEhVeFYxh/ccnkphEnG0SoJz5YypggiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BLzF8/btsEhVeFYxh/ccnkphEnG0SoJz5YypggiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBLzF8%2FbtsEhVeFYxh%2FccnkphEnG0SoJz5YypggiK%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;247&quot; height=&quot;44&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; .streamlit 폴더에 secrets.toml 파일 생성하고 여기에 인증키를 입력한다.&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;pre id=&quot;code_1706763593442&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# secrets.toml
[api_credentials]
SERVICE_KEY = &quot;api_key&quot;&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;pre id=&quot;code_1706766994492&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import streamlit as st
st.write(st.secrets[&quot;api_credentials&quot;][&quot;SERVICE_KEY&quot;])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; api 키 값이 출력되는 것을 확인할 수 있다.&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;</description>
      <category>Python</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/46</guid>
      <comments>https://soyom.tistory.com/46#entry46comment</comments>
      <pubDate>Thu, 1 Feb 2024 14:59:08 +0900</pubDate>
    </item>
    <item>
      <title>git push 에러</title>
      <link>https://soyom.tistory.com/44</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;p data-ke-size=&quot;size16&quot;&gt;파일을 수정하고 git push를 했는데 다음과 같은 에러 메시지가 떴다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTWqn8/btsEdEKEdKM/Pcl705n1goLgVX7Ufgl8E0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTWqn8/btsEdEKEdKM/Pcl705n1goLgVX7Ufgl8E0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTWqn8/btsEdEKEdKM/Pcl705n1goLgVX7Ufgl8E0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTWqn8%2FbtsEdEKEdKM%2FPcl705n1goLgVX7Ufgl8E0%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;661&quot; height=&quot;188&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;188&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;&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFE7Q1/btsEa7mvBvV/59tVtMiWMDeyLVMEZK44f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFE7Q1/btsEa7mvBvV/59tVtMiWMDeyLVMEZK44f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFE7Q1/btsEa7mvBvV/59tVtMiWMDeyLVMEZK44f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFE7Q1%2FbtsEa7mvBvV%2F59tVtMiWMDeyLVMEZK44f0%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;411&quot; height=&quot;102&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; git status로 확인해보면 push 없이 commit을 3번 했다는 것을 알 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(직역하면 브랜치가 main보다 3 커밋 앞서있다)&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;&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;pre id=&quot;code_1706604794689&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git reset --soft HEAD~숫자&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 쌓인 commits 횟수를 위 코드 숫자 부분에 넣으면 됨&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;20&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ODAJ4/btsEdMaNsyj/9P3jUlNxDkVr2DxuAwLrE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ODAJ4/btsEdMaNsyj/9P3jUlNxDkVr2DxuAwLrE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ODAJ4/btsEdMaNsyj/9P3jUlNxDkVr2DxuAwLrE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FODAJ4%2FbtsEdMaNsyj%2F9P3jUlNxDkVr2DxuAwLrE0%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;216&quot; height=&quot;20&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;20&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 위의 경우에 3 commits이었으므로 3으로 써줌&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;&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;reset 명령으로 git commit 명령을 되돌렸으므로 다시 진행하면 된다.&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;* 참고 링크&lt;/b&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;- Git 도구: Reset 명확히 알고 가기,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0#r_git_reset&quot;&gt;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0#r_git_reset&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706605265647&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;Git - Reset 명확히 알고 가기&quot; data-og-description=&quot;지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한&quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0#r_git_reset&quot; data-og-url=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0#r_git_reset&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0Fa76/hyVb643mSw/SnmJuTNxb077MIkNo0Mga1/img.png?width=800&amp;amp;height=702&amp;amp;face=0_0_800_702,https://scrap.kakaocdn.net/dn/By7Wg/hyVccxpA9c/SZVj55kXnWELhkZx4vitlK/img.png?width=800&amp;amp;height=702&amp;amp;face=0_0_800_702,https://scrap.kakaocdn.net/dn/eG04k/hyVb7pkBcW/zZUH3oIFtgK3U9OGjBaui0/img.png?width=800&amp;amp;height=702&amp;amp;face=0_0_800_702&quot;&gt;&lt;a href=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0#r_git_reset&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0#r_git_reset&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0Fa76/hyVb643mSw/SnmJuTNxb077MIkNo0Mga1/img.png?width=800&amp;amp;height=702&amp;amp;face=0_0_800_702,https://scrap.kakaocdn.net/dn/By7Wg/hyVccxpA9c/SZVj55kXnWELhkZx4vitlK/img.png?width=800&amp;amp;height=702&amp;amp;face=0_0_800_702,https://scrap.kakaocdn.net/dn/eG04k/hyVb7pkBcW/zZUH3oIFtgK3U9OGjBaui0/img.png?width=800&amp;amp;height=702&amp;amp;face=0_0_800_702');&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;Git - Reset 명확히 알고 가기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;git-scm.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://dschloe.github.io/settings/git_intermediate/&quot;&gt;Git 명령어 중급편 - Data Science | DSChloe&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706605294797&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Git 명령어 중급편&quot; data-og-description=&quot;개요 커밋을 하기 전에 확인해야 할 기본적인 명령어 등을 확인해본다. tracked 상태의 파일을 untracked 상태로 변경하는데, 스테이지에 등록하는 것과 반대 과정이라고 보면 된다. stage 상태에 있는&quot; data-og-host=&quot;dschloe.github.io&quot; data-og-source-url=&quot;https://dschloe.github.io/settings/git_intermediate/&quot; data-og-url=&quot;https://dschloe.github.io/settings/git_intermediate/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dschloe.github.io/settings/git_intermediate/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dschloe.github.io/settings/git_intermediate/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Git 명령어 중급편&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개요 커밋을 하기 전에 확인해야 할 기본적인 명령어 등을 확인해본다. tracked 상태의 파일을 untracked 상태로 변경하는데, 스테이지에 등록하는 것과 반대 과정이라고 보면 된다. stage 상태에 있는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dschloe.github.io&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>Error</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/44</guid>
      <comments>https://soyom.tistory.com/44#entry44comment</comments>
      <pubDate>Tue, 30 Jan 2024 18:02:40 +0900</pubDate>
    </item>
    <item>
      <title>[Streamlit] Input widgets(예시/연습)</title>
      <link>https://soyom.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* 참조 링크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.streamlit.io/library/api-reference/widgets&quot;&gt;Input widgets - Streamlit Docs&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706528186754&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;Streamlit Docs&quot; data-og-description=&quot;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&quot; data-og-host=&quot;docs.streamlit.io&quot; data-og-source-url=&quot;https://docs.streamlit.io/library/api-reference/widgets&quot; data-og-url=&quot;https://docs.streamlit.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cO9mwG/hyVcbEYmgX/Odfxq4gb4qUFG2g1cpJV4k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zbXFA/hyVceIulcS/5so7M3zyvl17UFvyDh2XAK/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/bmdV1t/hyVb04wkng/3yKHpKNPOA6xosyKMcr8t0/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313&quot;&gt;&lt;a href=&quot;https://docs.streamlit.io/library/api-reference/widgets&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.streamlit.io/library/api-reference/widgets&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cO9mwG/hyVcbEYmgX/Odfxq4gb4qUFG2g1cpJV4k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zbXFA/hyVceIulcS/5so7M3zyvl17UFvyDh2XAK/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/bmdV1t/hyVb04wkng/3yKHpKNPOA6xosyKMcr8t0/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313');&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;Streamlit Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.streamlit.io&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;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 라이브러리 불러오기&lt;/p&gt;
&lt;pre id=&quot;code_1706526316405&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# -*- coding:utf-8 -*-
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.graph_objects as go&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 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;size18&quot;&gt;&lt;b&gt;1. st.slider&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 형식 : &lt;span style=&quot;background-color: #dddddd;&quot;&gt;st.slider('라벨', 최소값, 최대값, 초기값, 스텝)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;gt; 라벨 : 슬라이더 옆에 표시될 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;gt; 스텝 : 슬라이더 값이 변경되는 간격, 생략 가능, 기본값 1&lt;/p&gt;
&lt;pre id=&quot;code_1706526331586&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@st.cache_data
def cal_sales_revenue(price, total_sales):
    revenue = price * total_sales

    return revenue&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1706526382817&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def main():
    st.title(&quot;Button Widget&quot;)
    price = st.slider(&quot;단가:&quot;, 100, 10000, value = 5000)
    total_sales = st.slider(&quot;전체 판매 갯수:&quot;, 1, 1000, value = 500)

    st.write(price, total_sales)

    if st.button(&quot;매출액 계산&quot;):
        revenue = cal_sales_revenue(price, total_sales)
        st.write(revenue)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 버튼을 누르면 슬라이더를 통해 선택된 price와 total_sales를 곱해 매출액을 계산하도록 함(cal_sales_revenue)&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;&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;b&gt;2. st.checkbox&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706526704680&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;st.title(&quot;Check Box Control&quot;)
    x = np.linspace(0, 10, 100)
    y = np.sin(x)

    show_plot = st.checkbox(&quot;시각화 보여주기&quot;)
    st.write(show_plot)

    fig, ax = plt.subplots()
    ax.plot(x,y)

    if show_plot:  # 체크박스 클릭이 되면 시각화 보여주기
        st.pyplot(fig)
    else:
        st.write(&quot;안녕, &quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 체크박스 클릭이 되면 시각화를 보여주고, 클릭이 되지 않으면 &quot;안녕,&quot;이라는 텍스트가 보이게 함&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;&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;b&gt;3. st.radio&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706526792128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 데이터 불러오기
@st.cache_data
def load_data():
    df = sns.load_dataset('iris')
    return df
def plot_matplotlib(df):
    st.title('Scatter Plot with Matplotlib')
    fig, ax = plt.subplots()
    ax.scatter(df['sepal_length'], df['sepal_width'])
    st.pyplot(fig)
def plot_seaborn(df):
    st.title('Scatter Plot with Seaborn')
    fig, ax = plt.subplots()
    sns.scatterplot(df, x = 'sepal_length', y = 'sepal_width')
    st.pyplot(fig)
def plot_plotly(df):
    st.title('Scatter Plot with Plotly')
    fig = go.Figure()
    fig.add_trace(
        go.Scatter(x = df['sepal_length'],
                   y = df['sepal_width'],
                   mode='markers')
    )
    st.plotly_chart(fig)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1706526814552&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plot_type = st.radio(
        &quot;어떤 스타일의 산점도를 보고 싶은가요?&quot;,
        (&quot;Matplotlib&quot;,&quot;Seaborn&quot;,&quot;Plotly&quot;)
    )

    st.write(plot_type)
    
if plot_type == &quot;Matplotlib&quot;:
        plot_matplotlib(iris)
    elif plot_type == &quot;Seaborn&quot;:
        plot_seaborn(iris)
    elif plot_type == &quot;Plotly&quot;:
        plot_plotly(iris)
    else:
        st.write(&quot;Error!!&quot;)

    st.title(&quot;SelectBox 사용&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; st.radio로 Matplotlib, Seaborn, Plotly 중 하나를 선택할 수 있게 하고 그에 맞는 차트를 보여줌&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;&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;b&gt;4. st.selectbox&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706526838240&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 행 추출
    st.write(iris.species.unique())
    val = st.selectbox(&quot;1개의 종을 선택하세요!!&quot;, iris.species.unique())
    st.write(&quot;선택된 species:&quot;, val)

    result = iris.loc[iris['species'] == val, :].reset_index(drop=True)
    st.data_editor(result)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;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;&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;b&gt;5. st.multiselect&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706527846577&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    cols = st.multiselect(&quot;복수의 컬럼을 선택하세요!!&quot;, iris.columns)
    st.dataframe(iris.loc[:, cols])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;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;&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;color: #9d9d9d;&quot;&gt;&lt;b&gt;* st.data_editor&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data elements&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 수정할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1706528220782&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;st.title(&quot;라이브러리 선택&quot;)
    iris = load_data()
    st.data_editor(iris)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;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;&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;pre id=&quot;code_1706526854449&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if __name__ == &quot;__main__&quot;:
    main()&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python</category>
      <author>jsys</author>
      <guid isPermaLink="true">https://soyom.tistory.com/43</guid>
      <comments>https://soyom.tistory.com/43#entry43comment</comments>
      <pubDate>Mon, 29 Jan 2024 20:38:27 +0900</pubDate>
    </item>
  </channel>
</rss>