<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기록기록기룩끼룩끼룩</title>
    <link>https://yujung820.tistory.com/</link>
    <description>손들엇</description>
    <language>ko</language>
    <pubDate>Fri, 8 May 2026 08:14:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>유정임</managingEditor>
    <item>
      <title>쿼리 계획</title>
      <link>https://yujung820.tistory.com/71</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리 계획이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 작성한 코드가 실제 클러스터에서 실행 가능한 저수준 연산으로 변환되는 핵심 과정으로 로지컬 플랜과 피지컬 플랜으로 이어지며, Catalyst Optimizer가 최적화를 담당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석 &amp;rarr; 논리적 계획 &amp;rarr; 물리적 계획 &amp;rarr; 코드 생성의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;단계를 거쳐&lt;span&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;974&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwK1GR/dJMcadaNm9b/Pyj70WHO64Y9UJFmCK6zKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwK1GR/dJMcadaNm9b/Pyj70WHO64Y9UJFmCK6zKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwK1GR/dJMcadaNm9b/Pyj70WHO64Y9UJFmCK6zKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwK1GR%2FdJMcadaNm9b%2FPyj70WHO64Y9UJFmCK6zKK%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;974&quot; height=&quot;213&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;분석 : 사용자가 작성한 SQL이나 DF 코드의 컬럼 이름, 테이블 이름 등이 실제 데이터와 일치하는지 카탈로그를 통해 확인&lt;/li&gt;
&lt;li&gt;Logical Planning : 무엇을 할 것인지 정의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Unresolved Logical Plan : 쿼리문의 문법 등을 확인을 하는 것으로 쿼리를 parsing 한 후 처음으로 실행&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이상한 특수문자나 구문적 오류가 있으면 걸러짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Catalog : 테이블에 대한 정보를 저장하는 메타 데이터&lt;/li&gt;
&lt;li&gt;Analyzed Logical Plan(with Catalog) : 사용자가 코드 작성하면 코드가 말이 되는지 확인
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;참조 확인 : select(&quot;col1&quot;)이라고 쓰면, 실제 col1이라는 컬럼 있는지, 테이블 이름 맞는지를 catalog통해 확인&lt;/li&gt;
&lt;li&gt;의미적 정당성 검사 : 문법뿐만 아니라 데이터 타입이 연산에 적합한지를 검사&lt;/li&gt;
&lt;li&gt;이 과정 통과하면 논리적이라고 판단되어 Analyzed Logical Plan이 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Optimized Logical Plan : 논리적으로 문제가 없으면 Catalyst Optimizer가 개입해 &quot;어떻게 하면 더 효율적으로 데이터를 처리할까&quot;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Predicate 푸시다운 : 필터링 연산을 최대한 데이터 소스와 가까운 쪽으로 밀어넣는 것
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;100만 건 다 읽은 후 10건만 고르는 것이 아니라, 읽을 때부터 조건에 맞는 10건만 가져와&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Projection Pruning : 실제로 최종 결과에 필요한 컬럼만 골라서 읽는 것&lt;/li&gt;
&lt;li&gt;Constant Folding : 실행 시점에 계산할 필요가 없는 상수 식을 미리 계&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Physical Planning : 어떻게 실행할 것인지 정의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Candidate Physical Plans : 최적화된 로지컬 플랜을 받아 실행 가능한 여러가지 후보를 만듦
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;다양한 전략 수립 : 조인을 할때 한쪽 테이블이 작다면 모든 노드에 뿌려서 처리할지, 아니면 데이터를 다 섞어 처리할지 고민&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cost-based Optimization : 가성비 좋은 거 선택&lt;/li&gt;
&lt;li&gt;Final Physical Plan : CBO를 통해 선택된 단 하나의 계획
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실행 지침서: 이 계획에는 Scan, Join, Shuffle 등 클러스터 전반에서 일어날 모든 물리적 연산과 순서가 명시&lt;/li&gt;
&lt;li&gt;최종 계획은 RDD의 DAG로 변환돼 실제 실행을 위해 executor로 전달&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;코드 생성 : 최적화된 물리적 계획을 실제 Java 바이트 코드로 변화&lt;/li&gt;
&lt;li&gt;Adaptive Query Execution(AQE, 적응형 쿼리 실행)
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Dynamic Shuffle Partitioning : 실제 데이터 크기에 맞춰 셔플 파티션 수를 자동으로 조절해 성능을 최적화&lt;/li&gt;
&lt;li&gt;BroadCast Join Optimization : 실행 중 데이터가 충분히 작다고 판단 되면 셔플 조인을 브로드캐스트 조인으로 즉시 전환&lt;/li&gt;
&lt;li&gt;Skewed Join Handling : 데이터 쏠림(Skew) 현상을 감지하고 큰 파티션을 쪼개어 연산 속도를 맞춤&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1778146814868&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM large_tbl JOIN small_tbl ON id&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AQE가 없으면 : 데이터들을 셔플해서 조인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AQE가 있으면 : small_tbl을 브로드캐스트로 전환 후 브로드캐스트 조인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;브로드캐스트 조인?&amp;nbsp;&lt;br /&gt;: 작은 크기의 테이블을 드라이버에서 읽어 모든 실행 노드(executor)로 통째로 복사(broadcast)해 전달하는 조인방식
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;각 노드는 메모리에 올라온 작은 테이블과 큰 테이블의 파티션을 로컬에서 즉시 조인, 셔플 과정이 발생하지 않아 네트워킹 오버헤드가 획기적으로 줄어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/71</guid>
      <comments>https://yujung820.tistory.com/71#entry71comment</comments>
      <pubDate>Thu, 7 May 2026 18:44:16 +0900</pubDate>
    </item>
    <item>
      <title>spark submit와 spark api</title>
      <link>https://yujung820.tistory.com/70</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;Spark submit이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 내가 짠 코드를 Spark라는 엔진에 실어서 실행시키는 실행 버튼&lt;/p&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 id=&quot;code_1778132391909&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spark-submit \
  --class &amp;lt;메인_클래스&amp;gt; \
  --master &amp;lt;클러스터_매니저_URL&amp;gt; \
  --deploy-mode &amp;lt;배포_모드&amp;gt; \
  --conf &amp;lt;설정_키=값&amp;gt; \
  ... # 기타 옵션
  &amp;lt;애플리케이션_파일&amp;gt; \
  [애플리케이션_인자]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;master : 스파크 작업을 어떤 환경의 자원을 빌려서 실행할 것인가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Yarn : 하둡 사용시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하둡 생태계에서 별도의 호스트 주소 없이 yarn이라고만 적으면 설정된 하둡 환경을 자동으로 찾음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Standalone (spark://HOST:PORT) : 스파크 자체적으로 내장된 자원 관리 기능을 사용할 때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스파크 마스터 서버가 떠 있는 주소(HOST)와 포트(PORT)를 직접 지정해야 함. 다른 복잡한 시스템 없이 스파크만 설치된 환경에서 주로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kubernetes (k8s://HOST:PORT) : 쿠버네티스 위에서 스파크 돌릴 때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿠버네티스 API 서버 주소를 적어줌. 기본적으로 보안 연결(https)을 사용, 클러스터가 컨테이너 단위로 자원 할당&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;local : 클러스터(여러 대의 컴퓨터)가 아닌, 로컬에서 딱 하나의 worker thread만 사용해 실행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;병렬 처리가 거의 일어나지 않아 아주 가벼움&lt;/li&gt;
&lt;li&gt;local[k] : k라는 숫자만큼의 일꾼 사용&lt;/li&gt;
&lt;li&gt;local[K,F] : k개의 일꾼을 사용하되, 작업 실패 시 최대 F번까지 다시 시도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;deploy-mode : client와 cluster 두가지 버전이 있음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;스파크 애플리케이션 실행 시 가장 중요한 두가지 프로세스는 드라이버와 엑시큐터&lt;/li&gt;
&lt;li&gt;드라이버 &amp;rarr; 지휘관, 엑시큐터 &amp;rarr; 일꾼&lt;/li&gt;
&lt;li&gt;deploy-mode는 Driver이 어디서 상주하느냐를 결정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;client mode : spark-submit 명령어를 실행한 컴퓨터(로컬)에서 드라이버 실행
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자가 실행 결과(로그)를 실시간 확인&lt;/li&gt;
&lt;li&gt;로컬 머신과 클러스터 사이의 네트워크 끊기면 드라이버 종료로 전체 중단&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cluster mode : 드라이버가 로컬 머신이 아닌, 클러스터 내부의 작업 노드 중 하나에서 실행
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;로컬 머신 전원 꺼도 클러스터 안에서 작업 계속 진행&lt;/li&gt;
&lt;li&gt;운영 환경에서 데이터 파이프라인 안정적으로 돌림&lt;/li&gt;
&lt;li&gt;사용자 입장에서는 &quot;애플리케이션 매니저(Driver)를 클러스터에 던져놓고 결과 나중에 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pyspark 전용 설정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;--py-files : 메인 스크립트 외에 추가로 필요한 파이썬 파일, 압축된 모듈, 또는 파이썬 패키지 형태를 전달
&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;/li&gt;
&lt;li&gt;--config.spark.executor.pyspark.memory : 각 executor 내에서 PySpark 전용으로 할당할 메모리 양을 설정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스파크는 JVM 메모리를 주로 쓰지만, PySpark는 파이썬 프로세스를 따로 뛰움. 파이썬 프로세스가 데이터를 처리할 떄 메모리가 부족해 터지는 것을 방지하기 위해 이 설정으로 &quot;파이썬용 메모리&quot;를 확보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;--config.spark.pyspark.driver.python : 드라이버에서 사용할 파이썬 실행 파일의 경로를 지정
&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;/li&gt;
&lt;li&gt;--config.spark.pyspark.python : 드라이버와 엑시큐터 모두에서 사용할 파이썬 실행 파일 경로를 지정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클러스터 환경에서는 모든 서버의 파이썬 버전이 동일해야 함.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Spark API란?&lt;/h4&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;분산 데이터 컬렉션에 대한 인터페이스 : RDD를 다루는 게 핵심으로 단일 객체를 다루듯 코드를 작성하면 API가 이를 클러스터 전체의 작업으로 변환&lt;/li&gt;
&lt;li&gt;지연 평가 모델 : 즉시 실행이 아니라, 실행 계획을 세워두었다가 실제 결과가 필요한 시점에 한꺼번에 최적화해 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Transformations&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 변형시키는 것. Spark 특성 상 데이터를 바꿀 수 없기 때문에 새로운 RDD를 만듦&lt;/li&gt;
&lt;li&gt;lazy해서 실행 계획에 추가함&lt;/li&gt;
&lt;li&gt;Actions이 트리거가 되어 Tranformations이 각각 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-1. Transformation depdency : Transformations 발생 시, 부모 파티션의 데이터가 자식 파티션으로 어떻게 전달되는지&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Narrow Dependecy : 부모 파티션과 자식 파티션이 1:1 혹은 N:1로 매핑
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;n 자기 노드 안의 데이터만 읽어서 처. 다른 node와 연결을 해서 data를 셔플하지 않음.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Direct data lineage : A&amp;rarr;X, B &amp;rarr;Y, C &amp;rarr;Z &amp;nbsp;로 들어가는 파티션이 그대로 아웃 파티션으로 나온다&lt;/li&gt;
&lt;li&gt;Efficient execution : 네트워크 통신이 없으므로 매우 빠르고 효율적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wide Dependency : 부모 파티션 하나가 여러 자식 파티션에 영향, 여러 부모로부터 데이터를 받아와야 함
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;node간의 데이터 셔플링 해야 한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Data shuffling : 그래서 네트워크 I/O가 생긴다. 네트워크 트래핑이 많이 생긴다&lt;/li&gt;
&lt;li&gt;Higher Cost : 데이터를 네트워크를 통해 주고 받기 때문에 비싸고 느리다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Actions&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기록된 모든 Transformations 과정을 실행하고, 그 결과를 driver 프로그램으로 되돌려주거나 외부 저장소에 저장&lt;/li&gt;
&lt;li&gt;결과로 데이터셋이 아닌 실제 값(count, list 등)을 반환하거나 파일 시스템에 기록&lt;/li&gt;
&lt;/ul&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;ul 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;/ul&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;RDD API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Transformaions&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-1. Narrow dependency : map(), mapPartion(), flatMap(), filter(), union()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-2. Wide dependency : groupByKey(), aggregateByKey(), sortByKey(), reduceByKey(), aggregate(), join(), repartitions()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Actions : collect(), count(), first(), take(), reduce()&lt;/p&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 API&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. Transformaions&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-1. Narrow dependency : select(), filter(), withColumn(), drop(), where()&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-2. Wide dependency : groupBy(), agg(), cube(), rollup(), join(), repartitions()&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. Actions : show(), head(), collect(), count(), first()&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;RDD API가 How(어떻게)에 집중한다면 DataFrame API는 What(무엇)에 집중하고 Spark API는 이 모든 걸 가능하게 하는 시스템 전체라고 정의 가능하다.&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/70</guid>
      <comments>https://yujung820.tistory.com/70#entry70comment</comments>
      <pubDate>Thu, 7 May 2026 17:08:03 +0900</pubDate>
    </item>
    <item>
      <title>SparkSQL 기초(3)</title>
      <link>https://yujung820.tistory.com/69</link>
      <description>&lt;pre id=&quot;code_1777880507315&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture15_na 처리

from pyspark.sql import (
    functions as f,
    SparkSession,
    types as t
)

spark = SparkSession.builder.appName(&quot;df_missing_data&quot;).getOrCreate()
df = spark.read.csv(
    &quot;file:///home/jovyan/work/sample/null_data.csv&quot;, header=True, inferSchema=True)
# df.show()

# DataFrame.na: Returns a DataFrameNaFunctions for handling missing values.
# DataFrame.dropna(how='any', thresh=None, subset=None)[source]: Returns a new DataFrame omitting rows with null values. DataFrame.dropna() and DataFrameNaFunctions.drop() are aliases of each other.
#   how: 'any&amp;rsquo; or &amp;lsquo;all&amp;rsquo;. If &amp;lsquo;any&amp;rsquo;, drop a row if it contains any nulls. If &amp;lsquo;all&amp;rsquo;, drop a row only if all its values are null.
#   thresh: default None If specified, drop rows that have less than thresh non-null values. This overwrites the how parameter.
#   subset: optional list of column names to consider.

# df.na.drop(how=&quot;any&quot;).show()
# df.na.drop(thresh=2).show()
# df.na.drop(subset=[&quot;salary&quot;]).show()

df.printSchema()

# # fill string
# df.na.fill(&quot;engineer&quot;).show()

# # fill integer
# df.na.fill(0).show()

# # fill the subset
# df.na.fill(&quot;NA&quot;, subset=[&quot;occupation&quot;]).show()

# # fill the mean value
# mean_value = df.select(f.mean(df['salary'])).collect()

# # print(mean_value[0][0])

# df.na.fill(mean_value[0][0], subset=[&quot;salary&quot;]).show()



# Date parsing
spark = SparkSession.builder.appName(&quot;df_manage_date&quot;).getOrCreate()
df = spark.read.csv(
    &quot;file:///home/jovyan/work/sample/date_parsing.csv&quot;, header=True, inferSchema=True)

# # show year
# df.select(f.year('date')).show()

# # show month
# df.select(f.month('date')).show()

# # show day
# df.select(f.dayofmonth('date').alias('day')).show()
# df.select(f.dayofyear('date').alias('day')).show()

df = df.withColumn(&quot;year&quot;, f.year('date')).groupBy(&quot;year&quot;).mean(&quot;number&quot;).withColumnRenamed(&quot;avg(number)&quot;, &quot;avg&quot;)
# df.show()
df.select(&quot;year&quot;, f.format_number(&quot;avg&quot;, 2).alias(&quot;avg&quot;)).show()&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;df.na.drop() = df.dropna
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;drop(how=&quot;any&quot;) : any일 경우 row에서 어떤 값이라도 비어있으면 drop, all인 경우 row에서 모든 값이 비어있으면 drop&lt;/li&gt;
&lt;li&gt;drop(thresh=2) : 기존 컬럼에서 빈칸이 두개일경우에만 drop, 이건 열 기준임!&lt;/li&gt;
&lt;li&gt;drop(subset=[&quot;salary&quot;]) : 해당 컬럼에 빈칸이 있을 경우 drop&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;df.na.fill()&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;fill(&quot;fill&quot;) : 빈칸 타입이 문자열인 경우, &quot;fill&quot;로 채움&lt;/li&gt;
&lt;li&gt;fill(0) : 빈칸 타입이 정수인 경우, 0으로 채움&lt;/li&gt;
&lt;li&gt;fill(&quot;NA&quot;, subset=[&quot;occupation&quot;]) : &quot;occupation&quot; 컬럼에 빈칸이 있는 경우 &quot;NA&quot; 문자열로 채움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;df.select(f.mean(df['salary'])).collect() : 'salary' 컬럼의 평균값
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;collect() : 클러스터의 워커 노드에 분산되어 있는 데이터를 드라이버 프로그램의 메모리로 수집해 파이썬의 리스트 형태로 변환&lt;/li&gt;
&lt;li&gt;mean_value의 결과는 collect()로 인해 DF의 각 행이 PySpark의 Row 객체로 변환되어 파이썬 리스트에 담김&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;print(mean_value[0][0])
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;첫번째 인덱스의 의미 : 리스트에서 행 추출
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mean_value는 Row 객체들을 담고 있는 리스트&lt;/li&gt;
&lt;li&gt;해당 리스트의 첫번째 요소에 접근하기 위해 [0]을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;두번째 인덱스의 의미 : Row 객체에서 값 추출
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Row 객체는 파이썬의 튜플처럼 인덱스를 통해 내부 값에 접근 가능&lt;/li&gt;
&lt;li&gt;Row 객체 안의 첫번째 열값에 접근하기 위해 다시 [0]을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;df.select
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;select(f.year()): 연도 추출&lt;/li&gt;
&lt;li&gt;select(f.month()): 월 추출&lt;/li&gt;
&lt;li&gt;select(f.&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;dayofmonth&lt;/b&gt;&lt;/span&gt;()) : 날짜 추출&lt;/li&gt;
&lt;li&gt;select(f.&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;dayofyear&lt;/span&gt;&lt;/b&gt;()) : 현재 날짜가 해당 연도에서 몇 일째인지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777882655751&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture16_join

from pyspark.sql import (
    functions as f,
    SparkSession,
    types as t
)

spark = SparkSession.builder.appName(&quot;df_join&quot;).getOrCreate()

# user data
user_data = [
    [&quot;1000&quot;, &quot;Neville Hardy&quot;, &quot;Apple&quot;],
    [&quot;2000&quot;, &quot;Dacia Cohen&quot;, &quot;Alphabet&quot;],
    [&quot;3000&quot;, &quot;Elois Cox&quot;, &quot;Neflix&quot;],
    [&quot;4000&quot;, &quot;Junita Meyer&quot;, &quot;Meta&quot;],
    [&quot;5000&quot;, &quot;Cleora Banks&quot;, &quot;Amazon&quot;]]

user_col = ['id', 'name', 'company']
df_user = spark.createDataFrame(data=user_data, schema=user_col)
df_user.show()

# salary data
salary_data = [
    [&quot;1000&quot;, &quot;150000&quot;, &quot;engineer&quot;],
    [&quot;2000&quot;, &quot;240000&quot;, &quot;manager&quot;],
    [&quot;3000&quot;, &quot;120000&quot;, &quot;human resource&quot;],
    [&quot;6000&quot;, &quot;100000&quot;, &quot;sales&quot;]]

salary_col = ['id', 'salary', 'department']
df_salary = spark.createDataFrame(data=salary_data, schema=salary_col)
df_salary.show()

# # inner join: join the two dataframes on common key columns.
# # dataframe1.join(dataframe2,dataframe1.column_name ==  dataframe2.column_name,&amp;rdquo;inner&amp;rdquo;)
# print(&quot;== inner join ==&quot;)
# df_user.join(df_salary,
#                df_user.id == df_salary.id,
#                &quot;inner&quot;).show()

# # inner join, then filter
# df_user.join(df_salary,
#                df_user.id == df_salary.id,
#                &quot;inner&quot;).filter(df_user.id == 1000).show()

# # inner join, then where
# df_user.join(df_salary,
#                df_user.id == df_salary.id,
#                &quot;inner&quot;).where(df_user.id == 1000).show()

# # multiple join with &amp;amp;
# df_user.join(df_salary,
#                (df_user.id == df_salary.id) &amp;amp; (df_user.id == 1000)
#             ).show()

# # full outer join: join the two dataframes with all matching and non-matching rows
# print(&quot;== full outer join ==&quot;)
# df_user.join(df_salary, 
#                df_user.id == df_salary.id, 
#                &quot;fullouter&quot;).show()

# # left join:  joins by returning all rows from the first dataframe and only matched rows from the second one
# print(&quot;== left join ==&quot;)
# df_user.join(df_salary, 
#                df_user.id == df_salary.id, 
#                &quot;left&quot;).show()

# # right join: joins by returning all rows from the second dataframe and only matched rows from the first one
# print(&quot;== right join ==&quot;)
# df_user.join(df_salary, 
#                df_user.id == df_salary.id, 
#                &quot;right&quot;).show()

# # left semi join: join all rows from the first dataframe and return only matched rows from the second one
# print(&quot;== left semi join ==&quot;)
# df_user.join(df_salary, 
#                df_user.id == df_salary.id, 
#                &quot;leftsemi&quot;).show()

# # left anti join: join returns only columns from the first dataframe for non-matched records of the second dataframe
# print(&quot;== left anti join ==&quot;)
# df_user.join(df_salary, 
#                df_user.id == df_salary.id, 
#                &quot;leftanti&quot;).show()

# # SQL join
# df_user.createOrReplaceTempView(&quot;user&quot;)
# df_salary.createOrReplaceTempView(&quot;salary&quot;)

# spark.sql(&quot;SELECT * FROM user, salary WHERE user.id == salary.id&quot;).show()

# spark.sql(&quot;SELECT * FROM user INNER JOIN salary ON user.id == salary.id&quot;).show()&lt;/code&gt;&lt;/pre&gt;</description>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/69</guid>
      <comments>https://yujung820.tistory.com/69#entry69comment</comments>
      <pubDate>Mon, 4 May 2026 16:41:50 +0900</pubDate>
    </item>
    <item>
      <title>SparkSQL 기초(2)</title>
      <link>https://yujung820.tistory.com/68</link>
      <description>&lt;pre id=&quot;code_1777872518397&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# lecture12_사용자별 최대 구하기

from pyspark.sql import (
    functions as f,
    SparkSession,
    types as t
)

spark = SparkSession.builder.appName(&quot;df_total&quot;).getOrCreate()
table_schema = t.StructType([
    t.StructField(&quot;customer_name&quot;, t.StringType(), True),
    t.StructField(&quot;product_id&quot;, t.IntegerType(), True),
    t.StructField(&quot;price&quot;, t.IntegerType(), True)])

csv_file_path = &quot;file:///home/jovyan/work/sample/product.csv&quot;
df = spark.read.schema(table_schema).csv(csv_file_path)

customer_spent = df.groupBy(&quot;customer_name&quot;)\
                    .agg(
                        f.round(
                            f.sum(&quot;price&quot;),
                            2
                        ).alias(&quot;cost&quot;))
                    
# customer_spent.show()

sorted_customer_spent = customer_spent.orderBy(f.col(&quot;cost&quot;).desc())

sorted_customer_spent.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;df.groupBy(&quot;customer_name&quot;).agg(f.round(f.sum(&quot;price&quot;),2).alias(&quot;cost&quot;))
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;df.groupBy(&quot;customer_name&quot;): &quot;customer_name&quot; 컬럼을 기준으로 데이터를 그룹화&lt;/li&gt;
&lt;li&gt;agg() : 집계의 약자로, groupBy로 묶인 각 그룹에 대해 합계, 평균, 개수 등의 통계적 연산을 적용&lt;/li&gt;
&lt;li&gt;f.round(..., 2) : 소수점 아래 둘째 자리까지 반올림&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;price의 데이터 타입이 Integer인데 왜 필요하지??? &lt;br /&gt;price가 정수 타입이지만, 향후 데이터 타입이 변경되거나 확장이 일어날때 소수점 처리를 정확히 하기 위한 안전장치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sorted_customer_spent&amp;nbsp;=&amp;nbsp;customer_spent.orderBy(f.col(&quot;cost&quot;).desc())&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;orderBy() : sort() 메서드와 같이 기본적으로 오름차순으로 동작&lt;/li&gt;
&lt;li&gt;desc() : 내림차순으로 정렬&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777873287102&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture13_브로드캐스트 조인(상대적으로 작은 데이터만)

from pyspark.sql import (
    functions as f,
    SparkSession,
    types as t
)

spark = SparkSession.builder.appName(&quot;df_most_interviewed&quot;).getOrCreate()
table_schema = t.StructType([
    t.StructField(&quot;interviwer_id&quot;, t.StringType(), False),
    t.StructField(&quot;occupation_id&quot;, t.StringType(), False),
    t.StructField(&quot;rating&quot;, t.IntegerType(), False)])

csv_file_path = &quot;file:///home/jovyan/work/sample/like.csv&quot;
df = spark.read.schema(table_schema).csv(csv_file_path)

interviewer_count = df.groupBy(&quot;occupation_id&quot;).count().orderBy(f.desc(&quot;count&quot;))

for d in interviewer_count.select(&quot;occupation_id&quot;, f.col(&quot;count&quot;).alias(&quot;cnt&quot;)).collect():
    print(f&quot;{d.occupation_id}: {d.cnt}&quot;)


# But, What if we want to know what occupation_id is?  
# 1100: engineer
# 2030: developer
# 3801: painter
# 3021: chemistry teacher
# 9382: priest

meta = {
    &quot;1100&quot;: &quot;engineer&quot;,
    &quot;2030&quot;: &quot;developer&quot;,
    &quot;3801&quot;: &quot;painter&quot;,
    &quot;3021&quot;: &quot;chemistry teacher&quot;,
    &quot;9382&quot;: &quot;priest&quot;
}
occupation_dict = spark.sparkContext.broadcast(meta)

def get_occupation_name(occupation_id: str) -&amp;gt; str:
    return occupation_dict.value[occupation_id]

occupation_lookup_udf = f.udf(get_occupation_name)

occupation_with_name = interviewer_count.withColumn(&quot;occupation_name&quot;, occupation_lookup_udf(f.col(&quot;occupation_id&quot;)))

occupation_with_name.show(10)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;df.groupBy(&quot;occupation_id&quot;).count().orderBy(f.desc(&quot;count&quot;))
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;그룹화된 데이터의 개수를 계산하여 자동으로 &quot;count&quot;라는 이름의 새로운 컬럼 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;for d in interviewer_count.select(&quot;occupation_id&quot;, f.col(&quot;count&quot;).alias(&quot;cnt&quot;)).collect():
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;occupation_id&quot;와 f.col(&quot;count&quot;)의 차이&lt;/span&gt;&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f.col(&quot;occupation_id&quot;)라고 작성해도 동일하게 동작&lt;/li&gt;
&lt;li&gt;f.col() 은 columns 객체로 지정해서 pyspark가 제어할 수 있는 columns 객체로 변환하는 방식으로 컬럼에 어떤 연산이나 변경을 가하고 싶을때 사용&lt;/li&gt;
&lt;li&gt;f.col(&quot;count&quot;).alias(&quot;cnt&quot;) : alias()는 문자열 데이터 타입에는 존재하지 않는 pyspark column 객체만의 고유 기능으로 &quot;count&quot;컬럼을 f.col()로 감싸서 column 객체로 만든 후 alias 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;spark.sparkContext.broadcast(meta) : broadcast는 대규보 분산 처리를 수행할 때 성능을 최적화
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;딕셔너리 meta를 스파크의 브로드캐스브 변수로 변환하는 역할&lt;/li&gt;
&lt;li&gt;드라이버 노드에 있는 meta 데이터를 각 Executor당 딱 한 번만 전송해 메모리에 캐싱&lt;/li&gt;
&lt;li&gt;이후 해당 Executor에 돌아가는 모든 Task들은 메모리에 이미 올라와 있는 이 변수를 공유해서 읽기 전용 참조&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;get_occupation_name(occupation_id: str) -&amp;gt; str&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;worker node에 복사된 occupation_dict는 occupation_dict.value를 통해 원본 딕셔너리에 접근 할 수 있음&lt;/li&gt;
&lt;li&gt;get_occupation_name 함수 실행 시, 각 행의 occupation_id 값을 key로 사용해 value를가져옴&amp;nbsp;&lt;/li&gt;
&lt;li&gt;occupation_id : str 는 함수가 입력받은 매개변수(occupatioon_id)의 데이터 타입이 문자열임을 명시&lt;/li&gt;
&lt;li&gt;-&amp;gt; str : 함수가 최종적으로 반환하는 값의 데이터 타입은 문자열&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;f.udf(get_occupation_name)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;get_occupation_name을 PySpark가 이해하고 분산 처리할 수 있는 UDF 형태로 변환하는 과정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스파크 DF는 JVM 위에서 동작하는 분산 데이터 구조이고 get_occupation_name은 순수 파이썬 함수&lt;/li&gt;
&lt;li&gt;f.udf()는 이 파이썬 함수를 감싸서, 스파크가 데이터를 한 행씩 처리할 때 파이썬 프로세스를 호출해 함수를 적용할 수 있도록 만들어 줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777878666501&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture14_csv로 추출하기

from pyspark.sql import (
    functions as f,
    SparkSession,
    types as t
)

# Attribution 3.0 Unported (CC BY 3.0)
# https://www.kaggle.com/datasets/csanhueza/the-marvel-universe-social-network

spark = SparkSession.builder.appName(&quot;df_most_popular&quot;).getOrCreate()
# csv_file_path = &quot;file:///home/jovyan/work/sample/hero-network.csv&quot;
# # read file
# df = spark.read\
#             .option(&quot;header&quot;, &quot;true&quot;)\
#             .option(&quot;inferSchema&quot;, &quot;true&quot;).csv(csv_file_path)

# # pyspark.sql.functions.collect_set(col): Aggregate function: returns a set of objects with duplicate elements eliminated.
# data = df.groupBy(&quot;hero1&quot;)\
#             .agg(
#                 f.collect_set(&quot;hero2&quot;).alias(&quot;connection&quot;))\
#             .withColumnRenamed(&quot;hero1&quot;, &quot;hero&quot;)
# # data.show()
# # pyspark.sql.functions.concat_ws(sep, *cols): Concatenates multiple input string columns together into a single string column, using the given separator.
# data = data.withColumn(&quot;connection&quot;, f.concat_ws(&quot;,&quot;, f.col(&quot;connection&quot;)))
# data.show()

# # DataFrame.coalesce(numPartitions): Returns a new DataFrame that has exactly numPartitions partitions.
# data.coalesce(1).write.option(&quot;header&quot;, True).csv(&quot;output&quot;)

# # load the file
csv_file_path = &quot;file:///home/jovyan/work/output&quot;
df = spark.read\
            .option(&quot;header&quot;, &quot;true&quot;)\
            .option(&quot;inferSchema&quot;, &quot;true&quot;)\
            .csv(csv_file_path)
# df.show()

# pyspark.sql.functions.size(col): Collection function: returns the length of the array or map stored in the column.
df = df.withColumn(
        &quot;connection_size&quot;,
        f.size(
            f.split(f.col(&quot;connection&quot;), &quot;,&quot;)))\
        .orderBy(f.desc(&quot;connection_size&quot;))
df.show()

most_popular_hero = df.select(&quot;hero&quot;).first()
print(most_popular_hero.hero)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;df.groupBy(&quot;hero1&quot;).agg(f.collect_set(&quot;hero2&quot;).alias(&quot;connection&quot;)).withColumnRenamed(&quot;hero1&quot;, &quot;hero&quot;)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;collect_set() : 데이터를 하나로 묶어주되, 중복을 알아서 제거해줌
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;collect_list()는 중복을 허용하고 만난 순서대로 모두 담고 collect_set()는 중복을 완전히 제거하고 고유한 값만 담음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;.withColumnRenamed() : 컬렴의 이름을 바꾸는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;data.withColumn(&quot;connection&quot;, f.concat_ws(&quot;,&quot;, f.col(&quot;connection&quot;))) : 하나의 깔끔한 문자열로 변환
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이전 단계까지 connection 컬럼안에 배열 형태로 들어가 있는 데이터를 ','를 통해 하나의 평범한 텍스트로 변환&lt;/li&gt;
&lt;li&gt;concat_ws: 구분자를 사용해 합치다&lt;/li&gt;
&lt;li&gt;withColumn() : 기존 컬럼의 값을 변경하거나 새로운 컬럼 추가할때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 배열 형태의 &quot;connection&quot;컬럼 내용을 가공한 문자열 데이터로 덮어 쓰기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;data.coalesce(1).write.option(&quot;header&quot;,&amp;nbsp;True).csv(&quot;output&quot;)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;coalesce() : 여러개로 쪼개진 데이터 조각들 다시 합치는 역할&lt;/li&gt;
&lt;li&gt;write: 스파크에게 데이터를 저장하겠다고 명령&lt;/li&gt;
&lt;li&gt;csv(&quot;output&quot;) : output이라는 파일로 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/68</guid>
      <comments>https://yujung820.tistory.com/68#entry68comment</comments>
      <pubDate>Mon, 4 May 2026 16:38:22 +0900</pubDate>
    </item>
    <item>
      <title>SparkSQL 기초(1)</title>
      <link>https://yujung820.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777796698896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture8

from pyspark.sql import (
    Row,
    SparkSession)
from pyspark.sql.functions import col, asc, desc

def parse_line(line: str):
    fields = line.split('|') # |
    return Row(
        name=str(fields[0]),
        country=str(fields[1]),
        email=str(fields[2]),
        compensation=int(fields[3]))


spark = SparkSession.builder.appName(&quot;SparkSQL&quot;).getOrCreate()
lines = spark.sparkContext.textFile(&quot;file:///home/jovyan/work/sample/income.txt&quot;)
income_data = lines.map(parse_line)

# Creates a DataFrame from an RDD, a list or a pandas.DataFrame.
# SparkSession.createDataFrame(data, schema=None, samplingRatio=None, verifySchema=True)[source]
schema_income = spark.createDataFrame(data=income_data).cache()

# Creates or replaces a local temporary view with this DataFrame.
schema_income.createOrReplaceTempView(&quot;income&quot;)

# returns the dataframe
medium_income_df = spark.sql(
    &quot;SELECT * FROM income WHERE compensation &amp;gt;= 70000 AND compensation &amp;lt;= 100000&quot;)
# medium_income_df.show()

# for income_data in medium_income_df.collect():
#     # print(income_data)
#     print(income_data.name)

# # use function instead of sql function
# schema_income.groupBy(&quot;country&quot;).count().orderBy(col(&quot;count&quot;).desc()).show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q : 이전에 사용했던 &lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;&amp;nbsp;sc = pyspark.SparkContext.getOrCreate()&lt;/span&gt; 와의 차이점은??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A : SparkSession은 기존의 모든 컨텍스트(SparkContext, SQLContext, HiveContext 등) 하나로 묶은 통합 진입점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SparkSession 객체 하나만 생성하면 내부적으로 SparkContext가 자동으로 생성되므로, 별도의 컨텍스트들을 관리할 필요가 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;spark&amp;nbsp;=&amp;nbsp;SparkSession.builder.appName(&quot;SparkSQL&quot;).getOrCreate()
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;SparkSession.builder : 객체를 생성하기 위한 빌더 객체를 호출&lt;/li&gt;
&lt;li&gt;appName(&quot;SparkSQL&quot;) : 스파크 애플리케이션의 이름을 &quot;SparkSQL&quot;로 지정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이름은 스파크 웹 UI나 클러스터 매니저에게 현재 실행 중인 작업을 모니터링할 때 식별자로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;schema_income&amp;nbsp;=&amp;nbsp;spark.createDataFrame(data=income_data).cache()&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;createDataFrame : RDD를 스파크 DF로 변환(데이터의 구조를 부여)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RDD는 데이터를 안전하게 분산 처리하지만, 데이터 안에 어떤 칼럼이 있고 어떤 타입인지 스파크가 명확히 알지 못하는 비정형 데이터에 가까움, 이를 정형 데이터로 변환하기 위한 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cache : 모든 데이터를 메모리(RAM)에 올림
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 사이즈가 작기 때문에 메모리에 올려서 속도를 빠르게 함 : 한 번 읽어서 정형화한 DF 데이터를 메모리에 보관해서 다시 사용할 때 원본 파일을 또 읽을 필요가 없음&lt;/li&gt;
&lt;li&gt;스파크의 Lazy Evaluation 특징 : 데이터를 변환하는 작업을 즉시 실행하지 않고, 실제 결과가 필요할 때 과정 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;schema_income.createOrReplaceTempView(&quot;income&quot;)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;createOrReplaceTempView : DF를 &quot;income&quot;이라는 이름의 임시 뷰로 생성하거나 교체&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777802855342&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture9_csv 파일 읽어오기1

from pyspark.sql import SparkSession
from pyspark.sql.functions import (
    avg,
    col,
    round as rnd
)

spark = SparkSession.builder.appName(&quot;sql_import_csv&quot;).getOrCreate()
csv_file_path = &quot;file:///home/jovyan/work/sample/age.csv&quot;

# header option: either csv has header or not(default: header = false)
# inferSchema: either all columns are str or not
data = spark.read.option(&quot;header&quot;, &quot;true&quot;)\
            .option(&quot;inferSchema&quot;, &quot;true&quot;)\
            .csv(csv_file_path)
# data = spark.read.option(&quot;header&quot;, &quot;true&quot;)\
#             .csv(csv_file_path)

# # show schema
# data.printSchema()

# # show column name with data
# data.select(&quot;name&quot;, &quot;age&quot;).show()

# # filter the data for age of 20 above
# data.filter(data.age &amp;gt; 20).show()

# # group by age and aggregates for count
# data.groupBy(&quot;age&quot;).count().show()

# # custom arithmetic
# data.select(data.name, data.age, data.age - 10).show()

# # column alias
# data.select(data.name, col(&quot;age&quot;).alias(&quot;age1&quot;)).show()

# # average
# data.select(data.name, data.age, data.country)\
#         .groupBy(&quot;country&quot;)\
#         .avg(&quot;age&quot;).show()

# # average &amp;amp; sort
# data.select(data.name, data.age, data.country)\
#         .groupBy(&quot;country&quot;)\
#         .avg(&quot;age&quot;).sort(&quot;avg(age)&quot;).show()

# # average &amp;amp; round
# data.select(data.name, data.age, data.country)\
#         .groupBy(&quot;country&quot;)\
#         .agg(rnd(avg(&quot;age&quot;), 2).alias(&quot;avg_age&quot;)).show()&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;data = spark.read.option(&lt;span&gt;&quot;header&quot;&lt;/span&gt;, &lt;span&gt;&quot;true&quot;&lt;/span&gt;).option(&lt;span&gt;&quot;inferSchema&quot;&lt;/span&gt;, &lt;span&gt;&quot;true&quot;&lt;/span&gt;) .csv(csv_file_path)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;spark.read : 스파크세션에서 파일을 읽기 위한 DataFrameReader 객체 가져옴&lt;/li&gt;
&lt;li&gt;.option(&quot;header&quot;, &quot;true&quot;) : csv파일의 첫번째 행을 컬럼의 이름으로 사용할 것인지 여부 결정&lt;/li&gt;
&lt;li&gt;.option(&quot;inferSchema&quot;, &quot;true&quot;) : 각 컬럼에 들어있는 데이터 타입을 스파크가 자동으로 추론&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;false라면 모든 컬럼을 기본 타입인 문자열로 인식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;data.select(&quot;name&quot;,&amp;nbsp;&quot;age&quot;).show()
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;.select(&quot;name&quot;) : 컬럼이 name인 열만 추출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;data.select(data.name,&amp;nbsp;data.age,&amp;nbsp;data.age&amp;nbsp;-&amp;nbsp;10).show()
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이름, 나이, 나이-10 이 추출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;data.select(data.name,&amp;nbsp;col(&quot;age&quot;).alias(&quot;age1&quot;)).show()
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;컬럼명을 age에서 age1으로 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777803506878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# lecture10 _ 단어 갯수 세어보기

from pyspark.sql import (
    functions,
    Row,
    SparkSession
)

spark = SparkSession.builder.appName(&quot;df_wordcount&quot;).getOrCreate()

# # functions.explode(col)
# # Returns a new row for each element in the given array or map
# df = spark.createDataFrame([
#         Row(a=1,
#             intlist=[1,2,3],
#             mapfield={&quot;a&quot;: &quot;b&quot;}
#            )])

# df.select(functions.explode(df.intlist).alias(&quot;anInt&quot;)).collect()
# # output: [Row(anInt=1), Row(anInt=2), Row(anInt=3)]


# # functions.split(str, pattern, limit=-1)
# # Splits str around matches of the given pattern.
# df = spark.createDataFrame([
#         Row(word=&quot;hello world and pyspark&quot;)])
# df.select(functions.split(df.word, ' ').alias(&quot;word&quot;)).collect()


csv_file_path = &quot;file:///home/jovyan/work/sample/lorem_ipsum.txt&quot;
df = spark.read.text(csv_file_path)

# # save as &quot;value&quot;
# df.show()

words = df.select(
    functions.explode(
        functions.split(df.value, ' ')).alias(&quot;word&quot;))
# words.show()
word_counts = words.groupBy(&quot;word&quot;).count().orderBy(functions.col(&quot;count&quot;).desc())
# 
word_counts.show()&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;df = spark.createDataFrame([Row(a=1,&amp;nbsp;intlist=[1,2,3],&amp;nbsp;mapfield={&quot;a&quot;: &quot;b&quot;})])
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Row() : 1개 행을 정의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;a = 1 : a라는 이름의 컬럼값을 1이라고 생성&lt;/li&gt;
&lt;li&gt;intlist=[1,2,3] : intlist라는 이름의 리스트 값을 [1,2,3]이라고 생성&lt;/li&gt;
&lt;li&gt;mapfield={&quot;a&quot;: &quot;b&quot;} : mapfield라는 이름의 딕셔너리 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;df.select(functions.explode(df.intlist).alias(&quot;anInt&quot;)).collect()&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;functions.explode(df.intlist) : 배열이나 map 형태의 컬럼을 입력받아, 그 안에 담긴 각 요소들을 개별적인 행으로 쪼개어줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;df.select(functions.split(df.word,&amp;nbsp;'&amp;nbsp;').alias(&quot;word&quot;)).collect()&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;functions.split(df.word, ' ') : df의 word컬럼을 공백으로 나누고 해당 컬럼을 word라고 별칭
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;functions.split(df.word, ' ', 2) : 이 경우에는 배열의 크기를 최대 2개로 제한해서 &quot;hello&quot;, &quot;world and pyspark&quot; 두개로 나눔. 기본값은 -1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;words&amp;nbsp;=&amp;nbsp;df.select(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;functions.explode(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;functions.split(df.value,&amp;nbsp;'&amp;nbsp;')).alias(&quot;word&quot;))
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;df.value : 이전에 spark.read.text()에서 별도의 컬럼 이름이 없기 때문에, 자동으로 'value'라는 이름의 문자열 타입 컬럼을 생성해 모든 데이터를 집어넣음 = 파일 확장자가 .txt이든 .csv이든 spark.read.text()로 읽는 순간, df 내부에 이미 'value'라는 이름의 컬럼이 자동 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;word_counts&amp;nbsp;=&amp;nbsp;words.groupBy(&quot;word&quot;).count().orderBy(functions.col(&quot;count&quot;).desc())
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;.orderBy(functions.col(&quot;count&quot;).desc()) : 특정 컬럼을 기준으로 데이터를 정렬(sort와 동일)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;functions.col() : 특정 컬럼을 객체 형태로 지정하고 제어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777805665369&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture11 _csv 파일 읽어오기2

from pyspark.sql import (
    functions as f,
    Row,
    SparkSession,
    types as t
)

spark = SparkSession.builder.appName(&quot;df_struct&quot;).getOrCreate()

# types.StructField(name, dataType, nullable=True, metadata=None)
table_schema = t.StructType([
    t.StructField(&quot;country&quot;, t.StringType(), True),
    t.StructField(&quot;temperature&quot;, t.FloatType(), True),
    t.StructField(&quot;observed_date&quot;, t.StringType(), True)])

csv_file_path = &quot;file:///home/jovyan/work/sample/temp_with_date.csv&quot;
df = spark.read.schema(table_schema).csv(csv_file_path)
# df.printSchema()

data = df.select(&quot;country&quot;, &quot;temperature&quot;, &quot;observed_date&quot;)

min_temperature = data.groupBy(&quot;country&quot;).min(&quot;temperature&quot;)

# min_temperature.show()

# # celsius to fahrenheit: (0&amp;deg;C &amp;times; 9/5) + 32 
f_temperature = data.withColumn(
                    &quot;temperature&quot;,
                    (f.col(&quot;temperature&quot;) * 9 / 5) + 32)\
                .select(&quot;country&quot;, &quot;temperature&quot;)
f_temperature.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;※ csv 파일을 읽어올 때 헤더가 없을때 하는 방법&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;table_schema&amp;nbsp;=&amp;nbsp;t.StructType([&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.StructField(&quot;country&quot;,&amp;nbsp;t.StringType(),&amp;nbsp;True),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.StructField(&quot;temperature&quot;,&amp;nbsp;t.FloatType(),&amp;nbsp;True),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.StructField(&quot;observed_date&quot;,&amp;nbsp;t.StringType(),&amp;nbsp;True)])
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;t.StructType : 데이너프레임 전체의 스키마를 정의하는 컨테이너 역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;t : pyspark.sql,types를 축약한 표현&lt;/li&gt;
&lt;li&gt;StructField(name, dataType, nullable = True, metadata = None)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;name : 칼럼 이름&lt;/li&gt;
&lt;li&gt;datatype : 데이터 타입&lt;/li&gt;
&lt;li&gt;nullable = True : null 값 허용&lt;/li&gt;
&lt;li&gt;metadata : 해당 컬럼에 추가적인 메타데이터를 저장할때 사용하며 생략 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;spark.read.schema(table_schema).csv(csv_file_path)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이전에 헤더 있을 때 csv 읽어오는 법(spark.read.option(&quot;header&quot;, &quot;true&quot;).csv(path))과 차이
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;read.schema는 개발자가 직접 스키마를 지정하여 읽기&lt;/li&gt;
&lt;li&gt;read.option는 첫번째 줄을 컬럼의 헤더로 인식하여 읽기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/67</guid>
      <comments>https://yujung820.tistory.com/67#entry67comment</comments>
      <pubDate>Sun, 3 May 2026 18:01:05 +0900</pubDate>
    </item>
    <item>
      <title>DF과 SparkSQL 소개</title>
      <link>https://yujung820.tistory.com/66</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;Spark Dataframe 이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 기존의 pandas dataframe처럼 행과 열로 이루어진 테이블구조이지만, 내부적으로는 대용량 데이터를 여러 컴퓨터에 나누어 담아 빠르게 처리할 수 있는 분산 데이터 시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스파크 데이터프레임의 특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Schema Support
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;컬럼에 대한 이름과 타입을 알기 때문에, 쉽게 접근하고 표현할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lazy Evaluation
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;데이터를 작업하기 전에 실현화하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Distributed and Parallel Processing
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;분산 시스템을 사용할 수 있게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Optimization
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;쿼리 실행 계획을 자동으로 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Integration
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;추출 : DF - High level(structured) | RDD - low level(key-value pairs)&lt;/li&gt;
&lt;li&gt;사용 용이성 : DF - Simple | RDD - requires more effort to use&lt;/li&gt;
&lt;li&gt;사용 사례 : DF - 정형/반정형 데이터 | RDD - 비정형&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SparkSQL&amp;nbsp; 이란?&lt;/h4&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;SparkSQL의 이점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ease of Use
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;기존 SQL을 알고 있다면 쉽게 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Integration with Spark
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;쿼리 결과를 DF와 Dataset API와 쉽게 통합 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Performance
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;optimzer가 자동으로 바꾸기 때문에 보다 빠르게 처리 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flexibility
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;다양한 데이터 포맷을 처리하고 외부 데이터베이스와 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Unified Analytics
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;대규모 분석을 위해 SQL의 직관적인 표현력과 스파크의 강력한 분산 컴퓨팅 능력을 하나로 결합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/66</guid>
      <comments>https://yujung820.tistory.com/66#entry66comment</comments>
      <pubDate>Fri, 1 May 2026 14:22:20 +0900</pubDate>
    </item>
    <item>
      <title>Spark 기초(2)</title>
      <link>https://yujung820.tistory.com/65</link>
      <description>&lt;pre id=&quot;code_1777609686231&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture5_filter

# filter
# Return a new RDD containing only the elements that satisfy a predicate.

import pyspark

sc = pyspark.SparkContext.getOrCreate()
test_file = &quot;file:///home/jovyan/work/sample/temperature.csv&quot;

def get_data(line, header):
    if line != header:
        col = line.split(',')
        city = col[6].strip(&quot;\&quot;&quot;)
        avg_temp_fahr = col[4]
        yield (city, avg_temp_fahr)

lines = sc.textFile(test_file)

# get header string
header = lines.first()

parsed_line = lines.flatMap(lambda line: get_data(line, header))

# filter NA values
filtered_line = parsed_line.filter(lambda x: &quot;NA&quot; not in x[1])

# finding min temperature
min_temp = filtered_line.reduceByKey(lambda x, y: min(float(x), float(y)))
final_list = min_temp.collect()
for city, temperature in final_list:
    print(f&quot;{city}: {temperature}&quot;)

print(&quot;------------------&quot;)
# finding max temperature
min_temp = filtered_line.reduceByKey(lambda x, y: max(float(x), float(y)))
final_list = min_temp.collect()
for city, temperature in final_list:
    print(f&quot;{city}: {temperature}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;첫번째 행은 행이름이 적혀 있기 때문에 추출해야 함
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; header = lines.first()&lt;br /&gt;parsed_line&amp;nbsp;=&amp;nbsp;lines.flatMap(lambda&amp;nbsp;line:&amp;nbsp;get_data(line,&amp;nbsp;header)) &lt;br /&gt;def get_data(line, header):&lt;br /&gt;if&amp;nbsp;line&amp;nbsp;!=&amp;nbsp;header:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;col&amp;nbsp;=&amp;nbsp;line.split(',')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;city&amp;nbsp;=&amp;nbsp;col[6].strip(&quot;\&quot;&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;avg_temp_fahr&amp;nbsp;=&amp;nbsp;col[4]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yield&amp;nbsp;(city,&amp;nbsp;avg_temp_fahr)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;header가 line과 다르다면 get_data 함수를 통해 튜플을 만듦&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;lines 의 결과는&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;[&quot;record_id,month,day,year,AverageTemperatureFahr,Uncertainty,City,country_id,Country&quot;, &quot;474376,01,01,1853,NA,NA,Auckland,NEW,New Zealand&quot;, &quot;474381,06,01,1853,51.9062,36.9572,Auckland,NEW,New Zealand&quot;, ...]&lt;/li&gt;
&lt;li&gt;col은 각 한 행을 split 하고&lt;/li&gt;
&lt;li&gt;city는 각행의 6번째 값을 strip하는데 이때 양 옆 큰따옴표 제거하기 위해 strip(&quot;\&quot;&quot;)&lt;/li&gt;
&lt;li&gt;yield (city, avg_temp_fahr) : 데이터를 하나씩 생성해서 보냄
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;return은 결과값을 통째로 넘겨준 뒤 함수를 종료시킨다면 yield는 하나씩 결과를 내보내면서 함수의 상태로 잠깐 멈춘채 대기하고 호출이 오면 다시 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;flatMap은 함수가 반환하는 값들을 하나의 리스트로 합쳐주는 역할임&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;filter NA&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;filtered_line = parsed_line.filter(lambda x: &quot;NA&quot; not in x[1])&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;2번째 열(인덱스 1번)이 NA가 아닌 행만 필터링&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;최대 최소찾기
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;min_temp = filtered_line.reduceByKey(lambda x, y: min(float(x), float(y)))&lt;br /&gt;final_list = min_temp.collect()&lt;br /&gt;for city, temperature in final_list:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&quot;{city}: {temperature}&quot;)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x는 이미 계산된 최소 값&lt;/li&gt;
&lt;li&gt;y는 새로운 값으로&lt;/li&gt;
&lt;li&gt;두개를 비교해 min/max를 계속 남겨놓는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777612075128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture6_map_flat

# map vs. flatMap

# map transformation applies a function to each row in a DataFrame/Dataset and returns the new transformed Dataset.
# 1 =&amp;gt; 1
# flatMap transformation flattens the DataFrame/Dataset after applying the function on every element and returns a new transformed Dataset. 
# The returned Dataset will return more rows than the current DataFrame. It is also referred to as a one-to-many transformation function
# 1 =&amp;gt; Many
# One of the use cases of flatMap() is to flatten column which contains arrays, list, or any nested collection

import pyspark

sc = pyspark.SparkContext.getOrCreate()
rdd = sc.parallelize([(&quot;name&quot;, &quot;joe,sarah,tom&quot;), (&quot;car&quot;, &quot;hyundai&quot;)])
result = rdd.map(lambda x: x[1].split(&quot;,&quot;))
# print(result.collect())
# [['joe', 'sarah', 'tom'], ['hyundai']]

rdd = sc.parallelize([(&quot;name&quot;, &quot;joe,sarah,tom&quot;), (&quot;car&quot;, &quot;hyundai&quot;)])
result = rdd.flatMap(lambda x: x[1].split(&quot;,&quot;))
# print(result.collect())
# ['joe', 'sarah', 'tom', 'hyundai']


test_file = &quot;file:///home/jovyan/work/sample/lorem_ipsum.txt&quot;
lines = sc.textFile(test_file)
words = lines.flatMap(lambda x: x.split())
# word_count = words.countByValue()
# print(word_count)
# for word, count in word_count.items():
#     print(f&quot;{word}: {count}&quot;)
    
    
# # How about sort by key?
word_count = words.map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y)
sorted_word_count = word_count.map(lambda x: (x[1], x[0])).sortByKey()
for count, word in sorted_word_count.collect():
    print(f&quot;{count}: {word}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;map과 flatmap의 차이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;flatmap은 직관적으로 하면 평평하게 만든다 &amp;rarr; 하나의 리스트로 만든다.&lt;/li&gt;
&lt;li&gt;map은 1개가 들어가면 1개가 나오고, flatmap은 1개가 들어가면 N개가 나온다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;map은 함수가 리스트를 반환하다면 결과물은 중첩리스트로 나옴&lt;/li&gt;
&lt;li&gt;flatmap은 함수가 리스트를 반환하다면 내용물을 모두 꺼내서 하나의 거대한 단일 리스트로 나옴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/65</guid>
      <comments>https://yujung820.tistory.com/65#entry65comment</comments>
      <pubDate>Fri, 1 May 2026 14:08:24 +0900</pubDate>
    </item>
    <item>
      <title>Spark 기초(1)</title>
      <link>https://yujung820.tistory.com/64</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;RDD와 DF 차이점 짚고 넘어가기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. RDD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;탄력적 분산 데이터 세트&lt;/b&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;/li&gt;
&lt;li&gt;분산된 : 클러스터의 여러 노드에 데이터가 나누어져 저장&lt;/li&gt;
&lt;li&gt;데이터 세트 : 텍스트 파일, JSON, 객체 리스트 등의 다양한 형태의 데이터를 담을 수 있음&lt;/li&gt;
&lt;/ul&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;/li&gt;
&lt;li&gt;데이터 내부에 구조에 대한 정보가 없음 &amp;rarr; 스파크 입장에서는 그저 객체의 묶음&lt;/li&gt;
&lt;li&gt;컴파일 타임에 타입 체크가 가능하여 런타임 오류를 줄일 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. DF&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- RDD 위에 구축된 고수준의 추상화 모델로, 테이블과 유사&lt;/p&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;li&gt;Named Columns : 각 열에 이름이 붙어 있어 SQL 쿼리처럼 데이터를 다룰 수 있음&lt;/li&gt;
&lt;/ul&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;select, filter, groupBy 같은 직관적인 함수를 사용&lt;/li&gt;
&lt;li&gt;카탈리스트 옵티마이저가 실행 계획을 자동으로 최적화해 RDD보다 훨씬 빠른 성능을 냄&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Spark&amp;nbsp; 간단히 짚고 넘어가기&lt;/h4&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;pre id=&quot;code_1777600131450&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture2

import pyspark

test_file = &quot;file:///home/jovyan/work/sample/word.txt&quot;
# sc = pyspark.SparkContext('local[*]')
sc = pyspark.SparkContext.getOrCreate()

text_file = sc.textFile(test_file)

counts = text_file.flatMap(lambda line: line.split(&quot; &quot;)) \
             .map(lambda word: (word, 1)) \
             .reduceByKey(lambda a, b: a + b)
# ln1: hello,world
# (hello, 1), (world, 1), (hello, 1) =&amp;gt; [(hello, 1), (hello, 1)], [(world, 1)]
print(counts.collect())&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;sc = pyspark.SparkContext('local[*]') ]
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&amp;nbsp;스파크의 환경 설정을 직접 정의하며 컨텍스트를 생성하는 명령&lt;/li&gt;
&lt;li&gt;local : 내 컴퓨터 - 보통 스파크는 여러 대의 컴퓨터(클러스터)를 묶어서 사용. 지금은 내 컴퓨터만 사용&lt;/li&gt;
&lt;li&gt;[*] : 모든 코어 사용 - CPU 안의 코어 갯수를 이용해 작업 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sc = pyspark.SparkContext.getOrCreate()&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;SparkContext(SC) : 파이썬 코드와 스파크 엔진(클러스터)사이의 다리 역할
&lt;ul 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;RDD 생성 : 텍스트 파일이나 리스트 데이터를 스파크가 이해할 수 있는 분산 데이터로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;getOrCreate() : 가져오거나 없으면 만들어라
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중복 생성 방지: 스파크 내에서 하나의 SparkContext만 가질 수 있음&lt;/li&gt;
&lt;li&gt;안전 장치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sc : pyspark.context.SparkContext 클래스의 객체
&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;text_file=sc.textFile(test_file)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;textFile : pyspark.context.SparkContext 클래스에 정의된 메서드
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전에 만든 sc를 통해 호출&lt;/li&gt;
&lt;li&gt;외부 저장소(로컬 파일, HDFS, S3)에 있는 텍스트 데이터를 읽어와서 스파크의 기본 데이터 단위인 RDD로 변환&lt;/li&gt;
&lt;li&gt;데이터 단위 : 텍스트 파일의 한줄을 하나의요소로 취급&lt;/li&gt;
&lt;li&gt;분산 처리 : 파일 읽을 때 설정된 파티션 수에 따라 데이터를 쪼개서 클러스터의 여러 노드에 나누어 로드&lt;/li&gt;
&lt;li&gt;결과물 타입 : pyspark.rdd.RDD 타입의 객체 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;counts = text_file.flatMap(...)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;flatMap : [1:N 변환] 으로 각 줄을 공백으로 나누어 리스트를 만든 후, 리스트들을 모두 풀어헤쳐서 하나의 거대한 단어 뭉치(RDD)로 만듦&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1개의 입력을 받아 0개 이상의 출력으로 확장&lt;/li&gt;
&lt;li&gt;flatMap(lambda line: line.split(&quot; &quot;)) : textFile로 읽어온 RDD의 한 요소, 즉 텍스트 파일의 '문장 한 줄'&lt;/li&gt;
&lt;li&gt;일반 map이면 [[&quot;hello&quot;, &quot;world&quot;]]처럼 리스트를 포함한 리스트가 되지만, &quot;hello&quot;와 &quot;world&quot;자체가 개별 요소로 RDD로 재구성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;map : [1:1 변환]으로 단어 하나를 받아서 (단어,1)이라는 튜플로 변환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reduceByKey 연산을 쓰기 위해서 반드시 (키-값) 구조가 필요하기 때문에 단어가 '키', 1은 '값'&lt;/li&gt;
&lt;li&gt;단어의 개수만큼 키-값 쌍이 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;reduceByKey : 같은 키(단어)를 가진 값들을 하나로 합침&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 각 파티션 내에서 같은 단어끼리 합침&amp;nbsp;&amp;rarr; 그 다음 네트워크를 통해 다른 노드에 있는 같은 단어들을 한 곳으로 모음 &amp;rarr; 최종적으로 모든 숫자를 더해 단어별 총합 구함&lt;/li&gt;
&lt;li&gt;(a, b)에서 a와 b는 단어가 아니라 같은 키를 가진 요소들의 값&lt;/li&gt;
&lt;li&gt;a : 지금까지 누적된 합계&lt;/li&gt;
&lt;li&gt;b : 새로 입력된 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777604084642&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture3

import collections
import pyspark

test_file = &quot;file:///home/jovyan/work/sample/grade.txt&quot;
# sc = pyspark.SparkContext('local[*]')
sc = pyspark.SparkContext.getOrCreate()

text_file = sc.textFile(test_file)

grade = text_file.map(lambda line: line.split(&quot; &quot;)[1])

# Return the count of each unique value in this RDD as a dictionary of (value, count) pairs.
grade_count = grade.countByValue()

for grade, count in sorted(grade_count.items(), key=lambda item: item[1], reverse=True):
    print(f&quot;{grade}: {count}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;grade = text_file.map(lambda line: line.split(&quot; &quot;)[1]
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;1:1 변환으로 text_file의 문장 한줄을 입력 받아 공백 기준으로 자름&amp;nbsp;&amp;rarr; 결과는 리스트&lt;/li&gt;
&lt;li&gt;리스트의 두번째 요소(인덱스 1)만 선택&lt;/li&gt;
&lt;li&gt;원본 문장 RDD가 성적들로만 구성된 RDD로 변환되어 grade 변수에 담김&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;grade_count = grade.countByValue()
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;countByValue() : RDD내의 각 고유한 값들이 몇 번 등장하는지를 계산&lt;/li&gt;
&lt;li&gt;앞서 있었던 map+reduceByKey 조합한 거라고 생각하면 됨&lt;/li&gt;
&lt;li&gt;파이썬의 딕셔너리 형태로 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;for grade, count in sorted(...)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;grade_count.items() : 딕셔너리에 담긴 성과 개수를 (키, 값) 쌍의 리스트 형태로 꺼냄&lt;/li&gt;
&lt;li&gt;sorted(..., key=lambda item: item[1], reverse=True)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬 기준 : 튜플의 두번째 요소인 빈도수를 기준으로 정렬&lt;/li&gt;
&lt;li&gt;reverse=True : 내림차순&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777604798171&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture4_exp
import pyspark

sc = pyspark.SparkContext.getOrCreate()
# Key / Value RDD

# creating Key / Value RDD
total_by_brand = rdd.map(lambda brand: (brand, 1))

# # reduceByKey(): Merge the values for each key using an associative and commutative reduce function.
from operator import add
rdd = sc.parallelize([(&quot;a&quot;, 1), (&quot;b&quot;, 1), (&quot;a&quot;, 1)])
sorted(rdd.reduceByKey(add).collect())
[('a', 2), ('b', 1)]


# groupByKey(): Group the values for each key in the RDD into a single sequence. Hash-partitions the resulting RDD with numPartitions partitions.
rdd = sc.parallelize([(&quot;a&quot;, 1), (&quot;b&quot;, 1), (&quot;a&quot;, 1)])
sorted(rdd.groupByKey().mapValues(len).collect())
[('a', 2), ('b', 1)]
sorted(rdd.groupByKey().mapValues(list).collect())
[('a', [1, 1]), ('b', [1])]


# sortByKey(): Sorts this RDD, which is assumed to consist of (key, value) pairs.
tmp = [('a', 1), ('b', 2), ('1', 3), ('d', 4), ('2', 5)]
sc.parallelize(tmp).sortByKey().first()
('1', 3)


# keys(), values(): Create a RDD of keys or just values
rdd = sc.parallelize([(&quot;a&quot;, 1), (&quot;b&quot;, 1), (&quot;a&quot;, 1)])
rdd.keys()
['a', 'b', 'a']

# join, rightOuterJoin, leftOuterJoin, cogroup, subtractByKey
x = sc.parallelize([(&quot;a&quot;, 1), (&quot;b&quot;, 4)])
y = sc.parallelize([(&quot;a&quot;, 2), (&quot;a&quot;, 3)])
sorted(x.join(y).collect())
[('a', (1, 2)), ('a', (1, 3))]


# Efficiency is the key for performance!!!
# if you only need values, use mapValues() or flatMapValues()&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;map : brand를 받았을 때 brand+value를 1이라고 놓고 tuple 반환
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;결과 : &lt;span style=&quot;background-color: #e9eef6; color: #1f1f1f; text-align: start;&quot;&gt;(brand1,1), (brand2,1), (brand1,1) ...&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;reduceByKey &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;sc.parallelize([(&quot;a&quot;, 1), (&quot;b&quot;, 1), (&quot;a&quot;, 1)]) : 파이썬의 일반적인 리스트가 RDD로 변환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트 안의 튜플이 들어있는 형식으로 각 튜플은 두개의 요소를 가짐&amp;nbsp;&amp;rarr; &lt;br /&gt;스파크는 자동으로 각각의 값을 key-value로 인식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sorted(rdd.reduceByKey(add).collect())
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reduceByKey로 인해 같은 키값을 가진 것들을 묶는다 어떻게? &amp;rarr; add&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;groupByKey() : 키값을 기준으로 그룹화
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;mapValues(len) : 키는 그대로 두고, 값에만 특정 함수를 적용해 변환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;groupByKey() 직후에는 (&quot;a&quot;, [1,1]), (&quot;b&quot;, [1]) 이렇게 묶임 이걸 len을 적용하면 각 2,1이 나옴&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;sortByKey() : 키 중심으로 정렬&lt;/span&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #1f1f1f; text-align: start;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1777608563909&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#lecture4_avg

import pyspark 

sc = pyspark.SparkContext.getOrCreate()
test_file = &quot;file:///home/jovyan/work/sample/house_price.csv&quot;

def parse_line(line: str):
    city, price, count = line.split(',')
    return (int(price), int(count))

lines = sc.textFile(test_file)
price_count = lines.map(parse_line)
# [(10000, 3), (10000, 5), (40000, 7), (5000, 7), (4000, 2), (9000, 4), (5000, 7), (4000, 2), (8000, 9)]

sum_of_count = price_count.mapValues(lambda count: (count, 1))\
                .reduceByKey(lambda a, b: (int(a[0]) + int(b[0]), int(a[1]) + int(b[1]))) 

# ('10000', (3, 1)), ('10000', (5, 1)) ...
# [('10000', (8, 2)), ('4000', (4, 2)), ('9000', ('4', 1)), ('8000', ('9', 1)), ('40000', ('7', 1)), ('5000', (14, 2))]

avg_by_count = sum_of_count.mapValues(lambda total_count: int(total_count[0]) / total_count[1])
results = avg_by_count.collect()
print(results)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;mapValues() : Key는 건드리지 않은채 Value만 작업 수행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(10000,3)을 mapValues(lambda count: (count, 1))에 입력시
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;키인 10000은 따로 보관&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;값인 3만 lambda count : (count,1)에 집어넣음&lt;/li&gt;
&lt;li&gt;값은 (3,1)인 튜플로 만들어짐&lt;/li&gt;
&lt;li&gt;따로 보관했던 키와 함쳐서 ('10000',(3,1)) 반환&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/64</guid>
      <comments>https://yujung820.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 1 May 2026 10:33:38 +0900</pubDate>
    </item>
    <item>
      <title>Spark 환경 설정</title>
      <link>https://yujung820.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;google 창에 'databrick' 검색 후 들어가서 이메일로 가입&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;835&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yqKZT/dJMcadhyLGp/KUbpYuzXnxW3lMVW4CLeI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yqKZT/dJMcadhyLGp/KUbpYuzXnxW3lMVW4CLeI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yqKZT/dJMcadhyLGp/KUbpYuzXnxW3lMVW4CLeI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyqKZT%2FdJMcadhyLGp%2FKUbpYuzXnxW3lMVW4CLeI0%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;1730&quot; height=&quot;835&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;835&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;1. 노트북 새로 생성하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RjsIv/dJMcacwc5iT/tjhtDkpX8pnVKhaDB6a89k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RjsIv/dJMcacwc5iT/tjhtDkpX8pnVKhaDB6a89k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RjsIv/dJMcacwc5iT/tjhtDkpX8pnVKhaDB6a89k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRjsIv%2FdJMcacwc5iT%2FtjhtDkpX8pnVKhaDB6a89k%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;832&quot; height=&quot;286&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 바로 실행할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oWXWu/dJMcaiQFAKw/0UQYLPr26vc6Za3x8IzyD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oWXWu/dJMcaiQFAKw/0UQYLPr26vc6Za3x8IzyD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oWXWu/dJMcaiQFAKw/0UQYLPr26vc6Za3x8IzyD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoWXWu%2FdJMcaiQFAKw%2F0UQYLPr26vc6Za3x8IzyD0%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;1099&quot; height=&quot;358&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/63</guid>
      <comments>https://yujung820.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 30 Apr 2026 18:41:33 +0900</pubDate>
    </item>
    <item>
      <title>Apache Spark 설치(window), jupyter 접속</title>
      <link>https://yujung820.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777535899928&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;Docker: Accelerated Container Application Development&quot; data-og-description=&quot;Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.&quot; data-og-host=&quot;www.docker.com&quot; data-og-source-url=&quot;https://www.docker.com/&quot; data-og-url=&quot;https://www.docker.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b56lHO/dJMb8QMfkLf/413Tmlhvpb6IoFKX0WKIk0/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/nSqNf/dJMb8VNyNgb/hRxX5cjKv7tvC2gX9GLC3k/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/FsKDy/dJMb8WeCZ8k/k19PkjioXF25HtbvWiao60/img.png?width=2320&amp;amp;height=958&amp;amp;face=1598_268_1866_558&quot;&gt;&lt;a href=&quot;https://www.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.docker.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b56lHO/dJMb8QMfkLf/413Tmlhvpb6IoFKX0WKIk0/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/nSqNf/dJMb8VNyNgb/hRxX5cjKv7tvC2gX9GLC3k/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/FsKDy/dJMb8WeCZ8k/k19PkjioXF25HtbvWiao60/img.png?width=2320&amp;amp;height=958&amp;amp;face=1598_268_1866_558');&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;Docker: Accelerated Container Application Development&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;581&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHi3y8/dJMb990yWJr/UN8ApAD0xVV8wMntJpen3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHi3y8/dJMb990yWJr/UN8ApAD0xVV8wMntJpen3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHi3y8/dJMb990yWJr/UN8ApAD0xVV8wMntJpen3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHi3y8%2FdJMb990yWJr%2FUN8ApAD0xVV8wMntJpen3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;581&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;581&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. window 기반의 노트북 - 저전력 노트북이 아니기 때문에 AMD64로 다운&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Docker Desktop 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;881&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biQ8hL/dJMb997izP1/dchZYUZPL4MBJy2KwLXI8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biQ8hL/dJMb997izP1/dchZYUZPL4MBJy2KwLXI8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biQ8hL/dJMb997izP1/dchZYUZPL4MBJy2KwLXI8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiQ8hL%2FdJMb997izP1%2FdchZYUZPL4MBJy2KwLXI8K%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;1888&quot; height=&quot;881&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;881&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Mac은 터미널에서 윈도우는 윈도우 파워셀 접속&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hn5bk/dJMcagyyXf0/d9Hwjq4TRaytaeCAKFz1ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hn5bk/dJMcagyyXf0/d9Hwjq4TRaytaeCAKFz1ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hn5bk/dJMcagyyXf0/d9Hwjq4TRaytaeCAKFz1ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHn5bk%2FdJMcagyyXf0%2Fd9Hwjq4TRaytaeCAKFz1ek%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;432&quot; height=&quot;61&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 해당 경로에 새로운 파일 만든 다음 명령어 입력(파일명/위치는 자유, 명령어에 위치만 잘 입력하면 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정은 docker 환경 Jupyter로 설치+접속하는 과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFgZMj/dJMcahK2IU8/tOcWTY9TEnvZEt6ZJVsYyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFgZMj/dJMcahK2IU8/tOcWTY9TEnvZEt6ZJVsYyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFgZMj/dJMcahK2IU8/tOcWTY9TEnvZEt6ZJVsYyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFgZMj%2FdJMcahK2IU8%2FtOcWTY9TEnvZEt6ZJVsYyK%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;1476&quot; height=&quot;613&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1777599529819&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -it --rm -p 8888:8888 -v &quot;C:\Users\82108\apachespark:/home/jovyan/work&quot; jupyter/pyspark-notebook&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;5. 해당 링크로 들어가면 Jupyter로 접속&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;679&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z4AIh/dJMcahdbTdy/6DpJB1F4YJ0gIKcd7Dch1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z4AIh/dJMcahdbTdy/6DpJB1F4YJ0gIKcd7Dch1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z4AIh/dJMcahdbTdy/6DpJB1F4YJ0gIKcd7Dch1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz4AIh%2FdJMcahdbTdy%2F6DpJB1F4YJ0gIKcd7Dch1K%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;243&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5-1. 터미널로 직접 docker 접속&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;805&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4xvfZ/dJMcabjMe7t/cy6w9R5ryQNcWawikutypk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4xvfZ/dJMcabjMe7t/cy6w9R5ryQNcWawikutypk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4xvfZ/dJMcabjMe7t/cy6w9R5ryQNcWawikutypk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4xvfZ%2FdJMcabjMe7t%2Fcy6w9R5ryQNcWawikutypk%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;805&quot; height=&quot;154&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;805&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;6. 파일을 왼쪽에 드래그해서 원하는 파일 열기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEHAQe/dJMcaiwnoQN/nvXIn0ISNdCffbyEKBP3p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEHAQe/dJMcaiwnoQN/nvXIn0ISNdCffbyEKBP3p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEHAQe/dJMcaiwnoQN/nvXIn0ISNdCffbyEKBP3p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEHAQe%2FdJMcaiwnoQN%2FnvXIn0ISNdCffbyEKBP3p1%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;1196&quot; height=&quot;503&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1777540541823&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# RDD 만드는 방법

import pyspark 

# class pyspark.SparkContext (
#    master = None,
#    appName = None, 
#    sparkHome = None, 
#    pyFiles = None, 
#    environment = None, 
#    batchSize = 0, 
#    serializer = PickleSerializer(), 
#    conf = None, 
#    gateway = None, 
#    jsc = None, 
#    profiler_cls = &amp;lt;class 'pyspark.profiler.BasicProfiler'&amp;gt;
# )

# Master &amp;minus; It is the URL of the cluster it connects to.
# appName &amp;minus; Name of your job.
# sparkHome &amp;minus; Spark installation directory.
# pyFiles &amp;minus; The .zip or .py files to send to the cluster and add to the PYTHONPATH.
# Environment &amp;minus; Worker nodes environment variables.
# batchSize &amp;minus; The number of Python objects represented as a single Java object. Set 1 to disable batching, 0 to automatically choose the batch size based on object sizes, or -1 to use an unlimited batch size.
# Serializer &amp;minus; RDD serializer.
# Conf &amp;minus; An object of L{SparkConf} to set all the Spark properties.
# Gateway &amp;minus; Use an existing gateway and JVM, otherwise initializing a new JVM.
# JSC &amp;minus; The JavaSparkContext instance.
# profiler_cls &amp;minus; A class of custom Profiler used to do profiling (the default is pyspark.profiler.BasicProfiler).

# SparkContext uses Py4J to launch a JVM and creates a JavaSparkContext. 
# By default, PySpark has SparkContext available as &amp;lsquo;sc&amp;rsquo;, so creating a new SparkContext won't work.

sc = pyspark.SparkContext('local[*]')

# RDD : immutable distributed collection of objects
rdd = sc.parallelize(range(1000))
rdd.takeSample(False, 5)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sc = pyspark.SparkContext('local[*]') 에서 인자가 하나라는 건 master값으로 할당, 두개면 master랑 appName 할당&lt;/li&gt;
&lt;li&gt;한번 만들어진 RDD는 수정 불가&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;sc = pyspark.SparkContext('local[*]')&lt;span&gt; : &lt;b&gt;환경 설정&lt;/b&gt; - spark의 엔진을 내 컴퓨터(local)의 모든 자원을 사용해 가동&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;rdd = sc.parallelize(range(1000)) :&lt;b&gt; 데이터 분산 &lt;/b&gt;- 메모리에 있는 일반 파이썬 리스트를 spark가 관리하는 분산 데이터(RDD)로 만드는 과정&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;rdd.takeSample(False, 5) - 전체 데이터 중 중복 없이(False) 임의의 데이터 5개 뽑아서 드라이버로 가져옴&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/62</guid>
      <comments>https://yujung820.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 30 Apr 2026 18:23:15 +0900</pubDate>
    </item>
    <item>
      <title>RDD, Docker 소개</title>
      <link>https://yujung820.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RDD란?&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;- Resilient Distributed Dataset : 탄력성 있는 분배된 데이터셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터셋을 만들면 더 이상 변하지 않게 래핑해서 노드(분산시스템)로 보내는 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터가 여러개로 레플리카(복제) 되어있기 때문에 데이터가 잃으면 자동으로 RDD가 기존의 데이터를 restall&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RDD의 주요 특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Immutability
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;한번 만들어지면, 분산시스템에서 수정하기 어려움&lt;/li&gt;
&lt;li&gt;데이터를 바꾸게 되면 새로운 RDD가 생김&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Distributed
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;분산 시스템에 저장되는 데이터셋이기 때문에 수평적 프로세싱 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Resilience(Fault Tolerance)&lt;/li&gt;
&lt;li&gt;Lazy Evaluation
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;파이썬에서 제너레이터역할&lt;/li&gt;
&lt;li&gt;정말 필요한 순간 아니면 실행되지 않음&lt;/li&gt;
&lt;li&gt;collect() 혹은 save()라는 메소드가 실행되기 전까지 데이터는 lineage만 만듦, 트리거 되면 optimazed된 포맷으로 다시 만듦&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Partitioned&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker&amp;nbsp;Benefits&lt;/b&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;OS, 파이썬 버전, 파이썬 라이브러리, 환경 등 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Create Dockerfile&amp;nbsp;
&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;/li&gt;
&lt;li&gt;Create Docker Compose&amp;nbsp;
&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;/li&gt;
&lt;li&gt;Run Docker Compose to start all environments&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KtoIP/dJMcaiwm3Ef/5uA4rFImd5kHcwhMY3mEgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KtoIP/dJMcaiwm3Ef/5uA4rFImd5kHcwhMY3mEgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KtoIP/dJMcaiwm3Ef/5uA4rFImd5kHcwhMY3mEgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKtoIP%2FdJMcaiwm3Ef%2F5uA4rFImd5kHcwhMY3mEgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1258&quot; height=&quot;952&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker 작동원리&lt;/b&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이미지로는 아무것도 실행 불가하지만 이미지만 있으면 어디서든 똑같은 결과물을 만들 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;컨테이너 - 이미지를 실행시킨 실제 상태
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이미지를 이용해 만들어낸 실제 가동중인 프로그램 묶음&lt;/li&gt;
&lt;li&gt;하나의 이미지로 수백개의 동일한 컨테이너 생성 가능&lt;/li&gt;
&lt;li&gt;컨테이너 안에는 서로 다른 것들이 들어있지만 서로 섞이지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile 구성&lt;/p&gt;
&lt;pre id=&quot;code_1777523993610&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FROM python:3.11.1 

ENV PYTHONUNBUFFERED 1

ARG DEV=false

COPY requirements.txt /app/
COPY requirements.dev.txt /app/
COPY app /app/

WORKDIR /app
RUN pip install -r requirements.txt

RUN if [ $DEV = true]; then pip install -r requirements.dev.txt; fi

EXPOSE 8000&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FROM python:3.11.1 : 파이썬 base 이미지를 3.11.1버전으로 사용&lt;/li&gt;
&lt;li&gt;COPY : 외부에 있는 파일을 컨테이너 안의 &lt;b&gt;/app/&lt;/b&gt;이라는 폴더로 복사해서 사용&lt;/li&gt;
&lt;li&gt;WORDKIR : 어떤 디렉토리를 사용하는지 선언, 이후에는 모든 커맨드가 WORKDIR안에서 이루어짐&lt;/li&gt;
&lt;li&gt;EXPOSE : docker port를 연결시킬 수있음&lt;/li&gt;
&lt;li&gt;Docker Compose가 작동하기 위해선 Dockerfile이 미리 준비되어있어야 함.&lt;/li&gt;
&lt;/ul&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;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;하나의 이미지로 하나의 컨테이너를 만들때 : &lt;span style=&quot;color: #ee2323;&quot;&gt;Dockerfile &amp;rarr; 하나의 이미지 &amp;rarr; 하나의 컨테이너&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;여러개의 컨테이너로 하나의 서비스를 만들 때&amp;nbsp;&lt;br /&gt;: 각각의 Dockerfile로 이미지를 여러개 만듦 &amp;rarr; 그럼 각 이미지당 한개의 컨테이너 생성 &amp;rarr; docker-compose.yml이 이 과정들을 명령( 이때 실행뿐만 아니라, 컨테이너들의 네트워크도 자동으로 깔아줌) &amp;rarr; dockercompose로 실행하면 하나의 서비스처럼 묶임&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Compose&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Configuration = docker-compose.yml
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;service name : 컨테이너 묶음에 붙이는 고유한 이름&lt;/li&gt;
&lt;li&gt;Port mapping between local and Docker : 로컬 컴퓨터의 포트와 컨테이너 내부의 포트를 연결&lt;/li&gt;
&lt;li&gt;Volume mapping between local and Docker : 내 컴퓨터(로컬)의 폴더와 컨테이터 내부의 폴더를 동기화, 프로그램을 수정할 때마다 매번 컨테이너를 만들 필요가 없어 작업이 매우 빨라짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Run = docker compose 명령어
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;docker compose build : Dockerfile을 이용해 이미지 빌드&lt;/li&gt;
&lt;li&gt;docker compose up : 이미지 Dockerframework 위에서 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q : 그럼 하나의 컨테이너만 만들 때 docker-compose.yml이 필수인가??&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;- docker-compose.yml이 없어도 되는 경우 : 터미널에 명령어 직접 타이핑해서 실행하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하나뿐인데도 .yml 파일 쓰는 이유 : 자동화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose.yml 예시&lt;/p&gt;
&lt;pre id=&quot;code_1777534897158&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3.9&quot;

services:
	app:
    	build:
        	context: .
            args:
            	- DEV = true
        ports:
        	- &quot;8000:8000&quot;
        volumes:
        	- ./app:/app
        command: &amp;gt;
        	sh -c &quot;python manage.py runserver 0.0.0.0:8000&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;services : 여러개의 서비스를 만들수 있음&lt;/li&gt;
&lt;li&gt;app : 하나의 서비스의 이름은 'app'&lt;/li&gt;
&lt;li&gt;build : 현재 위치(.)에 있는 Dockerfile를 찾아가라.&lt;/li&gt;
&lt;li&gt;ports : 로컬 포트 : 컨테이너 포트 순서로 로컬 머신과 Docker머신 안에 있는 포트를 연결&lt;/li&gt;
&lt;li&gt;volumes: 로컬 머신과 Docker 머신 안에 디렉토리 매핑&lt;/li&gt;
&lt;li&gt;command : 컨테이너가 켜지자 마자 실행할 마지막 한마디. 현재는 Django 실행하라고 명령 중&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;References&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sseozytank.tistory.com/85&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sseozytank.tistory.com/85&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/61</guid>
      <comments>https://yujung820.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 30 Apr 2026 14:10:44 +0900</pubDate>
    </item>
    <item>
      <title>클러스터&amp;amp;스파크 아키텍쳐 소개</title>
      <link>https://yujung820.tistory.com/60</link>
      <description>&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;- 분산 시스템에서 가장 유명한 아파치 스파크에서는 가장 중요한 backbone같은 역할, 태스크를 받으면 작게 나눈 다음에 수행 후 결과를 한꺼번에 모은 후 사용자에게 보여줌&lt;/p&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;On-Preminss
&lt;ul 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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cloud-Based Cluster
&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;/li&gt;
&lt;li&gt;Hybrid Cluster
&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;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클러스터를 이용하는 이유&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Improved Performance
&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;/li&gt;
&lt;li&gt;Cost Effiecieny
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 PC는 하드웨어를 사용하기 때문에 슈퍼컴퓨터보다 저렴하다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scalability
&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;/li&gt;
&lt;li&gt;Fault Tolenrance
&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ce3cL/dJMcai4ay7B/1rt9Dw9KwJ4V8nZuwbNRvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ce3cL/dJMcai4ay7B/1rt9Dw9KwJ4V8nZuwbNRvk/img.png&quot; data-alt=&quot;클러스터 수행 방식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ce3cL/dJMcai4ay7B/1rt9Dw9KwJ4V8nZuwbNRvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCe3cL%2FdJMcai4ay7B%2F1rt9Dw9KwJ4V8nZuwbNRvk%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;827&quot; height=&quot;418&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;418&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Master Node
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;작업을 접수하면, 워커 노드에 임대&lt;/li&gt;
&lt;li&gt;업무를 관리, 리소스 할당, 작업 스케줄&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Worker Node=Slave Node
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;마스터 노드에서 업무를 받고 업무 수행&lt;/li&gt;
&lt;li&gt;각 노드에는 노드 매니저가 존재 = 노드를 모니터링하는 프로세스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cluster Manager
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;전체적인 클러스터를 계속 모니터링하고 리소스를 잘 분배하는 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C40LF/dJMcajhI5Qb/gD2chZf5xuY0AMTwSodKD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C40LF/dJMcajhI5Qb/gD2chZf5xuY0AMTwSodKD1/img.png&quot; data-alt=&quot;위 그림의 Slave Node-Container-Task를 확대한 모&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C40LF/dJMcajhI5Qb/gD2chZf5xuY0AMTwSodKD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC40LF%2FdJMcajhI5Qb%2FgD2chZf5xuY0AMTwSodKD1%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;722&quot; height=&quot;187&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 그림의 Slave Node-Container-Task를 확대한 모&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&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;Pyspark를 시작하는 Driver가 존재&amp;nbsp;&amp;rarr; 이게 JVM을 생성&lt;/li&gt;
&lt;li&gt;PySpark와 JVM 커뮤티케이션을 할 때는 Py4J 라이브러리를 이용&lt;/li&gt;
&lt;li&gt;JVM이 또 다른 JVM을 생성&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;JVM안에서 데이터를 프로세스&lt;/li&gt;
&lt;li&gt;Python Worker가 존재&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PySpark를 사용하기 때문에 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Python Worker가 &lt;/span&gt;Python 라이브러리를 가지고 있다가 JVM이 사용할 때 라이브러리에 대한 정보를 줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;python이 새로운 라이브러리를 사용하려면 각각의 노드에 install되어있어야함. 그래서 JVM이 참조할 수 있게 Python Worker가 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/60</guid>
      <comments>https://yujung820.tistory.com/60#entry60comment</comments>
      <pubDate>Thu, 30 Apr 2026 12:57:15 +0900</pubDate>
    </item>
    <item>
      <title>아파치 스파크 소개</title>
      <link>https://yujung820.tistory.com/59</link>
      <description>&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;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;High Performance
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 하둡 랩리듀스는 디스크베이스로 디스크 위에서 정리를 하고 네트워크를 통해 데이터를 셔플링&amp;nbsp;&lt;/li&gt;
&lt;li&gt;하둡보다 더 빠름 &amp;rarr; 모든 데이터를 메모리 위에 올린 후 메모리에서 계산을 하고 데이터 셔플링을 할 때 네트워크 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Unified Platform for Big Data
&lt;ul 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;SQL querying - 데이터 프레임 위에 sql을 가지고 query&lt;/li&gt;
&lt;li&gt;ML&lt;/li&gt;
&lt;li&gt;그래프 분석&lt;/li&gt;
&lt;li&gt;이 보든 걸 결합하는 싱글 시스템&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 전체적인 걸 다 가지고 있기 때문에 다른 툴이 필요 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scalability
&lt;ul 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;대용량 데이터까지 처리 가능.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;아파치 하둡 YARN, 아파치 메소스, 쿠버네티스 같은 클러스터 매니저와 같이 작동&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flexibility
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파이썬, 자바, 스칼라, SQL, R 을 이용해서 쿼리 날릴 수 있음&lt;/li&gt;
&lt;li&gt;모든 데이터(대부분 데이터는 비정형)를 데이터 포맷을 이용해 정형/반정형 데이터로 구조화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Real-Time Data Processing
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스파크 스트리밍이라는 라이브러리를 통해 실시간 스트림(real-time data streams) 처리 가능&lt;/li&gt;
&lt;li&gt;배치 프로세싱과 스트림 프로세싱을 같은 코드를 이용해 다룰 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;817&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGaWrC/dJMcagyyjQz/rbASjK0I6gpQk2LvFhFXgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGaWrC/dJMcagyyjQz/rbASjK0I6gpQk2LvFhFXgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGaWrC/dJMcagyyjQz/rbASjK0I6gpQk2LvFhFXgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGaWrC%2FdJMcagyyjQz%2FrbASjK0I6gpQk2LvFhFXgk%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;817&quot; height=&quot;393&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/li&gt;
&lt;li&gt;마스터 노드는 1~2개, 워커 노드는 여러개
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;마스터 노드는 Driver Program이 Spark Context를 가지고 있음&lt;/li&gt;
&lt;li&gt;클러스터 매니저가 메시지를 받으면 명령을 가지고 Worker Node안에 있는 Executor에다가 Task 시킴&lt;/li&gt;
&lt;li&gt;Task를 시켜서 처리 후 다시 Driver Program에 리턴&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Task가 프로세싱하다가 Cache할게 있으면 저장하다가 필요하다가 다시 사용&lt;/li&gt;
&lt;li&gt;많은 워커 노드들이 서로 셔플링하며 데이터 처리하며 분산 시스템을 만듦&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 파이썬을 쓰는가?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ease of Learning and Use&lt;/li&gt;
&lt;li&gt;Rich Ecosystem
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;많은 라이브러리로 편하게 사용 가능(numpy, pandas, scikit-learn etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Popular Combination&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>IT 정리/아파치 스파크</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/59</guid>
      <comments>https://yujung820.tistory.com/59#entry59comment</comments>
      <pubDate>Thu, 30 Apr 2026 10:55:15 +0900</pubDate>
    </item>
    <item>
      <title>백준 2804번 크로스워드 만들기</title>
      <link>https://yujung820.tistory.com/58</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VS8wz/btsQJxTeYsy/IxSjUDnnZBfrJNWWaKkgo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VS8wz/btsQJxTeYsy/IxSjUDnnZBfrJNWWaKkgo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VS8wz/btsQJxTeYsy/IxSjUDnnZBfrJNWWaKkgo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVS8wz%2FbtsQJxTeYsy%2FIxSjUDnnZBfrJNWWaKkgo0%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;1167&quot; height=&quot;565&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;565&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 첫 줄에 입력되는 두 단어를 공백으로 구분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 두 단어의 공통문자를 기준으로 크로스 -&amp;gt; 앞 단어는 가로로, 뒷 단어는 세로로&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;2차원 행렬을 만듦 가로(첫번째 단어 길이) X 세로(두번째 단어 길이)&lt;/li&gt;
&lt;li&gt;두 단어의 공통되는 문자 위치 찾음 -&amp;gt; 첫번째 단어의 n번째, 두번째 단어의 m번째라 가정&lt;/li&gt;
&lt;li&gt;첫단어를 m번째 행에 가로로, 두번째 단어를 n번째 열에 세로로 배치&lt;/li&gt;
&lt;li&gt;나머지는 ','으로 채워 출력&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/58</guid>
      <comments>https://yujung820.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 22 Sep 2025 08:38:46 +0900</pubDate>
    </item>
    <item>
      <title>백준 4592번 중복을 없애자</title>
      <link>https://yujung820.tistory.com/57</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJdPR/btsQERd2qX7/KNwFjsWC4dpJFAOdWUDplk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJdPR/btsQERd2qX7/KNwFjsWC4dpJFAOdWUDplk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJdPR/btsQERd2qX7/KNwFjsWC4dpJFAOdWUDplk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJdPR%2FbtsQERd2qX7%2FKNwFjsWC4dpJFAOdWUDplk%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;701&quot; height=&quot;237&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;구분 : &lt;span style=&quot;color: #ee2323;&quot;&gt;구현&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제 해석&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 한 줄에 여러 숫자가 입력되는데 첫번째 숫자의 수만큼 숫자가 나옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;=&amp;gt; 리스트에 담을시 리스트 길이는 첫번째 숫자+1&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 0 출력시 반복문 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 연속된 숫자는 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 리스트 출력하고 마지막에 $ 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;코드 풀이&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;while 반복문을 돌린다 (조건 : 0이 나올 때까지)&lt;/li&gt;
&lt;li&gt;list에 입력 받은 숫자들을 공백으로 나누어 담는다.&lt;/li&gt;
&lt;li&gt;2번 리스트에 첫번째 값이 0이면 조건문 종료, 아닐 시 첫번째 값 제거&lt;/li&gt;
&lt;li&gt;list에 길이만큼 반복문을 돌리며 list의 i번째 값이 새로운 공백 리스트(final)의 마지막 값과 같으면 &lt;br /&gt;final리스트에 값을 넣지 않고(=pass) 같지 않다면 fianl리스트에 값 추가&lt;/li&gt;
&lt;li&gt;final리스트 값 출력하고 '$'를 붙인다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;최종 코드&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1758241543621&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while True :
    n_list= list(map(int, input().split()))

    if n_list[0] ==  0 :
        break
    del n_list[0]

    final=[]
    for n in n_list:
        if not final or n != final[-1]:
            final.append(n)
            
    for i in final :
        print(i,end=&quot; &quot;)
    print(&quot;$&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/57</guid>
      <comments>https://yujung820.tistory.com/57#entry57comment</comments>
      <pubDate>Fri, 19 Sep 2025 09:26:11 +0900</pubDate>
    </item>
    <item>
      <title>웹</title>
      <link>https://yujung820.tistory.com/56</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wMjqj/btsQB6C7vs1/kHAoD7kcx7kqL9A7F2zyd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wMjqj/btsQB6C7vs1/kHAoD7kcx7kqL9A7F2zyd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wMjqj/btsQB6C7vs1/kHAoD7kcx7kqL9A7F2zyd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwMjqj%2FbtsQB6C7vs1%2FkHAoD7kcx7kqL9A7F2zyd0%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;799&quot; height=&quot;500&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Web Service Physical/SW Structures 요약&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;사용자(User)&lt;/b&gt;: 웹 브라우저를 통해 웹 서비스를 요청함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Web browser&lt;/b&gt;: 사용자의 요청(HTTP Request)을 웹 서버(Web Server)로 전달하고, 받은 응답(HTTP Response)을 표시함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Web Server&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대표 예: Apache, Nginx&lt;/li&gt;
&lt;li&gt;정적 페이지(HTML 등)는 직접 응답 가능.&lt;/li&gt;
&lt;li&gt;동적 페이지 요청 시 웹 애플리케이션 서버(WAS)로 전달.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WAS(Web Application Server)&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동적 페이지를 생성 (예: Django, Spring, Node.js 등)&lt;/li&gt;
&lt;li&gt;필요한 경우 DB나 파일시스템과 연동&lt;/li&gt;
&lt;li&gt;WAS의 대표 예: Tomcat, Gunicorn(Django의 경우)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DB, FileSystem&lt;/b&gt;: 실제 데이터(파일, 데이터베이스)를 저장, WAS가 필요 시 접근.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nginx + Django/Gunicorn 구조&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Nginx가 WSGI 프로토콜로 Gunicorn(WSGI 프로세스)에 요청 전달 &amp;rarr; Django 프레임워크에서 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;요약 흐름&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자 &amp;rarr; 웹브라우저 &amp;rarr; (웹 서버) &amp;rarr; WAS &amp;rarr; DB/파일시스템 &amp;rarr; 응답이 반대로 반환&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP란?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;HTTP(HyperText Transfer Protocol)&lt;/b&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;li&gt;브라우저와 서버가 주고받는 메시지(요청/응답)의 표준 형식&lt;/li&gt;
&lt;li&gt;예: 웹사이트 접속 주소(URL)가 &quot;http://&quot;로 시작&lt;/li&gt;
&lt;li&gt;동작 예시:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 브라우저에서 주소 입력 &amp;rarr; HTTP Request 발생 &amp;rarr; 서버가 HTTP Response로 HTML 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;하이퍼텍스트란?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;하이퍼텍스트(Hypertext)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트 내에 다른 정보(문서, 이미지, 웹페이지 등)로 연결되는 &amp;lsquo;링크(하이퍼링크)&amp;rsquo;가 포함된 텍스트&lt;/li&gt;
&lt;li&gt;대표 예: 웹의 HTML 문서 &amp;rarr; 다른 페이지로 이동할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;a href=&quot;...&quot;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;태그&lt;/li&gt;
&lt;li&gt;하이퍼텍스트 개념이 웹의 핵심, 따라서 웹 페이지(HTML)는 본질적으로 하이퍼텍스트 문서임&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정리&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;웹 서비스&lt;/b&gt;는 클라이언트(사용자/브라우저), 웹 서버, WAS, DB/파일 등 여러 단계로 나뉨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HTTP&lt;/b&gt;는 이들 사이의 데이터 송수신 표준(프로토콜)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하이퍼텍스트&lt;/b&gt;는 링크를 포함하여 정보 간 연결성을 강조한 텍스트로, 웹의 기본 구조&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP Method&lt;br /&gt;▷ GET - 정보 검색 ex) 게시판 리스트 불러오기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▷&amp;nbsp;POST&amp;nbsp;-&amp;nbsp;실행&amp;nbsp;/&amp;nbsp;저장&amp;nbsp;ex)&amp;nbsp;회원가입&amp;nbsp;/&amp;nbsp;로그인 &lt;br /&gt;▷&amp;nbsp;PUT&amp;nbsp;-&amp;nbsp;전체&amp;nbsp;수정&amp;nbsp;ex)&amp;nbsp;회원정보&amp;nbsp;전체&amp;nbsp;수정 &lt;br /&gt;▷&amp;nbsp;DELETE&amp;nbsp;-&amp;nbsp;삭제&amp;nbsp;ex)&amp;nbsp;회원정보&amp;nbsp;삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 응답 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1xx : Informational - 요청 정보 처리 중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2xx : Success - 요청을 정상적으로 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3xx : Redirection - 요청을 완료하기 위해 추가 동작 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4xx : Client Error - 서버가 요청을 이해하지 못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5xx : Server Error - 서버가 요청 처리 실패&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;- 태그는 Box Model&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- Box : header, footer, section, article.... : 화면에 보이지 않는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- Item : button, a, input.... : 사용자에게 화면에 보여지는 tag&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Attribute는 같은 페이지 안에서 태그들이라도 어떤 클래스를 가지느냐에 따라 CSS를 통해 다르게 화면에 보여줄 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- attribute는 두가지 id, class&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Block:옆에 공간 있어도 배치 되지 않고, 무조건 다음 라인 =&amp;gt; 같은 라인 배치 원할 시 :Inline&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deYoVW/btsQCvpmur0/2NCKMfeAMJg7EDkZBG7os0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deYoVW/btsQCvpmur0/2NCKMfeAMJg7EDkZBG7os0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deYoVW/btsQCvpmur0/2NCKMfeAMJg7EDkZBG7os0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeYoVW%2FbtsQCvpmur0%2F2NCKMfeAMJg7EDkZBG7os0%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;566&quot; height=&quot;228&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;228&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;- HTML은 구조 제공, CSS는 구조를 꾸민다 =&amp;gt; HTML과 CSS는 상호작용 하지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JS는 웹 페이지 내부에서 발생하는 동적인 기능 =&amp;gt; JS는 HTML과 상호작용 제공&lt;/p&gt;</description>
      <category>IT 정리/Web</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/56</guid>
      <comments>https://yujung820.tistory.com/56#entry56comment</comments>
      <pubDate>Thu, 18 Sep 2025 11:41:21 +0900</pubDate>
    </item>
    <item>
      <title>git 사용법</title>
      <link>https://yujung820.tistory.com/55</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;$git init&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 로컬 레파지토리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$git config --global user.email &quot;내 깃허브 주소&quot;&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfe5m9/btsQxNwV4DG/jEX8HjJ1XzF9SONxQqv3F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfe5m9/btsQxNwV4DG/jEX8HjJ1XzF9SONxQqv3F0/img.png&quot; data-alt=&quot;1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfe5m9/btsQxNwV4DG/jEX8HjJ1XzF9SONxQqv3F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfe5m9%2FbtsQxNwV4DG%2FjEX8HjJ1XzF9SONxQqv3F0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;923&quot; height=&quot;934&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfo75K/btsQzfTC8vC/b5CWH1uJ8ByNKyqKMEfC21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfo75K/btsQzfTC8vC/b5CWH1uJ8ByNKyqKMEfC21/img.png&quot; data-alt=&quot;2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfo75K/btsQzfTC8vC/b5CWH1uJ8ByNKyqKMEfC21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfo75K%2FbtsQzfTC8vC%2Fb5CWH1uJ8ByNKyqKMEfC21%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;907&quot; height=&quot;887&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;887&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wzcLJ/btsQyzEVqaL/IV7G3qiC9OAJwB3kbcqijK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wzcLJ/btsQyzEVqaL/IV7G3qiC9OAJwB3kbcqijK/img.png&quot; data-alt=&quot;3 여기까지 하면 깃허브에 내 레퍼지토리에 올라감&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wzcLJ/btsQyzEVqaL/IV7G3qiC9OAJwB3kbcqijK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwzcLJ%2FbtsQyzEVqaL%2FIV7G3qiC9OAJwB3kbcqijK%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;546&quot; height=&quot;237&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3 여기까지 하면 깃허브에 내 레퍼지토리에 올라감&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;153&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3W2QD/btsQAVUEdGr/SemAjl899JviSk3KDKOoh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3W2QD/btsQAVUEdGr/SemAjl899JviSk3KDKOoh0/img.png&quot; data-alt=&quot;clone 방법 - 맨 뒤에 .은 내 현재 위치 : 집에가서 끌고 와서 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3W2QD/btsQAVUEdGr/SemAjl899JviSk3KDKOoh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3W2QD%2FbtsQAVUEdGr%2FSemAjl899JviSk3KDKOoh0%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;586&quot; height=&quot;153&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;153&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;clone 방법 - 맨 뒤에 .은 내 현재 위치 : 집에가서 끌고 와서 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집에 와서 수정 후 데이터 갱신&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Um1rY/btsQyzEZXT5/kMmMn8icZAUlLPkadzwm60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Um1rY/btsQyzEZXT5/kMmMn8icZAUlLPkadzwm60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Um1rY/btsQyzEZXT5/kMmMn8icZAUlLPkadzwm60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUm1rY%2FbtsQyzEZXT5%2FkMmMn8icZAUlLPkadzwm60%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;617&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;617&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;1010&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK265j/btsQBrFqQVQ/b3bf4l7QiK5LW4x8MCNrp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK265j/btsQBrFqQVQ/b3bf4l7QiK5LW4x8MCNrp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK265j/btsQBrFqQVQ/b3bf4l7QiK5LW4x8MCNrp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK265j%2FbtsQBrFqQVQ%2Fb3bf4l7QiK5LW4x8MCNrp1%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;958&quot; height=&quot;1010&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;1010&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10395.png&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AStpi/btsQASRNWlC/xXWEQXKw7fKBEpvWzUEHC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AStpi/btsQASRNWlC/xXWEQXKw7fKBEpvWzUEHC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AStpi/btsQASRNWlC/xXWEQXKw7fKBEpvWzUEHC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAStpi%2FbtsQASRNWlC%2FxXWEQXKw7fKBEpvWzUEHC1%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;696&quot; height=&quot;571&quot; data-filename=&quot;10395.png&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;프로젝트의&amp;nbsp;파일&amp;nbsp;버전&amp;nbsp;콘트롤을&amp;nbsp;위해서&amp;nbsp;local&amp;nbsp;repository&amp;nbsp;생성&amp;nbsp;&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;init&amp;nbsp;-&amp;gt;&amp;nbsp;local&amp;nbsp;repository&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;config&amp;nbsp;--global&amp;nbsp;user.email&amp;nbsp;&quot;github에&amp;nbsp;등록한&amp;nbsp;이메일&quot;&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;config&amp;nbsp;--global&amp;nbsp;user.name&amp;nbsp;&quot;github&amp;nbsp;account&quot;&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;local&amp;nbsp;repository에&amp;nbsp;README.txt&amp;nbsp;파일을&amp;nbsp;생성하고,&amp;nbsp;&quot;테스트&amp;nbsp;글자&quot;를&amp;nbsp;입력한&amp;nbsp;후,&amp;nbsp;저장&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;add&amp;nbsp;README.txt&amp;nbsp;#staging&amp;nbsp;area로&amp;nbsp;올려주는&amp;nbsp;것&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;commit&amp;nbsp;-m&amp;nbsp;&quot;수정된&amp;nbsp;사항된&amp;nbsp;사항&amp;nbsp;설명글1&quot;&lt;br /&gt;&lt;br /&gt;README.txt&amp;nbsp;파일&amp;nbsp;열고,&amp;nbsp;안에&amp;nbsp;내용을&amp;nbsp;수정하자.&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;add&amp;nbsp;README.txt&amp;nbsp;&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;commit&amp;nbsp;-m&amp;nbsp;&quot;수정된&amp;nbsp;사항된&amp;nbsp;사항&amp;nbsp;설명글2&quot;&lt;br /&gt;&lt;br /&gt;#첫번째&amp;nbsp;commit&amp;nbsp;상태로&amp;nbsp;roll&amp;nbsp;back&amp;nbsp;하고&amp;nbsp;싶은&amp;nbsp;경우&lt;br /&gt;#즉,&amp;nbsp;과거로&amp;nbsp;돌아가고&amp;nbsp;싶다&lt;br /&gt;#&amp;nbsp;commit_number의&amp;nbsp;앞자리&amp;nbsp;숫자를&amp;nbsp;넣어주세요.&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;chekout&amp;nbsp;commit_number&lt;br /&gt;&lt;br /&gt;#과거로&amp;nbsp;돌아온&amp;nbsp;상태에서,&amp;nbsp;다시&amp;nbsp;최근의&amp;nbsp;commit으로&amp;nbsp;돌아가고&amp;nbsp;싶다면,&amp;nbsp;&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;checkout&amp;nbsp;master&amp;nbsp;or&amp;nbsp;main&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;git&amp;nbsp;hub(web&amp;nbsp;site)&amp;nbsp;repository(rag_basic&amp;nbsp;이름으로)&amp;nbsp;생성(private)&lt;br /&gt;-&amp;gt;&amp;nbsp;해당&amp;nbsp;repository의&amp;nbsp;URL&amp;nbsp;copy&lt;br /&gt;-&amp;gt;&amp;nbsp;&lt;a href=&quot;https://github.com/계정명/rag_basic.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/계정명/rag_basic.git&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;local&amp;nbsp;repository와&amp;nbsp;remote&amp;nbsp;repository(git&amp;nbsp;hub)&amp;nbsp;연동&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;remote&amp;nbsp;add&amp;nbsp;origin&amp;nbsp;[git&amp;nbsp;hub&amp;nbsp;repo&amp;nbsp;url]&lt;br /&gt;&lt;br /&gt;local&amp;nbsp;repo에&amp;nbsp;있는&amp;nbsp;2개의&amp;nbsp;commit을&amp;nbsp;remote&amp;nbsp;repo로&amp;nbsp;업로드&lt;br /&gt;-&amp;gt;&amp;nbsp;2개의&amp;nbsp;commit을&amp;nbsp;관리할&amp;nbsp;브랜치를&amp;nbsp;main이라고&amp;nbsp;할것이고,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;이를&amp;nbsp;구성하자.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;git&amp;nbsp;branch&amp;nbsp;-M&amp;nbsp;main&amp;nbsp;(local&amp;nbsp;branch&amp;nbsp;:&amp;nbsp;master&amp;nbsp;--&amp;gt;&amp;nbsp;main으로&amp;nbsp;수정)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;위&amp;nbsp;과정&amp;nbsp;중에&amp;nbsp;에러가&amp;nbsp;발생하면,&amp;nbsp;git&amp;nbsp;status&amp;nbsp;실행&lt;br /&gt;&lt;br /&gt;-&amp;gt;&amp;nbsp;remote&amp;nbsp;repo로&amp;nbsp;던져주자.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;git&amp;nbsp;push&amp;nbsp;origin&amp;nbsp;main&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#집에와서&amp;nbsp;집의&amp;nbsp;pc에서&amp;nbsp;오늘작업한&amp;nbsp;github의&amp;nbsp;프로젝트를&amp;nbsp;&lt;br /&gt;#복제하고,&amp;nbsp;synch를&amp;nbsp;맞춰보자.&lt;br /&gt;#집의&amp;nbsp;pc의&amp;nbsp;local&amp;nbsp;repository로&amp;nbsp;사용할&amp;nbsp;폴더를&amp;nbsp;만들자&lt;br /&gt;-&amp;gt;&amp;nbsp;C:\vs_code_prj\tmp_rag_basic&lt;br /&gt;#&amp;nbsp;git&amp;nbsp;hub&amp;nbsp;project&amp;nbsp;clone을&amp;nbsp;만들자(해당&amp;nbsp;폴더에)&lt;br /&gt;#&amp;nbsp;해당&amp;nbsp;폴더를&amp;nbsp;open&amp;nbsp;git&amp;nbsp;bash를&amp;nbsp;클릭한&amp;nbsp;상태에서(도스창에서)&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;clone&amp;nbsp;[git&amp;nbsp;hub&amp;nbsp;project&amp;nbsp;url]&amp;nbsp;.&lt;br /&gt;#&amp;nbsp;From&amp;nbsp;:&amp;nbsp;git&amp;nbsp;hub&amp;nbsp;project&amp;nbsp;url&lt;br /&gt;#&amp;nbsp;To&amp;nbsp;:&amp;nbsp;.&amp;nbsp;(명령을&amp;nbsp;내리는&amp;nbsp;현재&amp;nbsp;디렉토리)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;코드&amp;nbsp;또는&amp;nbsp;문서를&amp;nbsp;수정하고,&amp;nbsp;&lt;br /&gt;#&amp;nbsp;수정된&amp;nbsp;사항을&amp;nbsp;commit시키자.&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;commit&amp;nbsp;-m&amp;nbsp;&quot;comment&quot;&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;수정된&amp;nbsp;사항을&amp;nbsp;remote&amp;nbsp;repository에&amp;nbsp;push&amp;nbsp;해서&amp;nbsp;&lt;br /&gt;#&amp;nbsp;최신&amp;nbsp;사항을&amp;nbsp;UpToDate&amp;nbsp;하자.&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;push&amp;nbsp;origin&amp;nbsp;main&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#회사에서&amp;nbsp;현재&amp;nbsp;commit2개의&amp;nbsp;과거&amp;nbsp;정보를&amp;nbsp;가지고&amp;nbsp;있기&amp;nbsp;때문에,&amp;nbsp;&lt;br /&gt;#최신&amp;nbsp;commit으로&amp;nbsp;update&lt;br /&gt;-&amp;gt;&amp;nbsp;git&amp;nbsp;pull&amp;nbsp;origin&amp;nbsp;main&lt;br /&gt;-&amp;gt;&amp;nbsp;집에서&amp;nbsp;작업한&amp;nbsp;내용이&amp;nbsp;적용되어&amp;nbsp;있는지&amp;nbsp;파일&amp;nbsp;내용&amp;nbsp;체크&lt;/p&gt;</description>
      <category>기타</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/55</guid>
      <comments>https://yujung820.tistory.com/55#entry55comment</comments>
      <pubDate>Tue, 16 Sep 2025 12:49:44 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.6</title>
      <link>https://yujung820.tistory.com/54</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;시계열데이터분석&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 균등한 간격을 두고 관측된 자료를 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Q: 시계열 데이터와 일반 데이터의 차이?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;A: 종속변수의 변화에 &lt;span style=&quot;color: #009a87;&quot;&gt;영향을 미치는 주 요인이 시간&lt;/span&gt;이 된다는 것 = 과거와 현재의 데이터가 서로 밀접한 상관성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;시계열데이터의 형태&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;경향(추세) : Trend&lt;/li&gt;
&lt;li&gt;계절 : Seasonality&lt;br /&gt;- Short term&amp;nbsp;&lt;/li&gt;
&lt;li&gt;순환 : Cyclic&lt;br /&gt;- Long term&lt;/li&gt;
&lt;li&gt;불규칙/요인 : Irregularity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bequrD/btsQuUuBk4R/tvBrrGswShjS8YnAvsgY10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bequrD/btsQuUuBk4R/tvBrrGswShjS8YnAvsgY10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bequrD/btsQuUuBk4R/tvBrrGswShjS8YnAvsgY10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbequrD%2FbtsQuUuBk4R%2FtvBrrGswShjS8YnAvsgY10%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;427&quot; height=&quot;212&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;212&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;size18&quot;&gt;&lt;b&gt;시계열데이터를 분석의 암묵적 동의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;352&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cydA2b/btsQutKHIxm/R1B8NjBujpa3I6OJ6PqHBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cydA2b/btsQutKHIxm/R1B8NjBujpa3I6OJ6PqHBK/img.png&quot; data-alt=&quot;과거를 이용한 예측(단, 정상성이 확보되야 함)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cydA2b/btsQutKHIxm/R1B8NjBujpa3I6OJ6PqHBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcydA2b%2FbtsQutKHIxm%2FR1B8NjBujpa3I6OJ6PqHBK%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;471&quot; height=&quot;245&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;과거를 이용한 예측(단, 정상성이 확보되야 함)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정상성(Stationarity)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: &lt;u&gt;시간 t에서 평균, 분산이 일정한 특성&lt;/u&gt;, 이런 특성을 가진 시계열데이터&amp;rarr; 정상시계열데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 백색잡음의 특성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정상성 확인 방법&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 자기상관의 패턴을 이용해 정상성 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;□ &amp;nbsp;ACF(자기상관), PACF(부분자기상관)&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; - 동일한 변수를 시점을 달리해 관찰 &amp;rarr; 관측값들 사이의 상호 관련된 정도를 나타내는 척도&lt;br /&gt;&amp;nbsp; &amp;nbsp; - ACF, PACF를 통해 &lt;span style=&quot;color: #006dd7;&quot;&gt;자기(auto=self)&lt;/span&gt;상관이 있는 경우 &amp;rarr; &lt;span style=&quot;color: #ee2323;&quot;&gt;비정상 시계열&lt;/span&gt;로 판단&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;□&lt;span&gt; ACF &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; : direction, indirection path에 대한 모든 상관성에 대해 표현&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - 특정 시점과 그 이전 시점 값들 사이의 모든 상관성 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 한 시점의 값이 이전의 모든 시점 값들로부터 받는 직/간접 영향을 모두 포함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;□&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; P&lt;/span&gt;ACF&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; : direction path에 대한 상관성만을 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; - 다른 모든 중간 시점의 영향을 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 오직 특정 시점의 값과 그 이전 시점의 값 사이의 순수한 직접 상관성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● 분석 방법 : 탐색적 데이터 분석 방법 &amp;rarr; 평활법&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.1859%; height: 209px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 21px;&quot;&gt;이동평균법&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 21px;&quot;&gt;지수평활법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 127px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 127px;&quot;&gt;- 분석주기를 설정하고 시계열데이터에 대해 이동평균 계산&lt;br /&gt;- 결과적으로 시계열데이터의 추세를 알 수 있게 데이터 평탄화 함&lt;br /&gt;- S요인과 I요인 제거하여 T요인과 C요인만으로 데이터 변환&lt;br /&gt;- 모든 시점에 대해 동일한 가중치 부여&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 127px;&quot;&gt;- 지수평활계수의 값 따라 현재와 과거 데이터에 대한 가중치 부여&lt;br /&gt;- 불규칙변동이 큰 시계열&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; : 작은 지수평활계수 적용&lt;br /&gt;- 불규칙변동이 작은 시계열&lt;br /&gt;&amp;nbsp; &amp;nbsp; : 큰 지수 평활계수 적용&lt;br /&gt;- 지수평활계수는 과거로 갈수록 감소&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; ● 분석 방법 : 탐색적 데이터 분석 방법 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 분해법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 이론적 시계열데이터를 구성요소는 4가지이지만, C와 S요인의 구분이 어려운 이유로 3가지로 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;● 분석 방법 : 시계열 모형&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;차분(diff)&lt;br /&gt;- 비정상시계열 데이터를 정상시계열로 전환하는 방법&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; &lt;span style=&quot;color: #ee2323;&quot;&gt;n차 차분&lt;/span&gt; : 현 시점(t) 데이터에서 이전 시점(t-n) 데이터를 빼는 것&lt;/li&gt;
&lt;li&gt;자기회귀모형(AR)&lt;br /&gt;: 현재의 상태가 과거의 상태에 의존한다면, 현재의 관측값을 과거의 관측값들의 함수형태로 나타낸 것&lt;/li&gt;
&lt;li&gt;이동평균모형(MA)&lt;br /&gt;: 현 시점의 관측값이 앞선 시점들의 관측 값으로 설명된다고 가정하는 자기 회귀과정과 달리, 이전 시점들이 설명해주지 못하는 오차들로 현재 시점이 설명될 수 있다고 가정&lt;/li&gt;
&lt;li&gt;자기회귀이동평균모형(ARIMA)&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;- ARIMA(p, d, q)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;rarr; p=0 : IMA(d,q)에서 d번 차분 진행하면 MA(q) 모형이 됨&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;rarr; q=0 : ARI(p,d)에서 d번 차분 진행하면 AR(p)모형이 됨&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/23fmz/btsQt6WHFzx/m8wAHjlkkh9U05fMDCZ9ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/23fmz/btsQt6WHFzx/m8wAHjlkkh9U05fMDCZ9ek/img.png&quot; data-alt=&quot;AR&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/23fmz/btsQt6WHFzx/m8wAHjlkkh9U05fMDCZ9ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F23fmz%2FbtsQt6WHFzx%2Fm8wAHjlkkh9U05fMDCZ9ek%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;741&quot; height=&quot;93&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AR&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YCbSS/btsQt6vBTso/kMJjanOgb1HR31I1QNXeuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YCbSS/btsQt6vBTso/kMJjanOgb1HR31I1QNXeuK/img.png&quot; data-alt=&quot;MA&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YCbSS/btsQt6vBTso/kMJjanOgb1HR31I1QNXeuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYCbSS%2FbtsQt6vBTso%2FkMJjanOgb1HR31I1QNXeuK%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;58&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MA&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vyDLj/btsQunKJEPT/7yBKI01YvxLVaNeuT3RSh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vyDLj/btsQunKJEPT/7yBKI01YvxLVaNeuT3RSh0/img.png&quot; data-alt=&quot;ARIMA&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vyDLj/btsQunKJEPT/7yBKI01YvxLVaNeuT3RSh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvyDLj%2FbtsQunKJEPT%2F7yBKI01YvxLVaNeuT3RSh0%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;540&quot; height=&quot;166&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ARIMA&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/54</guid>
      <comments>https://yujung820.tistory.com/54#entry54comment</comments>
      <pubDate>Thu, 11 Sep 2025 15:50:28 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.5_2</title>
      <link>https://yujung820.tistory.com/53</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp;비지도학습(Unsupervised Learning)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 정답 라벨이 없는 데이터를 기반으로 학습&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 데이터 사이의 관계나 유사성을 기반으로 군집 별 패턴을 찾아내는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;■ 군집화&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 데이터의 특징, 구조 등을 통해 유사한 특성을 가진 데이터끼리 그룹화&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;■ 차원 축소&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 모든 특성의 정보를 최대한 유지하며, 소수의 특성 변수만 남기는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 모델의 구조를 단순화할 수 있고, 패턴의 발견이 더 수월할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;■ 추천시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 연관규칙&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 군집화(Clustering)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;:데이터의 특징, 구조 등을 통해 유사한 특성을 가진 데이터끼리 그룹화&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 이상적 군집 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 군집 &lt;span style=&quot;color: #ee2323;&quot;&gt;내&lt;/span&gt; 유사도는 높고&lt;span style=&quot;color: #ee2323;&quot;&gt;(동질성)&lt;/span&gt;, 군집 &lt;span style=&quot;color: #f3c000;&quot;&gt;간&lt;/span&gt; 유사도는 낮음&lt;span style=&quot;color: #f3c000;&quot;&gt;(이질성)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;계층적 군집분석&lt;br /&gt;: 계층적으로 군집 병합/분할 방식으로 군집화&lt;/li&gt;
&lt;li&gt;비계층적 군집분석&lt;br /&gt;: 미리 군집들의 수를 결정 후 군집화&lt;br /&gt;- K- means 알고리즘&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;계층적 군집 분석&lt;/b&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;br /&gt;: 하나의 데이터로 구성된 군집에서 시작해 거리가 가까운 데이터끼리 묶어&lt;br /&gt;&amp;rarr; 최종적으로 하나의 군집만 남을때까지 점차 병합 (Agglomerative Hierarchical Clustering)&lt;/li&gt;
&lt;li&gt;계층적 분할 군집분석&lt;br /&gt;: 데이터 간 거리가 먼 군집까지 점차적으로 나눠가며 군집 정의(Divisive Hierarchical Clustering)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;▷ 최단 연결법(Single) : 군집 내 최외단에 있는 데이터 중에 가장 가까운 두 데이터 거리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;▷ 최장 연결법(Complete) : 군집 내 최외단에 있는 데이터 중에 가장 멀리 떨어진 두 데이터 거리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;▷ 평균 연결법(Average) : 군집 내 모든 데이터들의 거리를 평균 내 가장 짧은 군집의 거리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;▷ 중심 연결볍(Centroid) : 군집 정중앙에 점을 찍어 군집 간의 거리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;▷ 와드 연결법(Ward)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 각 군집의 중심으로부터 각 데이터 간의 거리 &lt;span style=&quot;color: #006dd7;&quot;&gt;제곱합&lt;/span&gt;을 계산함( SSE)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 모든 군집을 하나의 군집으로 묶었을 때 오차 제곱합이 증가하는 정도를 군집의 거리로 정리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pCRYL/btsQrSxafBN/hMgIz9kuEJwXBSeDWMTMj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pCRYL/btsQrSxafBN/hMgIz9kuEJwXBSeDWMTMj1/img.png&quot; data-alt=&quot;덴드로그램 : 군집분석의 과정과 결과를 시각화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pCRYL/btsQrSxafBN/hMgIz9kuEJwXBSeDWMTMj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpCRYL%2FbtsQrSxafBN%2FhMgIz9kuEJwXBSeDWMTMj1%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;589&quot; height=&quot;183&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;덴드로그램 : 군집분석의 과정과 결과를 시각화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;계층적 군집분석의&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;/li&gt;
&lt;li&gt;미리 군집의 수를 결정하지 않아도 됨&lt;/li&gt;
&lt;li&gt;연산량이 많아 속도 느림&lt;/li&gt;
&lt;li&gt;거리 기반의 방식으로 이상치에 민감&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;비계층적 군집 분석&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 미리 군집들의 수를 결정한 후에 군집화 하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 사전에 군집들의 개수(K)를 결정 후 평균 값을 기반으로 중심(centroid)를 업데이트하면서 군집 형성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;군집&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;내&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;유사도는 높고&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(동질성)&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;, 군집&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;간&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;유사도는 낮음&lt;/span&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;(이질성)&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;군집의 개수를 의미하는 k 결정, 각 군집의 초기 중심 값 선택&lt;/li&gt;
&lt;li&gt;각 데이터와 중심 데이터 간 거리 계산 후,&lt;span style=&quot;color: #006dd7;&quot;&gt; 가장 가까운&lt;/span&gt; 중심 데이터의 군집으로 데이터 분류&lt;/li&gt;
&lt;li&gt;중심 재배치 : 각 군집 내 데이터의 &lt;span style=&quot;color: #006dd7;&quot;&gt;평균을 계산&lt;/span&gt;하면, 해당 지점이 &lt;span style=&quot;color: #006dd7;&quot;&gt;새로운 중심값&lt;/span&gt;이 됨&lt;/li&gt;
&lt;li&gt;step 2~3 반복&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/li&gt;
&lt;li&gt;대용량 데이터 적용 가능&lt;/li&gt;
&lt;li&gt;항상 군집들이 나눠짐&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사전에 군집 수 k 결정해야 함&lt;/li&gt;
&lt;li&gt;초기 중심 값이 중요&lt;/li&gt;
&lt;li&gt;이상치에 영향 받을 수 있음&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;544&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNg8bD/btsQuiuW1rX/GeTuhQkdVbKc9dJ4vr26BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNg8bD/btsQuiuW1rX/GeTuhQkdVbKc9dJ4vr26BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNg8bD/btsQuiuW1rX/GeTuhQkdVbKc9dJ4vr26BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNg8bD%2FbtsQuiuW1rX%2FGeTuhQkdVbKc9dJ4vr26BK%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;415&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Elbow Method&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 군집 수에 따른 오차제곱합의 변화를 통해 최적의 k값 결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 적절한 군집의 수를 결정하기 위해 오차제곱합(SSE) 활용&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;차원 축소&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 모든 특성의 정보를 최대한 유지하며, 소수의 특성 변수만 남기는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 차원의 저주 발생&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;rarr;&amp;nbsp;고차원 공간에서 데이터를 다루고 분석할 때 나타나는 특징적 현상&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 과적합&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; - 차원을 계속 높이면 학습 데이터의 이상값까지도 학습 &amp;rarr; 좋은 성능으로 인식&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; - 새로운 데이터 사용해 예측시 이상값까지 학습한 결과로 일반화 실패&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 차원 증가가 과적합에 미치는 영향&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; 1. noise를 잘못 학습하게 되는 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; 2. 다중공선성 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; 3. 편중된 데이터/ 희박한 데이터&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;오컴의 면도날 : 경제성의 원리, 검약의 원리&lt;/span&gt;&lt;br /&gt;많은 것들을 필요 없이 가정해서는 안 된다.&lt;br /&gt;더 적은 수의 논리로 설명이 가능한 경우, 많은 수의 논리를 세우지 말라&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Feature Selection(SFS 알고리즘)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 전/후진 소거법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전진 선택 알고리즘 : 모델 향상시키거나 과적합 방지 위해 가장 유용한 특성(feature)들의 부분집합을 갖는 탐욕적 알고리즘&lt;/li&gt;
&lt;li&gt;방법
&lt;ul style=&quot;list-style-type: disc; color: #1f1f1f;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비어있는 집합에서 시작해, 모델의 성능을 가장 많이 향상시키는 특성을 하나씩 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정사영&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 최적의 축 찾기 : PCA는 데이터의 분산이 가장 큰 방향 찾기 = 주성분 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;rarr; 데이터의 원래 정보를 최대한 많이 보존할 수 있는 새로운 축&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 정보 손실 최소화 &amp;rarr; 정보 손실 최소화&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;추천시스템 - Association rule(연관 규칙)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;if A then B&amp;nbsp; (A &amp;rarr; B) : 빈발항목집합(자주 나타나는 장바구니) &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; &amp;nbsp;규칙 생성 &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; &amp;nbsp;추천 시스템 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span&gt; (A: 선행, B: 후행)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 지지도(Support)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: X와 Y를 함께 포함하는 거래에 대한 확률(빈발도)&amp;nbsp; &amp;rarr; X&amp;cap;Y&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 효율성에 대한 지표&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 신뢰성(Confidence)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: X가 일어난 상황 하에 Y가 일어날 확률(조건부확률) &amp;rarr; &amp;nbsp;P(Y|X)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 효율성, 유효성에 대한 지표&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Conf (X&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;Y) = Supp(X &amp;rarr;Y) / Supp(X)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 향상도(Lift)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: X를 구매하고 Y를 포함하는 경우와 Y가 임의로 구매되는 경우의 비율(우연성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 유효성 지표&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Lift (X&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;Y)&lt;/span&gt; = Conf (X&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;Y)&lt;/span&gt; / Supp(Y)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Lift &amp;gt; 1 : X와 Y는 양의 상관관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Lift = 1 : X와 Y는 독립관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Lift &amp;lt;1 : X와 Y는 음의 상관관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Apriori&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: &amp;ldquo;빈발 집합의 부분집합도 빈발 집합이다&amp;rdquo; (Apriori property) 라는 성질을 이용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 작은 빈발 집합부터 시작해 확장하면서, 최소 지지도를 만족하는 집합만 남기고 최종적으로 규칙(Confidence, Lift)을 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;FP- Growth&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 후보 집합을 일일이 생성하지 않고, FP-Tree(Frequent Pattern Tree)라는 압축 구조를 이용해 빈발 패턴을 탐색&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 데이터를 FP-Tree로 압축 저장한 뒤, 트리를 재귀적으로 탐색해 빈발 항목 집합을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/53</guid>
      <comments>https://yujung820.tistory.com/53#entry53comment</comments>
      <pubDate>Wed, 10 Sep 2025 12:49:54 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.5_1</title>
      <link>https://yujung820.tistory.com/52</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;K-Fold Cross Validation&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Validation(검증) 데이터 셋&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Training Data set&amp;nbsp;&lt;br /&gt;- 머신러닝 모델의 학습에 사용되는 데이터셋&lt;/li&gt;
&lt;li&gt;Testing Data set&lt;br /&gt;- 학습된 머신러닝 모델의 서비스 가능 여부를 최종 확인하는 데이터 셋&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;Validation&lt;/span&gt; Data set&amp;nbsp;&lt;br /&gt;- 학습된 머신러닝 모델을 성능 개선 지표로 사용되는 데이터 셋&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Cross Validation(교차 검증)&lt;/b&gt;&lt;/p&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;/li&gt;
&lt;li&gt;최종적으로 모델의 서비스 가능 여부를 확인하는 테스트 데이터 효과 사라짐&lt;/li&gt;
&lt;/ul&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;/li&gt;
&lt;li&gt;테스트 데이터 셋을 이용해 모델의 최종 서비스 가능 여부 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;K-Fold Cross Validation&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;: 가장 보편적인 교차검증 방법&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;- K개의 데이터 fold를 만들어 학습과 검증 평가 반복 수행&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;- 전체 데이터셋 100%를 테스트셋을 검증을 위해 사용 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pJVxz/btsQohLuY8x/5MGUA9BLrFzmi0jKinVoa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pJVxz/btsQohLuY8x/5MGUA9BLrFzmi0jKinVoa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pJVxz/btsQohLuY8x/5MGUA9BLrFzmi0jKinVoa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpJVxz%2FbtsQohLuY8x%2F5MGUA9BLrFzmi0jKinVoa1%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;556&quot; height=&quot;231&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Stratified K Fold API&lt;/b&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;br /&gt;- 반드시 &lt;span style=&quot;color: #006dd7;&quot;&gt;Stratified K Fold&lt;/span&gt;를 사용한 교차 검증해야함&lt;/li&gt;
&lt;li&gt;회귀분석&lt;br /&gt;- 연속된 숫자 값을 예측하므로 label 데이터의 분포는 의미 없음&lt;br /&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;K Fold&lt;/span&gt;를 사용한 교차 검증 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/md4gp/btsQoFSQYDB/pBzcF82AJ1wesk1iaF5Yn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/md4gp/btsQoFSQYDB/pBzcF82AJ1wesk1iaF5Yn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/md4gp/btsQoFSQYDB/pBzcF82AJ1wesk1iaF5Yn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmd4gp%2FbtsQoFSQYDB%2FpBzcF82AJ1wesk1iaF5Yn0%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;710&quot; height=&quot;195&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;195&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;하이퍼파라미터 최적화&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델의 성능 개선 프로세스&lt;br /&gt;- 만족할 만한 성능이 나올 때까지 학습, 검증, (하이퍼파라미터의) 개선 작업 반복&lt;/li&gt;
&lt;li&gt;모델의 검증 결과를 확인하며 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;u&gt;사람이 직접 조종&lt;/u&gt;&lt;/span&gt;해야 함&lt;br /&gt;- 하이퍼파라미터 = 모델 학습 전 사람이 직접 설정해주는 값&lt;/li&gt;
&lt;/ul&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;KNN 정리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- K값은 미리 알려주고, 홀수로 사용함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;k= 1 : 항상 과적합&lt;/li&gt;
&lt;li&gt;k=&amp;nbsp;&amp;infin; : 평탄화 (모델이 심플해져서 예측력이 떨어진다)&lt;/li&gt;
&lt;li&gt;optimal k를 찾는게 목적!! how? 오분류가 얼마나 나느냐 = 정확도/재현율/정밀도가 얼마나 떨어지느냐에 결정&lt;/li&gt;
&lt;li&gt;그래프로 보는 법 1. test그래프일때 : &lt;span style=&quot;color: #f89009;&quot;&gt;간극 적을 때&lt;/span&gt; 2. k 그래프일때: &lt;span style=&quot;color: #f89009;&quot;&gt;평탄화(그래프 뚝 떨어지는 지점) 직전에 가장 수평일 때&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;이상치&lt;/span&gt; 탐색할 때 방법 중 하나 (박스플롯보다 고급)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;비선형적인 특징&lt;/span&gt;을 가지는 데이터에도 적합&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 비모수 알고리즘 : 데이터의 분포에 대해 어떤 가정도 하지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- instance-based 모델 : 학습 데이터 전체를 메모리에 저장하고 새로운 데이터가 들어왔을 때 저장 된 데이터와 비교&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- lazy learning : 훈련 단계에서의 거의 &lt;span style=&quot;color: #006dd7;&quot;&gt;아무런 연산을 수행하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;▷ lazy learning이라는 것은 instance-based 모델을 만들고 비모수적 알고리즘을 이용한다 &amp;rarr; 속도 느림&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분류에 사용&lt;br /&gt;- 예측하려는 데이터 주변의 가장 가까운 K개의 이웃의 &lt;span style=&quot;color: #ee2323;&quot;&gt;클래스&lt;/span&gt;를 확인 해, 가장 빈도가 높은 클래스를 예측 클래스로 결정&lt;/li&gt;
&lt;li&gt;회귀에 사용&lt;br /&gt;- 예측하려는 데이터 주변의 가장 가까운 K개의 이웃의 &lt;span style=&quot;color: #ee2323;&quot;&gt;연속적인 값&lt;/span&gt;을 확인해, 값들의 평균을 예측 값으로 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;거리를 측정해 유사성 판단 &amp;rarr;각 특정(feature)이 거리 계산에 미치는 영향이 동일하도록 함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;there4; 거리를 이용하는 모델은&lt;span style=&quot;color: #ee2323;&quot;&gt; 전처리(scaling)가 필수 : &lt;/span&gt;스케일링&amp;rarr; &lt;u&gt;예측정확도 상승하는 거지 학습 오류를 낮추지 않음&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Naive Bayes 정리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 확률 기반&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- Feature &amp;rarr; 모두 독립적&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- P(A|B) = P(B|A)&amp;middot;P(A) /P(B)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 각 특성(feature)과 클래스(class)의 결합 &lt;span style=&quot;color: #009a87;&quot;&gt;확률&lt;/span&gt;을 계산해 예측을 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;학습 데이터셋에서 해당 특성과 클래스가 함께 나타나는 횟수 기반으로 계산&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;s&gt;&lt;span style=&quot;font-family: GungSeo, serif;&quot;&gt;if&lt;/span&gt; &lt;/s&gt;. 학습 데이터에서 특정 특성이 특정 클래스와 한번도 함꼐 나타나지 않은 경우, 결합 확률은 0&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;라플라스 스무딩 작동~!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;모든 빈도수에 1을 더해줘서 확률이 0이 되지 않도록 보장&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;라플라스 스무딩(Laplace Smoothing)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: 빈도수가 0인 사건(event)의 확률을 보정하여 0이 되는 것 방지하는 방법&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;116&quot; data-start=&quot;94&quot; data-ke-size=&quot;size18&quot;&gt;확률(Probability)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;357&quot; data-start=&quot;117&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;185&quot; data-start=&quot;117&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: 주어진 &lt;span style=&quot;color: #ee2323;&quot;&gt;모수(Parameters)가 고정&lt;/span&gt;되어 있을 때, 특정 데이터(관측값)가 나타날 가능성.&lt;/li&gt;
&lt;li data-end=&quot;305&quot; data-start=&quot;186&quot;&gt;&lt;b&gt;표현&lt;/b&gt;: 모수 &amp;theta;(예: 동전이 공정할 확률 0.5)가 주어졌을 때, 어떤 데이터(앞면 7번, 뒷면 3번)가 나올 확률.&lt;/li&gt;
&lt;li data-end=&quot;357&quot; data-start=&quot;306&quot;&gt;&lt;b&gt;용도&lt;/b&gt;: &quot;앞으로 이런 데이터가 나올 확률은 얼마인가?&quot;라는 예측에 주로 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;385&quot; data-start=&quot;364&quot; data-ke-size=&quot;size18&quot;&gt;우도(Likelihood)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;668&quot; data-start=&quot;386&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;454&quot; data-start=&quot;386&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: 주어진 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터(관측값)가 고정&lt;/span&gt;되어 있을 때, 특정 모수 값이 얼마나 타당한지를 나타내는 함수.&lt;/li&gt;
&lt;li data-end=&quot;601&quot; data-start=&quot;455&quot;&gt;&lt;b&gt;표현&lt;/b&gt;: 데이터가 정해져 있을 때, &amp;theta; 값이 달라질수록 그 &amp;theta;가 데이터를 설명하는 정도(적합도)가 달라짐.&lt;/li&gt;
&lt;li data-end=&quot;668&quot; data-start=&quot;602&quot;&gt;&lt;b&gt;용도&lt;/b&gt;: &lt;b&gt;모수 추정&lt;/b&gt;(특히 Maximum Likelihood Estimation, MLE)에서 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;there4; 확률과 우도는 다르다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Decision Tree(의사결정나무) 정리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 회귀, 분류 모두 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- X &amp;rarr; Y : 영향력을 수치화 시킬수 있다(feature_importance_)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;영향력이 &lt;span style=&quot;color: #ee2323;&quot;&gt;높은 것&lt;/span&gt; = 분류 시 &lt;span style=&quot;color: #ee2323;&quot;&gt;불순도(Entropy) 낮게 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 불순도는 Parent-Child로 트리 생성시 IG 얻을 수 있다. (IG = 부모와 자식의 간극)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;there4; IG를 최대로 하는 트리 만드는 게 목적&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;장점&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&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;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;단점&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;수학적 모델x &amp;rarr; heuristic &amp;rarr;전역 최적화 못 할 가능성 = 얻은 답이&amp;nbsp;&lt;br /&gt;- 수학적 목적 함수 기반이 아니라, 규칙 세우는 경험적(heuristic) 방법으로 작동&lt;br /&gt;- heuristic : 정확한 수학적 최적해를 보장하진 않지만, 현실적으로 쓸 만한 규칙/경험 법칙을 적용&lt;br /&gt;- 전역 최적화를 못 할 가능성 : 트리 학습은 탐욕적 알고리즘을 사용해 매 단계에서만 최적 선택해서 &lt;br /&gt;전체적으로 최적이 되지 않을 수 있음&lt;/li&gt;
&lt;li&gt;과적합이 쉽게 발생&lt;/li&gt;
&lt;li&gt;대량의 데이터 처리 시 변수간의 관계성 발생 가능(꼭 대량의 데이터가 원인은 아니지만 대량의 데이터 처리시 가능성)&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;앙상블(Ensemble) 정리&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;voting&lt;br /&gt;- 하드 보팅/ 소프트 보팅&lt;/li&gt;
&lt;li&gt;bagging&lt;br /&gt;- 여러개의 부트스트랩 만들어 동일 모델에 적용 &amp;rarr; 보팅&lt;br /&gt;- 랜덤 포레스트&amp;nbsp;&lt;/li&gt;
&lt;li&gt;boosting&lt;br /&gt;- 시간에 따라 가중치를 줌&lt;br /&gt;- 배깅 방식에 비해 시간 오래 걸리고, 과적합&amp;nbsp;&amp;uarr;&lt;br /&gt;- 약한학습에서 강한학습으로 진행되기 때문에 적절한 타이밍에 끊어야 함&lt;br /&gt;- Ada, Gradient, XGB&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/52</guid>
      <comments>https://yujung820.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 9 Sep 2025 11:48:49 +0900</pubDate>
    </item>
    <item>
      <title>결정트리</title>
      <link>https://yujung820.tistory.com/51</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;결정트리란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: '데이터를 가장 순수하게 만드는 질문'을 탐욕적으로 골라가면 나무 키우는 알고리즘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 얼마나 순수한가/뒤섞였는가 = &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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;엔트로피란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: 클래스 분포의 무질서/불확실성 측정 값&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 0이면 완전 순수, 최대일수록 가장 뒤 섞임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;정보이득이란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: 분할 전/후의 엔트로피 차이&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;u&gt;정보이득(IG)를 최대로 만드는 분할&lt;/u&gt; 이용해 트리 성장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 한 속성으로 분할 했을 때 얼마나 엔트로피가 줄었는지&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;360&quot; data-start=&quot;286&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot; data-end=&quot;321&quot; data-start=&quot;286&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;IG가 큰 분할 = 불확실성 감소가 큰 분할 = 좋은 분할&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;scikit-learn이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: criterion = &quot;gini&quot;가 기본, &quot;entropy&quot;, &quot;log_loss&quot; 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 과적합 방지&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;286&quot; data-end=&quot;360&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot; data-start=&quot;286&quot; data-end=&quot;321&quot;&gt;max_depth&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot; data-start=&quot;286&quot; data-end=&quot;321&quot;&gt;min_samples_split&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot; data-start=&quot;286&quot; data-end=&quot;321&quot;&gt;min_samples_leaf&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot; data-start=&quot;286&quot; data-end=&quot;321&quot;&gt;비용-복잡도 가지치기(cost-complexity pruning)&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 101.163%; height: 193px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 22px; text-align: center;&quot;&gt;&lt;b&gt;엔트로피 지수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 22px; text-align: center;&quot;&gt;&lt;b&gt;지니 지수&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 16px; text-align: center;&quot; colspan=&quot;2&quot;&gt;순수도 증가 = 불순도 감소&lt;br /&gt;지니로 시작해 엔트로피/로그로 바꿔 민감도 점검&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 16px; text-align: center;&quot;&gt;로그를 사용하므로 이론적 의미(정보이론) 명확&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 16px; text-align: center;&quot;&gt;계산 간단 &amp;rarr; 속도 빠름&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;h2 data-end=&quot;3648&quot; data-start=&quot;3616&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3926&quot; data-start=&quot;3650&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3695&quot; data-start=&quot;3650&quot;&gt;&lt;b&gt;Step 1. &amp;ldquo;불확실성&amp;rdquo; 정량화&lt;/b&gt;: 엔트로피로 노드의 무질서 측정.&lt;/li&gt;
&lt;li data-end=&quot;3751&quot; data-start=&quot;3696&quot;&gt;&lt;b&gt;Step 2. &amp;ldquo;좋은 분할&amp;rdquo;의 정의&lt;/b&gt;: 정보이득(IG)을 최대화하는 속성&amp;middot;임계값 선택.&lt;/li&gt;
&lt;li data-end=&quot;3818&quot; data-start=&quot;3752&quot;&gt;&lt;b&gt;Step 3. 반복적 성장&lt;/b&gt;: 루트&amp;rarr;리프까지 반복(탐욕적), 각 단계에서 엔트로피 최소화(=IG 최대화).&lt;/li&gt;
&lt;li data-end=&quot;3865&quot; data-start=&quot;3819&quot;&gt;&lt;b&gt;Step 4. 일반화 성능 보장&lt;/b&gt;: 사전/사후 가지치기로 과적합 억제.&lt;/li&gt;
&lt;li data-end=&quot;3926&quot; data-start=&quot;3866&quot;&gt;&lt;b&gt;Step 5. 대안 비교&lt;/b&gt;: 지니/엔트로피 간 트레이드오프(속도 vs 의미), 데이터에 맞춰 실험.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;가지치기 조건&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot; data-start=&quot;131&quot; data-end=&quot;179&quot;&gt;1. Pre-pruning (사전 가지치기, Early Stopping)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;180&quot; data-end=&quot;509&quot;&gt;
&lt;li data-start=&quot;180&quot; data-end=&quot;210&quot;&gt;트리가 너무 깊어지기 전에 학습을 중단하는 방법&lt;/li&gt;
&lt;li data-start=&quot;211&quot; data-end=&quot;509&quot;&gt;대표 조건:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;222&quot; data-end=&quot;509&quot;&gt;
&lt;li data-start=&quot;222&quot; data-end=&quot;279&quot;&gt;최대 깊이(max_depth): 트리의 깊이가 특정 값을 넘으면 더 이상 분할하지 않음.&lt;/li&gt;
&lt;li data-start=&quot;282&quot; data-end=&quot;415&quot;&gt;최소 샘플 수(min_samples_split / min_samples_leaf):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;341&quot; data-end=&quot;415&quot;&gt;
&lt;li data-start=&quot;341&quot; data-end=&quot;377&quot;&gt;분할을 수행하려면 최소 몇 개 이상의 데이터가 있어야 함.&lt;/li&gt;
&lt;li data-start=&quot;382&quot; data-end=&quot;415&quot;&gt;리프 노드에 최소 몇 개 이상의 데이터가 있어야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-start=&quot;418&quot; data-end=&quot;509&quot;&gt;정보 이득(IG) 최소 임계값(min_impurity_decrease):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;471&quot; data-end=&quot;509&quot;&gt;
&lt;li data-start=&quot;471&quot; data-end=&quot;509&quot;&gt;분할로 인한 불순도 감소가 특정 값보다 작으면 분할하지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot; data-start=&quot;516&quot; data-end=&quot;549&quot;&gt;2. Post-pruning (사후 가지치기)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;550&quot; data-end=&quot;805&quot;&gt;
&lt;li data-start=&quot;550&quot; data-end=&quot;588&quot;&gt;완성된 트리에서 성능이 좋지 않은 분기(Branch)를 잘라냄&lt;/li&gt;
&lt;li data-start=&quot;589&quot; data-end=&quot;805&quot;&gt;대표 조건:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;600&quot; data-end=&quot;805&quot;&gt;
&lt;li data-start=&quot;600&quot; data-end=&quot;679&quot;&gt;Validation Set 성능 감소 여부:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;637&quot; data-end=&quot;679&quot;&gt;
&lt;li data-start=&quot;637&quot; data-end=&quot;679&quot;&gt;가지치기 했을 때 검증 데이터 성능이 좋아지면 유지, 나빠지면 복원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-start=&quot;682&quot; data-end=&quot;805&quot;&gt;Cost-Complexity Pruning (비용 복잡도 가지치기):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;733&quot; data-end=&quot;805&quot;&gt;
&lt;li data-start=&quot;733&quot; data-end=&quot;775&quot;&gt;리프 노드가 많아질수록 패널티를 주어 불필요하게 복잡한 트리를 줄임.&lt;/li&gt;
&lt;li data-start=&quot;780&quot; data-end=&quot;805&quot;&gt;대표적으로 CART 알고리즘에서 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/51</guid>
      <comments>https://yujung820.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 9 Sep 2025 08:55:45 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.4</title>
      <link>https://yujung820.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;분류 분석의 지표&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: F1 score를 높이는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;F1 score = Precision과 Recall의 조화 평균&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Precision &amp;prop; 1/ Recall&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;회귀 분석의 지표&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: MSE, &amp;radic; (MSE), MAE&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분류 모델의 성능 측정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- ROC Curve&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- AUC&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Random Forest &amp;rarr; Light BGM &amp;rarr; Boosting&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ROC&lt;/b&gt; : 모든 분류 임계값(Threshold)에서 분류 모델의 성능을 보여주는 그래프&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjwATc/btsQpaKVbKq/NglAJhv4dtEqyko1sBKpVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjwATc/btsQpaKVbKq/NglAJhv4dtEqyko1sBKpVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjwATc/btsQpaKVbKq/NglAJhv4dtEqyko1sBKpVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjwATc%2FbtsQpaKVbKq%2FNglAJhv4dtEqyko1sBKpVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;414&quot; height=&quot;225&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전체 면적이 1이라고 가정했을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래프 아래의 면적을 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;AUC score ▶ 그래프 아래의 면적이 클수록 좋다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;TPR (True Positive Rate)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: Recall(양성 비율) &amp;rarr; 클수록 &lt;span style=&quot;color: #ee2323;&quot;&gt;높은&lt;/span&gt; 성능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;= ROC그래프에서 Y축&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;= TP /(TP + FN)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;FPR (False Postivie Rate)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 허위 양성 비율 &amp;rarr; 클수록 &lt;span style=&quot;color: #ee2323;&quot;&gt;낮은&lt;/span&gt; 성능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;= ROC그래프에서 X축&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;= FP/(TN+FP)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Threshold(임계값)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 분류분석에서 모델이 반환한 값 기반 P/N를 판단하는 기준 값&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cotuOD/btsQmxOmGQj/WWm5yU8yA5PIb0mxPSd2Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cotuOD/btsQmxOmGQj/WWm5yU8yA5PIb0mxPSd2Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cotuOD/btsQmxOmGQj/WWm5yU8yA5PIb0mxPSd2Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcotuOD%2FbtsQmxOmGQj%2FWWm5yU8yA5PIb0mxPSd2Y0%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;437&quot; height=&quot;333&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAYNuS/btsQnBJr0oS/lVsdgfTkMQJOYYnUopHYL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAYNuS/btsQnBJr0oS/lVsdgfTkMQJOYYnUopHYL1/img.png&quot; data-alt=&quot;(FPR, TPR)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAYNuS/btsQnBJr0oS/lVsdgfTkMQJOYYnUopHYL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAYNuS%2FbtsQnBJr0oS%2FlVsdgfTkMQJOYYnUopHYL1%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;789&quot; height=&quot;272&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(FPR, TPR)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&amp;nbsp;AUC 값이 크면 높은 성능&lt;br /&gt;- 동일 모델에서 임계값 조절해 TPR 증가시, FPR의 증가가 상대적 억제&lt;/li&gt;
&lt;li&gt;AUC 값이 작으면 낮은 성능&lt;br /&gt;- 동일 모델에서 임계값 조절해 TPR 증가시, FPR의 증가 억제 안 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Precision-Recall AUC&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: ROC커브에서 X축과 Y축을 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;○ X축 : FPR =&amp;gt; Recall(TPR)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;○ Y축 : TRP =&amp;gt; Precision&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- Trade Off 관계에 있는 2값을 종합하는 성능 지표로 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCFUJR/btsQoeG36nt/QtdS0vxdljpI7CjbTj5uHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCFUJR/btsQoeG36nt/QtdS0vxdljpI7CjbTj5uHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCFUJR/btsQoeG36nt/QtdS0vxdljpI7CjbTj5uHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCFUJR%2FbtsQoeG36nt%2FQtdS0vxdljpI7CjbTj5uHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;315&quot; height=&quot;234&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJrgL/btsQpdAR5Hx/TKbDeh4bowLciIBcJenZyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJrgL/btsQpdAR5Hx/TKbDeh4bowLciIBcJenZyk/img.png&quot; data-alt=&quot;임계값 따라 TPR/FPR 값이 Trade-Off관계를 가지고 변화됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJrgL/btsQpdAR5Hx/TKbDeh4bowLciIBcJenZyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJrgL%2FbtsQpdAR5Hx%2FTKbDeh4bowLciIBcJenZyk%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;701&quot; height=&quot;280&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;임계값 따라 TPR/FPR 값이 Trade-Off관계를 가지고 변화됨&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;size18&quot;&gt;&lt;b&gt;Decision Tree와 Entropy 관계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 엔트로피 = 0 &amp;rarr; 100프로 분류 &amp;rarr; 불확실성 X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 클래스가 균등하게 섞이면 엔트로피 최대 &amp;rarr; 불확실성 최대&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;엔트로피는 데이터의 혼잡도 측정&lt;/li&gt;
&lt;li&gt;정보이득 = 엔트로피 감소량 &amp;rarr; 결정 트리가 기준을 선택할 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;there4; 결정 트리와 엔트로피는 &quot;불확실성을 줄이는 분할 기준&quot;으로 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;불순도가 큰 곳에서 작은 곳으로 학습 시킨다 =&amp;nbsp; 정보이득(Information Gain)을 크게 하다&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;엔트로피를 상위에서 하위까지 작게 만든다 = IG 크게 한다.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image_17_ef951c96c2.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkQevp/btsQn1VwOBB/p1GgaKt9IC8aWo70Gbl4jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkQevp/btsQn1VwOBB/p1GgaKt9IC8aWo70Gbl4jK/img.png&quot; data-alt=&quot;leaf node는 gini지수(불순도)가 0이다 = 분류가 완료됐다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkQevp/btsQn1VwOBB/p1GgaKt9IC8aWo70Gbl4jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkQevp%2FbtsQn1VwOBB%2Fp1GgaKt9IC8aWo70Gbl4jK%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;2000&quot; height=&quot;1333&quot; data-filename=&quot;image_17_ef951c96c2.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1333&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;leaf node는 gini지수(불순도)가 0이다 = 분류가 완료됐다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Pruning(가지치기)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 오버피팅을 방지하고 모델의 일반화 성능을 향상&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;장점&lt;/b&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;/li&gt;
&lt;li&gt;전처리가 완벽하지 않아도 가능 = 자료 가공 불필요&lt;/li&gt;
&lt;li&gt;비모수적 방법 = &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;모집단에 대한 사전 정보 없이 통계적 분석이나 추론을 수행하는 방법&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;단점&lt;/span&gt;&lt;/b&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;/li&gt;
&lt;li&gt;Imbalanced data에 취약&lt;/li&gt;
&lt;li&gt;변수가 많아지면 실행(학습)시간이 증가&amp;nbsp;&amp;rarr; 적절한 질문을 고르는 것이 중요&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Q : 적절한 질문이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;gt; 노드 내에서의 &lt;span style=&quot;color: #006dd7;&quot;&gt;동질성 높음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;gt; 노드의 &lt;span style=&quot;color: #006dd7;&quot;&gt;순도 높음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;gt; 노드의 &lt;span style=&quot;color: #006dd7;&quot;&gt;불순도 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;불순도(Impurity), 엔트로피(Entropy) 계산&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7jQOn/btsQqAo3WnT/XiIsH27q7IZLzRkq1CUVg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7jQOn/btsQqAo3WnT/XiIsH27q7IZLzRkq1CUVg1/img.png&quot; data-alt=&quot;P(C1)에서 P는 확률&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7jQOn/btsQqAo3WnT/XiIsH27q7IZLzRkq1CUVg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7jQOn%2FbtsQqAo3WnT%2FXiIsH27q7IZLzRkq1CUVg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;259&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;P(C1)에서 P는 확률&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; IG 계산 &amp;rarr; 불순도 측정(Entropy/Gini) &amp;rarr; 모델 학습(Fitting) &amp;rarr; 트리 성장 &amp;rarr; 과적합 &lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;rarr; 가지치기(Pruning, Early Stopping)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;107&quot; data-start=&quot;72&quot; data-ke-size=&quot;size18&quot;&gt;1. IG (Information Gain)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;197&quot; data-start=&quot;108&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;143&quot; data-start=&quot;108&quot;&gt;데이터 분할 기준을 찾기 위해 정보 이득을 계산.&lt;/li&gt;
&lt;li data-end=&quot;166&quot; data-start=&quot;144&quot;&gt;분할 전후 불순도의 차이를 의미.&lt;/li&gt;
&lt;li data-end=&quot;197&quot; data-start=&quot;167&quot;&gt;IG가 큰 Feature일수록 좋은 분할 기준.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;245&quot; data-start=&quot;204&quot; data-ke-size=&quot;size18&quot;&gt;2. 불순도(Impurity, Entropy/Gini)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;386&quot; data-start=&quot;246&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;270&quot; data-start=&quot;246&quot;&gt;데이터가 얼마나 섞여 있는지를 측정.&lt;/li&gt;
&lt;li data-end=&quot;360&quot; data-start=&quot;271&quot;&gt;대표적인 지표:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;360&quot; data-start=&quot;286&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;321&quot; data-start=&quot;286&quot;&gt;Entropy: &lt;span&gt;&lt;span&gt;&amp;minus;&amp;sum;plog⁡p-\sum p \log p&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;minus;&lt;/span&gt;&lt;span&gt;&amp;sum;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;lo&lt;span&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;360&quot; data-start=&quot;324&quot;&gt;Gini Index: &lt;span&gt;&lt;span&gt;1&amp;minus;&amp;sum;p21 - \sum p^2&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;minus;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;sum;&lt;/span&gt;&lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;386&quot; data-start=&quot;361&quot;&gt;불순도가 낮아질수록 분할이 잘 된 것.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;421&quot; data-start=&quot;393&quot; data-ke-size=&quot;size18&quot;&gt;3. 모델 학습(Fitting)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;526&quot; data-start=&quot;422&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;452&quot; data-start=&quot;422&quot;&gt;선택된 Feature를 기준으로 데이터를 분할.&lt;/li&gt;
&lt;li data-end=&quot;487&quot; data-start=&quot;453&quot;&gt;Leaf 노드의 불순도가 최소화될 때까지 분할을 반복.&lt;/li&gt;
&lt;li data-end=&quot;526&quot; data-start=&quot;488&quot;&gt;이렇게 트리를 점점 깊게 만들어 데이터에 맞추는 과정.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;577&quot; data-start=&quot;533&quot; data-ke-size=&quot;size18&quot;&gt;4. 계속 모델 학습 유지 (Decision Tree 성장)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;657&quot; data-start=&quot;578&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;612&quot; data-start=&quot;578&quot;&gt;제약 없이 계속 분할을 반복하면 트리가 깊어짐.&lt;/li&gt;
&lt;li data-end=&quot;657&quot; data-start=&quot;613&quot;&gt;훈련 데이터는 잘 설명하지만, 새로운 데이터에는 성능이 떨어질 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;694&quot; data-start=&quot;664&quot; data-ke-size=&quot;size18&quot;&gt;5. 과적합(Overfitting)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;765&quot; data-start=&quot;695&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;737&quot; data-start=&quot;695&quot;&gt;트리가 너무 깊어져서 훈련 데이터에 지나치게 최적화되는 현상.&lt;/li&gt;
&lt;li data-end=&quot;765&quot; data-start=&quot;738&quot;&gt;노이즈까지 학습하여 일반화 성능이 떨어짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;815&quot; data-start=&quot;772&quot; data-ke-size=&quot;size18&quot;&gt;6. 가지치기(Pruning, Early Stopping)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;966&quot; data-start=&quot;816&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;836&quot; data-start=&quot;816&quot;&gt;과적합을 방지하기 위한 과정.&lt;/li&gt;
&lt;li data-end=&quot;966&quot; data-start=&quot;837&quot;&gt;방법:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;966&quot; data-start=&quot;847&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;909&quot; data-start=&quot;847&quot;&gt;Pre-pruning (사전 가지치기): 트리 성장을 조기에 멈춤 (early stopping).&lt;/li&gt;
&lt;li data-end=&quot;966&quot; data-start=&quot;912&quot;&gt;Post-pruning (사후 가지치기): 완성된 트리에서 불필요한 가지를 잘라냄.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;앙상블(Ensemble) &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 결정 트리 등의 단순한 모델을 여러 개 결합&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 단일 ML 모델보다 예측 성능 &amp;uarr;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 최신 앙상블 기법은 정형 데이터 셋 한정으로 딥러닝과 유사한 성능&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Voting&lt;/li&gt;
&lt;li&gt;Bagging&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Boosting&lt;/li&gt;
&lt;/ul&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;Voting&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 서로 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른&lt;/span&gt; ML 모델을, &lt;span style=&quot;color: #006dd7;&quot;&gt;동일한&lt;/span&gt; 데이터 세트로 학습&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfSZ6T/btsQq2soA6f/dfrWG4x0r82sOliKNkkjQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfSZ6T/btsQq2soA6f/dfrWG4x0r82sOliKNkkjQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfSZ6T/btsQq2soA6f/dfrWG4x0r82sOliKNkkjQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfSZ6T%2FbtsQq2soA6f%2FdfrWG4x0r82sOliKNkkjQk%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;741&quot; height=&quot;242&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;816&quot; data-end=&quot;966&quot;&gt;
&lt;li data-start=&quot;837&quot; data-end=&quot;966&quot;&gt;하드 보팅
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;847&quot; data-end=&quot;966&quot;&gt;
&lt;li data-start=&quot;847&quot; data-end=&quot;909&quot;&gt;다수의 모델이 각각 결정한 예측 값을 기반으로 최종 값으로 선정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;소프트 보팅
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다수의 모델이 각각 결정한 0, 1에 대한 예측 확률 값을 평균 내어 확률이 높은 값을 선정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Bagging&lt;/b&gt;(Bootstrap Aggregating)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 전체 학습 데이터 셋에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;무작위 복원&lt;/span&gt; 샘플 데이터 추출&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: &lt;span style=&quot;color: #006dd7;&quot;&gt;동일한&lt;/span&gt; ML 모델을, 서로 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른&lt;/span&gt; 데이터 셋으로 학습. 각 학습은 독립적&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;752&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D1K2W/btsQpyeE6nz/Fkp3GM2Ufjoc4SegMmxwJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D1K2W/btsQpyeE6nz/Fkp3GM2Ufjoc4SegMmxwJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D1K2W/btsQpyeE6nz/Fkp3GM2Ufjoc4SegMmxwJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD1K2W%2FbtsQpyeE6nz%2FFkp3GM2Ufjoc4SegMmxwJ1%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;752&quot; height=&quot;245&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Boosting&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 배깅과 유사하게 동일한 모델, 서로 다른 데이터 셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- &lt;span style=&quot;color: #409d00;&quot;&gt;학습이 순차적&lt;/span&gt;, 이전 단계의 학습 결과를 토대로 다음 단계 &lt;span style=&quot;color: #409d00;&quot;&gt;샘플링에 가중치&lt;/span&gt;에 결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;571&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L6jOf/btsQq0Bm2e9/Ndj9s2zRLd8Ftnepf4pn4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L6jOf/btsQq0Bm2e9/Ndj9s2zRLd8Ftnepf4pn4k/img.png&quot; data-alt=&quot;직렬 &amp;amp;rarr; 파고 파고 파다보면 모델이 암기하는 문제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L6jOf/btsQq0Bm2e9/Ndj9s2zRLd8Ftnepf4pn4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL6jOf%2FbtsQq0Bm2e9%2FNdj9s2zRLd8Ftnepf4pn4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;274&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;직렬 &amp;rarr; 파고 파고 파다보면 모델이 암기하는 문제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Random Forest&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 배깅 기법 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;Decision&amp;nbsp;Tree의&amp;nbsp;장점을&amp;nbsp;대부분&amp;nbsp;포함(모델&amp;nbsp;해석력&amp;nbsp;제외)&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Decision&amp;nbsp;Tree에&amp;nbsp;비해&amp;nbsp;Overfitting의&amp;nbsp;위험성이&amp;nbsp;상대적으로&amp;nbsp;적음&lt;/li&gt;
&lt;li&gt;일 ML 모델보다 일반적으로 예측 성능이 높음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&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;/li&gt;
&lt;li&gt;Hyperparameter&amp;nbsp;튜닝의&amp;nbsp;어려움(너무&amp;nbsp;많은&amp;nbsp;조합이&amp;nbsp;가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/50</guid>
      <comments>https://yujung820.tistory.com/50#entry50comment</comments>
      <pubDate>Mon, 8 Sep 2025 09:52:09 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.3</title>
      <link>https://yujung820.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;L1 - norm : 라쏘&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;L2 - norm : 릿지&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;규제(Regularized)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;손실함수 최소화&lt;/span&gt;되는 모델을 만들면서, 모델의 &lt;span style=&quot;color: #ee2323;&quot;&gt;과대적합을 최소화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 회귀 계수 값을 감소시켜 과대적합 개선&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;minRSS + Penalty&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;233&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7KxXc/btsQlYEIuhS/pC4IJRwng1XnaMJCLP6Ckk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7KxXc/btsQlYEIuhS/pC4IJRwng1XnaMJCLP6Ckk/img.png&quot; data-alt=&quot;p : 독립변수 개수, w: 회귀계수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7KxXc/btsQlYEIuhS/pC4IJRwng1XnaMJCLP6Ckk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7KxXc%2FbtsQlYEIuhS%2FpC4IJRwng1XnaMJCLP6Ckk%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;373&quot; height=&quot;109&quot; data-origin-width=&quot;233&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;p : 독립변수 개수, w: 회귀계수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;alpha;가 0에 가까워지면 ?&amp;nbsp; &amp;rarr; 일반 회귀로 동장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;alpha; 가 무한대로 커지면? &amp;rarr; W 값을 0에 근사하게끔&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;릿지&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;회귀계수의 제곱 값에 패널티 부여&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;회계 계수 값의 크기 감소&lt;/span&gt;시켜 과적합 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IdhtN/btsQmTJr6q7/7UzspGcV9NEUg6MBdXB6o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IdhtN/btsQmTJr6q7/7UzspGcV9NEUg6MBdXB6o0/img.png&quot; data-alt=&quot;제곱값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IdhtN/btsQmTJr6q7/7UzspGcV9NEUg6MBdXB6o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIdhtN%2FbtsQmTJr6q7%2F7UzspGcV9NEUg6MBdXB6o0%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;295&quot; height=&quot;97&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;제곱값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;라쏘&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;회귀계수의 절대값에 패널티를 부여&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;불필요한 회귀 계수를 0에 근사&lt;/span&gt;하도록 함&lt;/li&gt;
&lt;li&gt;Feature Selection&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;의 목적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;195&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baY51g/btsQk9NwTYs/ToIN7hQmkUuA0ykkrReqpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baY51g/btsQk9NwTYs/ToIN7hQmkUuA0ykkrReqpk/img.png&quot; data-alt=&quot;절대값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baY51g/btsQk9NwTYs/ToIN7hQmkUuA0ykkrReqpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaY51g%2FbtsQk9NwTYs%2FToIN7hQmkUuA0ykkrReqpk%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;284&quot; height=&quot;112&quot; data-origin-width=&quot;195&quot; data-origin-height=&quot;77&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;로지스틱 회귀(Logistic Regression)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 선형 회귀 방식을 분류 분석에 적용한 알고리즘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주로 이진 분류 문제에 사용되지만, 다중 클래스 분류에도 적용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0과 1 사이의 반환값을 확률로 간주해 확률에 따라 분류하는 방식&lt;/p&gt;
&lt;p data-ke-size=&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;○ 이진분류, 데이터가 어떤 번주에 속할 확률을 0~1 사이의 값으로 예측&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;852&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vMuA2/btsQmE62TZT/Ymbyk6tUrxXnJkzLp4pky1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vMuA2/btsQmE62TZT/Ymbyk6tUrxXnJkzLp4pky1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vMuA2/btsQmE62TZT/Ymbyk6tUrxXnJkzLp4pky1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvMuA2%2FbtsQmE62TZT%2FYmbyk6tUrxXnJkzLp4pky1%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;852&quot; height=&quot;366&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Positive / Negative&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터의 목적에 따라 p일수도 n일수도 있고 대부분 데이터가 적게 나타나는 부분을 p라고 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;there4; 1이 p이고 0이 n인 것은&lt;span style=&quot;color: #000000; background-color: #f7f7f7; font-size: 16px; letter-spacing: 0px;&quot;&gt;❌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; background-color: #f7f7f7; font-size: 16px; letter-spacing: 0px;&quot;&gt;로지스틱 회귀선의 손실함수(Cross - Entropy)&lt;/span&gt;&lt;/b&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-origin-width=&quot;798&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOY5BJ/btsQnD0PdzA/py4ILGBX15akKU3Gdni5E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOY5BJ/btsQnD0PdzA/py4ILGBX15akKU3Gdni5E1/img.png&quot; data-alt=&quot;Y = 1인 경우 : P,&amp;amp;nbsp; Y = 0인 경우 : N&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOY5BJ/btsQnD0PdzA/py4ILGBX15akKU3Gdni5E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOY5BJ%2FbtsQnD0PdzA%2Fpy4ILGBX15akKU3Gdni5E1%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;798&quot; height=&quot;431&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Y = 1인 경우 : P,&amp;nbsp; Y = 0인 경우 : N&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&amp;nbsp;y^는 logit 확률로부터 도출한 class 값이다&lt;/li&gt;
&lt;li&gt;회귀계수(&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;beta;₀,&amp;beta;₁...&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;)해당 독립변수값이&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1단위 증가시 log(odds)만큼 변화&amp;nbsp;&lt;/span&gt; &lt;br /&gt;- y^ = &lt;span style=&quot;color: #009a87;&quot;&gt;0.2&lt;/span&gt;x1 + &lt;span style=&quot;color: #009a87;&quot;&gt;0.4&lt;/span&gt;x2 + ... &lt;br /&gt;- exp(&lt;span style=&quot;color: #009a87;&quot;&gt;계수&lt;/span&gt;) &amp;rarr; odds가 몇 배&lt;/li&gt;
&lt;li&gt;로지스틱 회귀분석의&amp;nbsp; cost(비용 함수)는 cross entropy&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오차행렬(Confusion Matrix)&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;1257&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbfO1A/btsQlDgPVLA/8RbCCnmhQRxfAlYpcOyqs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbfO1A/btsQlDgPVLA/8RbCCnmhQRxfAlYpcOyqs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbfO1A/btsQlDgPVLA/8RbCCnmhQRxfAlYpcOyqs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbfO1A%2FbtsQlDgPVLA%2F8RbCCnmhQRxfAlYpcOyqs0%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;1257&quot; height=&quot;490&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정확도(Accuracy) :&amp;nbsp; 1 - (잘못 예측한 것만 뺀 것)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정밀도(Precision) : 실제 P*예측 P / 예측 P&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;재현율(Recall) : 실제 P*예측 P / 실제 P&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/49</guid>
      <comments>https://yujung820.tistory.com/49#entry49comment</comments>
      <pubDate>Fri, 5 Sep 2025 16:48:24 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.2</title>
      <link>https://yujung820.tistory.com/48</link>
      <description>&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Feature Scaling&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;: 각 데이터들의 특성을 일정한 수준으로 변환&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 머신러닝에서 모델 성능에 영향 주는 이슈&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 데이터 준비되면 스케일링 필요 여부 확인 선행&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 표준화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;평균 0, 분산 1이 되도록 데이터 배율 조정&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 정규화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;서로 다른 스케일의 데이터 통임&lt;/li&gt;
&lt;li&gt;정해진 범위 안에서 데이터 재배치(Min Max scaling)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;SMOTE&lt;/b&gt;( &lt;b&gt;S&lt;/b&gt;ynthetic &lt;b&gt;M&lt;/b&gt;inority &lt;b&gt;O&lt;/b&gt;versampling &lt;b&gt;Te&lt;/b&gt;chnique)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 불균형 데이터셋(imbalanced dataset)에서 소수 클래스(minority class)의 샘플 수를 늘려 데이터 불균형 문제를 해결하는 데 사용되는 오버샘플링(oversampling) 기법&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boNUkN/btsQimsEHdX/KUXF0ac27Wqa0okex8LJZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boNUkN/btsQimsEHdX/KUXF0ac27Wqa0okex8LJZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boNUkN/btsQimsEHdX/KUXF0ac27Wqa0okex8LJZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboNUkN%2FbtsQimsEHdX%2FKUXF0ac27Wqa0okex8LJZ1%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;487&quot; height=&quot;216&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&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;b&gt;왼쪽 바 그래프&lt;/b&gt;: 초기에 A 클래스는 B 클래스보다 샘플 수가 훨씬 적은 &lt;b&gt;불균형 데이터셋(imbalanced dataset)&lt;/b&gt; 상태입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중간 부분&lt;/b&gt;: &lt;b&gt;SMOTE&lt;/b&gt; 기법을 사용하여 A 클래스의 샘플 수를 늘립니다. SMOTE는 단순히 기존 샘플을 복제하는 것이 아니라, A 클래스의 기존 샘플들을 기반으로 새로운 &lt;b&gt;합성(synthetic) 샘플&lt;/b&gt;을 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오른쪽 바 그래프&lt;/b&gt;: SMOTE를 적용한 결과, A 클래스의 샘플 수가 B 클래스와 유사한 수준으로 증가하여 **데이터 균형(data balance)**이 맞춰진 상태가 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;'KNN 보간법'&lt;/b&gt;: 이 용어는 SMOTE가 새로운 샘플을 생성하는 구체적인 방법을 설명합니다. SMOTE는 소수 클래스 샘플 주변의 **K-최근접 이웃(K-Nearest Neighbors, KNN)**을 찾아, 원본 샘플과 이웃 샘플 사이의 공간을 **선형 보간(linear interpolation)**하여 새로운 샘성 샘플을 만듭니다. 이 과정을 통해 단순히 복제하는 것보다 다양성을 확보할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;회귀(Regression)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 변수들 간의 관계를 분석하는 통계적 절차 = 독립변수와 종속변수 간의 상관관계 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;35&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p3XSr/btsQmd1CId4/KokZVarKUHLY4Ox8rEKGO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p3XSr/btsQmd1CId4/KokZVarKUHLY4Ox8rEKGO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p3XSr/btsQmd1CId4/KokZVarKUHLY4Ox8rEKGO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp3XSr%2FbtsQmd1CId4%2FKokZVarKUHLY4Ox8rEKGO0%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;207&quot; height=&quot;57&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;35&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계/ML&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계 &amp;rarr; 최소제곱법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ML &amp;rarr; 경사하강법&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxjUZV/btsQkJtYI8r/yQvMD4E7ng4EcmFLDkJSN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxjUZV/btsQkJtYI8r/yQvMD4E7ng4EcmFLDkJSN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxjUZV/btsQkJtYI8r/yQvMD4E7ng4EcmFLDkJSN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxjUZV%2FbtsQkJtYI8r%2FyQvMD4E7ng4EcmFLDkJSN1%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;479&quot; height=&quot;437&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/48</guid>
      <comments>https://yujung820.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 4 Sep 2025 10:29:42 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 Pt.1</title>
      <link>https://yujung820.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1epoch : 모든 경우의 수를 다 둘러보는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 16만건의 기보 , 3억 4천만번의 복습 = 1epoch : 16만 건, 총 3억 4천만 epoch&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;인공지능이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 학습, 문제 해결, 패턴 인식 등 &lt;u&gt;인지 문제 해결&lt;/u&gt;하는 컴퓨터공학분야&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능의 기술 수준&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Artificial Narrow Intelligence&lt;br /&gt;- 좁은 영역에서 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;u&gt;특정한 task&lt;/u&gt;&lt;/span&gt;만 가능하지만 정확도나 속도는 인간을 뛰어넘음 = 1가지만 특화 ex) 알파고&lt;/li&gt;
&lt;li&gt;Artificial General Intelligence&lt;br /&gt;- 하나의 task에서 습득한 지식을 여러 task에 적용 가능&lt;/li&gt;
&lt;li&gt;Artificial Super Intelligence &lt;br /&gt;- 인간을 뛰어넘은 성능 ex) 아이언맨의 자비스&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;머신러닝이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 수많은 데이터로부터 &lt;span style=&quot;color: #f89009;&quot;&gt;기계가 학습&lt;/span&gt;할 수 있도록 하는 연구분야&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;지도학습 : 분류, 회귀&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;&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;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;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;rarr;&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;uarr;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;darr;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증 프로세스 : 신규데이터 &amp;rarr;학습된 모델 &amp;rarr; &lt;b&gt;예측분류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&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;/li&gt;
&lt;li&gt;검증&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 문제 정의&lt;/b&gt;&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 데이터 수집&lt;/b&gt;&lt;/h4&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;i&gt;Q: 학습에 사용된 데이터를 그대로 검증에 사용할 순 없을까요?&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;A : 안됨&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;데이터셋 분할: 홀드아웃 교차 검증&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오리지널 : training + testing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;분할 : training + validation + testing&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.&amp;nbsp; 데이터 전처리&lt;/b&gt;&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 특징 추출&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Feature? 모델에 학습시킬 데이터의 특성 &amp;rarr; 독립변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Class? 모델을 통해 판단 또는 예측 하고자 하는 정답 값 &amp;rarr; 종속 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Q ) Feature가 많으면 좋은 모델을 만들 수 있나?&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;A ) 문제를 가장 잘 설명할 수 있는 &lt;span style=&quot;color: #ee2323;&quot;&gt;핵심 변수들을 추출&lt;/span&gt;하는 특징 추출 과정 필요&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 데이터에 대한 도메인 지식을 활용해 특징을 만들어내는 과정 ▶ Feature Engineering&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature Engineering&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Feature Selection (특징 선택)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Feature Extraction (특징 추출)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Teature Learning(특징 학습)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※Feature Selection, Feature Extraction ▶ SFS(Sequential feature Selection)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp;5. 학습 &amp;amp; 검증&lt;/b&gt;&lt;/h4&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;분류 : 정확도, 정밀도, 재현률&lt;/li&gt;
&lt;li&gt;회귀 : MSE, MAE&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;K-NN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유클리디안 거리(L2 거리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨해튼 거리(L1 거리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;민코프스키 거리 - P(Power) = 1(유클리이안) /2(맨허튼)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 최적의 k값 정의 중요&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;size18&quot;&gt;&lt;b&gt;머신러닝의 목표&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 표본 데이터를 기반으로 일반화 된 모델을 만드는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;모집단-----------추출------&amp;rarr;표본 데이터&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;최적화(학습오류)&lt;/span&gt; &lt;/u&gt;&lt;/span&gt;: train데이터로 학습오류 감소&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: #009a87;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일반화(예측오류)&lt;/span&gt;&lt;/u&gt;&lt;/span&gt; : test데이터로 예측오류 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델이 이전에 학습한 적 없는 데이터에서 얼마나 잘 수행되는지를 의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;과대적합(overfitting)&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;과소적합(underfitting)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span&gt;- 학습용 데이터셋에 모델이 지나치게 학습&amp;amp;최적화&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- 모델의 복잡도가 높은 상태&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- 과대적합을 해결하는 과정이 더 중요함&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span&gt;- 학습용 데이터셋에 대한 모델의 학습이 충분하지 않아, 발생하는 학습 오류&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- 새로운 데이터도 충분히 설명 못함&lt;/span&gt;&lt;br /&gt;&lt;span&gt;-최적화의 오류&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;k = 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; 무조건 overfitting&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBTBIg/btsQhYSxCZS/u4xkSYMUiECB8kXV1tCUaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBTBIg/btsQhYSxCZS/u4xkSYMUiECB8kXV1tCUaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBTBIg/btsQhYSxCZS/u4xkSYMUiECB8kXV1tCUaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBTBIg%2FbtsQhYSxCZS%2Fu4xkSYMUiECB8kXV1tCUaK%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;668&quot; height=&quot;374&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;과&lt;span style=&quot;color: #7e98b1;&quot;&gt;대&lt;/span&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;darr;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델의 복잡도 &amp;darr;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▷ Feature 제거, 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▷ 규제 기법 사용 :&amp;nbsp; Regularization 변수의 영향력 억제&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;size18&quot;&gt;&lt;b&gt;과&lt;span style=&quot;color: #7e98b1;&quot;&gt;소&lt;/span&gt; 적합 피하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학습 시간을 증가(딥러닝)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 모델의 복잡도 &amp;uarr;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;▷ Feature 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;▷ 규제 기법 제거&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 모델을 새로 구축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;데이터 전처리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&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;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;범주형 데이터과 머신러닝 관계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▶ 통계분석에서 독립변수가 범주형인 경우, 수치형 데이터로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;범주형 데이터 -----------------인코딩---------------------&amp;rarr;수치형 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;라벨 인코딩, 원핫 인코딩&lt;/p&gt;
&lt;table style=&quot;letter-spacing: 0px; border-collapse: collapse; width: 76.1628%; height: 250px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 22px;&quot;&gt;라벨 인코딩&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 22px;&quot;&gt;원핫 인코딩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 22px;&quot;&gt;; 범주형 데이터를 연속된 숫자로 변환&lt;br /&gt;&lt;br /&gt;- 연속적인 숫자로 변환된 결과는 &lt;br /&gt;수치적인 의미를 의미 하지 않음&lt;br /&gt;- 값의 크기에 다라 모델 성능에 영향&lt;br /&gt;-순서 있는 거&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 22px;&quot;&gt;; 데이터가 0과 1만 가지도록 변환(더미 변수)&lt;br /&gt;- 순서 없는 거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 83px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 83px;&quot;&gt;a&amp;nbsp;&amp;rarr; 0&lt;br /&gt;b&amp;nbsp;&amp;rarr; 1&lt;br /&gt;c&amp;nbsp;&amp;rarr; 2&lt;br /&gt;d&amp;nbsp;&amp;rarr; 3&lt;br /&gt;e&amp;nbsp;&amp;rarr; 4&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 83px;&quot;&gt;&lt;span&gt;a&amp;nbsp;&amp;rarr; 0 &amp;rarr; [1,0,0,0,0]&lt;/span&gt;&lt;br /&gt;&lt;span&gt;b&amp;nbsp;&amp;rarr; 1 &amp;rarr; [0,1,0,0,0]&lt;/span&gt;&lt;br /&gt;&lt;span&gt;c&amp;nbsp;&amp;rarr; 2 &amp;rarr; [0,0,1,0,0] &lt;/span&gt;&lt;br /&gt;&lt;span&gt;d&amp;nbsp;&amp;rarr; 3 &amp;rarr; [0,0,0,1,0] &lt;/span&gt;&lt;br /&gt;&lt;span&gt;e&amp;nbsp;&amp;rarr; 4 &amp;rarr; [0,0,0,0,1]&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #f7f7f7; color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #f7f7f7; color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #f7f7f7; color: #000000;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;## Feature Engineering&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원시 데이터(raw data)를 다루고 있는 문제를 더 잘 표현할 수 있는 특징(feature)로 변화는 과정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원시 데이터의 형태를 그대로 분석하는 것보다 더 좋은 예측 결과를 얻을 수 있는 feature를 찾는 과정&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;F.E 중요한 이유&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;more flexibility : 사용할 모델에 적합하도록 데이터를 변형하는데 필요&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;simple models : 전처리를 잘 하자 --&amp;gt; 모델이 단순화 (변수들이 100개 -&amp;gt; 10개로 함축)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;better results : 좋은 예측값을 뱉어내자.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Feature Selection&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Feature의 중요도를 객관적으로 측정할 수 있고, 그 크기에 따라 모델에 포함되(Selection)거나 제외할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상관계수(Y에 영향을 미치는 X변수들 선택)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;회귀 계수와 p-value (변수들의 영향력 수치화, 변수들의 유의성을 검정) ==&amp;gt; 통계&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의사결정나무(Decision Tree)의 Feature Importance&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Feature가 많은 경우? 어떻게 처리해야할까?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제점&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;차원의저주 -&amp;gt; 특정공간에 밀도가 작아지는 현상 -&amp;gt; 해당 변수들의 특징이 희석된다. -&amp;gt; 변수처리속도가 저하된다(계산비용 증가).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과적합 위험 -&amp;gt; 모델의 복잡도는 증가&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변수간의 상관성 분석에 어려움이 증가(분산 팽창 시키는 변수들이 증가)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방법&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규제화 적용(L1, L2-norm) : weight&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상관분석 적용(Y에 영향을 적게 미치는 요소들을 제거)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모델을 사용(Feature Importance를 이용해 중요도가 낮은 변수 제거, SFS를 이용)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Domain 지식활용&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSOpta/btsQiyfmNoY/X9tP5lxgkKc7R6te2m4guK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSOpta/btsQiyfmNoY/X9tP5lxgkKc7R6te2m4guK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSOpta/btsQiyfmNoY/X9tP5lxgkKc7R6te2m4guK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSOpta%2FbtsQiyfmNoY%2FX9tP5lxgkKc7R6te2m4guK%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;534&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT 정리/ML</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/47</guid>
      <comments>https://yujung820.tistory.com/47#entry47comment</comments>
      <pubDate>Tue, 2 Sep 2025 16:43:10 +0900</pubDate>
    </item>
    <item>
      <title>회귀분석</title>
      <link>https://yujung820.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;회귀모델&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;X로 &lt;u&gt;연속적인 숫자Y&lt;/u&gt;를 예측&lt;/li&gt;
&lt;li&gt;1개 이상의 독립변수와 종속변수 간 상관 관계 모델링&lt;/li&gt;
&lt;li&gt;모델링 : 종속 변수에 대한 독립 변수들의 상관 관계를 회귀 계수로 나타내고 회귀계수의 최적화 된 값을 학습 통해 찾음&lt;/li&gt;
&lt;li&gt;선형 회귀분석&lt;br /&gt;- Y가 1개일 때는 단변량, 그 외엔 다변량&lt;br /&gt;- X가 1개&amp;nbsp;&amp;rarr; 단순 선형 회귀, X가 2개 이상 &amp;rarr; 다중 선형 회귀&lt;/li&gt;
&lt;li&gt;상관분석에서 도출한 결과(상관성)로 회귀분석 통해서 인과관계를 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 마케팅 비용이 증가하면 매출이 증가하는 가? &amp;rarr; 상관분석 + &lt;span style=&quot;color: #f89009;&quot;&gt;얼마나&lt;/span&gt; 영향을 받는가? &amp;rarr; 회귀분석&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb2sms/btsQeAK6yIU/JHzqZd6QouACRgKlYTjvBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb2sms/btsQeAK6yIU/JHzqZd6QouACRgKlYTjvBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb2sms/btsQeAK6yIU/JHzqZd6QouACRgKlYTjvBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb2sms%2FbtsQeAK6yIU%2FJHzqZd6QouACRgKlYTjvBk%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;344&quot; height=&quot;95&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1/n : mean&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(y- &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt; ̂)^2 : square&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;MSE =&amp;gt; 오차를 최소화 시키는 function = objective function(목적 함수) = cost function(비용 함수)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/73pA9/btsQhSDjrKP/Dqtk6q2ncD1X7QDLfrMLp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/73pA9/btsQhSDjrKP/Dqtk6q2ncD1X7QDLfrMLp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/73pA9/btsQhSDjrKP/Dqtk6q2ncD1X7QDLfrMLp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F73pA9%2FbtsQhSDjrKP%2FDqtk6q2ncD1X7QDLfrMLp0%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;190&quot; height=&quot;208&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 나오는 x, y들을 각각 x^, y^ 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt; ̂ = &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₀ +&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₁&lt;/b&gt;x^&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;x, y 를 다 넣어보며 값에 근사하게끔 오차가 적어지는 &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₀,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₁&lt;/b&gt;를 구한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;=&amp;gt; 이때 &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₀,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₁&lt;/b&gt;는 optimized &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₀,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₁&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;선형회귀분석의 목적&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 설명 + 예측&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▶ 설명 =&amp;gt; Y에 대한 설명변수/독립변수의 영향 측정&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;아버지의 키(X) 아들의 키(Y)&lt;br /&gt;1. 상관성이 있을 때&amp;nbsp; = (X &amp;rarr; Y) : 설명&lt;br /&gt;2. 아버지의 키가 175일때 아들의 키는 몇일까? = X &amp;rarr; Y? : 예측&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;단순 선형 회귀&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 회귀선을 긋는게 최종 목적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;middot; 처음에 &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₀, &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₁&lt;/b&gt;는 랜덤한 값으로 채워짐 ( &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₀&lt;/b&gt; : 절편, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;beta;₁ &lt;/b&gt;: 기울기)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt; &amp;rarr;&amp;nbsp; (&amp;Sigma;&lt;/span&gt; (y - &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot; data-mathml=&quot;&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&amp;gt;&amp;lt;mrow class=&amp;quot;MJX-TeXAtom-ORD&amp;quot;&amp;gt;&amp;lt;mover&amp;gt;&amp;lt;mi&amp;gt;y&amp;lt;/mi&amp;gt;&amp;lt;mo stretchy=&amp;quot;false&amp;quot;&amp;gt;&amp;amp;#x005E;&amp;lt;/mo&amp;gt;&amp;lt;/mover&amp;gt;&amp;lt;/mrow&amp;gt;&amp;lt;/math&amp;gt;&quot;&gt; ̂)) / n &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;&amp;asymp; 0 인 회귀선이 좋다 (오차 : &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot;&gt;y -&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;text-align: left;&quot; data-mathml=&quot;&amp;lt;math xmlns=&amp;quot;http://www.w3.org/1998/Math/MathML&amp;quot;&amp;gt;&amp;lt;mrow class=&amp;quot;MJX-TeXAtom-ORD&amp;quot;&amp;gt;&amp;lt;mover&amp;gt;&amp;lt;mi&amp;gt;y&amp;lt;/mi&amp;gt;&amp;lt;mo stretchy=&amp;quot;false&amp;quot;&amp;gt;&amp;amp;#x005E;&amp;lt;/mo&amp;gt;&amp;lt;/mover&amp;gt;&amp;lt;/mrow&amp;gt;&amp;lt;/math&amp;gt;&quot;&gt; ̂)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;&amp;rarr; 최적의 &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761579523&quot;&gt;&lt;span&gt;&amp;beta;₀, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: left;&quot; data-huuid=&quot;4515450388761580384&quot;&gt;&lt;span&gt;&amp;beta;₁를 찾아내는 방정식&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rhTjZ/btsP6W6KCgN/ol0PjkbFWbWf4Kc9pN8c20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rhTjZ/btsP6W6KCgN/ol0PjkbFWbWf4Kc9pN8c20/img.png&quot; data-alt=&quot;최소 제곱 추정량 = 오차 제곱합을 최소화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rhTjZ/btsP6W6KCgN/ol0PjkbFWbWf4Kc9pN8c20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrhTjZ%2FbtsP6W6KCgN%2Fol0PjkbFWbWf4Kc9pN8c20%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;263&quot; height=&quot;241&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;241&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;다중 선형 회귀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 독립변수 2개 이상 존재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHjhgc/btsP4XMAL1q/8VAKWswnryoj418WgvKC1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHjhgc/btsP4XMAL1q/8VAKWswnryoj418WgvKC1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHjhgc/btsP4XMAL1q/8VAKWswnryoj418WgvKC1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHjhgc%2FbtsP4XMAL1q%2F8VAKWswnryoj418WgvKC1k%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;745&quot; height=&quot;251&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;251&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWdUoX/btsP6WssXlN/Xnfnu3KKx9Zt1i0gecMnm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWdUoX/btsP6WssXlN/Xnfnu3KKx9Zt1i0gecMnm1/img.png&quot; data-alt=&quot;최소제곱법 - 매개변수 추정 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWdUoX/btsP6WssXlN/Xnfnu3KKx9Zt1i0gecMnm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWdUoX%2FbtsP6WssXlN%2FXnfnu3KKx9Zt1i0gecMnm1%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;327&quot; height=&quot;342&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;342&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;749&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urRAI/btsQfHJGXtK/Pjo55cQXrn9TLkIkcrNq6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urRAI/btsQfHJGXtK/Pjo55cQXrn9TLkIkcrNq6k/img.png&quot; data-alt=&quot;&amp;amp;beta;1, &amp;amp;beta;2, &amp;amp;beta;3, &amp;amp;beta;4는 weight&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urRAI/btsQfHJGXtK/Pjo55cQXrn9TLkIkcrNq6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurRAI%2FbtsQfHJGXtK%2FPjo55cQXrn9TLkIkcrNq6k%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;749&quot; height=&quot;46&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;beta;1, &amp;beta;2, &amp;beta;3, &amp;beta;4는 weight&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;선형회귀 모델&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전제 조건 : 선형성, 정규성, 등분산성, 독립성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;※ 선형성 - F통계량을 가지고 pvalue 측정&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모델구축 = 모델 선택 + 계수 추정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;변수 선택&lt;br /&gt;- 검정 이용한 방법&lt;br /&gt;- 아카이케 정보기준(BIC)를 이용한 방법&lt;br /&gt;: AIC가 작을 수록 좋은 모델&lt;/li&gt;
&lt;li&gt;계수 추정&lt;br /&gt;- 확률값(우도) &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;&amp;rarr; 우도함수 &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;&amp;rarr; 로그우도 &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;&amp;rarr; 최대우도법&lt;br /&gt;- 머시러닝의 비용함수와 같다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Vs7U/btsQhdOGSg8/oUAC0YT9HH8Vp3okHfz0dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Vs7U/btsQhdOGSg8/oUAC0YT9HH8Vp3okHfz0dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Vs7U/btsQhdOGSg8/oUAC0YT9HH8Vp3okHfz0dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Vs7U%2FbtsQhdOGSg8%2FoUAC0YT9HH8Vp3okHfz0dk%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;508&quot; height=&quot;68&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kF5WM/btsQfysywWB/01ozEAfsA7xByzoKKKotMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kF5WM/btsQfysywWB/01ozEAfsA7xByzoKKKotMK/img.png&quot; data-alt=&quot;SST : 종속변수의 전체 분산 SSR : 독립변수가 설명한 분산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kF5WM/btsQfysywWB/01ozEAfsA7xByzoKKKotMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkF5WM%2FbtsQfysywWB%2F01ozEAfsA7xByzoKKKotMK%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;400&quot; height=&quot;345&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SST : 종속변수의 전체 분산 SSR : 독립변수가 설명한 분산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;F- 검정: 회귀 모델 전체에 대한 유의성 검정&lt;/li&gt;
&lt;li&gt;T- 검정: 각 독립변수에 대한 유의성 검정&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/통계</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/45</guid>
      <comments>https://yujung820.tistory.com/45#entry45comment</comments>
      <pubDate>Mon, 25 Aug 2025 12:52:51 +0900</pubDate>
    </item>
    <item>
      <title>상관관계 분석</title>
      <link>https://yujung820.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;독립변수가 연속형, 종속변수가 연속형&lt;/b&gt; &amp;rarr; 상관관계분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: y = ax + b (a는 B1, b는 B0)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: y = B0 + B1x1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;상관분석의 &lt;u&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;목적 ?&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 변수선별 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;rarr; 모델에 넣어 학습 시킬때 이용&lt;/span&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;/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;345&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kG6qa/btsP5fy8Kce/SZ0oTuo6jb4zbrmW3TBPk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kG6qa/btsP5fy8Kce/SZ0oTuo6jb4zbrmW3TBPk0/img.png&quot; data-alt=&quot;상관관계 분석시 산점도를 통해 상관성 파악 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kG6qa/btsP5fy8Kce/SZ0oTuo6jb4zbrmW3TBPk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkG6qa%2FbtsP5fy8Kce%2FSZ0oTuo6jb4zbrmW3TBPk0%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;345&quot; height=&quot;229&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;229&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;기울기를 보고자 하는 게 아님 &amp;rarr; 점들이 추세선 주위에 얼마나 밀집해져있느냐&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;y : 실제값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; ŷ : 기대값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #ffffff; color: #001d35; text-align: start;&quot;&gt;ȳ : 평균&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;error : 점과 추세선과의 거리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 산점도로 상관관계 알&lt;span style=&quot;color: #333333;&quot;&gt; 수 있느냐?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;/span&gt; 산점도는 정성적 관계&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 상관관계분석은 정량적 관계를 알 수 있음 = 상관관계계수&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;상관성이 높다?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 추세선 주변에 데이터들이 밀집되어 있다 = 데이터의 응집성이 높다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;rarr; x가 y값에 영향력을 많이 끼침&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #001d35;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;= 얼마나 데이터들이 추세선에 붙어있느냐&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #001d35;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;공분산(Cov) = 공통분산 = x, y의 분산&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #001d35;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;= 들어오는 값(X)에서 평균( &lt;span style=&quot;background-color: #ffffff; color: #282829; text-align: left;&quot;&gt;&amp;mu;&lt;/span&gt;x)을 뺀 값의 기대값(E) (기댓값은 결국 1/n한 거와 같음)&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-filename=&quot;blob&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMWla5/btsP27WISYP/kE6WYqFbyIQSK3KKmihJd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMWla5/btsP27WISYP/kE6WYqFbyIQSK3KKmihJd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMWla5/btsP27WISYP/kE6WYqFbyIQSK3KKmihJd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMWla5%2FbtsP27WISYP%2FkE6WYqFbyIQSK3KKmihJd0%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;334&quot; height=&quot;162&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #001d35;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;공분산이 크다 vs 작다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;rarr; 공분산이 작다 : 모여있다 = 상관성이 크다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;there4; 표준화된 연관성 측도를 &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;span style=&quot;color: #f89009;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;-1 &lt;/span&gt;&amp;le;&amp;nbsp;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;상관계수 &amp;le; 1&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; &amp;rarr; 0 &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;le; |상관계수| &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;le; 1 : 1에 가까울 수록 강한 상관성&lt;/span&gt;&lt;/span&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;상관관계의 검정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;귀무가설(H0): 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;431&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9iExg/btsP5FxA7Qm/583YfvxO87nHAt1dbLmkgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9iExg/btsP5FxA7Qm/583YfvxO87nHAt1dbLmkgK/img.png&quot; data-alt=&quot;피어슨 상관계수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9iExg/btsP5FxA7Qm/583YfvxO87nHAt1dbLmkgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9iExg%2FbtsP5FxA7Qm%2F583YfvxO87nHAt1dbLmkgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;431&quot; height=&quot;73&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;73&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;272&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blUPtS/btsP4l07dqE/z3Al6AiPHyMdezgrotu7z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blUPtS/btsP4l07dqE/z3Al6AiPHyMdezgrotu7z0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blUPtS/btsP4l07dqE/z3Al6AiPHyMdezgrotu7z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblUPtS%2FbtsP4l07dqE%2Fz3Al6AiPHyMdezgrotu7z0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;272&quot; height=&quot;68&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공분산 / 표준 편차의 곱&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;상관관계의 유의&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 인과성으로 해석함에 유의 &lt;span style=&quot;color: #ee2323;&quot;&gt;절대 아님X&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;예 ) 아이스크림과 모기개체수가 증가&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 상관성이 있는 경우 인과관계는 아님 &amp;there4; 원인은 기온 상승&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;correlation &amp;ne; causation &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;(correlationa은 상관분석, causation은 회귀분석)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;- 시계열데이터에서는 상관관계분석 X&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;통계에서의 회귀분석과 ML에서의 회귀분석의 차이점&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;: 통계에서는 추론이 목적, ML에서는 예측이 목적&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;A &amp;rarr; B : A가 B에 영향을 주는 경우&lt;/li&gt;
&lt;li&gt;B &amp;rarr; A : B 가 A에 영향을 주는 경우&lt;/li&gt;
&lt;li&gt;A, B &amp;larr; C : C가 요인&lt;/li&gt;
&lt;li&gt;우연&lt;/li&gt;
&lt;li&gt;상관관계 &amp;rarr; 기울기X (인과성)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;피어슨 상관계수 &amp;rarr; X : 연속형 Y : 연속형&lt;/li&gt;
&lt;li&gt;스피어만 상관계수 &lt;br /&gt;&amp;rarr; 서열을 만듦. 순위변동으로 상관성 따짐&lt;br /&gt;&amp;rarr; 두 연속형 변수/ 순위형 변수간의 단조 관계 측정&lt;/li&gt;
&lt;li&gt;켄달의 타우(Kendall's Tau)&lt;br /&gt;&amp;rarr; &amp;nbsp;범주형 데이터와 연속형 데이터에 대한 상관분석&lt;br /&gt;&amp;rarr; 두 순위형 변수 또는 서열화 할 수 있는 데이터 간의 상관관계&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;상관계수&lt;/td&gt;
&lt;td&gt;데이터 유형&lt;/td&gt;
&lt;td&gt;관계의 종류&lt;/td&gt;
&lt;td&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;피어슨&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;연속형 vs. 연속형&lt;/td&gt;
&lt;td&gt;선형(Linear)&lt;/td&gt;
&lt;td&gt;실제 값 사용, 정규 분포 가정, 이상치에 민감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스피어만&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;순위형 vs. 순위형 (또는 연속형)&lt;/td&gt;
&lt;td&gt;단조(Monotonic)&lt;/td&gt;
&lt;td&gt;순위 사용, 이상치에 덜 민감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;켄달의 타우&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;순위형 vs. 순위형&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;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/통계</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/44</guid>
      <comments>https://yujung820.tistory.com/44#entry44comment</comments>
      <pubDate>Mon, 25 Aug 2025 10:00:37 +0900</pubDate>
    </item>
    <item>
      <title>통계학개론 : 추론과 검정</title>
      <link>https://yujung820.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;중심극한정리 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;: &quot;표본평균의 분포는 정규분포에 근사한다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;통계학&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 중심극한정리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 대수의 법칙&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;추정 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;: 모수를 맞추는 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;점추정 : &lt;span style=&quot;color: #ee2323;&quot;&gt;하나&lt;/span&gt;의 값으로 맞춰보고자 하는 행위&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;구간추정 : &lt;span style=&quot;color: #ee2323;&quot;&gt;특정 구간&lt;/span&gt;의 값으로 맞춰보고자 하는 행위&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;구간추정 + 신뢰수준 : 특정 구간 안에 &lt;span style=&quot;color: #ee2323;&quot;&gt;모수가 있다고 확신&lt;/span&gt; 할 수 있을까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 신뢰수준이 95% =&amp;gt; 100번 추정 중에서 95번은 맞을거야&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;점추정 + 구간추정 + 신뢰수준 규칙&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;: a &amp;plusmn; b 사이에 평균이 있을 것이고, 이것을 95% 신뢰가능하다.&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;329&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/phTOd/btsP0SwOfYW/341dfA4HPDm3znmX4pdd2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/phTOd/btsP0SwOfYW/341dfA4HPDm3znmX4pdd2k/img.png&quot; data-alt=&quot;n이 커지면 정밀도 높아진다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/phTOd/btsP0SwOfYW/341dfA4HPDm3znmX4pdd2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FphTOd%2FbtsP0SwOfYW%2F341dfA4HPDm3znmX4pdd2k%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;478&quot; height=&quot;517&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;n이 커지면 정밀도 높아진다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;653&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBI4u/btsPY7PpLuI/xd1jOu7y5rXnSBLwmUtrHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBI4u/btsPY7PpLuI/xd1jOu7y5rXnSBLwmUtrHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBI4u/btsPY7PpLuI/xd1jOu7y5rXnSBLwmUtrHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBI4u%2FbtsPY7PpLuI%2Fxd1jOu7y5rXnSBLwmUtrHk%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;653&quot; height=&quot;77&quot; data-origin-width=&quot;653&quot; data-origin-height=&quot;77&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5usO4/btsPZY5m9ci/W327ZvAhXdCng9q2ptXbjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5usO4/btsPZY5m9ci/W327ZvAhXdCng9q2ptXbjK/img.png&quot; data-alt=&quot;1-a의 의미가 중요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5usO4/btsPZY5m9ci/W327ZvAhXdCng9q2ptXbjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5usO4%2FbtsPZY5m9ci%2FW327ZvAhXdCng9q2ptXbjK%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;673&quot; height=&quot;351&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1-a의 의미가 중요&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;b&gt;표본집단의 통계량이 &amp;mu;와 같은지 다른지 - 다르다면 얼마나 유의한지&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;귀무가설(H0): 지금까지 알려져 있는 주장, positive&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대립가설(H1): 연구자가 표본의 정보로 밝히고자 하는 주장(검정의 목적)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVmtxJ/btsPYIChlQd/1zwUuNJpLffKzxhZEke351/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVmtxJ/btsPYIChlQd/1zwUuNJpLffKzxhZEke351/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVmtxJ/btsPYIChlQd/1zwUuNJpLffKzxhZEke351/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVmtxJ%2FbtsPYIChlQd%2F1zwUuNJpLffKzxhZEke351%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;443&quot; height=&quot;207&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기각역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 기각영역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= H0가 기각되는 영역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IY1uh/btsPXRfd5d9/aRO6kxcqJKQtv0qPOQB661/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IY1uh/btsPXRfd5d9/aRO6kxcqJKQtv0qPOQB661/img.png&quot; data-alt=&quot;유의수준 : &amp;amp;alpha;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IY1uh/btsPXRfd5d9/aRO6kxcqJKQtv0qPOQB661/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIY1uh%2FbtsPXRfd5d9%2FaRO6kxcqJKQtv0qPOQB661%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;759&quot; height=&quot;320&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유의수준 : &amp;alpha;&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;size18&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;오차 행렬&lt;/span&gt;&lt;/b&gt; = 혼동행렬 = confusion matrix&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 98.4885%; height: 186px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style5&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 38px;&quot; colspan=&quot;2&quot; rowspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 22px;&quot; colspan=&quot;2&quot;&gt;실제(Real)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 16px;&quot;&gt;H0 True&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 16px;&quot;&gt;H1 True&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 44px;&quot; rowspan=&quot;2&quot;&gt;검정결과&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 22px;&quot;&gt;H0 기각 X&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 22px;&quot;&gt;올바른 의사결정&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 22px;&quot;&gt;제2종 오류( &lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;&amp;beta;&lt;/span&gt; 오류)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 22px;&quot;&gt;H0 기각&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 22px;&quot;&gt;제 1종 오류( &lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;&amp;alpha;&lt;/span&gt; 오류)&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 22px;&quot;&gt;올바른 의사결정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&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;/li&gt;
&lt;li&gt;유의수준( &lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;&amp;alpha;&lt;/span&gt; ) 결정&lt;/li&gt;
&lt;li&gt;검정통계량 선정(Z, t, F, 카이제곱 분포 등)&lt;/li&gt;
&lt;li&gt;각 분포표를 이용해 기각역 설정(기각역이 되는 x축상의 값을 임계치라고 함)&lt;/li&gt;
&lt;li&gt;검정통계량 산출&lt;/li&gt;
&lt;li&gt;검정통계량을 비교해 귀무가설의 기각여부 결정&lt;/li&gt;
&lt;li&gt;검정결과에 따라 연구결과를 해석하고 결론 도출&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;모수적 통계방법의 3가지 가정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;분포의 정규성&lt;/li&gt;
&lt;li&gt;(집단 내) 변량의 동질성 = 집단 내 분산의 동질성 = 등분산성&lt;/li&gt;
&lt;li&gt;표본집단의 데이터 척도는 등간척도 또는 비율척도 따라야 함&amp;nbsp;&amp;rarr; 연속형 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정규성 검정 종류&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;샤피로-윌크 검정&lt;br /&gt;- 표본수(n)가 2000미만인 데이터셋에 적합한 정규성 검정&lt;/li&gt;
&lt;li&gt;콜모고로프-스미르노프 검정&lt;br /&gt;- 표본수(n)가 2000초과인 데이터셋에 적합한 정규성 검정&lt;/li&gt;
&lt;li&gt;Q-Q Plot&lt;br /&gt;- 데이터셋이 정규분포를 따르는지 판단하는 시각적 분석방법&lt;/li&gt;
&lt;li&gt;히스토그램&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Q - Q plot&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 두 확률 분포를 비교하는 확률 그림의 한 종류로, 각각의 분포의 분위수들을 2차원 평면에 시각화해 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvpcOI/btsPZiXPnvO/pRv9Ye8GGzvBdiZyXrOpK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvpcOI/btsPZiXPnvO/pRv9Ye8GGzvBdiZyXrOpK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvpcOI/btsPZiXPnvO/pRv9Ye8GGzvBdiZyXrOpK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvpcOI%2FbtsPZiXPnvO%2FpRv9Ye8GGzvBdiZyXrOpK0%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;1071&quot; height=&quot;651&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;t - test&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;t-test 의 목적&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 두 집단 이하의 평균차이 검정(=비교) &amp;rarr; 두 집단 이상 : ANOVA(분산분석)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;One Sample T-test (단일표본 t-검정)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 모집단의 평균이 표본 평균(우리가 알고 있는 값)과 일치하는지 검정 &amp;rarr; 표본데이터가 하나&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 가정사항 : 표본데이터가 정규성 만족&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;Two Sample T-test(독립표본 t-검정)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 서로 다른 두 개의 그룹 간 평균 검정 방법&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 가정사항 : 표본데이터가 정규성, 등분산성 만족&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 표본A의 평균, 표본 B의 평균 &amp;rarr; 평균차이에 대한 가설 검정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ H0 : &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;mu;A = &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;mu;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;Paired Sample T-test(대응표본 t-검정)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 연관성이 있는 두 집단의 차이값에 대한 평균 검정 방법 &amp;rarr; 하나의 샘플(=표본 데이터)의 전후 차이&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 가정사항 : 표본데이터가 정규성, 등분산성 만족&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;mu;D :&amp;nbsp; 모집단A, 모집단B의 모평균의 차이&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ H0 : &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;mu;D=D0 &amp;rarr; 표본A, 표본B의 모평균의 차이가 없다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;○ 저해요인/방해요소 통제해야 결과를 신뢰할 수 있다. &amp;rarr; 전처리가 중요&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSdWan/btsPYIvSbK1/m84H8cMJGYvWF62wjO7xuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSdWan/btsPYIvSbK1/m84H8cMJGYvWF62wjO7xuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSdWan/btsPYIvSbK1/m84H8cMJGYvWF62wjO7xuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSdWan%2FbtsPYIvSbK1%2Fm84H8cMJGYvWF62wjO7xuk%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;461&quot; height=&quot;128&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plzze/btsP1oCseO2/k0nRjCHBKmCq9a6XZPU2H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plzze/btsP1oCseO2/k0nRjCHBKmCq9a6XZPU2H0/img.png&quot; data-alt=&quot;상관관계분석과 선형회귀분석은 뗄레야 뗄 수 없는 관계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plzze/btsP1oCseO2/k0nRjCHBKmCq9a6XZPU2H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fplzze%2FbtsP1oCseO2%2Fk0nRjCHBKmCq9a6XZPU2H0%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;1013&quot; height=&quot;299&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;299&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;size18&quot;&gt;&lt;b&gt;ANOVA(분산분석)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 2개 이상의 집단에 대한 평균비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;○&lt;span&gt;&amp;nbsp;&lt;/span&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;- 그룹내 변동 : F분포(분산비에 대한 분포)&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-filename=&quot;blob&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3wRuE/btsP0hq1yJG/NvwEm4Q3K8q9ZF7nULKgv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3wRuE/btsP0hq1yJG/NvwEm4Q3K8q9ZF7nULKgv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3wRuE/btsP0hq1yJG/NvwEm4Q3K8q9ZF7nULKgv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3wRuE%2FbtsP0hq1yJG%2FNvwEm4Q3K8q9ZF7nULKgv0%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;743&quot; height=&quot;322&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSB : 집단간 분산 합계 / 집단수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSW : 집단내 분산 합계 / (전체-집단수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;귀무가설이 기각된 경우 : 평균이 다르다 =&amp;gt; 사후검정 필요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tukey(튜키), Bonferroni(본페르니), Scheffe(쉐피), Duncan(듀칸)&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;681&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UeSvn/btsPZZYrTs1/DVWle5jkkZKDlQWgoeGkn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UeSvn/btsPZZYrTs1/DVWle5jkkZKDlQWgoeGkn1/img.png&quot; data-alt=&quot;사후검정 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UeSvn/btsPZZYrTs1/DVWle5jkkZKDlQWgoeGkn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUeSvn%2FbtsPZZYrTs1%2FDVWle5jkkZKDlQWgoeGkn1%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;820&quot; height=&quot;289&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사후검정 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;비모수 검정 - 카이제곱 검정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빈도를 나타내는 방법 : 분할표 또는 교차표 이용해 각 범주의 빈도 표현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br6Tvn/btsP0xAwsRX/SZfXFRA6vzRKKPKf9Xnk00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br6Tvn/btsP0xAwsRX/SZfXFRA6vzRKKPKf9Xnk00/img.png&quot; data-alt=&quot;(O-E)^2/E&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br6Tvn/btsP0xAwsRX/SZfXFRA6vzRKKPKf9Xnk00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr6Tvn%2FbtsP0xAwsRX%2FSZfXFRA6vzRKKPKf9Xnk00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;77&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(O-E)^2/E&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;적합도 검정&lt;br /&gt;- 보통 한 개의 요인을 대상(범주형 변수 1개)&lt;br /&gt;- 한 개의 명목척도 변수가 대상, 알려진 모집단의 분포를 통해 예상되는 기대도수와 실제 표본을 통해 실제로 얻어진 관측도수 사이에 어느정도 차이가 있는지 검정&lt;/li&gt;
&lt;li&gt;독립성 검정&lt;br /&gt;- 두개의 범주형 변수 간에 서로 연관성이 있는지, 독립적인지를 통계적으로 판단&lt;br /&gt;- 두 개의 요인을 대상으로 함(범주형 변수 2개)&lt;/li&gt;
&lt;li&gt;동질성 검정&lt;br /&gt;- 관측값들이 정해진 범주 내에서 서로 비슷하게 나타나고 있는지를 검정&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;독립성 검정 vs 동질성 검정&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;- 동질성 : 여러개의 집단에서 표본을 따로 추출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ 검정 원리 : 두 가지 명목 변수 분할표 작성 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 기대도수 산출 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 카이제곱 통계량 산출&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT 정리/통계</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/43</guid>
      <comments>https://yujung820.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 19 Aug 2025 17:52:47 +0900</pubDate>
    </item>
    <item>
      <title>통계학 개론 : 확률분포</title>
      <link>https://yujung820.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;카이제곱 분포&lt;/b&gt; &lt;/span&gt;: 분산의 분포&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;○ Z1, Z2,...., Zk가 k개의 &lt;u&gt;서로 독립적인 확립적인 확률변수&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ 자유도 k (=n - 1) 인 카이제곱 분포, n은 변수의 개수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ 0 미만의 값이 안 나옴&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;82&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZjCS9/btsPTx8ZRat/jwPGCq9HKpQV1QL61JLH21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZjCS9/btsPTx8ZRat/jwPGCq9HKpQV1QL61JLH21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZjCS9/btsPTx8ZRat/jwPGCq9HKpQV1QL61JLH21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZjCS9%2FbtsPTx8ZRat%2FjwPGCq9HKpQV1QL61JLH21%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;126&quot; height=&quot;43&quot; data-origin-width=&quot;82&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률변수 X는 자유도가 k인 카이제곱 분포를 따른다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ 평균 E(X) = k&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ 분산 Var(X) = 2k&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ k가 커질 수록 산포가 큰 정규분포에 수렴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;F-분포&lt;/span&gt;&lt;/b&gt; :&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 분산비의 분포&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ F-검정 &amp;rarr; 회귀분석의 유의성 검정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ F는 자유도가 (k1, k2)인 F분포를 따른다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;기초통계&lt;/b&gt; : 자료를 정리하고 요약하여 그 특성을 정확히 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;통계량&lt;/b&gt; : 모집단의 모수를 추정하기 위해 표본에서 계산한 추정량의 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;수치형 변수&lt;/b&gt;의 통계량&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;변이 통계량&lt;/b&gt; : 데이터의 흩어짐 정도를 하나의 값으로 표현&lt;br /&gt;- 변동계수(CV, coefficient of variation) &lt;br /&gt;: 표준편차 만으로 한 집단의 불규칙성 밖에 알 수 없음 &lt;br /&gt;: 타 집단과 상대적 비교 필요 시 변도계수 사용 &lt;br /&gt;&amp;rarr; 표준편차의 상대적 비교 : 표준편차/평균&amp;nbsp; &lt;br /&gt;&amp;rarr;&amp;nbsp; CV = (표준편차/평균)x100&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모형 통계량&lt;/b&gt; : 데이터의 치우침/뾰족함 정도를 하나의 값으로 표현&lt;br /&gt;- 왜도(Skewness) : 데이터의 치우침 정도를 나타냄( 양 0 음 )&lt;br /&gt;&amp;rarr; 산포도의 외형적인 특징을 보다 잘 설명&amp;nbsp;&lt;br /&gt;- 첨도(Kurtosis) : 뾰족한 정도&lt;br /&gt;&amp;rarr; 데이터들이 얼마나 평균에 집중되어 있는지 확인&lt;br /&gt;&amp;rarr; 첨도 &amp;gt; 0 = 분포의 꼬리가 정규분포보다 두껍다. = t분포를 따르는 데이터의 첨도는 양수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;위치 통계량&lt;/b&gt; : 중심위치를 하나의 값으로 표현&lt;br /&gt;- 평균 : 대표적인 자료 중심의 척도&lt;br /&gt;- 중앙값 : 이상값에 영향 적음, n이 홀수 : (n+1)/2, n이 짝수 : (n + (n+1))/2&lt;br /&gt;- 최빈값 : 빈도수가 최대, 평균에 영향 X&amp;nbsp;&lt;br /&gt;- 절사평균 : 최저, 최대값 제외한 평균&lt;br /&gt;- 사분위수와 범위&lt;br /&gt;: 사분위수는 위치 통계량 범위는 변이 통계량&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;범주형 변수&lt;/b&gt;의 통계량&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&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;&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;694&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK2Ajt/btsPU1au4U3/lcKbeUmuL8mPF99t42Kye0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK2Ajt/btsPU1au4U3/lcKbeUmuL8mPF99t42Kye0/img.png&quot; data-alt=&quot;일변량 : 변수 1개, 다변량 : 변수 2개&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK2Ajt/btsPU1au4U3/lcKbeUmuL8mPF99t42Kye0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK2Ajt%2FbtsPU1au4U3%2FlcKbeUmuL8mPF99t42Kye0%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;240&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;일변량 : 변수 1개, 다변량 : 변수 2개&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;u&gt;수치형 변수를 변주형 변수로 변환하는 법&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 정리&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;도수분포표&lt;br /&gt;- 자료를 한 변수가 가질 수 있는 값들의 계급 또는 범주로 나누고 각 계급에 속하는 측정치의 도수를 나타냄 &lt;br /&gt;= 구간화(binning, 연속형&amp;nbsp;&amp;rarr;범주형으로변환)&lt;/li&gt;
&lt;li&gt;상대도수&lt;br /&gt;- 각 계급의 도수가 총 도수에서 차지하는 비율&lt;/li&gt;
&lt;li&gt;히스토그램&lt;br /&gt;- 가로축 : 계급, 세로축 : 도수&lt;/li&gt;
&lt;/ul&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&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj34Ao/btsPWjuMxQk/A3tZHdUVCdYTMSKkcbTFN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj34Ao/btsPWjuMxQk/A3tZHdUVCdYTMSKkcbTFN1/img.png&quot; data-alt=&quot;방문빈도와 총매출액의 상관성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj34Ao/btsPWjuMxQk/A3tZHdUVCdYTMSKkcbTFN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj34Ao%2FbtsPWjuMxQk%2FA3tZHdUVCdYTMSKkcbTFN1%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;398&quot; height=&quot;198&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;198&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;u&gt;알 수 있는 것들&lt;/u&gt;&lt;br /&gt;1. 트렌드(추세)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 밀도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 이상값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 분류에 영향을 미치는 기준값(해당 그래프에서는 방문빈도)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/통계</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/42</guid>
      <comments>https://yujung820.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 18 Aug 2025 10:34:13 +0900</pubDate>
    </item>
    <item>
      <title>통계학개론 : 데이터</title>
      <link>https://yujung820.tistory.com/41</link>
      <description>&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;size18&quot;&gt;&lt;b&gt;DW&amp;amp;DM&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oiVlp/btsPP3M2sp7/Xqq7jpwpHybvBP5kIKyyZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oiVlp/btsPP3M2sp7/Xqq7jpwpHybvBP5kIKyyZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oiVlp/btsPP3M2sp7/Xqq7jpwpHybvBP5kIKyyZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoiVlp%2FbtsPP3M2sp7%2FXqq7jpwpHybvBP5kIKyyZ0%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;668&quot; height=&quot;206&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 데이터 소스 = 실시간으로 데이터 수집&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. staging area = DW 직전에 있는 임시 저장소/ 노이즈 확인 및 처리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. DW = 통합, 시계열성, 주제지향성, 비휘발성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4. DM(optional) = 고객에게 이해하기 쉬운 형태로 나누겠다(=카테고리별로 나눠서)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; letter-spacing: 0px;&quot;&gt;&amp;rarr; 비즈니스 기능에 따라 데이터 큐브를 만든다.&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;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; letter-spacing: 0px;&quot;&gt;&amp;middot; 공간분석(QGIS)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; letter-spacing: 0px;&quot;&gt;= 지도 위에 데이터의 특성을 나타내는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; letter-spacing: 0px;&quot;&gt; &lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; 탐색적 자료 분석(EDA)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; letter-spacing: 0px;&quot;&gt;= 데이터를 통해 찾고자 하는 특징, 패턴 &lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp; 시각화로 찾음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○ 분석하고자 하는 데이터 즉 변수들이 가지는 연속형 또는 문자형 데이터들의 시각화를 통해 해당 변수의 분포 또는 관계 및 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;특징을 찾아내는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○ &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;데이터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 전처리&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 시각화&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 의사결정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○ 시각화 how? 데이터에 따라 방법 달라짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;예 ) 데이터의 상관성, 데이터의 분포&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt; &lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; 통계분석&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr; 모형에 따라 달라짐&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○&lt;/span&gt; &amp;nbsp;기술통계 분석 : 모집단으로부터 표본 추출, 기초통계량으로 데이터분석&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; &lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○&lt;/span&gt; &amp;nbsp;추론통계 분석 : 모집단의 특징을 기초통계량으로 추정하는 데이터분석&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt; &lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp; 데이터마이닝&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○ 대량의 데이터에서 의미 있는 정보를 추출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;○ 새로운 상관관계, 패턴, 추세 등을 탐색, 이를 모형화해 미래에 대한 예측&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpj33A/btsPPRszFWP/viWUg2Fby8DitUvYaIFiqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpj33A/btsPPRszFWP/viWUg2Fby8DitUvYaIFiqk/img.png&quot; data-alt=&quot;통계량은 표본통계량&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpj33A/btsPPRszFWP/viWUg2Fby8DitUvYaIFiqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdpj33A%2FbtsPPRszFWP%2FviWUg2Fby8DitUvYaIFiqk%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;453&quot; height=&quot;154&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;통계량은 표본통계량&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&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;784&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9TkoT/btsPNMZRjeL/nkM1BCWplIk48SD1xDYdyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9TkoT/btsPNMZRjeL/nkM1BCWplIk48SD1xDYdyK/img.png&quot; data-alt=&quot;추론(추정) : 표본의 통계량으로 모수 를 맞추고 싶을 때 하는 행위&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9TkoT/btsPNMZRjeL/nkM1BCWplIk48SD1xDYdyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9TkoT%2FbtsPNMZRjeL%2FnkM1BCWplIk48SD1xDYdyK%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;784&quot; height=&quot;368&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;784&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;size18&quot;&gt;&lt;b&gt;통계학이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 모집단의 특징을 표본통계량으로 추정(추론)하는 것&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.&amp;nbsp; 표본추출 방법&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;단순무작위(단순임의) 추출법 : 랜덤으로 뽑기&lt;/li&gt;
&lt;li&gt;층화(표본) 추출법 : 몇 개의 층으로 나눈 후, 각 층의 데이터 비율만큼 단순무작위 추출&lt;br /&gt;&amp;rarr; k개의 군집을 나눠도 k개의 모든 군집 내에서도 처음 비율을 깨트리지 않음&lt;/li&gt;
&lt;li&gt;계통 추출법 : 군집간 이질성, 군집내 동질성&lt;br /&gt;&amp;rarr; 패턴을 가지게 되는 경우, 모집단의 특성을 하나도 반영하지 못하는 결과&lt;/li&gt;
&lt;li&gt;군집(집락) 추출법 : 군집간 동질성, 군집내 이질성&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&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;&amp;nbsp; &amp;nbsp; X변수 &amp;rarr; Y변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립변수 &amp;rarr; 종속변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명변수 &amp;rarr; 반응변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측변수 &amp;rarr; 결과변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;변수의 타입&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 하나의 변수는 여러가지 척도로 표현 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 척도에 따라 데이터 분석 방법이 달라짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;범주형이면 빈도/교차분석, 연속형이면 분포분석&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;※척도 : 변수가 가지는 데이터 값들의 데이터 타입&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이산형&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&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;연속형&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;구간변수 : 측정치 간격에 의해 비교할 수 있도록 단위가 정해짐(절대적 0이 없다)&lt;/li&gt;
&lt;li&gt;비율변수 : 가장 높은 수준의 척도로 4칙연산이 가능(절대적 0이 있다)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 확률 및 분포&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확률 : 어떤 사건이 발생할 가능성을 0~1 사이의 숫자로 표현한 것&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;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;확률변수란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 값을 어느 정도의 가능성으로 취하는 가는 거기에 정해진 확률에 의해 나타남&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwVLr/btsPRphPzLg/NBa9fzxwcLeHZu6c7gssRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwVLr/btsPRphPzLg/NBa9fzxwcLeHZu6c7gssRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwVLr/btsPRphPzLg/NBa9fzxwcLeHZu6c7gssRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwVLr%2FbtsPRphPzLg%2FNBa9fzxwcLeHZu6c7gssRK%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;776&quot; height=&quot;366&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기댓값 : 분포의 무게중심, 중심위치(=평균)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 계산 쉽지만 이상값에 대한 영향이 큼&lt;/p&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조화 평균 : ML에서 많이 사용, 어디 하나 치우치지 않게&lt;/li&gt;
&lt;li&gt;가중 평균 : 시계열데이터(MA)에서 많이 사용&lt;/li&gt;
&lt;li&gt;산술 평균 : 1/n&lt;/li&gt;
&lt;li&gt;기하 평균 : 경제 성장율에서 많이 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산 : 분포의 산포를 나타냄 = 데이터의 변동성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 편차제곱합/자료의 개수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준편차 : 분산의 제곱근, 단위가 보장됨&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;520&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v0SdZ/btsPSEF9S4b/F9dJkF60cUeSqi7waR7aK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v0SdZ/btsPSEF9S4b/F9dJkF60cUeSqi7waR7aK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v0SdZ/btsPSEF9S4b/F9dJkF60cUeSqi7waR7aK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv0SdZ%2FbtsPSEF9S4b%2FF9dJkF60cUeSqi7waR7aK1%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;520&quot; height=&quot;251&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;이산확률분포&lt;/b&gt; : &quot;베르누이&quot;를 독립적으로 n번 반복하는 실험 결과, 결과가 확률값을 나타냄&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이항분포 : 확률변수와 확률질량함수 정의 X~B[n,p]&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxEhqz/btsPTmE1o3x/PvS4gARuk8t6iFsjMO6v60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxEhqz/btsPTmE1o3x/PvS4gARuk8t6iFsjMO6v60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxEhqz/btsPTmE1o3x/PvS4gARuk8t6iFsjMO6v60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxEhqz%2FbtsPTmE1o3x%2FPvS4gARuk8t6iFsjMO6v60%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;357&quot; height=&quot;100&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;포아송분포 : 단위 시간 안에 어떤 사건이 몇 번 발생할 것인지를 표현하는 이산 확률 분포&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPEyR7/btsPTxGoknn/Y1kWrvVTCSo1HgKMCYxFkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPEyR7/btsPTxGoknn/Y1kWrvVTCSo1HgKMCYxFkk/img.png&quot; data-alt=&quot;f(x)는 포아송분포의 확률질량함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPEyR7/btsPTxGoknn/Y1kWrvVTCSo1HgKMCYxFkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPEyR7%2FbtsPTxGoknn%2FY1kWrvVTCSo1HgKMCYxFkk%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;265&quot; height=&quot;146&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;f(x)는 포아송분포의 확률질량함수&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;size18&quot;&gt;&lt;b&gt;연속확률분포&lt;/b&gt; : 구간을 적분해 확률값을 구함&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;지수분포 : 사건이 독립적일 때, 일정 시간동안 발생하는 사건의 횟수가 포아송분포를 따른다면, 다음 사건이 일어날 때까지 대기 시간을 표현하는 연속확률분포&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NBbFx/btsPTBouNBZ/pulVikqJaBVRhGkzBl1pn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NBbFx/btsPTBouNBZ/pulVikqJaBVRhGkzBl1pn1/img.png&quot; data-alt=&quot;f(x)는 지수분포의 확률밀도함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NBbFx/btsPTBouNBZ/pulVikqJaBVRhGkzBl1pn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNBbFx%2FbtsPTBouNBZ%2FpulVikqJaBVRhGkzBl1pn1%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;298&quot; height=&quot;156&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;f(x)는 지수분포의 확률밀도함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;정규분포 : 확률변수를 기술하는 가장 중요한 확률분포&lt;br /&gt;&amp;rarr; Bell Curve라고 불리며, 종모양의 곡선으로 표현&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt; 중심극한정리에 의해 자료의 분포를 근사하기 위해 자주 사용&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3YQIQ/btsPRtlo2DQ/qTNIh5cqVrEMqMKrxfOzF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3YQIQ/btsPRtlo2DQ/qTNIh5cqVrEMqMKrxfOzF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3YQIQ/btsPRtlo2DQ/qTNIh5cqVrEMqMKrxfOzF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3YQIQ%2FbtsPRtlo2DQ%2FqTNIh5cqVrEMqMKrxfOzF1%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;357&quot; height=&quot;261&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mrCAI/btsPRrug1F2/Zor8EL5wrrzwih1o0gtj0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mrCAI/btsPRrug1F2/Zor8EL5wrrzwih1o0gtj0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mrCAI/btsPRrug1F2/Zor8EL5wrrzwih1o0gtj0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmrCAI%2FbtsPRrug1F2%2FZor8EL5wrrzwih1o0gtj0k%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;454&quot; height=&quot;249&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;t - 분포&amp;nbsp;&lt;br /&gt;&amp;rarr; 정규분포와 유사하게 좌우 대칭의 종모양으로 중심은 0&lt;br /&gt;&amp;rarr; 정규분포는 표본의 수가 적으면 신뢰도가 낮아짐(n&amp;lt;=30)&lt;br /&gt;&amp;rarr; t-분포는 자유도에 따라 그래프의 형태가 달라짐&lt;br /&gt;&amp;middot; 표본의 수가 충분히 크면 표준정규분포와 거의 같과 적으면 꼬리가 두꺼워짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정규분포와 표준정규분포의 차이는?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준정규분포 : 평균이 0이고 분산, 편차가 1인 정규분포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 보통 Z분포(Noramalization = Standardization = Scaling)라고 표기 || Z~N(0,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;- 단위통일(원래 값이 더 작은 값으로 바꾸며 더 쉽게 비교)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMugcY/btsPSICzq1y/jnLZ8hvbulHq1WJXmg0p60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMugcY/btsPSICzq1y/jnLZ8hvbulHq1WJXmg0p60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMugcY/btsPSICzq1y/jnLZ8hvbulHq1WJXmg0p60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMugcY%2FbtsPSICzq1y%2FjnLZ8hvbulHq1WJXmg0p60%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;746&quot; height=&quot;316&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT 정리/통계</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/41</guid>
      <comments>https://yujung820.tistory.com/41#entry41comment</comments>
      <pubDate>Wed, 13 Aug 2025 15:20:44 +0900</pubDate>
    </item>
    <item>
      <title>tkinter</title>
      <link>https://yujung820.tistory.com/40</link>
      <description>&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;from tkinter import *&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pack() : 위에서 아래서 sequential하게 하나씩 배치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grid() : 격자 무늬로 행과 열에 번호에 따라 배치&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-filename=&quot;blob&quot; data-origin-width=&quot;195&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO2KDJ/btsPBGZjO0r/X5D948DrkzUDQ7VloNQS61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO2KDJ/btsPBGZjO0r/X5D948DrkzUDQ7VloNQS61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO2KDJ/btsPBGZjO0r/X5D948DrkzUDQ7VloNQS61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO2KDJ%2FbtsPBGZjO0r%2FX5D948DrkzUDQ7VloNQS61%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;195&quot; height=&quot;225&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;195&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1753773774677&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wnd = Tk() # 객체 생성
wnd.wm_geometry(&quot;500x400&quot;)
wnd.title(&quot;First GUI Test&quot;)
wnd.mainloop()&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;500&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDEEwl/btsPBIv6GuD/Acq4ybsdg5txwVYV3aIOUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDEEwl/btsPBIv6GuD/Acq4ybsdg5txwVYV3aIOUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDEEwl/btsPBIv6GuD/Acq4ybsdg5txwVYV3aIOUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDEEwl%2FbtsPBIv6GuD%2FAcq4ybsdg5txwVYV3aIOUK%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;500&quot; height=&quot;429&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1753774070389&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;label1 = Label(wnd, text = &quot;hello world&quot;)
label2 = Label(wnd, text = &quot;안녕하세요&quot;)
label3 = Label(wnd, text = &quot;반갑습니다&quot;)
label1.pack()
label2.pack()
label3.pack()&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;500&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8n6ex/btsPBm03Zql/vkt8bEYTrl068neDuHdWok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8n6ex/btsPBm03Zql/vkt8bEYTrl068neDuHdWok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8n6ex/btsPBm03Zql/vkt8bEYTrl068neDuHdWok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8n6ex%2FbtsPBm03Zql%2Fvkt8bEYTrl068neDuHdWok%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;500&quot; height=&quot;430&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1753774082485&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;label1 = Label(wnd, text = &quot;hello world&quot;)
label2 = Label(wnd, text = &quot;안녕하세요&quot;)
label3 = Label(wnd, text = &quot;반갑습니다&quot;)
label1.pack()
label2.pack()
label3.pack()

btn1 = Button(wnd, text = &quot;First Button&quot;)
btn1.pack()&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;500&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9YITC/btsPCicCTzQ/CVo9bC7mNhs3eiGhnQxkf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9YITC/btsPCicCTzQ/CVo9bC7mNhs3eiGhnQxkf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9YITC/btsPCicCTzQ/CVo9bC7mNhs3eiGhnQxkf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9YITC%2FbtsPCicCTzQ%2FCVo9bC7mNhs3eiGhnQxkf0%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;500&quot; height=&quot;282&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1753774205513&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def btn_click():
    label3.config(text = &quot;버튼이 클릭 됨&quot;)
    label3.config(font=('궁서체',28))
    label3.config(fg=&quot;red&quot;) #fg : 글자, bg : 배경

btn1 = Button(wnd, text = &quot;First Button&quot;, command = btn_click)
btn1.pack()&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;501&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WwFBX/btsPCpCH57o/zGIlPQwplyDtWnhrh90pH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WwFBX/btsPCpCH57o/zGIlPQwplyDtWnhrh90pH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WwFBX/btsPCpCH57o/zGIlPQwplyDtWnhrh90pH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWwFBX%2FbtsPCpCH57o%2FzGIlPQwplyDtWnhrh90pH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;501&quot; height=&quot;187&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1753774997825&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# STEP1 : pack()의 옵션을 좀 더 알아보기
label1 = Label(wnd, text=&quot;label1&quot;)
label1.pack() #위에서 순서대로 배치

#label.config()대신에 위젯 생성 시, font, color, size등을 설정
label2 = Label(wnd, text=&quot;label2&quot;, fg=&quot;blue&quot;, bg=&quot;yellow&quot;, \
               width=20, height=2, font=('맑은고딕', 16, &quot;bold&quot;))
label2.pack()&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;498&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IAy84/btsPDnK1sey/nRkG6KgKnHbkZgNS6LLa6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IAy84/btsPDnK1sey/nRkG6KgKnHbkZgNS6LLa6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IAy84/btsPDnK1sey/nRkG6KgKnHbkZgNS6LLa6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIAy84%2FbtsPDnK1sey%2FnRkG6KgKnHbkZgNS6LLa6k%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;498&quot; height=&quot;310&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1753775039673&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#STEP2 : pack()의 side option
#pack()의 옵션사용해서 배치방향 설정
label3 = Label(wnd, text=&quot;label3&quot;, bg=&quot;blue&quot;)
label3.pack(side=&quot;left&quot;)

label4 = Label(wnd, text=&quot;label4&quot;, bg=&quot;red&quot;)
label4.pack(side=&quot;left&quot;)

label5 = Label(wnd, text=&quot;label5&quot;, bg=&quot;yellow&quot;)
label5.pack(side=&quot;left&quot;)&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;502&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOzHUj/btsPBlODmja/5T6RbThZU26gK5S8mc7iV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOzHUj/btsPBlODmja/5T6RbThZU26gK5S8mc7iV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOzHUj/btsPBlODmja/5T6RbThZU26gK5S8mc7iV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOzHUj%2FbtsPBlODmja%2F5T6RbThZU26gK5S8mc7iV0%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;502&quot; height=&quot;374&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;374&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;pre id=&quot;code_1753775091729&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#STEP3 : pack()의 padding option
#pack()의 옵션을 사용해서 padding 설정 &amp;amp; side = [left, right, top, bottom] 효과보기
label3 = Label(wnd, text=&quot;label3&quot;, bg=&quot;blue&quot;)
label3.pack(side=&quot;left&quot;, padx=5, pady=5)

label4 = Label(wnd, text=&quot;label4&quot;, bg=&quot;red&quot;)
label4.pack(side=&quot;top&quot;, padx=5, pady=5)

label5 = Label(wnd, text=&quot;label5&quot;, bg=&quot;yellow&quot;)
label5.pack(side=&quot;bottom&quot;, padx=5, pady=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;499&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IfHWB/btsPDpIQ2Rb/9XTpQUgC3cfKogLV76CIF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IfHWB/btsPDpIQ2Rb/9XTpQUgC3cfKogLV76CIF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IfHWB/btsPDpIQ2Rb/9XTpQUgC3cfKogLV76CIF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIfHWB%2FbtsPDpIQ2Rb%2F9XTpQUgC3cfKogLV76CIF1%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;499&quot; height=&quot;427&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1753775260321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#STEP4 : place() 사용하기
#place()를 사용해서 배치(원하는 위치에 지정하는 방법)
x = 0
y = 0
label3 = Label(wnd, text=&quot;label3&quot;, bg=&quot;blue&quot;)
label3.place(x=x, y=x)

label4 = Label(wnd, text=&quot;label4&quot;, bg=&quot;red&quot;)
label4.place(x=x+100, y=y+100)

label5 = Label(wnd, text=&quot;label5&quot;, bg=&quot;yellow&quot;)
label5.place(x=x+200, y=y+200)&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;499&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpY11o/btsPDmZHWeE/uQPRVTVZWLbpXW4hnp0aW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpY11o/btsPDmZHWeE/uQPRVTVZWLbpXW4hnp0aW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpY11o/btsPDmZHWeE/uQPRVTVZWLbpXW4hnp0aW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpY11o%2FbtsPDmZHWeE%2FuQPRVTVZWLbpXW4hnp0aW0%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;499&quot; height=&quot;433&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;433&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;pre id=&quot;code_1753775365165&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Step 5 : grid()를 사용하요 배치
#grid()를 사용해서 행,열 index를 이용해서 배치하기(다른 배치방법과 혼용해서 사용할 수 없습니다.)
#위에서 label1.pack(), label.pack()을 주석처리해서 사용을 중지합니다.
label3 = Label(wnd, text=&quot;label3&quot;, bg=&quot;blue&quot;)
label3.grid(column=0, row=0)

label4 = Label(wnd, text=&quot;label4&quot;, bg=&quot;red&quot;)
label4.grid(column=1, row=1)

label5 = Label(wnd, text=&quot;label5&quot;, bg=&quot;yellow&quot;)
label5.grid(column=0, row=2)&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;503&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wCdKd/btsPC4kCEBn/TyUavMDL3yoITQhfmeCUCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wCdKd/btsPC4kCEBn/TyUavMDL3yoITQhfmeCUCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wCdKd/btsPC4kCEBn/TyUavMDL3yoITQhfmeCUCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwCdKd%2FbtsPC4kCEBn%2FTyUavMDL3yoITQhfmeCUCK%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;503&quot; height=&quot;436&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/40</guid>
      <comments>https://yujung820.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 29 Jul 2025 17:18:06 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 모듈, 패키지</title>
      <link>https://yujung820.tistory.com/39</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpLVQ6/btsPnysDwDs/jzWOwajRCjScXoDxfb93a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpLVQ6/btsPnysDwDs/jzWOwajRCjScXoDxfb93a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpLVQ6/btsPnysDwDs/jzWOwajRCjScXoDxfb93a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpLVQ6%2FbtsPnysDwDs%2FjzWOwajRCjScXoDxfb93a1%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;463&quot; height=&quot;416&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;function이 모이면 module, module이 모이면 패키지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이 모든 걸 합쳐서 라이브러리라고 부름&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>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/39</guid>
      <comments>https://yujung820.tistory.com/39#entry39comment</comments>
      <pubDate>Thu, 17 Jul 2025 17:37:49 +0900</pubDate>
    </item>
    <item>
      <title>Tuple, Set, Dictionary 정리</title>
      <link>https://yujung820.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Tuple&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;() 로 표현&lt;/li&gt;
&lt;li&gt;튜플 생성시 ()와 ,(콤마) 사용&lt;br /&gt;tu1 = 1, 2, 3 or tu1 = (1, 2, 3)&lt;br /&gt;tu2 = 1, of tu2 = (1, )&lt;br /&gt;※ 요소가 하나인 튜플을 만들 때 콤마를 사용하지 않으면 일반 값으로 인식&lt;/li&gt;
&lt;li&gt;변경 불가능한 자료형이다.&lt;/li&gt;
&lt;li&gt;사용 가능 함수 : len(), max(), min(), index(), count()&lt;/li&gt;
&lt;li&gt;tuple()함수 이용해 공백 튜플 생성 혹은 리스트를 tuple로 변경 가능&lt;br /&gt;tu3 = tuple() of tu3 = () &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 공백 튜플 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;Set&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;중복을 허용하지 않고 &lt;u&gt;순서가 없음&lt;/u&gt; &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 인덱싱 불가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;중복을 허용하지 않기 때문에 중복값을 제거할 때 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;인덱싱이 필요하면 인덱싱 가능한 다른 자료형으로 변환해야 함&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;set 생성&lt;br /&gt;s1 = set(s1) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; s1을 set형으로 변경&lt;br /&gt;s1 = set() &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 공백 set 생성&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;{}로 표현&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;s1={}는 공백 set 생성이 아닌 공백 딕셔너리 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;사용 가능 연산자 : | (합집합), &amp;amp;(교집합), -(차집합)&lt;/li&gt;
&lt;li&gt;사용 가능 함수 : len(), max(), min(), union(합집합), intersection(교집합), difference(차집합)&lt;br /&gt;합집합&amp;nbsp;&lt;br /&gt;- print(a.union(b)) = print( a|b )&lt;br /&gt;교집합&lt;br /&gt;- print(a.intersection(b)) = print( a&amp;amp;b)&lt;br /&gt;&amp;nbsp;차집합&lt;br /&gt;- print(a.difference(b)) = print( a-b)&lt;/li&gt;
&lt;li&gt;s1.add(원소) : 원소 추가&lt;/li&gt;
&lt;li&gt;s1.remove(원소) : 해당 원소 제거(단, 해당 원소 없으면 에러)&lt;/li&gt;
&lt;li&gt;s1.discard(원소) : 해당 원소 제거(해당 원소 없어도 에러 없음)&lt;/li&gt;
&lt;li&gt;s1.clear() : 집합의 모든 원소 제거 &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 공백집합(set())로 만들어줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;Dictionary&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;{}로 표현&lt;/li&gt;
&lt;li&gt;key : value 쌍으로 이루어짐&lt;/li&gt;
&lt;li&gt;key에 리스트 사용 불가, value에는 모든 자료형 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;딕셔너리 생성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dic1 = {&quot;나이&quot; : 30} &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 생성과 동시에 항목 추가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dic2 = {} or dic2 = dic() &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 모두 공백 딕셔너리 생성&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;딕셔너리 항목 추가&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dic2[&quot;나이&quot;] = 30 &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; key(나이)를 인덱스 위치에 value(30)값을 대입연산자 오른쪽에 작성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;dic2 = {&quot;이름&quot; : &quot;홍길동&quot;, &quot;이름&quot; : &quot;임꺽정&quot;} &amp;nbsp;&lt;br /&gt;print(dic2) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 결과 : &lt;b&gt;{&quot;이름&quot; : &quot;임꺽정&quot;}&lt;/b&gt;&lt;br /&gt;※생성과 동시에 항목 추가 시 &lt;span style=&quot;color: #ee2323;&quot;&gt;동일한 킷값&lt;/span&gt;을 갖는 경우 : 중복 저장 되지 않고 하나만 남음&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dic3 = {}&lt;br /&gt;dic3[&quot;이름&quot;] = &quot;홍길동&quot;&lt;br /&gt;dic3[&quot;이름&quot;] = &quot;임꺽정&quot;&lt;br /&gt;print(dic3) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 이름이 key인 value값은 임꺽정&lt;br /&gt;※ key가 동일하면 중복 저장 되지 않으므로 value값 변경(덮어쓰기)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;딕셔너리 삭제&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;del dic[] &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; [ ] 안에는 삭제할 key 들어감&lt;br /&gt;del dic1[&quot;이름&quot;] or del(dic1[&quot;이름&quot;]) : key가 &quot;이름&quot;인 항목 삭제(value값도 함께 삭제) &lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;※ 해당 key가 없는 경우 오류 발생&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;dic.pop(key) : key에 해당하는 항목(key-value 쌍)을 삭제 및 반환&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;※ 해당 key가 없는 경우 오류 발생&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;dic.clear() : key와 value 모두 삭제(전체 삭제)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;딕셔너리 key, value 추출&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dic.keys() &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; key값들만 추출, 인덱싱 사용 불가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dic.values() &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; value값들만 추출, 인덱싱 사용 불가&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dic.items() &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; key와 value의 쌍을 튜플로 변환, 반복문에서 튜플로 받은 경우 &lt;u&gt;인덱싱 사용 가능&lt;/u&gt;&lt;br /&gt;※ &lt;span style=&quot;color: #ee2323;&quot;&gt;리스트처럼 보이지만 실제 리스트가 아님(시퀀스 형태이기 때문에 반복문에서 사용 가능)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;리스트가 아니기 때문에 리스트 관련 함수 사용 불가(append, insert, count etc)&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 리스트 관련 함수 사용하기 위해선 리스트로 변환 필요&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;get 함수&lt;br /&gt;dic.get(key) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; key에 해당하는 value 반환, 해당 key없으면 None 반환&lt;br /&gt;print(dic1[&quot;나이&quot;]) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; &quot;나이&quot; key 없으면 에러&lt;/span&gt;&lt;br /&gt;print(dic1.get(&quot;나이&quot;)) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; &quot;나이&quot; key 없어도 에러 나지 않음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;dic.get(key, default_value) &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;rarr; 해당 key 없으면 default_value 반환&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/38</guid>
      <comments>https://yujung820.tistory.com/38#entry38comment</comments>
      <pubDate>Thu, 17 Jul 2025 11:57:03 +0900</pubDate>
    </item>
    <item>
      <title>출력(print) 형태, 문자열(string) 정리</title>
      <link>https://yujung820.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 형태 정리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(a) : a를 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(a,b) : a와 b 출력 (이때 a와 b 사이에 ,(콤마)는 출력 X)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(&quot;apple&quot;, &quot;banana&quot;) &amp;rarr; 결과 : &lt;b&gt;apple banana&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(a+b) : a와 b가 숫자일 경우 두 수의 합을 출력 / 문자열일 경우 문자열을 붙여서 사용ㄹ&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(3+5) &amp;rarr; 결과 : &lt;b&gt;8&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(&quot;3&quot;+&quot;5&quot;) &amp;rarr; 결과 : &lt;b&gt;35&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;print(&quot;apple&quot;+&quot;banana&quot;) &amp;rarr; 결과 : &lt;b&gt;applebanana&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Q : 그럼 print(a+b)와 print(a,b)의 출력 결과는 같나?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A : 아니오. + 와 , 의 차이는 두 변수 사이에 공백을 함께 출력하느냐 마느냐의 차이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;format 함수&amp;nbsp;&lt;br /&gt;name = &quot;홍길동&quot; 일때&lt;br /&gt;- print(f&quot;이름 : {name}&quot;) &amp;rarr; 결과 : &lt;b&gt;이름 : 홍길동&lt;/b&gt;&lt;br /&gt;- print(&quot;이름 : {}&quot;.format(name)) &amp;rarr; 결과 : &lt;b&gt;이름 : 홍길동&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;% 사용&lt;br /&gt;print(&quot;이름 : %s, 나이 : %d&quot;%(&quot;홍길동',30)&lt;br /&gt;&amp;rarr; 결과 : &lt;b&gt;이름 : 홍길동, 나이 : 30&lt;br /&gt;&lt;/b&gt;- %d는 정수, %f는 실수, %s는 문자열&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;round 함수&lt;br /&gt;round(변수,n) &amp;rarr; 소수점 2째자리까지 표시 = 소수점 3째자리에서 반올림&lt;br /&gt;round(3.7452,2) &amp;rarr; 결과 : &lt;b&gt;3.75&lt;br /&gt;※&lt;/b&gt; n이 0일때는 .0 까지 같이 출력 ex ) round(3,0) &amp;rarr; 결과 :&lt;b&gt; 3.0&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;%f 사용&lt;br /&gt;%와 f 사이에 .(점)과 숫자를 넣어 사용&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- print(&quot;%.2f&quot;%(3.7452)) &amp;rarr; 결과 : &lt;b&gt;3.75&lt;/b&gt; (반올림 되서 2째자리까지만 출력)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Q : print(&quot;%.2f&quot;%(3.7452)) 랑 print(round(3.7452,2)) 는 같은 값을 출력하면 같은 것인가?&lt;br /&gt;A : 아니오 앞에 &quot;%.2f&quot;는 문자열을 변환시킨것, 뒤에 round는 숫자 자체를 반올림해서 실제 계산에 바로 활용 가능&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실수값에서 소수점 없이 출력 할 때&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. %.0f&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. int() &lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; 대신 반올림은 안됨&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;: ' ', &quot; &quot;, &lt;u&gt;''' ''', &quot;&quot;&quot; &quot;&quot;&quot;&lt;/u&gt;&lt;br /&gt;&lt;u&gt; &amp;rarr; 따옴표 3개는 여러 라인을 하나의 문자열로 처리할 때 사용 가능&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;\n : 줄바꿈 문자&lt;/li&gt;
&lt;li&gt;\' : 작은 따옴표&lt;/li&gt;
&lt;li&gt;\&quot; 큰 따옴표&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;연산자 사용&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;+ : 피연산자가 모두 문자열이면 문자열 연결(복합) 연산자로 사용&lt;/li&gt;
&lt;li&gt;* : 문자열*n이면, n만큼 문자열 반복&lt;/li&gt;
&lt;/ul&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;i&gt;인덱스&lt;/i&gt; : 항상 0부터 시작, len(문자열)-1]은 마지막 , 뒤에서부터는 -1로 시작&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;변수[start:end] &amp;rarr; start ~ end-1 까지의 문자열 추출&lt;/li&gt;
&lt;li&gt;변수[:end] &amp;rarr; 0(처음)부터 ~ end - 1 까지의 문자열 추출&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;&lt;i&gt; : 앞에 start가 생략되면 = 처음부터(인덱스 0부터)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변수[start:] &amp;rarr; start ~ 문자열 끝까지 추출 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;: 뒤에 end가 생략되면 = 끝까지( 인덱스[len(변수)- 1]까지&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변수[:] &amp;rarr; start, end 모두 생략시 , 문자열 전체를 추출&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Q : 인덱싱과 슬라이싱 차이는?&lt;br /&gt;&lt;/span&gt;A : 인덱싱은 문자 하나 추출, 슬라이싱은 문자 하나 이상 추출&lt;/li&gt;
&lt;/ul&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;문자열 &amp;rarr; 리스트로 변경 &amp;rarr; 리스트 부분 변경 &amp;rarr; 문자열로 변경&lt;/li&gt;
&lt;li&gt;슬라이싱 조합을 통해 새로운 문자열을 생성&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/37</guid>
      <comments>https://yujung820.tistory.com/37#entry37comment</comments>
      <pubDate>Thu, 17 Jul 2025 11:32:32 +0900</pubDate>
    </item>
    <item>
      <title>비트 연산자(시프트)</title>
      <link>https://yujung820.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 좌측 시프트(&amp;lt;&amp;lt;)&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;lt;&amp;lt; 모양이 &amp;larr; 화살표 모양이랑 동일하니 이해하기 쉽게&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 숫자를 왼쪽으로 밀어버리고 맨 뒤에 새로 생긴 칸에는 0 넣으면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-2의 n제곱 곱하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752542879496&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;x = 5			# x를 이진수로 표현하면 0101
y = x &amp;lt;&amp;lt; 1		# x 비트를 왼쪽으로 한칸 이동 후 y에 저장 = 이진수를 표현된 x를 왼쪽으로 한 칸 밂
				# 0101을 한 칸 밀면 =&amp;gt; 1010이 됨
print(y)		# y는 1010이므로 십진수로 표현하면 결과 : 10&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;size18&quot;&gt;&lt;b&gt;2. 우측 시프트(&amp;gt;&amp;gt;)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비트를 오른쪽으로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 모양이 &amp;rarr; 모양이랑 동일하니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 숫자를 오른쪽으로 밀어버리고 맨 앞에 새로 생긴 칸에는 0 넣음(사실상 생략 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 좌측 시프트와 다르게 맨 뒤 비트가 1인 상태로 뒤로 밀어버리면 소수점으로 넘어가는데 소수점은 버림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 2의 n제곱으로 나누기&lt;/p&gt;
&lt;pre id=&quot;code_1752543290351&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;x = 20			# x를 이진수로 표현하면 10100
y = x &amp;gt;&amp;gt; 2		# x를 오른쪽으로 2칸 밀어버린 값을 y에 저장	
				# 10100을 두칸 밀어버린 결과인 00101를 y에 저장
print(y)		# 00101를 10진수로 변환하면 결과 : 5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/36</guid>
      <comments>https://yujung820.tistory.com/36#entry36comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:35:00 +0900</pubDate>
    </item>
    <item>
      <title>머신 러닝</title>
      <link>https://yujung820.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ML(Machine Learinig)&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;; AI 구현기술 &amp;rarr; 머신 러닝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 &lt;br /&gt;├─ 딥러닝&amp;nbsp;&lt;br /&gt;│&amp;nbsp;&amp;nbsp;├─ RNN &amp;rarr; 언어 모델 &amp;rarr; 시계열 분석 &lt;br /&gt;│&amp;nbsp;&amp;nbsp;└─&amp;nbsp;CNN&amp;nbsp;&amp;rarr;&amp;nbsp;컴퓨터&amp;nbsp;비전&amp;nbsp;&amp;rarr;&amp;nbsp;이미지/비디오&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;딥러닝 ; 머신러닝의 한 분야&lt;/li&gt;
&lt;li&gt;RNN ; 순환 신경망, 시계열 데이터나 순서가 있는 데이터 처리&lt;/li&gt;
&lt;li&gt;언어 모델 ; 문장이나 단어의 확률 분포를 예측(GPT)&lt;/li&gt;
&lt;li&gt;시계열 분석 ; 시간의 흐름에 따라 변화는 데이터 분석&lt;/li&gt;
&lt;li&gt;CNN ; 합성곱 신경망, 이미지 처리에 강함&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;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 좋은 답변을 생성하도록 도와줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 답변의 품질(Quality)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일관성(Consistency)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 관련성(Relevance)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 편향성(Bias)&lt;/p&gt;
&lt;p data-ke-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>IT 정리/IT 인프라</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/34</guid>
      <comments>https://yujung820.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 11 Jul 2025 11:00:17 +0900</pubDate>
    </item>
    <item>
      <title>문자열 변환</title>
      <link>https://yujung820.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 ▶ 대문자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 문자열을 대문자로 변환하려면 upper() 이용&lt;/p&gt;
&lt;pre id=&quot;code_1752127807971&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;str = &quot;hello&quot;
print(str.upper())

#결과 HELLO&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 ▶ 소문자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 문자열을 소문자로 변환하려면 lower() 이용&lt;/p&gt;
&lt;pre id=&quot;code_1752127870531&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;str = &quot;HELLO&quot;
print(str.lower())

#결과 hello&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 ▶ 첫글자만 대문자 나머지는 소문자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 첫글자만 대문자로 만들고 나머지는 소문자로 만드려면 capitalize() 이용&lt;/p&gt;
&lt;pre id=&quot;code_1752128034947&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;str = &quot;hELLO&quot;
print(str.capitalize())

#결과 Hello&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;Q : 대문자로 입력받은 문자열을 소문자로, 소문자를 대문자로 출력하려면?&lt;/p&gt;
&lt;pre id=&quot;code_1752127739478&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#문자열 입력받아 리스트에 삽입
str = list(input())

#l은 리스트의 길이
l=len(str)

#0부터 l-1값까지 반복
for i in range(l):
    if str[i] &amp;lt; 'a' :
        str[i] = str[i].lower() #대문자를 소문자로
    else :
        str[i] = str[i].upper() #소문자를 대문자로
        
print(''.join(str))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 lower와 upper만 사용해도 충분히 구할 수 있지만 더 간단하게 코드 짤 수 있는 방법이 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▶swapcase() 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 소문자를 대문자로 대문자를 소문자로 바꿔준다. 즉, 서로 바꿔줌&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;str=input()
str=str.swapcase()
print(str)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/33</guid>
      <comments>https://yujung820.tistory.com/33#entry33comment</comments>
      <pubDate>Thu, 10 Jul 2025 15:16:57 +0900</pubDate>
    </item>
    <item>
      <title>HTTP와 프로토콜 등 네트워크 정리</title>
      <link>https://yujung820.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;HTTP란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 인터넷상에서 데이터를 주고 받기 위한 서버/ 클라이언트 모델을 따르는 프로토콜&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HTTP의 메소드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; request하는 방식 정의&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;GET : 주어진 URL에서 자원 요청&lt;/li&gt;
&lt;li&gt;POST : 주어진 URL로 자원의 생성 요청&lt;/li&gt;
&lt;li&gt;PUT : 주어진 URL로 자원의 대체 요청&lt;/li&gt;
&lt;li&gt;DELETE : 주어진 URL로 자원의 삭제 요청&lt;/li&gt;
&lt;li&gt;HEAD : 주어진 URL에서 자원의 헤더만을 요청, &lt;br /&gt;해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해 사용&lt;/li&gt;
&lt;li&gt;OPTIONS : 주어진 URL에서 처리 가능한 메소듸 목록 요청&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HTTP 요청, 응답&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP Client가 요청 보낼 때 가능한 경우 2가지 : GET request, POST request&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP Server가 응답 돌려줄때 지켜야 하는 규약 : 2xx, 3xx etc&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;100번대 : 정보 응답 &amp;rarr; 클라이언트가 요청을 계속 진행해도 된다는 중간 메세지&lt;/li&gt;
&lt;li&gt;200번대 : 성공&lt;/li&gt;
&lt;li&gt;300번대 : 리다이렉션 &amp;rarr; 요청한 자원이 다른 곳에 있음&lt;/li&gt;
&lt;li&gt;400번대 : Not found&amp;nbsp;&amp;rarr; 서버는 살아 있지만 요청의 문제&lt;/li&gt;
&lt;li&gt;500번대 : 서버 오류
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;서버 내부 문제 : 서버의 설정, 코드, 응용 프로그램 등의 오류&lt;/li&gt;
&lt;li&gt;네트워크 문제 : 클라이언트와 서버 사이의 중간 서버가 통신 오류 일으킴&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XR2b4/btsPaLAgS21/WAbKFHPTXEcZCITXVtteX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XR2b4/btsPaLAgS21/WAbKFHPTXEcZCITXVtteX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XR2b4/btsPaLAgS21/WAbKFHPTXEcZCITXVtteX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXR2b4%2FbtsPaLAgS21%2FWAbKFHPTXEcZCITXVtteX1%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;302&quot; height=&quot;150&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스위치는 L2 장비(Physical + MAC)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 그저 물리적 장비들 묶어놓은것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터는 L3장비(Physical + MAC +Network)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; network 포함 되어 있어서 IP 주소 해석 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;there4;&amp;nbsp;스위치는 라우터랑 함께 있어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPSAxz/btsPar27XbU/h3vKtVZtLcl3qMiIzKpQUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPSAxz/btsPar27XbU/h3vKtVZtLcl3qMiIzKpQUK/img.png&quot; data-alt=&quot;LAN + LAN +&amp;amp;nbsp; &amp;amp;middot; &amp;amp;middot; &amp;amp;middot; + LAN&amp;amp;nbsp; &amp;amp;rarr; WAN&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPSAxz/btsPar27XbU/h3vKtVZtLcl3qMiIzKpQUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPSAxz%2FbtsPar27XbU%2Fh3vKtVZtLcl3qMiIzKpQUK%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;276&quot; height=&quot;210&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LAN + LAN +&amp;nbsp; &amp;middot; &amp;middot; &amp;middot; + LAN&amp;nbsp; &amp;rarr; WAN&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;193&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k7BrR/btsPcVucKev/W0DHWq6IhZqUj1hkrqrPu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k7BrR/btsPcVucKev/W0DHWq6IhZqUj1hkrqrPu1/img.png&quot; data-alt=&quot;bandwith : 대역폭 throughput : 얼마나 빨리 처음부터 끝까지 도달하느냐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k7BrR/btsPcVucKev/W0DHWq6IhZqUj1hkrqrPu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk7BrR%2FbtsPcVucKev%2FW0DHWq6IhZqUj1hkrqrPu1%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;244&quot; height=&quot;120&quot; data-origin-width=&quot;193&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;bandwith : 대역폭 throughput : 얼마나 빨리 처음부터 끝까지 도달하느냐&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;라우터&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;; 라우터는 네트워크와 네트워크 사이를 연결&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;= 데이터가 어디로 가야 할지 길을 안내해주는 네트워크의 네비게이션&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;역할&lt;/u&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;패킷 전달(Routing)&lt;br /&gt;&amp;rarr; 데이터가 목적지에 도달할 수 있도록 최적의 경로 찾음&lt;/li&gt;
&lt;li&gt;네트워크 연결&lt;/li&gt;
&lt;li&gt;IP 주소 관리 및 NAT 기능&lt;br /&gt;&amp;rarr; 내부 IP 를 외부 IP로 바꿔주는 NAT(Network Address Translation) 기능&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;u&gt;목적&amp;nbsp;&lt;/u&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;u&gt;종류&lt;/u&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;거리 벡터 라우팅 프로토콜&amp;nbsp;&lt;br /&gt;- 기본 원리 : 목적지까지의 거리(홉 수)와 방향(다음 라우터)에 대한 정보 기반으로 경로 결정&lt;br /&gt;- 정보 전파 : 일정 시간마다 전체 라우팅 테이블을 이웃 라우터에 전송&lt;br /&gt;- 장점 ; 구현 단순 / 단점 ; 속도 느림&lt;br /&gt;예 ) RIP ; 최대 15홉&lt;/li&gt;
&lt;li&gt;링크 상태 라우팅 프로토콜&lt;br /&gt;- 기본 원리 : 모든 라우터가 전체 네트워크 토폴리지를 파악 후, 최적 경로 계산&lt;br /&gt;- 정보 전파 : 변경사항이 있을 때만 상태 정보를 주변에 전달&lt;br /&gt;- 장점 ; 빠른 속도, 정확성 / 단점 ; 구현 복잡&lt;br /&gt;예 ) OSPF ; Dijkstra 알고리즘을 사용해 최단 경로 계산&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;내부 vs 외부&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IGP : 하나의 자율 시스템 내부에서 사용&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표 ) RIP, OSPF&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- EGP : 여러 자율 시스템 간 라우팅에 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표 ) BGP&lt;/p&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;ICMP(Inernet Contro Message Protocol)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;;TCP/IP가 구현된 컴퓨터 및 네트워크 기기 사이에서 통신 상태를 확인할 때 이용하는 프로토콜&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OSI 3계층(네트워크 계층)에서 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계층은 IP와 동일, 하지만 IP 위에서 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ICMP는 TCP나 UDP를 사용하지 않고 단독으로 움직임. 사실당 TCP와 UDP와 동일한 위치(전송 계층)에 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 포트 번호는 존재 X&lt;/p&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;RTT(Round Trip Time)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 우리가 핑 보냈을 때 다시 돌아올 때까지 걸리는 시간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;URL&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;http://&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 93.156.127.12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:80&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /news&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /index.html&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;주소&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 포트번호&amp;nbsp; &amp;nbsp; 디렉터리 이름&amp;nbsp; &amp;nbsp; &amp;nbsp; 파일 이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by2sm3/btsPcwPKw1P/D4BEtngkN3E3Mz3LtTMmP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by2sm3/btsPcwPKw1P/D4BEtngkN3E3Mz3LtTMmP0/img.png&quot; data-alt=&quot;클라이언트, 서비스, 리졸버, DNS 서버의 관계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by2sm3/btsPcwPKw1P/D4BEtngkN3E3Mz3LtTMmP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby2sm3%2FbtsPcwPKw1P%2FD4BEtngkN3E3Mz3LtTMmP0%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;570&quot; height=&quot;533&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클라이언트, 서비스, 리졸버, DNS 서버의 관계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/IT 인프라</category>
      <category>참고 : https://velog.io/@dnjscksdn98/http-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c%ec%97%90-%eb%8c%80%ed%95%98%ec%97%ac</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/31</guid>
      <comments>https://yujung820.tistory.com/31#entry31comment</comments>
      <pubDate>Thu, 10 Jul 2025 09:47:45 +0900</pubDate>
    </item>
    <item>
      <title>7. 파일 접근 권한 관리와 프로세스 관리</title>
      <link>https://yujung820.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일의 속성을 보는 명령어 : ls -l&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;b&gt;파일 접근 권한 종류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;r-x -w- wx : 3개씩 3묶음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 앞에서 세개씩 사용자, 그룹, 기타 권한(사용자도 아니고 사용자도 속한 그룹도 아닌 소유자)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- r은 읽기 권한, w는 쓰기 권한, x는 실행 권한으로 표기&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;507&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ox4Q6/btsO9KufJNz/M1UqkAPOi3CTwkiU4NMOS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ox4Q6/btsO9KufJNz/M1UqkAPOi3CTwkiU4NMOS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ox4Q6/btsO9KufJNz/M1UqkAPOi3CTwkiU4NMOS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fox4Q6%2FbtsO9KufJNz%2FM1UqkAPOi3CTwkiU4NMOS0%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;34&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 root : 소유자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 root : 소유 그룹(파일이 속한 그룹)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2223 : 파일 크기(byte)&lt;/p&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;size18&quot;&gt;&amp;rarr; &lt;b&gt;chmod&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기호 모드와 숫자 모드 두 가지로 이용 가능&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;r - x 로 바꾸고 싶다면 &amp;rarr; 1 0 1 &amp;rarr; 1*4 + 0*2 + 1*1 = 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; chmod 542 text.txt = 사용자에 읽기와 실행권한 , 그룹에 읽기권한, 기타에 쓰기 권한 제공&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q :리눅스 셸에서 !로 시작하는 명령어는 ??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A :&amp;nbsp; !l, !e, !v 등등 !로 시작하는 명령어는 명령어 앞 글자를 기준으로 이전에 쳤던 명령어를 재실행하는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; !e = 마지막으로 e로 시작한 명령어 실행&lt;/p&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;/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;rarr; 파일 실행시 OS가 코드, 데이터, 스택, 힙 등 메모리 공간을 할당하고 이를 OS 안에서 하나의 프로세스로 실체화(구현)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; CPU가 실행할 수 있도록 PCB도 만들어 관리&lt;/p&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;명령어 ps&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ps -ef : 시스템에서 실행 중인 모든 프로세스의 정보 + 자세한 정보를 출력&lt;/li&gt;
&lt;li&gt;ps -aux :&amp;nbsp; 터미널에서 실행시킨 프로세스의 정보 + 프로세스 소유자 이름, CPU사용량, 메모리 사용량 등 상세 정보 + 시스템에서 실행중인 모든 프로세스의 정보를 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;명령어 kill&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 지정한 시그널을 프로세스에게 보낸다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;kill -2 PID : 인트럽트 시그널을 보낸다.&lt;/li&gt;
&lt;li&gt;kill -9 PID : 프로세스를 강제로 종료&lt;/li&gt;
&lt;li&gt;kill -15 PID : 프로세스와 관련된 파일들을 정리하고 종료, 종료되지 않은 프로세스가 있을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;명령어 nohup&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; &lt;u&gt;로그아웃한 후에도 백그라우드 작업을 계속 실행 = 특정 프로세스를 백그라운드로 전향시킬 수 있는 명령어&lt;/u&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;URL 의 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http:// (&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;프로토콜) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;+ naver.com(도메인 이름) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;+ :80(port number [기본이 80]) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;+ querystring&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &amp;rarr; 쿼리 스트링에는 path + resource name이 포함되어 있음&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct4IXb/btsPck8vtlu/hMvdmLXXMVboH6ZT7k3Y11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct4IXb/btsPck8vtlu/hMvdmLXXMVboH6ZT7k3Y11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct4IXb/btsPck8vtlu/hMvdmLXXMVboH6ZT7k3Y11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct4IXb%2FbtsPck8vtlu%2FhMvdmLXXMVboH6ZT7k3Y11%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;660&quot; height=&quot;220&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;각각의 IP주소가 다른 이유&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ 사설 IP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 공유기 / VM 등 로컬 네트워크에서만 쓰이는 IP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;○&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 공인 IP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;; 인터넷에 실제로 노출되는 IP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 여러 내부 IP들이 하나의 공인 IP를 통해 인터넷 연결 &amp;rarr; NAT(주소 변환) 때문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1275&quot; data-start=&quot;1241&quot;&gt;ifconfig = &lt;b&gt;VM 리눅스 안의 사설 IP&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1309&quot; data-start=&quot;1276&quot;&gt;ipconfig = &lt;b&gt;윈도우 호스트의 사설 IP&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1347&quot; data-start=&quot;1310&quot;&gt;네이버 &quot;내 IP&quot; = &lt;b&gt;공인 IP (공유기가 가진 주소)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/IT 인프라</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/30</guid>
      <comments>https://yujung820.tistory.com/30#entry30comment</comments>
      <pubDate>Wed, 9 Jul 2025 12:21:47 +0900</pubDate>
    </item>
    <item>
      <title>6. shell</title>
      <link>https://yujung820.tistory.com/29</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;메모리의 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- disk&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- RAM (Read Access Memory) - write o, read o&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ROM (Read Only Memory) - write x, read o&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvuKF4/btsO8YfvsCc/5QJYuPeav0ls0jDnHfDNU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvuKF4/btsO8YfvsCc/5QJYuPeav0ls0jDnHfDNU1/img.png&quot; data-alt=&quot;메모리 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvuKF4/btsO8YfvsCc/5QJYuPeav0ls0jDnHfDNU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvuKF4%2FbtsO8YfvsCc%2F5QJYuPeav0ls0jDnHfDNU1%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;220&quot; height=&quot;310&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;321&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;&lt;b&gt;static&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램과 수명을 같이 함 &amp;rarr;&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;heap&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;- 죽이지 않은 이상 static 영역처럼 존재&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;stack&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;code segment&lt;/b&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;667&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkWzyu/btsO9ruRdVb/TW02IRzxA2lyLdTlrmyzP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkWzyu/btsO9ruRdVb/TW02IRzxA2lyLdTlrmyzP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkWzyu/btsO9ruRdVb/TW02IRzxA2lyLdTlrmyzP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkWzyu%2FbtsO9ruRdVb%2FTW02IRzxA2lyLdTlrmyzP1%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;413&quot; height=&quot;441&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;kernel&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;- 커널은 시스템 자원 관리, 프로그램이 요청하는 작업 수행하는 중재&lt;/p&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;shell&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;- 예) bash, zsh, sh&lt;/p&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;linux&lt;/b&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;shell 의 기능&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;- bash : 리눅스의 기본 쉘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특수문자 &amp;gt;, &amp;gt;&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ &amp;gt; : 앞쪽의 실행 결과를 뒤의 파일에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;○ &amp;gt;&amp;gt; : 앞의 실행 결과를 뒤의 파일 의 끝부분에 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;233&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIklOa/btsPalNTSY6/aaO5dpl8RJ0wOhWzXuzNnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIklOa/btsPalNTSY6/aaO5dpl8RJ0wOhWzXuzNnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIklOa/btsPalNTSY6/aaO5dpl8RJ0wOhWzXuzNnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIklOa%2FbtsPalNTSY6%2FaaO5dpl8RJ0wOhWzXuzNnK%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;213&quot; height=&quot;200&quot; data-origin-width=&quot;233&quot; data-origin-height=&quot;219&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;쉘에서 커널로 요청 보내면 과정을 처리하는 과정 : blocked process&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;blocked process가 밖에 스레드와 연결 되서 처리 되는 과정&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nonblocked process&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cseQmn/btsO90XRYbl/lDFMVKfP1lQ10sYmdqxIyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cseQmn/btsO90XRYbl/lDFMVKfP1lQ10sYmdqxIyK/img.png&quot; data-alt=&quot;시스템 환경 설정 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cseQmn/btsO90XRYbl/lDFMVKfP1lQ10sYmdqxIyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcseQmn%2FbtsO90XRYbl%2FlDFMVKfP1lQ10sYmdqxIyK%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;526&quot; height=&quot;338&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;338&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;652&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gw6nN/btsO8YfoNYD/tG2fmQMKNARstqUZqv1Xdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gw6nN/btsO8YfoNYD/tG2fmQMKNARstqUZqv1Xdk/img.png&quot; data-alt=&quot;사용자 환경 설정 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gw6nN/btsO8YfoNYD/tG2fmQMKNARstqUZqv1Xdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGw6nN%2FbtsO8YfoNYD%2FtG2fmQMKNARstqUZqv1Xdk%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;652&quot; height=&quot;295&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;295&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;&lt;b&gt;쉘 스크립트&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: OS 이용하기 위한 명령어&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;쉘 스크립트로 이용할 수 있게 실행 권한 부여해야 함 &amp;rarr; chmod 이용&lt;/p&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;- 파일명.sh 형태로 암묵적으로 정함 (확장자는 아님)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V5Ni0/btsPfHwhhvU/9r6tm2bNeA9fPYstbu6pG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V5Ni0/btsPfHwhhvU/9r6tm2bNeA9fPYstbu6pG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V5Ni0/btsPfHwhhvU/9r6tm2bNeA9fPYstbu6pG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV5Ni0%2FbtsPfHwhhvU%2F9r6tm2bNeA9fPYstbu6pG1%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;348&quot; height=&quot;185&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#!/bin/sh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr;&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;/bin/sh = 해당 경로에 가면 dash쉘(default 쉘)이 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/IT 인프라</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/29</guid>
      <comments>https://yujung820.tistory.com/29#entry29comment</comments>
      <pubDate>Wed, 9 Jul 2025 11:07:31 +0900</pubDate>
    </item>
    <item>
      <title>5. vi 에디터</title>
      <link>https://yujung820.tistory.com/28</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JIYQ5/btsO9Z5hSkk/YQ3IrW0QCZYDOixU7KoqoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JIYQ5/btsO9Z5hSkk/YQ3IrW0QCZYDOixU7KoqoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JIYQ5/btsO9Z5hSkk/YQ3IrW0QCZYDOixU7KoqoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJIYQ5%2FbtsO9Z5hSkk%2FYQ3IrW0QCZYDOixU7KoqoK%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;448&quot; height=&quot;361&quot; data-origin-width=&quot;448&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;vi 파일명 : 이미 기존에 있는 파일이 있다면 해당 파일로 진입, 없다면 새로 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;명령모드 &amp;rarr; 입력 모드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i : insert&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a : append&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력 모드 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; 명령 모드&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Esc = &amp;gt; 대부분 저장하기 위해 명령 모드로 돌아옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령 모드 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; (vi내에서) 마지막 행 모드&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;- w ; 저장만 함 , 종료는 x&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- :wq ; 저장하고 종료, 오류 있을 시 알려줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- :wq! ; 저장하고 강제 종료, 오류 있어도 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- q ; 종료, 오류 있을 시 알려줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- q! ; 강제 종료&lt;/p&gt;
&lt;p data-ke-size=&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;Q : insert 모드에서 문자를 지우려면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A : 현재 입력 모드이기 때문에 Esc 키 눌러서 명령 모드로 이동한 뒤 'x'눌러서 한 글자씩 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 한 줄씩 삭제 하려면 원하는 행에 커서 놓고 'dd'&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;Q : 한 줄 모두 복사하려면 ?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A : 'yy' 누르면 copy &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; 붙여놓기 하고 싶은 곳에 커서 놓고 'pp' 누르면 paste&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q : 에디터가 너무 길어져서 숫자가 필요하면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A :&amp;nbsp; :set number라고 치면 행번호 나타남&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q : 한 줄의 글이 너무 길어서 바로 맨 뒤로 가서 입력하고 싶다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A : Shift + A 누르면 바로 이동해서 append 모드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q :&amp;nbsp; 여러 줄을 복사하고 싶다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A : 명령어 모드에서 숫자 + y 누르고 이동해서 p누르면 됨&lt;/p&gt;
&lt;p data-ke-size=&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>IT 정리/IT 인프라</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/28</guid>
      <comments>https://yujung820.tistory.com/28#entry28comment</comments>
      <pubDate>Tue, 8 Jul 2025 16:57:24 +0900</pubDate>
    </item>
    <item>
      <title>4. Linux</title>
      <link>https://yujung820.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;유닉스와 리눅스&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unix : 리눅스 이전의 OS가 명령어 버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linux : 유닉스와의 호환성 및 공개 소프트웨어, 유닉스 경량화&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eqNAZG/btsO7h0xvCM/pFFjft6dtfAcrKEekE6KR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eqNAZG/btsO7h0xvCM/pFFjft6dtfAcrKEekE6KR0/img.png&quot; data-alt=&quot;리눅스 커널 : 우리가 일반적으로 말하는 OS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eqNAZG/btsO7h0xvCM/pFFjft6dtfAcrKEekE6KR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeqNAZG%2FbtsO7h0xvCM%2FpFFjft6dtfAcrKEekE6KR0%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;399&quot; height=&quot;226&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리눅스 커널 : 우리가 일반적으로 말하는 OS&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCayVx/btsO8lU9YmP/Pt1XazvsB8fjoJIkwBVwVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCayVx/btsO8lU9YmP/Pt1XazvsB8fjoJIkwBVwVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCayVx/btsO8lU9YmP/Pt1XazvsB8fjoJIkwBVwVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCayVx%2FbtsO8lU9YmP%2FPt1XazvsB8fjoJIkwBVwVK%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;462&quot; height=&quot;187&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 앱의 명령을 OS 내부 커널에 전달, 처리 후 하드웨어로 전달&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 앱&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;harr; OS(커널)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;harr; 하드웨어 흐름&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 리눅스는 운영체제를 뜯을 수 있다. 이때 운영체제를 커널로 부른다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;OS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OS는 앱과 하드웨어 사이를 이어주는 중재자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자원 관리, 프로세스 관리, 파일 시스템 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;커널&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운영체제의 핵심 부분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하드웨어와 밀접하게 상호작용, 사용자 프로그램은 커널 통해 간접적으로 하드웨어 접근&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 앱의 명령 받음 &amp;rarr; 하드웨어에서 실행 &amp;rarr; 결과 앱에 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로세스 스케줄링, 메모리 관리, 디바이스 제어, 시스템 콜 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 커널도 결구 OS의 일부, OS의 핵심 구성 요소&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;쉘&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 커널을 핸드링 하기 위한 명령어 집합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자가 명령어를 입력해서 커널과 상호작용할 수 있도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;리눅스는 운영체제 전체 의미, 정확히는 리눅스 커널&lt;/li&gt;
&lt;li&gt;오픈소스로 자유롭게 수정, 재배포 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;명령어 정리&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;sudo&lt;/b&gt; : root로 명령어 실행&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;adminstratior : 모든 권한을 가진 사용자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 윈도우에서 쓰는 말로 리눅스의 root와 같은 말&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;root 계정&amp;nbsp;&lt;/u&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;u&gt;사용자 계정&lt;/u&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;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;ifconfig&lt;/b&gt; : 네트워크 인터페이스의 상태를 확인하고 설정&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;inet 6 : 6바이트로 구성된 주소체계&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;inet : 4바이트로 구성된 주소체계&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;inet이 고갈될 줄 알고 미리 만들어놓은 inet6&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;825&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1L5H0/btsO7wQJTZG/sSgdkwRpvKMc4OlDdgJvE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1L5H0/btsO7wQJTZG/sSgdkwRpvKMc4OlDdgJvE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1L5H0/btsO7wQJTZG/sSgdkwRpvKMc4OlDdgJvE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1L5H0%2FbtsO7wQJTZG%2FsSgdkwRpvKMc4OlDdgJvE1%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;825&quot; height=&quot;396&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;ls&lt;/b&gt; (+옵션): list 줄임말로 하위 폴더 보여줌&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- a : 숨겨진 모든 파일 보여줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- l :&amp;nbsp; 파일들의 상세 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- d : 디렉터리 자체 정보 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- i : 첫번째 행의 inode 번호 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- A : ' . '와 ' .. '를 제외한 모든 파일 목록을 출력&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;man 명령&lt;/b&gt; : 뒤에 나오는 명령어에 대한 사용 방법&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex ) man ls : ls에 대한 설명 나옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- date, clear : 현재 시간, 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- passwd : 비밀번호 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pwd : 현재 내가 위치한 경로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- mkdir : 디렉터리 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- rmdir : 디렉터리 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- rm : 파일 삭제&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rm -rf : 파일 안에 존재 유무 상관없이 무조건 지움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 rm만 사용하면 디렉터리를 지울 수 없음&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cat : 파일 내용 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cp : 파일이나 디렉터리 복사&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cp -r : 디렉터리 복사시에는 -r이 붙어야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cp 옵션 파일1 파일 2 : 파일 1을 파일 2에 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-i : 파일 2가 이미 존재한다면 덮어쓸 것인지 물어본다&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- mv : 파일 또는 디렉터리 이동&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mv -i&amp;nbsp; 파일1 파일 2 : 파일 2가 존재하면 덮어쓸 것인지 물어봄&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ps : 프로세스 보여줌&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps -ef 모든 프로세스 보여줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grep 조건 파일 : 필터링 된 파일들 보여줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex ) ps -ef | grep &quot;bash&quot; == ▶ps -ef 하면 모든 프로세스 보여주는데 bash라고 되어있는 텍스트 라인만 추출 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex ) grep -l &quot;de&quot; *.c == 확장자가 .c인 모든 파일에서 &quot;de&quot;가 포함된 파일명을 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;디렉터리와 파일 사용법&lt;/b&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;760&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sQjFI/btsO86JGarg/bggF3hlKx2XPyehCZUXQek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sQjFI/btsO86JGarg/bggF3hlKx2XPyehCZUXQek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sQjFI/btsO86JGarg/bggF3hlKx2XPyehCZUXQek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsQjFI%2FbtsO86JGarg%2FbggF3hlKx2XPyehCZUXQek%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;760&quot; height=&quot;269&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;bin : execution 파일 포함해서 기본 명령어 실행파일 저장&lt;/li&gt;
&lt;li&gt;etc : 설정 파일 저장(환경 설정, 설정 스크립트), 네트워크와 관련된 설정 파일&lt;/li&gt;
&lt;li&gt;usr : 사용자용 프로그램과 라이브러리 등장&lt;/li&gt;
&lt;li&gt;home : 일반 사용자들의 개인 폴더가 있는 장소&lt;/li&gt;
&lt;li&gt;lib :&amp;nbsp; 공통 라이브러리 파일 저장&lt;/li&gt;
&lt;li&gt;home 디렉터리 아래에 tmp라는 디렉토리를 만들면?? home - 사용자(yujung) - tmp 로 만들어짐&lt;/li&gt;
&lt;/ul&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;1. 절대 경로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 반드시 ' / '로 시작(' / ' = 최상단 위치 = root )&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;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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) cd ./../lib &amp;rarr; ' . '는 현재 폴더를 나타냄 : 현재 폴더의 상위 폴더를 가서 하위 디렉터리인 lib로 이동&lt;/p&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;홈 디렉터리로 바로 이동 : cd ~ or cd&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;b&gt;파일 생성하는 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;'abc' &amp;gt; a.out &amp;rarr; command&amp;nbsp; 오류&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해결 방법 : echo 'abc' &amp;gt; a.out&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;파일 생성 방법은 echo &quot;문자열&quot; &amp;gt; 파일명&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;echo &quot;문자열&quot; 하면 바로 문자열이 출력 된다.&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bceRvj/btsPaJgeWzv/LIaLgums416U4EesRPe7E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bceRvj/btsPaJgeWzv/LIaLgums416U4EesRPe7E1/img.png&quot; data-alt=&quot;보고 의미 해석해보기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bceRvj/btsPaJgeWzv/LIaLgums416U4EesRPe7E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbceRvj%2FbtsPaJgeWzv%2FLIaLgums416U4EesRPe7E1%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;312&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;312&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/IT 인프라</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/26</guid>
      <comments>https://yujung820.tistory.com/26#entry26comment</comments>
      <pubDate>Tue, 8 Jul 2025 10:59:40 +0900</pubDate>
    </item>
    <item>
      <title>3. simple network</title>
      <link>https://yujung820.tistory.com/25</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;dest/src/dest port/src port + 형태 &amp;rarr;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;이 다섯가지가 있어야 통신을 할 수 있음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cl4mW/btsO7yfg9bt/aaK8ZpBMYdUGfWO9SCag51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cl4mW/btsO7yfg9bt/aaK8ZpBMYdUGfWO9SCag51/img.png&quot; data-alt=&quot;End - to - End 통신 절차&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cl4mW/btsO7yfg9bt/aaK8ZpBMYdUGfWO9SCag51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCl4mW%2FbtsO7yfg9bt%2FaaK8ZpBMYdUGfWO9SCag51%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;1202&quot; height=&quot;444&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;End - to - End 통신 절차&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- TCP 헤더에 붙을 지 UDP 헤더에 붙을 지 결정하는 건 데이터의 특성에 따라 달라진다. .&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- UDP는 &lt;u&gt;비연결형, 오류 복구를 하지 않음, 신뢰성이나 순서 보장은 하지 않음.&lt;/u&gt;&amp;nbsp; 대신 오버헤드가 적음 =&amp;gt; 속도 빠름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;보내는 데에 의의를 둠(택배) &amp;rarr;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; 게임에 많이 이용 : 속도가 빨라야 해서&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- TCP는 &lt;u&gt;책임을 지는 스타일(등기우편)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;- UDP는 Reciever크기도 상관 없이 무작정으로 보내고, &lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;- TCP는 send한걸 Reciever에서 응답한 후 다시 전송(순차적) + 크기 고려함(Flow Control)&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 소켓 : 프로그램에서 통신을 구현할 때 사용하는 API, TCP 소켓, UDP 소켓 중 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 소켓은 UDP와&amp;nbsp; TCP 중에 뭘 고를지 결정 + 응용 프로그램에서 OS의 네트워크 계층과 통신하기 위한 IFC&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IP header는 출발지 IP 주소(=src address)와 목적지 IP 주소(=dest address)를 붙여줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IP는 주소 체계와 라우팅을 담당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IP(Internet Protocol)는 4바이트의 주소체계 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 깃발 꽂기 : 인터넷 프로토콜에서 최단 경로를 찾는 알고리즘 (shortest process)&amp;nbsp; =&amp;gt; 라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LAN(Local Area Network)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 여러 LAN과 라우터, 중계 장치 묶어서 WAN(Wide Area Network)을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LAN 구축 기술과 WAN 구축 기술은 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IP 할당 안되면 통신 안 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 포트 번호 : UDP/TCP에서 사용하는 주소로 하나의 IP에서 여러 애플리케이션 구분 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dj2uh2/btsO6KNYtdk/BmUkjpbcNkdo55OryMvQaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dj2uh2/btsO6KNYtdk/BmUkjpbcNkdo55OryMvQaK/img.png&quot; data-alt=&quot;TCP header&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dj2uh2/btsO6KNYtdk/BmUkjpbcNkdo55OryMvQaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdj2uh2%2FbtsO6KNYtdk%2FBmUkjpbcNkdo55OryMvQaK%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;400&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TCP header&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GcHUo/btsO6CioTOi/fWonoaXgUPCjWAxsQ8pW00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GcHUo/btsO6CioTOi/fWonoaXgUPCjWAxsQ8pW00/img.png&quot; data-alt=&quot;UDP header&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GcHUo/btsO6CioTOi/fWonoaXgUPCjWAxsQ8pW00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGcHUo%2FbtsO6CioTOi%2FfWonoaXgUPCjWAxsQ8pW00%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;479&quot; height=&quot;244&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;UDP header&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transport Layer &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 송신 측에서 데이터를 어떤 방식으로 보낼지 udp와 tcp 중 선택&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;Internet Layer(Network Layer)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;:&amp;nbsp;깃발뽑기에서 최단 경로 돌려줄게 + 어디로 가야 알아야 최단경로를 찾든 말든 ( IP address)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가장 빠르다기보다는 장애가 난 곳을 우회하는 path 확보 (= 네비게이터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 패킷(ip header + ip data)이 목적지까지 가능 경로를 계산(라우팅)하는 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IP 주소를 통해 어디로 가야 최단 경로일지 결정&lt;/p&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;Link Layer :&lt;/b&gt;&amp;nbsp; 실제 데이터를 물리적 네트워크로 전송하는 계층&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터를 프레임으로 감싸고 0과 1의 전기 신호로 바꿔서 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;프레임&lt;/u&gt; 단위 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크 레이어에서 패킷이 링크 레이어에서는 &lt;u&gt;프레임&lt;/u&gt;으로 불림&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;- 헤드 부분에 MAC Address가 붙음 &amp;rarr; MAC 이용하면 속도가 빠름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- MAC 주소 기반 통신 &amp;rarr; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;MAC 주소는 유일한 주소 (IP주소는 바뀔 수 있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LAN안에서만 통신하기 위한 IP 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIw6LX/btsO7e9dW39/wlv7suWvzT3nkrCmZo8rMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIw6LX/btsO7e9dW39/wlv7suWvzT3nkrCmZo8rMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIw6LX/btsO7e9dW39/wlv7suWvzT3nkrCmZo8rMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIw6LX%2FbtsO7e9dW39%2Fwlv7suWvzT3nkrCmZo8rMK%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;626&quot; height=&quot;220&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;220&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;size18&quot;&gt;IP Addressing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; A~E로 다섯개로 클래스화 되어 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 적은 IP 주소의 갯수를 서브네팅을 하기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 서브넷팅 하는 이유 : 더 많은 PC에 IP 할당&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EuaMn/btsO7zTlR0n/oyVkk81Zf0Akz0Qrw0r8v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EuaMn/btsO7zTlR0n/oyVkk81Zf0Akz0Qrw0r8v0/img.png&quot; data-alt=&quot;IP Addressing&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EuaMn/btsO7zTlR0n/oyVkk81Zf0Akz0Qrw0r8v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEuaMn%2FbtsO7zTlR0n%2FoyVkk81Zf0Akz0Qrw0r8v0%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;591&quot; height=&quot;272&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IP Addressing&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- A : 0 + 7bit &amp;rarr; Network Address, 나머지 24bit &amp;rarr; Host Address&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- B : 10 + 14bit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr; Network Address, 나머지 16bit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; Host Address&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- C : 110 + 21bit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr; Network Address, 나머지 8bit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; Host Address&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; &lt;u&gt;A가 가장 큰 규모의 네트워크&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;멀티 캐스트와 브로드 캐스트의 차이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 멀티캐스트는 특정 주소 이용해서 서비스 가입한 호스트들에게 데이터 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 브로드캐스트는 네트워크에 연결된 모든 기기에게 데이터 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 뒤에 있는 host address가 모두 1로 채워지는 경우(255.255.255.255)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Subnet Mask&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 200.23.16.0/&lt;b&gt;23 :&lt;/b&gt; 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;CIDR : 뒤에 네트워크 주소 넣어가지고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q : 220.67.124.32/&lt;span style=&quot;color: #009a87;&quot;&gt;25&lt;/span&gt; ??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;11011100. 01000011. 01111100. 0&lt;/span&gt;0100000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 앞에 25개가 네트워크 , 뒤에 7개가 호스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서브넷&lt;/b&gt;은?? 네트워크를 1로 채우고 나머지 7bit를 0으로 채운다. (11111111 11111111 11111111 10000000)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0000000~1111111 까지 총 128 - 1개 만큼 호스트 붙일 수 있음.&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;- subnet 부분의 주소는 비트 그대로 표기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 호스트 부분의 주소는 0으로 표기&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;- 변환된 주소 뒤에 / 이후 subneet 부분의 비트 수를 정수로 표기 (25 bits)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 정리/IT 인프라</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/25</guid>
      <comments>https://yujung820.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 7 Jul 2025 09:21:49 +0900</pubDate>
    </item>
    <item>
      <title>enumerate 정리</title>
      <link>https://yujung820.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;enumerate 사용하는 경우&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;for index, value in enumerate(리스트):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; index : 현재 반복중이 요소의 인덱스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; value : 리스트 안의 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따로 리스트[index]안해도 되서 편리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;range(len(a)) 를 enumerate(a) 로 간편하게 사용 가능&lt;/p&gt;</description>
      <category>IT 정리/파이썬 정리</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/22</guid>
      <comments>https://yujung820.tistory.com/22#entry22comment</comments>
      <pubDate>Wed, 21 May 2025 00:00:44 +0900</pubDate>
    </item>
    <item>
      <title>백준 2804번 크로스워드 만들기</title>
      <link>https://yujung820.tistory.com/21</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgR13Y/btsN6nyPo9I/eHk93eT69vR2XEA6PLxe20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgR13Y/btsN6nyPo9I/eHk93eT69vR2XEA6PLxe20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgR13Y/btsN6nyPo9I/eHk93eT69vR2XEA6PLxe20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgR13Y%2FbtsN6nyPo9I%2FeHk93eT69vR2XEA6PLxe20%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;984&quot; height=&quot;268&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 해석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; A와 B는 30글자 내외에 문자로 주어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A와 B에 같은 글자를 찾기 위해 중첩 반복문을 돌린다 해도 30*30으로 시간 복잡도가 O(900)으로 1초 이내 가능&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 풀이 (아래 코드)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;a와 b를 중첩 반복문으로 돌며 같은 글자가 있을 때 해당 인덱스 값을 각 m,n에 저장&lt;/li&gt;
&lt;li&gt;리스트에 a의 길이와 b의 길이만큼 각 가로와 세로길이를 설정하고 '.'를 기본값으로 설정&lt;/li&gt;
&lt;li&gt;1번에서 나온 m,n값으로 해당 행에는 a를 해당 열에는 b를 각각 입력해 넣는다.&lt;/li&gt;
&lt;li&gt;출력&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1747745734864&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b = input().split()

for i in b:
    for j in a :
        if i==j :
            m=a.index(j)
            n=b.index(i)

lists=[[&quot;.&quot;for _ in range(len(a))] for _ in range(len(b))]
#lists[n]=a

for row in range(len(a)):
    lists[n][row] = a[row]
    
for row in range(len(b)):
    lists[row][m] = b[row]

for row in lists:
    print(&quot;&quot;.join(row))&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;회차별 수정 사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. m,n 값을 기준으로 a와 b를 넣을 때 lists[n] = a 를 넣었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발생 문제점 =&amp;gt; 후에 m,n 값을 이용해 b를 해당 열에 넣을 때 type error 오류 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유 : lists[n] = a에서 문자열을 한번에 삽입했다. 문자열은 수정이 안되기 때문에 b를 열로 넣을 때&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;span style=&quot;color: #ee2323;&quot;&gt;해결 :&lt;/span&gt; 반복문을 사용해 a값을 하나씩 삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 문제에서 중복되는 문자가 여러번 등장할 경우 a에서 제일 먼저 등장하는 경우, b에서 제일 먼저 등장하는 경우로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아야 하는데 위에 식에서는 b를 기준으로 a가 돌기 때문에 오류 + 가장 먼저 같은 부분을 찾았다 하더라도 반복문이&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;span style=&quot;color: #ee2323;&quot;&gt;해결 :&lt;/span&gt; enumerate로 변경하고 두 문자가 같을 경우 바로 인덱스 반환 동시에 반복문이 종료되게끔 변경&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최종 코드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1747751412712&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a, b = input().split()
for m,j in enumerate(a):
    if j in b:
        n = b.index(j)
        break


lists=[[&quot;.&quot;for _ in range(len(a))] for _ in range(len(b))]

for row in range(len(a)):
    lists[n][row] = a[row]

for col in range(len(b)):
    lists[col][m] = b[col]

for row in lists:
    print(&quot;&quot;.join(row))&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/21</guid>
      <comments>https://yujung820.tistory.com/21#entry21comment</comments>
      <pubDate>Tue, 20 May 2025 23:22:02 +0900</pubDate>
    </item>
    <item>
      <title>백준 4592번  중복을 없애자</title>
      <link>https://yujung820.tistory.com/20</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvLJ3K/btsN4DVWfJe/CcgSK7SJCNmVTNwue8KrW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvLJ3K/btsN4DVWfJe/CcgSK7SJCNmVTNwue8KrW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvLJ3K/btsN4DVWfJe/CcgSK7SJCNmVTNwue8KrW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvLJ3K%2FbtsN4DVWfJe%2FCcgSK7SJCNmVTNwue8KrW1%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;1307&quot; height=&quot;715&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 풀이&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 1초&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수 N(=코드에서 리스트 길이)가 최대 25이기 때문에 넉넉히 풀이 가능&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 풀이&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;N과 N개의 숫자가 추가적으로 들어온다. =&amp;gt; 입력값을 리스트에 저장&lt;/li&gt;
&lt;li&gt;이때 N이 0이면 종료 =&amp;gt; while문을 돌리다가 N이 0일 때 반복문이 종료되는 조건문 추가&lt;/li&gt;
&lt;li&gt;N값과 바로 뒤에 나오는 수가 같을 경우 4번 조건문에 걸릴 경우를 대비해 미리 제거&lt;/li&gt;
&lt;li&gt;리스트 처음부터 끝까지 두개씩 비교하여 만약 값이 같을 경우 둘 중에 하나를 0으로 저장&lt;/li&gt;
&lt;li&gt;리스트에서 0이 아닌 값들만 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1747655679680&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while True:
    # 1번 : N과 N개의 숫자를 리스트로 저장
    lists = list(map(int,input().split()))

    # 2번 : N이 0이면 반복문 종료
    if lists[0] == 0 :
        break
    #3번 : 맨 앞에 N값 제거한다.
    #N값은 리스트의 길이이기 때문에 제거함과 동시에 리스트 길이(l)로 저장
    l=lists.pop(0)

    #4번 : 두값씩 비교해 같은 경우 하나를 0으로 저장
    for i in range(l-1):
        if lists[i] == lists[i+1]:
            lists[i] = 0
    
    #5번 : 0이 아닌 값만 출력
    for i in range(l):
        if lists[i] != 0 :
            print(lists[i],end = &quot; &quot;)
    print(&quot;$&quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/20</guid>
      <comments>https://yujung820.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 19 May 2025 20:54:15 +0900</pubDate>
    </item>
    <item>
      <title>백준 11866번 요세푸스 문제</title>
      <link>https://yujung820.tistory.com/19</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr9JCR/btsL03qdrnI/EcxCATZteKto41fnmTgFiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr9JCR/btsL03qdrnI/EcxCATZteKto41fnmTgFiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr9JCR/btsL03qdrnI/EcxCATZteKto41fnmTgFiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr9JCR%2FbtsL03qdrnI%2FEcxCATZteKto41fnmTgFiK%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;1006&quot; height=&quot;627&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 해석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; n : 총 인원 수, k : k번째 사람 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;k 번째 사람을 제거하다가 n까지 도달하면 다시 1로 와서 진행&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; while 문으로 k번째 사람을 계속 제거하다가 n명 모두 제거되면 루프 종료하므로&amp;nbsp; O(n)&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;n, k를 공백으로 나누어 정수형으로 저장&lt;/li&gt;
&lt;li&gt;리스트를 1부터&amp;nbsp; n까지 수를 리스트 생성&lt;/li&gt;
&lt;li&gt;제거한 사람들을 저장할 리스트 생성(=yo)&lt;/li&gt;
&lt;li&gt;인덱스를 계산하고 인덱스에 해당하는 값을 circle_list에서 제거하고 그 값을 yo 리스트에 삽입&lt;/li&gt;
&lt;li&gt;출력 형식 맞춰서 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1737886740891&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n, k = map(int, input().split()) 
circle_list = list(range(1, n + 1))  
yo = [] 
index = 0  

while circle_list:  
    index = (index + k - 1) % len(circle_list)  
    yo.append(circle_list.pop(index))  

print(&quot;&amp;lt;&quot; + &quot;, &quot;.join(map(str, yo)) + &quot;&amp;gt;&quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/19</guid>
      <comments>https://yujung820.tistory.com/19#entry19comment</comments>
      <pubDate>Sun, 26 Jan 2025 19:19:08 +0900</pubDate>
    </item>
    <item>
      <title>백준 2193번 이친수</title>
      <link>https://yujung820.tistory.com/18</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1535&quot; data-origin-height=&quot;641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clXz2z/btsLYDkyajZ/zsX5xIK5j7nLUlAH0pGkg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clXz2z/btsLYDkyajZ/zsX5xIK5j7nLUlAH0pGkg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clXz2z/btsLYDkyajZ/zsX5xIK5j7nLUlAH0pGkg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclXz2z%2FbtsLYDkyajZ%2FzsX5xIK5j7nLUlAH0pGkg1%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;1535&quot; height=&quot;641&quot; data-origin-width=&quot;1535&quot; data-origin-height=&quot;641&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 해석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr;n : n자리 이친수의 개수 구하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열의 마지막 자리가 1이면 다음은 0만 가능하고, 마지막 자리가 0이면 0과 1 모두 가능하다.&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; n값에 따라&amp;nbsp; 따라 반복문을 돌기 때문에 O(n)&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;n을 정수로 입력받는다.&lt;/li&gt;
&lt;li&gt;이친수의 갯수를 저장할 딕셔너리 생성 =binary_dic&lt;/li&gt;
&lt;li&gt;n이 1과 2일때는 0과 1의 갯수가 각각 0개, 1개이다.&lt;/li&gt;
&lt;li&gt;반복문은 n이 3이상일 때만 돌며 binary_dic[0]의 갯수는 이전 딕셔너리의 binary_dic[0]+binary_dic[1]이다. binary_dic[1]의 갯수는 이전 딕셔너리의 binary_dic[0]이다&amp;nbsp;▷3번 참조&lt;/li&gt;
&lt;li&gt;dictionary_dic[0]+dictionary_dic[1]의 값을 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1737689268531&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n=int(input())
binary_dic={0:1,1:0}

for i in range(3,n+1):
    a = binary_dic[0]
    b = binary_dic[1]
    binary_dic[0] = a + b
    binary_dic[1] = a
    
print(binary_dic[0]+binary_dic[1])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/18</guid>
      <comments>https://yujung820.tistory.com/18#entry18comment</comments>
      <pubDate>Fri, 24 Jan 2025 12:32:08 +0900</pubDate>
    </item>
    <item>
      <title>백준 2303번 숫자 게임</title>
      <link>https://yujung820.tistory.com/17</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;1302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9DINj/btsLYITqW6x/CJ7VSx0WB0sDKR08pboYc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9DINj/btsLYITqW6x/CJ7VSx0WB0sDKR08pboYc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9DINj/btsLYITqW6x/CJ7VSx0WB0sDKR08pboYc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9DINj%2FbtsLYITqW6x%2FCJ7VSx0WB0sDKR08pboYc1%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;977&quot; height=&quot;1302&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;1302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 해석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; n : 게임 참가자 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n명은 모두 5개의 숫자카드를 받는다. (5개의 숫자 카드는 1부터 10까지의 수로 중복 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자 5개 숫자 중 3개를 뽑아 더한 후 일의 자리 수를 구할 때 구할 수 있는 가장 큰 수를 가진다.&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;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시간 복잡도&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 최댓값을 찾거나 인덱스 찾는 부분은 O(n)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 5개 중에 3개를 골라 더해야 하는 부분의 시간 복잡도는 O( ㎥ )이고 이 문제에서의 m은 5이기 때문에 즉, O(125)이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 해석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;n을 입력받아 정수로 저장하고 카드 리스트를 저장할 공백의 카드 리스트 저장한다=card_list&lt;/li&gt;
&lt;li&gt;반복문 n번을 돌며 입력받은 정수들을 공백으로 나누어 card라는 리스트에 저장한다.&lt;/li&gt;
&lt;li&gt;card에 저장된 값들로 3개를 뽑아 더한 후 가장 큰 일의 자리수를 구한 후 card_list에 삽입&lt;/li&gt;
&lt;li&gt;가능한 일의 자리수는 0~9이므로 기본 값을 0으로 설정후 3개를 뽑아 더한 후 10으로 나눴을 때 0으로 설정한 기본값보다 크면 더 큰 값을 반환하는 함수를 만든다.&lt;/li&gt;
&lt;li&gt;card_list에서 가장 큰 수를 구한다.&lt;/li&gt;
&lt;li&gt;5에서 나온 수를 가지고 있는 사람 중 가장 큰 번호의 소유자를 출력한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1737685087865&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from itertools import combinations

n=int(input())
card_list = []

def max_num(cards):
    max_combi=0
    for value in combinations(cards, 3):
        v=sum(value)%10
        max_combi=max(v,max_combi)
    return max_combi



for i in range(n):
    card=list(map(int,input().split()))
    s=max_num(card)
    card_list.append(s)

num=max(card_list)
ans=0
for j in range(n) :
    if card_list[j] == num :
        ans=j

print(ans+1)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;회차별 시도 사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 마지막 for문을 돌리지 않은채 print(ans+1)을 하여 가장 큰 수를 가진 사람 중 첫번째 사람을 출력해서 for문 추가&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/17</guid>
      <comments>https://yujung820.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 24 Jan 2025 11:19:01 +0900</pubDate>
    </item>
    <item>
      <title>백준 5567번 결혼식</title>
      <link>https://yujung820.tistory.com/16</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1549&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OYo20/btsLW5tnEXW/VsnhqJAmy8WP5yq3QQQb7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OYo20/btsLW5tnEXW/VsnhqJAmy8WP5yq3QQQb7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OYo20/btsLW5tnEXW/VsnhqJAmy8WP5yq3QQQb7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOYo20%2FbtsLW5tnEXW%2FVsnhqJAmy8WP5yq3QQQb7K%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;1549&quot; height=&quot;596&quot; data-origin-width=&quot;1549&quot; data-origin-height=&quot;596&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 해석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; n: 상근이 동기의 수가 총 n명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; m : 리스트의 길이 = 주어지는 관계의 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; a, b가 m번 주어짐 : 친구 관계가 m번 나타남&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동기 중 상근이의 &lt;u&gt;친구와, 친구의 친구까지 더한 수&lt;/u&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 복잡도&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; dfs를 풀려다가 어차피 친구의 친구의 친구,,, 등 계속 관계하는 친구의 수를 구하는 것이 아니기에 set로 풀기로 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 총 시간복잡도는 O(n)&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;n과 m을 입력받아 정수로 저장&lt;/li&gt;
&lt;li&gt;친구들을 저장할 리스트 friends 생성&lt;/li&gt;
&lt;li&gt;m번동안 a,b 친구 관계를 입력 받으면서 friends 리스트에 저장&lt;/li&gt;
&lt;li&gt;상근이의 친구, 즉 1번의 친구는 무조건 초대받기 때문에 friends[1]을 초대친구목록(invite_friend)에 저장&lt;/li&gt;
&lt;li&gt;invite_friend를 set()로 변경해서 중복 허용 불가&lt;/li&gt;
&lt;li&gt;friends[1]에 있는 친구들의 친구들을 반복문을 이용해 invite_friend에 저장&lt;/li&gt;
&lt;li&gt;상근이는 포함시키면 안되므로 invite_friend에 상근이가 있으면 삭제&amp;nbsp;&lt;br /&gt;▶무조건 invite_friend.remove(1)할 경우 1이 없다면 오류가 나므로 조건식으로 진행&lt;/li&gt;
&lt;li&gt;set()함수의 길이가 곧 초대받은 친구들의 집합이기 때문에 길이 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1737523933259&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
n=int(sys.stdin.readline())
m=int(sys.stdin.readline())

friends=[[]for _ in range(n+1)]

for _ in range(1,m+1):
    a, b = map(int,sys.stdin.readline().split())
    friends[a].append(b)
    friends[b].append(a)

invite_friend=set(friends[1])
for i in friends[1]:
    invite_friend.update(friends[i])

if 1 in invite_friend:
    invite_friend.remove(1)
print(len(invite_friend))&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;회차별 시도 사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 런타임 에러 : invite_friends.add(friends[1])로 진행하면 add는 단일 요소만 추가가능하기 때문에 update로 변경&lt;/p&gt;</description>
      <category>IT 정리/백준</category>
      <author>유정임</author>
      <guid isPermaLink="true">https://yujung820.tistory.com/16</guid>
      <comments>https://yujung820.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 22 Jan 2025 14:33:51 +0900</pubDate>
    </item>
  </channel>
</rss>