<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>차밍이</title>
    <link>https://chancoding.tistory.com/</link>
    <description>코딩과 금융, 데이터 사이언스를 향한 도전을 시작합니다.
데이터 사이언스를 공부하면서 배운 내용들을 함께 공유해요.
파이썬, R 코딩 Kaggle, 알고리즘 등을 진행하고있습니다.</description>
    <language>ko</language>
    <pubDate>Thu, 27 Aug 2026 08:37:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>커딩왕</managingEditor>
    <image>
      <title>차밍이</title>
      <url>https://tistory1.daumcdn.net/tistory/3559906/attach/1dc8cc86a6f04718b0bba8f2036e73bf</url>
      <link>https://chancoding.tistory.com</link>
    </image>
    <item>
      <title>Python - CPU Core 수 확인하는 2가지 방법 os, multiprocessing</title>
      <link>https://chancoding.tistory.com/262</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 활용해서 병렬 작업을 위해 멀티프로세스를 활용하는 경우가 다수 있습니다.&lt;br /&gt;해당 작업을 진행할 때, 개인 PC CPU 값으로 대충 4 또는 8 로 값을 넣는 경우가 많습니다.&lt;br /&gt;반면, 현재 CPU의 코어 수를 확인해서 해당 값을 넣어주는 방식으로도 많이 작성합니다.&lt;br /&gt;따라서 간단하게 CPU 코어 수 확인하는 코드를 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Multiprocessing 모듈 활용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멀티프로세스를 주로 사용하므로 아래와 같은 방식으로 보통 많이 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;multiprocessing&lt;/code&gt; 모듈의 &lt;code&gt;cpu_count&lt;/code&gt; 메소드를 사용하는 방식입니다.&lt;/p&gt;
&lt;pre class=&quot;elm&quot;&gt;&lt;code&gt;import multiprocessing

multiprocessing.cpu_count()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OS 모듈 활용&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;moonscript&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;기본 모듈인 &lt;code&gt;OS&lt;/code&gt; 를 통해서도 cpu 수를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일하게 &lt;code&gt;cpu_count&lt;/code&gt; 메소드를 활용하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;차이점 비교&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 함수에서 얻는 값도 동일하며 속도 차이도 거의 없는 것으로 확인됩니다.&lt;br /&gt;저의 개인 pc에서 속도를 확인하면 &lt;code&gt;os&lt;/code&gt;모듈을 사용하는게 조금 더 빠른 것으로 확인되네요.&amp;nbsp;&lt;br /&gt;해당 값 자체를 자주 불러오는 작업이 아니므로 편한 것으로 사용하시면 되겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zQhPY/btskA5PEZq7/po9A8Wtn3tkLO9yAzOQBtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zQhPY/btskA5PEZq7/po9A8Wtn3tkLO9yAzOQBtK/img.png&quot; data-alt=&quot;multiprocess와 os를 사용한 CPU Core 수 Count 결과 비교 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zQhPY/btskA5PEZq7/po9A8Wtn3tkLO9yAzOQBtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzQhPY%2FbtskA5PEZq7%2Fpo9A8Wtn3tkLO9yAzOQBtK%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; alt=&quot;멀티프로세스와 OS 모듈의 CPU 수를 구한 결과 동일한 값을 가지며&amp;amp;#44; 속도는 os 모듈이 조금 더 빠른 것으로 확인됨&quot; loading=&quot;lazy&quot; width=&quot;497&quot; height=&quot;400&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;multiprocess와 os를 사용한 CPU Core 수 Count 결과 비교 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>CORE</category>
      <category>CPU</category>
      <category>cpu 수</category>
      <category>cpu_count</category>
      <category>multiprocess</category>
      <category>멀티프로세스</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/262</guid>
      <comments>https://chancoding.tistory.com/262#entry262comment</comments>
      <pubDate>Tue, 20 Jun 2023 14:51:31 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] Dataframe 대용량 빅데이터 빠르게 읽고 쓰는 방법</title>
      <link>https://chancoding.tistory.com/261</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 사용해서 수 GB 정도의 데이터를 다루는 경우가 많습니다. 이 정도 크기의 대용량데이터를 &lt;b&gt;판다스를 사용해서 읽고 쓰면 상당히 많은 시간이 소요&lt;/b&gt;됩니다. 40~50초 정도에서 길면 몇십 분 정도 기다려야 하는 경우가 있죠. 조금 기다리면 되지만 저는 가능하면 빠르게 처리되는 것을 선호합니다. 그래서 새롭게 알게 된&lt;b&gt; &lt;code&gt;pyarrow&lt;/code&gt;를 사용해서 &lt;span style=&quot;color: #ee2323;&quot;&gt;더 빠르게 데이터 프레임 형식으로 데이터를 읽고 쓸 수 있는 방법&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;에&lt;/span&gt; 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Apache Arrow란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apache Arrow는 인메모리 분석을 위한 개발 플랫폼으로 빅데이터 저장 및 처리 등을 지원하는 기술이 포함되어 있습니다. Arror 객체는 C++를 통해서 구현되어 있고 NumPy, Pandas 등의 Python 객체가 내장되어 통합이 용이합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pyarrow는 &lt;code&gt;table&lt;/code&gt;이라는 형식을 사용합니다. Pandas는 DataFrame을 기본 형식으로 사용하는 것과 비슷하게 생각하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pyarrow 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;pip&lt;/code&gt;을 사용해서 쉽게 설치할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install pyarrow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Test용 임시 데이터 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트를 위해 임시로 간단한 데이터를 만들어서 사용하겠습니다. 기존에 사용할 데이터가 있다면 해당 데이터를 사용해도 무방합니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import os
import pandas as pd
import random

save_dir = os.path.join(os.getcwd(), 'tmp')
os.makedirs(save_dir, exist_ok=True)
file_path = os.path.join(save_dir, '임시데이터.csv')
line_count = 100_000

with open(file_path, 'w') as handler:
    start = time.perf_counter()
    for _ in range(line_count):
        data_generated = [&quot;ABCDEFG&quot;[random.randint(0,6)] + 
                          str(random.randint(1000, 9999)) for _ in range(1000)]
        line_data = &quot;,&quot;.join(data_generated) + &quot;\n&quot;
        handler.write(line_data)
    print(time.perf_counter()-start)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjEABK/btr94whMam8/2Cjs5Q9SzZuyuCHGr3ubrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjEABK/btr94whMam8/2Cjs5Q9SzZuyuCHGr3ubrk/img.png&quot; data-alt=&quot;만들어서 저장한 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjEABK/btr94whMam8/2Cjs5Q9SzZuyuCHGr3ubrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjEABK%2Fbtr94whMam8%2F2Cjs5Q9SzZuyuCHGr3ubrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;115&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;만들어서 저장한 데이터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 형식은 문자열로 object type으로만 만들어서 구성하였습니다. 뒤에서 판다스와 아파치를 사용한 경우의 시간 차이를 비교해보겠지만, &lt;code&gt;int&lt;/code&gt; type으로만 구성된 데이터의 경우는 pandas와 pyarrow의 차이가 크게 없는 것으로 결과가 나왔습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pyarrow CSV 파일 읽기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;pyarrow&lt;/code&gt; 패키지 내에 &lt;code&gt;csv&lt;/code&gt; 파일 형식을 다루는 모듈이 있습니다. &lt;code&gt;csv.read_csv&lt;/code&gt;를 통해서 csv파일을 읽어올 수 있습니다. 큰 틀은 판다스와 비슷합니다.&lt;/p&gt;
&lt;pre class=&quot;gams&quot;&gt;&lt;code&gt;from pyarrow import csv

table = csv.read_csv(file_path)
table&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;read_csv&lt;/code&gt;, &lt;code&gt;write_csv&lt;/code&gt;를 할 때 &lt;code&gt;pyarrow&lt;/code&gt;는 옵션을 pyarrow의 옵션을 따로 묶어서 넘겨줘야합니다. 판다스와 비교한 아래 예시를 참고해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Pandas&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import pandas as pd

df = pd.read_csv(file_path, columns=['a','b','c',])&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;b&gt;Pyarrow&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from pyarrow import csv

options = csv.ReadOptions(column_names=['a','b','c'])
table = csv.read_csv(file_path, read_options=options)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교하면 쉽게 차이가 보이죠. &lt;code&gt;csv.ReadOptions&lt;/code&gt;를 통해서 &lt;code&gt;columns&lt;/code&gt;명을 정해서 넘겨줄 수 있습니다. 이렇듯 &lt;code&gt;pyarrow&lt;/code&gt;에서는 옵션을 하나로 모아서 넘겨줘야 한다는 차이가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pyarrow CSV 파일 쓰기&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;from pyarrow import csv

options = csv.WriteOptions(include_header=False)
csv.write_csv(table, &quot;data.csv&quot;, options)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pandas VS Pyarrow 읽기 시간 비교&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판다스와 Pyarrow를 사용해서 데이터 읽고 쓰는 시간을 비교해 보겠습니다. 최종적으로 Pandas의 &lt;code&gt;DataFrame&lt;/code&gt;을 사용해서 데이터 분석이나 시각화를 진행한다고 생각해서 pyarrow의 table 형태를 dataframe으로 변경하는 것까지 해서 시간을 비교해 보겠습니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;import time
import os
import pandas as pd
from pyarrow import csv

print(&quot;Pandas DataFrame 사용&quot;)
start = time.perf_counter()

df = pd.read_csv(file_path, header=None)
print(df.shape)
print(df.head())

end = time.perf_counter()
print('소요시간 = {:.2f} sec'.format(end-start), end=&quot;\n&quot;)


print(&quot;Pyarrow Table 사용&quot;)
start = time.perf_counter()

read_option = csv.ReadOptions(column_names=list(str(i) for i in range(1000)))
table = csv.read_csv(file_path, read_options=read_option)
df = table.to_pandas()
print(df.shape)
print(df.head())

end = time.perf_counter()
print('소요시간 = {:.2f} sec'.format(end-start))&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;b&gt;pd.read_csv를 사용한 경우 23.45 sec&lt;/b&gt; 가 소요됐습니다. 반면 &lt;b&gt;Pyarrow&lt;/b&gt;의 csv.read_csv를 사용해서 table 형식으로 읽은 후 다시 DataFrame으로 변경하는 데 걸리는 시간은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;11.58 sec로 거의 50%가량의 시간을 단축&lt;/b&gt;&lt;/span&gt;시킬 수 있었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lrmAw/btr92t6Wp4o/cU8tDYZKXK4dxUkrKRwuok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lrmAw/btr92t6Wp4o/cU8tDYZKXK4dxUkrKRwuok/img.png&quot; data-alt=&quot;Pandas와 Pyarrow 읽기 속도 비교 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lrmAw/btr92t6Wp4o/cU8tDYZKXK4dxUkrKRwuok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlrmAw%2Fbtr92t6Wp4o%2FcU8tDYZKXK4dxUkrKRwuok%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; alt=&quot;pandas와 pyarrow의 csv파일을 읽는데 걸리는 시간을 비교한 것으로 pyarrow가 50% 더 빠른 결과를 보여줌&quot; loading=&quot;lazy&quot; width=&quot;845&quot; height=&quot;378&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Pandas와 Pyarrow 읽기 속도 비교 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pandas VS Pyarrow 쓰기 시간 비교&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터프레임 형식의 데이터를 CSV 형식으로 저장하는 데 걸리는 시간을 비교해 보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681447154712&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
import os
import pandas as pd
from pyarrow import csv
import pyarrow as pa

# 쓰기 전 데이터 읽어오기
# 읽는 것은 Pyarrow가 빠르니까 pyarrow 사용
read_option = csv.ReadOptions(column_names=list(str(i) for i in range(1000)))
table = csv.read_csv(file_path, read_options=read_option)
df = table.to_pandas()


# 쓰기 시간 비교
print(&quot;Pandas DataFrame 사용&quot;)
start = time.perf_counter()

df.to_csv(file_path, header=None)

end = time.perf_counter()
print('소요시간 = {:.2f} sec'.format(end-start), end=&quot;\n&quot;)


print(&quot;Pyarrow Table 사용&quot;)
start = time.perf_counter()

options = csv.WriteOptions(include_header=False)
table = pa.Table.from_pandas(df)
csv.write_csv(table, file_path, options)

end = time.perf_counter()
print('소요시간 = {:.2f} sec'.format(end-start))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;175&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmpmU8/btsacglgH1U/vpKGx0pehtPgi7ktYzco8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmpmU8/btsacglgH1U/vpKGx0pehtPgi7ktYzco8k/img.png&quot; data-alt=&quot;Pandas vs Pyarrow 쓰기 시간 비교 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmpmU8/btsacglgH1U/vpKGx0pehtPgi7ktYzco8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmpmU8%2FbtsacglgH1U%2FvpKGx0pehtPgi7ktYzco8k%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; alt=&quot;pandas와 pyarrow의 csv파일을 쓰는데 걸리는 시간을 비교한 것으로 pyarrow가 6배 더 빠른 결과를 보여줌&quot; loading=&quot;lazy&quot; width=&quot;175&quot; height=&quot;72&quot; data-origin-width=&quot;175&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Pandas vs Pyarrow 쓰기 시간 비교 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓰기 결과가 상당히 차이가 많이 나는 것을 확인했습니다.&lt;b&gt; Pandas는 45초가 걸린 반면 Pyarrow는 7초밖&lt;/b&gt;에 걸리지 않았습니다. 예상보다 훨씬 큰 차이를 보였습니다. &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;거의 6배 정도의 차이니까 엄청난 차이&lt;/span&gt;&lt;/b&gt;입니다. 이 정도면 Pyarrow를 무조건 써야 하지 않겠습니까?!&lt;/p&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 형식으로 읽어오거나 CSV로 저장할 수 있는지에 대해서 알아보았습니다. 해당 방법을 활용해서 더욱 빠른 파이썬 활용에 도움이 됐으면 좋겠습니다. Pyarrow를 잘 활용해 보세요~&lt;/p&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;a href=&quot;https://superfastpython.com/multithreaded-file-loading/#Create_10000_Files_to_load&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://superfastpython.com/multithreaded-file-loading/#Create_10000_Files_to_load&lt;/a&gt;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>fast python</category>
      <category>Pyarrow</category>
      <category>pyarrow csv 쓰기</category>
      <category>pyarrow csv읽기</category>
      <category>read_csv</category>
      <category>빅데이터</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/261</guid>
      <comments>https://chancoding.tistory.com/261#entry261comment</comments>
      <pubDate>Fri, 14 Apr 2023 13:49:04 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파일 옮기기 복사하기 - shutil 모듈 move copy</title>
      <link>https://chancoding.tistory.com/260</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터로 작업을 하다 보면 특정 폴더에서 파일을 옮기거나 복사하는 작업을 하는 경우가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순하게 그냥 쓱 옮기면 편한데, &lt;br /&gt;가끔은 날짜별로 정리를 하는 등의 조건에 따라 분류를 해줘야 하는 경우도 생기면 번거로워집니다.&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;blob&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LwERJ/btrYjXj0NoI/Mpa0NiEZby5wklqIgKxSl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LwERJ/btrYjXj0NoI/Mpa0NiEZby5wklqIgKxSl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LwERJ/btrYjXj0NoI/Mpa0NiEZby5wklqIgKxSl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLwERJ%2FbtrYjXj0NoI%2FMpa0NiEZby5wklqIgKxSl0%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;82&quot; height=&quot;82&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 때 파이썬을 사용하면 쉽고 편하게 파일을 분류할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 오늘은 디렉토리의 파일들을 옮기거나 복사하기 위해 &lt;code&gt;shutil&lt;/code&gt; 모듈을 사용해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;파일 옮기기 : file move&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 옮기기 위해서 &lt;code&gt;shutil.move&lt;/code&gt; method를 사용하면 됩니다.&lt;br /&gt;기존의 위치(src)에서 옮길 위치(dst)를 설정해 주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;shutil.move 예제 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;import shutil
import os

filename = &quot;temp.txt&quot;
src = &quot;E:\py_workspace\org_directory&quot;
dst = &quot;E:\py_workspace\new_directory&quot;

shutil.move(os.path.join(src, filename), os.path.join(dst, filename))
# shutil.move(src + &quot;/&quot; + filename, dst + &quot;/&quot; + filename) 
# os.path.join 은 디렉토리 형태로 합쳐주는 method입니다. 위의 두 코드의 결과는 동일합니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;파일 복사 : file copy&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 복사하기는 &lt;code&gt;shutil.copy&lt;/code&gt;를 사용하면 됩니다.&lt;br /&gt;&lt;code&gt;move&lt;/code&gt;와 마찬가지로 기존의 위치 src에서 dst로 파일을 복사해 줍니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import shutil
import os

filename = &quot;temp.txt&quot;
src = &quot;E:\py_workspace\org_directory&quot;
dst = &quot;E:\py_workspace\new_directory&quot;

shutil.copy(os.path.join(src, filename), os.path.join(dst, filename))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;조건에 따라 활용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 조건에 따라서 분류하는 방법에 대한 예시를 들어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;size 값에 따라서 폴더를 만들고 해당 폴더로 파일을 옮기는 것입니다.&lt;br /&gt;size로 이루어진 폴더가 없으면 폴더를 만들고 만든 폴더 명은 set에 저장해 두었습니다.&lt;br /&gt;그리고 해당 size를 가진 파일들은 size로 이루어진 폴더 안으로 move 하도록 하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1675678662089&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import shutil
import os

org_path = &quot;E:\py_workspace\org_directory&quot;
dst_path = &quot;E:\py_workspace\new_directory&quot;
files = os.listdir(org_path)

size_set = set()
for file in files:
    menu, size, side = file.split(&quot;,&quot;)
    if size not in size_list:
        size_set.add(size)
        os.mkdir(os.path.join(dst_path, size))
    
    src = os.path.join(org_path, file)
    dst = os.path.join(dst_path, size, file)
    shutil.move(src, dst)&lt;/code&gt;&lt;/pre&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오류 발생 경우&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FileNotFoundError: [Errno 2] No such file or directory:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shutil move 또는 shutil copy를 할 때, 위와 같은 에러가 발생하는 경우가 종종 있습니다.&lt;br /&gt;Error가 발생되는 경우는 다음과 같습니다.&lt;br /&gt;1. 기존 위치의 파일이 없거나 경로가 잘못된 경우&lt;br /&gt;2. 옮길 위치의 폴더가 없는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 두 가지 경우가 있습니다.&lt;br /&gt;특히나 2번과 같이 옮길 위치 directory 중 없는 폴더가 있으면&lt;br /&gt;폴더가 생성되지 않고 오류가 발생하는 경우가 많으니 한 번 다시 확인해 보시면 해결할 수 있을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 Shutil 모듈을 사용해서 파일을 move or copy 하는 방법에 대해서 알아보았습니다.&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>copy</category>
      <category>file move</category>
      <category>move</category>
      <category>OS</category>
      <category>shutil</category>
      <category>shutil copy</category>
      <category>shutil move</category>
      <category>파이썬</category>
      <category>파일 복사</category>
      <category>파일 옮기기</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/260</guid>
      <comments>https://chancoding.tistory.com/260#entry260comment</comments>
      <pubDate>Mon, 6 Feb 2023 19:26:04 +0900</pubDate>
    </item>
    <item>
      <title>[Python] SQL 데이터 Pandas DataFrame으로 불러오기 &amp;amp; 저장하기</title>
      <link>https://chancoding.tistory.com/257</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size26&quot;&gt;파이썬으로 데이터 분석같은 작업을 수행하다 보면&lt;br /&gt;판다스 데이터 프레임을 바로 DB로 저장하거나&lt;br /&gt;DB의 데이터를 DataFrame으로 바로 불러오고 싶은 경우가 많이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 오늘은&lt;b&gt; DB와 DF간의 데이터를 저장 혹은 불러오는 방법&lt;/b&gt;에 대해 정리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas DataFrame을 DB 파일 형식으로 저장하기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장하기 소스코드는 아래와 같습니다.&lt;br /&gt;설명은 코드 아래 내용들을 확인하시면 됩니다~&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sqlite3
import pandas as pd

# 1. 데이터 저장하기
con = sqlite3.connect('example.db')
cur = con.cursor()

df.to_sql('region_table', con)
con.close()

# 2. 데이터 불러오기
con = sqlite3.connect(&quot;example.db&quot;)

df = pd.read_sql(&quot;SELECT * FROM region_table&quot;, con, index_col='index')
con.close()

df&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;&lt;b&gt;저장용 데이터 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 저장할 DataFrame 데이터를 임시로 만들겠습니다.&lt;br /&gt;아래 코드를 사용해 주시면 돼요~&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import pandas as pd
import sqlite3

data = [['A지역', 'B지역', 'C지역', 'D지역', 'E지역', 'F지역', 'G지역', 'H지역', 'I지역'],
    [638, 11, 35, 18, 1, 57, 81, 365, 36],
    [774, 16, 38, 19, 2, 68, 96, 411, 34],
    [807, 16, 58, 26, 2, 62, 99, 415, 20],
    [817, 20, 60, 20, 1, 70, 104, 429, 27],
    [768, 18, 53, 22, 6, 67, 108, 404, 46],
    [898, 24, 63, 27, 2, 64, 119, 431, 46],
    [926, 29, 64, 22, 5, 63, 129, 438, 34],
    [928, 17, 53, 29, 7, 59, 127, 458, 49],
    [891, 19, 53, 24, 6, 61, 138, 458, 69],
    [1029, 20, 58, 37, 11, 69, 149, 492, 62]]
df = pd.DataFrame(data[1:], columns=data[0])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 방법으로 DataFrame을 만들려면 아래 글도 참고해 보세요~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8365042609628810&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8365042609628810&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-8365042609628810&quot; data-ad-slot=&quot;2201963606&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;figure id=&quot;og_1674791511082&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;[Python] 랜덤한 데이터로 DataFrame 만들기&quot; data-og-description=&quot;목차 블로그 글을 작성하거나, 이런저런 예시나 테스트를 할 때 가끔 랜덤한 데이터를 생성할 필요한 경우가 생깁니다. 한 번 알아놓으면, 매번 귀찮게 찾아보지 않아도 되니 천천히 따라 해보&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/254&quot; data-og-url=&quot;https://chancoding.tistory.com/254&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfqlNN/hyRpERtjM5/OzKyj6qduZqqa0aozTS5dK/img.png?width=168&amp;amp;height=311&amp;amp;face=0_0_168_311,https://scrap.kakaocdn.net/dn/Cmmg9/hyRpH1JDnH/k3EwQ4aAGD7QyCPj4PnGZ1/img.png?width=168&amp;amp;height=311&amp;amp;face=0_0_168_311,https://scrap.kakaocdn.net/dn/bMLtdl/hyRpHUXlVx/Co5xx2mETKuPzIET0lFzG0/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/254&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/254&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfqlNN/hyRpERtjM5/OzKyj6qduZqqa0aozTS5dK/img.png?width=168&amp;amp;height=311&amp;amp;face=0_0_168_311,https://scrap.kakaocdn.net/dn/Cmmg9/hyRpH1JDnH/k3EwQ4aAGD7QyCPj4PnGZ1/img.png?width=168&amp;amp;height=311&amp;amp;face=0_0_168_311,https://scrap.kakaocdn.net/dn/bMLtdl/hyRpHUXlVx/Co5xx2mETKuPzIET0lFzG0/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] 랜덤한 데이터로 DataFrame 만들기&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;chancoding.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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;SQL DB 연결하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;example.db라는 DB 파일과 연결한 &lt;code&gt;Connection&lt;/code&gt; 객체를 생성합니다.&lt;br /&gt;현재 파이썬과 SQL를 연결한 것으로 생각하면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;con = sqlite3.connect('example.db')
cur = con.cursor()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQLite3에 데이터를 저장하는 SQL에 대해서는 아래 글을 참고해 주세요~&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8365042609628810&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-8365042609628810&quot; data-ad-slot=&quot;2201963606&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;figure id=&quot;og_1675174203978&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;[Python] SQlite3 DB에 데이터 저장 및 조회&quot; data-og-description=&quot;목차 파이썬으로 작업하다보면 SQL 데이터 작업을 해야할 때가 생깁니다. SQLite 데이터베이스를 파이썬에서 연결하는 방법에 대해서 알아보겠습니다. 전체적인 Flow 파이썬에서 DB 파일에 연결하&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/256&quot; data-og-url=&quot;https://chancoding.tistory.com/256&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jIbOM/hyRsjtwA7j/JF8OZhvLRRaHncdNbzHf4K/img.png?width=227&amp;amp;height=101&amp;amp;face=0_0_227_101,https://scrap.kakaocdn.net/dn/cQduRv/hyRsscV9Fd/p7XgIihEyKZWUkFLB0GgN0/img.png?width=227&amp;amp;height=101&amp;amp;face=0_0_227_101,https://scrap.kakaocdn.net/dn/z5mUz/hyRsjG5LzR/PQ3IBOQj5UFOJS2VkXAOrK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/256&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/256&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jIbOM/hyRsjtwA7j/JF8OZhvLRRaHncdNbzHf4K/img.png?width=227&amp;amp;height=101&amp;amp;face=0_0_227_101,https://scrap.kakaocdn.net/dn/cQduRv/hyRsscV9Fd/p7XgIihEyKZWUkFLB0GgN0/img.png?width=227&amp;amp;height=101&amp;amp;face=0_0_227_101,https://scrap.kakaocdn.net/dn/z5mUz/hyRsjG5LzR/PQ3IBOQj5UFOJS2VkXAOrK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] SQlite3 DB에 데이터 저장 및 조회&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 파이썬으로 작업하다보면 SQL 데이터 작업을 해야할 때가 생깁니다. SQLite 데이터베이스를 파이썬에서 연결하는 방법에 대해서 알아보겠습니다. 전체적인 Flow 파이썬에서 DB 파일에 연결하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SQL DB에 저장하기 : to_sql&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;DataFrame&lt;/code&gt;객체의 &lt;code&gt;to_sql&lt;/code&gt; method를 사용해서 DB에 저장이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;해당 메소드는 &lt;code&gt;to_sql(테이블 명, Connection)&lt;/code&gt;이렇게 사용합니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 인자로 DB에 저장할 테이블 명을 입력합니다.&lt;br /&gt;두 번째 인자에는 DB와 연결한 Connection 객체를 넣으면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;df.to_sql('region_table', con)
con.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 데이터프레임이 SQL에 테이블 형태로 데이터가 저장됩니다.&lt;br /&gt;SQLite에 직접 들어가서 확인하시면 쉽게 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vXS2b/btrXhQmrlIQ/O9LLyIlNNLLKMimspge4J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vXS2b/btrXhQmrlIQ/O9LLyIlNNLLKMimspge4J0/img.png&quot; data-alt=&quot;DataFrame과 SQL DB 데이터 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vXS2b/btrXhQmrlIQ/O9LLyIlNNLLKMimspge4J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvXS2b%2FbtrXhQmrlIQ%2FO9LLyIlNNLLKMimspge4J0%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;890&quot; height=&quot;330&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DataFrame과 SQL DB 데이터 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;왼쪽 사진은 DataFrame의 테이블이고 오른쪽은 SQL GUI에서 확인한 테이블의 데이터입니다.&lt;br /&gt;각 Column의 데이터가 잘 들어갔고 &lt;/span&gt;&lt;span&gt;DataFrame의 index 또한 &quot;&lt;/span&gt;index&quot;라는 Column으로 저장된 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;SQL DB에서 판다스 DataFrame으로 데이터 불러오기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SQL에서 불러오기 : read_sql&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 저장한 &lt;code&gt;example.db&lt;/code&gt;의 &lt;code&gt;region_table&lt;/code&gt; 테이블의 데이터를 데이터프레임으로 불러오겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장할 때와 마찬가지로 DB와 연결을 진행합니다.&lt;br /&gt;그리고 Pandas의 &lt;code&gt;read_sql&lt;/code&gt; 메소드를 통해 불러오도록 합니다.&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;해당 메소드는 &lt;code&gt;read_sql( SQL문, 연결객체)&lt;/code&gt; 형태로 사용합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sqlite3
import pandas as pd

con = sqlite3.connect(&quot;example.db&quot;)

df = pd.read_sql(&quot;SELECT * FROM region_table&quot;, con, index_col='index')
df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 불러온 데이터를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R5Tiz/btrXicv7aGr/4jxObSuEFrMCwGm6DrsrLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R5Tiz/btrXicv7aGr/4jxObSuEFrMCwGm6DrsrLK/img.png&quot; data-alt=&quot;read_sql 불러온 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R5Tiz/btrXicv7aGr/4jxObSuEFrMCwGm6DrsrLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR5Tiz%2FbtrXicv7aGr%2F4jxObSuEFrMCwGm6DrsrLK%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;434&quot; height=&quot;276&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;read_sql 불러온 데이터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 판다스의 데이터프레임과 SQL DB에 대해서 데이터를 저장하고 불러오는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 활용하는데 있어서 SQL 데이터를 쉽게쉽게 판다스와 연동할 수 있어서 편리한 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>DB데이터 불러오기</category>
      <category>pd.read_sql</category>
      <category>pd.to_sql</category>
      <category>read_sql</category>
      <category>to_sql</category>
      <category>데이터 저장</category>
      <category>데이터불러오기</category>
      <category>데이터프레임 DB</category>
      <category>파이썬</category>
      <category>파이썬 DB</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/257</guid>
      <comments>https://chancoding.tistory.com/257#entry257comment</comments>
      <pubDate>Tue, 31 Jan 2023 01:00:19 +0900</pubDate>
    </item>
    <item>
      <title>대한항공 x 현대카드 마일리지 가장 빠르게 쌓는 카드 추천 - 현대 030 카드</title>
      <link>https://chancoding.tistory.com/258</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;썸네일.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wMHWH/btrXo4EQ2yv/YDOBodxOF1iBPKyDsNulv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wMHWH/btrXo4EQ2yv/YDOBodxOF1iBPKyDsNulv0/img.jpg&quot; data-alt=&quot;마일리지 최대 적립 카드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wMHWH/btrXo4EQ2yv/YDOBodxOF1iBPKyDsNulv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwMHWH%2FbtrXo4EQ2yv%2FYDOBodxOF1iBPKyDsNulv0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;484&quot; data-filename=&quot;썸네일.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마일리지 최대 적립 카드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코로나가 끝나가며 다시 해외여행을 많이 다니시는 분들이 늘었습니다.&lt;br /&gt;항공사 마일리지를 잘 활용하면, 무료 항공권이나 좌석 업그레이드 등 많은 혜택을 누릴 수 있기에&lt;br /&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;1. 이번에 소개할 카드는?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sTFBu/btrXyjADDgc/doHXCIoLFhhKEIWZpXnL2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sTFBu/btrXyjADDgc/doHXCIoLFhhKEIWZpXnL2K/img.png&quot; data-alt=&quot;대한항공카드 디자인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sTFBu/btrXyjADDgc/doHXCIoLFhhKEIWZpXnL2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsTFBu%2FbtrXyjADDgc%2FdoHXCIoLFhhKEIWZpXnL2K%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;868&quot; height=&quot;316&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대한항공카드 디자인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대한항공카드 030 / 070 / 150 / the First&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대카드의 &quot;대한항공카드&quot; 030 / 070 / 150 / the First 카드로 총 4가지 종류가 있는데,&lt;br /&gt;저는 제가 관심 있는 대한항공카드 030에 대해서만 설명할게요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;연회비를 줄이고, 마일리지 혜택에만 집중한 카드&lt;/b&gt;로 마일리지 적립 가성비로 활용하기 좋은 카드라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8365042609628810&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-8365042609628810&quot; data-ad-slot=&quot;2201963606&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&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;2. 백 원 단위까지 마일리지를 적립해 주는 개꿀 혜택!&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;☝ 국내외 가맹점 이용금액 1 천원당 1마일리지 적립&lt;br /&gt;☝ 직판 항공권 / 기내 면세점 1천원당 2 마일리지 적립&lt;br /&gt;☝ 해외 / 가맹점 / 국내 면세점 1천원당 2 마일리지 적립&lt;br /&gt;여기까지는 보통 다른 카드와 동일하죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 카드만의 특징은 바로바로!&lt;br /&gt; 건별 이용금액 천 원 단위 미만 금액까지 마일리지 적립(소수점 이하 올림) &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편의점에서 2,300원을 사용하면 2.3 마일리지&lt;br /&gt;쇼핑했는데 18,400원을 사용했다면 18.4 마일리지로 계산이 되어&lt;br /&gt;20.7 =&amp;gt; 21 마일리지가 적립됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 천원 미만은 없애버려서 2 + 18 마일리지가 적립되는데,&lt;br /&gt;이 카드는 그 이하까지 모두 소수점 단위로 해서 적립해 주고 올림으로 적립을 다 챙겨준다는 사실!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;height: 152px;&quot; width=&quot;659&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;th style=&quot;height: 21px; width: 364.6px;&quot;&gt;이용 가맹점&lt;/th&gt;
&lt;th style=&quot;height: 21px; width: 142.05px;&quot;&gt;이용금액&lt;/th&gt;
&lt;th style=&quot;height: 21px; width: 142.083px;&quot;&gt;적립 마일리지&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 350.6px;&quot;&gt;외식업종&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.05px;&quot;&gt;3,800원&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.083px;&quot;&gt;3.8마일리지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 350.6px;&quot;&gt;국내면세점&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.05px;&quot;&gt;5,300원&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.083px;&quot;&gt;10.6마일리지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 350.6px;&quot;&gt;합계&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.05px;&quot;&gt;14.4마일리지&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.083px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 350.6px;&quot;&gt;최종 적립 마일리지(소수점 이하 절상)&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.05px;&quot;&gt;15마일리지&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 128.083px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 웰컴보너스 이벤트 진행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웰컴보너스 3천 마일리지 적립 혜택이 있습니다.&lt;br /&gt;발급월 포함 3개월 누적 이용금액이 100만 원 이상 사용할 경우&lt;br /&gt;웰컴 보너스로 3천 마일리지를 적립해 줍니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;발급월 포함 4개월 차 25일~30일경 혜택 제공&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예시) 5월에 발급하여 7월 31일까지 누적 이용금액 100만 원 이상일 경우 8월 25일~8월 30일경 마일리지 적립&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8365042609628810&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-8365042609628810&quot; data-ad-slot=&quot;2201963606&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 연회비&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국내외겸용 / 국내용 모두 상관없이 30,000원입니다.&lt;br /&gt;일반 보통 신용카드에 비해서 비싼 편이지만, 다른 항공사 마일리지 카드들의 연회비가 보통 5만 원 이상인 것을 고려하면 저렴한 편입니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq6TM7/btrXyjAKrvr/y1XNgtKlceOCAaK898TqgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq6TM7/btrXyjAKrvr/y1XNgtKlceOCAaK898TqgK/img.png&quot; data-alt=&quot;030카드 연회비&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq6TM7/btrXyjAKrvr/y1XNgtKlceOCAaK898TqgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq6TM7%2FbtrXyjAKrvr%2Fy1XNgtKlceOCAaK898TqgK%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;649&quot; height=&quot;328&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;030카드 연회비&lt;/figcaption&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;5. 주의사항&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 030 카드 최초 발급의 경우만 해당되며 070 150 등의 카드와 중복 혜택이 발생하지 않습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.&amp;nbsp;웰컴보너스 적립 후 카드 해지 시 서비스 제공에 소요된 비용 공제 후 일할 계산하여 연회비 환불 -&amp;gt;이라는 유의사항이 달려있으니 적립하고 바로 해지하면 연회비 환불은 안된다고 생각해야겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 상품권 결제 금액에 대해서는 마일리지 적립이 되지 않으니, 아쉽지만 상테크로는 사용이 불가능합니다 ㅠ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oEys4/btrXnIoRFZQ/Lk1GfzwSLTDEdJmFR2Nmjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oEys4/btrXnIoRFZQ/Lk1GfzwSLTDEdJmFR2Nmjk/img.png&quot; data-alt=&quot;약관 주의사항&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oEys4/btrXnIoRFZQ/Lk1GfzwSLTDEdJmFR2Nmjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoEys4%2FbtrXnIoRFZQ%2FLk1GfzwSLTDEdJmFR2Nmjk%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;888&quot; height=&quot;365&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;약관 주의사항&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 대한항공카드 030에 대해서 알아보았습니다.&amp;nbsp;&lt;br /&gt;대한항공 마일리지를 많이 모으고 싶다면 한 번 이용해 보기에 좋은 카드라고 생각해요.&lt;br /&gt;저도 이번에 알아보면서 신청한 카드이니 한 번 관심가져 보세요&lt;br /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8365042609628810&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block; text-align: center;&quot; data-ad-layout=&quot;in-article&quot; data-ad-format=&quot;fluid&quot; data-ad-client=&quot;ca-pub-8365042609628810&quot; data-ad-slot=&quot;2201963606&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;</description>
      <category>금융</category>
      <category>030 070 150 the first</category>
      <category>korea air</category>
      <category>대한항공</category>
      <category>대한항공 마일리지</category>
      <category>대항항공카드 030</category>
      <category>카드</category>
      <category>항공 마일리지</category>
      <category>항공사 마일리지</category>
      <category>현대 030카드</category>
      <category>현대카드</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/258</guid>
      <comments>https://chancoding.tistory.com/258#entry258comment</comments>
      <pubDate>Mon, 30 Jan 2023 00:01:34 +0900</pubDate>
    </item>
    <item>
      <title>[Python] SQlite3 DB에 데이터 저장 및 조회</title>
      <link>https://chancoding.tistory.com/256</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬으로 작업하다보면 SQL 데이터 작업을 해야할 때가 생깁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQLite 데이터베이스를 파이썬에서 연결하는 방법에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;227&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MahvD/btrXfNc9hGF/DgsHpiC5iqPIxkackmoz20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MahvD/btrXfNc9hGF/DgsHpiC5iqPIxkackmoz20/img.png&quot; data-alt=&quot;sqlite3 로고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MahvD/btrXfNc9hGF/DgsHpiC5iqPIxkackmoz20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMahvD%2FbtrXfNc9hGF%2FDgsHpiC5iqPIxkackmoz20%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;227&quot; height=&quot;101&quot; data-origin-width=&quot;227&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;sqlite3 로고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;전체적인 Flow&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 DB 파일에 연결하고 작업하는 전체적인 과정입니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import sqlite3

con = sqlite3.connect('example.db')
cur = con.cursor()

# 테이블 만들기
cur.execute('''CREATE TABLE stocks
               (date text, trans text, symbol text, qty real, price real)''')

# ROW 단위로 데이터 저장하기
cur.execute(&quot;INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)&quot;)

# 데이터 저장하기
con.commit()

# connection 종료하기
con.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;code&gt;con&lt;/code&gt;은 Connect 객체로 데이터베이스와 연결하는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Connection을 얻었으면, Cursor 객체를 만들어 &lt;code&gt;cur&lt;/code&gt;을 사용해서 SQL의 전반적인 작업을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;code&gt;execute&lt;/code&gt; 메소드를 사용해서 SQL 문법을 수행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 모든 작업이 끝났다면, Connection에서 &lt;code&gt;commit&lt;/code&gt;을 수행하여 변경된 내용을 DB에 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 이후 DB와연 연결을 종료해 마무리를 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;SQL 데이터 조회&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 가져오기 : execute / fetchone / fetchall()&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 방법 1 직접 작성
cur.execute(&quot;SELECT * FROM stocks WHERE symbol='AAPL'&quot;)
print(cur.fetchone())

# 방법 2 변수 넣기
t = ('AAPL',)
cur.execute('SELECT * FROM stocks WHERE symbol=?', t)
print(cur.fetchone())
print(cur.fetchall())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;execute&lt;/code&gt;는 단순 실행만합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 꺼내려면, &lt;code&gt;cur&lt;/code&gt;를 iterator로 사용하거나, &lt;code&gt;fetchone&lt;/code&gt; method를 사용해서 단일행 데이터를 그져와야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다수의 행을 한 번에 조회하려면 &lt;code&gt;fetchall()&lt;/code&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;다수의 데이터 저장하기 : executemany&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
cur.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다수의 데이터를 저장할때에는 &lt;code&gt;executemany&lt;/code&gt; 메소드를 사용합니다.&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>DB</category>
      <category>python</category>
      <category>select</category>
      <category>sql 조회하기</category>
      <category>sqlite</category>
      <category>sqlite3</category>
      <category>데이터베이서</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/256</guid>
      <comments>https://chancoding.tistory.com/256#entry256comment</comments>
      <pubDate>Sat, 28 Jan 2023 05:00:02 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Plotly 누적 그룹 막대 그래프 그리기 - Stack and Group Bar Chart</title>
      <link>https://chancoding.tistory.com/255</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Plotly를 사용해서 간단한 누적 막대 그래프와 그룹 막대 그래프를 그리는 것에 대해서는 이전 게시글을 확인해주세요.&lt;/p&gt;
&lt;figure id=&quot;og_1674735829934&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;[Python] Plotly 그래프 사용법 - Bar Plot&quot; data-og-description=&quot;목차 Plotly 그래프 중 Bar Graph 그리는 방법에 대해 소개하겠습니다. express와 graph_objects 두 가지 방식을 모두 알아보겠습니다. 두 개의 차이가 궁금하다면 아래 글을 참고 해주세요. [Plotly] express와 &quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/253&quot; data-og-url=&quot;https://chancoding.tistory.com/253&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dtq0uq/hyRpRv4iwE/ouYgSbElKK23fwPTo1Wknk/img.png?width=598&amp;amp;height=329&amp;amp;face=0_0_598_329,https://scrap.kakaocdn.net/dn/NvJGu/hyRoFcTqof/GL3USaQkFRIkMgeNJPw8aK/img.png?width=598&amp;amp;height=329&amp;amp;face=0_0_598_329,https://scrap.kakaocdn.net/dn/eT98Pm/hyRoGv7wAp/cZKiffi6zgWb0igJqGqJDK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/253&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/253&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dtq0uq/hyRpRv4iwE/ouYgSbElKK23fwPTo1Wknk/img.png?width=598&amp;amp;height=329&amp;amp;face=0_0_598_329,https://scrap.kakaocdn.net/dn/NvJGu/hyRoFcTqof/GL3USaQkFRIkMgeNJPw8aK/img.png?width=598&amp;amp;height=329&amp;amp;face=0_0_598_329,https://scrap.kakaocdn.net/dn/eT98Pm/hyRoGv7wAp/cZKiffi6zgWb0igJqGqJDK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly 그래프 사용법 - Bar Plot&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 Plotly 그래프 중 Bar Graph 그리는 방법에 대해 소개하겠습니다. express와 graph_objects 두 가지 방식을 모두 알아보겠습니다. 두 개의 차이가 궁금하다면 아래 글을 참고 해주세요. [Plotly] express와&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;b&gt;그룹화된 누적 막대그래프를 그리는 방법&lt;/b&gt;에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엑셀로도 해보려고 했는데 잘되지 않아서 Python Plotly를 통해서 그냥 구현하는게 빠르겠다 싶어서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1단계 : 기본 데이터 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프를 그리기 위한 예시 데이터를 생성하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;A지역&lt;/code&gt;의 데이터가 더 크고 &lt;code&gt;B지역&lt;/code&gt;은 &lt;code&gt;B-1지역&lt;/code&gt;과 &lt;code&gt;B-2지역&lt;/code&gt; 두 개로 나뉘어있다고 가정해서 데이터를 만들었습니다.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import plotly.graph_objects as go

data = np.random.randint(0,100,size=(10,3)) + np.array([80,0,0])
df = pd.DataFrame(data, columns=['A지역', 'B-1지역', 'B-2지역'])
df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜덤한 값이므로 다른 값이 나올 수 있습니다~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;177&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSx2iJ/btrXgH4iNCX/V9uLpS8F5erRTmiP5Vw8CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSx2iJ/btrXgH4iNCX/V9uLpS8F5erRTmiP5Vw8CK/img.png&quot; data-alt=&quot;사용할 데이터 테이블&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSx2iJ/btrXgH4iNCX/V9uLpS8F5erRTmiP5Vw8CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSx2iJ%2FbtrXgH4iNCX%2FV9uLpS8F5erRTmiP5Vw8CK%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;177&quot; height=&quot;252&quot; data-origin-width=&quot;177&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용할 데이터 테이블&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2단계 : Simple Bar Chart&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 간단한 기본 바 그래프를 그려보면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 BarChart를 그리는 방법에 대해서 설명할 때 아래와 같이 &lt;code&gt;add_trace&lt;/code&gt;를 통해서 &lt;code&gt;go.Bar&lt;/code&gt; 객체를 추가하였었습니다.&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;fig = go.Figure()

for col in df.columns:
    fig.add_trace(
        go.Bar(x=df.index, y=df[col], name=col)
    )

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qgIXR/btrXgrtRpDf/jIRgYDQPEPrDkzbsN8e2Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qgIXR/btrXgrtRpDf/jIRgYDQPEPrDkzbsN8e2Ck/img.png&quot; data-alt=&quot;Plotly Grouped Bar Graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qgIXR/btrXgrtRpDf/jIRgYDQPEPrDkzbsN8e2Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqgIXR%2FbtrXgrtRpDf%2FjIRgYDQPEPrDkzbsN8e2Ck%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;573&quot; height=&quot;267&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Plotly Grouped Bar Graph&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 기존과 다르게 &lt;code&gt;Figure&lt;/code&gt;객체를 생성할 때 바로 데이터를 추가하는 방식으로 진행해보겠습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = go.Figure(
    data=[
        go.Bar(x=df.index, y=df['A지역'], name='A지역'),
        go.Bar(x=df.index, y=df['B-1지역'], name='B-1지역'),
        go.Bar(x=df.index, y=df['B-2지역'], name='B-2지역'),
    ]
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 결과는 위와 동일한 결과를 확인할 수 있습니다.&lt;br /&gt;단순히 이렇게만 그려도 Group화 된 막대그래프를 그릴 수 있습니다.&lt;br /&gt;하지만, 우리가 원하는 것은 B-1과 B-2를 같은 그룹으로 묶어서 쌓아 올리는 것입니다.&lt;br /&gt;우선 같은 그룹으로 묶는 방법에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3단계 : offsetgroup 설정하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;go.Bar&lt;/code&gt;에서 &lt;code&gt;offsetgroup&lt;/code&gt;이라는 옵션을 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 값을 사용해서 Bar 그래프를 그룹화할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;fig = go.Figure(
    data=[
        go.Bar(x=df.index, y=df['A지역'], name='A지역', offsetgroup=0),
        go.Bar(x=df.index, y=df['B-1지역'], name='B-1지역', offsetgroup=1),
        go.Bar(x=df.index, y=df['B-2지역'], name='B-2지역', offsetgroup=1),
    ]
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6WfF4/btrXiPNCxMy/rKgvi0Ydaobg25XVlRWzm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6WfF4/btrXiPNCxMy/rKgvi0Ydaobg25XVlRWzm1/img.png&quot; data-alt=&quot;plotly offsetgroup bar chart&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6WfF4/btrXiPNCxMy/rKgvi0Ydaobg25XVlRWzm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6WfF4%2FbtrXiPNCxMy%2FrKgvi0Ydaobg25XVlRWzm1%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;584&quot; height=&quot;260&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;plotly offsetgroup bar chart&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 여기에&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 문제&lt;/span&gt;&lt;/b&gt;가 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;159&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SD2jc/btrXcoEuMNt/Ssf1GxZAfMX9lQWHA4HmE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SD2jc/btrXcoEuMNt/Ssf1GxZAfMX9lQWHA4HmE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SD2jc/btrXcoEuMNt/Ssf1GxZAfMX9lQWHA4HmE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSD2jc%2FbtrXcoEuMNt%2FSsf1GxZAfMX9lQWHA4HmE1%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;159&quot; height=&quot;235&quot; data-origin-width=&quot;159&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B-2 지역 데이터를 추가한 결과를 통해 비교해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;offsetgroup&lt;/code&gt;값이 동일한 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;두 개의 막대그래프가 겹쳐집니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘 다 0부터 시작하니까 두 값을 합한 값의 높이를 확인할 수 없는 것이지요..ㅠ&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4단계 : base 설정하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3단계의 문제를 해결하기 위해서는 두 번째 &lt;code&gt;B-2&lt;/code&gt;지역의 Bar 시작지점이 B-1 &lt;code&gt;offsetgroup&lt;/code&gt; 막대그래프 끝 지점에서 부터 시작해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;code&gt;Base&lt;/code&gt;라는 옵션을 통해서 시작 지점을 어디서부터 할 것인지 기본 값을 넣어줄 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = go.Figure(
    data=[
        go.Bar(x=df.index, y=df['A지역'], name='A지역', offsetgroup=0),
        go.Bar(x=df.index, y=df['B-1지역'], name='B-1지역', offsetgroup=1),
        go.Bar(x=df.index, y=df['B-2지역'], name='B-2지역', offsetgroup=1, base=df['B-1지역']),
    ]
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be9fd7/btrXimEP3zS/o6oJpr0lbhi0dyJTKP2rB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be9fd7/btrXimEP3zS/o6oJpr0lbhi0dyJTKP2rB0/img.png&quot; data-alt=&quot;grouped and stacked bar graph using Plotly&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be9fd7/btrXimEP3zS/o6oJpr0lbhi0dyJTKP2rB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe9fd7%2FbtrXimEP3zS%2Fo6oJpr0lbhi0dyJTKP2rB0%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;569&quot; height=&quot;272&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;grouped and stacked bar graph using Plotly&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 아래와 같이 B-1 지역의 값이 끝나는 막대 위에서 부터 B-2 막대가 시작하는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 Plotly를 사용한 그룹화된 누적 Bar Chart를 만들 수 있습니다.&lt;/p&gt;</description>
      <category>파이썬/데이터 시각화</category>
      <category>grouped bar chart</category>
      <category>plotly</category>
      <category>plotly bar chart</category>
      <category>plotly bar graph</category>
      <category>python</category>
      <category>stacked bar chart</category>
      <category>그룹화된 누적 막대 그래프</category>
      <category>시각화</category>
      <category>파이썬 시각화</category>
      <category>플로틀리</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/255</guid>
      <comments>https://chancoding.tistory.com/255#entry255comment</comments>
      <pubDate>Fri, 27 Jan 2023 05:00:04 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 랜덤한 데이터로 DataFrame 만들기</title>
      <link>https://chancoding.tistory.com/254</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
      if($('.another_category').length &gt; 0) { toc.find('li:last').remove(); }
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 글을 작성하거나, 이런저런 예시나 테스트를 할 때&lt;br /&gt;가끔 랜덤한 데이터를 생성할 필요한 경우가 생깁니다.&lt;br /&gt;한 번 알아놓으면, 매번 귀찮게 찾아보지 않아도 되니 천천히 따라 해보세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Random 데이터로 DataFrame 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바쁜 사람들을 위해 결론 소스코드만 먼저 발사합니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(100, 5)), columns=list(&quot;abcde&quot;))
df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0~99까지의 랜덤한 정수로 이루어진&lt;br /&gt;100행 5열짜리 데이터프레임 생성완료&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvOjZ8/btrXcp4tL50/mx3fYAiUfqy6G8QmG1BLK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvOjZ8/btrXcp4tL50/mx3fYAiUfqy6G8QmG1BLK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvOjZ8/btrXcp4tL50/mx3fYAiUfqy6G8QmG1BLK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvOjZ8%2FbtrXcp4tL50%2Fmx3fYAiUfqy6G8QmG1BLK0%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;168&quot; height=&quot;311&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 설명하겠습니다ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;랜덤한 숫자 뽑기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넘파이 모듈을 사용해서 랜덤한 숫자 뽑기&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;import numpy as np

np.random.randint(범위 시작, 범위 끝)

np.random.randint(0,100)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;np.random.randint(0,100)&lt;/code&gt; 는 0에서 99까지의 숫자 중 랜덤하게 하나의 정수 값을 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;랜덤한 숫자 행렬 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;np.random.randint&lt;/code&gt;에 size 옵션을 통해 원하는 size의 numpy array 행렬을 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 소스 코드와 같이 하면 100행 5열의 랜덤한 숫자 행렬을 만들 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;np.random.randint(0,100,size=(100, 5))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;랜덤한 숫자로 데이터프레임 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 얻은 무작위 숫자로 이루어진 넘파이 배열을 &lt;code&gt;pd.DataFrame&lt;/code&gt;으로 덮어주기만 하면 완성입니다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;df = pd.DataFrame(np.random.randint(0,100,size=(100, 5)))
df&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Numpy를 Base로 사용한 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 내장 Random 모듈을 가져와서 사용해도 됩니다.&lt;br /&gt;그러면 소스코드는 아래와 같이 되겠지요.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;import random

random.randrange(0, 100)

data = [[random.randrange(0, 100) for _ in range(5)] for _ in range(100)]

df = pd.DataFrame(data)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;random 모듈을 사용해서 데이터를 만들어도 되지만, 최종적으로 DataFrame 형태의 결과물을 얻을 것이므로 Numpy를 사용합니다.&lt;br /&gt;Numpy와 Pandas는 Array 배열을 사용하니까 서로 호환이 잘돼서 더 빠르기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;속도 비교&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;똑같이 100행 5열 데이터를 만들어서 DataFrame으로 만드는 작업만 속도를 측정해 보아도 쉽게 알 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;data = [[random.randrange(0, 100) for _ in range(5)] for _ in range(100)]
data_np = np.random.randint(0,100,size=(100, 5))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJClgY/btrXg4krbug/IdhvAniYG0l11kZLYIusHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJClgY/btrXg4krbug/IdhvAniYG0l11kZLYIusHK/img.png&quot; data-alt=&quot;Random 모듈과 Numpy 속도 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJClgY/btrXg4krbug/IdhvAniYG0l11kZLYIusHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJClgY%2FbtrXg4krbug%2FIdhvAniYG0l11kZLYIusHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;544&quot; height=&quot;343&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Random 모듈과 Numpy 속도 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넘파이를 사용한 Array 데이터가 10배 이상 빠른 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>np.random.randint</category>
      <category>NumPy</category>
      <category>python</category>
      <category>random</category>
      <category>random dataframe</category>
      <category>넘파이</category>
      <category>랜덤 데이터프래임</category>
      <category>무작위데이터</category>
      <category>예시 데이터</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/254</guid>
      <comments>https://chancoding.tistory.com/254#entry254comment</comments>
      <pubDate>Thu, 26 Jan 2023 20:43:27 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Plotly 그래프 사용법 - Bar Plot</title>
      <link>https://chancoding.tistory.com/253</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Plotly 그래프 중 Bar Graph 그리는 방법에 대해 소개하겠습니다.&lt;br /&gt;express와 graph_objects 두 가지 방식을 모두 알아보겠습니다.&lt;br /&gt;두 개의 차이가 궁금하다면 아래 글을 참고 해주세요.&lt;br /&gt;&lt;a href=&quot;https://chancoding.tistory.com/252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Plotly] express와 graph_objects의 차이 / px와 go 차이&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674210735870&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;[Plotly] express와 graph_objects의 차이 / px와 go 차이&quot; data-og-description=&quot;목차 Plotly를 사용해서 그래프를 그리는 방법은 2가지가 있습니다. 한 가지는 express를 사용하는 방법과 graph_objects를 사용하는 방법입니다. 저는 어떨때 express를 쓰고 어떨때 graph_objects를 쓰는 것&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/252&quot; data-og-url=&quot;https://chancoding.tistory.com/252&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBDV5T/hyRloOIXjF/sk8fX7JwKmBrwPkpw0ExoK/img.png?width=708&amp;amp;height=374&amp;amp;face=0_0_708_374,https://scrap.kakaocdn.net/dn/U3jbF/hyRlu2qiH3/rqlhwP3Phvu3jTUMFOSzV1/img.png?width=708&amp;amp;height=374&amp;amp;face=0_0_708_374,https://scrap.kakaocdn.net/dn/goCWG/hyRlqZ0K2m/ulPraESf2uq5vbij39gIDk/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/252&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBDV5T/hyRloOIXjF/sk8fX7JwKmBrwPkpw0ExoK/img.png?width=708&amp;amp;height=374&amp;amp;face=0_0_708_374,https://scrap.kakaocdn.net/dn/U3jbF/hyRlu2qiH3/rqlhwP3Phvu3jTUMFOSzV1/img.png?width=708&amp;amp;height=374&amp;amp;face=0_0_708_374,https://scrap.kakaocdn.net/dn/goCWG/hyRlqZ0K2m/ulPraESf2uq5vbij39gIDk/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Plotly] express와 graph_objects의 차이 / px와 go 차이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 Plotly를 사용해서 그래프를 그리는 방법은 2가지가 있습니다. 한 가지는 express를 사용하는 방법과 graph_objects를 사용하는 방법입니다. 저는 어떨때 express를 쓰고 어떨때 graph_objects를 쓰는 것&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예시 데이터&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예시에서 사용할 기본 데이터입니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import pandas as pd

# 예시 데이터
data = [['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
    [638, 11, 35, 18, 1, 57, 81, 365, 36],
    [774, 16, 38, 19, 2, 68, 96, 411, 34],
    [807, 16, 58, 26, 2, 62, 99, 415, 20],
    [817, 20, 60, 20, 1, 70, 104, 429, 27],
    [768, 18, 53, 22, 6, 67, 108, 404, 46],
    [898, 24, 63, 27, 2, 64, 119, 431, 46],
    [926, 29, 64, 22, 5, 63, 129, 438, 34],
    [928, 17, 53, 29, 7, 59, 127, 458, 49],
    [891, 19, 53, 24, 6, 61, 138, 458, 69],
    [1029, 20, 58, 37, 11, 69, 149, 492, 62]]

df = pd.DataFrame(data[1:], columns=data[0])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;plotly.express를 사용한 bar 그래프&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 막대그래프&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;fig = px.bar(x=[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;], y=[1, 2, 3])

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기초적인 막대그래프를 그리는 방식입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F0uOq/btrWPKHMO0C/XIOCz9gnqpp7hZ3jotktc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F0uOq/btrWPKHMO0C/XIOCz9gnqpp7hZ3jotktc1/img.png&quot; data-alt=&quot;기본 막대 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F0uOq/btrWPKHMO0C/XIOCz9gnqpp7hZ3jotktc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF0uOq%2FbtrWPKHMO0C%2FXIOCz9gnqpp7hZ3jotktc1%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;552&quot; height=&quot;331&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 막대 그래프&lt;/figcaption&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;DataFrame 형식 Bar Graph&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;fig = px.bar(df, title=&quot;판매량 그래프&quot;)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터프래임을 사용해도 쉽게 그래프를 그릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NzYRc/btrWQ4LGZ2e/LRlgETzeCVPWqkoyC0ZeG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NzYRc/btrWQ4LGZ2e/LRlgETzeCVPWqkoyC0ZeG0/img.png&quot; data-alt=&quot;데이터프래임을 사용한 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NzYRc/btrWQ4LGZ2e/LRlgETzeCVPWqkoyC0ZeG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNzYRc%2FbtrWQ4LGZ2e%2FLRlgETzeCVPWqkoyC0ZeG0%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;612&quot; height=&quot;324&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터프래임을 사용한 그래프&lt;/figcaption&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;특정 Column만 선택한 막대그래프&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = px.bar(df, y=['B', 'G', 'I'], title=&quot;판매량 그래프&quot;, height=310)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 column만 선택하려면 &lt;code&gt;y=&lt;/code&gt;을 통해서 원하는 column을 선택하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 그래프 높이를 조절하려면 &lt;code&gt;height&lt;/code&gt; 옵션을 통해 원하는 크기 값을 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MPenS/btrWRW7bJdq/7BDndGRTTc4kmkRXHWJRkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MPenS/btrWRW7bJdq/7BDndGRTTc4kmkRXHWJRkk/img.png&quot; data-alt=&quot;그래프 높이 조정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MPenS/btrWRW7bJdq/7BDndGRTTc4kmkRXHWJRkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMPenS%2FbtrWRW7bJdq%2F7BDndGRTTc4kmkRXHWJRkk%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;609&quot; height=&quot;213&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그래프 높이 조정&lt;/figcaption&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;unstack Bar 그래프 : plotly bar stack 된 것 풀기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = px.bar(df, y=['B', 'G', 'I'], title=&quot;판매량 그래프&quot;, barmode='group')

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;express&lt;/code&gt;를 사용해서 그래프를 그리면 기본적으로 &lt;code&gt;stack&lt;/code&gt;되는 것이 default 옵션입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 unstack 해서 각각의 막대그래프를 그리고 싶으면 &lt;code&gt;barmode&lt;/code&gt; 옵션을 group으로 설정해 주면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9GVE3/btrWQLS8OF9/L41wTl0pJOroCXOmTMKl10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9GVE3/btrWQLS8OF9/L41wTl0pJOroCXOmTMKl10/img.png&quot; data-alt=&quot;plotly unstack bar graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9GVE3/btrWQLS8OF9/L41wTl0pJOroCXOmTMKl10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9GVE3%2FbtrWQLS8OF9%2FL41wTl0pJOroCXOmTMKl10%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;599&quot; height=&quot;327&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;plotly unstack bar graph&lt;/figcaption&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;수평 막대그래프 그리기 Horizontal bar graph&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = px.bar(df, x=['B', 'G', 'I'], title=&quot;판매량 그래프&quot;, orientation='h')
fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수평 막대를 그리려면 orientation 옵션을 &lt;code&gt;h&lt;/code&gt;로 설정하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uaRh1/btrWPIcc1KL/hIY0HER7gz0EpKd2iL03Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uaRh1/btrWPIcc1KL/hIY0HER7gz0EpKd2iL03Ik/img.png&quot; data-alt=&quot;수평 막대 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uaRh1/btrWPIcc1KL/hIY0HER7gz0EpKd2iL03Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuaRh1%2FbtrWPIcc1KL%2FhIY0HER7gz0EpKd2iL03Ik%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;598&quot; height=&quot;329&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수평 막대 그래프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;plotly.graph_objects를 사용한 막대그래프&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 그래프&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = go.Figure()

fig.add_trace(
    go.Bar(x=df.index, y=df['A'], name=&quot;A&quot;)
)

fig.add_trace(
    go.Bar(x=df.index, y=df['H'], name=&quot;H&quot;)
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;graphg_objects&lt;/code&gt;를 사용한 기본적인 그래프 그리는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x, y 축 값에 들어갈 값을 직접 지정을 해줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;df형식의 경우 직접 추가할 column들을 선택해줘야 하는 번거로움이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 기본 형식이 group 막대그래프입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU1a5H/btrWQqPkuN9/kwLqYwQF3a5ScjkBQ4FQQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU1a5H/btrWQqPkuN9/kwLqYwQF3a5ScjkBQ4FQQ1/img.png&quot; data-alt=&quot;graph objects를 사용한 bar graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU1a5H/btrWQqPkuN9/kwLqYwQF3a5ScjkBQ4FQQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU1a5H%2FbtrWQqPkuN9%2FkwLqYwQF3a5ScjkBQ4FQQ1%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;580&quot; height=&quot;296&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;graph objects를 사용한 bar graph&lt;/figcaption&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;막대그래프 쌓기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = go.Figure()

fig.add_trace(
    go.Bar(x=df.index, y=df['A'], name=&quot;A&quot;)
)

fig.add_trace(
    go.Bar(x=df.index, y=df['H'], name=&quot;H&quot;)
)

fig.update_layout(
    barmode='stack'
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;막대그래프가 쌓여있는&amp;nbsp;스택 막대 그래프를 그리려면 &lt;code&gt;fig&lt;/code&gt;객체에서 layout 형식을 바꿔야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkgSCR/btrWQKtaxpT/nDSkVpe6HPTUdcFd7BSYy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkgSCR/btrWQKtaxpT/nDSkVpe6HPTUdcFd7BSYy1/img.png&quot; data-alt=&quot;막대 그래프 쌓기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkgSCR/btrWQKtaxpT/nDSkVpe6HPTUdcFd7BSYy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkgSCR%2FbtrWQKtaxpT%2FnDSkVpe6HPTUdcFd7BSYy1%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;584&quot; height=&quot;292&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;막대 그래프 쌓기&lt;/figcaption&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;수평 막대 그래프&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;fig = go.Figure()

fig.add_trace(
    go.Bar(y=df.index, x=df['A'], name=&quot;A&quot;, orientation='h')
)

fig.add_trace(
    go.Bar(y=df.index, x=df['H'], name=&quot;H&quot;, orientation='h')
)

fig.update_layout(
    barmode='stack',
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;orientation&lt;/code&gt; 옵션을 &lt;code&gt;h&lt;/code&gt;로 바꿔주면 되므로 쉽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 수평 막대그래프이므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;x축과 y축에 들어가는 값이 바뀌&lt;/span&gt;게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x, y 자리를 기존에서 바꿔주어야 한다는 것을 잊지 마세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQGJyU/btrWQIa8Hug/qzzT0J8Eqwg1m0N7rLQUf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQGJyU/btrWQIa8Hug/qzzT0J8Eqwg1m0N7rLQUf1/img.png&quot; data-alt=&quot;horizontal bar graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQGJyU/btrWQIa8Hug/qzzT0J8Eqwg1m0N7rLQUf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQGJyU%2FbtrWQIa8Hug%2FqzzT0J8Eqwg1m0N7rLQUf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;278&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;horizontal bar graph&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 Plotly를 사용해 막대그래프를 그리는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bar Chart 심화 버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/255&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] Plotly 누적 그룹 막대 그래프 그리기 - Stack and Group Bar Chart&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scatter Plot과 Line Plot도 한 번 알아보세요ㅎ&lt;/p&gt;
&lt;figure id=&quot;og_1674211191990&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;[Python] Plotly 그래프  사용법 - Scatter Plot&quot; data-og-description=&quot;Plotly는 매우 쉽고 예쁘고 반응적인 그래프를 그릴 수 있는 라이브러리입니다. 기본적으로 JavaScript를 기반으로 하고 있는 것 같습니다. 파이썬에서 라이브러리를 import해와서 쉽게 사용할 수 있&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/118&quot; data-og-url=&quot;https://chancoding.tistory.com/118&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhIHsi/hyRlvUzc3a/636pyz8N4EGa8kCbyJclO1/img.png?width=664&amp;amp;height=534&amp;amp;face=0_0_664_534,https://scrap.kakaocdn.net/dn/bzjNPp/hyRlptjdUM/JuCZgIUCVkukta2iXHmiX1/img.png?width=664&amp;amp;height=534&amp;amp;face=0_0_664_534,https://scrap.kakaocdn.net/dn/BJNCr/hyRlqFKACX/kXkKWAN44jMIrvXAlwEqc1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/118&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/118&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhIHsi/hyRlvUzc3a/636pyz8N4EGa8kCbyJclO1/img.png?width=664&amp;amp;height=534&amp;amp;face=0_0_664_534,https://scrap.kakaocdn.net/dn/bzjNPp/hyRlptjdUM/JuCZgIUCVkukta2iXHmiX1/img.png?width=664&amp;amp;height=534&amp;amp;face=0_0_664_534,https://scrap.kakaocdn.net/dn/BJNCr/hyRlqFKACX/kXkKWAN44jMIrvXAlwEqc1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly 그래프 사용법 - Scatter Plot&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Plotly는 매우 쉽고 예쁘고 반응적인 그래프를 그릴 수 있는 라이브러리입니다. 기본적으로 JavaScript를 기반으로 하고 있는 것 같습니다. 파이썬에서 라이브러리를 import해와서 쉽게 사용할 수 있&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1674211200012&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;[Python] Plotly 그래프 사용법 - Line Plot&quot; data-og-description=&quot;Plotly를 사용해서 Line plot을 그려보겠습니다. 1. Plotly Express - Lineplot express 객체를 통해서 lineplot을 그릴 수 있습니다. plotly에 있는 기본 데이터를 가져와서 그려보겠습니다. import plotly.express as px df&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/119&quot; data-og-url=&quot;https://chancoding.tistory.com/119&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nh5yY/hyRlw60w6Q/eYy4nRrVKDt5Ch54xvdYZ0/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/bj0jIs/hyRlBN2vyE/xn2jRqkk9JOgdzmLEoO2u0/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/NhAvy/hyRlqFKA5Y/ArFWc6ibf8Eh0DPlbClrHK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/119&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nh5yY/hyRlw60w6Q/eYy4nRrVKDt5Ch54xvdYZ0/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/bj0jIs/hyRlBN2vyE/xn2jRqkk9JOgdzmLEoO2u0/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/NhAvy/hyRlqFKA5Y/ArFWc6ibf8Eh0DPlbClrHK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly 그래프 사용법 - Line Plot&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Plotly를 사용해서 Line plot을 그려보겠습니다. 1. Plotly Express - Lineplot express 객체를 통해서 lineplot을 그릴 수 있습니다. plotly에 있는 기본 데이터를 가져와서 그려보겠습니다. import plotly.express as px df&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1674211210779&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;[Python] Plotly : subplot 만들기의 모든것 - subtitle, type 설정 포함&quot; data-og-description=&quot;목차 Subplot 기본 구조 그리기 make_subplots 함수를 사용해서 서브플롯 생성 rows와 cols 값을 통해서 몇 행, 몇 열로 그래프를 그릴지 설정하면 됨 import plotly.graph_objects as go from plotly.subplots import make_sub&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/229&quot; data-og-url=&quot;https://chancoding.tistory.com/229&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBaGdM/hyRlyKwoYI/jkzZxq384VKVJ95ZRjyTm1/img.png?width=669&amp;amp;height=470&amp;amp;face=0_0_669_470,https://scrap.kakaocdn.net/dn/IQRat/hyRlpNCKPB/SjA2iA6gr3ztHlrsIHeCj1/img.png?width=669&amp;amp;height=470&amp;amp;face=0_0_669_470,https://scrap.kakaocdn.net/dn/boRPCv/hyRlqsdPCt/X3H0K3SPmittqQAP88Bec0/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/229&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/229&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBaGdM/hyRlyKwoYI/jkzZxq384VKVJ95ZRjyTm1/img.png?width=669&amp;amp;height=470&amp;amp;face=0_0_669_470,https://scrap.kakaocdn.net/dn/IQRat/hyRlpNCKPB/SjA2iA6gr3ztHlrsIHeCj1/img.png?width=669&amp;amp;height=470&amp;amp;face=0_0_669_470,https://scrap.kakaocdn.net/dn/boRPCv/hyRlqsdPCt/X3H0K3SPmittqQAP88Bec0/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly : subplot 만들기의 모든것 - subtitle, type 설정 포함&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 Subplot 기본 구조 그리기 make_subplots 함수를 사용해서 서브플롯 생성 rows와 cols 값을 통해서 몇 행, 몇 열로 그래프를 그릴지 설정하면 됨 import plotly.graph_objects as go from plotly.subplots import make_sub&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;</description>
      <category>파이썬/데이터 시각화</category>
      <category>go.Bar</category>
      <category>Graph</category>
      <category>plotly</category>
      <category>plotly bar</category>
      <category>plotly graph</category>
      <category>px.bar</category>
      <category>python</category>
      <category>그래프</category>
      <category>데이터 시각화</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/253</guid>
      <comments>https://chancoding.tistory.com/253#entry253comment</comments>
      <pubDate>Sat, 21 Jan 2023 09:00:04 +0900</pubDate>
    </item>
    <item>
      <title>[Plotly] express와 graph_objects의 차이 / px와 go 차이</title>
      <link>https://chancoding.tistory.com/252</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Plotly를 사용해서 그래프를 그리는 방법은 2가지&lt;/span&gt;가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 가지는 &lt;code&gt;express&lt;/code&gt;를 사용하는 방법과 &lt;code&gt;graph_objects&lt;/code&gt;를 사용하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 어떨때 &lt;code&gt;express&lt;/code&gt;를 쓰고 어떨때 &lt;code&gt;graph_objects&lt;/code&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;난이도 차이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;express&lt;/code&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;처음 Plotly를 사용하거나 초보자에게는 &lt;code&gt;express&lt;/code&gt;를 사용하기를 권장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;graph_objects&lt;/code&gt;를 사용하는 방식은 구성 요소들을 사용자가 직접 조합해서 사용하도록 되어있습니다. 그래서 plotly 객체에 대해 이해하고 데이터 구조와 아키택쳐 맞춰주어야 합니다. 대신 내가 원하는 방식으로 조금씩 바꾸고 강조하는 등의 커스터마이징에 용이합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쉽게 얘기하자면 &lt;code&gt;express&lt;/code&gt;는 &lt;span style=&quot;color: #ee2323;&quot;&gt;완성형 보편적인 그래프&lt;/span&gt;를 그릴 수 있고 &lt;code&gt;graph_objects&lt;/code&gt;는 직접 할게 많아 귀찮지만, &lt;span style=&quot;color: #ee2323;&quot;&gt;커스터마이징이 가능&lt;/span&gt;하다는 것입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;모듈 import와 축약어&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;elm&quot;&gt;&lt;code&gt;import plotly.express as px
import plotly.graph_objects as go&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;plotly&lt;/code&gt; Document에서 추천하는데로 보통 &lt;code&gt;express&lt;/code&gt;는 &lt;code&gt;px&lt;/code&gt;로 줄여서 사용하고 &lt;code&gt;graph_objects&lt;/code&gt;는 &lt;code&gt;go&lt;/code&gt;로 줄여서 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;express 그래프&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;import plotly.express as px

fig = px.line(x=[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;], y=[1,3,2], title=&quot;sample figure&quot;)

fig.show() # 그래프를 보여줌&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x축과 y축에 각각의 값을 넣어주면 간단하게 그래프를 그릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBw1RY/btrWPvX4rKU/vH99K2IC40kdaCrcXal2Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBw1RY/btrWPvX4rKU/vH99K2IC40kdaCrcXal2Q0/img.png&quot; data-alt=&quot;plotly px 예시 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBw1RY/btrWPvX4rKU/vH99K2IC40kdaCrcXal2Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBw1RY%2FbtrWPvX4rKU%2FvH99K2IC40kdaCrcXal2Q0%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;558&quot; height=&quot;326&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;plotly px 예시 그래프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;code&gt;DataFrame&lt;/code&gt; 형식의 데이터를 다룬다면, 데이터프레임을 넣으면 &lt;code&gt;index&lt;/code&gt;와 &lt;code&gt;columns&lt;/code&gt;를 인식해서 쉽게 그래프를 그려줍니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import pandas as pd

# 예시 데이터
data = [['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
    [638, 11, 35, 18, 1, 57, 81, 365, 36],
    [774, 16, 38, 19, 2, 68, 96, 411, 34],
    [807, 16, 58, 26, 2, 62, 99, 415, 20],
    [817, 20, 60, 20, 1, 70, 104, 429, 27],
    [768, 18, 53, 22, 6, 67, 108, 404, 46],
    [898, 24, 63, 27, 2, 64, 119, 431, 46],
    [926, 29, 64, 22, 5, 63, 129, 438, 34],
    [928, 17, 53, 29, 7, 59, 127, 458, 49],
    [891, 19, 53, 24, 6, 61, 138, 458, 69],
    [1029, 20, 58, 37, 11, 69, 149, 492, 62]]

df = pd.DataFrame(data[1:], columns=data[0])

fig = px.scatter(df)
fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 왼쪽은 df의 데이터이고 오른쪽은 px를 사용한 그래프입니다.&lt;br /&gt;x축 y축을 따로 지정하거나 값을 넣지 않았음에도 index, value와 variable까지 자동으로 잡아서 그래프를 그려줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W6O4o/btrWP9UhSW8/CqKzKOOzPXUORfE8mxddt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W6O4o/btrWP9UhSW8/CqKzKOOzPXUORfE8mxddt0/img.png&quot; data-alt=&quot;예시 데이터와 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W6O4o/btrWP9UhSW8/CqKzKOOzPXUORfE8mxddt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW6O4o%2FbtrWP9UhSW8%2FCqKzKOOzPXUORfE8mxddt0%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;887&quot; height=&quot;287&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예시 데이터와 그래프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;graph_objects 그래프&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(
    go.Scatter(x=[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;], y=[1,3,2])
)

fig.update_layout(
    title=&quot;sample figure&quot;,
    xaxis_title=&quot;X&quot;,
    yaxis_title=&quot;y&quot;
)

fig.show() # 그래프를 보여줌&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;graph_object&lt;/code&gt;를 사용해서 &lt;code&gt;px.line&lt;/code&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;code&gt;Figure&lt;/code&gt; 객체를 먼저 선언합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 &lt;code&gt;fig&lt;/code&gt;에 원하는 &lt;code&gt;graph&lt;/code&gt;를 넣어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 &lt;code&gt;title&lt;/code&gt;이나 다른 기타 설정을 잡아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;express&lt;/code&gt;를 사용할 때에는 한 줄이면 될 것을 &lt;code&gt;go&lt;/code&gt;를 사용하니 3줄에 걸쳐서 작성하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;DataFrame&lt;/code&gt;을 사용할 경우 더욱 복잡해집니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import plotly.graph_objects as go

fig = go.Figure()

for col in df.columns:
    fig.add_trace(
        go.Scatter(x=df.index, y=df[col], mode='markers', name=col)
    )

fig.update_layout(
    xaxis_title=&quot;index&quot;,
    yaxis_title=&quot;value&quot;,
    legend_title=&quot;variable&quot;
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 column들을 &lt;code&gt;add_trace&lt;/code&gt;로 추가해줘야해서 &lt;code&gt;for&lt;/code&gt;문을 돌아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 특이하게 &lt;span style=&quot;color: #006dd7;&quot;&gt;Scatter 그래프임에도 기본 설정에 line이 들어있어서 &lt;code&gt;mode='markers'&lt;/code&gt;를 넣어줘야 합&lt;/span&gt;니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 왜 graph_objects를 사용하면 더 귀찮고 불편한지 느껴지시죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;grarph_objects를 사용하는 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 애기한 것처럼 express를 사용하면 범용적인 설정만 바꿀 수 있습니다.&lt;br /&gt;반면 다양하게 원하는 방식대로 바꿀 수 있다는 것이 graph object의 장점이겠죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 첫 번째 그래프처럼 &lt;span style=&quot;color: #ee2323;&quot;&gt;이중축을 사용하는 그래프&lt;/span&gt;를 그린다던지&lt;br /&gt;두 번째 그래프처럼 &lt;span style=&quot;color: #ee2323;&quot;&gt;특정 시점을 기준으로 혹은 특정 막대만 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;색상을 바꿔 강조를 하는 등의 효과&lt;/span&gt;를 넣어줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 그래프를 넘어 그래프 시각화를 자세하게 하려면 graph objects를 사용해서 그래프를 그려야합니다~&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JBAUi/btrWQHQCKPE/OGJ8ZxpA7ENWLdaAB8PZOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JBAUi/btrWQHQCKPE/OGJ8ZxpA7ENWLdaAB8PZOk/img.png&quot; data-alt=&quot;이중축 그래프 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JBAUi/btrWQHQCKPE/OGJ8ZxpA7ENWLdaAB8PZOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJBAUi%2FbtrWQHQCKPE%2FOGJ8ZxpA7ENWLdaAB8PZOk%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;640&quot; height=&quot;202&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;202&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-origin-width=&quot;708&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxSaXv/btrWQdP02Vg/4VHCKJdkCzAIf5EJZvAUKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxSaXv/btrWQdP02Vg/4VHCKJdkCzAIf5EJZvAUKk/img.png&quot; data-alt=&quot;특정시점 막대 색상 변경 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxSaXv/btrWQdP02Vg/4VHCKJdkCzAIf5EJZvAUKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxSaXv%2FbtrWQdP02Vg%2F4VHCKJdkCzAIf5EJZvAUKk%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;488&quot; height=&quot;258&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;특정시점 막대 색상 변경 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 개의 그래프에 대한 코드는 아래 글에 있어요~&lt;/p&gt;
&lt;figure id=&quot;og_1674208427941&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;Plotly를 사용한 파이썬 시각화 using 코로나 데이터셋&quot; data-og-description=&quot;안녕하세요. 오늘은 plotly를 사용해서 데이터 시각화 및 EDA를 진행했던 내용을 포스팅하려고 합니다. plotly는 쉽게 사용할 수 있으면서도 matplotlib보다 더 예쁘고 인터랙티브 한 자료를 만들 수 있&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/96&quot; data-og-url=&quot;https://chancoding.tistory.com/96&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MKKyQ/hyRlw0cBn2/MZbG5pZux1RHAiOW230t90/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/cIfacm/hyRlDZtTtf/JJCj54AbBkdU0OVIyr6KGk/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/mKT6p/hyRlw6YnOb/QdMbsRthA6yrn6HspbZ6W0/img.png?width=1409&amp;amp;height=713&amp;amp;face=0_0_1409_713&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/96&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MKKyQ/hyRlw0cBn2/MZbG5pZux1RHAiOW230t90/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/cIfacm/hyRlDZtTtf/JJCj54AbBkdU0OVIyr6KGk/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/mKT6p/hyRlw6YnOb/QdMbsRthA6yrn6HspbZ6W0/img.png?width=1409&amp;amp;height=713&amp;amp;face=0_0_1409_713');&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;Plotly를 사용한 파이썬 시각화 using 코로나 데이터셋&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 오늘은 plotly를 사용해서 데이터 시각화 및 EDA를 진행했던 내용을 포스팅하려고 합니다. plotly는 쉽게 사용할 수 있으면서도 matplotlib보다 더 예쁘고 인터랙티브 한 자료를 만들 수 있&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;여러분의 필요에 맞게 plotly를 활용해서 그래프를 그려보시면 좋습니다.&lt;br /&gt;matplotlib 보다 훨씬 예쁘고 사용성도 좋으며, 인터랙티브한 효과들도 많아 활용성이 좋습니다.&lt;/p&gt;</description>
      <category>파이썬/데이터 시각화</category>
      <category>Express</category>
      <category>go</category>
      <category>graph_objects</category>
      <category>plotly</category>
      <category>plotly express와 graph_objects의 차이</category>
      <category>plotly graph</category>
      <category>PX</category>
      <category>데이터시각화</category>
      <category>파이썬 시각화</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/252</guid>
      <comments>https://chancoding.tistory.com/252#entry252comment</comments>
      <pubDate>Fri, 20 Jan 2023 18:57:05 +0900</pubDate>
    </item>
    <item>
      <title>성공하지 못하는 7가지 이유 - 하와이대저택, 게리바이너척</title>
      <link>https://chancoding.tistory.com/250</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;게리바이너척의 강연의 내용인 성공하지 못하는 이유에 관한 내용을 하와이 대저택 님이 다뤄주었다.&lt;br /&gt;원래 영상에서는 8가지이지만, 내가 이해한 7가지에 대해서만 적어보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 남의 시선을 의식한다.&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주변에서 자신을 부러워하는 모습을 보고 싶어 한다.&lt;br /&gt;그래서 대부분 멍청한 것들을 산다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남에게 보여주기 위해서 명품을 사고 차를 산다.&lt;br /&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 절대 부자가 될 수 없는 바로 그 직업을 버리지 못한다.&lt;/b&gt;&lt;/h2&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;남들에게 보여주기를 좋아하고 부모님도 그 직장 간판을 좋아하기 때문에 그 직업을 버리지 못한다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 없어 보이는 것은 하기 싫어한다.&lt;/b&gt;&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 부모님으로부터 부자가 될 수 없는 방법을 배운다.&lt;/b&gt;&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 세상을 바라보는 관점이 다르다.&lt;/b&gt;&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. 인내와 겸손은 모르고 한 번에 부자가 되고자 한다.&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엄청난 유산의 상속과 로또에 당첨은 99.9% 일어나지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 내가 도전하려는 것들이 남들은 하지 않으려는 일인지,&lt;br /&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;7. 독하게 하지도 않고 그렇게 할 생각도 안 한다.&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇 명 안 되는 고객이 남긴 열댓 개의 댓글에도 답장을 달지 않으면서, 고객이 얼마 없다고 불평한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무리 소수의 팔로워에게라도 집중해라.&lt;br /&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;br /&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;생각&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나만의 사업을 해보고 싶고 책도 써보고 싶다. 새로운 것들을 배우고 더 많은 것을 배우기 위해 이직도 도전하고 싶다. 입사와 동시에 이직하겠다고 다짐하고 주변에 얘기하였으나, 2년째 열심히 회사를 위해 일하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모짐이 자랑스러워하는 대기업 다니는 아들이라는 타이틀을 버리지 못하고 있다. 현재 직무에서 IT 직무 또는 업종으로 옮기고 싶다. 많은 기회와 배울 것이 있다면 스타트업도 가보고 싶다. 하지만, 실상 원서를 넣어보지는 않았다.&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;7년 후 오늘도 나는 지금 있는 그 위치에 여전히 그렇게 앉아있을 것인가?&lt;/b&gt;&lt;/p&gt;</description>
      <category>생각 마인드</category>
      <category>게리바이너척</category>
      <category>성공</category>
      <category>성공하지 못하는 이유</category>
      <category>인생</category>
      <category>하와이안대저택</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/250</guid>
      <comments>https://chancoding.tistory.com/250#entry250comment</comments>
      <pubDate>Tue, 10 Jan 2023 21:08:31 +0900</pubDate>
    </item>
    <item>
      <title>Pandas DataFrame 성능 빠르게하기 - apply말고 Vectorization쓰자</title>
      <link>https://chancoding.tistory.com/248</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
      
  });
&lt;/script&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;데이터 분석을 위해 Data Preprocessing 과정을 진행하는 과정을 필수적으로 거치게됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 가공을 &lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;진행하다보면&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;진행하다 보면&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar6&quot; data-grammar-focus=&quot;false&quot;&gt;진행하다보면&lt;/span&gt; 여러 Column들을 연산하여 수정하거나 새로운 데이터를 만드는 과정을 수행합니다.&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;code&gt;for문 반복&lt;/code&gt; 혹은 &lt;code&gt;itterator&lt;/code&gt;를 사용한 방법은 비효율적인 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보통 apply &amp;amp; applymap 등을 많이 이용&lt;/b&gt;해서 코드를 작성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 데이터가 많아지니, &lt;b&gt;더 빠르게 계산할 수 있는 방법은 Numpy를 최대한 활용기 + &lt;code&gt;Vectorization&lt;/code&gt;입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본적으로 Numpy Array를 활용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 연산도 Numpy Array를 활용하면 더욱 빨라집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터프레임의 Series의 &lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;경우 .values 와&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;경우. values와&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar7&quot; data-grammar-focus=&quot;false&quot;&gt;경우 &lt;code&gt;.values&lt;/code&gt; 와&lt;/span&gt; &lt;code&gt;to_numpy()&lt;/code&gt;를 사용해서 &lt;code&gt;ndarray&lt;/code&gt; 형태로 데이터를 바꿀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 판다스의 연산들도 &lt;code&gt;ndarray&lt;/code&gt;를 활용하면 연산 속도 개선이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트 데이터 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;import numpy as np
import pandas as pd

data = [[np.random.randint(1_000_000) for _ in range(2)] for _ in range(1_000_000)]
df = pd.DataFrame(data, columns=['X', 'Y'])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 연산 속도 비교&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20230102165714540.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qrNqK/btrVfsNIzSK/yExZQf0KdBGQusxvyuK9E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qrNqK/btrVfsNIzSK/yExZQf0KdBGQusxvyuK9E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qrNqK/btrVfsNIzSK/yExZQf0KdBGQusxvyuK9E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqrNqK%2FbtrVfsNIzSK%2FyExZQf0KdBGQusxvyuK9E1%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;932&quot; height=&quot;386&quot; data-filename=&quot;image-20230102165714540.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;386&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(번외 참고) 메모리를 효율적으로 활용하려면 query를 사용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;pandas&lt;/code&gt;의 query는 &lt;code&gt;&lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;df.loc[&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;df.loc [&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar8&quot; data-grammar-focus=&quot;false&quot;&gt;df.loc[&lt;/span&gt; pd.eval( &amp;hellip; ) ]&lt;/code&gt;와 동일한 결과를 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리를 사용하면 numpy에 비해 속도 측면에서 성능이 떨어지지만 메모리 효율을 높일 수 있다.&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;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;있어야한다.&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;있어야 한다.&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar9&quot; data-grammar-focus=&quot;false&quot;&gt;있어야한다.&lt;/span&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;query를 사용하면 각 row마다 헌 번에 모든 조건을 검사해 메모리를 효율적으로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건식이 복잡하고 데이터가 클수록 더 좋은 효과를 &lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;가지게된다.&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;가지게 된다.&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar10&quot; data-grammar-focus=&quot;false&quot;&gt;가지게된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20230102170135487.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnIbe/btrVe3AC7kB/w3IBNak3hR31BTUPOqVbYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnIbe/btrVe3AC7kB/w3IBNak3hR31BTUPOqVbYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnIbe/btrVe3AC7kB/w3IBNak3hR31BTUPOqVbYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnIbe%2FbtrVe3AC7kB%2Fw3IBNak3hR31BTUPOqVbYk%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;507&quot; height=&quot;118&quot; data-filename=&quot;image-20230102170135487.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test 결과상에는 17.3ms로 ndarray를 활용한 것보다 2배 이상의 시간이 소요된 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리를 위해 시간효율을 조금 &lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;양보해야하는&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;양보해야 하는&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar11&quot; data-grammar-focus=&quot;false&quot;&gt;양보해야하는&lt;/span&gt; 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reference : &lt;a href=&quot;https://yahwang.github.io/posts/85&quot;&gt;https://yahwang.github.io/posts/85&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Vectorization 함수 백터화 하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numpy의 decorator를 사용해서 함수를 백터화 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 그냥 함수와 다르게 numpy 형태로 함수를 적용할 수 있도록 만들어줍니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import numpy as np
import time

def strange_calc(v):
    return (1.8 * v + 32) / 7 ** 3 // 17 % 9

np.vectorize
def strange_calc_vectorized(v):
    return (1.8 * v + 32) / 7 ** 3 // 17 % 9


start = time.perf_counter()
df['X'].apply(strange_calc)
df['Y'].apply(strange_calc)
print(time.perf_counter() - start)

start = time.perf_counter()
strange_calc_vectorized(df['X'])
strange_calc_vectorized(df['Y'])
print(time.perf_counter() - start)

&amp;gt;&amp;gt;&amp;gt;
0.6138590999998996
0.1986875999991753&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 &lt;code&gt;apply&lt;/code&gt;를 통해 함수를 적용하는 것과 비교했을 때 2배 이상 빨라진 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;pandas&lt;/code&gt;의 경우 최대한 &lt;code&gt;numpy&lt;/code&gt;의 vector 계산을 활용하면 전반적인 성능을 최대로 끌어낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2019년에 PYCON에서 발표한 자료에 따르면 단순 for문과 비교해서 632배 속도가 증가했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;.apply&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;. apply&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar12&quot; data-grammar-focus=&quot;false&quot;&gt;.apply&amp;nbsp;&lt;/span&gt;대비 218배 속도가 빨라진 것을 확인할 수 있었다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 많아지고 연산이 복잡해질수록 &lt;span data-grammar=&quot;{&amp;quot;input&amp;quot;:&amp;quot;백터화한&amp;quot;,&amp;quot;output&amp;quot;:&amp;quot;백터 화한&amp;quot;,&amp;quot;etype&amp;quot;:&amp;quot;space&amp;quot;}&quot; data-grammar-id=&quot;grammar13&quot; data-grammar-focus=&quot;false&quot;&gt;백터화한&lt;/span&gt; 계산과의 성능차이가 더욱더 벌어질 것이므로 적극적으로 활용하면 좋습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=0Vm9Yi_ig58&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/b0RPbQ/hyQ6WlExky/iuXOD9es7Tft9IaonfKJ21/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=108_498_156_550&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/0Vm9Yi_ig58&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;pycon 2019 영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>apply 빠르게</category>
      <category>np.vetorization</category>
      <category>NumPy</category>
      <category>pandas</category>
      <category>pandas apply</category>
      <category>pandas 백터화</category>
      <category>pandas 성능개선</category>
      <category>pandas 속도</category>
      <category>백터화</category>
      <category>판다스</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/248</guid>
      <comments>https://chancoding.tistory.com/248#entry248comment</comments>
      <pubDate>Mon, 2 Jan 2023 19:55:14 +0900</pubDate>
    </item>
    <item>
      <title>EPS와 PER이 무엇이며, 수익률에 미치는 영향은 ?</title>
      <link>https://chancoding.tistory.com/247</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주식을 공부하는 주린이에게 있어 EPS는 무엇이고 PER은 무엇인지 생소하셨을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 EPS와 PER이 무엇인지 알아보고 왜 이 값이 중요한지, 마지막으로 그럼 PER이 앞으로의 수익률에 어떻게 영향을 미칠지 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. EPS 주당순이익&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EPS = 순이익 / 주식발행수 = 주당 순이익&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EPS는 주식 한 주당 발생하는 순이익을 뜻하는 말입니다.&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;1개의 주식이 가지는 순이익의 량을 의미하므로, EPS가 큰 기업일수록 주식 개수 대비 순수 이익금이 크다는 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, EPS가 단순하게 크다고 좋은 기업이라고 보기는 어려울 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 순이익 1000억, 주식 1000억 주, 주가 1000원인 A 회사가 있습니다. 그리고 순이익 2000억, 주식 1000억 주, 주가 4000원인 회사 B가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 회사의 EPS = 1000억 원 / 1000억 주 = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B 회사의 EPS = 2000억 원 / 1000억 주 = 2&lt;/p&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 회사의 EPS가 높습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순하게 EPS만 보면 B 회사가 좋은 회사로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지만 여기서 우리에게 중요한 것을 &lt;code&gt;그래서 주가가 더 오를 것인가?이지&lt;/code&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;A 회사는 EPS가 1이지만 주당 가격은 1000원입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B 회사는 EPS가 2이지만 주당 가격은 4000원입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B 회사의 EPS가 2배이지만 가격은 4배 비싸죠.&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;그래서 EPS와 주가를 함께 고려해서 비교하는 지표가 다음에 나오는 PER입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. PER 주가수익비율&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER = 시가총액 / 순이익&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 주가 x 주식발행수 / 순이익&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 주가 / (순이익 / 주식발생수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 주가 / 주당순이익 = 주가 / EPS&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;따라서 주당순이익(EPS) 대비 주가가 저렴한 것을 사면 좋을 것 같습니다 :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 맞는 주식이 바로 PER이 낮은 주식 이겠죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EPS는 크고 주가는 저렴하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER = 주가 (낮음) / EPS (높음)&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분자가 작고 분모가 크니 PER 값이 낮은 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. PER이 수익률에 미치는 영향&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 우리가 생각하는 앞으로 주가가 오를 것이라 판단되는 주식은 PER이 낮은 주식들이라고 말씀드렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 PER 주식들이 그렇다면 정말로 수익률이 좋을 것인가? 확인을 통해 알아봐야겠죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백테스트를 할 수 있는 다양한 툴 중 10 분위 테스트를 할 수 있는 툴, 퀀터스라는 서비스가 있습니다.&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;b&gt;결론만 말씀드리자면, 저 PER 주식이 고 PER 주식에 비해 수익률이 장기적으로 매우 좋았습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER이 수익률에 미치는 영향에 대해서 알아보고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퀀터스에 대한 내용 + 10 분위 테스트가 무엇인지에 대한 내용에 대해서 궁금하시다면 아래 게시글을 확인해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/246&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[퀀터스] 퀀트 투자 팩터의 신뢰성 검증(1) - 10분위 테스트 - PER,PBR,PSR,POR&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671891064104&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;[퀀터스] 퀀트 투자 팩터의 신뢰성 검증(1) - 10분위 테스트 - PER,PBR,PSR,POR&quot; data-og-description=&quot;목차 잡설이 조금 길어 바로 결과를 보고 싶으시면, 목차에서 &amp;quot;1.PER 팩터 검증&amp;quot; 누르면 바로 이동됩니다. 퀀터스 간단 소개 퀀트킹과 젠포트를 이어 새롭게 출시된 백테스트 및 포트폴리오를 출&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/246&quot; data-og-url=&quot;https://chancoding.tistory.com/246&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cLmvY2/hyQZE6wlMU/gun89CUjBDYVbv8rkzwq2K/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/kd4Df/hyQ1dTM1BD/tXlPdeF4XeUqDpjOz0OH0K/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/b4jKlG/hyQ1fRBhvG/kavSSB2ksslSKeVCOUKqH1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/246&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/246&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cLmvY2/hyQZE6wlMU/gun89CUjBDYVbv8rkzwq2K/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/kd4Df/hyQ1dTM1BD/tXlPdeF4XeUqDpjOz0OH0K/img.png?width=800&amp;amp;height=603&amp;amp;face=0_0_800_603,https://scrap.kakaocdn.net/dn/b4jKlG/hyQ1fRBhvG/kavSSB2ksslSKeVCOUKqH1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[퀀터스] 퀀트 투자 팩터의 신뢰성 검증(1) - 10분위 테스트 - PER,PBR,PSR,POR&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 잡설이 조금 길어 바로 결과를 보고 싶으시면, 목차에서 &quot;1.PER 팩터 검증&quot; 누르면 바로 이동됩니다. 퀀터스 간단 소개 퀀트킹과 젠포트를 이어 새롭게 출시된 백테스트 및 포트폴리오를 출&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;지금까지 EPS(주당순이익)과 PER(주가수익률)에 대해서 알아보는 시간을 가졌습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/syW7v/btrUukqrNm7/QI85HCKBKPV8OEHkMXdCQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/syW7v/btrUukqrNm7/QI85HCKBKPV8OEHkMXdCQ1/img.png&quot; data-alt=&quot;PER 계산 수식 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/syW7v/btrUukqrNm7/QI85HCKBKPV8OEHkMXdCQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsyW7v%2FbtrUukqrNm7%2FQI85HCKBKPV8OEHkMXdCQ1%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;380&quot; height=&quot;265&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PER 계산 수식 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다들 투자에 대해 열심히 공부해서 좋은 성과가 있으면 좋겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 내용은 제가 공부해서 작성한 내용이며, 투자 권유 및 추천은 절대 아닙니다! 투자의 책임의 본인의 몫!&lt;/p&gt;</description>
      <category>투자/Quant &amp;amp; BackTest</category>
      <category>eps</category>
      <category>PER</category>
      <category>백테스트</category>
      <category>수익률</category>
      <category>저PER</category>
      <category>주당순이익</category>
      <category>주당순이익률</category>
      <category>주린이</category>
      <category>퀀터스</category>
      <category>투자</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/247</guid>
      <comments>https://chancoding.tistory.com/247#entry247comment</comments>
      <pubDate>Sat, 24 Dec 2022 23:12:15 +0900</pubDate>
    </item>
    <item>
      <title>[퀀터스] 퀀트 투자 팩터의 신뢰성 검증(1) - 10분위 테스트 - PER,PBR,PSR,POR</title>
      <link>https://chancoding.tistory.com/246</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
      if($('.another_category').length &gt; 0) { toc.find('li:last').remove(); }
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잡설이 조금 길어 바로 결과를 보고 싶으시면, 목차에서 &quot;1.PER 팩터 검증&quot; 누르면 바로 이동됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;퀀터스 간단 소개&lt;/b&gt;&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;10 분위 테스트와 팩터 검증&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퀀터스에 있는 기능 중 하나가 10분위 테스트이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10분위 테스트는 선택한 지표에 따라 10개의 그룹으로 나누어 실험하는 것을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 PER 낮은 것에 대해 10 분위 테스트를 진행하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER 낮은 10%에 투자하는 것이 1 분위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER 가장 높은 10%에 투자하는 것이 10 분위가 되도록 10개 그룹으로 나눈 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 각 10개 그룹의 백테스트 결과를 파일로 제공하여 비교 및 분석을 진행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10분위 테스트를 할 수 있다는 것과 결과물을 파일로 제공하는 덕분에 데이터 활용의 편의성을 제공하는 것은 퀀터스의 장점이라고 할 수 있겠다.&lt;/p&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;오늘은 PER, PBR, PSR, POR를 시작으로 팩터를 검증 예정이다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;BackTest 설정&lt;/b&gt;&lt;/h2&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;거래 수수료 : 1%&amp;nbsp; &amp;lt;-- 슬리피지를 고려해 러프하게 잡았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리밸런싱 기간 : 분기별&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작일 : 2003년 01.01&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종료일 : 20022년 12월 언젠가&amp;nbsp; &amp;lt;-- 테스트 언제 하느냐에 따라 하루 이틀씩 달라질 수 있으므로.. ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;비교용 데이터&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비교 데이터로 사용할 Tiger 200 / Tiger 코스닥 150 수익률이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근 1년은 내리막 길만 있었네.. 후 훌쩍..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RMRka/btrT4JjwdlR/4DmKUDFcQstWKiIraLZVkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RMRka/btrT4JjwdlR/4DmKUDFcQstWKiIraLZVkK/img.png&quot; data-alt=&quot;최근 3, 6, 12개월 수익률&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RMRka/btrT4JjwdlR/4DmKUDFcQstWKiIraLZVkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRMRka%2FbtrT4JjwdlR%2F4DmKUDFcQstWKiIraLZVkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;253&quot; height=&quot;105&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최근 3, 6, 12개월 수익률&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. PER 팩터 검증&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER 지표 검증 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PER 낮은 순서를 사용하여 1st Group이 PER 가장 낮은 10%에 해당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연평균 수익률이 약 22% 정도로 상당히 우수한 결과를 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 기간뿐만 아니라&amp;nbsp;3M / 6M / 1Y 등의 전반적인 구간의 수익률 또한&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개월, 6개월, 12개월 수익률은 KOSPI 200 지수에 비해 좋지 않은 것이 조금 아쉬운 부분이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sr1Bc/btrT5rvR2ek/SWDQeVnJr8KoXV2Bfnb0Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sr1Bc/btrT5rvR2ek/SWDQeVnJr8KoXV2Bfnb0Mk/img.png&quot; data-alt=&quot;PER 팩터 10분위 검증 결과표&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sr1Bc/btrT5rvR2ek/SWDQeVnJr8KoXV2Bfnb0Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsr1Bc%2FbtrT5rvR2ek%2FSWDQeVnJr8KoXV2Bfnb0Mk%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;903&quot; height=&quot;681&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;681&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PER 팩터 10분위 검증 결과표&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRTWh/btrT4JqeyXu/lbOXNkkzvQjRNrGIil7pzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRTWh/btrT4JqeyXu/lbOXNkkzvQjRNrGIil7pzK/img.png&quot; data-alt=&quot;PER 팩터 10분위 수익률 비교차트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRTWh/btrT4JqeyXu/lbOXNkkzvQjRNrGIil7pzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRTWh%2FbtrT4JqeyXu%2FlbOXNkkzvQjRNrGIil7pzK%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;823&quot; height=&quot;594&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PER 팩터 10분위 수익률 비교차트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. PBR 팩터 검증&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUhLVS/btrTZyDiRIj/lNnj8UrWrcAyQLTq3dtqWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUhLVS/btrTZyDiRIj/lNnj8UrWrcAyQLTq3dtqWk/img.png&quot; data-alt=&quot;PBR 팩터 10분위 검증 결과표&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUhLVS/btrTZyDiRIj/lNnj8UrWrcAyQLTq3dtqWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUhLVS%2FbtrTZyDiRIj%2FlNnj8UrWrcAyQLTq3dtqWk%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;901&quot; height=&quot;681&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;681&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PBR 팩터 10분위 검증 결과표&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwpblP/btrTXLXdJzS/qJWTq2ekLs44v47kZLZVkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwpblP/btrTXLXdJzS/qJWTq2ekLs44v47kZLZVkk/img.png&quot; data-alt=&quot;PBR 팩터 10분위 수익률 비교차트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwpblP/btrTXLXdJzS/qJWTq2ekLs44v47kZLZVkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwpblP%2FbtrTXLXdJzS%2FqJWTq2ekLs44v47kZLZVkk%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;839&quot; height=&quot;596&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;596&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PBR 팩터 10분위 수익률 비교차트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. PSR 팩터 검증&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djHF7z/btrT6YNv088/02VvLUUCs1nxV9RR9aECjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djHF7z/btrT6YNv088/02VvLUUCs1nxV9RR9aECjK/img.png&quot; data-alt=&quot;PSR 팩터 10분위 검증 결과표&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djHF7z/btrT6YNv088/02VvLUUCs1nxV9RR9aECjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjHF7z%2FbtrT6YNv088%2F02VvLUUCs1nxV9RR9aECjK%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;902&quot; height=&quot;679&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;679&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PSR 팩터 10분위 검증 결과표&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느 정도 상위 그룹의 수익률이 상대적으로 하위 그룹보다 좋은 경향을 가지는 것을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 최근 3개월 6개월의 경우에는 경향은 있지만 차이가 많이 줄어든 것으로 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEzTvD/btrT4QQmo1D/SckHhSNcn0i3LnYbH6JsjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEzTvD/btrT4QQmo1D/SckHhSNcn0i3LnYbH6JsjK/img.png&quot; data-alt=&quot;PSR 팩터 10분위 수익률 비교차트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEzTvD/btrT4QQmo1D/SckHhSNcn0i3LnYbH6JsjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEzTvD%2FbtrT4QQmo1D%2FSckHhSNcn0i3LnYbH6JsjK%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;842&quot; height=&quot;597&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PSR 팩터 10분위 수익률 비교차트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. POR 팩터 검증&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y0TfD/btrT6dD9WkR/CSKnPJYtd4MfPNE591fpI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y0TfD/btrT6dD9WkR/CSKnPJYtd4MfPNE591fpI0/img.png&quot; data-alt=&quot;POR 팩터 10분위 검증 결과표.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y0TfD/btrT6dD9WkR/CSKnPJYtd4MfPNE591fpI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy0TfD%2FbtrT6dD9WkR%2FCSKnPJYtd4MfPNE591fpI0%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;902&quot; height=&quot;683&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;POR 팩터 10분위 검증 결과표.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;595&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XHTlU/btrT2QXVRXH/cVYSMHg61Eb1kEkGkRMBrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XHTlU/btrT2QXVRXH/cVYSMHg61Eb1kEkGkRMBrk/img.png&quot; data-alt=&quot;POR 팩터 10분위 수익률 비교차트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XHTlU/btrT2QXVRXH/cVYSMHg61Eb1kEkGkRMBrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXHTlU%2FbtrT2QXVRXH%2FcVYSMHg61Eb1kEkGkRMBrk%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;842&quot; height=&quot;595&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;595&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;POR 팩터 10분위 수익률 비교차트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 전체적인 결과 리뷰&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 기간에 대해서는 확연하게 1 분위 그룹들의 수익률이 10 분위에 비해서 수익률이 좋은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 최근 3~12 개월에는 그러한 경향성이 많이 줄어든 것으로 보인다.&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~12 개월 수익률이 코스피 200과 코스닥 150에 비해서 좋지 않은 결과를 보여주고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자/Quant &amp;amp; BackTest</category>
      <category>PBR</category>
      <category>PER</category>
      <category>por</category>
      <category>psr</category>
      <category>Quant</category>
      <category>주식투자</category>
      <category>퀀터스</category>
      <category>퀀트</category>
      <category>퀀트킹</category>
      <category>팩터투자</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/246</guid>
      <comments>https://chancoding.tistory.com/246#entry246comment</comments>
      <pubDate>Mon, 19 Dec 2022 22:57:03 +0900</pubDate>
    </item>
    <item>
      <title>좋은 습관을 무의식에 각인시키기</title>
      <link>https://chancoding.tistory.com/245</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
      if($('.another_category').length &gt; 0) { toc.find('li:last').remove(); }
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 의지력이란..&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나쁜 습관을 없애고 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;좋은 습관을 들이기 위해서는 상당한 의지력이 필요&lt;/span&gt;&lt;/b&gt;하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의지력은 게임에서의 mp와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 의지를 가지고 행동하는 모든 것들은 의지력을 소모한다.&lt;br /&gt;따라서, 의지력을 소모하는 모든 행동들은 Active Skill이라 생각할 수 있다.&lt;br /&gt;친구 만나기, 헬스장 가기, 독서하기, 공부하기, 청소하기 등 어떤 행동을 하게 되면 모두 의지력이 소모된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 인간의 뇌와 의지력&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;인간의 뇌는 변화를 싫어해서, 현재 상태를 유지하려는 특성이 있다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;그래서 개인차이는 있지만, 사람들이 가진 의지력은 크지 않으며 의지력 자체를 높이는 것 또한 쉽지 않다.&lt;br /&gt;신년마다 다짐하는 &quot;헬스장 가기&quot;, &quot;독서하기&quot;, &quot;매일 책상 정리하기&quot; 등의 행동들은 많은 의지력을 소모한다.&lt;br /&gt;그런데, 사람들은 새해를 맞이하면, 많은 목표를 새우고 한 번에 다 실행하려고 한다.&lt;br /&gt;그렇게 며칠 되지 않아서 포기하게 되는 것이다.&lt;br /&gt;100 만큼의 의지력을 가진 사람이 일과 도중 30만큼 써버렸다면, 그날 저녁엔 헬스장 가기(mp 쓸 수 없는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 의지력 소모를 줄이는 방법&lt;/b&gt;&lt;/h2&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;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;의지력을 가지고 해야하는 일이 있다면, 무리하지 않고 아주 쉬운 것부터 목표로 잡는 것이 좋다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헬린이가 매일 팔굽혀펴기 100회를 하겠다고 선언하면, 작심 3일이 될 확률이 다분하다.&lt;br /&gt;목표를 매일 팔굽혀펴기 1개 하기를 목표로 잡으면 목표를 실패할 확률은 지극히 낮다.&lt;br /&gt;목표를 지속적으로 성취하다 보면 자신감이 붙어 점점 갯수를 늘려나갈 것이다.&lt;br /&gt;그렇게 계속 팔 굽혀 펴기를 더 이상 팔굽혀펴기는 의지력을 소모하지 않게된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Active Skill에서 Passive Skill로 바뀌어 하나의 좋은 습관이 몸에 익어가는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 습관화가 되기까지..&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영국 런던대 필리파 랠리 교수팀의 연구에 의하면, 인&lt;b&gt;간의 뇌는 충분히 반복돼 시냅스가 형성되기 전까지는 강한 저항&lt;/b&gt;을 일으킨다고 발표했다. 그 이유는 안하던 행동을 입력해 놓을 기억 세포가 형성되지 않았기 때문이라고 밝혔다. 이러한 거부반응이 많은 의지력을 소모하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, 위의 설명처럼 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;작은 것부터 의지력 소모가 줄어든다. 꾸준하게 '원래 하지 않던 행동'을 수행하면, 그 행동이 시냅스에 기억되고 뇌에 받아들여지는데, 여기에 필요한 시간이 최소 21일&lt;/b&gt;&lt;/span&gt;이 걸린다고 한다. 21일이 동안 꾸준히 하면 습관화가 되는 것이다. 그렇다면 더 이상 의지력이 소모하지 않는 것인가? 그렇지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 무의식에 각인되기 까지는..&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 의지력을 소모하지 않고 행동하기 위해서는 진정한 습관이 되어야 한다.&lt;br /&gt;습관이라고 얘기하는 것은 무의식적인 행동을 말한다.&lt;br /&gt;무의식적으로 손톱을 물어뜯는 다던지, 아침마다 커피를 마신다던지, 운동화를 구겨 신는 다던지 이러한 것들이 습관이다. &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;의지력을 소모하지 않기 위해서는 21일을 넘어 완전히 무의식에 각인시키기 위해서는 90일간 꾸준히 행동해야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2009년 '유럽 사회심리학 저널'에 의하면, 특정한 행동을 매일 같은 시간에 하게 한 실험을 진행했다.&lt;br /&gt;해당 실험에 의하면, 특정 습관이 완전히 각인될 때까지 소요된 평균 기간이 12주였다고 한다. 따라서 90일은 해야 무의식에 완전히 각인되어 자신의 습관이 되는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;women-gcd8f9d34b_640.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pTWwO/btrTSMT6V2m/krmF49jilHkadWlMkYtgkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pTWwO/btrTSMT6V2m/krmF49jilHkadWlMkYtgkk/img.jpg&quot; data-alt=&quot;열심히 달리는 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pTWwO/btrTSMT6V2m/krmF49jilHkadWlMkYtgkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpTWwO%2FbtrTSMT6V2m%2FkrmF49jilHkadWlMkYtgkk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;297&quot; data-filename=&quot;women-gcd8f9d34b_640.jpg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;열심히 달리는 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. 마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의지력과 습관화, 무의식에 각인이라는 세 가지의 키워드를 바탕으로 습관을 들이는 방법에 대해서 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 내용들을 바탕으로 요약해보자면 다음과 같은 Process이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목표 기대치를 아주 작게 낮춘다.&lt;/li&gt;
&lt;li&gt;아주 작은 목표를 달성한다.&lt;/li&gt;
&lt;li&gt;성취감을 원동력으로 꾸준하게 이어나간다.&lt;/li&gt;
&lt;li&gt;21일이 되면 줄어든 거부감만큼 목표치를 점차 높여나간다.&lt;/li&gt;
&lt;li&gt;꾸준하게 목표를 달성해 90일을 넘긴다.&lt;/li&gt;
&lt;li&gt;무의식에 각인된 습관이 형성된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 2022년이 끝나가고 어느덧 2023년이 다가오고 있다. 23년의 새해 다짐을 어떻게 이루어내고 좋은 습관들을 익힐 것인지 고민해보는 시간을 가져야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 읽는 누군가도 좋은 습관을 들여 긍정적으로 성장하게 되기를 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 글은 많은 긍정적인 영향을 받은 하와이 대저택님의 '그냥 이것만 보시면 됩니다. 무의식 바꾸기 EP03'과 즐겨보는 너진똑 채널의 '습관 책 10권 읽고 '핵심'만 정리한 영상'과 의 내용을 바탕으로 작성되었습니다.&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;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=8gdfERW650c&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bLZNTI/hyQUUHwkwg/pr4E97DR4KhnZBkuYxPskK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/8gdfERW650c&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=YNO7dC650B8&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/b9akXD/hyQU1GDC4o/kQDXGvll5PnvtNKsIdC7dk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=658_110_1094_212&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/YNO7dC650B8&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>생각 마인드</category>
      <category>21일</category>
      <category>90일</category>
      <category>꾸준하게</category>
      <category>무의식</category>
      <category>성장하기</category>
      <category>습관</category>
      <category>습관화</category>
      <category>신년다짐</category>
      <category>좋은 습관</category>
      <category>좋은습관들이기</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/245</guid>
      <comments>https://chancoding.tistory.com/245#entry245comment</comments>
      <pubDate>Fri, 16 Dec 2022 22:42:31 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파일 및 폴더 디렉토리 삭제하는 법 총정리</title>
      <link>https://chancoding.tistory.com/244</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 게시글을 통해 파이썬을 사용해서 파일 및 폴더를 삭제하는 방법에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 파일을 삭제하는 방법 : &lt;code&gt;os.remove&lt;/code&gt; &amp;amp; &lt;code&gt;os.unlink&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;디렉토리 삭제 방법 : &lt;code&gt;os.rmdir&lt;/code&gt; &amp;amp; &lt;code&gt;os.removedir&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;디렉토리와 내부 파일을 모두 삭제하는 방법 : &lt;code&gt;shutil.rmtree&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Error 대처 방법&lt;/li&gt;
&lt;li&gt;전체 정리 소스코드&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. File 삭제 방법&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;os.remove('file_path')
os.unlink('file_path')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;file_path&lt;/code&gt; 부분에 &lt;code&gt;&quot;E:/Data/Combine/History&quot;&lt;/code&gt; 이와 같은 절대 경로 혹은 &lt;code&gt;&quot;Combine/History&quot;&lt;/code&gt; 이와 같은 상대 경로를 모두 인식할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;os.remove&lt;/code&gt;와 &lt;code&gt;os.unlink&lt;/code&gt;는 같은 의미로 사용되며, 같은 기능을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;unlink&lt;/code&gt;가 UNIX 환경에서 더 적합하다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Directory 삭제 방법 / Folder 삭제 방법&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;os.rmdir('empty_directory_path')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;os&lt;/code&gt; 모듈을 사용해서 디렉토리를 삭제할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;empty_directory_path&lt;/code&gt; 부분에 삭제할 경로의 주소를 적어주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;os.rmdir&lt;/code&gt;의 경우 &lt;b&gt;빈 디렉토리만 삭제할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하위 디렉토리 혹은 파일이 존재하면 삭제되지 않고 Error를 발생시킵니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 파일과 디렉토리 모두 삭제 방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더와 내부의 파일들을 모두 삭제하기 위해서는 &lt;code&gt;shutil&lt;/code&gt; 모듈을 사용하면 편하게 할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;xl&quot;&gt;&lt;code&gt;import shutil

shutil.rmtree('directory_path')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;directory_path&lt;/code&gt; 부분에 원하는 폴더의 주소를 넣어주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 하위 폴더 및 dirs 모두 삭제됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 오류 대처 방법&lt;/b&gt;&lt;/h2&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.1 파일 존재 여부 확인&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;os.path.exists('file_path')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무조건 &lt;code&gt;os.remove&lt;/code&gt;를 사용하면 파일이 존재하지 않을 때, 오류를 발생할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로 &lt;code&gt;exist&lt;/code&gt;를 통해서 해당 파일이 존재하는지 먼저 체크하면 방지할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.2 파일인지 확인하기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;os.path.isfile('file_path')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;os.path.isfile&lt;/code&gt;을 사용해서 file인지 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 directory인 경우 &lt;code&gt;os.remove&lt;/code&gt;를 수행하면 에러를 발생시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 먼저 파일인지 확인 후 제거해주는 것도 좋은 방법입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.3 디렉토리인지 확인하기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;os.path.isdir('directory_path')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리인지 확인하고 지우면, 파일 제거와 구분해서 사용할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.4 try - except 문 사용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이굳이 확인하기 귀찮다면 try - except 문을 사용해서 삭제하면 됩니다.&lt;br /&gt;try - except 문을 사용하는 것이 도 Pythonic 한 방법이라고하니 기호에 맞게 사용하시면 되겠습니다.&lt;/p&gt;
&lt;pre class=&quot;isbl&quot;&gt;&lt;code&gt;file_path = &quot;E:/Data/Combine/History/test.txt&quot;

try:
    os.remove(file_path)
except:
    print('파일이 없는데용 ㅇㅅㅇ??')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 종합 소스 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;import os
import shutil

file_path = &quot;E:/Data/Combine/History/test.txt&quot;
dir_path = &quot;E:/Data/Combine/History&quot;

def delete(path):
    if os.path.isfile(path):
        os.remove(path)
    elif os.path.isdir(path):
        shutil.rmtree(path)
    else:
        raise ValueError(&quot;해당 경로를 확인해주세요&quot;)

delete(file_path)
delete(dir_path)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 코드로 작성해서 파일인 경우와 디렉토리인 경우 모두 문제 없이 삭제할 수 있도록 할 수 있습니다.&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>os.remove</category>
      <category>python delete</category>
      <category>python 삭제</category>
      <category>shutil.rmtree</category>
      <category>파이썬</category>
      <category>파이썬 디렉토리 삭제</category>
      <category>파이썬 삭제</category>
      <category>파이썬 파일삭제</category>
      <category>파일삭제</category>
      <category>파일폴터삭제</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/244</guid>
      <comments>https://chancoding.tistory.com/244#entry244comment</comments>
      <pubDate>Tue, 13 Dec 2022 16:20:16 +0900</pubDate>
    </item>
    <item>
      <title>[vscode] html 확장자 인식 안될 때, html 자동완성 안될때 해결방법</title>
      <link>https://chancoding.tistory.com/243</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode를 사용하다보면 가끔 html 확장자 인식이 안되는 경우가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확장자 인식이 안되면 html 자동완성 기능 또한 사용이 안되는 경우가 발생해 매우 불편합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 사진과 같이 html이 인식이 안되면 보통 아이콘에서 부터 차이가 발생합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WjWfz/btrSwbWVybM/vMSPipzYDAZQhfVjOk6UN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WjWfz/btrSwbWVybM/vMSPipzYDAZQhfVjOk6UN1/img.png&quot; data-alt=&quot;vscode html 파일 인식 안된 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WjWfz/btrSwbWVybM/vMSPipzYDAZQhfVjOk6UN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWjWfz%2FbtrSwbWVybM%2FvMSPipzYDAZQhfVjOk6UN1%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;166&quot; height=&quot;180&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vscode html 파일 인식 안된 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 가끔 이러면 불편해서 기록해서 남겨 놓았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 문제를 겪고 있다면 아래 순서에 따라 한 번 수행해보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 설정으로 이동&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qIP2Z/btrSwTuuqAh/6PwKcCkkmp5gdsYeXHwr7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qIP2Z/btrSwTuuqAh/6PwKcCkkmp5gdsYeXHwr7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qIP2Z/btrSwTuuqAh/6PwKcCkkmp5gdsYeXHwr7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqIP2Z%2FbtrSwTuuqAh%2F6PwKcCkkmp5gdsYeXHwr7K%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;308&quot; height=&quot;391&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 아래에 &lt;code&gt;톱니바퀴 누르기 -&amp;gt; 설정&lt;/code&gt; 또는 단축키 &lt;code&gt;Ctrl + ,&lt;/code&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. file associations에 html 항목 추가&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-1. file associations 검색&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tVb2K/btrSyhOZngu/lbN1xEK9JGoahfDEZd7xC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tVb2K/btrSyhOZngu/lbN1xEK9JGoahfDEZd7xC1/img.png&quot; data-alt=&quot;설정 값 넣는 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tVb2K/btrSyhOZngu/lbN1xEK9JGoahfDEZd7xC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtVb2K%2FbtrSyhOZngu%2FlbN1xEK9JGoahfDEZd7xC1%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;679&quot; height=&quot;368&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;설정 값 넣는 예시&lt;/figcaption&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;2-2. 항목 추가 클릭&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-3. 항목에 *.html 을 넣고 값에 html을 넣고 추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 칸에 &lt;code&gt;*.html&lt;/code&gt;&lt;br /&gt;두 번째 칸에 &lt;code&gt;html&lt;/code&gt; 을 넣고 추가하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 완료. 확장자 인식이 되는지 확인하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 아래와 같이 아이콘도 정상으로 돌아온 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 vscode가 html확장자 인식을 성공하면&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-origin-width=&quot;114&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rpbvx/btrStRxKDKv/dYRNkOIkpobY8e7oRLVcC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rpbvx/btrStRxKDKv/dYRNkOIkpobY8e7oRLVcC0/img.png&quot; data-alt=&quot;vscode html 확장자 인식 됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rpbvx/btrStRxKDKv/dYRNkOIkpobY8e7oRLVcC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frpbvx%2FbtrStRxKDKv%2FdYRNkOIkpobY8e7oRLVcC0%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;114&quot; height=&quot;70&quot; data-origin-width=&quot;114&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vscode html 확장자 인식 됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Javascript</category>
      <category>html</category>
      <category>vscode</category>
      <category>vscode 설정</category>
      <category>vscode 확장자 인식 안됨</category>
      <category>확장자 인식</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/243</guid>
      <comments>https://chancoding.tistory.com/243#entry243comment</comments>
      <pubDate>Wed, 30 Nov 2022 23:49:52 +0900</pubDate>
    </item>
    <item>
      <title>[동기부여] 무의식에 저장해야할 마인드 셋팅</title>
      <link>https://chancoding.tistory.com/242</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
      if($('.another_category').length &gt; 0) { toc.find('li:last').remove(); }
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 피해자처럼 굴지 말라.&lt;/b&gt;&lt;/h2&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;나는 불쌍해라고 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 말은 끌어당김의 원칙에 따라서 그대로 이루어져서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그들은 불쌍해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 편안한 정도에 머무르며 살지 말라&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부자가 되고 싶다면 절대로 편안한 정도의 머무르며 살지&amp;nbsp;말라&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하브 에커의 편안함에 대한 일화&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;challenge-g09b46ee1a_640.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bipTvn/btrPQ4F3dl9/WFRhWztkbTxSrgxrLWx7DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bipTvn/btrPQ4F3dl9/WFRhWztkbTxSrgxrLWx7DK/img.png&quot; data-alt=&quot;역경을 견디는 사나이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bipTvn/btrPQ4F3dl9/WFRhWztkbTxSrgxrLWx7DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbipTvn%2FbtrPQ4F3dl9%2FWFRhWztkbTxSrgxrLWx7DK%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;509&quot; height=&quot;358&quot; data-filename=&quot;challenge-g09b46ee1a_640.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;역경을 견디는 사나이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편안한 것도 나름대로 좋았다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소한 기분 전환 삼아 그럴싸한 레스토랑의 식사하러 갈 수 있었다&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;사실 경제적으로 편안한 정도의 사람들은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가격표가 있는 메뉴판에 오른쪽을 보면서 무얼 먹을지 결정한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 저녁에 뭘 먹고 싶어 7달러 95센트짜리 이걸 먹을래&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 뭔지 보자 와 놀라워라 닭고기잖아&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 주에 벌써 19번째 먹는 닭고기 요리다&lt;/p&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;시가&lt;/b&gt;...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호기심이 생겨도 그 음식 가격이 얼마냐고 물어보지도 못한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 원하는 것에 집중하라&lt;/b&gt;&lt;/h2&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;부자는 원하는 것에 집중하는 반면에&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가난한 사람들은 원하지 않는 것에 집중한다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;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;그 많은 장애물들을 어떻게 처리해야 하는지가 가장 큰 문제다.&lt;/p&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;b&gt;당신의 시선이가 있는 곳이 당신 인생에서 커지게 되어있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 부자에게 감탄하라&lt;/b&gt;&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 큰 사람이 돼라&lt;/b&gt;&lt;/h2&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;b&gt;부자들은 그들의 문제보다 크고&amp;nbsp;&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;작은 사람일때는 큰 문제일지라도 큰 사람이 되면 작은 문제가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제의 크기는 결코 문제가 아니다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중요한 건 자기 자신이라는 사람의 크기이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삶의 커다란 문제가 있다면 그것은 당신이 작은 사람이라는 뜻이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 크기를 쳐다보지 말고 &lt;b&gt;당신의 크기를 쳐다보라&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;전체 요약 필수 정독&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1배속으로 끝까지 듣기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=yQPAJaioxA4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/W4esZ/hyQn2msXtW/yATWt61udpcJtBuNiK0WDk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=100_162_322_404&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/yQPAJaioxA4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;느낀 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머리를 띵 맞은 것 같은 느낌을 받으며, 가장 와닿는 내용은 &quot;2. 편안한 정도에 머무르지 말라&quot; 부분이었다.&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;편안한 수준에 살 것인가...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20대 가장 불편하고 힘들게 성장해야할 나이에 그러하지 못한 것이 새삼 후회스럽다.&lt;/p&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;a href=&quot;https://chancoding.tistory.com/241&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[동기부여] 마인드, 즉 태도의 중요성&lt;/a&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;편안한 정도에 머무르지 말자.&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;</description>
      <category>생각 마인드</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/242</guid>
      <comments>https://chancoding.tistory.com/242#entry242comment</comments>
      <pubDate>Tue, 1 Nov 2022 05:10:29 +0900</pubDate>
    </item>
    <item>
      <title>[동기부여] 마인드, 즉 태도의 중요성</title>
      <link>https://chancoding.tistory.com/241</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;태도란..?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;어떤 일이나 상황 따위를 대하는 마음가짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 contenteditable=&quot;true&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;투자에 있어서 무엇이 가장 중요한가?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마인드가 가장 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;책에 소개된 일화&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z6Wn3/btrP0HvvAm1/0m5KjxqyA5Rf3e6axfGfE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z6Wn3/btrP0HvvAm1/0m5KjxqyA5Rf3e6axfGfE1/img.png&quot; data-alt=&quot;월급쟁이 부자로 은퇴하라 책표지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z6Wn3/btrP0HvvAm1/0m5KjxqyA5Rf3e6axfGfE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ6Wn3%2FbtrP0HvvAm1%2F0m5KjxqyA5Rf3e6axfGfE1%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;218&quot; height=&quot;296&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;월급쟁이 부자로 은퇴하라 책표지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;부동산에는 말이 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러니 일을 보려면 결국 내가 직접 현장에 나가야 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;좋아진 온라인 환경 덕분에 많은 사람이 현장에 중요성을 있는 것 같다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 아무리 인터넷이 발달한다고 해도 실시간으로 모든 지역의 모습과 소식 분위기를 생생하게 확인하기란 어렵다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;부동산 중개인과 전화 통화로 확인할 수 있는 것도 많지만&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그들의 목적이 거래를 성사시키는 것이라는 걸 고려한다면&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;중개인의 이야기 모두를 신뢰할 수만도 없다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그리고 상식적으로 생각해보라 몇 천원짜리 몇 만원짜리 물건을 살 때도&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;미리 보고 저리 보고 하는데 몇 억짜리 물건을 사면서 대충 보고 살 수 있겠는가&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;무슨 일이든 그 일에 임하는 사람의 태도가 중요하다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;태도가 결과와 큰 상관이 없어 보여도&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;나는 그것들 하나하나가 모여 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;나중에 중요한 차이를 만든다고 믿는다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그동안 잘 몰랐던 부동산 투자를 진정 잘하고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;싶고이를 통해 돈을 벌고 싶다면 &lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;무엇보다 그 일에 진지하게 임해야한다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;지난 3년간 낮에는 회사일 밤과&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주말엔 부동산 투자 생활을 이어가는게&amp;nbsp;&lt;/span&gt;&lt;span&gt;쉬운 일은 아니었다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;회사생활만으로도 쉽지 않은 상황에서 지치지 않는게 더 이상하지 않은가&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;너무 피곤해서 입술이 터지고 눈이 충혈되는 일도 잦았다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;목이나 어깨가 아픈 건 예사였다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;발바닥이 부르트고 발톱이 빠진 적도 있었다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;투자를 시작하고 첫 여름을 맞았던 해 얼굴이 금세 시커멓게 타 회사 동료들까지 건강을 걱정해줬다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;장마철에 목욕탕에서 방금 나온 것처럼 발가락이 불고 흠뻑 젖은 양말로 집을 보러 남의 집에 들어가는게 민망해 늘 수건을 가지고 다녔다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;지방의 임장을 갔다 올라오던 길에는 고속도로 휴게소에서 잠시 쉬려고 눈을 붙였다가&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내리 4시간을 골아 떨어져 잔 적도 있다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;추운 겨울에도 졸지 않으려고 창문을 열고 내달렸다 그렇게 아내와 아이가 기다리는 집에 돌아가 잠시 눈을 붙인&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;후 바로 출근하는 삶에 연속이었다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;만약 당신에게 어떤 일이 쉽게 느껴진다면 당신은 그 전부터 그것을 잘하기 위해 열심히 노력했을 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p contenteditable=&quot;true&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그게 아니라면 당신은 그저 그 일을 잘한다고 착각하고 있는 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;유튜브 하와이 대저택님의 영상&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;어떤 걸 원하거나 잘하고&amp;nbsp;&lt;/span&gt;&lt;span&gt;싶다면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;정말 그걸 잘 알고 잘하고 싶다는&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마인드 태도를 가져야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래 영상 필히 정독 1배속 필요&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=MMFM6gQOo6g&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/czd8b0/hyQpvN4QTY/Pjl5iQT2lHBMz3kW8o5Cj0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/MMFM6gQOo6g&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>생각 마인드</category>
      <category>동기부여</category>
      <category>마음가짐</category>
      <category>마인드셋</category>
      <category>마인트</category>
      <category>태도</category>
      <category>태도의 중요성</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/241</guid>
      <comments>https://chancoding.tistory.com/241#entry241comment</comments>
      <pubDate>Sun, 30 Oct 2022 23:31:45 +0900</pubDate>
    </item>
    <item>
      <title>ETH Goerli Faucet - Testnet 토큰 받기 - Alchemy 회원가입방법</title>
      <link>https://chancoding.tistory.com/240</link>
      <description>&lt;p data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    var toc = $(&quot;#toc&quot;)
    toc.toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
      if($('.another_category').length &gt; 0) { toc.find('li:last').remove(); }
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ETH 네트워크를 통해서 Testnet에서 개발을 하거나 테스트를 진행할 때에도 이더리움이 필요하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 ETH Goerli 테스트넷의 무료 테스트넷 코인을 받는 방법에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Alchemy 회원가입&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_221023_faucet.jpg&quot; data-origin-width=&quot;1231&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kTmaQ/btrPgCiU98Y/tGUBTIKJVdh7i010klvE8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kTmaQ/btrPgCiU98Y/tGUBTIKJVdh7i010klvE8K/img.png&quot; data-alt=&quot;Goerli Faucet main page&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kTmaQ/btrPgCiU98Y/tGUBTIKJVdh7i010klvE8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkTmaQ%2FbtrPgCiU98Y%2FtGUBTIKJVdh7i010klvE8K%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;665&quot; height=&quot;256&quot; data-filename=&quot;edited_221023_faucet.jpg&quot; data-origin-width=&quot;1231&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Goerli Faucet main page&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ETH Geoli Faucet 자금을 받기 위해서 이제는 Alchemy에 회원가입을 진행해야합니다.&lt;br /&gt;기존에는 그냥 받을 수 있었으나, 악의적인 공격때문에 바뀐 것 같네요&lt;br /&gt;Alchemy 회원가입 링크 : &lt;a href=&quot;https://alchemy.com/?r=e67bcbcf8b8b7485&quot;&gt;https://alchemy.com/?r=e67bcbcf8b8b7485&lt;/a&gt; 로 이동해서 회원가입을 진행하겠습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1666494137960&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Alchemy - the web3 development platform&quot; data-og-description=&quot;Whether you're a beginner developer, startup, web3 market leader, or a large enterprise, Alchemy makes multichain web3 development easy with reliable and scalable node infrastructure, enhanced APIs, and developer tools. Get started for free!&quot; data-og-host=&quot;www.alchemy.com&quot; data-og-source-url=&quot;https://alchemy.com/?r=e67bcbcf8b8b7485&quot; data-og-url=&quot;https://www.alchemy.com/?r=e67bcbcf8b8b7485&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ryDcf/hyQax8nLQx/7mApQvwU322scA3VYJXOuk/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot;&gt;&lt;a href=&quot;https://alchemy.com/?r=e67bcbcf8b8b7485&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://alchemy.com/?r=e67bcbcf8b8b7485&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ryDcf/hyQax8nLQx/7mApQvwU322scA3VYJXOuk/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&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;Alchemy - the web3 development platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Whether you're a beginner developer, startup, web3 market leader, or a large enterprise, Alchemy makes multichain web3 development easy with reliable and scalable node infrastructure, enhanced APIs, and developer tools. Get started for free!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.alchemy.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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1-1. Get Started&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RWzUl/btrPneHxh3e/2ccGGwLTUAboJAtgNcuGKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RWzUl/btrPneHxh3e/2ccGGwLTUAboJAtgNcuGKK/img.png&quot; data-alt=&quot;Alchemy Main Page&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RWzUl/btrPneHxh3e/2ccGGwLTUAboJAtgNcuGKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRWzUl%2FbtrPneHxh3e%2F2ccGGwLTUAboJAtgNcuGKK%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;700&quot; height=&quot;329&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Alchemy Main Page&lt;/figcaption&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;1-2. 이메일 넣기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;email 인증은 해야하므로, 사용하는 이메일 주소를 넣어주도록 합니다.&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-origin-width=&quot;658&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsvqLo/btrPgFmqbxg/NkbKHsycLm8TbwkKN0Gtdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsvqLo/btrPgFmqbxg/NkbKHsycLm8TbwkKN0Gtdk/img.png&quot; data-alt=&quot;alchmy signup page&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsvqLo/btrPgFmqbxg/NkbKHsycLm8TbwkKN0Gtdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsvqLo%2FbtrPgFmqbxg%2FNkbKHsycLm8TbwkKN0Gtdk%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;232&quot; height=&quot;320&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alchmy signup page&lt;/figcaption&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;1-3. 기본 사용 설문 진행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증을 완료하면 4~5개 정도의 간단한 설문조사를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 직접 만들고 build할 경우에 대한 내용이므로 크게 신경쓰지 않고 대충 선택해도됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 그냥 Faucet만 받으면 되므로&amp;nbsp;아무거나 클릭클릭 다음 해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 아래 질문 Plan은 무료를 선택해야겠죠.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXI7H4/btrPjk2OfFi/qlTLPW4NAi0KHcFTWVjVOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXI7H4/btrPjk2OfFi/qlTLPW4NAi0KHcFTWVjVOK/img.png&quot; data-alt=&quot;alchemy plan selection&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXI7H4/btrPjk2OfFi/qlTLPW4NAi0KHcFTWVjVOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXI7H4%2FbtrPjk2OfFi%2FqlTLPW4NAi0KHcFTWVjVOK%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;323&quot; height=&quot;227&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alchemy plan selection&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신용카드 정보 또한 넣을 필요가 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래에 &quot;skip for now&quot;를 클릭해서 넘어가주세요.&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-origin-width=&quot;776&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GXpJX/btrPgKOXG5v/yaCWywJGgbZ3q7aC76z3ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GXpJX/btrPgKOXG5v/yaCWywJGgbZ3q7aC76z3ok/img.png&quot; data-alt=&quot;credit skip&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GXpJX/btrPgKOXG5v/yaCWywJGgbZ3q7aC76z3ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGXpJX%2FbtrPgKOXG5v%2FyaCWywJGgbZ3q7aC76z3ok%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;484&quot; height=&quot;442&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;credit skip&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Goerli&amp;nbsp; ETH 받기&lt;/b&gt;&lt;/h2&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;a href=&quot;https://goerlifaucet.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://goerlifaucet.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1666494175311&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Goerli Faucet&quot; data-og-description=&quot;A fast and reliable Ethereum Goerli testnet faucet for blockchain developers.&quot; data-og-host=&quot;goerlifaucet.com&quot; data-og-source-url=&quot;https://goerlifaucet.com/&quot; data-og-url=&quot;https://goerlifaucet.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://goerlifaucet.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://goerlifaucet.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Goerli Faucet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A fast and reliable Ethereum Goerli testnet faucet for blockchain developers.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;goerlifaucet.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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2-1. Goerli Faucet으로 이동 후 alchemy 로그인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alchemy 로그인도 진행해 주도록 합니다.&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-origin-width=&quot;1192&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nopCz/btrPgoSUvQf/hcParKpfcw5YA2WjUJBHuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nopCz/btrPgoSUvQf/hcParKpfcw5YA2WjUJBHuk/img.png&quot; data-alt=&quot;Goerli Wallet Address 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nopCz/btrPgoSUvQf/hcParKpfcw5YA2WjUJBHuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnopCz%2FbtrPgoSUvQf%2FhcParKpfcw5YA2WjUJBHuk%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;664&quot; height=&quot;333&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Goerli Wallet Address 입력&lt;/figcaption&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;2-2. Test Net ETH 받기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 지갑 주소를 넣는 칸에 본인의 메타마스크 주소를 입력하면 0.1 개의 Georli ETH를 받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일매일 받을 수 있는데, 정확하게는 24시간 마다 받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;받은 후 24시간 뒤에 또 Send Me ETH 를 누르면 0.1개를 받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ETH를 계속 받아놓으면 Test할 때 활용할 수도 있으며, 다른 Layer2 Testnet으로 Bridge를 통해서 이동하는 등 활용 방안이 다양하게 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글로는 zkSync Layer2 Token 발행시 에어드랍을 위한 글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Goerli ETH를 zkSync Testnet으로 Bridge해서 이동할 예정입니다. 관심 있으시면 아래 글을 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/239&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chancoding.tistory.com/239&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>블록체인</category>
      <category>alchemy</category>
      <category>ETH</category>
      <category>Faucet</category>
      <category>goerli eth</category>
      <category>goerli testnet</category>
      <category>zksync</category>
      <category>무료 ETH</category>
      <category>에어드랍</category>
      <category>이더리움</category>
      <category>이더리움 테스트넷</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/240</guid>
      <comments>https://chancoding.tistory.com/240#entry240comment</comments>
      <pubDate>Sun, 23 Oct 2022 12:09:27 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 자바스크립트 AND, OR 연산의 특징 및 활용</title>
      <link>https://chancoding.tistory.com/238</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;AND 연산 ( &amp;amp;&amp;amp; )&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 알고있는 AND OR 연산자 결과&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;console.log(true &amp;amp;&amp;amp; true) // true
console.log(true &amp;amp;&amp;amp; false) // false
console.log(false &amp;amp;&amp;amp; true) // false
console.log(false &amp;amp;&amp;amp; false) // false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서도 다른 프로그램과 똑같은 연산 결과를 얻을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 여기에 조금 특이한 JS만의 연산 방식이 있습니다.&lt;/p&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;code&gt;A &amp;amp;&amp;amp; B&lt;/code&gt; 라는 연산을 진행하는데 있어서 &lt;code&gt;A&lt;/code&gt;가 &lt;code&gt;true&lt;/code&gt;라면 AND연산 결과는 &lt;code&gt;B&lt;/code&gt;가 어떤 값인지에 따라 달라지게됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;B&lt;/code&gt;가 &lt;code&gt;true&lt;/code&gt;면 결과는 &lt;code&gt;true&lt;/code&gt; &lt;code&gt;B&lt;/code&gt;가 &lt;code&gt;false&lt;/code&gt;면 결과도 &lt;code&gt;false&lt;/code&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;그래서 JS에서는 만약 &lt;code&gt;A&lt;/code&gt;부분의 첫 번째 인자가 &lt;code&gt;true&lt;/code&gt;이면 결과로 &lt;code&gt;B&lt;/code&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;code&gt;A&lt;/code&gt;가 &lt;code&gt;false&lt;/code&gt;라면 &lt;code&gt;B&lt;/code&gt;값을 볼 필요 없이 무조건 결과는 &lt;code&gt;false&lt;/code&gt;이겠죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로 &lt;code&gt;A&lt;/code&gt;가 &lt;code&gt;false&lt;/code&gt;인 결과라면 &lt;code&gt;A&lt;/code&gt;값을 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OR 연산 ( || )&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OR 연산도 논리가 유사합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;console.log(true || true) // true
console.log(true || false) // true
console.log(false || true) // true
console.log(false || false) // false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;A || B&lt;/code&gt; 라는 연산을 진행하는데 있어서 &lt;code&gt;A&lt;/code&gt;가 &lt;code&gt;true&lt;/code&gt;라면 OR연산 결과는 &lt;code&gt;B&lt;/code&gt;가 어떤 값인지에 상관없이 무조건 &lt;code&gt;true&lt;/code&gt;값을 가지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 OR 연산은 &lt;code&gt;A&lt;/code&gt;가 &lt;code&gt;true&lt;/code&gt; 값이면 &lt;code&gt;A&lt;/code&gt;를 바로 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, &lt;code&gt;A&lt;/code&gt;가 &lt;code&gt;false&lt;/code&gt;라면 결과는 &lt;code&gt;B&lt;/code&gt;값에 따라 달라집니다. 따라서 &lt;code&gt;A&lt;/code&gt;가 &lt;code&gt;false&lt;/code&gt;이면 무조건 &lt;code&gt;B&lt;/code&gt;값을 출력합니다. &lt;code&gt;B&lt;/code&gt;가 결과를 결정하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JS 에서의 AND, OR 연산의 특징&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 그것이 어떻다는 것인지 궁금하실 것입니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;console.log(0 &amp;amp;&amp;amp; undefiend) // 0
console.log(null &amp;amp;&amp;amp; false) // null&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;0&lt;/code&gt;과 &lt;code&gt;null&lt;/code&gt;은 논리 값이 &lt;code&gt;false&lt;/code&gt;에 해당되는 값입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 위의 AND 연산을 진행할 때, &lt;code&gt;A&lt;/code&gt;인자의 값이 &lt;code&gt;false&lt;/code&gt;인 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;code&gt;B&lt;/code&gt;값에 상관없이 결과가 바뀌지 않고 &lt;code&gt;A&lt;/code&gt;값을 그대로 출력합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;console.log('123' || NaN) // '123'
console.log(null || false) // false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'123'은 논리 값이 &lt;code&gt;true&lt;/code&gt;에 해당되므로 OR연산 결과는 무조건 &lt;code&gt;true&lt;/code&gt;에 해당됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 결과 출력은 '123'을 그대로 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, &lt;code&gt;null&lt;/code&gt;은 논리값이 &lt;code&gt;false&lt;/code&gt;이므로 &lt;code&gt;B&lt;/code&gt; 부분의 값에 따라 결과가 결정됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, &lt;code&gt;B&lt;/code&gt; 부분의 값을 그대로 내보냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JavaScript의 연산 특징 활용&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;console.log(&quot;Coding&quot; || &quot;Study&quot;) // Coding&lt;/code&gt;&lt;/pre&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjzPJv/btrOQpLdI0F/8obnxc43Azk21uopY5Uzqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjzPJv/btrOQpLdI0F/8obnxc43Azk21uopY5Uzqk/img.png&quot; data-alt=&quot;js or 연산 활용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjzPJv/btrOQpLdI0F/8obnxc43Azk21uopY5Uzqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjzPJv%2FbtrOQpLdI0F%2F8obnxc43Azk21uopY5Uzqk%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;369&quot; height=&quot;193&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;js or 연산 활용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 함수를 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 값을 받으면 해당 값을 출력하고 전혀 입력이 없으면 미리 정해놓은 값을 출력하게 하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function printSubject(state) {
    const msg = state || 'Python';

    console.log(msg)
}

printSubject() // Python
printSubject('Javascript') // Javascript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;연산자 우선순위&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1666245822616&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(true || false &amp;amp;&amp;amp; false); // true
console.log((true || false) &amp;amp;&amp;amp; false); // false

console.log('Study' || NaN &amp;amp;&amp;amp; false); // Study
console.log(('Study' || NaN) &amp;amp;&amp;amp; false); // false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AND 와 OR 연산자 사이에서는 &lt;span style=&quot;color: #ee2323;&quot;&gt;AND 연산자의 우선순위가 더 높다&lt;/span&gt;는 것을 주의해야합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;||&amp;nbsp; 연산 뒤에&amp;nbsp; &amp;amp;&amp;amp;&amp;nbsp; 연산을 사용할 경우 의도와는 다르게 뒤의 &amp;amp;&amp;amp; 연산이 먼저 이루어져 다른 결과를 출력할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&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;이처럼 JavaScript는 다른 언어와 다르게 유연한 코딩이 가능하고 특이한 사항들이 많으니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 디테일한 부분들을 잘 알아놓으면 유용하게 활용할 수도 있고 의도치 않은 에러를 발생시키지 않을 수 있을 것 같네요.&lt;/p&gt;</description>
      <category>Javascript</category>
      <category>and or 연산</category>
      <category>JS</category>
      <category>js and</category>
      <category>js or</category>
      <category>js 논리연산</category>
      <category>js 논리연산 특징</category>
      <category>자바스크립트</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/238</guid>
      <comments>https://chancoding.tistory.com/238#entry238comment</comments>
      <pubDate>Fri, 21 Oct 2022 16:00:34 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 자바스크립트 몫과 나머지 구하기 - 2가지 방법</title>
      <link>https://chancoding.tistory.com/237</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&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;javascript의 몫과 나머지를 구하는 방법에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몫을 구하는 방법은 &lt;code&gt;Math.floor&lt;/code&gt;을 사용하는 방법과 &lt;code&gt;parseInt&lt;/code&gt;를 사용하는 방법으로 두 가지가 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bthprR/btrO4uE2N2P/qIrNXLGkykfGw7VqUz4o21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bthprR/btrO4uE2N2P/qIrNXLGkykfGw7VqUz4o21/img.png&quot; data-alt=&quot;자바스크립트 몫과 나머지 구하는 연산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bthprR/btrO4uE2N2P/qIrNXLGkykfGw7VqUz4o21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbthprR%2FbtrO4uE2N2P%2FqIrNXLGkykfGw7VqUz4o21%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;224&quot; height=&quot;202&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자바스크립트 몫과 나머지 구하는 연산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;몫&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Javascript에서 몫을 구하는 방법 2가지를 알아보겠습니다.&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;code&gt;//&lt;/code&gt;가 JS는 존재하지 않습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Math.floor&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;var q = Math.floor( 13 / 5)
console.log(q) // 2&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;&lt;b&gt;2. parseInt&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;var q = parseInt( 13 / 5 )
console.log(q) // 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;나머지&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;remainder를 구하는 방법은 기본 js의 연산을 사용하면 간단합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const r = 13 % 5
console.log(r)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Javascript</category>
      <category>JS</category>
      <category>js 나머지</category>
      <category>나머지</category>
      <category>몫</category>
      <category>자바스크립트</category>
      <category>자바스크립트 몫</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/237</guid>
      <comments>https://chancoding.tistory.com/237#entry237comment</comments>
      <pubDate>Thu, 20 Oct 2022 10:35:48 +0900</pubDate>
    </item>
    <item>
      <title>[JS] var, let, const 차이점 3가지 : Scope, Hoisting, 변수 선언</title>
      <link>https://chancoding.tistory.com/235</link>
      <description>&lt;h1&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바스크립트의 변수란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍에서의 변수는 값을 나타내는 문자나 문자들의 집합이며 실행 중인 컴퓨터 프로그램에서, &lt;b&gt;임의의 값을 저장한 메모리 주소&lt;/b&gt;에 대응합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 얘기하면 변수(variable)는 하나의 값을 저장하기 위해 &lt;b&gt;메모리 공간에 이름을 붙인 것&lt;/b&gt;을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS에서 사용하는 변수는 &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt; 3가지가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 3가지의 차이를 &lt;code&gt;1. 변수 선언 방식&lt;/code&gt; , &lt;code&gt;2. Scope 범위&lt;/code&gt;, &lt;code&gt;3. 호이스팅과 TDZ&lt;/code&gt;으로 나누어 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIe0Xy/btrOQzlvZzw/EKOQLpvt5nUznHesqq9rd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIe0Xy/btrOQzlvZzw/EKOQLpvt5nUznHesqq9rd1/img.png&quot; data-alt=&quot;js logo&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIe0Xy/btrOQzlvZzw/EKOQLpvt5nUznHesqq9rd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIe0Xy%2FbtrOQzlvZzw%2FEKOQLpvt5nUznHesqq9rd1%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;225&quot; height=&quot;225&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;js logo&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;변수 선언 방식&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;var&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 사용했던 변수 선언 방식으로 ES6 이후에는 추가된 &lt;code&gt;let&lt;/code&gt;과 &lt;code&gt;const&lt;/code&gt;가 추가되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;var&lt;/code&gt;는 한 번 선언한 후 다시 선언해도 에러가 발생되지 않습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;var myNum = 1
console.log(myNum) // 1

var myNum = 9
console.log(myNum) // 9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 유연하게 코드를 작성할 수 있지만, 코드가 길어지면 이미 사용한 변수를 덮어버릴 수 있어서 잠재적 위험이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;code&gt;let&lt;/code&gt;과 &lt;code&gt;const&lt;/code&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;let&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;let&lt;/code&gt;은 &lt;code&gt;var&lt;/code&gt;과 유사하게 변수를 선언하는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 위에서 말한 &lt;code&gt;var&lt;/code&gt;의 문제점을 해결해 재선언을 한 경우 &lt;code&gt;SyntaxError&lt;/code&gt;를 발생시킴&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;let myNum = 1
console.log(myNum) // 1

let myNum = 9 // Uncaught SyntaxError: Identifier 'myNum' has already been declared&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;&lt;b&gt;const&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;const&lt;/code&gt; 또한 변수를 선언하는 방식으로 &lt;code&gt;let&lt;/code&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;const myNum = 1
console.log(myNum) // 1

const myNum = 9 //Uncaught TypeError: Assignment to constant variable.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;code&gt;const&lt;/code&gt;는 상수 값으로 변하지 않는 값을 선언할 때 주로 사용됩니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;const PI = 3.14;
const MY_NUM = 88777788&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PI 값은 &lt;code&gt;const&lt;/code&gt;로 선언되었으므로, 값이 변하지 않는 값으로 사용하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Scope Rules&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;var&lt;/code&gt;과 다르게 &lt;code&gt;let&lt;/code&gt;과 &lt;code&gt;const&lt;/code&gt;는 선언한 변수를 지역 스코프로 인정하는 블록 레벨 스코프를 따릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 애기하면 함수, if문, for문, 반복문 등을 코드 블록이라고 생각하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 안에서 &lt;code&gt;let&lt;/code&gt;과 &lt;code&gt;const&lt;/code&gt;로 선언된 변수들은 해당 if문 안에서만 유효하다.라고 생각하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히 말하는 지역 변수로 선언되는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 예시를 보겠습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;let a = 1

if (true) {
  let a = 5  
  console.log(a) // 5
}

console.log(a) // 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 안에서의 &lt;code&gt;a&lt;/code&gt; 값은 5 이지만, if문이 끝난 다음 밖에서는 다시 &lt;code&gt;1&lt;/code&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;function 예시를 보겠습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;function varTest() {
  var x = 1;
  {
    var x = 2;  // same variable!
    console.log(x);  // 2
  }
  console.log(x);  // 2
}

function letTest() {
  let x = 1;
  {
    let x = 2;  // different variable
    console.log(x);  // 2
  }
  console.log(x);  // 1
}

// 코드 출처 https://developer.mozilla.org/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Hoisting &amp;amp; Temporal dead zone(TDZ)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호이스팅이란 함수 내부에 있는 선언들을 모두 끌어올려 해당 함수 유효 범위의 최상단에 선언하는 것을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트 Parser가 함수 실행 전 해당 함수를 한 번 훑는 과정에서 내부적으로 끌어올려 처리하는 것을 뜻하며 실제 메모리에서는 변화는 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 선언문을 실행하는 것이라고 생각하면 되지만, 실재 값이 할당되기 전까지는 &lt;code&gt;undefined&lt;/code&gt;값을 가집니다. 단지 &lt;code&gt;Error&lt;/code&gt;만 안 난다 정도로 보면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용 출처 : &lt;a href=&quot;https://80000coding.oopy.io/e1721710-536f-43f2-823b-663389f5fbfa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;팔만코딩경&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;var&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;/* 변수 호이스팅 */
console.log(a); // undefined -&amp;gt; 선언 전인데 Error 안남

var a = 5;
console.log(a); // 5


foo(); // foo  -&amp;gt; function 선언 전인데 Error 안남

function foo() {
    console.log(&quot;foo&quot;);
}&lt;/code&gt;&lt;/pre&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;b&gt;let, const&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;/* 변수 호이스팅 */
console.log(a); // ReferenceError: a is not defined

let a = 5;
console.log(a); // 5

/* 함수 호이스팅 */
foo(); // error

var foo = function() {
    console.log(&quot;foo&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;let&lt;/code&gt;과 &lt;code&gt;const&lt;/code&gt;는 Error가 발생하는 것을 확인할 수 있습니다.&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;code&gt;let&lt;/code&gt;과 &lt;code&gt;const&lt;/code&gt;는 변수 선언을 사전에 해두지만 초기화를 하지 않으므로 값을 참조할 수 없습니다. 따라서 동작을 할 수 없어 Error가 발생되는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;var&lt;/code&gt;는 호이스팅으로 변수 선언 후 &lt;code&gt;undefined&lt;/code&gt;로 초기화해두므로 Error가 발생하지 않는 것입니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;function do_something() {
  console.log(bar); // undefined
  console.log(foo); // ReferenceError
  var bar = 1;
  let foo = 2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 Javascript의 3가지 변수에 대해서 &lt;code&gt;1. 선언 방식&lt;/code&gt;, &lt;code&gt;2. Scope&lt;/code&gt;, &lt;code&gt;3. Hoisting&lt;/code&gt;으로 나누어 차이점을 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 것도 되나 싶을 정도로 다양한 것들이 되는 자바스크립트이므로 이러한 변동적인 부분을 잘 알고 있어야 좋을 것 같네요.&lt;/p&gt;</description>
      <category>Javascript</category>
      <category>const</category>
      <category>javascript</category>
      <category>javascript hoisting</category>
      <category>JS</category>
      <category>js scope</category>
      <category>js 변수</category>
      <category>js 상수 변수</category>
      <category>let</category>
      <category>let const var</category>
      <category>var</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/235</guid>
      <comments>https://chancoding.tistory.com/235#entry235comment</comments>
      <pubDate>Wed, 19 Oct 2022 16:19:18 +0900</pubDate>
    </item>
    <item>
      <title>역행자 추천도서 정리 - 자청 추천 책 난이도별 리스트</title>
      <link>https://chancoding.tistory.com/233</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;a href=&quot;https://app.ac/v3IDjMJ63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;역행자&lt;/a&gt; 추천도서&lt;/h1&gt;
&lt;figure id=&quot;og_1659601755038&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;book&quot; data-og-title=&quot;역행자   - YES24&quot; data-og-description=&quot;오타쿠 흙수저에서 월 1억 자동 수익을 실현한 무자본 연쇄창업마,라이프해커 자청의 인생 역주행 공식 대공개 대부분의 사람들은 유전자와 본성의 명령을 그대로 따르기 때문에 평범함을 벗어&quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;https://app.ac/v3IDjMJ63&quot; data-og-url=&quot;http://www.yes24.com/Product/Goods/109705390&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jjmAz/hyPkKlfk4x/6m3Rr6v2BA39ZFQVU5ixP1/img.jpg?width=880&amp;amp;height=1200&amp;amp;face=645_834_783_984,https://scrap.kakaocdn.net/dn/cfnRZA/hyPkJmlpNS/PO4yMk23OnPlNILBUP2sY1/img.jpg?width=880&amp;amp;height=1200&amp;amp;face=645_834_783_984,https://scrap.kakaocdn.net/dn/FiX3g/hyPkHIOOIy/eXhJqOhlhQkbgHdVF8OcXK/img.jpg?width=880&amp;amp;height=1200&amp;amp;face=645_834_783_984&quot;&gt;&lt;a href=&quot;https://app.ac/v3IDjMJ63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.ac/v3IDjMJ63&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jjmAz/hyPkKlfk4x/6m3Rr6v2BA39ZFQVU5ixP1/img.jpg?width=880&amp;amp;height=1200&amp;amp;face=645_834_783_984,https://scrap.kakaocdn.net/dn/cfnRZA/hyPkJmlpNS/PO4yMk23OnPlNILBUP2sY1/img.jpg?width=880&amp;amp;height=1200&amp;amp;face=645_834_783_984,https://scrap.kakaocdn.net/dn/FiX3g/hyPkHIOOIy/eXhJqOhlhQkbgHdVF8OcXK/img.jpg?width=880&amp;amp;height=1200&amp;amp;face=645_834_783_984');&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;역행자 - YES24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오타쿠 흙수저에서 월 1억 자동 수익을 실현한 무자본 연쇄창업마,라이프해커 자청의 인생 역주행 공식 대공개 대부분의 사람들은 유전자와 본성의 명령을 그대로 따르기 때문에 평범함을 벗어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.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;추천 책들이 난이도별로 리스트업 되어있어서&amp;nbsp;하나씩 책을 읽고 글을 써봐야겠다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8HZE8/btrISO4rSDm/inBtwTxuy7kdkptXqRoHV1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8HZE8/btrISO4rSDm/inBtwTxuy7kdkptXqRoHV1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8HZE8/btrISO4rSDm/inBtwTxuy7kdkptXqRoHV1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8HZE8%2FbtrISO4rSDm%2FinBtwTxuy7kdkptXqRoHV1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;192&quot; height=&quot;262&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h1&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;레벨 1&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;독서 입문자에게 추천하는 책&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://app.ac/w3IDjwJ33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;부자의 그릇&lt;/b&gt;&lt;/a&gt; : &lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&lt;sub&gt;돈을 다루는 능력을 키우는 법&lt;/sub&gt;&amp;nbsp; &lt;/span&gt;-&amp;nbsp; 이즈미 마사토&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인스타브레인&lt;/b&gt; - 안데르스 한센&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장사의 신&lt;/b&gt; - 우노 다카시&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h1&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;&lt;b&gt;레벨 2&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #409d00; color: #ffffff;&quot;&gt;다음 수준으로 넘어가기 위한 책&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나는 돈이 없어도 사업을 한다&lt;/b&gt; - 프레이저 도허티&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나는 4시간만 일한다&lt;/b&gt; - 팀 페리스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;당신은 사업가입니까&lt;/b&gt; - 캐럴 로스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;러쉬&lt;/b&gt; - 토드 부크홀츠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스틱!&lt;/b&gt; - 칩 하스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;&amp;nbsp;- 전중환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최강의 인생&lt;/b&gt; - 데이브 아스프리&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h1&gt;&lt;span style=&quot;background-color: #ee2323; color: #ffffff;&quot;&gt;&lt;b&gt;레벨 3&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ee2323; color: #ffffff;&quot;&gt;독서 숙련자에게 추천하는 책&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;욕망의 진화&lt;/b&gt; - 데이비드 버스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정리하는 뇌&lt;/b&gt; - 대니얼 J. 레비틴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지능의 역설&lt;/b&gt; - 가나자와 사토시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;클루지&lt;/b&gt; - 게리 마커스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>도서리뷰</category>
      <category>부의 추월차선</category>
      <category>역행자</category>
      <category>역행자 책추천</category>
      <category>역행자 추천도서</category>
      <category>역행자 추천책</category>
      <category>자청 책 추천</category>
      <category>자청 추천도서</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/233</guid>
      <comments>https://chancoding.tistory.com/233#entry233comment</comments>
      <pubDate>Fri, 5 Aug 2022 18:33:19 +0900</pubDate>
    </item>
    <item>
      <title>[도서리뷰] 쉽게 읽히는 '너무 재밌어서 잠못드는 뇌과학' 기본 내용과 요약</title>
      <link>https://chancoding.tistory.com/232</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 내용&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b88pMp/btrIToK6ZBF/XQgm7IOCw5rVAlHns8uVgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b88pMp/btrIToK6ZBF/XQgm7IOCw5rVAlHns8uVgk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b88pMp/btrIToK6ZBF/XQgm7IOCw5rVAlHns8uVgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb88pMp%2FbtrIToK6ZBF%2FXQgm7IOCw5rVAlHns8uVgk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;1200&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목 : &lt;a href=&quot;https://app.ac/WAM5rm563&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;너무 재밌어서 잠 못 드는 뇌과학&lt;/a&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3줄 요약&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인생에서 성공하려면 뇌 사용법을 알아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뇌는 멀티태스킹에 취약하므로, ICT와 차단된 환경에서 하나의 일을 집중해서 하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적절한 휴식을 통한 Refresh가 뇌의 기억 저장 능력 및 생산성을 높일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;주요 내용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인생에서 성공하려면 훌륭한 뇌를 효율적이고 효과적으로 활용해야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뇌의 생산성을 떨어트리는 대표적인 예가 멀티태스킹과 ICT 커넥티드 상태이다. 여기서 ICT 커넥티드 상태는 핸드폰이나 이메일과 같은 현대의 통신 수단을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멀티태스킹을 하면 결과적으로 질과 창의성이 현저히 떨어질 뿐 아니라 시간도 더 오래 걸린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ICT에 접속된 상태가 지속되면 지적 생산성이 감소한다.&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;정보는 풍부하고 저렴하며, 생각은 점점 드물어진다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 방해 요소들과 ICT로부터 차단된 오직 생각하기를 위한 시간이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뇌의 종류&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리에게는 생각, 의사결정, 행동을 주도하는 세 가지 뇌가 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 생각하는 뇌&lt;/b&gt;&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 저장용 뇌&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각하는 뇌가 흡수한 정보를 저장용 뇌가 재구성하고 저장할 수 있도록 수면과 휴식을 적절하게 취해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7~8시간 정도의 충분한 수면을 취해야 한다.&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;3. 반사용 뇌&lt;/b&gt;&lt;/h3&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;반사용 뇌가 추측을 거듭하면 잘못된 결정을 하게 된다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;ICT에 빠지는 이유&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;접속하면 재미가 있다. 메시지에 반응할 때마다 뇌에서 도파민이 분비된다. 즉각적 만족을 추구하려는 성향을 타고났기 때문&lt;/li&gt;
&lt;li&gt;그렇기에 느린 생각보다 빠른 반응을 선호하게 된다. 중독에 취약하며 호기심이 많아 반복된 결과 금세 습관으로 만들어진다.&lt;/li&gt;
&lt;li&gt;태생적으로 소속감을 갈구하여, 계속해서 타인의 근황을 확인하려 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이러한 심리적 기제가 반응하는 것을 알고 커넥티드 상태를 끊으려 노력해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;도서 정보&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://app.ac/WAM5rm563&quot;&gt;https://app.ac/WAM5rm563&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659599723802&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YES24&quot; data-og-description=&quot;YES24는 대한민국 1위 인터넷 온라인서점입니다. 국내 최대의 도서정보를 보유하고 있으며 음반, DVD, 공연까지 다양한 문화콘텐츠 및 서비스를 제공합니다.&quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;https://app.ac/WAM5rm563&quot; data-og-url=&quot;http://www.yes24.com/Main/default.aspx&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/PxT9C/hyPjp34DWi/NTR6m1FpPbk0NO6Pv6bGfK/img.png?width=640&amp;amp;height=640&amp;amp;face=0_0_640_640,https://scrap.kakaocdn.net/dn/ssLPE/hyPjjCMURy/5db7QwXR6Ot5fBKzQKK151/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=0_0_1089_421,https://scrap.kakaocdn.net/dn/p4YBY/hyPkH9RR34/LsOVWhIiQGBlRD8tlyC000/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=588_95_662_176&quot;&gt;&lt;a href=&quot;https://app.ac/WAM5rm563&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.ac/WAM5rm563&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/PxT9C/hyPjp34DWi/NTR6m1FpPbk0NO6Pv6bGfK/img.png?width=640&amp;amp;height=640&amp;amp;face=0_0_640_640,https://scrap.kakaocdn.net/dn/ssLPE/hyPjjCMURy/5db7QwXR6Ot5fBKzQKK151/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=0_0_1089_421,https://scrap.kakaocdn.net/dn/p4YBY/hyPkH9RR34/LsOVWhIiQGBlRD8tlyC000/img.jpg?width=1089&amp;amp;height=421&amp;amp;face=588_95_662_176');&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;YES24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;YES24는 대한민국 1위 인터넷 온라인서점입니다. 국내 최대의 도서정보를 보유하고 있으며 음반, DVD, 공연까지 다양한 문화콘텐츠 및 서비스를 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;다른 책 리뷰&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[도서리뷰] 합격을 위한 공부방법, 나의 생활 패턴을 바꾼 책 - 나는 무조건 합격하는 공부만 한다&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659599922015&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;나는 무조건 합격하는 공부만 한다: 26살, 9개월 만에 사법시험을 패스한 이윤규 변호사의 패턴 공부법 저 : 이윤규 출판사 : 비즈니스북스 발행 : 2019년 12월 16일 작성 : 2020년 02월 13일 9개월 만에 &quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/29&quot; data-og-url=&quot;https://chancoding.tistory.com/29&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NTwdt/hyPkDzD3Rk/uWpNrwQPpYhq5TRRfrZ9qK/img.jpg?width=300&amp;amp;height=421&amp;amp;face=243_355_268_383,https://scrap.kakaocdn.net/dn/b5ZwwJ/hyPjcX1xpV/cLSI4OhkKu050RXBKN9Gw1/img.jpg?width=300&amp;amp;height=421&amp;amp;face=243_355_268_383,https://scrap.kakaocdn.net/dn/eVX9V/hyPjeuIXy9/j2ewzqnseLYxRQDDDRCyz1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/29&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NTwdt/hyPkDzD3Rk/uWpNrwQPpYhq5TRRfrZ9qK/img.jpg?width=300&amp;amp;height=421&amp;amp;face=243_355_268_383,https://scrap.kakaocdn.net/dn/b5ZwwJ/hyPjcX1xpV/cLSI4OhkKu050RXBKN9Gw1/img.jpg?width=300&amp;amp;height=421&amp;amp;face=243_355_268_383,https://scrap.kakaocdn.net/dn/eVX9V/hyPjeuIXy9/j2ewzqnseLYxRQDDDRCyz1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;나는 무조건 합격하는 공부만 한다: 26살, 9개월 만에 사법시험을 패스한 이윤규 변호사의 패턴 공부법 저 : 이윤규 출판사 : 비즈니스북스 발행 : 2019년 12월 16일 작성 : 2020년 02월 13일 9개월 만에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[도서리뷰] 부의 추월차선 : 생각과 삶의 방향을 바꾼 책&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659599933174&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;부의 추월차선&amp;nbsp;: 부자들이 말해 주지 않는 진정한 부를 얻는 방법 원제 : The Millionaire Fastlane 저자 : 엠제이 드마코 역자 : 신소영 출판사 : 토트 발행 : 2013년 08월 20일 작성 : 2020 년 02월 08일 늙은..&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/26&quot; data-og-url=&quot;https://chancoding.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HFi6D/hyPjrt4A47/BD1k0j3fHkItNppPSkXLKK/img.jpg?width=300&amp;amp;height=444&amp;amp;face=0_0_300_444,https://scrap.kakaocdn.net/dn/6HZcR/hyPkMchlPx/jHsytsyfup2k64l9vEitTK/img.jpg?width=300&amp;amp;height=444&amp;amp;face=0_0_300_444,https://scrap.kakaocdn.net/dn/b4eZwR/hyPkLxGkAx/ggkb9hnX6mjgy6ceXzk4FK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/26&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HFi6D/hyPjrt4A47/BD1k0j3fHkItNppPSkXLKK/img.jpg?width=300&amp;amp;height=444&amp;amp;face=0_0_300_444,https://scrap.kakaocdn.net/dn/6HZcR/hyPkMchlPx/jHsytsyfup2k64l9vEitTK/img.jpg?width=300&amp;amp;height=444&amp;amp;face=0_0_300_444,https://scrap.kakaocdn.net/dn/b4eZwR/hyPkLxGkAx/ggkb9hnX6mjgy6ceXzk4FK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;부의 추월차선&amp;nbsp;: 부자들이 말해 주지 않는 진정한 부를 얻는 방법 원제 : The Millionaire Fastlane 저자 : 엠제이 드마코 역자 : 신소영 출판사 : 토트 발행 : 2013년 08월 20일 작성 : 2020 년 02월 08일 늙은..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/65&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[도서리뷰] 습관 형성에 필수 To do list - 리스트 습관(Listful Thinking)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659599979232&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;[도서리뷰] 습관 형성에 필수 To do list  - 리스트 습관(Listful Thinking)&quot; data-og-description=&quot;리스트 습관&amp;nbsp;: 쓰는 대로 이루어진다 원제 : Listful Thinking &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 저 :&amp;nbsp;폴라 리조 &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 역 :&amp;nbsp;곽소영 &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 출판사 :&amp;nbsp;이아소 &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 발행 :..&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/65&quot; data-og-url=&quot;https://chancoding.tistory.com/65&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/V8fRC/hyPjszO3aY/bftEy9pmIcOJ6l7P39BQV1/img.jpg?width=300&amp;amp;height=417&amp;amp;face=0_0_300_417,https://scrap.kakaocdn.net/dn/nr0VH/hyPjgswu8D/hxN2SFguEMHaPfk6SFFdP1/img.jpg?width=300&amp;amp;height=417&amp;amp;face=0_0_300_417,https://scrap.kakaocdn.net/dn/PRqt6/hyPjgziRrg/uNRDMsyqmmO3HjZ5fKkiK0/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/65&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/65&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/V8fRC/hyPjszO3aY/bftEy9pmIcOJ6l7P39BQV1/img.jpg?width=300&amp;amp;height=417&amp;amp;face=0_0_300_417,https://scrap.kakaocdn.net/dn/nr0VH/hyPjgswu8D/hxN2SFguEMHaPfk6SFFdP1/img.jpg?width=300&amp;amp;height=417&amp;amp;face=0_0_300_417,https://scrap.kakaocdn.net/dn/PRqt6/hyPjgziRrg/uNRDMsyqmmO3HjZ5fKkiK0/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[도서리뷰] 습관 형성에 필수 To do list - 리스트 습관(Listful Thinking)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리스트 습관&amp;nbsp;: 쓰는 대로 이루어진다 원제 : Listful Thinking &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 저 :&amp;nbsp;폴라 리조 &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 역 :&amp;nbsp;곽소영 &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 출판사 :&amp;nbsp;이아소 &amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 발행 :..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;</description>
      <category>도서리뷰</category>
      <category>너무 재밋어서 잠 못드는 뇌과학</category>
      <category>뇌과학</category>
      <category>뇌사용법</category>
      <category>생각하기</category>
      <category>재밋는 뇌과학</category>
      <category>효과적인 뇌</category>
      <category>효율적으로 뇌 사용하기</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/232</guid>
      <comments>https://chancoding.tistory.com/232#entry232comment</comments>
      <pubDate>Thu, 4 Aug 2022 17:02:09 +0900</pubDate>
    </item>
    <item>
      <title>[Python] pip install PIL 설치 안될때</title>
      <link>https://chancoding.tistory.com/230</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 &lt;code&gt;PIL&lt;/code&gt; 모듈을 설치하려고&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install PIL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 하면 아래와 같은 에러를 발생시키면서 설치가 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;code&gt;ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFL4ac/btrH08VHAfc/8SnKILKVxI9LT3M7QSjkRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFL4ac/btrH08VHAfc/8SnKILKVxI9LT3M7QSjkRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFL4ac/btrH08VHAfc/8SnKILKVxI9LT3M7QSjkRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFL4ac%2FbtrH08VHAfc%2F8SnKILKVxI9LT3M7QSjkRk%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;839&quot; height=&quot;136&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법은&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install Pillow&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 수행하면 된다.&lt;/p&gt;</description>
      <category>파이썬/파이썬 환경 설정</category>
      <category>PIL</category>
      <category>PIL 설치</category>
      <category>pillow</category>
      <category>pip install PIL</category>
      <category>requirements PIL</category>
      <category>파이썬</category>
      <category>파이썬 에러</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/230</guid>
      <comments>https://chancoding.tistory.com/230#entry230comment</comments>
      <pubDate>Tue, 26 Jul 2022 23:29:09 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Plotly : subplot 만들기의 모든것 - subtitle, type 설정 포함</title>
      <link>https://chancoding.tistory.com/229</link>
      <description>&lt;h1&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Subplot 기본 구조 그리기&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;make_subplots&lt;/code&gt; 함수를 사용해서 서브플롯 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;rows&lt;/code&gt;와 &lt;code&gt;cols&lt;/code&gt; 값을 통해서 몇 행, 몇 열로 그래프를 그릴지 설정하면 됨&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import plotly.graph_objects as go
from plotly.subplots import make_subplots

fig = make_subplots(rows=2, cols=2) # make_subplots를 사용해서 서브플롯 구조를 그림&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Subplot에 Subtitle 설정하기&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;start_cell&lt;/code&gt; subplot 번호 시작 위치를 바꿀 수 있음.&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;code&gt;subplot_titles&lt;/code&gt; 각 Subplot 마다 부제목을 달아줄 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;fig&lt;/code&gt;객체에 &lt;code&gt;add_trace&lt;/code&gt;를 통해서 그래프를 추가해주면 됨&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import plotly.graph_objects as go
from plotly.subplots import make_subplots

fig = make_subplots(
    rows=2, cols=2,
    start_cell=&quot;bottom-left&quot;,  # 시작 위치를 바꿀 수 있음
    subplot_titles=(&quot;Plot 1&quot;, &quot;Plot 2&quot;, &quot;Plot 3&quot;, &quot;Plot 4&quot;) # 각 Subplot 별 subtitle 넣기
)



fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6], name=&quot;1번 Plot&quot;), # name 주면 Legend 이름 설정
              row=1, col=1)
fig.add_trace(go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
              row=1, col=2)
fig.add_trace(go.Scatter(x=[300, 400, 500], y=[600, 700, 800]),
              row=2, col=1)
fig.add_trace(go.Scatter(x=[4000, 5000, 6000], y=[7000, 8000, 9000]),
              row=2, col=2)

fig.show()&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;image-20220722105211811.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SuGqr/btrHTrvYiK9/RLKT1UyQ6TZ9ammloI8kY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SuGqr/btrHTrvYiK9/RLKT1UyQ6TZ9ammloI8kY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SuGqr/btrHTrvYiK9/RLKT1UyQ6TZ9ammloI8kY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSuGqr%2FbtrHTrvYiK9%2FRLKT1UyQ6TZ9ammloI8kY1%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;657&quot; height=&quot;392&quot; data-filename=&quot;image-20220722105211811.png&quot; data-origin-width=&quot;657&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;legend 넣는 방법은 아래글을 참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/228&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] Plotly legend(범례) 의 모든 것 - 순서, 위치, 폰트 등&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Subplot 축 공유, 그래프 간격 설정, 그래프 비율 설정&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shared_yaxes&lt;/code&gt; y축에 대해서 축을 공유하도록 그래프를 그릴 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;horizontal_spacing&lt;/code&gt; 가로축 방향으로 서브플롯 간의 간격을 설정할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수직 방향으로 위아래 그래프 간격은 &lt;code&gt;vertical_spacing&lt;/code&gt;으로 설정하면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;column_widths&lt;/code&gt; 전체 그래프 그림에서 그래프의 너비 비중을 조절할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 Case에 대해서 첫 번째 Subplot을 더 넓게 그리고 싶다면 &lt;code&gt;column_widths=[0.7, 0.3]&lt;/code&gt;으로 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 첫 번째 서브플롯의 비율이 70%를 차지해 더 넓게 그려진다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;fig = make_subplots(
    rows=1, cols=2,
    shared_yaxes=True, # 특정 축을 공유하게 그래프를 그릴 수 있음
    horizontal_spacing=0.05, # 너비 간격을 설정할 수 있음
    column_widths=[0.7, 0.3] # Subplot 높이와 너비를 조절할 수 있음
)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FmvAL/btrHYeOPnb3/tvxvzypfDfuGjWFGlDrKrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FmvAL/btrHYeOPnb3/tvxvzypfDfuGjWFGlDrKrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FmvAL/btrHYeOPnb3/tvxvzypfDfuGjWFGlDrKrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFmvAL%2FbtrHYeOPnb3%2FtvxvzypfDfuGjWFGlDrKrk%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;693&quot; height=&quot;498&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;498&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;h1&gt;&lt;b&gt;Subplots 별 타입 설정&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 Subplot 들이 가지는 &lt;code&gt;type&lt;/code&gt;을 설정해 주어야함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 일반 &lt;code&gt;xy&lt;/code&gt; 축 그래프를 그리므로 기본 값으로 되어있어 설정하지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pie 그래프 또는 다른 &lt;code&gt;domain&lt;/code&gt;을 가지는 그래프를 그릴 때에는 설정해주어야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정할 수 있는 축 type 옵션들은 다음과 같다. (plotly doc 출처)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;&quot;xy&quot;&lt;/code&gt;: 2D Cartesian subplot type for scatter, bar, etc. This is the default if no &lt;code&gt;type&lt;/code&gt; is specified.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;scene&quot;&lt;/code&gt;: 3D Cartesian subplot for scatter3d, cone, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;polar&quot;&lt;/code&gt;: Polar subplot for scatterpolar, barpolar, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;ternary&quot;&lt;/code&gt;: Ternary subplot for scatterternary.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;mapbox&quot;&lt;/code&gt;: Mapbox subplot for scattermapbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;domain&quot;&lt;/code&gt;: Subplot type for traces that are individually positioned. pie, parcoords, parcats, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(
    rows=2, cols=2,
    specs=[[{&quot;type&quot;: &quot;xy&quot;}, {&quot;type&quot;: &quot;polar&quot;}],
           [{&quot;type&quot;: &quot;domain&quot;}, {&quot;type&quot;: &quot;scene&quot;}]],
)

fig.add_trace(go.Bar(y=[2, 3, 1]),
              row=1, col=1)

fig.add_trace(go.Barpolar(theta=[0, 45, 90], r=[2, 3, 1]),
              row=1, col=2)

fig.add_trace(go.Pie(values=[2, 3, 1]),
              row=2, col=1)

fig.add_trace(go.Scatter3d(x=[2, 3, 1], y=[0, 0, 0],
                           z=[0.5, 1, 2], mode=&quot;lines&quot;),
              row=2, col=2)

fig.update_layout(height=700, showlegend=False)

fig.show()&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;image-20220722105900831.png&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNL88/btrHUMlBu0W/1j3kP2XWPq0jS4Ykp4qFO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNL88/btrHUMlBu0W/1j3kP2XWPq0jS4Ykp4qFO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNL88/btrHUMlBu0W/1j3kP2XWPq0jS4Ykp4qFO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNL88%2FbtrHUMlBu0W%2F1j3kP2XWPq0jS4Ykp4qFO0%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;639&quot; height=&quot;543&quot; data-filename=&quot;image-20220722105900831.png&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;type&lt;/code&gt;을 넣는 대신 해당 그래프 타입을 넣어도 똑같이 동작한다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;# 위와 동일한 domain 타입 설정을 그래프 타입으로 설정한 것
fig = make_subplots(
    rows=2, cols=2,
    specs=[[{&quot;type&quot;: &quot;bar&quot;}, {&quot;type&quot;: &quot;barpolar&quot;}],
           [{&quot;type&quot;: &quot;pie&quot;}, {&quot;type&quot;: &quot;scatter3d&quot;}]],
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;&quot;xy&quot;&lt;/code&gt;, &lt;code&gt;&quot;polar&quot;&lt;/code&gt;, &lt;code&gt;&quot;domain&quot;&lt;/code&gt;, &lt;code&gt;&quot;scene&quot;&lt;/code&gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;code&gt;&quot;bar&quot;&lt;/code&gt;, &lt;code&gt;&quot;barpolar&quot;&lt;/code&gt;, &lt;code&gt;&quot;pie&quot;&lt;/code&gt;, &lt;code&gt;&quot;scatter3d&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Subplot Graph Example&amp;nbsp;&lt;/b&gt;&lt;/h1&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import plotly.graph_objects as go
from plotly.subplots import make_subplots

fig = make_subplots(
    rows=1, cols=2,
    shared_yaxes=True,
    subplot_titles=(&quot;&amp;lt;b&amp;gt;A Data&amp;lt;/b&amp;gt;&quot;, &quot;&amp;lt;b&amp;gt;B Data&amp;lt;/b&amp;gt;&quot;)
)
fig.add_trace(
    go.Histogram(x=t[t['SUM']&amp;gt;0]['RANK'].values, nbinsx=30, name=&quot;A Risk&quot;),
    row=1, col=1
)

fig.add_trace(
    go.Histogram(x=t2[t2['SUM']&amp;gt;0]['RANK'].values, nbinsx=30, name=&quot;B Risk&quot;),
    row=1, col=2
)

fig.update_layout(
    title=dict(
        text = &quot;&amp;lt;b&amp;gt;데이터 분포 확인&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;sup&amp;gt;OO 기준에 따라서 위험도 비교 분석&amp;lt;/sup&amp;gt;&quot;,
        x=0.5, y=0.94,
        font=dict(
            family=&quot;Arial&quot;,
            size=30,
            color=&quot;#000000&quot;
        )
    ),
    legend=dict(
        orientation=&quot;h&quot;,
        xanchor=&quot;left&quot;
    )
)

fig.update_yaxes(range=[0, 25])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0Pl7g/btrHTYfMf9J/ugaWQGj8nxxzBxIQJbdb8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0Pl7g/btrHTYfMf9J/ugaWQGj8nxxzBxIQJbdb8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0Pl7g/btrHTYfMf9J/ugaWQGj8nxxzBxIQJbdb8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0Pl7g%2FbtrHTYfMf9J%2FugaWQGj8nxxzBxIQJbdb8k%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;669&quot; height=&quot;470&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/데이터 시각화</category>
      <category>plotly</category>
      <category>plotly subplots</category>
      <category>plotlyb subplot</category>
      <category>python</category>
      <category>subplot</category>
      <category>subplots</category>
      <category>데이터 시각화</category>
      <category>서브플롯</category>
      <category>시각화</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/229</guid>
      <comments>https://chancoding.tistory.com/229#entry229comment</comments>
      <pubDate>Sun, 24 Jul 2022 12:43:06 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Plotly legend(범례) 의 모든 것 - 순서, 위치, 폰트 등</title>
      <link>https://chancoding.tistory.com/228</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;h1&gt;&lt;b&gt;Legend 이름 및 순서 설정&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;legendrank&lt;/code&gt; 를 통해서 순서의 우선순위를 줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;name&lt;/code&gt; 에 설정해준 값이 &lt;code&gt;legend&lt;/code&gt;로 표시된다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;fig = go.Figure()
fig.add_trace(go.Bar(name=&quot;fourth&quot;, x=[&quot;a&quot;, &quot;b&quot;], y=[2,1], legendrank=4))
fig.add_trace(go.Bar(name=&quot;second&quot;, x=[&quot;a&quot;, &quot;b&quot;], y=[2,1], legendrank=2))
fig.add_trace(go.Bar(name=&quot;first&quot;, x=[&quot;a&quot;, &quot;b&quot;], y=[1,2], legendrank=1))
fig.add_trace(go.Bar(name=&quot;third&quot;, x=[&quot;a&quot;, &quot;b&quot;], y=[1,2], legendrank=3))

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Legend 위치&lt;/b&gt;&lt;/h1&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;fig.update_layout(
	legend=dict(
        orientation=&quot;h&quot;, # 가로 방향으로
        yanchor=&quot;top&quot;, y=0.99, # y축 방향 위치 설정
        xanchor=&quot;left&quot;, x=0.01, # x축 방향 위치 설정
	)
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Legend 폰트 및 글자 크기 등 스타일링&lt;/b&gt;&lt;/h1&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;fig.update_layout(
    legend=dict(
        x=0, y=1,
        traceorder=&quot;reversed&quot;,
        title_font_family=&quot;Times New Roman&quot;,
        font=dict(
            family=&quot;Courier&quot;,
            size=12,
            color=&quot;black&quot;
        ),
        bgcolor=&quot;LightSteelBlue&quot;,
        bordercolor=&quot;Black&quot;,
        borderwidth=2
    )
)&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;a href=&quot;https://chancoding.tistory.com/217&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] Plotly 자주 사용하는 Layout 설정 - title, 축 label, font, subtitle, position 등&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658450665117&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;[Python] Plotly 자주 사용하는 Layout 설정 - title, 축 label, font, subtitle, position 등&quot; data-og-description=&quot;Plotly 그래프를 그릴 때 마다 레이아웃 설정하는 부분들이 생각이 안나서 찾아보는 경우가 많다. 그래서 자주 사용하는 layout 설정 소스코드를 작성해서 필요한 부분에 맞게 복분할 수 있도록 앞&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/217&quot; data-og-url=&quot;https://chancoding.tistory.com/217&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gYuAl/hyPatLSVLw/FfKzD8LKJkI76xIW4QIoKK/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/b40YLD/hyPawPn0j1/pkdJH2LvRq8jCkhdvexCz0/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/dnSBhG/hyPazZEslS/BvJcISOfRrPwNp5aU0bWLk/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/217&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/217&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gYuAl/hyPatLSVLw/FfKzD8LKJkI76xIW4QIoKK/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/b40YLD/hyPawPn0j1/pkdJH2LvRq8jCkhdvexCz0/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/dnSBhG/hyPazZEslS/BvJcISOfRrPwNp5aU0bWLk/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly 자주 사용하는 Layout 설정 - title, 축 label, font, subtitle, position 등&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Plotly 그래프를 그릴 때 마다 레이아웃 설정하는 부분들이 생각이 안나서 찾아보는 경우가 많다. 그래서 자주 사용하는 layout 설정 소스코드를 작성해서 필요한 부분에 맞게 복분할 수 있도록 앞&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] Plotly 축 반전, x축 y축 반전 뒤집기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658450677644&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;[Python] Plotly 축 반전, x축 y축 반전 뒤집기&quot; data-og-description=&quot;Y축 반전 뒤집기 기본 수식 작성 import plotly.graph_objects as go import numpy as np x = np.arange(-5, 6) y = x**3 fig = go.Figure(data=go.Scatter(x=x, y=y)) fig.show() 축 반전 fig.update_layout( ya..&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/181&quot; data-og-url=&quot;https://chancoding.tistory.com/181&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Mk8Tx/hyPanZn3lD/D2Ub0YW0ZKHD3qkRVuTOWk/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/It3Oq/hyPaslVpxe/qDVFY6r4WYf4FSMe6dJZ40/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/bj3hpW/hyPappeNJM/URDaH77AEf4koI8kse9wyK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/181&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Mk8Tx/hyPanZn3lD/D2Ub0YW0ZKHD3qkRVuTOWk/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/It3Oq/hyPaslVpxe/qDVFY6r4WYf4FSMe6dJZ40/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/bj3hpW/hyPappeNJM/URDaH77AEf4koI8kse9wyK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly 축 반전, x축 y축 반전 뒤집기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Y축 반전 뒤집기 기본 수식 작성 import plotly.graph_objects as go import numpy as np x = np.arange(-5, 6) y = x**3 fig = go.Figure(data=go.Scatter(x=x, y=y)) fig.show() 축 반전 fig.update_layout( ya..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] Plotly 그래프 사용법 - Line Plot&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658450678831&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;[Python] Plotly 그래프 사용법 - Line Plot&quot; data-og-description=&quot;Plotly를 사용해서 Line plot을 그려보겠습니다. 1. Plotly Express - Lineplot express 객체를 통해서 lineplot을 그릴 수 있습니다. plotly에 있는 기본 데이터를 가져와서 그려보겠습니다. import plotly.expr..&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/119&quot; data-og-url=&quot;https://chancoding.tistory.com/119&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brFJ72/hyPas0u0ly/j4kMzI9w6f08HXNHGiqJ6k/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/g8clA/hyPauKN2PU/EcaG16biafjYXMfgyWqkN0/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/j4jvE/hyPavXfcg6/qzsdBKxAPXpv3y0op7v9P1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/119&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brFJ72/hyPas0u0ly/j4kMzI9w6f08HXNHGiqJ6k/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/g8clA/hyPauKN2PU/EcaG16biafjYXMfgyWqkN0/img.png?width=654&amp;amp;height=466&amp;amp;face=0_0_654_466,https://scrap.kakaocdn.net/dn/j4jvE/hyPavXfcg6/qzsdBKxAPXpv3y0op7v9P1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] Plotly 그래프 사용법 - Line Plot&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Plotly를 사용해서 Line plot을 그려보겠습니다. 1. Plotly Express - Lineplot express 객체를 통해서 lineplot을 그릴 수 있습니다. plotly에 있는 기본 데이터를 가져와서 그려보겠습니다. import plotly.expr..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Plotly를 사용한 파이썬 시각화 using 코로나 데이터셋&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1658450688828&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;Plotly를 사용한 파이썬 시각화 using 코로나 데이터셋&quot; data-og-description=&quot;안녕하세요. 오늘은 plotly를 사용해서 데이터 시각화 및 EDA를 진행했던 내용을 포스팅하려고 합니다. plotly는 쉽게 사용할 수 있으면서도 matplotlib보다 더 예쁘고 인터랙티브 한 자료를 만들 수 있&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/96&quot; data-og-url=&quot;https://chancoding.tistory.com/96&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KkL5q/hyPazrO5a4/OsOj37I7vaaOIFdkmipKK0/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/btpqFC/hyPaq9u2nn/9LhnlkewYTAAJPwyY0iAh0/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/bMAEvb/hyPaviCXwX/nbaOaKgKCj8cLjkNlqiNOk/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/96&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KkL5q/hyPazrO5a4/OsOj37I7vaaOIFdkmipKK0/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/btpqFC/hyPaq9u2nn/9LhnlkewYTAAJPwyY0iAh0/img.png?width=800&amp;amp;height=483&amp;amp;face=0_0_800_483,https://scrap.kakaocdn.net/dn/bMAEvb/hyPaviCXwX/nbaOaKgKCj8cLjkNlqiNOk/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;Plotly를 사용한 파이썬 시각화 using 코로나 데이터셋&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 오늘은 plotly를 사용해서 데이터 시각화 및 EDA를 진행했던 내용을 포스팅하려고 합니다. plotly는 쉽게 사용할 수 있으면서도 matplotlib보다 더 예쁘고 인터랙티브 한 자료를 만들 수 있&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;</description>
      <category>파이썬/데이터 시각화</category>
      <category>legend</category>
      <category>legend font</category>
      <category>legend 순서</category>
      <category>plotly</category>
      <category>plotly legend</category>
      <category>plotly legend font</category>
      <category>plotly 범례</category>
      <category>python</category>
      <category>파이썬</category>
      <category>파이썬 시각화</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/228</guid>
      <comments>https://chancoding.tistory.com/228#entry228comment</comments>
      <pubDate>Sat, 23 Jul 2022 10:46:17 +0900</pubDate>
    </item>
    <item>
      <title>[Django] no such table 에러 해결 방법 3가지</title>
      <link>https://chancoding.tistory.com/227</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Migration&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;no such table: 테이블명&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식의 에러가 발생하는 경우는 DB에서 해당 테이블을 찾을 수 없어서 발생되는 에러이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 보통은 &lt;code&gt;migration&lt;/code&gt; 을 진행하면 해결이 된다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python manage.py makemigrations
python manage.py migrate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Migration with &lt;code&gt;--run-syncdb&lt;/code&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;code&gt;migrate&lt;/code&gt;를 해도 &lt;code&gt;No migrations to apply.&lt;/code&gt; 라고 나오면서 &lt;code&gt;migration&lt;/code&gt;이 진행되지 않는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 경우에는 &lt;code&gt;--run-syncdb&lt;/code&gt;를 붙여서 &lt;code&gt;migrate&lt;/code&gt;를 진행해보자.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;python manage.py migrate --run-syncdb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 테이블을 다시 만들어주는 명령어라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 후 다시 &lt;code&gt;runserver&lt;/code&gt;를 진행하면 대부분 해결되는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Reset Migration&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 해결되지 않는다면, &lt;code&gt;migration&lt;/code&gt;기록을 삭제하고 다시 하는 것입니다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python manage.py migrate --fakce {app이름} zero
python manage.py makemigrations
python manage.py migrate --fake-initial&lt;/code&gt;&lt;/pre&gt;</description>
      <category>파이썬/파이썬 환경 설정</category>
      <category>Django</category>
      <category>migrate</category>
      <category>migration</category>
      <category>no such table</category>
      <category>nosuchtable</category>
      <category>장고</category>
      <category>장고 에러</category>
      <category>장고 환경설정</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/227</guid>
      <comments>https://chancoding.tistory.com/227#entry227comment</comments>
      <pubDate>Fri, 22 Jul 2022 09:24:44 +0900</pubDate>
    </item>
    <item>
      <title>[Spring-boot] Gradle Could not find method compile() 오류 해결 방법</title>
      <link>https://chancoding.tistory.com/226</link>
      <description>&lt;h1&gt;오류 메세지&lt;/h1&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Could not find method compile() for arguments&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Count not find method compile()&lt;/code&gt; 에러가 계속 발생되는 문제가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;오류 해결 방법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stackoverflow 에 검색했더니 다음과 같이 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;compile&lt;/code&gt;, &lt;code&gt;runtime&lt;/code&gt;, &lt;code&gt;testCompile&lt;/code&gt;, and &lt;code&gt;testRuntime&lt;/code&gt; 는 Gradle 4.10 부터 없어졌다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 &lt;code&gt;implementation&lt;/code&gt;, &lt;code&gt;runtimeOnly&lt;/code&gt;, &lt;code&gt;testImplementation&lt;/code&gt;, and &lt;code&gt;testRuntimeOnly&lt;/code&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;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note that the &lt;code&gt;compile&lt;/code&gt;, &lt;code&gt;runtime&lt;/code&gt;, &lt;code&gt;testCompile&lt;/code&gt;, and &lt;code&gt;testRuntime&lt;/code&gt; configurations introduced by the Java plugin have been deprecated since Gradle 4.10 (Aug 27, 2018), and were finally removed in Gradle 7.0 (Apr 9, 2021).&lt;br /&gt;The aforementioned configurations should be replaced by &lt;code&gt;implementation&lt;/code&gt;, &lt;code&gt;runtimeOnly&lt;/code&gt;, &lt;code&gt;testImplementation&lt;/code&gt;, and &lt;code&gt;testRuntimeOnly&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;링크 : &lt;a href=&quot;https://stackoverflow.com/questions/23796404/could-not-find-method-compile-for-arguments-gradle&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/23796404/could-not-find-method-compile-for-arguments-gradle&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java/Spring</category>
      <category>complie()</category>
      <category>Could not find method compile()</category>
      <category>gradle 오류</category>
      <category>java</category>
      <category>java spring</category>
      <category>Spring boot</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/226</guid>
      <comments>https://chancoding.tistory.com/226#entry226comment</comments>
      <pubDate>Wed, 20 Jul 2022 20:02:36 +0900</pubDate>
    </item>
    <item>
      <title>[Spring-boot] VScode에서 Lombok 적용하기</title>
      <link>https://chancoding.tistory.com/225</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h1&gt;1. 마켓플레이스에서 설치하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VScode의 Extensions에 들어가 Lombok을 설치한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnWdDf/btrHAHlmY1X/kmvzWLM363vHA9zjOPGwlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnWdDf/btrHAHlmY1X/kmvzWLM363vHA9zjOPGwlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnWdDf/btrHAHlmY1X/kmvzWLM363vHA9zjOPGwlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnWdDf%2FbtrHAHlmY1X%2FkmvzWLM363vHA9zjOPGwlK%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;1360&quot; height=&quot;468&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;2. gradle.build 파일에 lombok을 dependencies에 추가한다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;dependencies {

    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('mysql:mysql-connector-java')
    compile('org.projectlombok:lombok') # &amp;lt;- 이부분

    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java/Spring</category>
      <category>java</category>
      <category>java spring</category>
      <category>lombok</category>
      <category>lombok dependencies</category>
      <category>lombok 적용</category>
      <category>springboot</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/225</guid>
      <comments>https://chancoding.tistory.com/225#entry225comment</comments>
      <pubDate>Tue, 19 Jul 2022 22:41:14 +0900</pubDate>
    </item>
    <item>
      <title>[Spring-boot] the import javax.persistence cannot be resolved 해결방법</title>
      <link>https://chancoding.tistory.com/224</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;문제 상황&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL DB와 객체를 연결하려는 작업에서 &lt;code&gt;@Entity&lt;/code&gt; annotation이 먹지 않는 문제가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;import javax.persistence.Entity;&lt;/code&gt;을 통해서 import를 이미 해주었지만, 해당 import 부분 또한 에러가 발생하는 상황이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;해결 방법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;build.gradle&lt;/code&gt;에 들어가서 &lt;code&gt;dependencies&lt;/code&gt;에 아래 내용을 추가해준다.&lt;/p&gt;
&lt;pre class=&quot;isbl&quot;&gt;&lt;code&gt;dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('mysql:mysql-connector-java')
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Luvc/btrHAIEASVg/OGukAKREXyfpsc5HbrMtv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Luvc/btrHAIEASVg/OGukAKREXyfpsc5HbrMtv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Luvc/btrHAIEASVg/OGukAKREXyfpsc5HbrMtv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Luvc%2FbtrHAIEASVg%2FOGukAKREXyfpsc5HbrMtv0%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;779&quot; height=&quot;327&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Java/Spring</category>
      <category>gradle</category>
      <category>javax</category>
      <category>javax.persistence</category>
      <category>persistence</category>
      <category>springboot</category>
      <category>문제해결</category>
      <category>스프링부트</category>
      <category>에러발생</category>
      <category>자바</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/224</guid>
      <comments>https://chancoding.tistory.com/224#entry224comment</comments>
      <pubDate>Mon, 18 Jul 2022 21:33:12 +0900</pubDate>
    </item>
    <item>
      <title>윈도우에 Tensorflow-GPU(2.5.0) 설치하기 - 그래픽카드 버전, CUDA 버전 등등</title>
      <link>https://chancoding.tistory.com/223</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE' } )
  });
  &lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텐서플로우만 설치해서 CPU버전으로 사용하는 것은 매우 쉽습니다. 하지만 gpu연동하는 것은 정말 쉽지 않은 것 같아요. 하나라도 잘못하면 안돌아가는 경우가 다반사입니다. 주의해서 꼭 차근차근 확인하시면서 진행하시는 것이 좋습니다. 본 글에 나온 버전들과 또 달라질 수 있기 때문에 꼭 확인 해야한다고한 부분은 확인하고 설치하기는 것이 좋습니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NGJBM/btrGTxJcWV6/krkASeLLsRN7DJsvD0oaU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NGJBM/btrGTxJcWV6/krkASeLLsRN7DJsvD0oaU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NGJBM/btrGTxJcWV6/krkASeLLsRN7DJsvD0oaU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNGJBM%2FbtrGTxJcWV6%2FkrkASeLLsRN7DJsvD0oaU1%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;300&quot; height=&quot;168&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. Window 기준 가상환경 설정&lt;/h2&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;a href=&quot;https://chancoding.tistory.com/85&quot;&gt;[Anaconda] 가상환경 만들기 + 필요한 이유&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/86&quot;&gt;Jupyter Notebook에 가상환경 Kernel 연결하기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 기본 라이브러리 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;pip install&lt;/code&gt;을 사용해서 기본적인 &lt;code&gt;tensorflow&lt;/code&gt; 라이브러리를 설치해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU 버전을 사용하기 위해서 &lt;code&gt;tensorflow-gpu&lt;/code&gt;라이브러리 또한 설치해주도록 합니다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install tensorflow
pip install tensorflow-gpu
# pip install tf-nightly&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텐서플로우의 특정 버전이 필요하다면 해당 버전을 지정해서 설치해주도록합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;pip install tensorflow==1.15.0
pip install tensorflow-gpu==1.15.0

pip install tensorflow==2.5.0

# gpu 버전 설치하기 위해서는 gpu 꼭 적어주세요.
pip install tensorflow-gpu==2.5.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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. CUDA 설치&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 본인의 GPU 사양 확인하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인 컴퓨터의 GPU가 어떤 사양인지 확인하도록 합니다. CUDA를 사용한 텐서플로우 GPU는 NDVIA 그래픽 카드에 해당합니다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;윈도우 검색에서 장치 관리자를 찾아서 들어가도록 합시다.&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422142221814.png&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bboyC7/btrGSxiDBKX/XRsVxackrwDveY6Jw7gqBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bboyC7/btrGSxiDBKX/XRsVxackrwDveY6Jw7gqBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bboyC7/btrGSxiDBKX/XRsVxackrwDveY6Jw7gqBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbboyC7%2FbtrGSxiDBKX%2FXRsVxackrwDveY6Jw7gqBk%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;643&quot; height=&quot;355&quot; data-filename=&quot;image-20200422142221814.png&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장치관리자 &amp;gt; 디스플레이 어댑터&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;그래픽 카드 확인하기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;저의 경우는 NVIDIA GeForce GTX 950M 입니다. 해당 버전에 맞는 cuda를 설치하기위해 찾아가겠습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7OufR/btrGQDjQlgV/SDirYcCzDXJY1bv1R9kiKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7OufR/btrGQDjQlgV/SDirYcCzDXJY1bv1R9kiKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7OufR/btrGQDjQlgV/SDirYcCzDXJY1bv1R9kiKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7OufR%2FbtrGQDjQlgV%2FSDirYcCzDXJY1bv1R9kiKK%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;264&quot; height=&quot;304&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;304&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;2. Compute Capability 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 하드웨어는 CUDA&amp;reg; Compute Capability 3.5 이상의 NVIDIA&amp;reg; GPU 카드만 지원한다고 합니다. 본인의 Compute Capability가 3.5 이상인지 확인하도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인의 컴퓨터 GPU가 충분히 좋다 or 이미 된다는 것을 알고있다 &amp;gt;&amp;gt; 그냥 넘어가셔도됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 링크에 들어가서 본인의 그래픽 카드능력을 확인합니다.저는 NVIDIA GeForce GTX 950M 이므로 GeForce를 클릭해서 들어가겠습니다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-gpus#compute&quot;&gt;https://developer.nvidia.com/cuda-gpus#compute&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422142554403.png&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;779&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ME5WW/btrGTynPqP8/1kkzuXRAaNHqbcOKWIJCf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ME5WW/btrGTynPqP8/1kkzuXRAaNHqbcOKWIJCf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ME5WW/btrGTynPqP8/1kkzuXRAaNHqbcOKWIJCf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FME5WW%2FbtrGTynPqP8%2F1kkzuXRAaNHqbcOKWIJCf0%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;471&quot; data-filename=&quot;image-20200422142554403.png&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;779&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본인 Compute Capability 확인하기&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422142723271.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zGZvb/btrGTwDvOHW/KfBMhyxooZ7G1h0pxft080/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zGZvb/btrGTwDvOHW/KfBMhyxooZ7G1h0pxft080/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zGZvb/btrGTwDvOHW/KfBMhyxooZ7G1h0pxft080/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzGZvb%2FbtrGTwDvOHW%2FKfBMhyxooZ7G1h0pxft080%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;476&quot; height=&quot;154&quot; data-filename=&quot;image-20200422142723271.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 5.0이므로 충분하군요. 다음 진행으로 넘어가겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. NVIDIA 드라이버 설치&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GPU 카드에 맞는 최신 NVIDIA 드라이버를 잡아주도록 합니다.&lt;/li&gt;
&lt;li&gt;아래 주소에 들어가서 본인의 제품을 선택한 후 설치하면 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nvidia.com/Download/index.aspx?lang=kr&quot;&gt;https://www.nvidia.com/Download/index.aspx?lang=kr&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422143302983.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;447&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TetIA/btrGSxppoWg/rG9cq093upuWLhFuKDkPp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TetIA/btrGSxppoWg/rG9cq093upuWLhFuKDkPp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TetIA/btrGSxppoWg/rG9cq093upuWLhFuKDkPp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTetIA%2FbtrGSxppoWg%2FrG9cq093upuWLhFuKDkPp1%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;726&quot; height=&quot;392&quot; data-filename=&quot;image-20200422143302983.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;447&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;검색 &amp;gt; 다운로드 &amp;gt; 다운로드한 드라이버 설치 &amp;gt; 드라이버 설치 완료&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. CUDA Toolkit 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 현재 텐서플로우가 지원하는 CUDA Toolkit 버전이 몇인지 확인하도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 구글에 검색하면 바로 찾을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tensorflow 1.x 버전에서는 GPU를 사용하려면 CUDA 10.0을 설치하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.2.0 설치할 때에는 CUDA&amp;reg; Toolkit 10.1을 설치했었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는&amp;nbsp;22년 7월 기준 &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;CUDA&amp;reg; 11.2(TensorFlow 2.5.0 이상)를 지원합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;TensorFlow 2.5.0 이상의 버전을 설치하는 경우에는 꼭 CUDA 11.2 버전으로 설치하셔야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 버전은 계속해서 업데이트 될 것이므로 현재 Tensorflow가 최신 어떤 버전을 지원하는지 꼭 확인하고 설치하시는 것을 권장드립니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CUDA Toolkit Archive 설치 페이지로 이동합니다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot;&gt;https://developer.nvidia.com/cuda-toolkit-archive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;본인의 환경에 맞는 설치파일을 찾습니다.&lt;/li&gt;
&lt;li&gt;11.2 쿠다를 선택해서 들어갑니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qMjsW/btrGRjE76PU/J1vgsuK8IeJ3V4TJS1q9Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qMjsW/btrGRjE76PU/J1vgsuK8IeJ3V4TJS1q9Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qMjsW/btrGRjE76PU/J1vgsuK8IeJ3V4TJS1q9Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqMjsW%2FbtrGRjE76PU%2FJ1vgsuK8IeJ3V4TJS1q9Kk%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;567&quot; height=&quot;527&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저는 윈도우10 환경이므로 아래와 같이 선택해서 진행하였습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5Q2O1/btrGRkD3Rem/TiqnuI9NfbWp4y9KZRHmYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5Q2O1/btrGRkD3Rem/TiqnuI9NfbWp4y9KZRHmYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5Q2O1/btrGRkD3Rem/TiqnuI9NfbWp4y9KZRHmYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5Q2O1%2FbtrGRkD3Rem%2FTiqnuI9NfbWp4y9KZRHmYK%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;1255&quot; height=&quot;870&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다운로드를 진행합니다.&lt;/li&gt;
&lt;li&gt;다음&amp;gt;다음&amp;gt;다음&amp;gt; 하면서 설치를 완료해주시기 바랍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Visual Studio 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 Visual Studio Community 2017을 설치했습니다. 2019년 너무 최신이고 2015는 조금 오래되기도 했고 이전 버전이 같이 다 설치된다는 애기가 있어서, 저는 2017을 설치했습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Visual Studio 설치 페이지로 이동합니다.&lt;/li&gt;
&lt;li&gt;아래의 두 개의 링크 중 하나 선택해서 받으시면 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/visualstudio/productinfo/2017-redistribution-vs#vs2017-download&quot;&gt;https://docs.microsoft.com/ko-kr/visualstudio/productinfo/2017-redistribution-vs#vs2017-download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/windows/latest-supported-vc-redist?view=msvc-170&quot;&gt;https://docs.microsoft.com/ko-kr/cpp/windows/latest-supported-vc-redist?view=msvc-170&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Community 2017을 선택해서 Community 버전으로 설치를 진행합니다.&lt;/li&gt;
&lt;li&gt;다른 프레임워크나 환경 추가적인 설치할 필요 없이 기본만 설치하시면 충분합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&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;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. CuDNN 설치&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CuDNN 설치 위치로 이동합니다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/cudnn&quot;&gt;https://developer.nvidia.com/cudnn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download cuDNN 을 선택합니다.&lt;/li&gt;
&lt;li&gt;회원에게만 공개되므로 꼭 회원가입 해서 로그인 해야합니다. 오래 걸리지 않고 간단하니 그냥 쭉쭉 진행해줍니다.&lt;/li&gt;
&lt;li&gt;로그인 후 다시 다운로드를 진행합니다.&lt;/li&gt;
&lt;li&gt;압축파일이 다운로드 될 것입니다. 해당 압축을 해재해줍니다.&lt;/li&gt;
&lt;li&gt;내pc &amp;gt; c드라이브 &amp;gt; 프로그램파일 &amp;gt; NVIDIA GPU Computing Toolkit &amp;gt; CUDA &amp;gt; 10.1 로 이동해줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pTyMk/btrGQDRElLO/hxyhGm4Hds48jzrQi6I8Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pTyMk/btrGQDRElLO/hxyhGm4Hds48jzrQi6I8Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pTyMk/btrGQDRElLO/hxyhGm4Hds48jzrQi6I8Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpTyMk%2FbtrGQDRElLO%2FhxyhGm4Hds48jzrQi6I8Ek%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;717&quot; height=&quot;357&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;압축해제한 폴더에 있는 모든 파일을 복사해서 C드라이브 CUDA 10.1 폴더에 붙여넣기 해줍니다. 모두 진행하기로 덮어씌워줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422145224351.png&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMssIs/btrGUsHE4IQ/6SSXasp5zvY5KJ6ivjl7H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMssIs/btrGUsHE4IQ/6SSXasp5zvY5KJ6ivjl7H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMssIs/btrGUsHE4IQ/6SSXasp5zvY5KJ6ivjl7H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMssIs%2FbtrGUsHE4IQ%2F6SSXasp5zvY5KJ6ivjl7H0%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;694&quot; height=&quot;409&quot; data-filename=&quot;image-20200422145224351.png&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;409&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;h2 data-ke-size=&quot;size26&quot;&gt;5. 환경 변수 설정&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;환경 변수 설정을 위해 &lt;code&gt;시스템 환경 변수 편집&lt;/code&gt;으로 들어가줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422145444344.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNz8qn/btrGVk3EU6u/BcaiyUgRTvEkTPzKmaZ3K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNz8qn/btrGVk3EU6u/BcaiyUgRTvEkTPzKmaZ3K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNz8qn/btrGVk3EU6u/BcaiyUgRTvEkTPzKmaZ3K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNz8qn%2FbtrGVk3EU6u%2FBcaiyUgRTvEkTPzKmaZ3K0%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;690&quot; height=&quot;462&quot; data-filename=&quot;image-20200422145444344.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;환경 변수 설정을 누룹니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422145546845.png&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2FYCt/btrGVj4KYTf/zsgrrYrdCFmTkWYSR8oSB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2FYCt/btrGVj4KYTf/zsgrrYrdCFmTkWYSR8oSB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2FYCt/btrGVj4KYTf/zsgrrYrdCFmTkWYSR8oSB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2FYCt%2FbtrGVj4KYTf%2FzsgrrYrdCFmTkWYSR8oSB0%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;455&quot; height=&quot;424&quot; data-filename=&quot;image-20200422145546845.png&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;path&lt;/code&gt;를 누르고 편집을 누릅니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422145658764.png&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBQ0UG/btrGS4At802/rpsphAI7TCR0EFdXjEctG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBQ0UG/btrGS4At802/rpsphAI7TCR0EFdXjEctG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBQ0UG/btrGS4At802/rpsphAI7TCR0EFdXjEctG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBQ0UG%2FbtrGS4At802%2FrpsphAI7TCR0EFdXjEctG1%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;506&quot; height=&quot;511&quot; data-filename=&quot;image-20200422145658764.png&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; start=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;path를 추가해줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;image-20200422150132298.png&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QQj2f/btrGRi0xEwD/YyB82sbmlT7jfp4i6f7sRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QQj2f/btrGRi0xEwD/YyB82sbmlT7jfp4i6f7sRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QQj2f/btrGRi0xEwD/YyB82sbmlT7jfp4i6f7sRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQQj2f%2FbtrGRi0xEwD%2FYyB82sbmlT7jfp4i6f7sRk%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;575&quot; height=&quot;78&quot; data-filename=&quot;image-20200422150132298.png&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\libx64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include

# 자신의 CUDA 설치한 버전에 맞게 경로 설정하세요
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\CUPTI\libx64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include&lt;/code&gt;&lt;/pre&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;h2 data-ke-size=&quot;size26&quot;&gt;6. 설정 확인&lt;/h2&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;widthContent&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM6tib/btrGTyg2DZN/lrKhD1S8CaVsuS1QAE2PCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM6tib/btrGTyg2DZN/lrKhD1S8CaVsuS1QAE2PCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM6tib/btrGTyg2DZN/lrKhD1S8CaVsuS1QAE2PCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM6tib%2FbtrGTyg2DZN%2FlrKhD1S8CaVsuS1QAE2PCK%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;442&quot; height=&quot;354&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텐서플로우를 실행해서 버전을 확인해봅니다. 실제 import가 잘 되서 버전확인이 되는지 확인합니다. 여기까지 성공했다면 일단 tensorflow가 설치는 된 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 GPU버전이 설치되어서 연동되는지 확인해보겠습니다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;from tensorflow.python.client import device_lib
device_lib.list_local_devices()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 결과는 아래 이미지와 같이 나왔습니다. 자세히 보면 device_type이 나와있습니다. CPU 뿐만 아니라 GPU가 나오는지 확인해 주시면 되겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clR8pg/btrGSxJFpVq/X0tToegWsNyyDtrOu8vnKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clR8pg/btrGSxJFpVq/X0tToegWsNyyDtrOu8vnKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clR8pg/btrGSxJFpVq/X0tToegWsNyyDtrOu8vnKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclR8pg%2FbtrGSxJFpVq%2FX0tToegWsNyyDtrOu8vnKk%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;624&quot; height=&quot;636&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동작까지 확인하고 모델 학습을 실행하시고 작업관리자에서 gpu가 사용되는 것을 확인하면 됩니다.&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;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&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;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/파이썬 환경 설정</category>
      <category>tensorflow 2.5.0</category>
      <category>tensorflow 2.5.0 gpu</category>
      <category>tensorflow gpu</category>
      <category>tensorflow gpu window</category>
      <category>tensorflow gpu사용</category>
      <category>tensorflow 설치</category>
      <category>tensorflow 지원 그래픽카드</category>
      <category>텐서플로우</category>
      <category>텐서플로우 그래픽 버전</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/223</guid>
      <comments>https://chancoding.tistory.com/223#entry223comment</comments>
      <pubDate>Sat, 9 Jul 2022 23:46:35 +0900</pubDate>
    </item>
    <item>
      <title>[Python] datetime 모듈 날짜 시간 포맷 맞추기와 포맷 코드 종류</title>
      <link>https://chancoding.tistory.com/222</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;날짜와 시간 포맷에 맞춰서 출력하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;datetime 객체로부터 날짜와 시간을 가져올 때 기본 형식말고 원하는 대로 포맷을 바꿔주고 싶을때는 &lt;code&gt;strftime()&lt;/code&gt; 메소드를 사용해서 원하는 포맷을 파라미터로 넣어주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, &lt;code&gt;2021-06-23&lt;/code&gt; 형식으로 표시하고 싶다면 포맷을 넣는 곳에 &lt;code&gt;%Y/%m/%d&lt;/code&gt; 를 써주면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import datetime

now = datetime.datetime.now()
now_date = now.strftime('%Y/%m/%d')

print(now_date)  # 2021/06/23&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;12시 11분 32초&lt;/code&gt; 형식으로 표시하고 싶다면, &lt;code&gt;%H시 %M분 %S초&lt;/code&gt; 를 포맷으로 넘겨주시면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import datetime

now = datetime.datetime.now()
now_time = now.strftime('%H시 %M분 %S초')

print(now_time)  # 19시 41분 45초&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 위 두 가지를 합칠 수도 있습니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import datetime

now = datetime.datetime.now()
now_format = now.strftime('%Y/%m/%d %H시 %M분 %S초')

print(now_format)  # 2021/06/23 19시 42분 49초&lt;/code&gt;&lt;/pre&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;포맷 코드 표&lt;/b&gt;&lt;/h2&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;포맷코드&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;th&gt;예&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;%a&lt;/td&gt;
&lt;td&gt;요일 줄임말&lt;/td&gt;
&lt;td&gt;Sun, Mon, ... Sat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%A&lt;/td&gt;
&lt;td&gt;요일&lt;/td&gt;
&lt;td&gt;Sunday, Monday, ..., Saturday&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%w&lt;/td&gt;
&lt;td&gt;요일을 숫자로 표시, 월요일&lt;del&gt;일요일, 0&lt;/del&gt;6&lt;/td&gt;
&lt;td&gt;0, 1, ..., 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%d&lt;/td&gt;
&lt;td&gt;일&lt;/td&gt;
&lt;td&gt;01, 02, ..., 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%b&lt;/td&gt;
&lt;td&gt;월 줄임말&lt;/td&gt;
&lt;td&gt;Jan, Feb, ..., Dec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%B&lt;/td&gt;
&lt;td&gt;월&lt;/td&gt;
&lt;td&gt;January, February, &amp;hellip;, December&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%m&lt;/td&gt;
&lt;td&gt;숫자 월&lt;/td&gt;
&lt;td&gt;01, 02, ..., 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%y&lt;/td&gt;
&lt;td&gt;두 자릿수 연도&lt;/td&gt;
&lt;td&gt;01, 02, ..., 99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%Y&lt;/td&gt;
&lt;td&gt;네 자릿수 연도&lt;/td&gt;
&lt;td&gt;0001, 0002, ..., 2017, 2018, 9999&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%H&lt;/td&gt;
&lt;td&gt;시간(24시간)&lt;/td&gt;
&lt;td&gt;00, 01, ..., 23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%I&lt;/td&gt;
&lt;td&gt;시간(12시간)&lt;/td&gt;
&lt;td&gt;01, 02, ..., 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%p&lt;/td&gt;
&lt;td&gt;AM, PM&lt;/td&gt;
&lt;td&gt;AM, PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%M&lt;/td&gt;
&lt;td&gt;분&lt;/td&gt;
&lt;td&gt;00, 01, ..., 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%S&lt;/td&gt;
&lt;td&gt;초&lt;/td&gt;
&lt;td&gt;00, 01, ..., 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%Z&lt;/td&gt;
&lt;td&gt;시간대&lt;/td&gt;
&lt;td&gt;대한민국 표준시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%j&lt;/td&gt;
&lt;td&gt;1월 1일부터 경과한 일수&lt;/td&gt;
&lt;td&gt;001, 002, ..., 366&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%U&lt;/td&gt;
&lt;td&gt;1년중 주차, 월요일이 한 주의 시작으로&lt;/td&gt;
&lt;td&gt;00, 01, ..., 53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%W&lt;/td&gt;
&lt;td&gt;1년중 주차, 월요일이 한 주의 시작으로&lt;/td&gt;
&lt;td&gt;00, 01, ..., 53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%c&lt;/td&gt;
&lt;td&gt;날짜, 요일, 시간을 출력, 현재 시간대 기준&lt;/td&gt;
&lt;td&gt;Sat May 19 11:14:27 2018&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%x&lt;/td&gt;
&lt;td&gt;날짜를 출력, 현재 시간대 기준&lt;/td&gt;
&lt;td&gt;05/19/18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%X&lt;/td&gt;
&lt;td&gt;시간을 출력, 현재 시간대 기준&lt;/td&gt;
&lt;td&gt;'11:44:22'&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Codeit 강의 &amp;amp; &lt;a href=&quot;https://docs.python.org/ko/3/library/datetime.html&quot;&gt;공식문서 https://docs.python.org/ko/3/library/datetime.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/222</guid>
      <comments>https://chancoding.tistory.com/222#entry222comment</comments>
      <pubDate>Fri, 8 Jul 2022 14:19:44 +0900</pubDate>
    </item>
    <item>
      <title>코린이에게 추천하는 코딩강의 - 코드잇 - 직접 듣고 느낀 후기</title>
      <link>https://chancoding.tistory.com/221</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&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;코드잇&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매우 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2020년에 1년 무제한 멤버십 강의를 들었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 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;여하튼 내 돈 주고 들었는데 확실히 좋았어서 추천 겸 글을 작성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgyW0A/btrGw1yJMAc/BzKAKAHBNxlnzUQr3XIZyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgyW0A/btrGw1yJMAc/BzKAKAHBNxlnzUQr3XIZyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgyW0A/btrGw1yJMAc/BzKAKAHBNxlnzUQr3XIZyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgyW0A%2FbtrGw1yJMAc%2FBzKAKAHBNxlnzUQr3XIZyK%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;337&quot; height=&quot;190&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 20년에 들은거 왜 결제일 1970년이지 ㅇㅅㅇ;;???&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드잇 장점&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예쁘고 직관적인 UI/UX&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 사이트 자체도 진짜 예쁘게 잘 만들었음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 UI가 깔끔하고 군더더기 없이 좋음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩 교육하는 곳에서 UI 후지면 일단 Front 강의를 거기서는 절대 들을 이유가 없다고 생각함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의 자료들도 진짜 너무 깔끔하게 잘 만들어져 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동영상 강의에 나오는 것들이 PPT 같은 것으로 만든 것이 아님&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;디테일하고 자세한 설명&lt;/b&gt;&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Pythonic&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 강좌가 좀 잘돼 있음, js 랑 이런 건 안 들었음..ㅎ;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 자체가 Pythonic 하다고 해야 하나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 파이썬 강의 보면 자바나 C++ 하셨던 분들이 파이썬 배워서 강의하시는 경우가 있음&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;파이썬 Class 쪽 강의가 좀 잘돼 있음, 보통 class 쪽 강의가 허접한 Case들이 많은데 여긴 괜춘&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;b&gt;수강 및 결재 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이하게 여기는 멤버십 결재 방식으로 수업을 들을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 쉽게 OTT같이 매달 결재해서 그 달에 무제한 수강할 수 있음&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드잇 단점&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;강의 난이도&lt;/b&gt;&lt;/h3&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;그래서 어느 정도 듣고 나면 들을 게 없다는 게 단점&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;a href=&quot;https://www.codeit.kr&quot;&gt;https://www.codeit.kr&lt;/a&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;</description>
      <category>파이썬</category>
      <category>codeit</category>
      <category>강의후기</category>
      <category>초보자</category>
      <category>코드잇</category>
      <category>코딩강의</category>
      <category>코딩강의후기</category>
      <category>코린이</category>
      <category>코심자</category>
      <category>파이썬</category>
      <category>후기</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/221</guid>
      <comments>https://chancoding.tistory.com/221#entry221comment</comments>
      <pubDate>Tue, 5 Jul 2022 23:49:48 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Pandas 판다스는 과연 빠른가 ? 속도확인 value_counts, unique, drop_duplicates</title>
      <link>https://chancoding.tistory.com/220</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h1,h2,h3&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&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;code&gt;DataFrame&lt;/code&gt;을 다루는 것이 느린 것 같다는 의문을 가지는 경우가 종종있다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 데이터프레임의 매소드인 &lt;code&gt;value_counts&lt;/code&gt;와 &lt;code&gt;unique&lt;/code&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&gt;결론 먼저 애기하자면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;그냥&lt;span&gt;&amp;nbsp;&lt;/span&gt;pandas사용하는 것이 맘편하다...ㅇㅅㅇ;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도 측정은&amp;nbsp;쥬피터의 %%timeit을 사용해서 시간을 측정하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%timeit에 대해서 더 알아보려면 아래 링크를 참고하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[파이썬] %timeit으로 jupyter notebook에서 Cell 단위 코드 수행 시간 확인하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1656477102928&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;[파이썬] %timeit으로 jupyter notebook에서 Cell 단위 코드 수행 시간 확인하기&quot; data-og-description=&quot;목차 들어가며 jupyter notebook 에서 셀 단위로 속도를 확인하는 방법을 알아보자. 속도를 비교해볼 함수 리스트의 원소들을 모두 곱하는 함수로 아래와 같다. def multiplyAll_v1(s:list) -&amp;gt; int: ans = 1 for n..&quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/187&quot; data-og-url=&quot;https://chancoding.tistory.com/187&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bf7wUO/hyOVXZNyX4/VJfnNMm5uFH3WiMCAexzG1/img.png?width=547&amp;amp;height=170&amp;amp;face=0_0_547_170,https://scrap.kakaocdn.net/dn/QJVAJ/hyOU2hliLL/osMvcw506ZOOIpApxvEdPK/img.png?width=547&amp;amp;height=170&amp;amp;face=0_0_547_170,https://scrap.kakaocdn.net/dn/eemmoc/hyOVRkXlSk/Gz1evYmb01QwEmezBo5QkK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/187&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/187&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bf7wUO/hyOVXZNyX4/VJfnNMm5uFH3WiMCAexzG1/img.png?width=547&amp;amp;height=170&amp;amp;face=0_0_547_170,https://scrap.kakaocdn.net/dn/QJVAJ/hyOU2hliLL/osMvcw506ZOOIpApxvEdPK/img.png?width=547&amp;amp;height=170&amp;amp;face=0_0_547_170,https://scrap.kakaocdn.net/dn/eemmoc/hyOVRkXlSk/Gz1evYmb01QwEmezBo5QkK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[파이썬] %timeit으로 jupyter notebook에서 Cell 단위 코드 수행 시간 확인하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 들어가며 jupyter notebook 에서 셀 단위로 속도를 확인하는 방법을 알아보자. 속도를 비교해볼 함수 리스트의 원소들을 모두 곱하는 함수로 아래와 같다. def multiplyAll_v1(s:list) -&amp;gt; int: ans = 1 for n..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;DataFrame 10,000 line &amp;amp; unique value 1000개 짜리 데이터&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 Row line 수가 1만 라인에 유니크안 값이 1000개 정도인 데이터에 대해서 진행해보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.value_counts()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;value_counts&lt;/code&gt;를 위해서 비교군으로 &lt;code&gt;dictionary&lt;/code&gt;를 사요했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 &lt;code&gt;key&lt;/code&gt; 값이 몇 번 발생했는지를 &lt;code&gt;value&lt;/code&gt;로 저장하는 방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220629123645635.png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwDtN/btrF3Mmx7Q5/5NI1jYd4z0K53EoN4KQaIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwDtN/btrF3Mmx7Q5/5NI1jYd4z0K53EoN4KQaIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwDtN/btrF3Mmx7Q5/5NI1jYd4z0K53EoN4KQaIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwDtN%2FbtrF3Mmx7Q5%2F5NI1jYd4z0K53EoN4KQaIk%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;619&quot; height=&quot;274&quot; data-filename=&quot;image-20220629123645635.png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 자체가 훨씬 적은 경우에는 아래쪽의 &lt;code&gt;dictionray&lt;/code&gt;방식이 훨씬 빨랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 해당 데이터에서는 &lt;code&gt;DataFrame&lt;/code&gt;을 사용하는 것이 더 빠르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.unique()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;uniqe&lt;/code&gt;한 값으로 있는지 없는지만 확인하면 되므로 비교군으로 &lt;code&gt;set&lt;/code&gt;을 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;set&lt;/code&gt;을 사용하는 경우가 조금 더 빨랐다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220629123718411.png&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uYNjH/btrF2NsDkZY/R1odxfKBkLkFekkLuFjRu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uYNjH/btrF2NsDkZY/R1odxfKBkLkFekkLuFjRu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uYNjH/btrF2NsDkZY/R1odxfKBkLkFekkLuFjRu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuYNjH%2FbtrF2NsDkZY%2FR1odxfKBkLkFekkLuFjRu1%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;613&quot; height=&quot;233&quot; data-filename=&quot;image-20220629123718411.png&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;DataFrame 70,000 line &amp;amp; unique value 1000개 짜리 데이터&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 데이터 자체가 훨씬 많은 경우로 확인해보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.value_counts()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 자체의 수가 점점 많아지자 &lt;code&gt;DataFrame&lt;/code&gt;을 사용하는 경우와 &lt;code&gt;Dictionary&lt;/code&gt;를 사용하는 경우의 차이가 훨씬 커졌다.&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;image-20220629125602300.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z2oF8/btrFZEDJwkK/CxzkJ3c0ly84q1Dz1dGXqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z2oF8/btrFZEDJwkK/CxzkJ3c0ly84q1Dz1dGXqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z2oF8/btrFZEDJwkK/CxzkJ3c0ly84q1Dz1dGXqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz2oF8%2FbtrFZEDJwkK%2FCxzkJ3c0ly84q1Dz1dGXqK%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;624&quot; height=&quot;354&quot; data-filename=&quot;image-20220629125602300.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.unique()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니크한 값을 찾는 경우에서는 &lt;code&gt;set&lt;/code&gt;을 사용하는 방식이 조금 더 빨랐다.&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;image-20220629125625766.png&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QPLZS/btrF2MgbpSo/5LilscZ4StqU3N4V0z2HrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QPLZS/btrF2MgbpSo/5LilscZ4StqU3N4V0z2HrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QPLZS/btrF2MgbpSo/5LilscZ4StqU3N4V0z2HrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQPLZS%2FbtrF2MgbpSo%2F5LilscZ4StqU3N4V0z2HrK%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;605&quot; height=&quot;241&quot; data-filename=&quot;image-20220629125625766.png&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;DataFrame 70,000 line &amp;amp; unique value 10000개 짜리 데이터&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 unique한 값들이 훨씬 많은 경우를 확인해보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.value_counts()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 DataFrame이 훨씬 빠르다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220629125703499.png&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r0lCs/btrF1Crl6mI/sLULxfYvacIqIKzgUFXWp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r0lCs/btrF1Crl6mI/sLULxfYvacIqIKzgUFXWp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r0lCs/btrF1Crl6mI/sLULxfYvacIqIKzgUFXWp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr0lCs%2FbtrF1Crl6mI%2FsLULxfYvacIqIKzgUFXWp0%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;615&quot; height=&quot;365&quot; data-filename=&quot;image-20220629125703499.png&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;365&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.unique()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;set&lt;/code&gt;을 사용하는 경우가 훨씬 빠른 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220629125727856.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo9dzJ/btrF3hmKYCz/EaFKUEYTcJI0260LtDOSGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo9dzJ/btrF3hmKYCz/EaFKUEYTcJI0260LtDOSGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo9dzJ/btrF3hmKYCz/EaFKUEYTcJI0260LtDOSGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo9dzJ%2FbtrF3hmKYCz%2FEaFKUEYTcJI0260LtDOSGk%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;603&quot; height=&quot;244&quot; data-filename=&quot;image-20220629125727856.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;DataFrame 16,000,000 line &amp;amp; unique value 100,000개 짜리 데이터&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.3GB가 넘는 데이터를 사용해서 확인해보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.value_counts()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여전히 DataFrmae을 사용하는 것이 유리하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220629131051527.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lal9w/btrFZlLdpEK/aNlaHnk7Cy42lUqPOY6xZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lal9w/btrFZlLdpEK/aNlaHnk7Cy42lUqPOY6xZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lal9w/btrFZlLdpEK/aNlaHnk7Cy42lUqPOY6xZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLal9w%2FbtrFZlLdpEK%2FaNlaHnk7Cy42lUqPOY6xZk%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;624&quot; height=&quot;361&quot; data-filename=&quot;image-20220629131051527.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.unique()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;set&lt;/code&gt;을 사용하는 방식이 조금 더 유리하다.&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;image-20220629131059393.png&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diyIDm/btrF2MtJu2p/FswLbcou3LtLGEshJIkVy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diyIDm/btrF2MtJu2p/FswLbcou3LtLGEshJIkVy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diyIDm/btrF2MtJu2p/FswLbcou3LtLGEshJIkVy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiyIDm%2FbtrF2MtJu2p%2FFswLbcou3LtLGEshJIkVy0%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;597&quot; height=&quot;248&quot; data-filename=&quot;image-20220629131059393.png&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;DataFrame 16,000,000 line &amp;amp; unique value 2,500,000개 짜리 데이터&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220629131518574.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oZQMR/btrF0R2Y08p/VCuaQd9RpmuBjguFoAINZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oZQMR/btrF0R2Y08p/VCuaQd9RpmuBjguFoAINZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oZQMR/btrF0R2Y08p/VCuaQd9RpmuBjguFoAINZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoZQMR%2FbtrF0R2Y08p%2FVCuaQd9RpmuBjguFoAINZ0%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;640&quot; height=&quot;598&quot; data-filename=&quot;image-20220629131518574.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.value_counts()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 DataFrame이 더 느려졌다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;pandas.DataFrame.unique()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;set&lt;/code&gt;을 사용하는 것이 훨씬 빠르다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;중복되지 않은 특정 데이터 셋 찾기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;100줄 짜리 데이터프레임&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nxuEH/btrF757hVau/x39kKzbLF7Jw6a1CtrIEjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nxuEH/btrF757hVau/x39kKzbLF7Jw6a1CtrIEjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nxuEH/btrF757hVau/x39kKzbLF7Jw6a1CtrIEjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnxuEH%2FbtrF757hVau%2Fx39kKzbLF7Jw6a1CtrIEjK%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;635&quot; height=&quot;189&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5만 줄 짜리 데이터프레임&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O56KH/btrF4Eo6GV3/QjUifrEgvIqmcvoWxePhD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O56KH/btrF4Eo6GV3/QjUifrEgvIqmcvoWxePhD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O56KH/btrF4Eo6GV3/QjUifrEgvIqmcvoWxePhD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO56KH%2FbtrF4Eo6GV3%2FQjUifrEgvIqmcvoWxePhD1%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;637&quot; height=&quot;200&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;200&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;데이터의 크기가 커질수록 데이터프레임을 쓰는 것이 훨씬 좋은 성능을 보이고있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 숫자와 결과를 비교해보면 패턴이 있다는 것을 쉽게 눈치챘을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;DataFrame&lt;/code&gt; 전체 길이에 비해서 unique한 값들의 수가 많아질수록 &lt;code&gt;set&lt;/code&gt;을 사용하는 것이 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unique한 값이 크게 많지 않다면 &lt;code&gt;DataFrame&lt;/code&gt;의 &lt;code&gt;method&lt;/code&gt;를 사용하는 것이 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 후, 1GB 이상의 데이터들에 대해서는 점차 데이터를 조회하는 것에 대한 시간이 오래걸리는 것을 유추할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Dictionary&lt;/code&gt; 또한 &lt;code&gt;Set&lt;/code&gt;과 마찬가지로 &lt;code&gt;hash&lt;/code&gt;방식의 데이터 조회를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unique한 데이터가 많은 마지막 Case를 보면 &lt;code&gt;DataFrmae&lt;/code&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;다루는 데이터가 1GB 이상의 대용량 데이터가 많고 unique한 값들 또한 많다면, &lt;code&gt;Set&lt;/code&gt;과 &lt;code&gt;Dictionary&lt;/code&gt;를 사용한 함수를 따로 작성해서 사용하면 성능을 높일 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, 1GB 이상의 데이터가 많지 않고 그 이하의 용량을 가진 데이터를 다수 사용한다면, &lt;code&gt;Pandas&lt;/code&gt;라이브러리를 편하게 사용하는 것이 훨씬 수고스럽지 않고 효율적이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맘편하게 &lt;code&gt;Pandas&lt;/code&gt;쓰자..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우도 대용량 데이터를 다루지만, 파일을 쪼개서 분석 및 처리를 진행하고 있어, 1GB 이상의 데이터의 비중이 매우 낮다.&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;추가적으로 데이터가 길던 짧던 len(df) 는 O(n) 으로 2us 고정인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;&lt;b&gt;다른 방안?&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;modin.pandas&lt;/code&gt;도 사용해보았지만, &lt;code&gt;csv&lt;/code&gt;파일을 많이 읽고 다루다보니 Error가 많이 발생하기도 하고&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;Pandas에서 잘되었던 것들이 &lt;code&gt;modin.pandas&lt;/code&gt;를 사용하면, 안되거나 오류를 발생하는 것들이 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 하나 하나의 크기가 크다면, &lt;code&gt;modin&lt;/code&gt;을 사용하면 좋겠지만, 작을 파일들을 다수 사용하는 나는 그냥 판다스에 &lt;code&gt;multiprocess&lt;/code&gt;를 사용하는 것이 더 빠르다고 느꼈다.&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>DataFrame.unique</category>
      <category>pandas</category>
      <category>python</category>
      <category>value_counts</category>
      <category>대용량데이터</category>
      <category>데이터분석</category>
      <category>파이썬</category>
      <category>판다스</category>
      <category>판다스 속도</category>
      <category>판다스 시간</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/220</guid>
      <comments>https://chancoding.tistory.com/220#entry220comment</comments>
      <pubDate>Wed, 29 Jun 2022 13:34:30 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬 에러] Unable to allocate 401. MiB for an array with shape (16, 3288350) and data type int64</title>
      <link>https://chancoding.tistory.com/219</link>
      <description>&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;&lt;a href=&quot;https://bskyvision.com/799&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bskyvision.com/799&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655894853558&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;[python] 메모리 에러 해결법(MemoryError: Unable to allocate ## for an array with shape ## and data type ##)&quot; data-og-description=&quot;안녕하세요. 비스카이비전입니다. 저는 최근에 윈도우10, 아나콘다 환경에서 파이썬 코드를 실행하다가 종종 다음과 같은 에러를 만났었습니다. 메모리에러 즉, 램(RAM) 메모리가 부족해서 생기&quot; data-og-host=&quot;bskyvision.com&quot; data-og-source-url=&quot;https://bskyvision.com/799&quot; data-og-url=&quot;https://bskyvision.com/799&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oR23N/hyOQmzTG8E/VohPvwEXvPaSaHhAu9Jwqk/img.png?width=533&amp;amp;height=58&amp;amp;face=0_0_533_58,https://scrap.kakaocdn.net/dn/MnraC/hyOQlHIVoN/jB7U6NnMZ5Jik7fbKgJ1vk/img.png?width=533&amp;amp;height=58&amp;amp;face=0_0_533_58,https://scrap.kakaocdn.net/dn/d3xSv9/hyORG4yHrZ/Dw6EpYAbK9sVx1PiBZdsuK/img.png?width=499&amp;amp;height=688&amp;amp;face=0_0_499_688&quot;&gt;&lt;a href=&quot;https://bskyvision.com/799&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bskyvision.com/799&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oR23N/hyOQmzTG8E/VohPvwEXvPaSaHhAu9Jwqk/img.png?width=533&amp;amp;height=58&amp;amp;face=0_0_533_58,https://scrap.kakaocdn.net/dn/MnraC/hyOQlHIVoN/jB7U6NnMZ5Jik7fbKgJ1vk/img.png?width=533&amp;amp;height=58&amp;amp;face=0_0_533_58,https://scrap.kakaocdn.net/dn/d3xSv9/hyORG4yHrZ/Dw6EpYAbK9sVx1PiBZdsuK/img.png?width=499&amp;amp;height=688&amp;amp;face=0_0_499_688');&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;[python] 메모리 에러 해결법(MemoryError: Unable to allocate ## for an array with shape ## and data type ##)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 비스카이비전입니다. 저는 최근에 윈도우10, 아나콘다 환경에서 파이썬 코드를 실행하다가 종종 다음과 같은 에러를 만났었습니다. 메모리에러 즉, 램(RAM) 메모리가 부족해서 생기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bskyvision.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/파이썬 환경 설정</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/219</guid>
      <comments>https://chancoding.tistory.com/219#entry219comment</comments>
      <pubDate>Wed, 22 Jun 2022 19:47:45 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - 정렬 - 가장 큰 수 : Case 비교 예시 설명</title>
      <link>https://chancoding.tistory.com/218</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;가장 큰 수&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;numbers의 길이는 1 이상 100,000 이하입니다.&lt;/li&gt;
&lt;li&gt;numbers의 원소는 0 이상 1,000 이하입니다.&lt;/li&gt;
&lt;li&gt;정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/h3&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;numbers&lt;/th&gt;
&lt;th&gt;return&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[6, 10, 2]&lt;/td&gt;
&lt;td&gt;&quot;6210&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[3, 30, 34, 5, 9]&lt;/td&gt;
&lt;td&gt;&quot;9534330&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[3, 39, 34, 5, 9, 0]&lt;/td&gt;
&lt;td&gt;&quot;95393430&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[30, 39, 34, 5, 9, 3]&lt;/td&gt;
&lt;td&gt;&quot;953934330&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[0, 0, 0, 0]&lt;/td&gt;
&lt;td&gt;&quot;0&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: str(x) * 3, reverse=True)

    return str(int(&quot;&quot;.join(numbers)))&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;&lt;b&gt;문제 풀이 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실상 가장 앞자리가 큰 애들이 먼저 오면 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Test Case 1번을 참고하면 쉽게 이해된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 앞자리가 같은 경우, 그다음 자리가 문제가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다음 2 가지 Case를 생각하면 좋다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1번 Case - [3, 30, 34, 39]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 Sorting 해보아서 알겠지만, 그냥 &lt;code&gt;sort&lt;/code&gt;하면 &lt;code&gt;[39, 34, 30, 3]&lt;/code&gt; 순서로 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 우리가 원하는 결과는 &lt;code&gt;[39, 34, 3, 30]&lt;/code&gt; 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자리수가 같지 않아서 &lt;code&gt;3&lt;/code&gt;과 &lt;code&gt;30&lt;/code&gt;의 비교가 어렵다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2번 Case - [9, 93, 95, 90]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 sorting : &lt;code&gt;[95, 93, 90, 9]&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 값 : &lt;code&gt;[9, 95, 93, 90]&lt;/code&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Case 종합&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 Case를 비교해보면 한자리 값이 문제가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 Case에서는 3이 중간에 와줘야하고 2번 Case를 보면 9가 맨 앞으로 와줘야한다.&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;9를 99로 바꾸고 3을 33으로 바꾸면 위의 결과와 같은 정렬 방식을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 정렬의 key 값을 &lt;code&gt;key=lambda x: str(x) * 3&lt;/code&gt; 으로 설정한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;numbers&lt;/code&gt;의 원소가 0에서 1,000 이하의 숫자이므로 &lt;code&gt;str(x) * 3&lt;/code&gt; 을 해서 &lt;code&gt;&quot;9&quot; -&amp;gt; &quot;
999&quot;&lt;/code&gt; 이렇게 만들어 준 후 정렬을 한 것이다. 세자리 수를 맞춰주기 위함이다.&lt;/p&gt;</description>
      <category>파이썬/알고리즘</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/218</guid>
      <comments>https://chancoding.tistory.com/218#entry218comment</comments>
      <pubDate>Tue, 21 Jun 2022 23:59:36 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Plotly 자주 사용하는 Layout 설정 - title, 축 label, font, subtitle, position 등</title>
      <link>https://chancoding.tistory.com/217</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Plotly&lt;/code&gt; 그래프를 그릴 때 마다 레이아웃 설정하는 부분들이 생각이 안나서 찾아보는 경우가 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 자주 사용하는 layout 설정 소스코드를 작성해서 필요한 부분에 맞게 복분할 수 있도록 앞으로 모아갈 예정이다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import plotly.graph_objects as go
import plotly.express as px

fail_area = df['불량위치'].value_counts()

fig = go.Figure(data=[go.Bar(
        x=[chr(i) for i in range(65, 65+len(fail_area.values))],
        y=fail_area.values,
        marker_color=px.colors.qualitative.Dark24,
    )])

fig.update_layout(
    title=dict(
        # &amp;lt;br&amp;gt; 태크와 &amp;lt;sup&amp;gt;태그 사용해서 서브 타이틀을 작성할 수 있음
        text='&amp;lt;b&amp;gt;관련 불량 위치 수&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;sup&amp;gt;Check All Error Pin Point by Portion&amp;lt;/sup&amp;gt;',
        x=0.5,
        y=0.87,
        font=dict(
            family=&quot;Arial&quot;,
            size=25,
            color=&quot;#000000&quot;
        )
    ),
    xaxis_title=dict(
        text=&quot;&amp;lt;b&amp;gt;Fail Point&amp;lt;/b&amp;gt;&quot;
    ),
    yaxis_title=&quot;&amp;lt;b&amp;gt;Portion(%)&amp;lt;/b&amp;gt;&quot;,
    font=dict(
        family=&quot;Courier New, Monospace&quot;,
        size=12,
        color=&quot;#000000&quot;
    ),
    showlegend=False,
    margin = dict(l=10, r=10, b=10)
)


fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Plotly Layout 관련 래퍼런스 및 설명은 &lt;a href=&quot;https://plotly.com/python/reference/layout/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식 사이트&lt;/a&gt;에서 참고해도된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rKLwo/btrEKU74tTC/bMKkqIpHamAcOgTQ18ZDNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rKLwo/btrEKU74tTC/bMKkqIpHamAcOgTQ18ZDNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rKLwo/btrEKU74tTC/bMKkqIpHamAcOgTQ18ZDNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrKLwo%2FbtrEKU74tTC%2FbMKkqIpHamAcOgTQ18ZDNk%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;965&quot; height=&quot;508&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Subtitle&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;&lt;/code&gt; 태그를 사용해서 Bold체 설정하여 글씨를 두껍게 할 수 있다.&lt;br /&gt;&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; 태그를 사용하면 글의 줄을 바꿀 수 있다.&lt;br /&gt;&lt;code&gt;&amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&lt;/code&gt; 태그를 사용해서 subTitle을 달아줄 수 있다. &lt;code&gt;&amp;lt;sub&amp;gt;&amp;lt;/sub&amp;gt;&lt;/code&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;code&gt;&lt;b&gt;&amp;lt;sup&amp;gt;&lt;/b&gt;&lt;/code&gt;&lt;b&gt; 태그와 &lt;code&gt;&amp;lt;sub&amp;gt;&lt;/code&gt; 태그의 차이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &amp;lt;sub&amp;gt;태그 : 아래첨자를 넣고 싶을 때 사용합니다.&amp;nbsp;subscript를&amp;nbsp;의미합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1555337163341&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;이것은 아래첨자&amp;lt;sub&amp;gt;아래첨자&amp;lt;/sub&amp;gt; 입니다.&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 : 이것은 아래첨자&lt;sub&gt;아래첨자&lt;/sub&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간색으로 표시된 부분이 sub 태그 부분입니다.&lt;/p&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&gt;2. &amp;lt;sup&amp;gt;태그 : 윗첨자를 넣고 싶을 때 사용합니다.&amp;nbsp;super&amp;nbsp;subscript를&amp;nbsp;의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1555337391252&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;이것은 윗첨자&amp;lt;sup&amp;gt;윗첨자&amp;lt;/sup&amp;gt; 입니다.&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 : 이것은 윗첨자&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;sup&gt;윗첨자&lt;/sup&gt;&lt;/span&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;빨간색으로 표시된 부분이 sup 태그 부분입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://travelpark.tistory.com/37&quot;&gt;https://travelpark.tistory.com/37&lt;/a&gt; [Bon Voyage!:티스토리]&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;그래프 안에 숫자 표시하기&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1655716182286&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import plotly.graph_objects as go
import plotly.express as px

fig = px.bar(large, x='대분류', y='Count', color='대분류', text='Count')

fig.update_traces(
    textfont_size=14, 
    textposition='auto',
)

fig.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;px.bar 에서 text를 어떤 column으로 할지 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update_traces 를 사용해서 text의 font 및 위치 등의 설정을 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b15gXQ/btrFiS9MUcc/ktedvrRt7hqjU7t1snN7G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b15gXQ/btrFiS9MUcc/ktedvrRt7hqjU7t1snN7G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b15gXQ/btrFiS9MUcc/ktedvrRt7hqjU7t1snN7G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb15gXQ%2FbtrFiS9MUcc%2FktedvrRt7hqjU7t1snN7G0%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;723&quot; height=&quot;347&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;400&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Subplot 으로 그래프 구성하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래글 참고하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/229&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] Plotly : subplot 만들기의 모든것 - subtitle, type 설정 포함&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/데이터 시각화</category>
      <category>plotly</category>
      <category>plotly font 설정</category>
      <category>plotly layout</category>
      <category>plotly x축 title</category>
      <category>plotly 그래프</category>
      <category>python</category>
      <category>update_layout</category>
      <category>그래프</category>
      <category>시각화</category>
      <category>파이썬</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/217</guid>
      <comments>https://chancoding.tistory.com/217#entry217comment</comments>
      <pubDate>Sun, 19 Jun 2022 15:06:28 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - Greedy - 체육복 - 최근 TestCase 반영</title>
      <link>https://chancoding.tistory.com/216</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 학생의 수는 2명 이상 30명 이하입니다.&lt;/li&gt;
&lt;li&gt;체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.&lt;/li&gt;
&lt;li&gt;여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.&lt;/li&gt;
&lt;li&gt;여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.&lt;/li&gt;
&lt;li&gt;여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예nlostreservereturn&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;5&lt;/th&gt;
&lt;th&gt;[2, 4]&lt;/th&gt;
&lt;th&gt;[1, 3, 5]&lt;/th&gt;
&lt;th&gt;5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;[2, 4]&lt;/td&gt;
&lt;td&gt;[3]&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;[3]&lt;/td&gt;
&lt;td&gt;[1]&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 #1&lt;br /&gt;1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 #2&lt;br /&gt;3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://hsin.hr/coci/archive/2009_2010/contest6_tasks.pdf&quot;&gt;출처&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 공지 - 2019년 2월 18일 지문이 리뉴얼되었습니다.&lt;br /&gt;※ 공지 - 2019년 2월 27일, 28일 테스트케이스가 추가되었습니다.&lt;br /&gt;※ 공지 - 2021년 7월 28일 테스트케이스가 추가되었습니다.&lt;br /&gt;※ 공지 - 2021년 8월 30일 테스트케이스가 추가되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소스코드&lt;/h2&gt;
&lt;pre id=&quot;code_1655111561296&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n, lost, reserve):
    used = set()
    reserve = set(reserve)
    lost.sort()
    for l in lost:
        if l in reserve:
            used.add(l)
        elif (l-1 in reserve) and (l-1 not in used):
            used.add(l-1)
        elif (l+1 in reserve) and (l+1 not in used):
            used.add(l+1)
            
    return n - len(lost) + len(used)
    

테스트 1 〉통과 (0.01ms, 10.3MB)
테스트 2 〉통과 (0.01ms, 10.3MB)
테스트 3 〉통과 (0.01ms, 10.2MB)
테스트 4 〉통과 (0.01ms, 10.3MB)
테스트 5 〉통과 (0.01ms, 10.2MB)
테스트 6 〉통과 (0.01ms, 10.2MB)
테스트 7 〉통과 (0.01ms, 10.3MB)
테스트 8 〉통과 (0.01ms, 10.1MB)
테스트 9 〉통과 (0.01ms, 10.3MB)
테스트 10 〉통과 (0.01ms, 10.2MB)
테스트 11 〉통과 (0.01ms, 10.2MB)
테스트 12 〉통과 (0.00ms, 10.2MB)
테스트 13 〉통과 (0.00ms, 10.1MB)
테스트 14 〉통과 (0.01ms, 10.1MB)
테스트 15 〉통과 (0.01ms, 10.3MB)
테스트 16 〉통과 (0.01ms, 10.2MB)
테스트 17 〉통과 (0.00ms, 10.2MB)
테스트 18 〉통과 (0.00ms, 10.2MB)
테스트 19 〉통과 (0.00ms, 10.4MB)
테스트 20 〉통과 (0.00ms, 10.4MB)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주의해야할 Test Case&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. lost 에 포함되면서 reserve 에도 포함되는 경우 - 본인이 본인 것을 사용하므로 다른 친구에게 먼저 빌려주면 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 정렬을 해주어야 한다.&amp;nbsp; n = 5, lost = [4, 2], reserve = [5, 3] 인 경우가 해당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 작성된 소스코드의 경우 만약 lost를 정렬하지 않으면, 4번 친구가 3번에게 먼저 옷을 빌려가버린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 2번 친구는 5번에게 빌릴 수 없으므로 답으로 4를 출력하여 오답이된다.&lt;/p&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;</description>
      <category>파이썬/알고리즘</category>
      <category>greedy</category>
      <category>python</category>
      <category>알고리즘</category>
      <category>예외케이스</category>
      <category>체육복</category>
      <category>탐욕법</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/216</guid>
      <comments>https://chancoding.tistory.com/216#entry216comment</comments>
      <pubDate>Fri, 17 Jun 2022 08:16:47 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - 완전탐색 - 소수찾기</title>
      <link>https://chancoding.tistory.com/214</link>
      <description>&lt;h6&gt;&amp;nbsp;&lt;/h6&gt;
&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h6&gt;문제 설명&lt;/h6&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.&lt;/p&gt;
&lt;h5&gt;제한사항&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;numbers는 길이 1 이상 7 이하인 문자열입니다.&lt;/li&gt;
&lt;li&gt;numbers는 0~9까지 숫자만으로 이루어져 있습니다.&lt;/li&gt;
&lt;li&gt;&quot;013&quot;은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;입출력 예&lt;/h5&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;numbers&lt;/th&gt;
&lt;th&gt;return&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&quot;17&quot;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;011&quot;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;입출력 예 설명&lt;/h5&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 #1&lt;br /&gt;[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 #2&lt;br /&gt;[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;11과 011은 같은 숫자로 취급합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소스코드&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;from itertools import permutations

def solution(numbers):
    numbers = list(numbers)
    numbers_set = set()
    answer = 0
    for i in range(len(numbers)):
        for value in list(permutations(numbers, i+1)):
            made_value = int(&quot;&quot;.join(value))
            if made_value not in numbers_set:
                numbers_set.add(made_value)
                if is_prime(made_value):
                    answer += 1
    return answer


def is_prime(number):
    if number in (0, 1):
        return False

    for i in range(2,number//2 + 1):
        if number % i == 0:
            return False
    return True

테스트 1 〉    통과 (0.11ms, 10.4MB)
테스트 2 〉    통과 (70.50ms, 10.5MB)
테스트 3 〉    통과 (0.03ms, 10.3MB)
테스트 4 〉    통과 (3.26ms, 10.5MB)
테스트 5 〉    통과 (4.99ms, 11MB)
테스트 6 〉    통과 (0.03ms, 10.3MB)
테스트 7 〉    통과 (0.08ms, 10.3MB)
테스트 8 〉    통과 (4.98ms, 11MB)
테스트 9 〉    통과 (0.04ms, 10.3MB)
테스트 10 〉통과 (976.44ms, 10.6MB)
테스트 11 〉통과 (33.12ms, 10.5MB)
테스트 12 〉통과 (0.36ms, 10.4MB)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 풀이 방법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소수인지 확인하는 부분은 &lt;code&gt;is_prime&lt;/code&gt;함수를 사용해서 확인하는 함수를 따로 작성하였다.&lt;/li&gt;
&lt;li&gt;전체 case를 찾아야 하므로 &lt;code&gt;permutation&lt;/code&gt;을 사용해서 순열을 뽑았다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;011&lt;/code&gt;의 경우 순열에서 2 번 발생된다.&lt;/li&gt;
&lt;li&gt;같은 숫자를 반복문 돌면서 &lt;code&gt;is_prime&lt;/code&gt;을 확인하는 것은 시간 낭비이므로, 이전에 확인한 숫자인지 &lt;code&gt;check&lt;/code&gt;를 해야한다. 그래서 &lt;code&gt;numbers_set&lt;/code&gt;을 사용해서 확인한 경우는 &lt;code&gt;add&lt;/code&gt;해 주었다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 사람들 처럼 멋지게 문제를 풀지는 않았다..ㅎ&lt;/p&gt;</description>
      <category>파이썬/알고리즘</category>
      <category>isprime</category>
      <category>python</category>
      <category>소수찾기</category>
      <category>알고리즘</category>
      <category>완전탐색</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/214</guid>
      <comments>https://chancoding.tistory.com/214#entry214comment</comments>
      <pubDate>Thu, 16 Jun 2022 18:03:47 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - 완전탐색 - 카펫</title>
      <link>https://chancoding.tistory.com/215</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&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;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSlQch/btrEDQeyaex/s7NsvroDTGVt6UpQvKLU90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSlQch/btrEDQeyaex/s7NsvroDTGVt6UpQvKLU90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSlQch/btrEDQeyaex/s7NsvroDTGVt6UpQvKLU90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSlQch%2FbtrEDQeyaex%2Fs7NsvroDTGVt6UpQvKLU90%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;843&quot; height=&quot;636&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제한사항&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.&lt;/li&gt;
&lt;li&gt;노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.&lt;/li&gt;
&lt;li&gt;카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예brownyellowreturn&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;10&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;th&gt;[4, 3]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;8&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;[3, 3]&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;24&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;24&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;[8, 6]&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;a href=&quot;http://hsin.hr/coci/archive/2010_2011/contest4_tasks.pdf&quot;&gt;출처&lt;/a&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;pre id=&quot;code_1655109219201&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(brown, yellow):
    total = brown + yellow
    answer = []
    for height in range(2, int(total**1/2 + 1)):
        if total % height == 0:
            width = total // height
            print(width, height)
            if 2 * (width + height - 2) == brown:
                answer = [width, height]        
                break
    return answer
    
    
테스트 1 〉	통과 (0.01ms, 10.1MB)
테스트 2 〉	통과 (0.01ms, 10.1MB)
테스트 3 〉	통과 (0.06ms, 10MB)
테스트 4 〉	통과 (0.02ms, 10MB)
테스트 5 〉	통과 (0.01ms, 10.1MB)
테스트 6 〉	통과 (0.07ms, 10.2MB)
테스트 7 〉	통과 (0.06ms, 10MB)
테스트 8 〉	통과 (0.06ms, 10MB)
테스트 9 〉	통과 (0.13ms, 10.1MB)
테스트 10 〉	통과 (0.07ms, 9.97MB)
테스트 11 〉	통과 (0.01ms, 10.2MB)
테스트 12 〉	통과 (0.01ms, 10.1MB)
테스트 13 〉	통과 (0.01ms, 10.2MB)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실상 수학 문제 풀기 방식에 가깝게 문제를 풀었다.&lt;/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://chancoding.tistory.com/215</guid>
      <comments>https://chancoding.tistory.com/215#entry215comment</comments>
      <pubDate>Wed, 15 Jun 2022 18:34:13 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - 스택/큐 - 주식 가격 -</title>
      <link>https://chancoding.tistory.com/213</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h2&gt;
&lt;h6&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h6&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.&lt;/li&gt;
&lt;li&gt;prices의 길이는 2 이상 100,000 이하입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/h5&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;prices&lt;/th&gt;
&lt;th&gt;return&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[1, 2, 3, 2, 3]&lt;/td&gt;
&lt;td&gt;[4, 3, 1, 1, 0]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;&lt;b&gt;입출력 예 설명&lt;/b&gt;&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.&lt;/li&gt;
&lt;li&gt;2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.&lt;/li&gt;
&lt;li&gt;3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.&lt;/li&gt;
&lt;li&gt;4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.&lt;/li&gt;
&lt;li&gt;5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def solution(prices):
    answer = [0] * len(prices)
    for i in range(len(prices)):
        for j in range(i, len(prices)-1):
            if prices[i] &amp;lt;= prices[j]:
                answer[i] += 1
            else:
                break

    return answer

정확성  테스트
테스트 1 〉    통과 (0.01ms, 10.2MB)
테스트 2 〉    통과 (0.06ms, 10.3MB)
테스트 3 〉    통과 (0.76ms, 10.4MB)
테스트 4 〉    통과 (0.82ms, 10.3MB)
테스트 5 〉    통과 (1.08ms, 10.3MB)
테스트 6 〉    통과 (0.03ms, 10.3MB)
테스트 7 〉    통과 (0.46ms, 10.2MB)
테스트 8 〉    통과 (0.56ms, 10.2MB)
테스트 9 〉    통과 (0.03ms, 10.2MB)
테스트 10 〉통과 (1.12ms, 10.3MB)
효율성  테스트
테스트 1 〉    통과 (154.59ms, 18.9MB)
테스트 2 〉    통과 (119.58ms, 17.6MB)
테스트 3 〉    통과 (213.63ms, 19.4MB)
테스트 4 〉    통과 (136.61ms, 18.1MB)
테스트 5 〉    통과 (97.97ms, 16.8MB)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀이 과정&lt;/b&gt;&lt;/h2&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;code&gt;for&lt;/code&gt;문을 사용하면 문제 자체는 쉽게 풀 수 있을 것이라고 생각해서 문제를 풀었더니 쉽게 해결되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 문제의 의도인 &lt;code&gt;stack/queue&lt;/code&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;code&gt;O(n^2)&lt;/code&gt; 형태 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀면서 배운 점&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다른 사람 소스 코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def solution(prices):
    answer = [0] * len(prices)
    stack = []

    for i in range(len(prices)):
        while stack != [] and stack[-1][1] &amp;gt; prices[i]:
            past_idx, _ = stack.pop()
            answer[past_idx] = i - past_idx

        stack.append([i, prices[i]])

    for i, _ in stack:
        answer[i] = len(prices) - i - 1

    return answer

정확성  테스트
테스트 1 〉    통과 (0.01ms, 10.2MB)
테스트 2 〉    통과 (0.04ms, 10.1MB)
테스트 3 〉    통과 (0.50ms, 10.3MB)
테스트 4 〉    통과 (0.35ms, 10.2MB)
테스트 5 〉    통과 (0.36ms, 10.2MB)
테스트 6 〉    통과 (0.02ms, 10.1MB)
테스트 7 〉    통과 (0.19ms, 10.3MB)
테스트 8 〉    통과 (0.23ms, 10.2MB)
테스트 9 〉    통과 (0.02ms, 10.2MB)
테스트 10 〉통과 (0.37ms, 10.5MB)
효율성  테스트
테스트 1 〉    통과 (33.62ms, 18.9MB)
테스트 2 〉    통과 (25.27ms, 17.5MB)
테스트 3 〉    통과 (37.94ms, 19.5MB)
테스트 4 〉    통과 (28.90ms, 18.1MB)
테스트 5 〉    통과 (19.60ms, 16.8MB)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 사람의 소스코드 중 가장 잘푼 것 같은 코드를 가져왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 돌려본 결과 효율성 측면에서 속도가 이전 소스코드의 1/4 정도인 경우도 있을 만큼 크게 성능 향상된 것을 확인할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;stack&lt;/code&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;프로그래머스 stack &amp;amp; queue 다른 문제들&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/211&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] 프로그래머스 - 스택/큐 - 프린터&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655040756243&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;[Python] 프로그래머스 - 스택/큐 - 프린터&quot; data-og-description=&quot;목차 문제 설명 문제 요약 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 &quot; data-og-host=&quot;chancoding.tistory.com&quot; data-og-source-url=&quot;https://chancoding.tistory.com/211&quot; data-og-url=&quot;https://chancoding.tistory.com/211&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bONkQc/hyOJCvG04e/Yc4pSZpbgspdeQ098tUnSk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b0jwRw/hyOJCWKetW/lKCOFRc8ueaigC9mMsCnP1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cabyDb/hyOJCCtjez/MYA5lCE11cUUhs1eQWdTZ1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/211&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chancoding.tistory.com/211&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bONkQc/hyOJCvG04e/Yc4pSZpbgspdeQ098tUnSk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b0jwRw/hyOJCWKetW/lKCOFRc8ueaigC9mMsCnP1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cabyDb/hyOJCCtjez/MYA5lCE11cUUhs1eQWdTZ1/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&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;[Python] 프로그래머스 - 스택/큐 - 프린터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 문제 설명 문제 요약 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chancoding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chancoding.tistory.com/212&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Python] 프로그래머스 - 스택/큐 - 다리를 지나는 트럭 -&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬/알고리즘</category>
      <category>programmers</category>
      <category>python</category>
      <category>Stack</category>
      <category>스택</category>
      <category>알고리즘</category>
      <category>알고리즘 공부</category>
      <category>자료구조</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <category>한수배웠다</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/213</guid>
      <comments>https://chancoding.tistory.com/213#entry213comment</comments>
      <pubDate>Tue, 14 Jun 2022 23:32:44 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - 스택/큐 - 다리를 지나는 트럭 -</title>
      <link>https://chancoding.tistory.com/212</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h2&gt;
&lt;h6&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h6&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;경과 시간&lt;/th&gt;
&lt;th&gt;다리를 지난 트럭&lt;/th&gt;
&lt;th&gt;다리를 건너는 트럭&lt;/th&gt;
&lt;th&gt;대기 트럭&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;td&gt;[7,4,5,6]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1~2&lt;/td&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;td&gt;[7]&lt;/td&gt;
&lt;td&gt;[4,5,6]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;[7]&lt;/td&gt;
&lt;td&gt;[4]&lt;/td&gt;
&lt;td&gt;[5,6]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;[7]&lt;/td&gt;
&lt;td&gt;[4,5]&lt;/td&gt;
&lt;td&gt;[6]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;[7,4]&lt;/td&gt;
&lt;td&gt;[5]&lt;/td&gt;
&lt;td&gt;[6]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6~7&lt;/td&gt;
&lt;td&gt;[7,4,5]&lt;/td&gt;
&lt;td&gt;[6]&lt;/td&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;[7,4,5,6]&lt;/td&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;제한 조건&lt;/b&gt;&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bridge_length는 1 이상 10,000 이하입니다.&lt;/li&gt;
&lt;li&gt;weight는 1 이상 10,000 이하입니다.&lt;/li&gt;
&lt;li&gt;truck_weights의 길이는 1 이상 10,000 이하입니다.&lt;/li&gt;
&lt;li&gt;모든 트럭의 무게는 1 이상 weight 이하입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/h5&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;bridge_length&lt;/th&gt;
&lt;th&gt;weight&lt;/th&gt;
&lt;th&gt;truck_weights&lt;/th&gt;
&lt;th&gt;return&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;[7,4,5,6]&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;[10]&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;[10,10,10,10,10,10,10,10,10,10]&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;from collections import deque

def solution(bridge_length, weight, truck_weights):
    bridge = deque(0 for _ in range(bridge_length))
    truck_weights = deque(t for t in truck_weights)
    answer = 0
    bridge_weight = 0
    while bridge:
        answer += 1
        bridge_weight -= bridge.popleft()

        if truck_weights:
            if bridge_weight + truck_weights[0] &amp;lt;= weight:
                truck = truck_weights.popleft()
                bridge.append(truck)
                bridge_weight += truck
            else:
                bridge.append(0)

    return answer

테스트 1 〉    통과 (0.42ms, 10.2MB)
테스트 2 〉    통과 (6.50ms, 10.3MB)
테스트 3 〉    통과 (0.01ms, 10.4MB)
테스트 4 〉    통과 (5.24ms, 10.2MB)
테스트 5 〉    통과 (48.38ms, 10.3MB)
테스트 6 〉    통과 (14.80ms, 10.3MB)
테스트 7 〉    통과 (0.32ms, 10.2MB)
테스트 8 〉    통과 (0.07ms, 10.2MB)
테스트 9 〉    통과 (1.80ms, 10.2MB)
테스트 10 〉    통과 (0.08ms, 10.2MB)
테스트 11 〉    통과 (0.01ms, 10.3MB)
테스트 12 〉    통과 (0.14ms, 10.2MB)
테스트 13 〉    통과 (0.55ms, 10.2MB)
테스트 14 〉    통과 (0.02ms, 10.2MB)    &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀이 과정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상의 다리 &lt;code&gt;bridge&lt;/code&gt;를 리스트 형태로 만들어서 실제로 트럭이 지나간다고 생각하고 문제를 풀었더니 더 쉽게 해결할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;bridge&lt;/code&gt; 가장 앞 쪽이 &lt;code&gt;pop&lt;/code&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;code&gt;pop&lt;/code&gt;에 의해서 &lt;code&gt;bridge&lt;/code&gt;의 요소들이 하나씩 빠져 나가고 결국 트럭이 모두 지나간 형태가 된 후 종료된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀면서 배운 점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 문제를 풀 때는 &lt;code&gt;bridge_weight&lt;/code&gt;변수를 따로 두고 무게를 계산하지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;sum(brige) + truck_Weights[0]&lt;/code&gt; 으로 매번 &lt;code&gt;sum&lt;/code&gt;을 사용해서 무게를 측정하였더니 생각보다 시간이 많이 걸렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매번 &lt;code&gt;O(n)&lt;/code&gt; 만큼의 시간이 추가되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통의 경우 &lt;code&gt;sum(list)&lt;/code&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;code&gt;bridge_weight&lt;/code&gt; 라는 변수를 두고 &lt;code&gt;bridge_weight + truck_weights[0] &amp;lt;= weight&lt;/code&gt; 이렇게 바로 계산을 진행하니 시간 개선을 상당히 크게 (정확한 수치는 안적놓았다..ㅎ;) 할 수 있었다.&lt;/p&gt;</description>
      <category>파이썬/알고리즘</category>
      <category>programmers</category>
      <category>python</category>
      <category>스택</category>
      <category>알고리즘</category>
      <category>코딩공부</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>큐</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/212</guid>
      <comments>https://chancoding.tistory.com/212#entry212comment</comments>
      <pubDate>Mon, 13 Jun 2022 22:32:16 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 프로그래머스 - 스택/큐 - 프린터</title>
      <link>https://chancoding.tistory.com/211</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h2&gt;
&lt;h5&gt;&lt;b&gt;문제 요약&lt;/b&gt;&lt;/h5&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.&lt;/li&gt;
&lt;li&gt;나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.&lt;/li&gt;
&lt;li&gt;그렇지 않으면 J를 인쇄합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.&lt;/li&gt;
&lt;li&gt;인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.&lt;/li&gt;
&lt;li&gt;location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/h5&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;priorities&lt;/th&gt;
&lt;th&gt;location&lt;/th&gt;
&lt;th&gt;return&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[2, 1, 3, 2]&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[1, 1, 9, 1, 1, 1]&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;from collections import deque

def solution(priorities, location):
    queue = deque(priorities)
    answer = 0
    while queue:
        first_priority = max(queue)
        cur = queue.popleft()
        location -= 1

        if first_priority &amp;gt; cur:
            queue.append(cur)
            if location == -1:
                location = len(queue)-1
        else:
            answer += 1
            if location == -1:
                break  

    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀이 과정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서도를 작성해서 정확히 순서도 방식대로 구현하면 위와 같은 코드가 작성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;queue&lt;/code&gt;에서 앞의 값을 하니씩 빼고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 타겟 값의 위치를 계속해서 &lt;code&gt;location&lt;/code&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;code&gt;queue&lt;/code&gt;에 넣어주는 방식이다.&lt;/p&gt;</description>
      <category>파이썬/알고리즘</category>
      <category>python 알고리즘</category>
      <category>스택</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>큐</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/211</guid>
      <comments>https://chancoding.tistory.com/211#entry211comment</comments>
      <pubDate>Sun, 12 Jun 2022 20:59:47 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 자바스크립트 배열 push(), pop(), shift(), splice()</title>
      <link>https://chancoding.tistory.com/210</link>
      <description>&lt;h1&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Array는 JavaScript 객체의 어떠한 데이터를 순차적으로 저장하거나 조회하는데 유용하게 사용된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;배열의 기초&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;var arr = ['a', 'b', 'c'];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;var arr = [1, 2, 3];

// 배열 요소에 접근하기
arr[0];  // 1
arr[2];  // 3

// 배열 요소의 개수 확인하기
arr.length  // 3

// 마지막 요소에 접근
arr[arr.length - 1]; //=&amp;gt; 3&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;pre class=&quot;yaml&quot;&gt;&lt;code&gt;arr[2] = 4;
console.log(arr);  // [ 1, 2, 4 ]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;배열의 메서드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손쉽게 배열을 조작할 수 있도록 다양한 메서드를 제공한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Array 메서드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Array.from()&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사 배열 혹은 반복가능한 객체로부터 새 Array 인스턴스를 만듭니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Array.from(arrayLike[, mapFn[, thisArg]])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 메서드를 이용하면 함수의 arguments를 배열로 손쉽게 변경할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Array.isArray()&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자로 전달받은 객체가 배열이면 true, 그렇지 않으면 false를 리턴하여 해당 객체가 배열인지 확인 합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;Array.isArray([1, 2, 3]);  // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar');   // false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;원본 배열을 수정하는 메서드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 메서드들은 원본 배열을 바로 수정하는 메서드들 입니다. 따라서 사용에 주의해야 하며, 원본 데이터의 변경 없이 배열 조작의 결과값이 필요할 경우에는 다른 메서드들을 사용해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;배열 요소 추가 제거 메서드 - push, pop, unshift, shift&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 처음 혹은 마지막에 요소를 추가하거나 제거하는 메서드&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;push&lt;/code&gt; 메서드 : 배열의 &lt;b&gt;마지막에 새로운 요소를 추가&lt;/b&gt;한 후, 변경된 배열의 길이를 반환&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pop&lt;/code&gt; 메서드 : 배열의 &lt;b&gt;마지막 요소를 제거한 후, 제거한 요소를 반환&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unshift&lt;/code&gt; 메서드 : &lt;b&gt;배열의 첫 번째 자리에 새로운 요소를 추가&lt;/b&gt;한 후, 변경된 배열의 길이를 반환&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shift&lt;/code&gt; 메서드 : &lt;b&gt;배열의 첫 번째 요소를 제거&lt;/b&gt;한 후, 제거한 요소를 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var arr = [1, 2, 3];

// 배열의 마지막 요소 제거, 제거된 요소 리턴
arr.pop();  // 3

// 배열 마지막에 요소 추가, 배열의 크기 리턴
arr.push(&quot;new&quot;);  // 3
console.log(arr);  //-&amp;gt; [ 1, 2, 'new' ]

// 배열의 첫번째 요소 제거, 제거된 요소 리턴
arr.shift();  // 1

// 배열의 처음에 요소 추가, 배열의 크기 리턴
arr.unshift(&quot;new&quot;);  // 3
console.log(arr);  //-&amp;gt; [ 'new', 2, 'new' ]&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;&lt;b&gt;splice 메서드 - 배열 요소 추가 삭제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Array.prototype.splice()&lt;/code&gt; 메서드는 배열의 특정 위치에 배열 요소를 추가하거나 삭제하는데 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array.&lt;b&gt;splice&lt;/b&gt;(&quot;시작위치&quot;, &quot;제거건수&quot;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;splice&lt;/code&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;array.&lt;b&gt;splice&lt;/b&gt;(&quot;시작위치&quot;, &quot;제거건수&quot;, [&quot;요소1&quot;, &quot;요소2&quot; ... ])&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;splice 함수는 요소를 제거 후 해당 위치에 &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;리턴값은 삭제한 배열 요소이다.&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;b&gt;splice 예제 1&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;/* 배열 임의의 위치에 요소 추가 제거 */
// start - 수정할 배열 요소의 인덱스
// deleteCount - 삭제할 요소 개수, 제거하지 않을 경우 0
// el - 배열에 추가될 요소
arr.splice(start, deleteCount, el);

var arr = [1, 5, 7];
arr.splice(1, 0, 2, 3, 4);  // [], arr: [1, 2, 3, 4, 5, 7]
arr.splice(1, 2);           // [2, 3], arr: [1, 4, 5, 7]&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;splice 예제 2&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var arr = ['a', 'b', 'c', 'e', 'f'];

// arr = ['a', 'b', 'e', 'f']
arr.splice(2, 1); // index 2 부터 1개의 요소('c')를 제거

// arr = ['a', 'f']
arr.splice(1, 2); // index 1 부터 2개의 요소('b', 'e')를 제거

// arr = ['a']
removed = arr.splice(1, 1); // 제거한 요소를 반환 받을 수 있음

// removed = 'f'&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Javascript</category>
      <category>javascript</category>
      <category>nodeJS</category>
      <category>server 보안</category>
      <category>웹사이트 보안</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/210</guid>
      <comments>https://chancoding.tistory.com/210#entry210comment</comments>
      <pubDate>Fri, 10 Jun 2022 05:00:47 +0900</pubDate>
    </item>
    <item>
      <title>웹 사이트 보안 관련 이슈</title>
      <link>https://chancoding.tistory.com/209</link>
      <description>&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원가입시 너무 긴 아이디 비번을 넣는다&lt;/li&gt;
&lt;li&gt;영어로 넣어야할 곳에 한글을 넣는다&lt;/li&gt;
&lt;li&gt;빈칸으로 설정한다&lt;/li&gt;
&lt;li&gt;미로그인 상태에서 조작&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;를 서버로 보내는 XSS 공격 - &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;를 못 쓰게 한다던가&lt;/li&gt;
&lt;li&gt;brute force attack - 로그인 요청 횟수를 제한(express-rate-limit 라이브러리 사용)&lt;/li&gt;
&lt;li&gt;DB 비밀 번호 털리지 않게 주의&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Javascript</category>
      <category>javascript</category>
      <category>nodeJS</category>
      <category>server 보안</category>
      <category>웹사이트 보안</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/209</guid>
      <comments>https://chancoding.tistory.com/209#entry209comment</comments>
      <pubDate>Thu, 9 Jun 2022 21:25:26 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 멀티 프로세싱 사용하기 - 멀티 프로세싱 적용을 위한 함수들 알아보자</title>
      <link>https://chancoding.tistory.com/208</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;multiprocessing 사용하게된 계기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기록용으로&amp;nbsp; 안읽고 다음 탭으로 넘어가셔도 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 처리 속도를 높이기 위해 멀티 프로세싱을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대용량의 csv 파일 수 천개를 다뤄야 했던 경험이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas를 사용해서 파일을 읽어오는 것에만 상당히 많은 시간을 소모한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 csv 파일을 읽어오기 위해서 그 동안 가만히 기다려야 하는 시간들이 매우 소모적이라고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대용량 csv 파일도 있지만 절반 정도는 매우 용량이 적은 csv 파일들이었다.&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;그래서 멀티프로세싱을 사용해 core 4개로 설정했더니 2배 이상 빨라졌다.&amp;nbsp; Good !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;멀티 Pool 사용하기&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from multiprocessing import Pool

if __name__ == '__main__':
    p = Pool(4)
    # do something here with Pool

    p.close() # or p.terminate()
    p.join()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;종료하기 - close(), terminate()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 &lt;b&gt;Pool&lt;/b&gt;을 다 사용하였으면 적절한 위치에 &lt;b&gt;close()&lt;/b&gt;과 &lt;b&gt;join()&lt;/b&gt;을 호출해주는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;join()&lt;/b&gt;은 &lt;b&gt;Pool&lt;/b&gt;의 모든 프로세스들의 종료가 완료되기를 기다린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;close()&lt;/b&gt;는 더 이상 &lt;b&gt;Pool&lt;/b&gt;에 추가 작업이 들어가지 않는다는 것을 알려주며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 수행 중인 작업이 모두 끝나면 &lt;b&gt;Pool&lt;/b&gt;의 프로세스들을 종료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;terminate()&lt;/b&gt;를 사용하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 진행 중인 작업이 있더라도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉시 &lt;b&gt;Pool&lt;/b&gt;의 프로세스들을 종료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;apply()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Pool&lt;/b&gt;에게 작업 하나를 시킨다. 그리고 작업이 끝날 때까지 기다렸다가 결과를 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;apply&lt;/b&gt;는 그 작업이 완료되지 않으면 메인 프로세스에서 다음 줄의 코드를 실행하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;apply_async&lt;/b&gt;는 &lt;b&gt;apply_async&lt;/b&gt;을 사용한 줄에서 작업이 다 끝나지 않아도 메인 프로세스의 다음 줄을 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;apply_async()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Pool&lt;/b&gt;에게 작업 하나를 시키고, &lt;b&gt;AsyncResult&lt;/b&gt;를 반환받는다. 반환받은 &lt;b&gt;AsyncResult&lt;/b&gt;에서 &lt;b&gt;get()&lt;/b&gt;을 호출하면 작업의 반환 값을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 반환받은 &lt;b&gt;AsyncResult&lt;/b&gt;의 &lt;b&gt;get()&lt;/b&gt;을 호출한다면 그 작업이 끝나기 전까지는 메인 프로세스에서도 다음 줄로 넘어갈 수가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘의 차이는 &lt;b&gt;map()&lt;/b&gt;, &lt;b&gt;map_async()&lt;/b&gt;와 &lt;b&gt;starmap()&lt;/b&gt;, &lt;b&gt;starmap_async()&lt;/b&gt;에서도 마찬가지이다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;from multiprocessing import Pool
import multiprocessing as mp
import time
import os

def func(num):
    c_proc = mp.current_process()
    print(&quot;Running on Process&quot;,c_proc.name,&quot;PID&quot;,c_proc.pid)
    time.sleep(1)
    print(&quot;Ended&quot;,num,&quot;Process&quot;,c_proc.name)
    return num

if __name__ == '__main__':
    p = Pool(4)
    start = time.time()

    ret1 = p.apply_async(func,(1,))
    ret2 = p.apply_async(func,(2,))
    ret3 = p.apply_async(func,(3,))
    ret4 = p.apply_async(func,(4,))
    ret5 = p.apply_async(func,(5,))
    print(ret1.get(),ret2.get(),ret3.get(),ret4.get(),ret5.get())

    delta_t = time.time()-start
    print(&quot;Time :&quot;,delta_t)

    p.close()
    p.join()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;map() , map_async()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;iterable&lt;/b&gt;에 대해 동일한 함수를 멀티프로세싱을 이용하여 처리하고자 할 때 사용한다. 단, 사용하고자 하는 함수는 단일 인자를 받아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;starmap() , starmap_async()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자를 두 개 이상 받을 수 있다는 점을 제외하면 &lt;b&gt;map()&lt;/b&gt;, &lt;b&gt;map_async()&lt;/b&gt;와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;imap(), imap_unordered()&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;map&lt;/b&gt;의 결과물은 &lt;b&gt;list&lt;/b&gt;인 반면, &lt;b&gt;imap&lt;/b&gt;의 결과물은 &lt;b&gt;iterator&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 &lt;b&gt;chunkzise&lt;/b&gt;는 1인데, 1 대신 적절하게 큰 값을 써주면 훨씬 빨리 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과물의 길이가 길어서 &lt;b&gt;list&lt;/b&gt;로 나타내었을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리에 부담이 가는 경우 &lt;b&gt;imap&lt;/b&gt;을 사용해주면 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;imap_unordered()&lt;/b&gt;는 순서가 보장되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Callback&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;apply_async, map_async, starmap_async에서 callback 받기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 세 개의 함수에 &lt;b&gt;callback&lt;/b&gt;을 달아줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;callback&lt;/b&gt;의 인자는 위 함수들의 결과물을 받는다. 작업이 완료되는 순간 실행된다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;from multiprocessing import Pool
import multiprocessing as mp
import time
import os

def callback_func(result):
    print(&quot;callback_func got result :&quot;,result)

def square(x):
    return x*x

if __name__ == '__main__':
    with Pool(4) as p:
        result = p.map_async(square,range(11),callback=callback_func)
        result.wait()

callback_func got result : [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아래 블로그에 예시 코드가 너무 잘나와있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://tempdev.tistory.com/27?category=845382&quot;&gt;https://tempdev.tistory.com/27?category=845382&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654231590384&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;Python multiprocessing.Pool 멀티프로세싱 2&quot; data-og-description=&quot;Python에선 multiprocessing.Pool을 이용하여 멀티프로세싱을 할 수 있다. Process를 활용할 때는 우리가 직접 Process를 만들어서 그 Process위에서 작업을 돌렸다면, Pool은 지정된 개수만큼 프로세스를 미리 &quot; data-og-host=&quot;tempdev.tistory.com&quot; data-og-source-url=&quot;https://tempdev.tistory.com/27?category=845382&quot; data-og-url=&quot;https://tempdev.tistory.com/27&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hg9Vt/hyOCMlgVfb/OB8BAR4jSIykMYhCYPcPX1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/C1tpk/hyOCJa0eKi/59snFbzZIBMw1qzJYwrtmK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://tempdev.tistory.com/27?category=845382&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tempdev.tistory.com/27?category=845382&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hg9Vt/hyOCMlgVfb/OB8BAR4jSIykMYhCYPcPX1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/C1tpk/hyOCJa0eKi/59snFbzZIBMw1qzJYwrtmK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;Python multiprocessing.Pool 멀티프로세싱 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Python에선 multiprocessing.Pool을 이용하여 멀티프로세싱을 할 수 있다. Process를 활용할 때는 우리가 직접 Process를 만들어서 그 Process위에서 작업을 돌렸다면, Pool은 지정된 개수만큼 프로세스를 미리&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tempdev.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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;멀티프로세싱에 tqdm을 사용해서 진행상황을 알고싶다면 아래 블로그를 참고하면 아주 이해가 쉽다. 검색해서 나오는 것 중 가장 잘 나와있는 자료라고 생각된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leimao.github.io/blog/Python-tqdm-Multiprocessing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://leimao.github.io/blog/Python-tqdm-Multiprocessing/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1681298941573&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;blog&quot; data-og-title=&quot;Progress Bars for Python Multiprocessing Tasks&quot; data-og-description=&quot;Use tqdm for Python Multiprocessing&quot; data-og-host=&quot;leimao.github.io&quot; data-og-source-url=&quot;https://leimao.github.io/blog/Python-tqdm-Multiprocessing/&quot; data-og-url=&quot;https://leimao.github.io/blog/Python-tqdm-Multiprocessing/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hqHrq/hySeZBBdaJ/YU7wms7dRQCRThujSKFFb0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://leimao.github.io/blog/Python-tqdm-Multiprocessing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://leimao.github.io/blog/Python-tqdm-Multiprocessing/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hqHrq/hySeZBBdaJ/YU7wms7dRQCRThujSKFFb0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;Progress Bars for Python Multiprocessing Tasks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Use tqdm for Python Multiprocessing&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;leimao.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;]&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>multiprocessing</category>
      <category>pool</category>
      <category>python</category>
      <category>다중 작업</category>
      <category>멀티코어</category>
      <category>멀티프로세스</category>
      <category>멀티프로세싱</category>
      <category>파이썬</category>
      <category>파이썬 multiprocessing</category>
      <category>파이썬 동시작업</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/208</guid>
      <comments>https://chancoding.tistory.com/208#entry208comment</comments>
      <pubDate>Wed, 8 Jun 2022 14:48:10 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 패키지 구성을 위해 __init__ 파일과 __all__에 대해 알아보자</title>
      <link>https://chancoding.tistory.com/207</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. example package &lt;code&gt;shapes&lt;/code&gt; 구조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;__init__&lt;/code&gt;과 &lt;code&gt;__all__&lt;/code&gt;를 알기 위해서 예시로 사용할 package &lt;code&gt;shapes&lt;/code&gt;의 구조와 코드를 먼저 보고가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;tree&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;shapes/
    __init__.py
    area.py
    volume.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/area.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;PI = 3.14

# 원의 면적을 구해 주는 함수
def circle(radius):
    return PI * radius * radius

# 정사각형의 면적을 구해 주는 함수
def square(length):
    return length * length&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/volume.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;PI = 3.14

# 구의 부피를 구해 주는 함수
def sphere(radius):
    return (4/3) * PI * radius * radius * radius

# 정육면체의 부피를 구해 주는 함수
def cube(length):
    return length * length * length&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. &lt;code&gt;__init__&lt;/code&gt; 파일이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 안에는 &lt;code&gt;__init__.py&lt;/code&gt;라는 파일이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;__init__.py&lt;/code&gt; 파일 (지금부터는 그냥 init 파일이라고 하겠습니다) 은 '이 폴더는 파이썬 패키지다'라고 말해 주는 파일입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 3.3 이전 버전에서는 init 파일이 필수였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 3.3 이후 버전부터는 init 파일이 필수가 아니게 됐지만 파이썬 하위 버전과의 호환성과 패키지의 명확성을 위해 항상 패키지 안에 init 파일을 만들어 주는 것을 권장 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;처음으로 패키지나 패키지 안에 있는 어떤 것을 임포트하면 가장 먼저 패키지의 init 파일에 있는 코드가 실행됩니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. &lt;code&gt;__init__&lt;/code&gt; 파일 활용하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;init 파일을 어떻게 활용하는지 정리해 봅시다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3-1. &lt;code&gt;__init__&lt;/code&gt; 파일에서 임포트 사용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지를 임포트하면 기본적으로 패키지 안에 있는 내용은 임포트되지 않습니다. 패키지를 임포트할 때 패키지 안에 있는 내용도 함께 임포트하고 싶다면 init 파일을 활용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;init 파일에 패키지와 함께 임포트하고 싶은 것들을 써 주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/__init__.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;from shapes import area, volume&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이제 &lt;code&gt;shapes&lt;/code&gt; 패키지를 임포트하면 &lt;code&gt;area&lt;/code&gt;랑 &lt;code&gt;volume&lt;/code&gt; 모듈도 임포트되겠죠? init 파일에서 임포트하는 것은 패키지 안으로 임포트된다고 생각하시면 됩니다. &lt;code&gt;area&lt;/code&gt;랑 &lt;code&gt;volume&lt;/code&gt; 모듈은 아래와 같이 접근할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;import shapes

print(shapes.area.circle(2))
print(shapes.volume.sphere(2))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 모듈 대신 모듈의 함수들을 직접 임포트할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/__init__.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;openscad&quot;&gt;&lt;code&gt;from shapes.area import circle, square&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 우리는 이 함수들을 아래와 같이 접근할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;import shapes

print(shapes.circle(2))
print(shapes.square(3))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes&lt;/code&gt; 패키지 안에서 함수들을 직접 가져왔기 때문에 &lt;code&gt;area&lt;/code&gt;를 건너뛸 수 있는 거죠. &lt;b&gt;init 파일에서 임포트되는 것은 항상&lt;/b&gt; &lt;code&gt;package.&lt;/code&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3-2. &lt;code&gt;__init__&lt;/code&gt; 파일에서 변수 정의하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상수값 &lt;code&gt;PI&lt;/code&gt;는 &lt;code&gt;area&lt;/code&gt; 모듈에서도 쓰이고 &lt;code&gt;volume&lt;/code&gt; 모듈에서도 쓰입니다. &lt;code&gt;PI&lt;/code&gt;처럼 패키지에 있는 여러 모듈이 필요로 하는 것들은 각 모듈에서 정의하지 않고 패키지 안에서 한 번만 정의해 주는 게 좋습니다. 똑같은 걸 여러 번 정의하는 건 비효율적이고 실수로 하나를 잘 못 정의하면 프로그램에 오류가 나기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;PI&lt;/code&gt;를 패키지 안에서 한 번만 정의해 주려면 (즉 패키지 레벨에서 정의해 주려면) &lt;code&gt;PI&lt;/code&gt;를 &lt;code&gt;shapes&lt;/code&gt; 패키지의 init 파일에서 정의해 주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/__init__.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;PI = 3.14&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 패키지 안에 있는 모듈에서는 &lt;code&gt;PI&lt;/code&gt;를 임포트하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/area.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from shapes import PI

# 원의 면적을 구해 주는 함수
def circle(radius):
        ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/volume.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from shapes import PI

# 구의 부피를 구해 주는 함수
def sphere(radius):
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;PI&lt;/code&gt;같은 상수뿐만이 아니라 여러 모듈에서 필요한 변수, 함수 또는 객체는 패키지의 init 파일에서 정의해 주는 게 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 패키지의 init 파일에서 정의되는 것들은 패키지 밖에서도 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&lt;code&gt;# PI 직접 임포트
from shapes import PI

# 패키지 임포트 후 shapes. 으로 접근
import shapes
shapes.PI&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. &lt;code&gt;__all__&lt;/code&gt; 특수 변수란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;code&gt;__all__&lt;/code&gt; 특수 변수는 우리가 &lt;code&gt;import \*&lt;/code&gt;를 했을 때 임포트 대상에서 어떤 것들을 가져와야 하는지를 정해 주는 변수입니다&lt;/b&gt;. 임포트 대상에서 내용 전체를 가져오라고 했을 때 '전체'가 무엇인지 정의해 주는 거죠. &lt;code&gt;__all__&lt;/code&gt; 은 모듈에도 적용되고 패키지에도 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. &lt;code&gt;__all__&lt;/code&gt; 변수 활용하기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5-1. &lt;code&gt;import *&lt;/code&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈을 임포트할 때 &lt;code&gt;from &amp;lt;module&amp;gt; import *&lt;/code&gt;를 하면 모듈의 모든 내용이 임포트됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 모듈 대신 패키지에 &lt;code&gt;from &amp;lt;package&amp;gt; import *&lt;/code&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;5-2. &lt;code&gt;__all__&lt;/code&gt; 과 모듈&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈의 &lt;code&gt;__all__&lt;/code&gt; 은 모듈에 해당하는 파일에서 정의합니다. 예를 들어 area.py에 아래와 같은 코드를 추가해 주면:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/area.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# __all__ 정의
__all__ = ['circle', 'square'] 

PI = 3.14

# 원의 면적을 구해 주는 함수
def circle(radius):
    return PI * radius * radius  

# 정사각형의 면적을 구해 주는 함수
def square(length):
    return length * length&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;from shapes.area import *&lt;/code&gt;를 했을 때 &lt;code&gt;area&lt;/code&gt; 모듈의 모든 내용이 임포트되지 않고 &lt;code&gt;circle&lt;/code&gt; 과 &lt;code&gt;square&lt;/code&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;5-3. &lt;code&gt;__all__&lt;/code&gt; 과 패키지&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지의 &lt;code&gt;__all__&lt;/code&gt; 은 패키지에 해당하는 init 파일에서 정의합니다. 예를 들어 &lt;code&gt;shapes&lt;/code&gt; 패키지의 init 파일에 아래와 같은 코드를 추가해 주면:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/__init__.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;# __all__ 정의
__all__ = ['area', 'volume']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 &lt;code&gt;from shapes import *&lt;/code&gt;를 하면 &lt;code&gt;area&lt;/code&gt; 모듈과 &lt;code&gt;volume&lt;/code&gt; 모듈이 임포트됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;__all__&lt;/code&gt;을 사용하면 패키지나 모듈에 &lt;code&gt;import *&lt;/code&gt;를 했을 때 어떤 것들이 임포트되는지를 제어할 수 있습니다. 그래도 여전히 &lt;code&gt;import *&lt;/code&gt; 만 봐서는 정확히 어떤 것들이 임포트되는지를 알 수 없기 때문에 &lt;code&gt;import *&lt;/code&gt;는 프로그램에서 정의되는 이름들, 즉 네임스페이스를 완벽히 이해하고 있을 때만 사용하는 것을 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6.&lt;span&gt; Reference&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Codeit 강의 파이썬 중급 교육 자료&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>ALL</category>
      <category>codeit</category>
      <category>init</category>
      <category>__all__</category>
      <category>__init__</category>
      <category>코드잇</category>
      <category>특수변수</category>
      <category>파이썬</category>
      <category>파이썬 패키지</category>
      <category>패키지</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/207</guid>
      <comments>https://chancoding.tistory.com/207#entry207comment</comments>
      <pubDate>Mon, 6 Jun 2022 13:51:47 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 파이썬 패키지란? - package에 대한 설명 및 예시</title>
      <link>https://chancoding.tistory.com/206</link>
      <description>&lt;h1&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(function(){
    $(&quot;#toc&quot;).toc( {content: &quot;.area_view&quot;, headings: &quot;h2,h3,h4&quot; , top: -90, isBlink : true, blinkColor : '#21B9DE'  } )
  });
&lt;/script&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;패키지란?&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;패키지&lt;/b&gt;는 모듈들을 모아 놓은 디렉토리를 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 우리는 평면도형의 면적을 구해 주는 &lt;code&gt;area&lt;/code&gt; 모듈과 입체도형의 부피를 구해주는 &lt;code&gt;volume&lt;/code&gt; 모듈을 모아서 &lt;code&gt;shapes&lt;/code&gt;라는 패키지를 만들었습니다. &lt;code&gt;shapes&lt;/code&gt; 패키지의 구조는 아래와 같습니다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;shapes/
    __init__.py
    area.py
    volume.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/area.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;PI = 3.14

# 원의 면적을 구해 주는 함수
def circle(radius):
    return PI * radius * radius

# 정사각형의 면적을 구해 주는 함수
def square(length):
    return length * length&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;shapes/volume.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;PI = 3.14

# 구의 부피를 구해 주는 함수
def sphere(radius):
    return (4/3) * PI * radius * radius * radius

# 정육면체의 부피를 구해 주는 함수
def cube(length):
    return length * length * length&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지는 일반 디렉토리와 똑같은데 안에 &lt;code&gt;__init__.py&lt;/code&gt;라는 파일이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;패키지 임포트&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈과 비슷하게 패키지 안에 있는 내용을 가져올 때도 &lt;code&gt;import&lt;/code&gt; 키워드를 사용합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;code&gt;import &amp;lt;package.module&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;import shapes.volume

print(shapes.volume.cube(3))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 패키지 안에 있는 모듈을 가져올 수 있습니다. 패키지나 모듈 안에 있는 것은 항상 &lt;code&gt;.&lt;/code&gt; 을 이용해서 접근합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;code&gt;import &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import shapes

print(shapes.volume.cube(3)) # 오류&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 패키지 자체를 임포트할 수도 있는데 그러면 &lt;b&gt;패키지 안에 있는 내용들은 임포트되지 않습니다&lt;/b&gt; (패키지 안에 있는 모듈도 같이 임포트하려면 패키지의 init 파일을 활용해야 합니다 - 다음 레슨들 참고). 그래서 위 코드는 오류가 납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 &lt;code&gt;import ...&lt;/code&gt; 방식을 써서는 모듈의 함수나 변수를 바로 가져올 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;import shapes.volume.cube # 오류&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;code&gt;import ...&lt;/code&gt; 방식으로는 패키지나 모듈만 임포트할 수 있습니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;code&gt;from &amp;lt;package&amp;gt; import &amp;lt;module(s)&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;run.py&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;from shapes import volume
print(volume.cube(3))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;from ... import ...&lt;/code&gt; 방식도 패키지에 쓸 수 있습니다. 패키지 안의 모듈을 바로 가져올 수도 있고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;code&gt;from &amp;lt;package.module&amp;gt; import &amp;lt;member(s)&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처럼 모듈 안에 있는 변수나 함수를 가져올 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;run.py&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;from shapes.volume import cube

print(cube(3))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;code&gt;as&lt;/code&gt; 키워드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 임포트 문 뒤에 &lt;code&gt;as&lt;/code&gt; 키워드를 써서 임포트하는 것의 이름을 바꿔줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;run.py&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;import shapes.volume as vol

print(vol.cube(3))&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;h2 data-ke-size=&quot;size26&quot;&gt;추가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 package 구성을 위한 __init__ 과 __all__ 구성하기 :&amp;nbsp;&lt;a href=&quot;https://chancoding.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chancoding.tistory.com/207&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Codeit 파이썬 중급 강의 내용&lt;/b&gt;&lt;/p&gt;</description>
      <category>파이썬/기본 문법 정리</category>
      <category>codeit</category>
      <category>Package</category>
      <category>코드잇</category>
      <category>파이썬</category>
      <category>파이썬 패키지</category>
      <category>패키지</category>
      <author>커딩왕</author>
      <guid isPermaLink="true">https://chancoding.tistory.com/206</guid>
      <comments>https://chancoding.tistory.com/206#entry206comment</comments>
      <pubDate>Sun, 5 Jun 2022 13:40:06 +0900</pubDate>
    </item>
  </channel>
</rss>