<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Python 연습장</title>
    <link>https://sthsb.tistory.com/</link>
    <description>Python 공부 중입니다.</description>
    <language>ko</language>
    <pubDate>Tue, 23 Jun 2026 09:45:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>포숑</managingEditor>
    <item>
      <title>progress bar - tqdm 사용법</title>
      <link>https://sthsb.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;tqdm 사용법은 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 문 끝에 iterator 나 list 등에 tqdm 만 씌워주면 알아서 프로그래스 바가 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;time.sleep 을 써준 이유는 프로그레스 바가 진행되는 모습을 보여주려고 추가한 거고 실제 사용시에는 없앤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1674425745480&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from tqdm import tqdm
import time 

for i in tqdm(range(10000)):
    time.sleep(0.01)&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-filename=&quot;스크린샷 2023-01-23 07.14.01.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJDzj/btrWRzsxixr/cXWaQLPaJtfhLTfQDYjaKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJDzj/btrWRzsxixr/cXWaQLPaJtfhLTfQDYjaKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJDzj/btrWRzsxixr/cXWaQLPaJtfhLTfQDYjaKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJDzj%2FbtrWRzsxixr%2FcXWaQLPaJtfhLTfQDYjaKK%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;421&quot; height=&quot;278&quot; data-filename=&quot;스크린샷 2023-01-23 07.14.01.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 구문은 아래처럼도 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1674426014401&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from tqdm import trange
for i in trange(10000):
    time.sleep(0.01)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;enumerate 사용시에는 tqdm(enumerate ~ 가 아니라 enumerate(tqdm ~ 순서여야 프로그레스 바가 나타난다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674426302293&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from tqdm import tqdm
list_temp = ['a','b','c']
for i, var in enumerate(tqdm(list_temp)):
    time.sleep(0.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;매뉴얼로 업데이트하는 방법&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1674426386472&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with tqdm(total=100) as pbar:
    for i in range(10):
        sleep(0.1)
        pbar.update(10)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;with 문을 사용하거나 아래처럼 pbar 라는 변수에 tqdm 을 선언하고 for 문을 돌려도 된다. 이 때 pbar.close() 는 꼭 해줘야 한다고 깃헙가이드 문서(&lt;a href=&quot;https://github.com/tqdm/tqdm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tqdm/tqdm&lt;/a&gt;)에 나와있다.&lt;/p&gt;
&lt;pre id=&quot;code_1674426408329&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pbar = tqdm(total=100)
for i in range(10):
    sleep(0.1)
    pbar.update(10)
pbar.close()&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그 밖에 옵션&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1674428117649&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from tqdm import tqdm
iterable = ['a','b','c']
for i in tqdm(iterable, # 반복가능한 iterable 객체
              desc = 'Description', # 프로그레스 바 맨 앞에 나타날 문구
              total = 4, # len(iterable)이 Default. 굳이 바꿀 일은 없을 듯.
              ncols = 70, # 프로그레스 바 너비, desc 의 글자개수가 포함되므로 적절히 설정
              ascii = True, # default는 False, True 시 바 모양이 '#' 로 나타남. 다른 character 로 변경 시 첫 번째 문자는 공백이어야 작동. ex. ascii = ' ='
              colour = 'blue', # '#0000ff' 헥스코드로도 입력 가능
              initial = 1, # 초기값. default = 0,
              position = 0 # 바 위치 설정. 여러개의 바 관리할 때 지정
              ):
    time.sleep(0.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-23 07.56.00.png&quot; data-origin-width=&quot;2466&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A6nmI/btrWX4xDyGm/YGRKK5CL1ghjwjrOXm9OF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A6nmI/btrWX4xDyGm/YGRKK5CL1ghjwjrOXm9OF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A6nmI/btrWX4xDyGm/YGRKK5CL1ghjwjrOXm9OF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA6nmI%2FbtrWX4xDyGm%2FYGRKK5CL1ghjwjrOXm9OF1%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;2466&quot; height=&quot;516&quot; data-filename=&quot;스크린샷 2023-01-23 07.56.00.png&quot; data-origin-width=&quot;2466&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;진행 중인 단계 알려주기 : set_description&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1674428614349&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from tqdm import tqdm
iterable = ['a','b','c']
pbar = tqdm(iterable, ascii = False, colour = 'blue')
for char in pbar:
    time.sleep(0.1)
    pbar.set_description(&quot;Processing '%s'&quot; % char)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-23 08.18.03.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctucyE/btrWR8nKBVG/rHKyPs8Gz6tkuqmhBWzSkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctucyE/btrWR8nKBVG/rHKyPs8Gz6tkuqmhBWzSkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctucyE/btrWR8nKBVG/rHKyPs8Gz6tkuqmhBWzSkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctucyE%2FbtrWR8nKBVG%2FrHKyPs8Gz6tkuqmhBWzSkk%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;164&quot; data-filename=&quot;스크린샷 2023-01-23 08.18.03.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/65</guid>
      <comments>https://sthsb.tistory.com/65#entry65comment</comments>
      <pubDate>Mon, 23 Jan 2023 07:57:46 +0900</pubDate>
    </item>
    <item>
      <title>colab 에서 google drive mount 하기</title>
      <link>https://sthsb.tistory.com/64</link>
      <description>&lt;pre id=&quot;code_1672662804232&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#드라이브 마운트

from google.colab import drive
drive.mount('/content/drive')&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1672662827780&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import PIL
PIL.Image.open('/content/drive/MyDrive/cats.jpeg')&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;'MyDrive' 빼먹지 말 것!&lt;/p&gt;</description>
      <category>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/64</guid>
      <comments>https://sthsb.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 2 Jan 2023 21:34:22 +0900</pubDate>
    </item>
    <item>
      <title>torch 설치</title>
      <link>https://sthsb.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;텐서플로우 2.11 부터는 윈도우에서 GPU 지원을 안 한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.tensorflow.org/install/pip#windows-native&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.tensorflow.org/install/pip#windows-native&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-12-29 23.18.25.png&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byduv3/btrUV9OBAhp/pOJ0JkgKbwZ7WnFiSRitb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byduv3/btrUV9OBAhp/pOJ0JkgKbwZ7WnFiSRitb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byduv3/btrUV9OBAhp/pOJ0JkgKbwZ7WnFiSRitb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyduv3%2FbtrUV9OBAhp%2FpOJ0JkgKbwZ7WnFiSRitb0%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;501&quot; height=&quot;163&quot; data-filename=&quot;스크린샷 2022-12-29 23.18.25.png&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WSL 은 windows subsystem for linux 의 약자로 윈도우에서 리눅스 환경을 사용하는 도구로 윈도우는 아닌 듯.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 tensorflow gpu는 그냥 코랩에서 사용하도록 하고&amp;nbsp;pc에서는 pytorch로 맞추려고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pytorch gpu 개발 환경을 맞추기 위해 아래의 순서로 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) gpu 사양 확인 2) gpu 드라이버 깔기 3) gpu에 맞는 cuda ver 확인 후 설치, cudnn도. 4) torch 설치 5) gpu 인식하는지 확인&lt;/p&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;torch 설치할 때는 하기 링크 참고.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 cuda 버전 맞는 whl 파일 다운로드 해서 설치하는게 더 빠르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+cpu 가 아닌 cuda 버전으로 설치해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://download.pytorch.org/whl/torch_stable.html&quot;&gt;http://download.pytorch.org/whl/torch_stable.html&lt;/a&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;br /&gt;gpu 인식하는지 확인하는 코드는 이러하다. 입력 시 True 로 나오면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1672659256057&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
torch.cuda.is_available()&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;GPU 가 여러개면 아래 코드에서 0, 1, 2 .. 순서로 입력해서 인식되는 GPU를 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1672659379180&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;torch.cuda.get_device_name(0)&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;device 는 보통 아래처럼 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1672659427978&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 모델이나 텐서를 이 device에 실어서 gpu에서 연산하도록 올려준다.&lt;/p&gt;
&lt;pre id=&quot;code_1672659753845&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model.to(device)
t1.to(device)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 코랩을 사용할거라서 별도의 절차는 필요없지만 다음에 필요해질 경우를 대비해서 정리해 둠.&lt;/p&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>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/62</guid>
      <comments>https://sthsb.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 29 Dec 2022 23:38:28 +0900</pubDate>
    </item>
    <item>
      <title>구글 코랩(colab)을 알아보자</title>
      <link>https://sthsb.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;python으로 코딩을 해 본 사람이라면 모두가 사용해봤을 colab.&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;h3 data-ke-size=&quot;size23&quot;&gt;[ colab 을 사용하는 이유 ]&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;&lt;b&gt;GPU 가 제공된다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ipynb 파일로 markdown 을 같이 쓸 수 있어서 강의자료로 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cloud(google drive) 기반이라 장소에 구애없이 사용가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cloud 기반이라 공유하기 편하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[ colab 의 단점 ]&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기본 package 가 아니면 매번 package 를 새로 install 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드가 길어질 경우, output 이 많을 경우 로딩이 있고 느리다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- jupyter notebook 과 마찬가지로 코드 오류 확인이 어렵다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버에서 작동하는거라 local host 접속이 불가하다. (dash 같은 java 기반 패키지 이용에 제한이 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 충분히 잘 구동되는 일반 PC환경에서는 제약도 적고 빠른 vscode, pycharm, spyder 같은 ide 를 사용하는 게 가장 좋다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU가 없는 환경에서 &lt;u&gt;GPU 사용이 필요하거나,&lt;/u&gt;&amp;nbsp;장소를 옮겨가며 &lt;u&gt;여러 컴퓨터에서 코딩 작업&lt;/u&gt;을 하는 경우에 colab을 추천한다.&lt;/p&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;u&gt;&lt;b&gt;GPU 제공 하나만으로도 엄청난 장점이다.&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 GPU가 있어도 환경맞추기가 까다로운데 (초기에는 맞춰놓겠지. 하지만 업그레이드는 안한다. 나만 그런가?ㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;텐서플로우와 파이토치 최신버전에서 GPU 구동이 가능하도록 알아서 세팅을 해준다는 건 정말정말 큰 장점이다.&lt;/b&gt;&lt;/u&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[ colab default 설정값&amp;nbsp;]&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 버전은 3.7에 맞춰져 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1662468568518&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!python --version
# Python 3.7.13&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;기본으로 설치되어있는 package 들은 너무 많은데 이 중에서 주요한 패키지만 살펴보겠다.&lt;/p&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;letter-spacing: 0px;&quot;&gt;먼저 matplotlib 은 현 최신버전이 3.5 인데 3.2가 들어있고 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;xgboost 는 지금 최신버전이 1.6 인데 0.9 버전이 들어있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;물론 업그레이드 가능하지만 귀찮으니까.. 아마 호환 때문에 일부러 낮은 버전으로 해둔거겠지? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;tensorflow 최신버전 2.8(현재 최신버전은 2.9지만...)이 가능하다는 게 신기하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;컴퓨터 여러대로 환경 맞춰봤을 때 2.5까지가 사용할 수 있는 가장 높은 버전이었는데...!&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1662468934487&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Package                       Version
----------------------------- ----------------------------
bs4                           0.0.1
Cython                        0.29.32
gensim                        3.6.0
imbalanced-learn              0.8.1
keras                         2.8.0
lightgbm                      2.2.3
matplotlib                    3.2.2
numba                         0.56.0
numpy                         1.21.6
pandas                        1.3.5
plotly                        5.5.0
scikit-learn                  1.0.2
scipy                         1.7.3
seaborn                       0.11.2
tensorflow                    2.8.2+zzzcolab20220719082949
torch                         1.12.1+cu113
xgboost                       0.90&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;package 업그레이드 하는 방법은 터미널에서 하는 그대로 &amp;nbsp;--upgrade &amp;nbsp;시켜주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1662470296462&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!pip install --upgrade xgboost #최신
!pip install --upgrade xgboost==1.6.1 #버전지정&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[ colab 에서 파이썬 버전 변경하는 방법 ]&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1662475093084&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
!tar xvfz Python-3.8.12.tgz
!Python-3.8.12/configure
!make
!sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 꽤 소요된다. 5분 정도 뒤에 확인하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1662472432696&quot; class=&quot;ada&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!python --version&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[ 코랩에서 GPU 사용하기 ]&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU 가 제공되기는 하지만 비싸고 한정된 자원이니 구글도 막 퍼주진 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default 설정은 GPU 는 미사용이고&amp;nbsp;GPU 를 사용하기 위해서 &lt;u&gt;&lt;b&gt;런타임 &amp;gt; 런타임 유형변경 &amp;gt; 하드웨어 가속기 &amp;gt; GPU&lt;/b&gt;&lt;/u&gt; 로 변경해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU를 한 개 세션에서만 사용할 수 있어서 노트북 두 개 열어놓고 둘 다 GPU 사용하는 건 안된다.&amp;nbsp;(무료 버전 기준)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 22.31.45.png&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r6Dli/btrLzDY3Z3W/fZX1bmuhk4Sd54eIoqRePk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r6Dli/btrLzDY3Z3W/fZX1bmuhk4Sd54eIoqRePk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r6Dli/btrLzDY3Z3W/fZX1bmuhk4Sd54eIoqRePk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr6Dli%2FbtrLzDY3Z3W%2FfZX1bmuhk4Sd54eIoqRePk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;260&quot; data-filename=&quot;스크린샷 2022-09-06 22.31.45.png&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;664&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;그리고 GPU 가 제대로 할당되었는지 확인하기 위해 아래와 같이 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1662471362571&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!nvidia-smi&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;입력하면 아래와 같이 할당된 GPU 가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tesla T4가 배정되었다. GPU는 랜덤으로 배정된다는데 난 왜 돌릴 때마다 Tesla T4 인지 모르겠네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tesla T4 앞에는 GPU number 다. GPU 가 여러개인 경우 0,1,2 이렇게 뜨고 어떤거 사용할지 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(근데 여러개였던 적이 없어서 안해봄.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 22.45.54.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcCsdN/btrLx2Fg0g9/7RHQZQb4K2Gm0uy3nWz5c1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcCsdN/btrLx2Fg0g9/7RHQZQb4K2Gm0uy3nWz5c1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcCsdN/btrLx2Fg0g9/7RHQZQb4K2Gm0uy3nWz5c1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcCsdN%2FbtrLx2Fg0g9%2F7RHQZQb4K2Gm0uy3nWz5c1%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;627&quot; height=&quot;334&quot; data-filename=&quot;스크린샷 2022-09-06 22.45.54.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[ colab 유료서비스 ]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 무료버전과 pro, pro+ 의 두 가지 유료버전으로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- pro는 9.99달러/월 (현재 환율로는 만사천원ㅠㅠ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- pro+는 49.99달러/월 (7만원 가까이...).&lt;/p&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;pro 에 더 좋은 사양의 GPU에 할당되고 좀 더 오래 사용할 수 있으며 런타임유형에서 RAM도 2배로 늘리는 옵션 선택이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pro+는 백그라운드에서도 돌아간다는 특장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강사들은 많이 쓰는 것 같은데 pro+ 쓰시는 분은 못본 듯.&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;h3 data-ke-size=&quot;size23&quot;&gt;[ 단축키 ]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 jupyter notebook 하고 단축키가 달라서 안 먹길래 그냥 마우스로 요리조리 움직였다가 불편해서 정리해둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥에서는 ctrl 대신 cmd 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 윗줄에 셀삽입 : ctrl + m + a&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아랫줄에 셀삽입 : ctrl + m + b&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;(사실 여기까지는 그냥 esc + a, b 하면 jupyter notebook 과 동일하게 작동된다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 삭제 : ctrl + m + d&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; (삭제는 dd &amp;nbsp;를 아무리 눌러봐도 안됐다. ctrl + m 이 꼭 필요하다)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드셀로 변경 : ctrl + m + y&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마크다운셀로 변경 : ctrl + m + m&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실행취소 : ctrl + m + z&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실행 : ctrl + enter / shift + enter&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[ 변수 확인하기 ]&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 탭에 변수{x}를 클릭하면 어떤 변수가 있는지 속성이 뭔지 값은 뭐가 있는지 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(spyder의 variable explorer 는 다른 ide 를 찾아볼수록 사기다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-07 00.09.24.png&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xmvk9/btrLx17tuo7/bMHHFm2g6x2WRP4u7odsz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xmvk9/btrLx17tuo7/bMHHFm2g6x2WRP4u7odsz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xmvk9/btrLx17tuo7/bMHHFm2g6x2WRP4u7odsz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxmvk9%2FbtrLx17tuo7%2FbMHHFm2g6x2WRP4u7odsz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;414&quot; height=&quot;560&quot; data-filename=&quot;스크린샷 2022-09-07 00.09.24.png&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[ 함수에서 Docstring 보는 방법 ]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;도구 &amp;gt; 설정 &amp;gt; 코드 완성 제안을 자동으로 표시를 해제&lt;/u&gt; 후 함수에서 shift + tab&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수에서 하이퍼파라미터 옵션들이 뭐가 있는지 디폴트 값은 어떻게 설정되어있는지 확인할 때 docstring을 보는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;colab 에서는 먼저 설정에가서 저 옵션을 체크해제해줘야 shift + tab 으로 작동된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해제없이도 가끔 그냥 되기도 하던데 그건 뭘 눌렀을 때 작동되는지는 정확히 모르겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속 편하게 설정 변경하고 shift + tab 사용!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 23.45.30.png&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YW9Pb/btrLy251zYK/TSDBnwHjJHcDJ1ZrhBqRU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YW9Pb/btrLy251zYK/TSDBnwHjJHcDJ1ZrhBqRU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YW9Pb/btrLy251zYK/TSDBnwHjJHcDJ1ZrhBqRU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYW9Pb%2FbtrLy251zYK%2FTSDBnwHjJHcDJ1ZrhBqRU1%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;438&quot; height=&quot;325&quot; data-filename=&quot;스크린샷 2022-09-06 23.45.30.png&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;970&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 23.49.59.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDM80/btrLAzWlnab/SILKMUVpk7aeOH14p8hNd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDM80/btrLAzWlnab/SILKMUVpk7aeOH14p8hNd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDM80/btrLAzWlnab/SILKMUVpk7aeOH14p8hNd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDM80%2FbtrLAzWlnab%2FSILKMUVpk7aeOH14p8hNd0%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;431&quot; height=&quot;227&quot; data-filename=&quot;스크린샷 2022-09-06 23.49.59.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;gt; 설정 &amp;gt; 기타 &amp;gt; 코기 모드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 23.46.38.png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKjbEy/btrLu9d9eyo/EV8Su11qX1ywQbcAV5BcX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKjbEy/btrLu9d9eyo/EV8Su11qX1ywQbcAV5BcX1/img.png&quot; data-alt=&quot;웰시코기 몇마리가 걸어다닌다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKjbEy/btrLu9d9eyo/EV8Su11qX1ywQbcAV5BcX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKjbEy%2FbtrLu9d9eyo%2FEV8Su11qX1ywQbcAV5BcX1%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;368&quot; height=&quot;85&quot; data-filename=&quot;스크린샷 2022-09-06 23.46.38.png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웰시코기 몇마리가 걸어다닌다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 23.46.09.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbcBQt/btrLwzQOQHC/TSe6kGhuoM6h5tEiqQtoM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbcBQt/btrLwzQOQHC/TSe6kGhuoM6h5tEiqQtoM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbcBQt/btrLwzQOQHC/TSe6kGhuoM6h5tEiqQtoM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbcBQt%2FbtrLwzQOQHC%2FTSe6kGhuoM6h5tEiqQtoM0%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;372&quot; height=&quot;294&quot; data-filename=&quot;스크린샷 2022-09-06 23.46.09.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;662&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>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/59</guid>
      <comments>https://sthsb.tistory.com/59#entry59comment</comments>
      <pubDate>Wed, 7 Sep 2022 00:11:21 +0900</pubDate>
    </item>
    <item>
      <title>Python 가상환경 만들기</title>
      <link>https://sthsb.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt;1. 가상환경이 필요한 이유&lt;/b&gt; : 프로젝트별로 다른 버전의 패키지들이 필요하기 때문.&lt;br&gt; &lt;br&gt; Python 으로 코딩하다보면 버전이 안 맞는 경우가 생긴다.&lt;br&gt; 이 패키지를 쓰려면 저 패키지의 버전을 낮춰야하고 근데 나는 다른 프로젝트에서 저 패키지의 높은 버전이 필요하고..&lt;br&gt; 그렇게 버전을 올리고 내리고 하다가 환경설정이 다 망가지고 파이썬 다 지우고 새로 설치해야하는 경우가 생긴다. (꽤 많이!) &lt;br&gt; &lt;br&gt; 패키지가 아니라 파이썬 버전이 안 맞는 경우도 있다.&lt;br&gt; 대표적으로 python 3.8까지만 지원하는 Pycaret 이 그렇다. &lt;br&gt; 또 gpu 에 따라 tensorflow 설치 시 Python 환경이 달라지는데 이 때도 필요하다. &lt;br&gt; &lt;br&gt; 또 하나 더. pyinstaller 나 cx_freeze 로 exe 파일 만들 때 필요없는 패키지들까지 같이 묶이게 되는데 필요한 패키지들만&lt;br&gt; 가상환경에 설치해서 exe 로 만들면 용량이 훨씬 줄어든다.&lt;br&gt; &lt;br&gt; 어쨌든 프로젝트를 여러개 하는 사람이라면 가상환경을 이용하는 버릇을 들여야 한다!&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt;2. 가상환경 생성 방법&lt;/b&gt;&lt;br&gt; &lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 1) venv 사용 : 내장 python interpreter 를 바탕으로 여러 환경 구성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; venv 는 파이썬3 에서 기본으로 가상환경 만들라고 제공하는 패키지다. &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;b&gt;[ 가상환경 만들기 ]&lt;/b&gt;&lt;br&gt; &lt;br&gt; 방법은 Mac, Win 다 동일하다.&lt;br&gt; terminal 창에서 아래와 같이 입력해주면 가상환경이 만들어진다. &lt;br&gt; ./venv 는 가상환경 다른 거 새로 만들 때 수정하면 된다. &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;python3 -m venv --system-site-packages ./(가상환경이름)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; python3 -m venv : 가상환경을 만들어라&lt;br&gt; --system-site-packages : 시스템에 기본으로 깔려있는 package 들과 함께&lt;br&gt; ./(가상환경이름) : 이 폴더 안에.&lt;br&gt; &lt;br&gt; 위치를 지정하려면 터미널에서 cd (directory 주소) 로 들어가서 위 문구를 입력한다.&lt;br&gt; 나는 기본 패키지들 처음부터 깔고 싶어서 python -m venv ./venv 로만 입력했다. &lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt; [ 가상환경 활성화 하기 ] &lt;/b&gt;&lt;br&gt; &lt;br&gt; 터미널에서 가상환경을 설치한 경로에 cd 로 들어가서 아래와 같이 입력한다.&lt;br&gt; Default 경로에 가상환경 생성했으면 cd (directory) 는 생략해도 된다.&lt;br&gt; &lt;br&gt; (mac)&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;source (가상환경 이름)/bin/activate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; (win)&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;(가상환경이름)\Scripts\activate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 그럼 아래와 같이 터미널창의 (base) 가 (가상환경 이름) 으로 변경될 것이다. (Mac) &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;(base) (가상환경 주소) % source (가상환경 주소)/bin/activate
(가상환경 이름) (base) (가상환경 주소) %&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; Windows 는 (base) 가 원래 없어서 앞에 (가상환경 이름) 만 붙는다.&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt; [ 가상 환경에서 pip install ] &lt;/b&gt;&lt;br&gt; &lt;br&gt; 생성된 가상환경에서 아무것도 설치안하면 이렇게 뜬다. &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pip list

Package&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Version
---------- -------
pip&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;19.2.3 
setuptools 41.2.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 만약에 가상환경 생성 시 --system-site-packages 를 포함한다면?&lt;br&gt; 기존 파이썬에 깔렸던거 다 나온다... 너무 많아서 생략. &lt;br&gt; &lt;br&gt; 가상환경을 여러개 만들어서 사용할 거라면 자주 사용하는 패키지들을 메모장에 넣어두고&lt;br&gt; 아래와 같이 입력하면 깔끔하게 기본 패키지들을 설치할 수 있다. &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; requirements.txt 파일은 터미널/커맨드 창에서 이렇게 생성하고 필요없는걸 지우면 된다.&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;난 requirements.txt 에 그냥 요렇게만 반영해뒀다.&lt;br&gt; &lt;br&gt;pandas&lt;br&gt;seaborn&lt;br&gt;matplotlib&lt;br&gt;numpy&lt;br&gt;psutil&lt;br&gt;scipy&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt; [ 가상 환경 종료 방법 ] &lt;/b&gt;&lt;br&gt; &lt;br&gt; (mac) 터미널 창에서 deactivate 를 입력한다.&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;deactivate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; (win) 커맨드창에서 가상환경&amp;gt;Scripts 폴더 내 deactivate.bat 파일을 실행한다.&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;(가상환경 주소)/Scripts/deactivate.bat&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt; [ 가상 환경 삭제 ]&lt;/b&gt;&lt;br&gt; &lt;br&gt; 사실 명령어 말고 그냥 경로로 가서 해당 가상환경 이름 파일 전체 삭제하면 된다. &lt;br&gt; &lt;br&gt; (mac) &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;sudo rm -rf 가상환경이름&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; (window)&lt;br&gt; 이상하게 conda 말고 파이썬 명령어로된 remove는 찾을 수가 없다.&lt;br&gt; 콘다는 요즘 안쓰는 추세라든데...&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;conda remove -name 가상환경명 --all&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; &lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 2) pipenv / pyenv : python 버전까지 변경이 필요한 경우 &lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 사실 인터넷에 찾아보면 pyenv 에 대한 정보가 더 많다. 근데 파이썬에서 pipenv 를 공식적으로 권장한다고 해서&lt;br&gt; (&lt;a href=&quot;https://packaging.python.org/en/latest/guides/tool-recommendations/&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://packaging.python.org/en/latest/guides/tool-recommendations/&lt;/span&gt;&lt;/a&gt;&lt;br&gt; 실제로 22년 이후 포스팅들은 pipenv 에 대한 내용이 더 많다. )&lt;br&gt; pipenv 로 가상환경 만드는 법을 소개하려고 한다.&lt;br&gt; &lt;br&gt;&lt;b&gt;[ pipenv 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pip install pipenv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt;[ pyenv 설치 ]&lt;/b&gt;&lt;br&gt; &lt;br&gt;(mac)&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;brew install pyenv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;사용할 파이썬 버전을 설치하기 위해서 pyenv 가 필요하다.&lt;br&gt;이거로 설치 없이 그냥 pipenv 에서 파이썬 버전별 가상환경을 만들 수는 없다&lt;br&gt;(근데 이럴 거면 뭐하러 pipenv 를 쓰라는 건지 모르겠다. 어차피 pyenv 설치해야하는데...) &lt;br&gt; &lt;br&gt;(win)&lt;br&gt;&lt;a href=&quot;https://github.com/pyenv-win/pyenv-win&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://github.com/pyenv-win/pyenv-win&lt;/span&gt;&lt;/a&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt;[ 설치할 수 있는 python version 확인 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pyenv install --list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt;[ 원하는 python version 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pyenv install 3.7.3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;사실 3.7.3 install 을 여러번 설치했는데 에러나서 3.9.1 을 설치해봤더니 된다.. 뭐지..&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt;[ 가상환경 생성 가능한 파이썬 버전 확인 ] &lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pyenv versions&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;원하는 python version 이 없으면 위의 pyenv install 로 설치해준다.&lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;b&gt;[ 가상환경 생성 ]&lt;/b&gt;&lt;br&gt; &lt;br&gt;터미널에서 가상환경 만들 디렉토리에 들어간다.&lt;br&gt;cd (가상환경 디렉토리)&lt;br&gt;그 다음 원하는 python 버전을 입력해준다. &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv --python 3.x&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;여기서 만약 에러가 나면 pipenv --rm 을 해주고 그래도 에러가 나면 터미널 실행 경로에 pipfile 을 모두 삭제해주고 다시 해본다. &lt;br&gt; &lt;br&gt; &lt;br&gt;설치할 때 pipfile 사용해서 package 설치하라고 나오는데 pipfile 은 앞에서 venv 에서 봤던 requirements.txt 와 동일한 기능이다.&lt;br&gt;requirements.txt 만 있어도 알아서 pipfile 로 변환하여 설치해주긴 한다.&lt;br&gt; &lt;br&gt;pipenv 환경에서는 공통으로 설치할 패키지는 pipenv install 로 설치하는데,&lt;br&gt;설치하고나서 pipfile 파일을 확인하면 해당 패키지가 업데이트되어있다.&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv install pandas&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt;[ 가상 환경 실행 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv shell&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;python 버전 확인&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv run python --version
# 또는
python --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;설치된 패키지 목록 확인&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv graph&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;가상환경 위치 확인&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv --venv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;가상환경 파이썬 인터프리터 위치 확인 &lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv&amp;nbsp;&amp;nbsp;--py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;이걸 알아야 vscode 에서 interpreter 설정이 가능하다.&lt;br&gt;난 users 폴더의 .local 파일 안에 있었는데 이 숨김 파일은 맥) &lt;span style=&quot;background-color: #F6E199;&quot;&gt;cmd + shift + .&lt;/span&gt; 으로 볼 수 있다.&lt;br&gt; &lt;br&gt; &lt;br&gt;기타 명령어 정보&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv -h&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt;[ 가상 환경 종료 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt;[ 가상 환경 삭제 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pipenv --rm&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; &lt;br&gt;이건 --user 환경 설치 및 환경 변수 설정 방법인데 windows ver 이기도 하고 귀찮아서 안했다. 참고로만 링크.&lt;br&gt;&lt;a href=&quot;https://hoohaha.tistory.com/92&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://hoohaha.tistory.com/92&lt;/span&gt;&lt;/a&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;어우 pipenv 를 사용한 가상환경 설정은 좀 복잡하다...&lt;br&gt;3.8 기준으로 venv 부터 잘 사용해봐야겠다. &lt;br&gt; &lt;br&gt; &lt;/p&gt;</description>
      <category>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/53</guid>
      <comments>https://sthsb.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 9 Aug 2022 23:36:23 +0900</pubDate>
    </item>
    <item>
      <title>Global memery usage 확인 방법 in Python</title>
      <link>https://sthsb.tistory.com/51</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;Spyder 사용 시에는 global memory 가 얼마나 사용되고 오른쪽 하단에 나와서 메모리 관리를 하면서 코딩할 수 있었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vscode, jupyter 사용 시에는 확인이 어렵다.&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;pre id=&quot;code_1660030090834&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def memory_usage():
    import psutil
    mem = psutil.virtual_memory()
    print(f&quot;memory using {mem.percent}%, {np.round( mem.available/2**30, 2) }GB left &quot;)
    
memory_usage()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재는 memory using 69.3%, 2.46GB left 라고 나온다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;psutil.vitual_mmeory() 에서 total 메모리도 확인 가능하다.&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/51</guid>
      <comments>https://sthsb.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 9 Aug 2022 16:32:04 +0900</pubDate>
    </item>
    <item>
      <title>CPU 코어 수 확인 파이썬 코드</title>
      <link>https://sthsb.tistory.com/50</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;CPU 코어수를 확인하고자 검색하면 보통 아래 세가지 코드가 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660028552297&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import multiprocessing
multiprocessing.cpu_count()&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1660028621821&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import psutil
psutil.cpu_count()&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1660028715002&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os
os.cpu_count()&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;근데 내 컴퓨터는 쿼드코어인데 자꾸 8 로 나와서 뭔가하고 찾아보니&amp;nbsp;core 가 아니라 thread 수라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어적인 거는 잘 모르긴한데 예전에 core 는 머리 thread 는 팔이라는 비유를 봤었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hypterthread 라고 해서 머리는 하나인데 팔은 2개인 처리 장치(인텔꺼는 대부분 그렇단다)로 보면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660029058270&quot; class=&quot;clean&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import psutil
psutil.cpu_count(logical = False)&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;이렇게 입력하면 진짜 core 수가 나온다. 4개다.&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>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/50</guid>
      <comments>https://sthsb.tistory.com/50#entry50comment</comments>
      <pubDate>Tue, 9 Aug 2022 16:14:16 +0900</pubDate>
    </item>
    <item>
      <title>애드고시 통과 후기</title>
      <link>https://sthsb.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 오래걸릴 거라고는 전혀 생각도 못했고 지금 이 시점에 될 거란 것도 생각도 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 처음 아래 글을 쓰면서 한 달 뒤 애드고시 합격 후기를 쓰기를 바란다고 적었는데, 어느덧 6개월 시간이 흘렀다.&lt;/p&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://sthsb.tistory.com/1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://sthsb.tistory.com/1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655818966792&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;수익형 블로그 운영 방법&quot; data-og-description=&quot;새해 목표는 블로그로 용돈 벌기로 정했다. 그동안 계속 도전해보고 싶었는데 바쁘다, 주제를 못 정한다, 글재주가 없다, 생각보다 얼마 벌지 못할 거다 라는 핑계로 계속 미뤄왔었다. 이번엔 애&quot; data-og-host=&quot;sthsb.tistory.com&quot; data-og-source-url=&quot;https://sthsb.tistory.com/1&quot; data-og-url=&quot;https://sthsb.tistory.com/1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biyGUT/hyOQjCfR1G/dBQ0zDFoIiSr8EPWGDQbuK/img.png?width=750&amp;amp;height=250&amp;amp;face=0_0_750_250,https://scrap.kakaocdn.net/dn/nIb4o/hyOQvJr3P4/5nJGBkyhAhAeFlq5Ksc1k1/img.png?width=750&amp;amp;height=250&amp;amp;face=0_0_750_250,https://scrap.kakaocdn.net/dn/DlMc3/hyOQop1W2N/wioUh8jVGilyja3SzQw2ok/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://sthsb.tistory.com/1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sthsb.tistory.com/1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biyGUT/hyOQjCfR1G/dBQ0zDFoIiSr8EPWGDQbuK/img.png?width=750&amp;amp;height=250&amp;amp;face=0_0_750_250,https://scrap.kakaocdn.net/dn/nIb4o/hyOQvJr3P4/5nJGBkyhAhAeFlq5Ksc1k1/img.png?width=750&amp;amp;height=250&amp;amp;face=0_0_750_250,https://scrap.kakaocdn.net/dn/DlMc3/hyOQop1W2N/wioUh8jVGilyja3SzQw2ok/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;수익형 블로그 운영 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;새해 목표는 블로그로 용돈 벌기로 정했다. 그동안 계속 도전해보고 싶었는데 바쁘다, 주제를 못 정한다, 글재주가 없다, 생각보다 얼마 벌지 못할 거다 라는 핑계로 계속 미뤄왔었다. 이번엔 애&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sthsb.tistory.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;나름 포스팅을 꼬박꼬박하려고 했는데 번번히 떨어졌고,&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;그러다가 최근 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;사실 3개월 동안 비공개로 작성해둔 글은 있었지만 이걸 마무리하려면 또 시간이 오래 걸리기 때문에 기록용으로만 남겨두었다.&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월 1번 2월 1번 3월 1번 4월은 그냥 게시글 업데이트 안해도 떨어질 때마다 계속 재검토 요청했다 그렇게 4월에 3번 떨어져서 총 6번을 떨어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이번달(6월)에 아무 기대없이 광고 신청하기 버튼을 습관처럼 눌렀는데 이런 말도 안되는 결과가!&lt;/p&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;애드센스 승인이 나서 제일 좋은 거는 글을 자유롭게 쓸 수 있다는 것!&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;좀 더 자유로운 형식, 말투로 쓸 수 있다는 것도 좋은데 원래 내 말투가 경직돼 있어서 큰 차이는 없을 것 같다.&lt;/p&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;그냥 승인만 났다고 해서 바로 광고가 안뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;블로그 관리 &amp;gt; 수익 &amp;gt; 애드센스 관리 &amp;gt; 맨 밑에 광고설정 &amp;gt; 회색처리 되어있는 오른쪽 버튼 여러개를 클릭해서 활성화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 반응형으로 두지말고 &amp;nbsp;PC 는 728x90, 모바일은 300x250 으로 해줘야 잘 뜬다고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 PC에서는 애드센스 광고가 안뜨고 로고만 뜨는 문제가 있는데 이건 좀 다시 알아봐야겠다.&lt;/p&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;4월에 검토 요청했을 때랑 6월에 검토 요청했을 때 내가 아는 차이점은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 포스팅 1개 추가 - 엄청난 포스팅이 아니니까 주요 요건은 아닌 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 방문자 수 증가 - &lt;b&gt;최근에 총 방문자수 1000명이 넘었고 꾸준히 유입되는 게시글이 증가했다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4월에 조회수가 늘기 전에 포스팅 내용만 가지고 봤을 때 별 거 없어서 반려놨는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6월께는 조회수가 많아지면서 이 블로그가 내실이 있다고 판단했다고 해석하면 될까?&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 아니면 랜덤인가?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통과한 사람들 대부분 본인의 경험만 토대로 말할 뿐 정확히 기준을 제시를 못하는 것 같은데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패스를 해도 애드고시 통과 기준은 여전히 미궁인 거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 생각하는 key 는 두드려라 다. 검토 요청 꾸준히 누르시길!&lt;/p&gt;</description>
      <category>정보</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/44</guid>
      <comments>https://sthsb.tistory.com/44#entry44comment</comments>
      <pubDate>Tue, 21 Jun 2022 23:04:04 +0900</pubDate>
    </item>
    <item>
      <title>다시 jupyter 로...</title>
      <link>https://sthsb.tistory.com/41</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;1. 다시 Jupyter 으로..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 내가 지금까지 주로 사용하고 있는 Spyder 의 장점!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1) Variables 를 확인하기 매우 편하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - Variable Explorer 에서 list, array, dataframe 등을 클릭해서 한번에 보기 좋다. 너무 크지만 않으면 금방 뜬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2) 이미지를 복사해서 붙여넣기 편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 캡쳐하거나 save 할 필요없이 Plot Tab에서 복사하면 엑셀이든 어디든 바로 붙여넣기 좋다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;3) 한 번에 긴 코드를 짜기 좋다 (이건 jupyter notebook 제외한 다른 ide 공통)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;단점! Variables 를 보는데 에러가 자주 발생한다!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가장 큰 강점이 Variables 보는 건데 이걸 못보게되니까 정말 쓰기 싫어지더라.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그리고 가끔 변수나 이미지가 많아지면 느려져서 답답할 때도 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다시 Jupyter로 돌아갔다. &amp;nbsp;Jupyter Notebook보다 조금 더 사용하기 편한 Jupyter Lab 으로!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spyder 보다 안정적이어서 돌아간거지만 장점이 많다.&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 기준으로 tutorial 이 작성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 가끔 Spyder Pycharm Vscode 같은 IDE 에서는 패키지들이 가지고 있는 기능들을 다 적용해보지 못할 때가 있다.&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;두번째 장점으로는 나만 그럴 수 있지만 코드를 간결하게 쓰게 된다.&lt;/p&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;2. 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1655385015583&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!pip install jupyterlab&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;command 창에서 jupyter lab 이라고 치면 실행된다.&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;DataFrame 의 컬럼이 몇개 안되는 경우 다 나오긴하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 빅데이터를 다룰 때에는 Columns, Rows 너무 많아서 다 안보이는 경우가 많다.&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;Jupyter 에서 DataFrame 전체를 확인하는 방법은 두가지가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1) Jupyter Lab Variable Inspector 확장 툴 설치&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2) pd.set_option 을 활용해서 전체 Columns, Rows 보기.&lt;/p&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 lab variable inspector 는 변수 확인을 용이하게 해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1655387003661&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!pip install lckr-jupyterlab-variableinspector&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹은 아래 캡쳐의 퍼즐같은 아이콘 클릭하고 variableinspector 검색 후 인스톨해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀에서 우클릭 후 open variable inspector 클릭하면 탭이 새로 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-06-16 22.52.23.png&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;1454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/95wV1/btrE0qdDwHh/qonHlphKiAKDK0mkGNZwh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/95wV1/btrE0qdDwHh/qonHlphKiAKDK0mkGNZwh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/95wV1/btrE0qdDwHh/qonHlphKiAKDK0mkGNZwh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F95wV1%2FbtrE0qdDwHh%2FqonHlphKiAKDK0mkGNZwh1%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;1812&quot; height=&quot;1454&quot; data-filename=&quot;스크린샷 2022-06-16 22.52.23.png&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;1454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게 아래서 variable 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-06-16 22.55.56.png&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdLET1/btrEZbBrbq4/pDgysoJ5TK9IFX1rQ2OZr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdLET1/btrEZbBrbq4/pDgysoJ5TK9IFX1rQ2OZr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdLET1/btrEZbBrbq4/pDgysoJ5TK9IFX1rQ2OZr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdLET1%2FbtrEZbBrbq4%2FpDgysoJ5TK9IFX1rQ2OZr1%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;1854&quot; height=&quot;264&quot; data-filename=&quot;스크린샷 2022-06-16 22.55.56.png&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돋보기 클릭하면 DataFrame 도 확인할 수 있다.&lt;/p&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_1655388535136&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇개 볼지 숫자 정하려면 None 안에 개수 입력한다.&lt;/p&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. Enable Scrolling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀별로 실행하다보면 너무 결과셀이 길어지는 경우가 있다. 그럴 땐 결과셀 우클릭 후 Enable Scrolling for Outputs 를 클릭한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 Ctrl + A &amp;nbsp;&amp;gt; 우클릭 &amp;gt; Enable Scrolling for Outputs 하면 전체 결과 셀을 줄일 수 있다.&lt;/p&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. ipynb to py&lt;/p&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 에서는 작성한 코드가 ipynb 로 저장되는데 module 화 해서 끌어다 쓸 때는 py 로 변환해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1655389801626&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!pip install nbconvert
!jupyter nbconvert --to script abc.ipynb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 abc 대신에 filename 으로 바꾼다.&lt;/p&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;jupyter input 창에서 입력해도 되고, terminal 창에서 입력해도 변환 가능하다.&lt;/p&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;</description>
      <category>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/41</guid>
      <comments>https://sthsb.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 16 Jun 2022 23:33:21 +0900</pubDate>
    </item>
    <item>
      <title>shap 이론</title>
      <link>https://sthsb.tistory.com/23</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;XAI 는 eXplainable AI 의 약자로, 결과가 짠하고 나오기만 하고 그 과정을 알아내기가 어려운(이걸 Blackbox 라고 표현한다) AI 모델을 해석해주는 알고리즘이라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 현재까지 이해한 걸로는 feature importance 의 complex 하고 심화된 버전이라고 생각되고 아직까지는 feature importance / coefficient 가 더 직관적이고 단순해서 이해하기 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;XAI 알고리즘 중에서 가장 유명한 건 Shap 이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAP 은 SHapley Additive exPlanation 의 약자로 Game Theory 에 기초한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Game Theory 는 영화 뷰티풀 마인드에 나온 유명한 아저씨인 존 내쉬가 이 이론을 바탕으로 Nash Equilibrium 을 탄생시킨 걸로도 잘 알려져있다. 존 내쉬 이전, 천재 중의 천재라고 불리는 폰 노이만 아저씨가 발견한 내용이다.&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;Game Theory 를 간략하게 요약하면, &lt;u&gt;&lt;b&gt;상호의존적인 의사결정&lt;/b&gt;&lt;/u&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 다른 공간에 죄수 A와 B를 가둬놓고 회유한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A야, 말 안하면 감옥 1년인데 지금 자백하면 다 용서해주고 B만 10년 보낼게.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 B가 자백하면 너는 감옥 10년행이야. 둘다 자백하면 각각 5년씩.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 35.348837209302324%; height: 106px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;A deny&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;A confess&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;B deny&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;둘 다 1년&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;A:석방&lt;br /&gt;B:10년&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;B confess&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;A:10년&lt;br /&gt;B:석방&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; text-align: center;&quot;&gt;둘 다 5년&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;이 때 최선의 선택은 둘다 침묵하고 자백하지 않는 것이지만 B와의 소통이 단절된 A는 고민한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 내가 말 안한다고 했을 때, B가 날 배신하면 10년이고, 배신하지 않으면 1년이네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 말 한다고 했을 때, B가 날 배신하면 5년이고, 배신하지 않으면 석방이군.&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;B도 같은 생각으로 자백하고 결론은 둘 다 5년 수감된다.&lt;/p&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;shap 의 관점에서 예시를 들어보자.&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;A,B,C,D 학생이 시험을 봤는데 100점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 시험은 B,C,D 학생만 시험을 봤고 점수는 20점,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 시험은 A,C,D 학생 : 80점, A,B,C : 99점, A,B,D : 70점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 main feature 는 참가 여부에 따라 점수가 80점이나 달라지는 A 이다.&lt;/p&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명이서만 시험을 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A와 B만 시험을 봤는데 90점이 나오고, A와 C만 시험을 보면 50점이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A의 영향력이 80인줄 알았는데 C만 보면 스트레스받는건지 80이 안나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 시험에 대한 A의 진짜 영향력은 얼마라고 할 수 있을까?&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;[ Reference Table ]&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.30232558139535%; height: 162px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;35&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;변수 3가지 X1, X2, X3 가 있고 변수 포함여부에 따라 예측값을 정리한 테이블이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 X1의 shapley value 를 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X1 단독의 기여도를 보기 위해서 X2, X3 의 존재 여부가 같고 X1 의 포함여부만 다른 Case를 비교하여 Pred 값의 차를 알아본다.&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;[X1 (under X2 x X3 x) ] : &amp;nbsp;Case2 - Case1 = 32 - 28 = 4&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.06976744186046%; height: 78px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&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;[X1 (under X2 o, X3 x) ] : Case5 - Case3 = 32 - 32 = 1&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.18604651162791%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&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;[X1 (under X2 x, X3 o) ] : Case6 - Case4 = 33 - 30 = 3&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.418604651162795%; height: 94px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;33&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;[X1 (under X2 o, X3 o) ] : Case8 - Case7 = 35 - 32 = 3&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.418604651162795%; height: 94px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;35&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;여기서 prediction 값의 차이를 그냥 사용하는 게 아니라 변수가 사용될 확률을 곱해준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째로 살펴봤던 Case2 에서는 X1만 사용되었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;b&gt;변수가 1개만 사용&lt;/b&gt;되는 경우는 총 Case2,3,4 총 3가지 케이스다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;b&gt;1/3 의 가중치를 곱해준다.&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;[X1 (under X2 x X3 x) ] : &amp;nbsp;Case2 - Case1 = 4&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.30232558139535%; height: 162px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;32&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;31&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;30&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;4 * 1/3&amp;nbsp;&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;변수가 2개 사용되는 경우는 &amp;nbsp;X1,X2 &amp;nbsp; X1,X3 &amp;nbsp; X2,X3 &amp;nbsp;이렇게 3가지다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 X1,X2 가 사용된 Case5와 Case3을 비교해보자.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.18604651162791%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 케이스로 X1만 있는 Case2, X2만 있는 Case3 까지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 묶음(X1,X2 &amp;nbsp; X1,X3 &amp;nbsp; X2,X3) 에 대하여 2가지 경우가 더 생긴다. -&amp;gt; 총 6가지 경우고, 가중치는 1/6 이 된다.&lt;/p&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가지일 때의 비교값 이므로 둘다 1/6의 가중치를 곱해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[X1 (under X2 o, X3 x) ] : Case5 - Case3 = 1&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.18604651162791%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;X1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;32&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;[X1 (under X2 x, X3 o) ] : Case6 - Case4 = 3&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.418604651162795%; height: 94px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;33&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;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;(1+3) * 1/6&amp;nbsp;&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;변수 3개를 사용하는 경우는 심플하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Case 8과 같이 1가지 케이스이고, 거기서 2가지 변수가 있는 3가지 경우(X1,X2 &amp;nbsp; X1,X3 &amp;nbsp; X2,X3)까지 고려하면 가중치는 1/3이다.&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;[X1 (under X2 o, X3 o) ] : Case6 - Case4 = 3&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.418604651162795%; height: 94px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Case&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;X1&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;X2&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;X3&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;Pred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6740057795514%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 18.325994220448607%; height: 18px; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 18px; text-align: center;&quot;&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;3* 1/3&amp;nbsp;&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;이제까지 계산한 변수 개수에 따른 경우들의 shapley value 를 합산하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4 * 1/3 + &lt;b&gt;(1+3) * 1/6 + &lt;b&gt;3* 1/3 &amp;nbsp;= 3&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;즉, X1 의 Shapley value 는 3이다.&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;같은 방식으로 X2 의 shapely value 를 구하면 2 이고, X3 의 shapely value 도 2로,&amp;nbsp;X1 의 기여도가 가장 높다고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 재밌는 점은 모든 shapely value의 합은 max pred(case8, 35) - min pred(case1, 28) = 7 이라는 것이다.&lt;/p&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;위에서 설명한 예시는 변수의 유무 기준으로만 단순하게 나타낸 것인데 모든 데이터가 one hot encoding 되었을 때에만 저런 케이스가 적용될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 주로 사용하는 데이터는 연속형 숫자 데이터 혹은 ordinal 값이 feature로 사용되기 때문에 실제 shapley value 는 어떻게 계산하는지 궁금했다. (그리고 많은 shap graph 들을 보면 feature 별로 shapley value 값이 1개가 아니라 여러 range 에 걸쳐 분포해있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 X1 이 a,b,c 이라는 데이터를 가지고 있고, X2 가 d,e,f 의 값을 가지고 있다고 하자. (a~f 는 numeric 가정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X1의 a value 에 대해서 기여도를 계산하려면 아래와 같은 수식을 참고하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;f(X1 =a, X2 = mean(d,e,f)) - f(X1 = mean(a,b,c), X2= mean(d,e,f))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 개별 data 수가 늘어나고, 변수가 늘어나는 만큼 value 값은 더 많아 지고 복잡해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 shap value 를 파이썬에서 계산해보면 X shape 그대로 나온다. 즉 각 변수별 데이터 별로(column별로 row별로 개별데이터값 하나하나) 계산한다는 의미고, 그렇기 때문에 계산량이 많아 데이터셋이 큰 경우는 메모리를 많이 잡아먹어서 계산을 못하는 경우도 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 feature 에 해당하는 shap value 가 data 개수만큼 있기 때문에 shap의&amp;nbsp;bar plot에서는 mean(⎜shap values⎜) 로 수치를 단순화해서 나타내준다.&lt;/p&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;내가 많이 사용해본건 아니지만 y 값이 0,1 로 구성된 binary classication 에서 shap dependence plot 을 그려보면 -1이 넘거나 1이 넘는 shapley value 들이 있었다. &amp;nbsp;y max 값이 1인데 이게 어떻게 가능한 거지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 구글링 해보니 나랑 똑같은 질문을 slundberg 에 물어본 사람이 있었고, xgb 에서 prediction 하는 값이 logit 값이기 때문이라고 했다. (xgb 이외에 다른 알고리즘에 대해서는 shap 적용을 안해봐서 다른 알고리즘은 y값을 뭘로 뱉어내는지 모르겠다.)&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;모든 분류 알고리즘의 기본인 logistic regression의 기본 개념인 logit 을 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;odds = p/(1-p) &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;※ p는 확률로 0~1 사이의 값을 가진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logit = log(odds) =&amp;nbsp;log p/(1-p)&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;odds 는 0~1 사이의 값을 가지며 logit 은 -inf, inf 의 값을 가지게 되니 logit 변환한 값이라면 당연히 기존 y range 를 초과하는 값이 나올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 xgb 는 왜 logit 으로 출력할까? 이거는 다음에 알아보도록하고 shap 은 여기서 이론을 마친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 shap을 다룰 때에는 코드로 실습해보겠다.&lt;/p&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>코딩</category>
      <author>포숑</author>
      <guid isPermaLink="true">https://sthsb.tistory.com/23</guid>
      <comments>https://sthsb.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 29 Mar 2022 23:43:12 +0900</pubDate>
    </item>
  </channel>
</rss>