<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>채영sw</title>
    <link>https://swchaey.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 16 Aug 2026 17:21:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>채영sw</managingEditor>
    <item>
      <title>HCI 3요소: 유용성, 사용성, 감성</title>
      <link>https://swchaey.tistory.com/36</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;&lt;b&gt;유용성 (USefilness)&lt;/b&gt;: 사람들이 시스템을 통해 하고자 하는 일을 효과적으로 달성할 수 있어야 한다는 것. 어떠한 제품이나 서비스를 개발할 때 가장 먼저 관심의 대상이 되는 조건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용성 (Usability)&lt;/b&gt;: 사람들이 디지털 제품이나 서비스를 가능한 쉽고 편리하게 사용할 수 있어야 한다는 것. 디지털 제품이나 서비스를 사용할 때 되도록 적은 노력으로 사용해 목적에 달성할 수 있어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;감성 (Affect)&lt;/b&gt;: 시스템을 사용하면서 사람들이 마음속에서 얼마나 적절한 느낌을 받았는지를 판단하는 것. 사람들이 시스템을 사용하면서 그 기본 목적에 적합한 감성을 풍부하게 느낄 수 있어야 함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;유용성 (Usefulness)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유용성의 원리&lt;/b&gt;: 사람들이 디지털 시스템을 사용하는 목적을 효과적으로 달성할 수 있도록 도와주는 원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사람들이 자신의 현재 어떤 문제점이나 바람을 가지고 있는지, 이러한 상황을 어떻게 충족시켜 줄 수 있는지 이해 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인지과학 분야에선 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;문제 공간&lt;/b&gt;&lt;/span&gt;과 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;디자인 공간&lt;/b&gt;&lt;/span&gt;이라는 개념으로 정리 &amp;rarr; 두 공간 사이의 원활한 관계를 통해 유용한 시스템이 만들어짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 문제 공간을 명확하게 파악하고 이에 상응하는 디자인 공간을 만들기!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;문제 공간 (Problem Space)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- 인간의 문제 해결 과정은 제한 조건 내에서 조작자(operator)를 사용해 초기 상태에서 목표 사태로 가기 위한 문제 공간을 탐색하는 과정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;문제 공간&lt;/b&gt;: 사용자가 본인의 문제를 해결하는 과정에서 처할 수 있는 상태들로 이루어진 미로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;조작자&lt;/b&gt;: 시스템 내에서 사용자의 상태를 변경시키는 행동 수단&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인지과학 분야에선 문제에 대한 표상을 구축하는 단계라고 봄 &amp;rarr; 유용한 시스템을 만들기 위한 선결조건&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;디자인 공간 (Design Space)&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cf.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;모형 (Model)&lt;/b&gt;: 단순화를 위해 특정 제품이나 서비스가 어떻게 구성되어 있고 어떻게 작동하는지 추상화시킨 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;심성 모형 (Mental Model)&lt;/b&gt;&lt;/span&gt;: 복잡한 대상이 어떤 구조를 가지고 있고 시간의 흐름에 따라 어떻게 움직이는지를 추상화해 표현하는 사람의 마음속에 있는 지식의 구조 (HCI - 특정 시스템의 기능이나 구조 또는 가치에 대해 사용자가 머릿속에 가지고 있는 동적인 모형)&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;구조 모형 (Structured Model)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기능 모형/작업-행위 모형 (Functional Model / Task-Action Model)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가치 모형 (Value Model)&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;기능적 가치, 유희적 가치, 개인적 가치, 사회적 가치, 부수적 가치&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;⚠️ 설계자는 시스템 이미지를 적절하게 구현해, 사용자가 개발자 모형 만큼은 아니더라도 멘탈 모델을 올바르게 구축할 수 있도록 해야 함&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;실행차&lt;/b&gt;: 사용자가 시스템이 어떻게 작동하는지 이해하지 못해 원하는 작업을 수행하는 데 어려움을 겪을 때 발생&lt;/li&gt;
&lt;li&gt;&lt;b&gt;평가차&lt;/b&gt;: 사용자가 시스템에서 발생한 결과나 상태를 평가하고 해석하는 데 어려움을 겪어, 시스템이 제공하는 피드백을 이해하지 못하면 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6b5Z/btsNRNseRwJ/dQj6Ceoel7DJlmxKAka3u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6b5Z/btsNRNseRwJ/dQj6Ceoel7DJlmxKAka3u1/img.png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;585&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.8628%; margin-right: 10px;&quot; data-widthpercent=&quot;42.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6b5Z/btsNRNseRwJ/dQj6Ceoel7DJlmxKAka3u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6b5Z%2FbtsNRNseRwJ%2FdQj6Ceoel7DJlmxKAka3u1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;972&quot; height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBCrm9/btsNS7bTUpa/sntsxhA51ZwfwyDlcI8oC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBCrm9/btsNS7bTUpa/sntsxhA51ZwfwyDlcI8oC1/img.png&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;486&quot; data-is-animation=&quot;false&quot; style=&quot;width: 56.9744%;&quot; data-widthpercent=&quot;57.64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBCrm9/btsNS7bTUpa/sntsxhA51ZwfwyDlcI8oC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBCrm9%2FbtsNS7bTUpa%2FsntsxhA51ZwfwyDlcI8oC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;486&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;사용성 (Usability)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제공된 기능이 이용하기 어려워 시스템을 충분히 사용할 수 없다고 느낀다면, 아무리 많은 기능이 제공될지라도 사용자는 그 시스템을 더이상 사용하지 않음 (e.g. 토스 vs. 기존 증권사 앱)&lt;/p&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;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;: 얼마나 빠르게 달성할 수 있는가
&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: #006dd7;&quot;&gt;&lt;b&gt;반응성&lt;/b&gt;&lt;/span&gt;: 사용자의 행동에 대한 시스템의 반응 속도 &amp;rarr; 시간 측면의 효율성
&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;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;단축성&lt;/b&gt;&lt;/span&gt;: 사용자가 자신이 원하는 과업을 간단하게 마무리할 수 있는 정도 &amp;rarr; 의미/절차 측면의 효율성&lt;br /&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정확성&lt;/b&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;span style=&quot;color: #006dd7;&quot;&gt;사전 방지성&lt;/span&gt;&lt;/b&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;: 어떤 행위가 복구하기 어려울수록 애초에 그 행위를 저지르는 것 자체도 어려워한다 (파일 삭제)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사전심사&lt;/b&gt;: 시스템의 현재 상태를 사전에 심사해 실행할 수 있는 항목만 사용자에게 보여주는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;오류 방생 감지성&lt;/b&gt;&lt;/span&gt;: 오류 발생을 사용자에게 빠르게 인식하고 조치를 취할 수 있어야 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;지속성 효과&lt;/b&gt;: 오류 발생을 사용자가 볼 수 있도록 시,청각적으로 강조하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;오류 회복성&lt;/b&gt;&lt;/span&gt;: 시스템을 통해 사용자 자신이 과거에 저질렀던 오류를 정정할 수 있게 하는 속성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;후방 오류 회복성&lt;/b&gt;: 사용자의 과거 오류 효과를 취소하고 오류 발생 전의 상태로 돌아가는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전방 오류 회복성&lt;/b&gt;: 과거의 과거 오류 효과를 취소할 순 없지만, 이전 상태로 다시 돌아갈 수 있는 길을 제공하는 것 (e.g.&amp;nbsp; 기본 설정으로 돌아가기, 문서 복구(최근 저장상태로 돌아가기))&lt;/li&gt;
&lt;/ul&gt;
&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;&lt;b&gt;의미성&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;변화 제시성&lt;/b&gt;&lt;/span&gt;: 시스템 내부 상태가 변화했을 때 그 변화된 상태를 사용자가 감지할 수 있게 제공하는 속성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;즉시성&lt;/b&gt;: 변화가 발생한 즉시 별도의 작업을 하지 않더라도 사용자에게 제공 (e.g. sns 활동중 표시)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;부가성&lt;/b&gt;: 사용자가 변화된 상태를 보고 싶다는 의사를 부가적으로 명백하게 밝힐 때 시스템이 현재의 상태를 사용자에게 보여주는 것 (e.g. 다운로드 완료 표시)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;이해 가능성&lt;/b&gt;&lt;/span&gt;: 시스템이 전달한 정보를 사용자가 이해할 수 있게 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;가독성&lt;/b&gt;: 제시된 정보를 사용자가 정확하게 읽게 해주는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;논리성&lt;/b&gt;: 사용자가 보기에 정보가 제공되는 순서나 구조가 논리적이라고 생각할 수 있도록 정보를 구성하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;학습성&lt;/b&gt;&lt;/span&gt;: 초보 사용자가 시스템에 대하여 어느 정도 수준의 지식을 취득하는 것이 얼마나 쉬운지
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;사용자 메뉴얼&lt;/b&gt; 제공&lt;/li&gt;
&lt;li&gt;&lt;b&gt;과업 적합성&lt;/b&gt;: 시스템의 특성에 따라 상이한 수준의 최종 목표 정하기 (e.g. 키오스크, ATM vs. 비행기 조종 시스템, 공정 제어)&lt;/li&gt;
&lt;li&gt;기억 가능성: 어느 정도 시간이 지난 후 다시 사용할 때 원래 사용하던 수준으로 도달하는데 걸리는 시간&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연성&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;사용자&lt;/b&gt; &lt;b&gt;주도권&lt;/b&gt;&lt;/span&gt;: 사용자가 자신이 원하는 대로 시스템과 상호작용할 수 있게 하는 시스템 속성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;상호작용&lt;/b&gt; &lt;b&gt;Mode&lt;/b&gt;: 논리적 연결이 없는 상호작용 모드 제거&lt;/li&gt;
&lt;li&gt;&lt;b&gt;과업 전이성&lt;/b&gt;: 사용자가 과업을 수행하면서 시스템과 사용자 사이에 통제권을 유연하게 주고받을 수 있게 하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;대체성&lt;/b&gt;&lt;/span&gt;: 사용자가 시스템을 사용하면서 특정 작업을 하기 원할 때 그 작업을 수행할 수 있는 방법이 두 가지 이상 &amp;rarr; 처한 상황에 따라 가장 적절한 방법을 선택할 수 있게 하는 시스템의 특성
&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; &lt;b&gt;대체성&lt;/b&gt;: 사용자가 두 가지 방법으로 입력할 수 있게 하는 속성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;출력&lt;/b&gt; &lt;b&gt;대체성&lt;/b&gt;: 출력 상황을 여러 가지 조건에서 볼 수 있도록 하는 속성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;다중성&lt;/b&gt;&lt;/span&gt;: 사용자가 한꺼번에 두개 이상의 작업을 동시에 수행할 수 있도록 하는 시스템 속성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;동시적&lt;/b&gt; &lt;b&gt;다중성&lt;/b&gt;: 동시에 두 가지 작업 수행 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;교차적&lt;/b&gt; &lt;b&gt;다중성&lt;/b&gt;: 어떤 기간을 두고 보면 두 가지 이상의 작업을 동시에 수행했지만, 특정 시점만 두고 보면 한 가지 작업&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;개인화&lt;/b&gt;&lt;/span&gt;: 사용자의 취향이나 특성에 따라 시스템의 상태를 변화시킬 수 있는 속성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;응용성&lt;/b&gt;: 사용자가 개인화의 주체로서 시스템의 특성을 바꾸는 속성 (e.g. 아이폰 위젯)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;적응성&lt;/b&gt;: 시스템이 주체로서 사용자에게 맞게 특성을 바꿔주는 속성 (e.g. 추천 플레이리스트)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;연결성&lt;/b&gt;&lt;/span&gt;: 시스템 간의 연결이 얼마나 쉬운지
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;연동성&lt;/b&gt;: 하나의 제품이 다른 제품과 얼마나 쉽게 연결될 수 있는가 (하드웨어, e.g. 애플 제품들)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;호환성&lt;/b&gt;: 서로 다른 시스템 간에 컨텐츠 및 가능이 얼마나 쉽게 이동되는지 (소프트위어, e.g. 로지텍)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;일관성&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;예측 가능성&lt;/b&gt;&lt;/span&gt;: 사용자가 자신이 과거에 시스템과 상호작용한 경험을 통해 자기가 어떤 행동을 하면 그 결과를 예측할 수 있게 하는 특성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;일관된&lt;/b&gt; &lt;b&gt;명령 체계&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정보의 향기&lt;/b&gt;: 시스템에서 어떤 행동을 했을 때 그 결과가 어떻게 되리라는 것을 사용자에게 미리 알려주는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;친숙성&lt;/b&gt;&lt;/span&gt;: 사람들이 실제 세상에 가지고 있던 경험을 바탕으로 시스템을 사용하는 데 필요한 지식을 습득할 수 있게 하는 시특성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;일상&lt;/b&gt; &lt;b&gt;용어&lt;/b&gt; 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;직관성&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;일반화&lt;/b&gt; &lt;b&gt;가능성&lt;/b&gt;&lt;/span&gt;: 사용자가 과거에 사용한 명령어나 메뉴를 새로운 상황에서도 사용할 수 있도록 하는 시스템 속성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시스템&lt;/b&gt; &lt;b&gt;내부&lt;/b&gt; &lt;b&gt;일관성&lt;/b&gt;: 시스템 내부에서 비슷한 효과를 내는 작업은 비슷한 절차를 거치도록 설계&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시스템 간의 일관성&lt;/b&gt;: 비슷한 지향점을 가진 서비스 및 프로그램 등은 서로 비슷한 포맷 (e.g. 메신저 앱)&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;rarr; &lt;b&gt;다중적&lt;/b&gt; &lt;b&gt;시스템&lt;/b&gt; 개발 (e.g. 초보자 모드, 전문가 모드)&lt;/p&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;color: #006dd7;&quot;&gt;&lt;b&gt;기능적&lt;/b&gt; &lt;/span&gt;&lt;b&gt;가치&lt;/b&gt; - 단축성, 사전 방지성, 오류 회복성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;유희적&lt;/b&gt; &lt;/span&gt;&lt;b&gt;가치&lt;/b&gt; - 변화제시성, 대체성, 다중성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사회적&lt;/b&gt; &lt;/span&gt;&lt;b&gt;가치&lt;/b&gt; - 친숙성, 일반화 가능성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;개인적&lt;/b&gt; &lt;/span&gt;&lt;b&gt;가치&lt;/b&gt; - 개인화, 주도성&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VK4Vb/btsNRKCfCiB/axhskHtGSNKMwHn9M0w251/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VK4Vb/btsNRKCfCiB/axhskHtGSNKMwHn9M0w251/img.png&quot; data-alt=&quot;사용 교재&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VK4Vb/btsNRKCfCiB/axhskHtGSNKMwHn9M0w251/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVK4Vb%2FbtsNRKCfCiB%2FaxhskHtGSNKMwHn9M0w251%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;300&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용 교재&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #222222; text-align: start;&quot;&gt;+ khux 세션 자료&lt;/span&gt;&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>HCI x UX</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/36</guid>
      <comments>https://swchaey.tistory.com/36#entry36comment</comments>
      <pubDate>Sat, 10 May 2025 21:45:26 +0900</pubDate>
    </item>
    <item>
      <title>유저 리서치 방법론_2</title>
      <link>https://swchaey.tistory.com/35</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;b&gt;연구 질문 (Research Question)&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;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;이 우선
&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;gt; 있는 그대로 객관적으로 바라보고 데이터를 수집해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;문제를 찾는 것을 넘어&lt;b&gt; 구조화&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;Finding x Framing o&lt;/li&gt;
&lt;li&gt;문제를 잘 정의해야 해결 방향도 효과적으로 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;서베이의 주요 과정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsxX57/btsNhQPlgNR/k3nwIOrlAymG7KpbbHoNN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsxX57/btsNhQPlgNR/k3nwIOrlAymG7KpbbHoNN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsxX57/btsNhQPlgNR/k3nwIOrlAymG7KpbbHoNN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsxX57%2FbtsNhQPlgNR%2Fk3nwIOrlAymG7KpbbHoNN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1127&quot; height=&quot;233&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;233&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;style1&quot; /&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;b&gt;샘플링 오류 (Sampling Error)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;측정 오류 (Measurement Error)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무응답 오류 (Non-reaponse Error)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포괄 오류 (Converge Error)&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;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; &amp;rarr; &lt;b&gt;정보 회상&lt;/b&gt; &amp;rarr; &lt;b&gt;판단 및 추정&lt;/b&gt; (응답자가 스스로 고민하도로 유도하는 질문이 중요!)&amp;nbsp; &amp;rarr; &lt;b&gt;응답 보고&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;질문 유형&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Open-ended&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;e.g. 사용자의 동기, 불편사항, 해결방안&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Closed-ended&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;e.g. Likert scale(리커트 척도), 다지선다형&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;설계 원칙&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명확하고 간결한 문장 사용 &amp;rarr; 복잡한 구문, 애매한 수량화/단어 X&lt;/li&gt;
&lt;li&gt;회상 가능성 고려 &amp;rarr; 오래된 경험보다 최근 경험 질문 추천&lt;/li&gt;
&lt;li&gt;응답 범위 명확화 &amp;rarr; 명확한 선택지 제공, 선택지 순서 효과 방지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;b&gt;정보 부호화 실패&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;응답자가 정보를 회상하지 못하는 경우 &amp;rarr; 사전 조사 및 문항 개선 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;질문 오해&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;응답 편향&lt;/b&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; 사전 파일럿 테스트 필수베이 방법론&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 현상적 질문에 대한 연구 질문 (Research Question)을 설정해 유저 리서치를 진행하고 본질적인 문제 찾기!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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: #006dd7;&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: #006dd7;&quot;&gt;&lt;b&gt;분산 배치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초반: 쉬운 질문 배치 &amp;rarr; 응답자 참여 유도&lt;/li&gt;
&lt;li&gt;중반: 주요 연구 질문 배치&lt;/li&gt;
&lt;li&gt;후반: 민감한 질문이나 개방형 질문 배치 (응답 부담 고려)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;체크리스트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 구문 사용 여부 &lt;b&gt;|&lt;/b&gt; 실험 기억에 부담을 주는 문장 여부 &lt;b&gt;|&lt;/b&gt; 애매한 명사구 사용 여부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익숙하지 않은 전문 용어 포함 여부 &lt;b&gt;|&lt;/b&gt; 애매한 수량화 여부 &lt;b&gt;|&lt;/b&gt; 오도할 가능성이 있는 문장 여부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&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;|&lt;/b&gt; 응답자가 답할 수 없는 질문 여부 &lt;b&gt;|&lt;/b&gt; 질문 목적의 명확성&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;b&gt;비밀 보장&lt;/b&gt;: 응답을 개별 식별이 불가능한 형태로 집계해야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자발적 참여&lt;/b&gt;: 응답을 강요하지 않고 자유로운 응답 환경 조성&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;많은 정보나 풍부한 경험을 갖고 있는 사람을 대상&lt;/b&gt;&lt;/span&gt;으로 그들이 생각하고 경험한 바를 본인의 언어적 습관과 표현으로 서술하도록 하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;연구 주제에 대해 참가자의 태도, 믿음, 기분, 반응 등에 대한 정보&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;맥락&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 사용자가 특정 행동을 하는 이유 파악&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;b&gt;인사이트&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&amp;nbsp; 양적 연구에서 놓칠 수 있는 인사이트 도출&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;b&gt;경험과 감정&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&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;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt; 맥락을 파악하고, Why &amp;amp; How를 구체화하기 위해!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;구조화된 인터뷰&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;반구조화된 인터뷰&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;연구자가 가진 의도나 편향 발생 가능성이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비구조화된 인터뷰&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;여러 상황에 유연한 대처 필요&lt;/li&gt;
&lt;li&gt;원하는 정보와 유의미한 정보를 얻기 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;nbsp;&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;b&gt;탐색형 질문 (Grand-tour Questions)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사례 질문 (Example Questions)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가/유도 질문 (Prompts)&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;/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;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;b&gt;개방형 질문&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 예/아니오가 아닌 더 깊은 정보를 유도하는 질문&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이해하기 쉬운 질문&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt; 연구자와 참가자가 같은 의미로 단어를 사용하도록 설계&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구체적인 질문&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&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;&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;b&gt;유도 질문&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&lt;span&gt; 사용자의 경험에 기반하지 않은 연구자의 의도가 반영된 질문&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&lt;b&gt;편향된 질문&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&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: #333333; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&lt;b&gt;이중 질문&lt;/b&gt; &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;rarr;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;인터뷰 진행 절차&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AEpDd/btsNf6e81zR/DKNkInsW3yUHfaWv8ByIg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AEpDd/btsNf6e81zR/DKNkInsW3yUHfaWv8ByIg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AEpDd/btsNf6e81zR/DKNkInsW3yUHfaWv8ByIg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAEpDd%2FbtsNf6e81zR%2FDKNkInsW3yUHfaWv8ByIg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1169&quot; height=&quot;355&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;355&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;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;FGI vs. IDI&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;FGI (Focus Group Interview)&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;b&gt;Group Observation&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;특정 집단 내 인물이 아니라면 명확한 질문이 어려운 경우&lt;/li&gt;
&lt;li&gt;특정 집단만의 문화와 언어 등을 파악하고 싶은 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Group Brainstorming&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;특정 집단 내 인물의 의견에 대한 객관성을 판단하기 어려운 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IDI (In-depth Interview)&amp;nbsp;&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;1대1 인터뷰&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;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;b&gt;완전 참여 관찰&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;몰입형 연구 가능 (e.g. 스타트업 직원처럼 활동)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관찰 참여&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;사용자 경험의 맥락을 더 깊이 이해할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비참여 관찰&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;완전 관찰&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;b&gt;현장 노트 (Field Notes)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비디오/오디오 녹화&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사진 촬영&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;샘플링&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&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; &amp;rarr; 관찰을 통해 문제점을 도출하고, 이후 인터뷰와 서베이로 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;트라이앵귤레이션 (Triangulation)&lt;/b&gt; &amp;rarr; 관찰, 인터뷰, 서베이를 함께 활용해 연구 신뢰도를 높임.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 페르소나 및 Journey Map (사용자가 생활 맥락에서 제품/서비스와 만나는 지점 기록) 제작에 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Rgxd/btsNf9QrMfn/aVp4n2JHYjSHgKhfrsx7j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Rgxd/btsNf9QrMfn/aVp4n2JHYjSHgKhfrsx7j0/img.png&quot; data-alt=&quot;사용 교재&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Rgxd/btsNf9QrMfn/aVp4n2JHYjSHgKhfrsx7j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Rgxd%2FbtsNf9QrMfn%2FaVp4n2JHYjSHgKhfrsx7j0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;300&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용 교재&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;+ khux 세션 자료&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;br /&gt;
&lt;p style=&quot;color: #222222;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>HCI x UX</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/35</guid>
      <comments>https://swchaey.tistory.com/35#entry35comment</comments>
      <pubDate>Fri, 11 Apr 2025 00:26:14 +0900</pubDate>
    </item>
    <item>
      <title>유저 리서치 방법론 _ 1</title>
      <link>https://swchaey.tistory.com/34</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;유저 리서치(User Research) vs UX 리서치(User Experience Research)&lt;/b&gt;&lt;/h4&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유저 리서치&lt;/b&gt;: &lt;span style=&quot;color: #333333;&quot;&gt;현실적인 문제에 대한 사용자의 경험을 탐색&lt;/span&gt;해 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자가 겪고 있는 본질적인 문제를 발견&lt;/b&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UX 리서치&lt;/b&gt;: 사용자의 행동과 피드백을 분석하여 제품이나 서비스가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;실제 사용자의 니즈와 기대를 얼마나 잘 충족하는 지&lt;/b&gt;&lt;/span&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;&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;- 가설 검증을 통한 객관적 데이터 기반 의사결정&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;size16&quot;&gt;- 발견 정의 개발 전달 네 단계를 따르는 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&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;- 문제 영역과 솔루션 영역을 구분하고 확산(divergent)과 수렴(convergent) 사고를 거치는 과정을 묘사&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/44tzr/btsNba8lZiF/3RyCc6wVroqe8TxTk6fRO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/44tzr/btsNba8lZiF/3RyCc6wVroqe8TxTk6fRO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/44tzr/btsNba8lZiF/3RyCc6wVroqe8TxTk6fRO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F44tzr%2FbtsNba8lZiF%2F3RyCc6wVroqe8TxTk6fRO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;316&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;358&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;size18&quot;&gt;&lt;b&gt;첫 번째 다이아몬드, &lt;span style=&quot;color: #006dd7;&quot;&gt;Problem&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;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Discover - 문제 발견&lt;/b&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: #333333;&quot;&gt;행동 뒤에 숨겨진 욕구 탐색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Issue Identification - Relevant UX Analysis - Goal Setting&lt;/li&gt;
&lt;li&gt;데스크 리서치, 유저 리서치, 필드 리서치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Define - 문제점 정의&lt;/b&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: #333333;&quot;&gt;해결할 수 있는 디자인 기회 정리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Insight Generations - Key findings - UX Modeling&lt;/li&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;span style=&quot;color: #006dd7;&quot;&gt;Solution&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;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Develop - 아이디어 도출 및 컨셉 개발&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반복적인 디자인 프로세스 진행 - UX 및 디지털 프로덕트 컨셉 확정 - 디지털 프로덕트가 갖추어야 할 세부기능을 정리하여 구체화&lt;/li&gt;
&lt;li&gt;UX Strategy, Idea Generation - Idea Evaluation - Concept Design - Scenario Design
&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;&lt;b&gt;Deliver - 최종 결과물 도출, 평가 및 개선&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;IA, Interaction, Interface Design - Prototyping - UX Testing - UX Guidelines&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DF3 방법론&lt;/b&gt;&lt;/h4&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;918&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSLlPS/btsM7WcZ8kv/SLBYqnYoeKs3v4EQWQY6F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSLlPS/btsM7WcZ8kv/SLBYqnYoeKs3v4EQWQY6F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSLlPS/btsM7WcZ8kv/SLBYqnYoeKs3v4EQWQY6F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSLlPS%2FbtsM7WcZ8kv%2FSLBYqnYoeKs3v4EQWQY6F0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;345&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;489&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;b&gt;레벨 1. Defining Surface Problem (DSP)&lt;/b&gt;: 사용자를 둘러싼 현상적 문제 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;레벨 2. Finding The Reason (FTR)&lt;/b&gt;: 정의한 현상 문제에 대한 이유 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; 사용자를 둘러싼 현상적 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;문제를 정의하고 그것에 대한 이유를 찾는 단계&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;레벨 3. Defining Interface Problem (DIP)&lt;/b&gt;: 사용자가 경험하는 최접점의 문제 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;레벨 4. Finding The Journey (FTJ)&lt;/b&gt;: 정의된 접점 문제에 대한 사용자의 경험 과정 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; 유저 리서치를 통해 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&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;b&gt;레벨 5. Defining Key Experience (DKE)&lt;/b&gt;: 사용자에게 중요한 핵심 경험 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;레벨 6. Finding The Contrast (FTC)&lt;/b&gt;: 정의된 경험을 기존의 프로덕트와 비교 평가하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; 사용자가 어떤 경험이 있어야 겪고 있는 문제들이 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;해결될 것인지를 정의&lt;/b&gt;&lt;/span&gt; 내리는 단계&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;UX 리서치 방법론&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;3차원 프레임워크&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 태도 vs. 행동&amp;nbsp; |&amp;nbsp; 정량 vs. 정성&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;&lt;b&gt;태도 (Attitudinal) vs. 행동 (Behavioral)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 사용자가 &quot;이 기능이 좋다&quot;고 말했어도, 실제 행동을 보면 사용하지 않는 경우가 있을 수 있으므로 말과 행동을 모두 다루는 연구가 병행되어야 함!&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;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 말하는 것을 파악 -&amp;gt; 사용자가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;어떻게 생각하는지&lt;/b&gt;&lt;/span&gt;를 조사하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;행동 기반 연구&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 실제로 하는 것 -&amp;gt; 사용자가 실제로 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;어떻게 행동하는지&lt;/b&gt;&lt;/span&gt;를 분석하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정성 (Qualitative) vs. 정량 (Quantitaive)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 정성적 연구 - 왜 그런가&amp;nbsp; |&amp;nbsp; 정량적 연구 - 얼마나 많은 사람이 그런가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정성적 연구&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Direct. 소수의 사용자에게 깊이 있는 질문을 던지고, &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자의 경험과 맥락&lt;/b&gt;&lt;/span&gt;을 분석하는 방식 (인터뷰, 관찰 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정량적 연구&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Indirect. 수치로 측정해 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자 행동의 패턴&lt;/b&gt;&lt;/span&gt;을 파악하는 방식 (설문조사, A/B 테스트 등 수치로 파악)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 맥락 (Context of Use)&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;Field Studies: &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;제품 및 서비스를 실제 환경에서 사용하는지&lt;/b&gt;&lt;/span&gt; (e.g. 에스노 그라피: 인류학자들이 다른 문화를 관찰하고 기록하는 연구방법)&lt;/li&gt;
&lt;li&gt;Usability Testing: 실험실 환경에서 테스트하는지&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;717&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/shsXW/btsNa9u2Mi9/KuaLiYWzwYv3XEC8dwcAAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/shsXW/btsNa9u2Mi9/KuaLiYWzwYv3XEC8dwcAAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/shsXW/btsNa9u2Mi9/KuaLiYWzwYv3XEC8dwcAAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FshsXW%2FbtsNa9u2Mi9%2FKuaLiYWzwYv3XEC8dwcAAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;434&quot; height=&quot;338&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;559&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;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; 태도 기반 연구 (Attitudinal Research)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;어떤 생각을 가지고 있는지, 어떤 의견을 가지고 있는지&lt;/b&gt;&lt;/span&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;b&gt;주의할 점&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;실제 행동과 차이가 있을 가능성이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유용하게 작용하는 경우&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;UX 설계 시, 사용자의 Mental Model (심성 모형) 이해
&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;&lt;b&gt;UX 설계 시 한계&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;대표적인 Attitudinal Research 방법론&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;b&gt;Surveys 설문조사&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Focus Groups 포커스 그룹&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Card Sorting 카드 정렬&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 정보를 어떻게 분류하는지 조사 (e.g. 메뉴, 내비게이션 만들 때 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;행동 기반 연구 (Behavioral Research)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;실제 행동을 측정하고 분석하는 연구&lt;/b&gt;&lt;/span&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;b&gt;중요한 이유&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;객관적인 데이터를 얻을 수 있어 의사결정이 더 명확해짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유용하게 작용하는 경우&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;UI/UX 변경이 전환율(Conversion Rate)에 미치는 영향 검증&lt;/li&gt;
&lt;li&gt;사용자가 기능을 쉽게 찾고 활용하는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UX설계 시 한계&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;Attitudinal Research와 병행되어야 좋은 연구 결과 도출 가능!!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;b&gt; 대표적인&lt;span&gt; Behavioral&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;Research 방법론&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;b&gt;A/B Testing A/B 테스트&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Eyetracking 시선 추적 연구&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Clickstream Analysis 클릭스트림 분석&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 웹사이트에서 어떤 경로를 따라 이동하는지 분석 (e.g. 뷰저블: 아이트래킹처럼 잘 설계해 분석하는 기업)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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: #006dd7;&quot;&gt;&lt;b&gt;함께 조사&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Usability Testing 사용성 테스트&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Field Studies 현장 연구&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;혼합 연구 장점&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정성적 연구 (Qualitative Research)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자의 행동이나 의견을 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;직접 관찰하거나 듣는 방식&lt;/b&gt;&lt;/span&gt;으로 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;데이터를 수집하는 연구&lt;/b&gt;&lt;/span&gt; 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자는 왜 그렇게 행동할까?&amp;nbsp; |&amp;nbsp; 어떻게 개선할 수 있을까?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 수집 방식이 관찰(Observing)과 인터뷰(Interviewing) 중심&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;/li&gt;
&lt;li&gt;&lt;b&gt;유용하게 작용하는 경우&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;사용자 경험의 깊은 이해&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정성적 연구의 한계&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터가 소수의 사용자에 의존 -&amp;gt; 대표성 부족
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 집단에게 물을 건지도 중요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;연구자의 주관적인 해석이 개입될 가능성이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- &lt;b&gt;대표적인&lt;span&gt;&lt;span&gt; Qualitative Research &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;방법론 &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;b&gt;Usability Testing 사용성 테스트&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Field Studies 현장 연구&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;In-Depth Interview 심층 인터뷰&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자의 경험과 의견을 깊이 탐색 (e.g. 1 대 1 인터뷰)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Contextual Inquiry 맥락 기반 연구&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자의 실제 작업 환경에서 관찰하며 질문&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; 정량적 연구 (Quantitative Research)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자의 행동과 의견&lt;/b&gt;&lt;/span&gt;을 측정 가능한 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;데이터로 수집해 분석하는 연구&lt;/b&gt;&lt;/span&gt; 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 얼마나 많은 사용자가 이 기능을 쓰고 있는가?&amp;nbsp; |&amp;nbsp; 이 버튼의 클릭률은 몇 %인가?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&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;데이터 수집 과정이 자동화됨&lt;/li&gt;
&lt;li&gt;수학적,통계적 기법을 활용하여 객관적 패턴을 찾는 분석 과정을 가짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유용하게 작용하는 경우&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;UX 문제의 심각도(Severity)를 수치화해 우선순위를 정할 때&lt;/li&gt;
&lt;li&gt;데이터를 통해 객관적인 의사결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정량적 연구의 한계&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- &lt;b&gt;대표적인&lt;span&gt;&lt;span&gt;&lt;span&gt; Quantitative Research &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;방법론&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;b&gt;Surveys 설문 조사&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A/B Testing&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Analytics 웹/앱 분석&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 행동 데이터(클릭 수, 체류 시간 등) 분석 (e.g. GA)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Usability Benchmarking 사용성 벤치마킹&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;b&gt;What people say&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;What people do&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;UX 변경이 사용자 행동에 미치는 영향 분석에 효과적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;How many &amp;amp; How much&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;우선순위 정하는 데 도움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Why &amp;amp; How to fix&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;디자인 및 기능 변경의 방향을 결정하는 데 도움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;사용 맥락 (The Context of Product Use)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;실제로 제품 및 서비스를 사용하면서 리서치를 진행하는지&lt;/b&gt;&lt;/span&gt; 여부에 따른 연구 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제품 및 서비스를 실생활에서 자연스럽게 사용하면서 연구하는가?&amp;nbsp; | 특정 시나리오를 정해놓고 연구하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자연스러운 제품 사용 | 스크립트 기반 연구 | 제한적인 제품 및 서비스 사용 | 제품을 사용하지 않는 연구&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; 자연스러운 제품 사용 (Natural or Near-Natural Use)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;실제 환경에서 자연스럽게 제품 및 서비스를 사용하는 모습&lt;/b&gt;&lt;/span&gt;을 연구하는 방식&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연구자가 통제할 수 없는 변수가 많음 -&amp;gt; 특정 기능을 집중적으로 연구하기 어려움&lt;/li&gt;
&lt;li&gt;관찰자의 해석에 따라 결과가 달라질 수도 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;민속지학적 연구 (Ethnographic Field Studies)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;현장 설문조사 (Intercept Surveys)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 마이닝 (data mining)&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;스크립트 기반 연구 (Scripteed Use of the Product)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;특정 시나리오나 미리 정해진 흐름에 따라&lt;/b&gt;&lt;/span&gt; 제품 및 서비스를 사용하도록 유도하는 방식&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&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;주로 사용성 평가나 벤치마킹 연구에서 활용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;사용성 벤치마킹 (Usability Benchmarking)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Remote Moderated Usability Testing&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A/B 테스트&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;제한적인 제품 및 서비스 사용 (Limited Use of the Product)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제품 및 서비스의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;일부 기능이나 특정 요소만 연구&lt;/b&gt;&lt;/span&gt;하는 방식&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제품 및 서비스 전체를 사용하는 것이 아니라, 일부 요소(디자인, IA 등)만 테스트&lt;/li&gt;
&lt;li&gt;연구자가 특정한 요소에 대한 사용자의 인식을 집중적으로 분석할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&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;사용자 행동이 아니라 인지적 구조(IA)를 분석하는 것이 목적 -&amp;gt; 행동 기반 연구와 함께 사용해야 함!!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;참여형 디자인 연구 (Participatory Design)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컨셉 테스트 (Concept Testing)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;카드 정렬 (Card Sorting)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;트리 테스트 (Tree Testing)&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;제품을 사용하지 않는 연구 (Not Using the Product)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자가 제품 및 서비스를 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;실제로 사용하지 않고&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;브랜드나 디자인 감성에 대한 연구를 수행&lt;/b&gt;&lt;/span&gt;하는 방식&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제품 및 서비스를 직접 사용하지 않아도 UX 디자인의 감성적 요소를 연구할 수 있음&lt;/li&gt;
&lt;li&gt;브랜드, 감성적 반응 등의 추상적 개념을 연구하는 데 효과적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;선호도 연구 (Desirability Studies)&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;브랜드 인식 연구 (Brand Perception Studies)&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;&lt;a style=&quot;color: #909090; text-align: start;&quot;&gt;닫기&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D9AEO/btsNfJqgjpo/u5iSsZnjk34IHziKcOkWyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D9AEO/btsNfJqgjpo/u5iSsZnjk34IHziKcOkWyk/img.png&quot; data-alt=&quot;사용 교재&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D9AEO/btsNfJqgjpo/u5iSsZnjk34IHziKcOkWyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD9AEO%2FbtsNfJqgjpo%2Fu5iSsZnjk34IHziKcOkWyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;300&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용 교재&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;br /&gt;
&lt;p style=&quot;color: #222222;&quot; data-ke-size=&quot;size16&quot;&gt;+ khux 세션 자료&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>HCI x UX</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/34</guid>
      <comments>https://swchaey.tistory.com/34#entry34comment</comments>
      <pubDate>Sun, 6 Apr 2025 16:07:39 +0900</pubDate>
    </item>
    <item>
      <title>Activity - Interaction</title>
      <link>https://swchaey.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Interaction (상호 작용)&lt;/b&gt;&lt;/span&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;&amp;nbsp;&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;사회학&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Human - Human Interaction&lt;/li&gt;
&lt;li&gt;사건들을 이루는 가장 기본적 단위로, 둘 이상의 사람이 모여 서로 영향을 주는 양방향적 관계&lt;/li&gt;
&lt;li&gt;ex. 친구 관계&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니케이션학&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Human - Content Interaction&lt;/li&gt;
&lt;li&gt;상호작용의 개념을 좀 더 구체화&lt;/li&gt;
&lt;li&gt;미디어를 통해 전달되는 콘텐츠와 이를 전달 받는 사람 사이에 일어나는 여러 가지 과정&lt;/li&gt;
&lt;li&gt;ex. 미디어 광고에 사람들이 어떤 영향을 받고 어떻게 느끼는지&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;&lt;b&gt;인간 - 컴퓨터 상호작용학&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Human - Computer Interaction&lt;/li&gt;
&lt;li&gt;사람이 디지털 시스템을 사용하는 과정에서 시스템과 사람 사이에 일어나는 일련의 절차&lt;/li&gt;
&lt;li&gt;과거에 비해 디지털 시스템 발전 -&amp;gt; 더욱 다양한 형태와 방식을 취할 수 있음 -&amp;gt; 더 넓고 다양한 경험 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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;1001&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cP6TTr/btsM0pssXO5/flvUs2RwPtQAlJTsFKXsuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cP6TTr/btsM0pssXO5/flvUs2RwPtQAlJTsFKXsuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cP6TTr/btsM0pssXO5/flvUs2RwPtQAlJTsFKXsuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcP6TTr%2FbtsM0pssXO5%2FflvUs2RwPtQAlJTsFKXsuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;489&quot; height=&quot;255&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;521&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;b&gt;1) 표명 단계&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;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;시스템에서 제시한 정보를 보고 자신의 목표를 구체적으로 명료화&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 유튜브, 음악 앱의 디지털 시스템 추천 -&amp;gt; 영상을 보겠다/음악을 듣겠다의 목표 구체화&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 여름에 여름 음악 추천...등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;고려할 점&amp;nbsp;
&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 변환 단계&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: #006dd7;&quot;&gt;&lt;b&gt;입력 장치가 받은 정보를 시스템의 처리 장치로 변환하는 단계&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;입력 장치가 시스템의 기능을 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;얼마나 충실하게 반영하고 있는지&lt;/b&gt;&lt;/span&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;ex. 음악 top 100 한 번에 담았다가 취향이 아닌 음악이 들어갔을 때 삭제, 한 번 더 듣고 싶으면 다시 넣는 기능, 순서 바꾸는 기능 등&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;출력 도구로 전환&lt;/b&gt;&lt;/span&gt;하는 과정&lt;/li&gt;
&lt;li&gt;시스템이 가지고 있는 정보의 넓이와 깊이를 시스템의 출력장치가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;얼마나 충실하게 묘사할 수 있는지&lt;/b&gt;&lt;/span&gt;가 중요
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 고상향 그래픽이 탑재된 컴퓨터에서만 돌아가는 게임, 게임 렉 -&amp;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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 평가 단계&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: #006dd7;&quot;&gt;&lt;b&gt;인터페이스에 나타난 정보&lt;/b&gt;&lt;/span&gt;를 보고 이를 사용자가 가지고 있는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;목표와 비교&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;표명 단계에서 사용자가 마음속에서 구체화한 목표가 정말 잘 이루어졌는지 평가&lt;/li&gt;
&lt;li&gt;적정한 범위의 정보들이 사용자가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;이해하기 쉬운 형태&lt;/b&gt;&lt;/span&gt;로 제시되고 있는지가 중요
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 내가 듣고 싶은 음악이 잘 나온다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;size16&quot;&gt;- 상호작용에 사용되는 내용을 만드는 과정과 그것이 사용자에게 전달되는 과정에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자와 사업자 중에 누가 주도권을&lt;/b&gt; &lt;b&gt;가지고 있는지&lt;/b&gt;&lt;/span&gt;에 따라 상호작용의 유형 구분&amp;nbsp; &amp;nbsp;전송형 | 등록형 | 문의형 | 대화형&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;b&gt;전송형 (Transmission)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;사업자가 주도&lt;/b&gt;&lt;/span&gt;해 내용을 만들어 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자에게 전달&lt;/b&gt;&lt;/span&gt;하는 상호작용의 유형&lt;/li&gt;
&lt;li&gt;전적으로 사업자가 편집권을 가지며 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자는 수동적으로 정보를 받아들이는 상호작용&lt;/b&gt;&lt;/span&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;ex. TV 송출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;등록형 (Registration)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;사용자가 내용 생성을 주도&lt;/b&gt;&lt;/span&gt;하고 이를 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자에게 전달하는 사업자&lt;/b&gt;&lt;/span&gt; 유형&lt;/li&gt;
&lt;li&gt;내용은 개별 사용자를 통해 생성되지만, 상호작용이 진행되는 과정은 사업자나 운영자를 통해 이루어짐&lt;/li&gt;
&lt;li&gt;등록하는 과정이 얼마나 쉽고 즐거운지,&amp;nbsp;사용자 입장에서 상품이나 콘텐츠를 등록하는 비용에 큰 효과를 거둘 수 있게 하는 것이 중요 (ex. 포인트, 돈)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 족보 공유 사이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문의형 (Consultation)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;내용을 만드는 것은 사업자가 주도&lt;/b&gt;&lt;/span&gt;하고 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자가 전달 과정의 주도권&lt;/b&gt;&lt;/span&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;ex. 밀리의 서재 - 만들어진 콘텐츠를 사용할지 말지는 사용자가 정한다~&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대화형 (Conversation)&lt;/b&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;b&gt;모두 사용자가 결정&lt;/b&gt;&lt;/span&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;ex. 인스타그램, 유튜브 등의 소셜 미디어&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;상호작용의 수준 평가 : &lt;span style=&quot;color: #006dd7;&quot;&gt;상호작용성&lt;/span&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;- 상호성 | 반응성 | 신속성 | 다중성 | 통제성&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;b&gt;상호성 (Reciprocity)&lt;/b&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;b&gt;시스템과 양방향 의사교환&lt;/b&gt;&lt;/span&gt;이 얼마나 가능한지 판단&lt;/li&gt;
&lt;li&gt;상호작용이 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;얼마나 자주&lt;/b&gt; &lt;/span&gt;발생하는가?
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 카카오톡, 인스타그램 등 매일 쓰는 시스템 &amp;gt; 연말 정산을 할 때만 들어가는 국세정의 홈텍스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;반응성 (Responsiveness)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;시스템의 응답이 얼마나 적절하고 관련성이 높으며 사용자의 필요를 충족&lt;/b&gt;&lt;/span&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;ex. 구글 검색 추천 검색어('경희' 만 쳐도 '경희대학교'가 나오는 것)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;신속성 (Speed of Response)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;얼마나 즉각적이고 지연이 없는지&lt;/b&gt;&lt;/span&gt; 판단&lt;/li&gt;
&lt;li&gt;(=) 매체의 동시성&amp;nbsp; - 매체의 전달 속도가 빠르거나 동시에 여러 가지 내용이 오갈 수 있을 때
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 다양한 앱 한 번에 사용, 왔다갔다 용이, 접속 시간&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중성 (Multimode)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;얼마나 다양한 모드의 정보를 제공하고 제공받을 수 있는지&lt;/b&gt; &lt;/span&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;ex. 휴대폰 - 통화(청각), 스와이프(촉각)...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;높은 해상도를 가진 다양한 종류의 정보를 한 번에 주고 받을 수 있을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통제성 (Controllability)&lt;/b&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: #006dd7;&quot;&gt;&lt;b&gt;정보의 순서와 내용 및 시간을 사용자가 조종&lt;/b&gt;&lt;/span&gt;할 수 있는 정도&lt;/li&gt;
&lt;li&gt;부가적 상호작용성 -&amp;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;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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 나무위키 &amp;gt; 뉴스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시간적 통제성&lt;/b&gt;
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 유튜브 영상 배속 &amp;gt; TV 송출 영상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;size16&quot;&gt;- 사람들은 특정 목적을 달성하기 위해 어떤 행위를 하면서 상호작용함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사람들이 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;어떤 행위를 하면서 디지털 시스템과 상호작용하느냐&lt;/b&gt;&lt;/span&gt;에 따라 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;어떤 종류의 상호작용 스타일을 제공&lt;/b&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;&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;b&gt;지시하기와 명령어 스타일&lt;/b&gt;
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자가 어떤 일을 수행하기 위해 디지털 시스템에게 어떤 작업을 지시하면, &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;시스템은 주어진 명령을 그대로 수행하기만 하는 경우&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;명령어 스타일 (Command Entry Style)
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. ctrl c + v, 포토샵/피그마 명령어 단축키..&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;초보자들이 쓰기 어렵다 (-) vs 고수가 되면 매우 편하다 (+)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이야기하기와 대화형 스타일&lt;/b&gt;
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자가 시스템과 대화하고, &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;시스템은 사람의 대화 상대가 되는 경우&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;사람들이 일상생활에서 해왔던 사람과 사람 간의 대화 방식으로 디지털 시스템을 대하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;대화형 스타일 (Dialog Style)
&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 윈도우 다운로드 창 다음, 동의함 등&lt;/li&gt;
&lt;li&gt;ex. ATM 기 - 카드를 회수해야 돈이 나오도록 스타일 바꿔서 카드 분실 사고 감소&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;ex. 설문조사 폼, 회원가입 정보 입력&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;ex. 시리, AI 스피커 (맥락 중요)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;탐색하기와 메뉴 스타일&lt;/b&gt;
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;다양한 정보를 둘러보고 자신이 원하는 항목을 선택하는 방식&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;새로운 지식을 알아가는 사용 과정 (+) vs 정보의 바닷속 방황 (-)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;메뉴 스타일 (Menu Style)
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자에게 선택할 수 있는 대안을 텍스트나 그래픽 기반으로 제시 -&amp;gt; 메뉴구조를 항해하면서 원하는 대안 서치 -&amp;gt; 마우스나 키보드, 기능키를 이용해 원하는 대상 선택 -&amp;gt; 활성화&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 햄버거 바&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;조종하기와 직조작 스타일&lt;/b&gt;
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자가 자신이 가지고 있는 실제 대상에 대한 지식을 기반으로 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;시스템에서 제공하고 있는 대상을 조종하는 방식&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;직조작 스타일 (Direct Manipulation Style)
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 게임 캐릭터 옷 갈아입히기, 아이템 창 바로 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;조건 3가지
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사용자가 관심을 가지고 있는 대상이 항상 사용자에게 명확하게 제시되어야 함&amp;nbsp; (ex. 게임 캐릭터 마커화)&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;/li&gt;
&lt;li&gt;&lt;b&gt;위임하기와 대리인 스타일&lt;/b&gt;
&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;사람이 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;직접 수행하기 귀찮은 행위&lt;/b&gt;&lt;/span&gt;를 디지털 시스템에게 위임함으로써 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;디지털 시스템이 어느 정도의 자율권을 가지고 작업을 수행하는 경우&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;대리인 스타일 (Intelligent Agent Sytle)
&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex. 챗 gpt 논문 요약&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;조건 3가지
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;대리인 시스템의 행동이 예측 가능해야 함 (시도때도 없는 참견 x, 신뢰 중요)&lt;/li&gt;
&lt;li&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;ex. 할루시네이션 방지를 위한 장치 (출처를 함께 준다든지)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;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;b&gt;사회적 상호작용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;(HCI 1.0) 디지털 시스템과 개인 간의 기능적 상호작용 -&amp;gt; (HCI 2.0) 사용자 간의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;네트워크 및 커뮤니티 기반&lt;/b&gt;&lt;/span&gt;의 상호작용&lt;/li&gt;
&lt;li&gt;참여하는 상호작용 (ex. 치치직) | 개방하는 상호작용 (ex. 족보 공유) | 공감하는 상호작용 (ex. 기부 사이트 스토리텔링)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;창조적 상호작용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이미 기존에 만들어진 제품이나 서비스 단순 이용 -&amp;gt; 새로운 디지털 제품이나 서비스를 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사용자가 직접 만들어 가는&lt;/b&gt; &lt;/span&gt;상호작용&amp;nbsp; &amp;nbsp;|&amp;nbsp; UCC (User Created Contents) UGC(User Generated Contents)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;사용자가 제작자의 작품에 반응 (ex. 좋아요) | 제작자가 사용자의 의견 파악 (ex. 댓글) | 사용자가 공유된 관심사를 형성 (ex. 알고리즘 형성)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;촉지적 상호작용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;디지털 형식이기 때문에 물리적인 형태나 느낌을 가지고 있지 않아 다소 추상적 -&amp;gt; 최근 구체적으로 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;손으로 만져지는&lt;/span&gt; &lt;/b&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;촉각 직조작 (ex. 스마트폰 확대/축소) | 경량 상호작용 (ex. 아이폰 사진 확대/움직임 즉각적으로 움직이는 피드백) | 동형 효과 (ex. 카메라 확대/축소 현실의 실세상 조작과 비슷)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공간적 상호작용&lt;/b&gt; - 상호작용이 일어나고 있는 공간의 의미를 적극적으로 활용한 상호작용, 밖에서 하는 행동 안에서 똑같이
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;내재적 공간 (ex. VR 농구는 농구장 배경) | 전체적 상호작용 (ex. 닌텐도 운동 자기 몸 전체 사용) | 신체적 소통 (ex. 신체 움직임으로 의사 표현)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;표면적 묘사&lt;/b&gt; - 디지털 시스템에서 상호작용의 대상을 사실적으로 표현하는 상호작용, 현실과 같은 입체감
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;중점표현 (ex. 실제 세상 - 지도 나름대로 의미있게 표현) | 외재화 (ex. 생각하는 것 구체적인 대상으로 제공) | 지각된 맵핑 (ex. 로드뷰 실제 새상의 모습의 매칭)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내재화된 촉진&lt;/b&gt; - 사용자의 행동을 촉진, 허용하거나 금지, 제한하는 상호작용
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;내재화된 제약사항 (ex. 사용자 행동 미세 조절 - 협업 유도) | 다중접속점 (ex. 모든 사용자가 어떤 일을 동시에 보고 직접 조작) | 맞춤형 표현 (ex. 시스템 표현 방식 = 일상생활 경험)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHilOu/btsM21XK0Rm/ZHrvfIkY6StKC84DF8md20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHilOu/btsM21XK0Rm/ZHrvfIkY6StKC84DF8md20/img.png&quot; data-alt=&quot;사용 교재&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHilOu/btsM21XK0Rm/ZHrvfIkY6StKC84DF8md20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHilOu%2FbtsM21XK0Rm%2FZHrvfIkY6StKC84DF8md20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;300&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용 교재&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: center;&quot; data-alt=&quot;사용 교재&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJoIUX/btsMMKpxEh7/oG2GbZdaWyp2Xy5lArpAl1/img.png&quot; data-url=&quot;https://blog.kakaocdn.net/dn/eJoIUX/btsMMKpxEh7/oG2GbZdaWyp2Xy5lArpAl1/img.png&quot;&gt;&lt;/span&gt;+ khux 세션 자료&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>HCI x UX</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/33</guid>
      <comments>https://swchaey.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 30 Mar 2025 14:37:00 +0900</pubDate>
    </item>
    <item>
      <title>HCI x UX 개론</title>
      <link>https://swchaey.tistory.com/32</link>
      <description>&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJoIUX/btsMMKpxEh7/oG2GbZdaWyp2Xy5lArpAl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJoIUX/btsMMKpxEh7/oG2GbZdaWyp2Xy5lArpAl1/img.png&quot; data-alt=&quot;사용 교재&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJoIUX/btsMMKpxEh7/oG2GbZdaWyp2Xy5lArpAl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJoIUX%2FbtsMMKpxEh7%2FoG2GbZdaWyp2Xy5lArpAl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;300&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;929&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용 교재&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HCI (Human-Computer Interaction)&lt;/b&gt;&lt;/span&gt;: 인간과 컴퓨터 사이의 상호작용 방식을 창조하고 평가함으로써 디지털 인공물을 구현하고, &lt;b&gt;사람들이 의미 있는 경험을 할 수 있도록 연구&lt;/b&gt;하는 분야&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HCI 1.0&lt;/b&gt;&lt;/span&gt;: &lt;b&gt;한 명의 사용자와 컴퓨터 시스템 간에 주고 받는 상호작용&lt;/b&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 style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HCI&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; 2.0&lt;/b&gt;&lt;/span&gt;: 단순 개인이 컴퓨터 화면에서 보는 시스템의 모양을 넘어, &lt;b&gt;다양한 시스템과 사람들 간의 모든 상호작용&lt;/b&gt;을 연구 대상으로 함 (ex. 인스타그램 하트)&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 style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HCI&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; 3.0&lt;/b&gt;&lt;/span&gt;: 차세대 HCI. 개인과 집단을 넘어 사회 전체를 대상으로 하며, 컴퓨터를 넘어 &lt;b&gt;정보 기기, 디지털 제품 및 서비스, 콘텐츠까지 포함하는 전 영역&lt;/b&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;b&gt;HCI 분야가 중요한 이유&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c37HQB/btsMNGtftmc/QKr99k42iPmk6EvJKi3g41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c37HQB/btsMNGtftmc/QKr99k42iPmk6EvJKi3g41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c37HQB/btsMNGtftmc/QKr99k42iPmk6EvJKi3g41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc37HQB%2FbtsMNGtftmc%2FQKr99k42iPmk6EvJKi3g41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;327&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;327&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: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;b&gt;I&lt;/b&gt;nterface&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;&lt;b&gt;I&lt;/b&gt;nteraction&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;&lt;b&gt;E&lt;/b&gt;xperience&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;목표: 위 세 가지 요소를 연구해 사용자에게 &lt;b&gt;최적의 사용자 경험을 제공하는 고품질의 디지털 제품, 서비스 및 콘텐츠 개발&lt;/b&gt;하는 것이 HCI의 목표!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Tool - Interface&lt;/b&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;- 인터페이스 디자인: 입출력장치의 모양과 내용을 디자인하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자와 접하는 시간이 상대적으로 짧음 (ex. 단일 화면, 효과음 등)&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Activity - Interaction&lt;/b&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;- 인터랙션 설계: 화면에 보이는 요소 뿐만 아니라 화면에 보이지 않는 사람의 행동과 이에 반응하는 시스템 전체를 설계하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인터페이스보다 좀 더 긴 시간 사용자와 접촉 지속 (ex. 일련의 의사소통 과정을 가짐)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 디자인에서의 인터랙션 디자인은 시스템의 행동적인 측면에 초점을 맞추고 있기 때문에 HCI 맥락에서의 상호작용보다 작은 개념&lt;/p&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: #000000;&quot;&gt;&lt;b&gt;Goal - experience&lt;/b&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;- 사용자가 디지털 제품이나 서비스를 사용하고나 사용 상황을 예상하면서 갖게 되는 모든 감정, 지각, 인지적인 결과&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;주관성&lt;/span&gt; (Subjectivity)&lt;/b&gt;&lt;/span&gt;: 경험은 근본적으로 사람의 내부에 축적되는 효과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;총체성&lt;/span&gt; (Holistic)&lt;/b&gt;&lt;/span&gt;: 특정 시점에 개인이 느끼는 총체적인 효과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정황성&lt;/span&gt; (Contextuality&lt;/b&gt;)&lt;/span&gt;: 인터랙션이 일어나는 시점에서의 환경이나 맥락에 영향 받음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;- 경험하는 과정 그 자체를 즐기게 됨&lt;/p&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;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;유용성&lt;/span&gt; (Usefulness)&lt;/b&gt;&lt;/span&gt;: 사람들이 시스템을 이용해 하고자 하는 일을 효과적으로 달성할 수 있어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용성&lt;/span&gt; (Usability)&lt;/b&gt;&lt;/span&gt;: 사람들이 디지털 제품이나 서비스를 가능한 쉽고 편리하게 사용할 수 있어야 함 (최대한 적은 노력으로 목적 달성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;감성&lt;/span&gt; (Affect)&lt;/b&gt;&lt;/span&gt;: 시스템을 사용하면서 사람들이 마음속에서 얼마나 적절한 느낌을 받았는지를 판단 (목적에 적합한 감성을 풍부하게 느낄 수 있어야 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;+ 차세대 경험을 위한 추가 조건&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;수용성&lt;/span&gt; (Acceptability)&lt;/span&gt;&lt;/b&gt;: 기술에 대한 수용성(ex. 서비스 시간이 너무 김)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;관계성&lt;/span&gt; (Relationship)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HCI 연구 절차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;UX 리서치&lt;/b&gt;&lt;/span&gt;: 사용자 분석, 과업 분석, 맥락 분석, 기술 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;UX 디자인&lt;/b&gt;&lt;/span&gt;: 컨셉 디자인, 정보구조 디자인(ex. 메뉴바 어디에?), 인터랙션 디자인, 인터페이스 디자인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;UX 향상&lt;/b&gt;&lt;/span&gt;: 디지털 시스템의 최종 목표 설정, 현재 상태 평가 및 개선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HCI x UX</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/32</guid>
      <comments>https://swchaey.tistory.com/32#entry32comment</comments>
      <pubDate>Mon, 17 Mar 2025 17:31:48 +0900</pubDate>
    </item>
    <item>
      <title>github 오류 해결</title>
      <link>https://swchaey.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;commit 제한&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1732424048853&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git config --global user.name &quot;Your Name&quot;
git config --global user.email &quot;you@example.com&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;설정 확인&lt;/p&gt;
&lt;pre id=&quot;code_1732424066297&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git config --global --list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732424074082&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git commit -m &quot;Initial commit&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;SSH 키&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH&amp;nbsp;키&amp;nbsp;생성&amp;nbsp;확인&lt;/p&gt;
&lt;pre id=&quot;code_1732424159668&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls ~/.ssh

SSH 키 생성
ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;

SSH 공개 키 복사
cat ~/.ssh/id_rsa.pub

SSH 에이전트 시작
eval &quot;$(ssh-agent -s)&quot;
ssh-add ~/.ssh/id_rsa

SSH키 추가 여부 확인
ssh-add -l&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;github에서&amp;nbsp;SSH&amp;nbsp;등록&amp;nbsp;(settings,&amp;nbsp;SSH&amp;nbsp;and&amp;nbsp;GPG&amp;nbsp;keys) &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결&amp;nbsp;확인 &lt;/p&gt;
&lt;pre id=&quot;code_1732424175889&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh -T git@github.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강제 푸시&lt;/p&gt;
&lt;pre id=&quot;code_1732424183802&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push -u origin main --force&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;로컬 브랜치와 원격 브랜드 연결&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1732424444333&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git fetch origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;파일 크기 제한&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git LFS(Git Large File Storage) 사용&lt;/p&gt;
&lt;pre id=&quot;code_1732426352995&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git lfs install

git lfs track &quot;제한 파일&quot;
git add .gitattributes [제한파일]
git commit -m &quot;Track large file with Git LFS&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 로그 확인&lt;/p&gt;
&lt;pre id=&quot;code_1732427623733&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git log --name-only&lt;/code&gt;&lt;/pre&gt;</description>
      <category>지식 창고</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/31</guid>
      <comments>https://swchaey.tistory.com/31#entry31comment</comments>
      <pubDate>Sun, 24 Nov 2024 19:17:56 +0900</pubDate>
    </item>
    <item>
      <title>github 2 (.gitignore , requirements.txt)</title>
      <link>https://swchaey.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1)&amp;nbsp; &lt;b&gt;.gitignoer&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignoer 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.toptal.com/developers/gitignore&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.toptal.com/developers/gitignore&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732418474250&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;gitignore.io&quot; data-og-description=&quot;Create useful .gitignore files for your project&quot; data-og-host=&quot;www.toptal.com&quot; data-og-source-url=&quot;https://www.toptal.com/developers/gitignore&quot; data-og-url=&quot;https://www.toptal.com/developers/gitignore&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Xcrrx/hyXzNbACHf/ZByxEm8DpHXhpTwvEcKK40/img.png?width=2400&amp;amp;height=1254&amp;amp;face=0_0_2400_1254&quot;&gt;&lt;a href=&quot;https://www.toptal.com/developers/gitignore&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.toptal.com/developers/gitignore&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Xcrrx/hyXzNbACHf/ZByxEm8DpHXhpTwvEcKK40/img.png?width=2400&amp;amp;height=1254&amp;amp;face=0_0_2400_1254');&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;gitignore.io&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Create useful .gitignore files for your project&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.toptal.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) &lt;b&gt;requirements.txt&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1732418487278&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732418501326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한번에 설치&lt;/p&gt;
&lt;pre id=&quot;code_1732418519521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>지식 창고</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/30</guid>
      <comments>https://swchaey.tistory.com/30#entry30comment</comments>
      <pubDate>Sun, 24 Nov 2024 13:53:29 +0900</pubDate>
    </item>
    <item>
      <title>github</title>
      <link>https://swchaey.tistory.com/29</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; 깃 클론 : 레포지토리 복사 &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1728042341736&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone ~
git clone -b 브랜치 이름 ~&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; cd (change directory) &amp;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;b&gt;&amp;lt; 깃허브에 새 브랜치를 생성하고 작업한 파일을 업로드하는 방법 &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬에서 새 브랜치 생성&lt;/p&gt;
&lt;pre id=&quot;code_1728044397110&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 새로운 브랜치 생성
git checkout -b 새브랜치이름&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업한 파일 스테이징 및 커밋&lt;/p&gt;
&lt;pre id=&quot;code_1728044422685&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 모든 변경 사항을 추가 (스테이징)
git add .

git add [파일/디렉토리 이름]


//add한 파일 모두 취소
git rm --cached -r .

//특정 파일만 add 취소
git rm --cached [파일]


# 커밋
git commit -m &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;github의 원격 저장소에 푸시&lt;/p&gt;
&lt;pre id=&quot;code_1728044573054&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push origin 새브랜치이름&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732413757461&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push -u origin main&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732416217262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//로컬 저장소에서 원격 저장소로 올리기
git push origin [브랜치 이름]&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;Repository에 'main' branch로 push하기&lt;/p&gt;
&lt;pre id=&quot;code_1732416277652&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git init
git add [디렉토리명]
git commit -m &quot;commit message&quot;

git push -u origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소 바꾸기&lt;/p&gt;
&lt;pre id=&quot;code_1732413026503&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//연결된 원격저장소 있는지 확인
git remote -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732413049032&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//이미 존재하는 원격저장소 삭제
git remote rm origin&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732413062279&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//원격 저장소와 연결
git remote add origin [깃헙 레포지토리 주소]&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;내가 현재 있는 branch 확인하기&lt;/p&gt;
&lt;pre id=&quot;code_1732413235112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git branch&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;branch 이름 바꾸기&lt;/p&gt;
&lt;pre id=&quot;code_1732413264894&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git branch -M [되고싶은 branch name]
git branch -m [현재 branch name] [바꾸고싶은 branch name]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;branch 전환하기&lt;/p&gt;
&lt;pre id=&quot;code_1732413648460&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git branch checkout [전환하고싶은 브랜치명]&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;pull&lt;/p&gt;
&lt;pre id=&quot;code_1732416938113&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git pull origin [branch name]
git pull&lt;/code&gt;&lt;/pre&gt;</description>
      <category>지식 창고</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/29</guid>
      <comments>https://swchaey.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 24 Nov 2024 11:55:49 +0900</pubDate>
    </item>
    <item>
      <title>05장(회원 탈퇴를 예측하는 테크닉), 06장(물류의 최적경로를 컨설팅하는 테크닉)</title>
      <link>https://swchaey.tistory.com/28</link>
      <description>&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;05장. 회원 탈퇴를 예측하는 테크닉 10&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;전제 조건&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 스포츠 센터의 데이터&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;1069&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7MHgD/btsJRbEkR3R/HVps2eb3iceI7jnH0jJNtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7MHgD/btsJRbEkR3R/HVps2eb3iceI7jnH0jJNtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7MHgD/btsJRbEkR3R/HVps2eb3iceI7jnH0jJNtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7MHgD%2FbtsJRbEkR3R%2FHVps2eb3iceI7jnH0jJNtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;240&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;379&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;041. 데이터를 읽어 들이고 이용 데이터를 수정하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727780116909&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
customer = pd.read_csv('customer_join.csv')
uselog_months = pd.read_csv('use_log_months.csv')&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;미래를 예측하기 위해 그 달과 1개월 전의 이용 이력(횟수)만으로 데이터 작성&lt;/p&gt;
&lt;pre id=&quot;code_1727789562336&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;year_months = list(uselog_months[&quot;연월&quot;].unique())
uselog = pd.DataFrame()
for i in range(1, len(year_months)):
    tmp = uselog_months.loc[uselog_months[&quot;연월&quot;]==year_months[i]]
    tmp.rename(columns={&quot;count&quot;:&quot;count_0&quot;}, inplace = True)
    tmp_before = uselog_months.loc[uselog_months[&quot;연월&quot;]==year_months[i-1]]
    del tmp_before[&quot;연월&quot;]
    tmp_before.rename(columns={&quot;count&quot;:&quot;count_1&quot;}, inplace=True)
    tmp = pd.merge(tmp, tmp_before, on=&quot;customer_id&quot;, how=&quot;left&quot;)
    uselog = pd.concat([uselog, tmp], ignore_index=True)
uselog.head()&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;555&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qcTvt/btsJTz4cS2H/bqpi9GsAsGZgEsxLMvXEnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qcTvt/btsJTz4cS2H/bqpi9GsAsGZgEsxLMvXEnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qcTvt/btsJTz4cS2H/bqpi9GsAsGZgEsxLMvXEnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqcTvt%2FbtsJTz4cS2H%2Fbqpi9GsAsGZgEsxLMvXEnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;365&quot; height=&quot;207&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;count_0 : 현재 달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;count_1 : 이전 달&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;042. 탈퇴 전월의 탈퇴 고객 데이터를 작성하자&amp;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;648&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnXiCU/btsJRyTDB5D/04k7USYr5O1BjuEN7kyf61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnXiCU/btsJRyTDB5D/04k7USYr5O1BjuEN7kyf61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnXiCU/btsJRyTDB5D/04k7USYr5O1BjuEN7kyf61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnXiCU%2FbtsJRyTDB5D%2F04k7USYr5O1BjuEN7kyf61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;564&quot; height=&quot;141&quot; data-origin-width=&quot;648&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탈퇴한 회원을 추출하고, end_date의 1개월 전을 계산해 연월에 저장한 후 uselog와 결합&lt;/p&gt;
&lt;pre id=&quot;code_1727790408587&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from dateutil.relativedelta import relativedelta
exit_customer = customer.loc[customer[&quot;is_deleted&quot;]==1]
exit_customer[&quot;exit_date&quot;] = None
exit_customer[&quot;end_date&quot;] = pd.to_datetime(exit_customer[&quot;end_date&quot;])
for i in range(len(exit_customer)):
    exit_customer[&quot;exit_date&quot;].iloc[i] = exit_customer[&quot;end_date&quot;].iloc[i] - relativedelta(months=1)
exit_customer[&quot;연월&quot;] = pd.to_datetime(exit_customer[&quot;exit_date&quot;]).dt.strftime(&quot;%Y%m&quot;)
uselog[&quot;연월&quot;] = uselog[&quot;연월&quot;].astype(str)
exit_uselog = pd.merge(uselog, exit_customer, on=[&quot;customer_id&quot;, &quot;연월&quot;], how=&quot;left&quot;)
print(len(uselog))
exit_uselog.head()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;33851&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lF0Vn/btsJRy0pye1/KczkFxAK1dohehQsE9chg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lF0Vn/btsJRy0pye1/KczkFxAK1dohehQsE9chg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lF0Vn/btsJRy0pye1/KczkFxAK1dohehQsE9chg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlF0Vn%2FbtsJRy0pye1%2FKczkFxAK1dohehQsE9chg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;971&quot; height=&quot;155&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;155&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;exit_customer[&quot;exit_date&quot;] = None&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; exit_customer 데이터프레임에 새로운 열 만들고, 모든 값을 None으로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exit_customer[&quot;exit_date&quot;].iloc[i] = exit_customer[&quot;end_date&quot;].iloc[i] - relativedelta(months=1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;relativedelta(months=1) :&lt;/b&gt; end_date에서 한 달 전 날짜를 계산해 줌&lt;/p&gt;
&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; 특정 회원이 그만두기 전월의 상태를 나타내는 데이터&lt;/p&gt;
&lt;pre id=&quot;code_1727791281410&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exit_uselog = exit_uselog.dropna(subset=[&quot;name&quot;])
print(len(exit_uselog))
print(len(exit_uselog[&quot;customer_id&quot;].unique()))
exit_uselog.head()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1104&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1104&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r5l2r/btsJShXZ4Yv/GHs3f2cY4cJPlklfTIra2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r5l2r/btsJShXZ4Yv/GHs3f2cY4cJPlklfTIra2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r5l2r/btsJShXZ4Yv/GHs3f2cY4cJPlklfTIra2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr5l2r%2FbtsJShXZ4Yv%2FGHs3f2cY4cJPlklfTIra2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;766&quot; height=&quot;260&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;330&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;exit_uselog = exit_uselog.dropna(subset=[&quot;name&quot;])&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; name 열만을 기준으로 결측값을 확인하여 그 행 삭제&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;043. 지속 회원의 데이터를 작성하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지속 회원은 탈퇴 월이 없기 때문에 어떤 연월의 데이터를 작성해도 상관 없음&lt;/p&gt;
&lt;pre id=&quot;code_1727791832699&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conti_customer = customer.loc[customer[&quot;is_deleted&quot;]==0]
conti_uselog = pd.merge(uselog, conti_customer, on=[&quot;customer_id&quot;], how=&quot;left&quot;)
print(len(conti_uselog))
conti_uselog = conti_uselog.dropna(subset=[&quot;name&quot;])
print(len(conti_uselog))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;33851&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27422&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;name 칼럼의 결손 데이터를 제거해 탈퇴 회원 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탈퇴 데이터가 1104개밖에 없기 때문에 지속회원 데이터 27422개를 전부 사용한다면 불균형 데이터가 되어 버림&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;지속 회원 데이터가 회원 당 1개가 되도록 언더샘플링&lt;/p&gt;
&lt;pre id=&quot;code_1727792459733&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conti_uselog = conti_uselog.sample(frac=1).reset_index(drop=True)
conti_uselog = conti_uselog.drop_duplicates(subset=&quot;customer_id&quot;)
print(len(conti_uselog))
conti_uselog.head()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2842&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBXiX/btsJRylM99n/JSlRQhukJOaUUEjWHh2Fq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBXiX/btsJRylM99n/JSlRQhukJOaUUEjWHh2Fq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBXiX/btsJRylM99n/JSlRQhukJOaUUEjWHh2Fq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBXiX%2FbtsJRylM99n%2FJSlRQhukJOaUUEjWHh2Fq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;250&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;347&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;conti_uselog = conti_uselog.&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;sample&lt;/b&gt;&lt;/span&gt;(frac=1)&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;.reset_index(drop=True) &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; conti_uselog의 모든 행을 무작위로 섞음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; sample(frac=1) : 전체 데이터(비율 1, 즉 100%)를 무작위로 샘플링하여 섞어주기 위해 사용&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&gt;&lt;/span&gt;reset_index(drop=True) : 섞은 후 원래 인덱스 삭제 후, 새롭게 인덱스를 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;conti_uselog = conti_uselog.&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;drop_duplicates&lt;/b&gt;&lt;/span&gt;(subset=&quot;customer_id&quot;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; customer_id를 기준으로 중복된 행 제거(기본적으로 첮 번째로 등장한 중복 값을 남김)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지속 회원과 탈퇴 회원 데이터를 세로 결합&lt;/p&gt;
&lt;pre id=&quot;code_1727792878456&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;predict_data = pd.concat([conti_uselog, exit_uselog],ignore_index=True)
print(len(predict_data))
predict_data.head()&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;3946&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IIy7U/btsJS7G1HE2/4DC54rXpymtiycRZPyBwuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IIy7U/btsJS7G1HE2/4DC54rXpymtiycRZPyBwuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IIy7U/btsJS7G1HE2/4DC54rXpymtiycRZPyBwuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIIy7U%2FbtsJS7G1HE2%2F4DC54rXpymtiycRZPyBwuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;783&quot; height=&quot;203&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;255&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;044. 예측할 달의 재적 기간을 작성하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 재적 기간 데이터를 변수로 이용하기 위해 재적 기간 열 추가&lt;/p&gt;
&lt;pre id=&quot;code_1727793147944&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;predict_data[&quot;period&quot;] = 0
predict_data[&quot;now_date&quot;] = pd.to_datetime(predict_data[&quot;연월&quot;], format=&quot;%Y%m&quot;)
predict_data[&quot;start_date&quot;] = pd.to_datetime(predict_data[&quot;start_date&quot;])
for i in range(len(predict_data)):
    delta = relativedelta(predict_data[&quot;now_date&quot;][i], predict_data[&quot;start_date&quot;][i])
    predict_data[&quot;period&quot;][i] = int(delta.years*12 + delta.months)
predict_data.head()&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;984&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6LKSY/btsJRxmROHA/YvWJKbmwec6TL3IW80YIO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6LKSY/btsJRxmROHA/YvWJKbmwec6TL3IW80YIO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6LKSY/btsJRxmROHA/YvWJKbmwec6TL3IW80YIO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6LKSY%2FbtsJRxmROHA%2FYvWJKbmwec6TL3IW80YIO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;763&quot; height=&quot;282&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;364&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;045. 결측치를 제거하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결측치가 있으면 머신러닝할 수 없으므로 결측치 제거 or 채워야 함 &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;pre id=&quot;code_1727793682895&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;predict_data.isna().sum()&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;307&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0m3Dd/btsJSmES4oz/UOCNWAGupOKJ4FvjvBWj31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0m3Dd/btsJSmES4oz/UOCNWAGupOKJ4FvjvBWj31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0m3Dd/btsJSmES4oz/UOCNWAGupOKJ4FvjvBWj31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0m3Dd%2FbtsJSmES4oz%2FUOCNWAGupOKJ4FvjvBWj31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;456&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;end_date와 exit_date는 탈퇴 고객만 있는 것이므로 유지 회원은 켤측치가 되는 게 당연&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 &lt;b&gt;count_1&lt;/b&gt;의 결손치만 제거&lt;/p&gt;
&lt;pre id=&quot;code_1727793834451&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;predict_data = predict_data.dropna(subset=[&quot;count_1&quot;])
predict_data.isna().sum()&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;293&quot; data-origin-height=&quot;690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRMm7/btsJRZXC9n5/1mqlX0efFmnUCNFak9iukK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRMm7/btsJRZXC9n5/1mqlX0efFmnUCNFak9iukK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRMm7/btsJRZXC9n5/1mqlX0efFmnUCNFak9iukK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRMm7%2FbtsJRZXC9n5%2F1mqlX0efFmnUCNFak9iukK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;156&quot; height=&quot;367&quot; data-origin-width=&quot;293&quot; data-origin-height=&quot;690&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;046. 문자열 변수를 처리할 수 있게 가공하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝할 때 가입 캠페인 구분, 회원 구분, 성별과 같은 문자열 데이터 &lt;b&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;카테고리 변수&lt;/span&gt;)&lt;/b&gt; 어떻게 처리하면 좋을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 플래그 만들기! &lt;b&gt;(&lt;span style=&quot;color: #ef6f53;&quot;&gt;더미 변수 : &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;독립 변수를 0과 1로 변환한 변수&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727794167224&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;target_col = [&quot;campaign_name&quot;, &quot;class_name&quot;, &quot;gender&quot;, &quot;count_1&quot;, &quot;routine_flg&quot;, &quot;period&quot;, &quot;is_deleted&quot;]
predict_data = predict_data[target_col]
predict_data.head()&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;812&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tIfTf/btsJSGC2sj9/z0SYKdvcvRBu9wuu98OgI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tIfTf/btsJSGC2sj9/z0SYKdvcvRBu9wuu98OgI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tIfTf/btsJSGC2sj9/z0SYKdvcvRBu9wuu98OgI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtIfTf%2FbtsJSGC2sj9%2Fz0SYKdvcvRBu9wuu98OgI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;753&quot; height=&quot;243&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 열만 선택해 새로운 데이터프레임 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 설명 변수로 1개월 전의 이용 횟수 count_1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 카테고리 변수 campaign_name, class_name, gender, 정기 이용 여부 플래그 routine_flg, 재적기간 period&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 목적 변수로 탈퇴 플래그 is_deleted 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 카테고리 변수를 이용해 더미 변수 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1727794593381&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;predict_data = pd.get_dummies(predict_data)
predict_data.head()&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;981&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FvEOj/btsJRXZTHrN/RIcijVYH7BsNEdzOItFqIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FvEOj/btsJRXZTHrN/RIcijVYH7BsNEdzOItFqIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FvEOj/btsJRXZTHrN/RIcijVYH7BsNEdzOItFqIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFvEOj%2FbtsJRXZTHrN%2FRIcijVYH7BsNEdzOItFqIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;981&quot; height=&quot;171&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;171&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;pandas의 get_dummies를 이용해 일괄적으로 더미 변수 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 겹치는 정보를 제거하기 위해 campaign_name_일반, class_name_야간, gender_M 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1727794748165&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;del predict_data[&quot;campaign_name_일반&quot;]
del predict_data[&quot;class_name_야간&quot;]
del predict_data[&quot;gender_M&quot;]
predict_data.head()&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;047. 의사결정 트리를 사용해서 탈퇴 예측 모델을 구축하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 의사결정 트리 알고리즘을 사용해 모델 구축하기&lt;/p&gt;
&lt;pre id=&quot;code_1727795001016&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.tree import DecisionTreeClassifier
import sklearn.model_selection

exit = predict_data.loc[predict_data[&quot;is_deleted&quot;]==1]
conti = predict_data.loc[predict_data[&quot;is_deleted&quot;]==0].sample(len(exit))

X = pd.concat([exit, conti], ignore_index=True)
y = X[&quot;is_deleted&quot;]
del X[&quot;is_deleted&quot;]
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y)

model = DecisionTreeClassifier(random_state=0)
model.fit(X_train, y_train)
y_test_pred = model.predict(X_test)
print(y_test_pred)&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;802&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq6nUO/btsJRcQPjIj/ka62kYZtm2HD3LavDGYWb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq6nUO/btsJRcQPjIj/ka62kYZtm2HD3LavDGYWb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq6nUO/btsJRcQPjIj/ka62kYZtm2HD3LavDGYWb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq6nUO%2FbtsJRcQPjIj%2Fka62kYZtm2HD3LavDGYWb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;517&quot; height=&quot;388&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;602&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;- 1은 탈퇴, 0은 유지를 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;b&gt; from sklearn.tree import DecisionTreeClassifier&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; Decision Tree 분류 모델을 사용하기 위해 sklearn 라이브러리에서 DecisionTreeClassifier 임포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;b&gt; import sklearn.model_selection &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; train_test_split 함수 사용을 위해 sklearn.model_selection 모듈 임포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;conti = predict_data.loc[predict_data[&quot;is_deleted&quot;]==0].sample(len(exit)) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; exit 데이터프레임과 같은 크기로 무작위 샘플링하여 모델 편향 방지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;b&gt; fit&lt;/b&gt;으로 학습용 데이터를 사용해 모델 구축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;b&gt; predict&lt;/b&gt;로 평가 데이터 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실제 정답 비교&lt;/p&gt;
&lt;pre id=&quot;code_1727842784426&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;results_test = pd.DataFrame({&quot;y_test&quot;:y_test ,&quot;y_pred&quot;:y_test_pred })
results_test.head()&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;226&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJxgwo/btsJTLX2Vqs/e2mS6qI6EgICqKd9OLkNfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJxgwo/btsJTLX2Vqs/e2mS6qI6EgICqKd9OLkNfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJxgwo/btsJTLX2Vqs/e2mS6qI6EgICqKd9OLkNfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJxgwo%2FbtsJTLX2Vqs%2Fe2mS6qI6EgICqKd9OLkNfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;162&quot; height=&quot;176&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;245&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;048. 예측 모델을 평가하고 모델을 튜닝해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- results_test 데이터를 집계해 정답률 계산하기&lt;/p&gt;
&lt;pre id=&quot;code_1727842977841&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;correct = len(results_test.loc[results_test[&quot;y_test&quot;]==results_test[&quot;y_pred&quot;]])
data_count = len(results_test)
score_test = correct / data_count
print(score_test)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.8973384030418251&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약 90% 정도의 정확도!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습용 데이터로 예측한 정확도와 평가용 데이터로 예측한 정확도의 차이가 작은 것이 이상적임&lt;/p&gt;
&lt;pre id=&quot;code_1727843174635&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(model.score(X_test, y_test))
print(model.score(X_train, y_train))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.8973384030418251 &lt;br /&gt;0.9790874524714829&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;train data에 과적합인 경향이 있음!&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;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 의사결정 트리는 0과 1로 분할할 수 있는 설명 변수와 그 조건에 맞는 트리 구조를 찾는 방법이므로, 트리의 깊이를 얕게 하면 모델을 단순화할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1727843611023&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;X = pd.concat([exit, conti], ignore_index=True)
y = X[&quot;is_deleted&quot;]
del X[&quot;is_deleted&quot;]
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y)

model = DecisionTreeClassifier(random_state=0, max_depth=5)
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
print(model.score(X_train, y_train))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.9106463878326996 &lt;br /&gt;0.9334600760456274&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;max_depth를 5로 지정해 트리 깊이 제한&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;049. 모델에 기여하는 변수를 확인하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변수와 중요도 저장 &amp;rarr; 변수의 기여율 확인&lt;/p&gt;
&lt;pre id=&quot;code_1727844254361&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;importance = pd.DataFrame({&quot;feature_names&quot;:X.columns, &quot;coefficient&quot;:model.feature_importances_})
importance&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;511&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewd9Rv/btsJTdHAEc7/lzvD9pISAmRK9v5YlHRMR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewd9Rv/btsJTdHAEc7/lzvD9pISAmRK9v5YlHRMR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewd9Rv/btsJTdHAEc7/lzvD9pISAmRK9v5YlHRMR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fewd9Rv%2FbtsJTdHAEc7%2FlzvD9pISAmRK9v5YlHRMR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;313&quot; height=&quot;268&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;438&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;b&gt;model.feature_importances_&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 학습된 의사결정 나무 모델이 각 특징에 부여한 중요도 값을 coefficient 열에 저장&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;의사결정 트리 결과 가시화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; graphviz, plot_tree와 같은 라이브러리 이용&lt;/p&gt;
&lt;pre id=&quot;code_1727846633135&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

plt.figure(figsize=(20,10))  # 그래프 크기 설정
plot_tree(model, 
          feature_names=list(X.columns),
          class_names=[&quot;Not Deleted&quot;, &quot;Deleted&quot;],  
          filled=True, #색 채우기
          rounded=True, 
          fontsize=10)  # 폰트 크기 설정
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1471&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N4lws/btsJUi9d0bG/Cnj8LTJxlZyWBdmyEwz6M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N4lws/btsJUi9d0bG/Cnj8LTJxlZyWBdmyEwz6M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N4lws/btsJUi9d0bG/Cnj8LTJxlZyWBdmyEwz6M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN4lws%2FbtsJUi9d0bG%2FCnj8LTJxlZyWBdmyEwz6M0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;739&quot; height=&quot;342&quot; data-origin-width=&quot;1471&quot; data-origin-height=&quot;681&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;050. 회원 탈퇴를 예측하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예측을 위한 데이터 작성&lt;/p&gt;
&lt;pre class=&quot;ini&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;&lt;code&gt;count_1 = 3
routing_flg = 1
period = 10
campaign_name = &quot;입회비무료&quot;
class_name = &quot;종일&quot;
gender = &quot;M&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;- 데이터 가공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 카테고리 변수를 if 문으로 분기하면서 더미 변수로 작성&lt;/p&gt;
&lt;pre id=&quot;code_1727846978094&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if campaign_name == &quot;입회비반값할인&quot;:
    campaign_name_list = [1, 0]
elif campaign_name == &quot;입회비무료&quot;:
    campaign_name_list = [0, 1]
elif campaign_name == &quot;일반&quot;:
    campaign_name_list = [0, 0]
if class_name == &quot;종일&quot;:
    class_name_list = [1, 0]
elif class_name == &quot;주간&quot;:
    class_name_list = [0, 1]
elif class_name == &quot;야간&quot;:
    class_name_list = [0, 0]
if gender == &quot;F&quot;:
    gender_list = [1]
elif gender == &quot;M&quot;:
    gender_list = [0]
input_data = [count_1, routing_flg, period]
input_data.extend(campaign_name_list)
input_data.extend(class_name_list)
input_data.extend(gender_list)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;범주형 데이터를 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;원핫 인코딩 (One-Hot Encoding)&lt;/b&gt;&lt;/span&gt; 방식으로 변환하여 input_data 리스트에 추가&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;인코딩(encoding) / 부호화 : 데이터의 양을 줄이기 위해 데이터를 코드화하고 압축, 변형하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코딩(decoding) : 압축, 변형된 데이터를 원형으로 변환하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원핫(one-hot) : 비트들의 모임 중 하나만 1이고 나머지는 모두 0인 비트들의 그룹&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원핫 인코딩 : 데이터를 one-hot 데이터 형태로 변형, 압축하는 것&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;pre class=&quot;angelscript&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;&lt;code&gt;from sklearn.preprocessing import OneHotEncoder&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1727847246029&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(model.predict([input_data]))  # 0 또는 1로 예측된 클래스 반환
print(model.predict_proba([input_data])) # 각 클래스에 속할 확률 반환&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1.] &lt;br /&gt;[[0.01492537&amp;nbsp;0.98507463]]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1, 즉 탈퇴가 예상됨&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;06장. 물류의 최적경로를 컨설팅하는 테크닉 10&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;전제 조건&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 부품을 보관하는 창고에서 생산 공장으로 부품 운송&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 각 창고와 공장 구간의 운송 비용은 과거 데이터에서 정량적으로 계산되어 있음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 집계 기간 2019년 1월 1일 ~ 2019년 12월 31일&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; 북부지사와 남부지사의 데이터를 csv로 제공&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;965&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWaab2/btsJT6OQENI/56ZtySuETGfLV9KNZ5lO11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWaab2/btsJT6OQENI/56ZtySuETGfLV9KNZ5lO11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWaab2/btsJT6OQENI/56ZtySuETGfLV9KNZ5lO11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWaab2%2FbtsJT6OQENI%2F56ZtySuETGfLV9KNZ5lO11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;189&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;270&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;051. 물류 데이터를 불러오자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727849113047&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

# 공장데이터 불러오기
factories = pd.read_csv(&quot;tbl_factory.csv&quot;, index_col=0)
factories&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;409&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M0Rd6/btsJUk0o6SB/vciSKXrEMIrZKdceCKenUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M0Rd6/btsJUk0o6SB/vciSKXrEMIrZKdceCKenUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M0Rd6/btsJUk0o6SB/vciSKXrEMIrZKdceCKenUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM0Rd6%2FbtsJUk0o6SB%2FvciSKXrEMIrZKdceCKenUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;273&quot; height=&quot;282&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727849158201&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 창고데이터 불러오기
warehouses = pd.read_csv(&quot;tbl_warehouse.csv&quot;, index_col=0)
warehouses&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;414&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biRamK/btsJTTB8sso/JOAa1YjRdKoBLFZNniOexk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biRamK/btsJTTB8sso/JOAa1YjRdKoBLFZNniOexk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biRamK/btsJTTB8sso/JOAa1YjRdKoBLFZNniOexk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiRamK%2FbtsJTTB8sso%2FJOAa1YjRdKoBLFZNniOexk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;252&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727849182595&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 비용 테이블
cost = pd.read_csv(&quot;rel_cost.csv&quot;, index_col=0)
cost.head()&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;346&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LzAVa/btsJS7nv0yI/i6fuZ1CVe4E8sGSRRqj1C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LzAVa/btsJS7nv0yI/i6fuZ1CVe4E8sGSRRqj1C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LzAVa/btsJS7nv0yI/i6fuZ1CVe4E8sGSRRqj1C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLzAVa%2FbtsJS7nv0yI%2Fi6fuZ1CVe4E8sGSRRqj1C1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;271&quot; height=&quot;215&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727849204996&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 운송 실적 테이블
trans = pd.read_csv(&quot;tbl_transaction.csv&quot;, index_col=0)
trans.head()&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;546&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9Jp3Z/btsJSeHP4BV/1WunBYdKmbsaQlNpx6KlL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9Jp3Z/btsJSeHP4BV/1WunBYdKmbsaQlNpx6KlL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9Jp3Z/btsJSeHP4BV/1WunBYdKmbsaQlNpx6KlL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9Jp3Z%2FbtsJSeHP4BV%2F1WunBYdKmbsaQlNpx6KlL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;442&quot; height=&quot;225&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- index_col=0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; csv 파일의 첫 번째 열을 데이터프레임의 인덱스로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공장 데이터 'FCID'와 창고 데이터 &quot;'WHID' 가 &lt;b&gt;키&lt;/b&gt;임을 알 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 운석 실적을 중심으로 각 정보 결합(레프트 조인)&lt;/p&gt;
&lt;pre id=&quot;code_1727849565209&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data = pd.merge(trans, cost, left_on=[&quot;ToFC&quot;,&quot;FromWH&quot;], right_on=[&quot;FCID&quot;,&quot;WHID&quot;], how=&quot;left&quot;)
join_data.head()&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;749&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0jH0P/btsJUmKBgAv/hNM7kZ8S40kpNrbOHNj8ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0jH0P/btsJUmKBgAv/hNM7kZ8S40kpNrbOHNj8ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0jH0P/btsJUmKBgAv/hNM7kZ8S40kpNrbOHNj8ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0jH0P%2FbtsJUmKBgAv%2FhNM7kZ8S40kpNrbOHNj8ck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;220&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;224&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;b&gt;비용 데이터&lt;/b&gt; 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운송 실적 데이터의 도착 공장(ToFC), 출발 창고(FromWH)와 비용 데이터의 공장ID(FCID)와 창고ID(WHID)를 키로 결합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727849861466&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data = pd.merge(join_data, factories, left_on=&quot;ToFC&quot;, right_on=&quot;FCID&quot;, how=&quot;left&quot;)
join_data.head()&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;929&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZYNem/btsJTpuIsBg/7NNZ9dwI3aHnI3EXseKCUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZYNem/btsJTpuIsBg/7NNZ9dwI3aHnI3EXseKCUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZYNem/btsJTpuIsBg/7NNZ9dwI3aHnI3EXseKCUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZYNem%2FbtsJTpuIsBg%2F7NNZ9dwI3aHnI3EXseKCUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;294&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;390&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;b&gt;공장 정보&lt;/b&gt; 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ToFC 열과 FCID의 열이 일치하는 데이터를 찾아 병합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 일치하지 않는 경우 오른쪽 데이터프레임의 값은 NaN으로 채워짐(left 조인)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727850062684&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data = pd.merge(join_data, warehouses, left_on=&quot;FromWH&quot;, right_on=&quot;WHID&quot;, how=&quot;left&quot;)

join_data = join_data[[&quot;TransactionDate&quot;,&quot;Quantity&quot;,&quot;Cost&quot;,&quot;ToFC&quot;,&quot;FCName&quot;,&quot;FCDemand&quot;,&quot;FromWH&quot;,&quot;WHName&quot;,&quot;WHSupply&quot;,&quot;WHRegion&quot;]]
join_data.head()&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;717&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG5Aux/btsJSjPKGW3/mCMLY4ijkvnfikCdPbQJcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG5Aux/btsJSjPKGW3/mCMLY4ijkvnfikCdPbQJcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG5Aux/btsJSjPKGW3/mCMLY4ijkvnfikCdPbQJcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG5Aux%2FbtsJSjPKGW3%2FmCMLY4ijkvnfikCdPbQJcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;168&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;b&gt;&lt;span&gt;&amp;nbsp;창고&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;정보&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 순서대로 운송 날짜, 운송 수량, 비용, 공장ID, 공장명, 공장수요, 창고ID, 창고명, 창고 공급량, 지사&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 지사 별로 데이터를 비교하기 위해 각각 해당하는 데이터만 추출해서 변수에 저장&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727850328008&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;north = join_data.loc[join_data[&quot;WHRegion&quot;]==&quot;북부&quot;]
north.head()&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;958&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bej5mG/btsJSFyaFV2/4vcePu4OkRxYl9NNqH3gz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bej5mG/btsJSFyaFV2/4vcePu4OkRxYl9NNqH3gz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bej5mG/btsJSFyaFV2/4vcePu4OkRxYl9NNqH3gz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbej5mG%2FbtsJSFyaFV2%2F4vcePu4OkRxYl9NNqH3gz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;216&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;216&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;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727850376755&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;south = join_data.loc[join_data[&quot;WHRegion&quot;]==&quot;남부&quot;]
south.head()&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;955&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdciaT/btsJTHPsgxX/GX11KDVJIDBRjPwjcY8yC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdciaT/btsJTHPsgxX/GX11KDVJIDBRjPwjcY8yC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdciaT/btsJTHPsgxX/GX11KDVJIDBRjPwjcY8yC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdciaT%2FbtsJTHPsgxX%2FGX11KDVJIDBRjPwjcY8yC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;216&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;216&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;052. 현재 운송량과 비용을 확인해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1년간 운송한 부품 수와 비용 집계&lt;/p&gt;
&lt;pre id=&quot;code_1727850522880&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(&quot;북부지사 총비용: &quot; + str(north[&quot;Cost&quot;].sum()) + &quot;만원&quot;)
print(&quot;남부지사 총비용: &quot; + str(south[&quot;Cost&quot;].sum()) + &quot;만원&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;북부지사 총비용: 2189.3만원
남부지사 총비용: 2062.0만원&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1년간 운송 비용을 sum으로 집계&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_1727850612378&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(&quot;북부지사의 총부품 운송개수: &quot; + str(north[&quot;Quantity&quot;].sum()) + &quot;개&quot;)
print(&quot;남부지사의 총부품 운송개수: &quot; + str(south[&quot;Quantity&quot;].sum()) + &quot;개&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;북부지사의 총부품 운송개수: 49146개
남부지사의 총부품 운송개수: 50214개&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;- 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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727850689249&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tmp = (north[&quot;Cost&quot;].sum() / north[&quot;Quantity&quot;].sum()) * 10000
print(&quot;북부지사의 부품 1개당 운송 비용: &quot; + str(int(tmp)) + &quot;원&quot;)
tmp = (south[&quot;Cost&quot;].sum() / south[&quot;Quantity&quot;].sum()) * 10000
print(&quot;남부지사의 부품 1개당 운송 비용: &quot; + str(int(tmp)) + &quot;원&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;북부지사의 부품 1개당 운송 비용: 445원
남부지사의 부품 1개당 운송 비용: 410원&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;- 부품 1개당 운송 비용 계산 &amp;rarr; 남부지사 쪽이 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;pre id=&quot;code_1727850831904&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cost_chk = pd.merge(cost, factories, on=&quot;FCID&quot;, how=&quot;left&quot;)

print(&quot;북부지사의 평균 운송 비용：&quot; + str(cost_chk[&quot;Cost&quot;].loc[cost_chk[&quot;FCRegion&quot;]==&quot;북부&quot;].mean()) + &quot;원&quot;)
print(&quot;남부지사의 평균 운송 비용：&quot; + str(cost_chk[&quot;Cost&quot;].loc[cost_chk[&quot;FCRegion&quot;]==&quot;남부&quot;].mean()) + &quot;원&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;북부지사의 평균 운송 비용：1.075원
남부지사의 평균 운송 비용：1.05원&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;- cost와 factories 데이터를 FICD 열을 기준으로 병합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비용을 지사별로 집계 후 평균 &amp;rarr; 평균 운송 비용은 거의 같으므로, 남부지사 쪽이 효율 높게 부품을 운송하고 있다는 것을 알 수 있음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;053. 네트워크를 가시화해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적 경로를 가시화하는 방법인 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;네트워크 가시화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; NetworkX&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727851214914&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import networkx as nx
import matplotlib.pyplot as plt

# 그래프 객체생성
G=nx.Graph()

# 노드 설정
G.add_node(&quot;nodeA&quot;)
G.add_node(&quot;nodeB&quot;)
G.add_node(&quot;nodeC&quot;)

# 엣지 설정
G.add_edge(&quot;nodeA&quot;,&quot;nodeB&quot;)
G.add_edge(&quot;nodeA&quot;,&quot;nodeC&quot;)
G.add_edge(&quot;nodeB&quot;,&quot;nodeC&quot;)

# 좌표 설정
pos={}
pos[&quot;nodeA&quot;]=(0,0)
pos[&quot;nodeB&quot;]=(1,1)
pos[&quot;nodeC&quot;]=(0,1)

# 그리기
nx.draw(G,pos)

# 표시
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9IjIX/btsJSGqlTDb/BE0MKQ6KKEVuGJgVCEBoR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9IjIX/btsJSGqlTDb/BE0MKQ6KKEVuGJgVCEBoR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9IjIX/btsJSGqlTDb/BE0MKQ6KKEVuGJgVCEBoR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9IjIX%2FbtsJSGqlTDb%2FBE0MKQ6KKEVuGJgVCEBoR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;382&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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; networkx : 그래프(네트워크)를 생성하고 노드와 엣지를 다루기 위한 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;pos&lt;/b&gt;&lt;/span&gt;로 노드의 좌표를 설정하고 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;draw 함수&lt;/b&gt;&lt;/span&gt;를 이용해 그리기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- matplotlib의 함수 show 사용해서 그래프를 화면에 표시&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;054. 네트워크에 노드를 추가해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727851643151&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;G.add_node(&quot;nodeD&quot;)
G.add_edge(&quot;nodeA&quot;, &quot;nodeD&quot;)
pos[&quot;nodeD&quot;]=(1,0)
nx.draw(G, pos, with_labels = True)&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;808&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkE2CN/btsJTBPrZ8r/9cGwNwYSYBkRU5VSnK0zS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkE2CN/btsJTBPrZ8r/9cGwNwYSYBkRU5VSnK0zS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkE2CN/btsJTBPrZ8r/9cGwNwYSYBkRU5VSnK0zS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkE2CN%2FbtsJTBPrZ8r%2F9cGwNwYSYBkRU5VSnK0zS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;344&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;582&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;b&gt; with_labels=True &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;- dict 형식으로 pos에 위치 추가&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;055. 경로에 가중치를 부여하자&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;rarr; csv 파일에 저장된 가중치 정보를 데이터프레임으로 읽어 들여 사용하는 방법을 이용해보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ysgiJ/btsJTJmawtH/yBKfIk5u0DepAQSmGNb7OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ysgiJ/btsJTJmawtH/yBKfIk5u0DepAQSmGNb7OK/img.png&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;212&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.7326%; margin-right: 10px;&quot; data-widthpercent=&quot;52.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ysgiJ/btsJTJmawtH/yBKfIk5u0DepAQSmGNb7OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FysgiJ%2FbtsJTJmawtH%2FyBKfIk5u0DepAQSmGNb7OK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2qj7R/btsJTd2ltWz/kcbwpENIcoVmohUAG1KgP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2qj7R/btsJTd2ltWz/kcbwpENIcoVmohUAG1KgP0/img.png&quot; data-origin-width=&quot;164&quot; data-origin-height=&quot;86&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.1046%;&quot; data-widthpercent=&quot;47.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2qj7R/btsJTd2ltWz/kcbwpENIcoVmohUAG1KgP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2qj7R%2FbtsJTd2ltWz%2FkcbwpENIcoVmohUAG1KgP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;164&quot; height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;df_w / df_p&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727852058890&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx

# 데이터 불러오기
df_w = pd.read_csv('network_weight.csv')
df_p = pd.read_csv('network_pos.csv')

# 그래프 객체 생성
G = nx.Graph()

# 노드 설정
for i in range(len(df_w.columns)):
    G.add_node(df_w.columns[i])

# 엣지 설정 &amp;amp; 가중치 리스트화
size = 10
edge_weights = []
num_pre = 0
# 엣지 가중치 확인용 번역자 추가 코드
name = ['A','B','C','D','E']

for i in range(len(df_w.columns)):
    for j in range(len(df_w.columns)):
        if not (i==j):
            # 엣지 추가
            G.add_edge(df_w.columns[i],df_w.columns[j])
            if num_pre&amp;lt;len(G.edges):
                num_pre = len(G.edges)
                # 엣지 가중치 추가
                edge_weights.append(df_w.iloc[i][j]*size)
               
                # 엣지 가중치 확인용 번역자 추가 코드
                print(f'({name[i]}, {name[j]}) = {np.round(edge_weights[-1],5)}')
               

# 좌표 설정
pos = {}
for i in range(len(df_w.columns)):
    node = df_w.columns[i]
    pos[node] = (df_p[node][0],df_p[node][1])

# 그리기
nx.draw(G, pos, with_labels=True,font_size=16, node_size = 1000, node_color='k', font_color='w', width=edge_weights)

# 표시
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727852414484&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(len(df_w.columns)):
    G.add_node(df_w.columns[i])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- df_w의 열 이름을 사용해 각 노드를 그래프에 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727852484707&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;size = 10
edge_weights = []
num_pre = 0
name = ['A', 'B', 'C', 'D', 'E']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엣지의 가중치를 저장할 리스트 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 현재까지 추가된 엣지 수를 추적하기 위한 num_pre 변수 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- name : 엣지 가중치를 출력하기 위한 노드 이름 리스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727852589330&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(len(df_w.columns)):
    for j in range(len(df_w.columns)):
        if not (i==j):
            G.add_edge(df_w.columns[i], df_w.columns[j])
            if num_pre &amp;lt; len(G.edges):
                num_pre = len(G.edges)
                edge_weights.append(df_w.iloc[i][j] * size)
                print(f'({name[i]}, {name[j]}) = {np.round(edge_weights[-1], 5)}')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 두 노드 간의 엣지 추가, 가중치를 edge_weights 리스트에 부여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- df_w.iloc[i][j] * size : 가중치 값에 size 변수를 곱해 엣지의 두께를 더 강조함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 새 엣지가 추가될 때만 가중치를 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 소수점 5자리까지 반올림하여 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727853101460&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pos = {}
for i in range(len(df_w.columns)):
    node = df_w.columns[i]
    pos[node] = (df_p[node][0], df_p[node][1])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 노드의 좌표를 저장하는 딕셔너리 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- df_p에서 각 노드의 x, y 좌표를 가져와 pos 딕셔너리에 저장&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;838&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB4owH/btsJSI9tV7V/BZs5n82Nf03sPJKyfxZ8E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB4owH/btsJSI9tV7V/BZs5n82Nf03sPJKyfxZ8E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB4owH/btsJSI9tV7V/BZs5n82Nf03sPJKyfxZ8E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB4owH%2FbtsJSI9tV7V%2FBZs5n82Nf03sPJKyfxZ8E1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;612&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;882&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;056. 운송 경로 정보를 불러오자&amp;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;973&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtTOUU/btsJUke8fLG/b0qyLJSDKylSQH47VNVoa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtTOUU/btsJUke8fLG/b0qyLJSDKylSQH47VNVoa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtTOUU/btsJUke8fLG/b0qyLJSDKylSQH47VNVoa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtTOUU%2FbtsJUke8fLG%2Fb0qyLJSDKylSQH47VNVoa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;263&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제품의 부품을 저장한 창고 W1, W2, W3에서 조립 공장 F1, F2, F3, F4로 필요한 부품을 운송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727853775991&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

df_tr = pd.read_csv('trans_route.csv', index_col=&quot;공장&quot;)
df_tr.head()&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;203&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3AY6g/btsJUvt0u32/wkEBfKa7Vc3dOWk18jGDwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3AY6g/btsJUvt0u32/wkEBfKa7Vc3dOWk18jGDwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3AY6g/btsJUvt0u32/wkEBfKa7Vc3dOWk18jGDwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3AY6g%2FbtsJUvt0u32%2FwkEBfKa7Vc3dOWk18jGDwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;203&quot; height=&quot;185&quot; data-origin-width=&quot;203&quot; data-origin-height=&quot;185&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;057. 운송 경로 정보로 네트워크를 가시화해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727853883618&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import matplotlib.pyplot as plt
import networkx as nx

df_tr = pd.read_csv('trans_route.csv', index_col=&quot;공장&quot;)
df_pos = pd.read_csv('trans_route_pos.csv')


# 그래프 객체 생성
G = nx.Graph()

# 노드 설정
for i in range(len(df_pos.columns)):
    G.add_node(df_pos.columns[i])

# 엣지 설정 및 가중치 리스트화
num_pre = 0
edge_weights = []
size = 0.1
for i in range(len(df_pos.columns)):
    for j in range(len(df_pos.columns)):
        if not (i==j):
            # 엣지 추가
            G.add_edge(df_pos.columns[i],df_pos.columns[j])
            # 엣지 가중치 추가
            if num_pre&amp;lt;len(G.edges):
                num_pre = len(G.edges)
                weight = 0
                if (df_pos.columns[i] in df_tr.columns)and(df_pos.columns[j] in df_tr.index):
                    if df_tr[df_pos.columns[i]][df_pos.columns[j]]:
                        weight = df_tr[df_pos.columns[i]][df_pos.columns[j]]*size
                elif(df_pos.columns[j] in df_tr.columns)and(df_pos.columns[i] in df_tr.index):
                    if df_tr[df_pos.columns[j]][df_pos.columns[i]]:
                        weight = df_tr[df_pos.columns[j]][df_pos.columns[i]]*size
                edge_weights.append(weight)
                

# 좌표 설정
pos = {}
for i in range(len(df_pos.columns)):
    node = df_pos.columns[i]
    pos[node] = (df_pos[node][0],df_pos[node][1])
    
# 그리기
nx.draw(G, pos, with_labels=True,font_size=16, node_size = 1000, node_color='k', font_color='w', width=edge_weights)

# 표시
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;625&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OcsIs/btsJTdVEK8P/fjidDM5HCuNMW39HWrARlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OcsIs/btsJTdVEK8P/fjidDM5HCuNMW39HWrARlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OcsIs/btsJTdVEK8P/fjidDM5HCuNMW39HWrARlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOcsIs%2FbtsJTdVEK8P%2FfjidDM5HCuNMW39HWrARlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;524&quot; height=&quot;407&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;625&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727854565258&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (df_pos.columns[i] in df_tr.columns) and (df_pos.columns[j] in df_tr.index):
                    if df_tr[df_pos.columns[i]][df_pos.columns[j]]:
                        weight = df_tr[df_pos.columns[i]][df_pos.columns[j]] * size
                elif (df_pos.columns[j] in df_tr.columns) and (df_pos.columns[i] in df_tr.index):
                    if df_tr[df_pos.columns[j]][df_pos.columns[i]]:
                        weight = df_tr[df_pos.columns[j]][df_pos.columns[i]] * size
                edge_weights.append(weight)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 노드 간의 경로가 존재할 경우 가중치 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 골고루 엣지가 보임 &amp;rarr; 운송 비용을 생각하면 운송 경로는 어느 정도 집중되는 편이 효율이 높을 수 있음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;058. 운송 비용 함수를 작성하자&amp;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;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;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;pre id=&quot;code_1727855034710&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

# 데이터 불러오기
df_tr = pd.read_csv('trans_route.csv', index_col=&quot;공장&quot;)
df_tc = pd.read_csv('trans_cost.csv', index_col=&quot;공장&quot;)

# 운송 비용 함수
def trans_cost(df_tr,df_tc):
    cost = 0
    for i in range(len(df_tc.index)):
        for j in range(len(df_tr.columns)):
            cost += df_tr.iloc[i][j]*df_tc.iloc[i][j]
    return cost

print(&quot;총 운송 비용:&quot;+str(trans_cost(df_tr,df_tc)))&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;총 운송 비용:1493&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;- 함수로 미리 작성함으로써, 변경 후 운송 비용을 간단히 계산할 수 있도록 함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;059. 제약 조건을 만들어보자&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;- 각 공장은 채워야 할 최소한의 제품 제조량이 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727855269253&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

# 데이터 불러오기
df_tr = pd.read_csv('trans_route.csv', index_col=&quot;공장&quot;)
df_demand = pd.read_csv('demand.csv')
df_supply = pd.read_csv('supply.csv')

# 수요측 제약조건
for i in range(len(df_demand.columns)):
    temp_sum = sum(df_tr[df_demand.columns[i]])
    print(str(df_demand.columns[i])+&quot;으로 운송량:&quot;+str(temp_sum)+&quot; (수요량:&quot;+str(df_demand.iloc[0][i])+&quot;)&quot;)
    if temp_sum&amp;gt;=df_demand.iloc[0][i]:
        print(&quot;수요량을 만족시키고있음&quot;)
    else:
        print(&quot;수요량을 만족시키지 못하고 있음. 운송경로 재계산 필요&quot;)

# 공급측 제약조건
for i in range(len(df_supply.columns)):
    temp_sum = sum(df_tr.loc[df_supply.columns[i]])
    print(str(df_supply.columns[i])+&quot;부터의 운송량:&quot;+str(temp_sum)+&quot; (공급한계:&quot;+str(df_supply.iloc[0][i])+&quot;)&quot;)
    if temp_sum&amp;lt;=df_supply.iloc[0][i]:
        print(&quot;공급한계 범위내&quot;)
    else:
        print(&quot;공급한계 초과. 운송경로 재계산 필요&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;F1으로 운송량:30 (수요량:28)
수요량을 만족시키고있음
F2으로 운송량:30 (수요량:29)
수요량을 만족시키고있음
F3으로 운송량:32 (수요량:31)
수요량을 만족시키고있음
F4으로 운송량:25 (수요량:25)
수요량을 만족시키고있음
W1부터의 운송량:35 (공급한계:35)
공급한계 범위내
W2부터의 운송량:40 (공급한계:41)
공급한계 범위내
W3부터의 운송량:42 (공급한계:42)
공급한계 범위내&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;- 각 창고에서 출하되는 부품의 수가 창고의 공급 한계를 넘는지를 검토할 수 있음&lt;/p&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; temp_sum = sum(df_tr[df_demand.columns[i]]) &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;-&lt;b&gt; temp_sum = sum(df_tr.loc[df_supply.columns[i]]) &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 각 공급 공장에서 운송된 총 운송량 계산&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;060. 제약 조건을 만들어보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시험 삼아 W1에서 F4로의 운송을 줄이고, 그만큼을 W2에서 F2로의 운송으로 보충하게 변경한 경로가 저장된 trans_route_new.csv를 불러들여 이 경로가 제약 조건을 만족시키는지, 어느 정도 비용 개선이 가능한지 확인, 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727855783199&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np

# 데이터 불러오기
df_tr_new = pd.read_csv('trans_route_new.csv', index_col=&quot;공장&quot;)
print(df_tr_new)

# 총 운송비용 재계산 
print(&quot;총 운송 비용(변경 후):&quot;+str(trans_cost(df_tr_new,df_tc)))

# 제약조건 계산함수
# 수요측
def condition_demand(df_tr,df_demand):
    flag = np.zeros(len(df_demand.columns))
    for i in range(len(df_demand.columns)):
        temp_sum = sum(df_tr[df_demand.columns[i]])
        if (temp_sum&amp;gt;=df_demand.iloc[0][i]):
            flag[i] = 1
    return flag
            
# 공급측
def condition_supply(df_tr,df_supply):
    flag = np.zeros(len(df_supply.columns))
    for i in range(len(df_supply.columns)):
        temp_sum = sum(df_tr.loc[df_supply.columns[i]])
        if temp_sum&amp;lt;=df_supply.iloc[0][i]:
            flag[i] = 1
    return flag

print(&quot;수요조건 계산결과:&quot;+str(condition_demand(df_tr_new,df_demand)))
print(&quot;공급조건 계산결과:&quot;+str(condition_supply(df_tr_new,df_supply)))&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;    F1  F2  F3  F4
공장                
W1  15  15   0   0
W2   5   0  30  10
W3  10  15   2  15
총 운송 비용(변경 후):1428
수요조건 계산결과:[1. 1. 1. 1.]
공급조건 계산결과:[1. 0. 1.]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727855902897&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def condition_demand(df_tr, df_demand):
    flag = np.zeros(len(df_demand.columns))
    for i in range(len(df_demand.columns)):
        temp_sum = sum(df_tr[df_demand.columns[i]])
        if temp_sum &amp;gt;= df_demand.iloc[0][i]:
            flag[i] = 1
    return flag&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 수요지에 대한 조건이 충족되었는지의 여부를 0과 1로 저장하는 배열 생성(초기 값을 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 운송 비용 함수로 바로 계산 (비용 절감)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공급 조건 제약 조건 만족 못함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬 데이터 분석 실무 테크닉 100</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/28</guid>
      <comments>https://swchaey.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 2 Oct 2024 17:01:32 +0900</pubDate>
    </item>
    <item>
      <title>01장(웹에서 주문 수를 분석하는 테크닉), 02장(대리점 데이터를 가공하는 테크닉)</title>
      <link>https://swchaey.tistory.com/26</link>
      <description>&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;01장. 웹에서 주문 수를 분석하는 테크닉 10&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&lt;b&gt;목적&lt;/b&gt; : 어떤 기업 쇼핑몰 사이트의 상품 주문 수의 추세를 분석함으로써 판매량 개선의 방향을 찾는 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;전제 조건&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 이 쇼핑몰의 주요 품목은 컴퓨터&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt; &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; 가격대별로 5개의 상품 존재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt; &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt; 4종류의 6개 데이터&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;899&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G378z/btsJD7g2BzR/I7KgnqZbeJMJWwaP8Ep3p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G378z/btsJD7g2BzR/I7KgnqZbeJMJWwaP8Ep3p0/img.png&quot; data-alt=&quot;데이터 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G378z/btsJD7g2BzR/I7KgnqZbeJMJWwaP8Ep3p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG378z%2FbtsJD7g2BzR%2FI7KgnqZbeJMJWwaP8Ep3p0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;193&quot; data-origin-width=&quot;899&quot; data-origin-height=&quot;326&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;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;데이터베이스에 들어 있는 데이터를 시스템에서 가져올 때는 월별이나 1,000건 단위로 분할하는 경우가 많음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 데이터를 &lt;b&gt;결합&lt;/b&gt;해 사용해야 함&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;001. 데이터를 읽어 들이자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725361838269&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 경고(warning) 비표시
import warnings
warnings.filterwarnings('ignore')&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1725362097847&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
customer_master = pd.read_csv('customer_master.csv')
customer_master.head()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1465&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oehI8/btsJp9shEYy/8CfByq9bXAFCw4n4fHsHzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oehI8/btsJp9shEYy/8CfByq9bXAFCw4n4fHsHzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oehI8/btsJp9shEYy/8CfByq9bXAFCw4n4fHsHzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoehI8%2FbtsJp9shEYy%2F8CfByq9bXAFCw4n4fHsHzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1465&quot; height=&quot;332&quot; data-origin-width=&quot;1465&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파이썬 라이브러리 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;판다스(pandas)&lt;/b&gt;&lt;/span&gt; 임포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pandas의&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;read_csv&lt;/b&gt;&lt;/span&gt;를&amp;nbsp;사용해&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;프레임형&amp;nbsp;변수&lt;/b&gt;&lt;/span&gt;&amp;nbsp;customer_master에&amp;nbsp;저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 읽어 들인 customer_master의 처음 5행 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1725362766501&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;item_master = pd.read_csv('item_master.csv')
item_master.head()&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;460&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb2Aoa/btsJo0pCrLq/OyOr4zOXkXAl3pvF2mXhL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb2Aoa/btsJo0pCrLq/OyOr4zOXkXAl3pvF2mXhL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb2Aoa/btsJo0pCrLq/OyOr4zOXkXAl3pvF2mXhL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb2Aoa%2FbtsJo0pCrLq%2FOyOr4zOXkXAl3pvF2mXhL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;322&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1725362805134&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transaction_1 = pd.read_csv('transaction_1.csv')
transaction_1.head()&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;758&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drvLwn/btsJoWnglOy/siVzZlWUGofvnHXuhMRlbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drvLwn/btsJoWnglOy/siVzZlWUGofvnHXuhMRlbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drvLwn/btsJoWnglOy/siVzZlWUGofvnHXuhMRlbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrvLwn%2FbtsJoWnglOy%2FsiVzZlWUGofvnHXuhMRlbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;207&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1725362852893&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transaction_detail_1 = pd.read_csv('transaction_detail_1.csv')
transaction_detail_1.head()&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;578&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uXRNr/btsJqCguKol/eFoZTFLoLJIahV0EI8G5fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uXRNr/btsJqCguKol/eFoZTFLoLJIahV0EI8G5fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uXRNr/btsJqCguKol/eFoZTFLoLJIahV0EI8G5fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuXRNr%2FbtsJqCguKol%2FeFoZTFLoLJIahV0EI8G5fK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;189&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;315&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;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;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이 사례의 경우, 매출과 연관이 있고, 가장 상세한 데이터는 매출 관련 데이터이므로 transaction_detail을 기준으로 생각&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 크게 2가지의 데이터 가공이 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- transaction_detail_1, transaction_detail_2 / transaction_1, transaction_2 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;세로 결합(유니언)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- transaction_detial을 기준으로, transaction, customer_master, item_master &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;가로 결합(조인)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;002. 데이터를 결합(유니언)해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725363397896&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transaction_2 = pd.read_csv('transaction_2.csv')
transaction = pd.concat([transaction_1, transaction_2], ignore_index = True)
transaction.head()&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;753&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lj7BD/btsJoYrKzQZ/aZQcLo5iHdSUuMKcgepr4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lj7BD/btsJoYrKzQZ/aZQcLo5iHdSUuMKcgepr4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lj7BD/btsJoYrKzQZ/aZQcLo5iHdSUuMKcgepr4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flj7BD%2FbtsJoYrKzQZ%2FaZQcLo5iHdSUuMKcgepr4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;172&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;318&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: #006dd7;&quot;&gt;&lt;b&gt;pd.concat&lt;/b&gt;&lt;/span&gt;으로 유니언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- head()로는 유니언이 잘 됐는지 확인 불가 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&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;-&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt; ignore_index = Ture&lt;/b&gt;&lt;/span&gt; : 이를 무시하지 않으면 이전 데이터에 있던 index를 그대로 가져옴, 특별히 인덱스를 유지해야 하는 경우가 아니라면 옵션을 추가함 (&amp;harr; index = )&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725363739047&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(len(transaction_1))
print(len(transaction_2))
print(len(transaction))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;59&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmNAQ7/btsJqlMKYrX/a47YMQNttfJSveF1CfZEik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmNAQ7/btsJqlMKYrX/a47YMQNttfJSveF1CfZEik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmNAQ7/btsJqlMKYrX/a47YMQNttfJSveF1CfZEik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmNAQ7%2FbtsJqlMKYrX%2Fa47YMQNttfJSveF1CfZEik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;32&quot; height=&quot;98&quot; data-origin-width=&quot;59&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1725363892762&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;transaction_detail_2 = pd.read_csv('transaction_detail_2.csv')
transaction_detail = pd.concat([transaction_detail_1, transaction_detail_2], ignore_index = True)
transaction_detail.head()&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;- transaction_detail도 유니언&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;003. 매출 데이터끼리 결합(조인)해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기준&lt;/b&gt;이 되는 데이터를 결정하고 어떤 칼럼을 &lt;b&gt;키&lt;/b&gt;로 조인할지 생각해야 함 &amp;rarr; transaction_detail을 기준 데이터로 결정&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; transaction의 payment_date, customer_id 추가, price는 추가 x (quantity와 item_price의 곱으로 알 수 있음)&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;transaction_id&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725596870840&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data = pd.merge(transaction_detail, transaction[[&quot;transaction_id&quot;, &quot;payment_date&quot;, &quot;customer_id&quot;]], on=&quot;transaction_id&quot;, how = &quot;left&quot;)
join_data.head()&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;1003&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AFFIb/btsJugc0jMJ/HIBe3tDt4kNwZaXkete5Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AFFIb/btsJugc0jMJ/HIBe3tDt4kNwZaXkete5Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AFFIb/btsJugc0jMJ/HIBe3tDt4kNwZaXkete5Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAFFIb%2FbtsJugc0jMJ%2FHIBe3tDt4kNwZaXkete5Y0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;562&quot; height=&quot;173&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; pd.merge&lt;/b&gt;&lt;/span&gt; 로 조인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- transaction_detial을 기준으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; 조인키(join key)&lt;/b&gt;&lt;/span&gt;는 결합할 transaction 데이터의 필요한 칼럼 transaction_id&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 조인 종류 : &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Left Join&lt;/b&gt;&lt;/span&gt;으로 지정&lt;/p&gt;
&lt;pre id=&quot;code_1725597263037&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(len(transaction_detail))
print(len(transaction))
print(len(join_data))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;78&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baJpll/btsJr5xPxFL/IiHonJ9oBpagXAreKgOb80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baJpll/btsJr5xPxFL/IiHonJ9oBpagXAreKgOb80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baJpll/btsJr5xPxFL/IiHonJ9oBpagXAreKgOb80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaJpll%2FbtsJr5xPxFL%2FIiHonJ9oBpagXAreKgOb80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;43&quot; height=&quot;58&quot; data-origin-width=&quot;78&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&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; 조인할 데이터의 조인키(transaction_id)에 중복 데이터가 존재하는 경우 데이터 개수가 늘어날 수 있음&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;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxiJfv/btsJtxGEilG/sgOrLRRUx2SLV53HtlKeo0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxiJfv/btsJtxGEilG/sgOrLRRUx2SLV53HtlKeo0/img.jpg&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;346&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.7042%; margin-right: 10px;&quot; data-widthpercent=&quot;52.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxiJfv/btsJtxGEilG/sgOrLRRUx2SLV53HtlKeo0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxiJfv%2FbtsJtxGEilG%2FsgOrLRRUx2SLV53HtlKeo0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;868&quot; height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRJWQx/btsJsN4DYyj/zyrZvU57NILHKiaJKqlnVK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRJWQx/btsJsN4DYyj/zyrZvU57NILHKiaJKqlnVK/img.jpg&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;345&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.0748%;&quot; data-widthpercent=&quot;47.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRJWQx/btsJsN4DYyj/zyrZvU57NILHKiaJKqlnVK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRJWQx%2FbtsJsN4DYyj%2FzyrZvU57NILHKiaJKqlnVK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;가짜 데이터 생성 - 데이터의 무결성 위반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;부록 001. 데이터 결합과 정규화&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;데이터 정규화&lt;/b&gt;&lt;/span&gt; : 데이터를 관리하는 데이터베이스 설계 개념 중 하나로, '데이터의 정합성'을 담보하는 설계 사상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 데이터 정규화의 진행 정도에 따라 비정규화, 제1정규화, 제2정규화, 제3정규화로 분류&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;&lt;b&gt;제1정규화&lt;/b&gt; - 도메인 원자값 조건 만족 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 반복 그룹 존재하면 안됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; 모든 행은 식별자로 완전하게 구분되어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제2정규화&lt;/b&gt; - 부분함수 종속 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- key가 아닌 값들은 모두 key에 종속되어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제3정규화&lt;/b&gt; - 이행적 함수 종속 제거&lt;br /&gt;- 모든 non-key 컬럼은 key 컬럼에만 종속되어야 함&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&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: #ef6f53;&quot;&gt;&lt;b&gt;내부 결합(inner join)&lt;/b&gt; &lt;/span&gt;: 결합할 2개의 데이터에 모두 존재하는 데이터로만 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 정확하게 결합 조건을 설정하지 않으면 데이터 누락이 생길 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;외부 결합(outer join)&lt;/b&gt;&lt;/span&gt; : 어느 한 쪽만 존재하면 데이터 결합 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;rarr; &lt;b&gt;레프트 조인&lt;/b&gt;(결합되는 쪽의 좌측 데이터가 모두 사용됨), &lt;b&gt;라이트 조인&lt;/b&gt;(결합되는 쪽의 우측 데이터가 모두 사용됨) 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 데이터 1에만 있는 데이터의 데이터 2 부분에는 NULL이 들어감&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;004. 마스터데이터를 결합(조인)해 보자&amp;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;&amp;rarr; customer_master, item_master에 포함된 데이터&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;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;각각&lt;/span&gt;&lt;b&gt; customer_id, item_id&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725866565597&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data = pd.merge(join_data, customer_master, on = &quot;customer_id&quot;, how = 'left')
join_data = pd.merge(join_data, item_master, on = &quot;item_id&quot;, how = 'left')
join_data.head()&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;978&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LqUNC/btsJw3kpoKU/xaKuHNjEIZYNMxnhfFKGPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LqUNC/btsJw3kpoKU/xaKuHNjEIZYNMxnhfFKGPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LqUNC/btsJw3kpoKU/xaKuHNjEIZYNMxnhfFKGPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLqUNC%2FbtsJw3kpoKU%2FxaKuHNjEIZYNMxnhfFKGPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;564&quot; height=&quot;290&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;503&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;- 결합의 영향으로 매출(price)이 사라졌기 때문에 다시 계산해야 함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;005. 필요한 데이터 칼럼을 만들자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매출 = quantity x item_price&lt;/p&gt;
&lt;pre id=&quot;code_1725866932753&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data[&quot;price&quot;] = join_data[&quot;quantity&quot;] * join_data[&quot;item_price&quot;]
join_data[[&quot;quantity&quot;, &quot;item_price&quot;, &quot;price&quot;]].head()&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;369&quot; data-origin-height=&quot;277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ia8yA/btsJwflFdsq/RWBnIxmpqXFJtuArfk8C51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ia8yA/btsJwflFdsq/RWBnIxmpqXFJtuArfk8C51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ia8yA/btsJwflFdsq/RWBnIxmpqXFJtuArfk8C51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIa8yA%2FbtsJwflFdsq%2FRWBnIxmpqXFJtuArfk8C51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;256&quot; height=&quot;192&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;277&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 판다스의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;데이터프레임형 곱셈&lt;/b&gt;&lt;/span&gt; : 행마다(가로 방향) 계산 실행&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;006. 데이터를 검산하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검산이 가능한 데이터 칼럼을 찾고 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;검산&lt;/b&gt;&lt;/span&gt;하기 : 이번 사례는&lt;b&gt; price&lt;/b&gt; 칼럼&lt;/p&gt;
&lt;pre id=&quot;code_1725867246014&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(join_data[&quot;price&quot;].sum())
print(transaction[&quot;price&quot;].sum())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RgJH3/btsJvaL8A3Q/Fi2iylDK5VJK9JMEpfwgS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RgJH3/btsJvaL8A3Q/Fi2iylDK5VJK9JMEpfwgS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RgJH3/btsJvaL8A3Q/Fi2iylDK5VJK9JMEpfwgS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRgJH3%2FbtsJvaL8A3Q%2FFi2iylDK5VJK9JMEpfwgS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;76&quot; height=&quot;63&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 가공 전 transaction의 price 총합과 데이터 가공 후 price 총합이 같음&lt;/p&gt;
&lt;pre id=&quot;code_1725867330795&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data[&quot;price&quot;].sum() == transaction[&quot;price&quot;].sum()

#True&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;True / False로도 확인 가능&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;007. 각종 통계량을 파악하자&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;- &lt;b&gt;결손치의 개수&lt;/b&gt; : 제거하거나 보간해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;전체를 파악할 수 있는 숫자감&lt;/b&gt; : 이번 달 상품 A의 매출이 10만원 &amp;rarr; 전체 매출 단위 10억/100만원인지로 의미 달라짐&lt;/p&gt;
&lt;pre id=&quot;code_1725867739832&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data.isnull().sum()&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;304&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6e6bP/btsJuAq0lDJ/1M0p0ukJ4uS7y1tviUEPwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6e6bP/btsJuAq0lDJ/1M0p0ukJ4uS7y1tviUEPwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6e6bP/btsJuAq0lDJ/1M0p0ukJ4uS7y1tviUEPwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6e6bP%2FbtsJuAq0lDJ%2F1M0p0ukJ4uS7y1tviUEPwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;175&quot; height=&quot;521&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결손치의 개수 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;isnull()&lt;/b&gt;&lt;/span&gt;은 결손치가 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;True/False&lt;/b&gt;&lt;/span&gt;로 반환되기 때문에 &lt;b&gt;True&lt;/b&gt;의 개수를 칼럼마다 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;sum()&lt;/b&gt;&lt;/span&gt;으로 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결손치 없음&lt;/p&gt;
&lt;pre id=&quot;code_1725867775266&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data.describe()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMPRYv/btsJwWlxHVe/InZCXFUl7PYEs2lMYJKkQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMPRYv/btsJwWlxHVe/InZCXFUl7PYEs2lMYJKkQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMPRYv/btsJwWlxHVe/InZCXFUl7PYEs2lMYJKkQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMPRYv%2FbtsJwWlxHVe%2FInZCXFUl7PYEs2lMYJKkQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;235&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;describe()&lt;/b&gt;&lt;/span&gt;를 이용해 데이터 개수(count), 평균값(mean), 표준편차(std), 최솟값(min), 사분위수(25%, 75%), 중앙값(50%), 최댓값(max) 각종 통계량 출력 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- describe()는 &lt;b&gt;숫자 데이터&lt;/b&gt;를 집계함&lt;/p&gt;
&lt;pre id=&quot;code_1725868269706&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(join_data[&quot;payment_date&quot;].min())
print(join_data[&quot;payment_date&quot;].max())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rObKc/btsJwykYZ2k/Gf1bICSTBJr3l03MQ1Ntuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rObKc/btsJwykYZ2k/Gf1bICSTBJr3l03MQ1Ntuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rObKc/btsJwykYZ2k/Gf1bICSTBJr3l03MQ1Ntuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrObKc%2FbtsJwykYZ2k%2FGf1bICSTBJr3l03MQ1Ntuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;163&quot; height=&quot;63&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;63&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;008. 월별로 데이터를 집계해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시계열 상황&lt;/b&gt; 살펴보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이번 케이스처럼 반년 정도의 데이터라면 별로 영향이 없겠지만, 과거 수년의 데이터에는 여러가지 비즈니스 모델이 포함되어 있을 수 있기 때문에 전체 데이터를 한 번에 분석하면 데이터의 시계열 변화를 잘못 파악하는 경우가 있을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;b&gt;매출 변화&lt;/b&gt;를 파악해보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 구입일 payment_date에서 연월을 추출해 새롭게 칼럼을 작성하고, 연월 단위로 price 집계해서 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1725868992633&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data.dtypes&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;362&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk8ckr/btsJxniGLFp/xMkCKcSL3MOJPCwkVOEVn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk8ckr/btsJxniGLFp/xMkCKcSL3MOJPCwkVOEVn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk8ckr/btsJxniGLFp/xMkCKcSL3MOJPCwkVOEVn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk8ckr%2FbtsJxniGLFp%2FxMkCKcSL3MOJPCwkVOEVn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;227&quot; height=&quot;327&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;데이터타입&lt;/b&gt;&lt;/span&gt; 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- payment_date는 object형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1725869715576&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data[&quot;payment_date&quot;] = pd.to_datetime(join_data[&quot;payment_date&quot;])
join_data[&quot;payment_month&quot;] = join_data[&quot;payment_date&quot;].dt.strftime(&quot;%Y%m&quot;)
join_data[[&quot;payment_date&quot;, &quot;payment_month&quot;]].head()&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;463&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MvVVo/btsJxlFbTI4/30TmqtRqFntXkw8iALxClk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MvVVo/btsJxlFbTI4/30TmqtRqFntXkw8iALxClk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MvVVo/btsJxlFbTI4/30TmqtRqFntXkw8iALxClk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMvVVo%2FbtsJxlFbTI4%2F30TmqtRqFntXkw8iALxClk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;308&quot; height=&quot;190&quot; data-origin-width=&quot;463&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;- &lt;b&gt;datetime형&lt;/b&gt;으로 데이터 타입 변환 (&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;to_datetime&lt;/b&gt;&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 새로운 칼럼 payment_month를 연월 단위로 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 판다스의 datetime의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;dt&lt;/b&gt;&lt;/span&gt;를 사용하면 년, 월 추출 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;strftime&lt;/b&gt;&lt;/span&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;- &lt;b&gt;datetime object&lt;/b&gt;에 &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;dt 접근자&lt;/b&gt;&lt;/span&gt;를 사용해 datetime 속성이나 메서드를 사용해 시계열 데이터를 처리할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;dt.strftime()&lt;/b&gt;&lt;/span&gt; : pandas의 datetime object를 지정된 date format으로 변환&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;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgEFWk/btsJxmjVaOZ/afQRdtT9nVsiuIFuRiPd2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgEFWk/btsJxmjVaOZ/afQRdtT9nVsiuIFuRiPd2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgEFWk/btsJxmjVaOZ/afQRdtT9nVsiuIFuRiPd2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgEFWk%2FbtsJxmjVaOZ%2FafQRdtT9nVsiuIFuRiPd2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;224&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;pre id=&quot;code_1725875992918&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from datetime import datetime 

# 현재 날짜 
now = datetime.now() 

# 특정 형식의 문자열로 변환 
formatted_date = now.strftime('%d-%m-%Y %H:%M:%S') 

print(formatted_date)

#result = sr.dt.strftime('% d % m % Y, % r')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%Y&lt;/b&gt; : 연도 0001~9999&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%m&lt;/b&gt; : 달 01~12&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%d&lt;/b&gt; : 날짜 01~31&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%H&lt;/b&gt; : 24시간 형식의 하루의 시간 00~23&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%I&lt;/b&gt; : 12시간 형식의 하루의 시간 01~12&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%M&lt;/b&gt; : 분 00~59&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;%S&lt;/b&gt; : 초 00~59&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1725877202212&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data.groupby(&quot;payment_month&quot;).sum()[&quot;price&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYw8U/btsJvwu3MSJ/u1tpF1UkCZSknx3DKOhHR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYw8U/btsJvwu3MSJ/u1tpF1UkCZSknx3DKOhHR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYw8U/btsJvwu3MSJ/u1tpF1UkCZSknx3DKOhHR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYw8U%2FbtsJvwu3MSJ%2Fu1tpF1UkCZSknx3DKOhHR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;234&quot; height=&quot;168&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 월별 매출 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;groupby&lt;/b&gt;&lt;/span&gt; : &lt;b&gt;집계하고 싶은 칼럼&lt;/b&gt;(payment_month)과 &lt;b&gt;집계 방법&lt;/b&gt;(sum) 기술, price만 표시하기 위해 price &lt;b&gt;칼럼 지정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 5월 매출이 조금 내려갔지만, 6월, 7월 회복, 가장 매출이 높은 달은 7월 등의 정보를 알 수 있음&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;pre id=&quot;code_1725878006782&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;데이터프레임.groupby(그룹이되는컬럼)[계산하고 싶은 컬럼].집계함수()

                            or

데이터프레임.groupby(그룹이되는컬럼).집계함수()[계산하고 싶은 컬럼]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;lt;집계함수(집계 방법) 종류&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- mean(평균), median(중위수)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- count(개수), sum(합산)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- min(최소), max(최대)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- std(표준편차), var(분산), quantile(특정 백분위)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&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; (ex. df.groupby(&quot;월&quot;)[&quot;야근&quot;].quantile(0.9) &amp;larr; 월별 상위 10% 야근일수)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- describe(전반적인 지표)&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;b&gt;&amp;lt; multiple column / groupby &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725877979265&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;데이터프레임.groupby([컬럼1,컬럼2]).agg({계산하고싶은컬럼명1 : 집계함수 , 계산하고싶은컬럼명2 : 집계함수})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex. 월별 인당 휴일 평균과 야근 총합&lt;/p&gt;
&lt;pre id=&quot;code_1725878092990&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;df.groupby([&quot;월&quot;,&quot;이름&quot;]).agg({&quot;휴일&quot;:&quot;mean&quot;,&quot;야근&quot;:&quot;sum&quot;})&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmdD3h/btsJwquanPt/zh19mHchS1BW77f8ZKfoX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmdD3h/btsJwquanPt/zh19mHchS1BW77f8ZKfoX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmdD3h/btsJwquanPt/zh19mHchS1BW77f8ZKfoX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmdD3h%2FbtsJwquanPt%2Fzh19mHchS1BW77f8ZKfoX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;204&quot; height=&quot;247&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt; reset_index&lt;/b&gt;&lt;/span&gt;로 index 초기화해서 데이터 활용하기 &amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1725878284698&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;g1_df[&quot;이름&quot;]   #컬럼명 자체가 인덱스로 들어가 있기 때문에 오류 발생&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1725878411592&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;g2_df = df.groupby([&quot;월&quot;, &quot;이름&quot;]).agg({&quot;휴일&quot;:&quot;mean&quot;, &quot;야근&quot;:&quot;sum&quot;}).reset_index()
g2_df&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/laBRs/btsJwBhVj1F/CdzyguL8kfskQOaDQnDr3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/laBRs/btsJwBhVj1F/CdzyguL8kfskQOaDQnDr3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/laBRs/btsJwBhVj1F/CdzyguL8kfskQOaDQnDr3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlaBRs%2FbtsJwBhVj1F%2FCdzyguL8kfskQOaDQnDr3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;202&quot; height=&quot;216&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;009. 월별, 상품별로 데이터를 집계해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월별, 상품별로 매출의 합계, 수량 표시&lt;/p&gt;
&lt;pre id=&quot;code_1725879322047&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data.groupby([&quot;payment_month&quot;, &quot;item_name&quot;]).sum()[[&quot;price&quot;, &quot;quantity&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;305&quot; data-origin-height=&quot;848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0co6n/btsJwsrWdM1/1uvMHOS4Kk7fK5nvkbN2pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0co6n/btsJwsrWdM1/1uvMHOS4Kk7fK5nvkbN2pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0co6n/btsJwsrWdM1/1uvMHOS4Kk7fK5nvkbN2pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0co6n%2FbtsJwsrWdM1%2F1uvMHOS4Kk7fK5nvkbN2pK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;848&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;848&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;- 월별, 상품별로 price와 quantity의 집계 결과 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- groupby에서 출력하고 싶은 칼럼이 여러 개 있을 경우, &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리스트형&lt;/b&gt;&lt;/span&gt;으로 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1725879735449&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pd.pivot_table(join_data, index='item_name', columns='payment_month', values=['price', 'quantity'], aggfunc='sum')&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;824&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uYpqI/btsJvVVIHNP/sE8st8oCIKQAk58zcllVCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uYpqI/btsJvVVIHNP/sE8st8oCIKQAk58zcllVCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uYpqI/btsJvVVIHNP/sE8st8oCIKQAk58zcllVCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuYpqI%2FbtsJvVVIHNP%2FsE8st8oCIKQAk58zcllVCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;187&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;pivot_table&lt;/b&gt;&lt;/span&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;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;행&lt;/b&gt;&lt;/span&gt;에는 상품명, &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;칼럼&lt;/b&gt;&lt;/span&gt;에는 월이 오도록&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt; index&lt;/b&gt;&lt;/span&gt;와 &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;columns&lt;/b&gt;&lt;/span&gt;로 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;values&lt;/b&gt;&lt;/span&gt;에는 &lt;b&gt;집계하고 싶은 칼럼&lt;/b&gt;(price, quantity) 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;aggfunc&lt;/b&gt;&lt;/span&gt;에는 &lt;b&gt;집계 방법&lt;/b&gt;(sum) 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 월별, 상품별로 추세 파악하기 쉬움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 매출 합계는 PC-E가 가장 높지만, 수량에서는 가장 싼 PC-A가 많음, 5월 매출 감소의 원인은 PC-E의 영향이 큼&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;pre id=&quot;code_1725880356380&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=_NoDefault.no_default, sort=True)&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;- fill_value : 집계 후, 결과 피벗 테이블에서 누락된 값을 바꿀 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- margins = True : 행과 열의 범주에 부분 그룹 집계가 적용되어 특수 열과 행 추가(여백)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dropna = True : 모든 열에 NaN 값이 있는 행은 마진 계산 전 생략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- sort : 결과 정렬 여부 지정&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;010. 상품별 매출 추이를 가시화해 보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월별, 상품별 매출 추이 &lt;b&gt;그래프&lt;/b&gt;로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 집계된 데이터를 이용해 그래프 그리기&lt;/p&gt;
&lt;pre id=&quot;code_1725880947737&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;graph_data = pd.pivot_table(join_data, index='payment_month', columns='item_name', values='price', aggfunc='sum')
graph_data.head()&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;875&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/my2xv/btsJxyYP8dB/tUPqqe6OgEKosMkxKwI3Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/my2xv/btsJxyYP8dB/tUPqqe6OgEKosMkxKwI3Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/my2xv/btsJxyYP8dB/tUPqqe6OgEKosMkxKwI3Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmy2xv%2FbtsJxyYP8dB%2FtUPqqe6OgEKosMkxKwI3Ik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;594&quot; height=&quot;253&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;372&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;- pivot_table를 이용해 데이터 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 그래프를 그리기 위해 가로축에 payment_month, 세로축에 graph_data의 해당 상품명 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1725882777255&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import matplotlib.pyplot as plt  # from matplotlib import pyplot as plt
%matplotlib inline
plt.plot(list(graph_data.index), graph_data[&quot;PC-A&quot;], label='PC-A')
plt.plot(list(graph_data.index), graph_data[&quot;PC-B&quot;], label='PC-B')
plt.plot(list(graph_data.index), graph_data[&quot;PC-C&quot;], label='PC-C')
plt.plot(list(graph_data.index), graph_data[&quot;PC-D&quot;], label='PC-D')
plt.plot(list(graph_data.index), graph_data[&quot;PC-E&quot;], label='PC-E')
plt.legend()&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;1083&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oUjg6/btsJwfMZAkk/w1mE84PsKDSClTc2bQXL2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oUjg6/btsJwfMZAkk/w1mE84PsKDSClTc2bQXL2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oUjg6/btsJwfMZAkk/w1mE84PsKDSClTc2bQXL2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoUjg6%2FbtsJwfMZAkk%2Fw1mE84PsKDSClTc2bQXL2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;302&quot; data-origin-width=&quot;1083&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;matplotlib&lt;/b&gt;&lt;/span&gt; 임포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 가로축, 세로축 순서로 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 가로축은 payment_month를 표시해야 하므로 graph_data.index를 리스트형으로 변환하여 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 세로축은 상품별 매출로 graph_data 칼럼을 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr;&lt;b&gt; label&lt;/b&gt;로 범례 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상품마다 그래프를 그리고, legend()는 범례 표시&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;-&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt; %matplotlib inline&lt;/b&gt; &lt;/span&gt;: notebook을 실행한 브라우저에서 바로 그림을 볼 수 있도록 브라우저 내부에 그려지도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;rarr; 도표, 그래프, 그림, 소리, 애니메이션 등과 같은 산출물(&lt;b&gt;Rich output&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: #ef6f53;&quot;&gt;&lt;b&gt;plt.legend()&lt;/b&gt;&lt;/span&gt; : 그래프에 범례 추가 (plot 함수 안에 입력한 &lt;b&gt;label&lt;/b&gt;이 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; &lt;b&gt;plt.legend(('Y1', 'Y2'))&lt;/b&gt; 와 같이 legend 함수 안에 label 직접 입력 가능&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;02장. 대리점 데이터를 가공하는 테크닉 10&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전제조건&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 상품 A~Z까지 26개의 상품 취급&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;&amp;rarr; 매출 이력과 고객정보 데이터는 담당사원이 시스템에 직접 입력 : '지저분한 데이터'&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;818&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brs0Mg/btsJERkhqa5/n3jtT2DoKCeryJ6ixlHWw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brs0Mg/btsJERkhqa5/n3jtT2DoKCeryJ6ixlHWw1/img.png&quot; data-alt=&quot;데이터 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brs0Mg/btsJERkhqa5/n3jtT2DoKCeryJ6ixlHWw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrs0Mg%2FbtsJERkhqa5%2Fn3jtT2DoKCeryJ6ixlHWw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;593&quot; height=&quot;134&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;011. 데이터를 읽어 들이자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1726634961284&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
uriage_data = pd.read_csv(&quot;uriage.csv&quot;)
uriage_data.head()&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;771&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KUdEM/btsJE9ZknhF/k4EB745dwoXusyyFqAfOVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KUdEM/btsJE9ZknhF/k4EB745dwoXusyyFqAfOVk/img.png&quot; data-alt=&quot;매출 이력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KUdEM/btsJE9ZknhF/k4EB745dwoXusyyFqAfOVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKUdEM%2FbtsJE9ZknhF%2Fk4EB745dwoXusyyFqAfOVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;261&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;338&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;- item_name, item_price에 결측치/오류 확인 가능&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726635055761&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kokyaku_data = pd.read_excel(&quot;kokyaku_daicho.xlsx&quot;)
kokyaku_data.head()&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;482&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdAdEj/btsJDo4Vrzg/Shmje4zw3RBGdDAk5go7e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdAdEj/btsJDo4Vrzg/Shmje4zw3RBGdDAk5go7e0/img.png&quot; data-alt=&quot;고객 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdAdEj/btsJDo4Vrzg/Shmje4zw3RBGdDAk5go7e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdAdEj%2FbtsJDo4Vrzg%2FShmje4zw3RBGdDAk5go7e0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;341&quot; height=&quot;244&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;345&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;rarr; 데이터의 &lt;b&gt;정합성&lt;/b&gt;에 문제가 있음 : 입력 오류나 표기 방법의 차이가 부정합을 일으킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 날짜 포맷 차이, 공백 유무&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 정합성을 갖추기 위해 데이터의 속성과 의미를 이해하고 데이터의 오류를 파악해야 함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;012. 데이터의 오류를 살펴보자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 매출 이력에서 item_name을 추출해 데이터 오류 확인&lt;/p&gt;
&lt;pre id=&quot;code_1726635835355&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data[&quot;item_name&quot;].head()&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;430&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZXTQ/btsJDOhNB5s/q8CF1f0fWmgm4HSXNNKct0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZXTQ/btsJDOhNB5s/q8CF1f0fWmgm4HSXNNKct0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZXTQ/btsJDOhNB5s/q8CF1f0fWmgm4HSXNNKct0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZXTQ%2FbtsJDOhNB5s%2Fq8CF1f0fWmgm4HSXNNKct0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;329&quot; height=&quot;157&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공백, 대소문자 섞여있음&lt;/p&gt;
&lt;pre id=&quot;code_1726635952547&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data[&quot;item_price&quot;].head()&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;464&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czVL9j/btsJE3SwThD/zKaipH0idIjsIl6okEF84k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czVL9j/btsJE3SwThD/zKaipH0idIjsIl6okEF84k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czVL9j/btsJE3SwThD/zKaipH0idIjsIl6okEF84k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczVL9j%2FbtsJE3SwThD%2FzKaipH0idIjsIl6okEF84k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;155&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결측치 NaN 확인 가능&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;013. 데이터에 오류가 있는 상태로 집계해 보자&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 매출 이력 데이터에서 상품별로 월 매출 합계 집계&lt;/p&gt;
&lt;pre id=&quot;code_1726637085510&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data[&quot;purchase_date&quot;] = pd.to_datetime(uriage_data[&quot;purchase_date&quot;])
uriage_data[&quot;purchase_month&quot;] = uriage_data[&quot;purchase_date&quot;].dt.strftime(&quot;%Y%m&quot;)
res = uriage_data.pivot_table(index = &quot;purchase_month&quot;, columns = &quot;item_name&quot;, aggfunc = &quot;size&quot;, fill_value = 0)
res&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;1954&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbJyrz/btsJDQGBtkN/OkdFTPeYdOdXAODm7cVho0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbJyrz/btsJDQGBtkN/OkdFTPeYdOdXAODm7cVho0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbJyrz/btsJDQGBtkN/OkdFTPeYdOdXAODm7cVho0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbJyrz%2FbtsJDQGBtkN%2FOkdFTPeYdOdXAODm7cVho0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1954&quot; height=&quot;562&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;pivot_table&lt;/b&gt;&lt;/span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;행&lt;/b&gt;(구입 연월)와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;칼럼&lt;/b&gt;(삼품 이름)&lt;span&gt;&amp;nbsp;&lt;/span&gt;지정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 상품의 건수로 집계&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;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;aggfunc&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;집계 방법&lt;/b&gt;(size) 지정&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;fill_value = 0&lt;/b&gt; &lt;/span&gt;: 집계 후, 결과 피벗 테이블에서 누락된 값을 바꿀 값을 0으로 설정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 동일한 상품이 다른 상품으로 집계됨, 26개의 상품이 99개의 상품으로 늘어남&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;pre id=&quot;code_1726638462599&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;res = uriage_data.pivot_table(index = &quot;purchase_month&quot;, columns = &quot;item_name&quot;, values = &quot;item_price&quot;, aggfunc = &quot;sum&quot;, fill_value = 0)
res&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;1959&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA6Gp2/btsJEnYiRd6/vwqpY98GooDgKgHoWGaWf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA6Gp2/btsJEnYiRd6/vwqpY98GooDgKgHoWGaWf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA6Gp2/btsJEnYiRd6/vwqpY98GooDgKgHoWGaWf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA6Gp2%2FbtsJEnYiRd6%2FvwqpY98GooDgKgHoWGaWf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1959&quot; height=&quot;563&quot; data-origin-width=&quot;1959&quot; data-origin-height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;values&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로&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;&lt;/span&gt;&lt;b&gt;집계하고 싶은 칼럼&lt;/b&gt;(item_price)을 지정해서 집계&lt;/p&gt;
&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; 데이터 가공 없이 집계 및 분석을 실시하면 의미 없는 결과가 나옴!&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;014. 상품명 오류를 수정하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공백 오류 수정하기&lt;/p&gt;
&lt;pre id=&quot;code_1726638951650&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(len(pd.unique(uriage_data.item_name)))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;99&lt;/p&gt;
&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; 26개의 상품이 99개로 늘어나 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;len + pd.unique&lt;/b&gt;&lt;/span&gt;로 매출 이력의 item_name의&lt;b&gt; 중복을 제외한 데이터 건수&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;pre id=&quot;code_1726639450835&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;print(uriage_data[&quot;item_name&quot;].nunique())&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;- len + pd.unique를 nunique로 대체 가능&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;- 데이터 오류 수정하기&lt;/p&gt;
&lt;pre id=&quot;code_1726639754499&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data[&quot;item_name&quot;] = uriage_data[&quot;item_name&quot;].str.upper()
uriage_data[&quot;item_name&quot;] = uriage_data[&quot;item_name&quot;].str.replace(&quot;  &quot;, &quot;&quot;)
uriage_data[&quot;item_name&quot;] = uriage_data[&quot;item_name&quot;].str.replace(&quot; &quot;, &quot;&quot;)
uriage_data.sort_values(by = [&quot;item_name&quot;], ascending = True)&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;1067&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d55l0Z/btsJDpCRFwL/r018gJfsSgVFvIWPS7IeF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d55l0Z/btsJDpCRFwL/r018gJfsSgVFvIWPS7IeF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d55l0Z/btsJDpCRFwL/r018gJfsSgVFvIWPS7IeF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd55l0Z%2FbtsJDpCRFwL%2Fr018gJfsSgVFvIWPS7IeF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;689&quot; height=&quot;473&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; str.upper()&lt;/b&gt;&lt;/span&gt;로 소문자를 &lt;b&gt;대문자&lt;/b&gt;로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;str.replace()&lt;/b&gt;&lt;/span&gt;로 &lt;b&gt;공백 제거&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- item_name을 기준으로 &lt;b&gt;정렬&lt;/b&gt;해 화면에 표시&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;&lt;b&gt;&amp;lt;문자열 내장 함수&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열.&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;replace&lt;/b&gt;&lt;/span&gt;(기존 값, 변경할 값, 변경횟수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열.&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;upper()&lt;/b&gt;&lt;/span&gt; : 소문자를 대문자로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열.&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;lower()&lt;/b&gt;&lt;/span&gt; : 대문자를 소문자로 변환&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726640841399&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(len(pd.unique(uriage_data[&quot;item_name&quot;])))
print(pd.unique(uriage_data[&quot;item_name&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;1070&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Rtqv/btsJDN4eqA6/bbKRgmyFrOJo6okDqkD3Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Rtqv/btsJDN4eqA6/bbKRgmyFrOJo6okDqkD3Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Rtqv/btsJDN4eqA6/bbKRgmyFrOJo6okDqkD3Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Rtqv%2FbtsJDN4eqA6%2FbbKRgmyFrOJo6okDqkD3Y0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;712&quot; height=&quot;144&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;217&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;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;015. 금액의 결측치를 수정하자&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결측치 확인하기&lt;/p&gt;
&lt;pre id=&quot;code_1726642065750&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data.isnull().any(axis = 0)&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;343&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U5WzP/btsJDPuddJj/dku0mhKPBsblWWC3orOas1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U5WzP/btsJDPuddJj/dku0mhKPBsblWWC3orOas1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U5WzP/btsJDPuddJj/dku0mhKPBsblWWC3orOas1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU5WzP%2FbtsJDPuddJj%2Fdku0mhKPBsblWWC3orOas1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;240&quot; height=&quot;205&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;isnull()&lt;/b&gt;&lt;/span&gt; 을 이용해 매출 이력 데이터의 결측치 유무 확인 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- item_price에 결측치가 있음을 확인할 수 있음&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;- 데이터프레임.&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;isnull()&lt;/b&gt;&lt;/span&gt; : 데이터프레임에서 결측치가 있는지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 결측치 있으면 True, 없으면 False로 표시&lt;/p&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: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt;&lt;b&gt; any()&lt;/b&gt;&lt;/span&gt; : True가 하나라도 존재하는지 확인하는 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;axis = 0&lt;/b&gt;&lt;/span&gt;&amp;nbsp; : &lt;b&gt;열(column)&lt;/b&gt;단위로 연산 &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 각 열을 기준으로, 해당 열에 하나라도 결측치가 있으면 True, 그렇지 않으면 False 반환하므로 이를 통해 열별로 결측값이 존재하는지 여부 확인 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; axis=1&lt;/b&gt;&lt;/span&gt; : &lt;b&gt;행(row) &lt;/b&gt;단위로 연산&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt;&amp;nbsp; 각 행을 기준으로 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-&lt;/span&gt;&lt;b&gt; all()&lt;/b&gt;&lt;/span&gt; : 모든 값이 True일 때만 True 반환&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;- 결측치 수정하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 집계 기간에 상품 단가의 변동이 없다는 전제조건이 있으므로, 같은 상품의 단가를 이용해 수정 가능&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1726644629347&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flg_is_null = uriage_data[&quot;item_price&quot;].isnull()
for trg in list(uriage_data.loc[flg_is_null, &quot;item_name&quot;].unique()):
    price = uriage_data.loc[(~flg_is_null) &amp;amp; (uriage_data[&quot;item_name&quot;] == trg), &quot;item_price&quot;].max()
    uriage_data[&quot;item_price&quot;].loc[(flg_is_null) &amp;amp; (uriage_data[&quot;item_name&quot;] == trg)] = price
uriage_data.head()&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;1043&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AP1Uw/btsJD5Q3SUS/CK2leIV3sOb1AFTTCK6J4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AP1Uw/btsJD5Q3SUS/CK2leIV3sOb1AFTTCK6J4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AP1Uw/btsJD5Q3SUS/CK2leIV3sOb1AFTTCK6J4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAP1Uw%2FbtsJD5Q3SUS%2FCK2leIV3sOb1AFTTCK6J4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;256&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;338&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;- item_price 중에 결측치 있는 곳 조사하여&lt;b&gt; flg_is_null 변수&lt;/b&gt;에 저장 (True, False로 저장)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;b&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;list(uriage_data.loc[flg_is_null, &quot;item_name&quot;].unique())&lt;/span&gt;&lt;/b&gt; : flg_is_null을 이용해 결측치가 있는 상품명 리스트 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt; list()&lt;/b&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: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;loc 함수&lt;/b&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: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; -&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt; '금액에 결측치가 있다'를 조건으로 하기 위해 flg_is_null로 조건 지정 (flg_is_null이 True 인 행)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; -&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;조건과 일치하는 데이터 중에서 어떤 칼럼(&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;item_name)&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: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #fafafa; 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;/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: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; - unique() : 추출한 상품명에서 중복을 제거하여 고유한 상품명 리스트 제작&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- &lt;b&gt;price = uriage_data.loc[&lt;span style=&quot;color: #009a87;&quot;&gt;(~flg_is_null) &amp;amp; (uriage_data[&quot;item_name&quot;] == trg)&lt;/span&gt;, &lt;span style=&quot;color: #f89009;&quot;&gt;&quot;item_price&quot;&lt;/span&gt;].max()&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 결측치가 있는 상품과 같은 상품이며 금액이 올바르게 입력된 행을 loc으로 찾고, 그 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;금액을 가져옴&lt;/b&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: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; - &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;loc()의 조건&lt;/b&gt;&lt;/span&gt; : 부정 연산자 ~을 이용 ( flg_is_null == False )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; - 현재 상품의 결측치가 없는 item_price 값 중에서 최대값을 찾아 결측치를 채우기 위해 price에 저장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- &lt;b&gt;uriage_data[&quot;item_price&quot;].loc[(flg_is_null)&amp;nbsp;&amp;amp;&amp;nbsp;(uriage_data[&quot;item_name&quot;]&amp;nbsp;==&amp;nbsp;trg)]&amp;nbsp;=&amp;nbsp;price&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 가져온 금액으로 데이터 수정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; - 매출 이력의 item_price 칼럼에서 loc()으로 결측치가 있는 데이터 추출 후, 금액 데이터 price로 대체&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- 검증하기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1726646550238&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data.isnull().any(axis = 0)&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;339&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vKYN2/btsJFHBtM3P/CdXjaLWTqFiwl2cnniPOXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vKYN2/btsJFHBtM3P/CdXjaLWTqFiwl2cnniPOXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vKYN2/btsJFHBtM3P/CdXjaLWTqFiwl2cnniPOXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvKYN2%2FbtsJFHBtM3P%2FCdXjaLWTqFiwl2cnniPOXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;239&quot; height=&quot;141&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- item_price 의 결측치가 없어진 것을 확인 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726646994548&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for trg in list(uriage_data[&quot;item_name&quot;].sort_values().unique()):
    print(trg + &quot;의최고가：&quot; + str(uriage_data.loc[uriage_data[&quot;item_name&quot;]==trg][&quot;item_price&quot;].max()) 
          + &quot;의최저가：&quot; + str(uriage_data.loc[uriage_data[&quot;item_name&quot;]==trg][&quot;item_price&quot;].min(skipna=False)))&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;529&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bot0Zi/btsJEFR0PIZ/jc0ktf4NwJagtaEHKH5Xr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bot0Zi/btsJEFR0PIZ/jc0ktf4NwJagtaEHKH5Xr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bot0Zi/btsJEFR0PIZ/jc0ktf4NwJagtaEHKH5Xr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbot0Zi%2FbtsJEFR0PIZ%2Fjc0ktf4NwJagtaEHKH5Xr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;533&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 모든 상품에 대해 반복문 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 상품의 최대금액과 최소금액이 일치하는 것으로 봐서 성공적으로 금액을 수정했다는 것을 알 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;skipna&lt;/b&gt;&lt;/span&gt; : NaN의 무시 여부 설정 가능 , False로 지정하여 NaN이 존재할 경우 최솟값이 NaN으로 표시되도록 함&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;016. 고객 이름의 오류를 수정하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 확인하기&lt;/p&gt;
&lt;pre id=&quot;code_1726647352899&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kokyaku_data[&quot;고객이름&quot;].head()&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;427&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9vA0Z/btsJFvumd0B/7qEOVwCgKp18jsh2k95v8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9vA0Z/btsJFvumd0B/7qEOVwCgKp18jsh2k95v8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9vA0Z/btsJFvumd0B/7qEOVwCgKp18jsh2k95v8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9vA0Z%2FbtsJFvumd0B%2F7qEOVwCgKp18jsh2k95v8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;157&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1726647395239&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uriage_data[&quot;customer_name&quot;].head()&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;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/poPW1/btsJEO9amIp/nmnN4enDMzoWcMYUyLbq80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/poPW1/btsJEO9amIp/nmnN4enDMzoWcMYUyLbq80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/poPW1/btsJEO9amIp/nmnN4enDMzoWcMYUyLbq80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpoPW1%2FbtsJEO9amIp%2FnmnN4enDMzoWcMYUyLbq80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;379&quot; height=&quot;156&quot; data-origin-width=&quot;500&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 두 데이터 서식이 일치하지 않으므로 결합 불가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726647526793&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kokyaku_data[&quot;고객이름&quot;] = kokyaku_data[&quot;고객이름&quot;].str.replace(&quot;  &quot;, &quot;&quot;)
kokyaku_data[&quot;고객이름&quot;] = kokyaku_data[&quot;고객이름&quot;].str.replace(&quot; &quot;, &quot;&quot;)
kokyaku_data[&quot;고객이름&quot;].head()&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;432&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uk3MK/btsJEoCT0xc/aQzE8WK3sSo1JUQKa9i6ZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uk3MK/btsJEoCT0xc/aQzE8WK3sSo1JUQKa9i6ZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uk3MK/btsJEoCT0xc/aQzE8WK3sSo1JUQKa9i6ZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuk3MK%2FbtsJEoCT0xc%2FaQzE8WK3sSo1JUQKa9i6ZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;160&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;str.replace()&lt;/b&gt;&lt;/span&gt;로 고객 정보의 고객 이름에서 공백 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;f. 같은 이름의 데이터가 존재하는 경우 등록일, 생년월일 등 다른 정보를 이용해서 구분해야 함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;017. 날짜 오류를 수정하자&amp;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;482&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdAdEj/btsJDo4Vrzg/Shmje4zw3RBGdDAk5go7e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdAdEj/btsJDo4Vrzg/Shmje4zw3RBGdDAk5go7e0/img.png&quot; data-alt=&quot;고객 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdAdEj/btsJDo4Vrzg/Shmje4zw3RBGdDAk5go7e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdAdEj%2FbtsJDo4Vrzg%2FShmje4zw3RBGdDAk5go7e0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;341&quot; height=&quot;244&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;345&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 날짜 동일한 포맷으로 통일하기&lt;/p&gt;
&lt;pre id=&quot;code_1726647895327&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flg_is_serial = kokyaku_data[&quot;등록일&quot;].astype(&quot;str&quot;).str.isdigit()
flg_is_serial.sum()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;str.isdigit()&lt;/b&gt;&lt;/span&gt; : 고객 정보의 등록일이 숫자인지 아닌지 판정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 숫자로 된 곳을 flg_is_serial에 저장&lt;/span&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;.astype(&quot;str&quot;) : 열의 값을 모두 문자열로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 날짜 데이터의 경우 문자열로 변환하고, 결측치(NaN)은 &quot;nan&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;str.isdigit() : 각 문자열이 숫자로만 이루어졌는지 확인하는 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 문자열의 모든 문자가 숫자(0~9)로만 이루어졌다면 True를, 그렇지 않다면 False를 반환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 공백, 기호, 날짜형식(ex. 2022-08-15), 결측치(NaN) 등은 Flase&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726648479107&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fromSerial = pd.to_timedelta(kokyaku_data.loc[flg_is_serial, &quot;등록일&quot;].astype(&quot;float&quot;), unit=&quot;D&quot;) + pd.to_datetime(&quot;1900/01/01&quot;)
fromSerial&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;508&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q4Jdu/btsJD7nRxGD/fL9UYdozQY6KaYjuo5Dirk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q4Jdu/btsJD7nRxGD/fL9UYdozQY6KaYjuo5Dirk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q4Jdu/btsJD7nRxGD/fL9UYdozQY6KaYjuo5Dirk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ4Jdu%2FbtsJD7nRxGD%2FfL9UYdozQY6KaYjuo5Dirk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;262&quot; height=&quot;405&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;786&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;b&gt;시리얼 날짜 형식&lt;/b&gt;을 변환하여 Pandas에서 처리하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(엑셀에서 날짜는 &lt;b&gt;1900년 1월 1일&lt;/b&gt;부터의 경과일수를 숫자로 기록하는 방식으로 표현하므로, 이 시리얼 넘버를 실제 날짜로 변환해야 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; loc()&lt;/b&gt;&lt;/span&gt; : flg_is_serial이 True인 행의 &quot;등록일&quot; 값 추출 ( 숫자로만 이루어진 시리얼 날짜 값 선택)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;.astype(&quot;float&quot;)&lt;/b&gt;&lt;/span&gt; : 추출한 &quot;등록일&quot; 값을 실수형으로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 엑셀 시리얼 날짜 값은 거의 정수로 표현되지만, 소수점을 포함하여 시간을 나타낼 수 있기에 실수형으로 변환하는 것이 적합 (ex. 2.5 = 1900년 1월 2일 오후 12시)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; pd.to_timedelta() 함수&lt;/b&gt;&lt;/span&gt; : 시간의 차이를 표현하는 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt; unit =&quot;D&quot;&lt;/b&gt;&lt;/span&gt; : 일(Day) 단위로 계산한다는 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 일 단위로 숫자를 날짜로 변환&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;pd.to_datetime(&quot;1900/01/01&quot;)&lt;/b&gt;&lt;/span&gt; : 1900/01/01 을 1로 기준 날짜 설정&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&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;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;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;lt;이틀이 어긋난 이유&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfNx6n/btsJDOPEo7N/sQHzD8jBonV7nX8UTAeFbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfNx6n/btsJDOPEo7N/sQHzD8jBonV7nX8UTAeFbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfNx6n/btsJDOPEo7N/sQHzD8jBonV7nX8UTAeFbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfNx6n%2FbtsJDOPEo7N%2FsQHzD8jBonV7nX8UTAeFbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;718&quot; height=&quot;419&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726652151672&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fromSerial = pd.to_timedelta(kokyaku_data.loc[flg_is_serial, &quot;등록일&quot;].astype(&quot;float&quot;) - 2, unit=&quot;D&quot;) + pd.to_datetime(&quot;1900/01/01&quot;)
fromSerial&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;- 엑셀 숫잣값에서 2를 빼서 처리&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1726649513665&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fromString = pd.to_datetime(kokyaku_data.loc[~flg_is_serial, &quot;등록일&quot;])
fromString&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;697&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEPqg/btsJD4R84Vk/9Z4S6Oqg0YAFqjTPOQCWl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEPqg/btsJD4R84Vk/9Z4S6Oqg0YAFqjTPOQCWl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEPqg/btsJD4R84Vk/9Z4S6Oqg0YAFqjTPOQCWl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEPqg%2FbtsJD4R84Vk%2F9Z4S6Oqg0YAFqjTPOQCWl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;304&quot; data-origin-width=&quot;697&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;&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;- 2018/01/04와 같이 슬래시로 구분된 서식을 하이픈으로 구분된 서식으로 통일하기 위한 처리 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;~flg_is_serial&lt;/b&gt;&lt;/span&gt; : 부정 연산자 ~로 Flase인 것을 loc()함수의 조건으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; 숫자가 아닌 값들로 이루어진 데이터도 pd.to_datetime을 이용해 날짜 형식으로 변환&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726649873475&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kokyaku_data[&quot;등록일&quot;] = pd.concat([fromSerial, fromString])
kokyaku_data&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;434&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3t07x/btsJDUIXSWp/i0dUPYImTpCmVUEt9tkkmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3t07x/btsJDUIXSWp/i0dUPYImTpCmVUEt9tkkmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3t07x/btsJDUIXSWp/i0dUPYImTpCmVUEt9tkkmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3t07x%2FbtsJDUIXSWp%2Fi0dUPYImTpCmVUEt9tkkmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;258&quot; height=&quot;443&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;746&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;- 숫자를 날짜로 수정한 데이터(fromSerial)와 서식을 변경한 데이터(fromString)를 결합해서 데이터 갱신&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726650090786&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kokyaku_data[&quot;등록연월&quot;] = kokyaku_data[&quot;등록일&quot;].dt.strftime(&quot;%Y%m&quot;)
rslt = kokyaku_data.groupby(&quot;등록연월&quot;).count()[&quot;고객이름&quot;]
print(rslt)
print(len(kokyaku_data))&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;411&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SyMLA/btsJF3K8OYn/3kK8KbkkDqewIe4jUMyx91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SyMLA/btsJF3K8OYn/3kK8KbkkDqewIe4jUMyx91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SyMLA/btsJF3K8OYn/3kK8KbkkDqewIe4jUMyx91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSyMLA%2FbtsJF3K8OYn%2F3kK8KbkkDqewIe4jUMyx91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;236&quot; height=&quot;353&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수정한 날짜에서&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; strftime&lt;/b&gt;&lt;/span&gt;을 이용해 등록연월을 작성하고 &lt;b&gt;groupby()&lt;/b&gt;로 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;데이터프레임.groupby(그룹이되는컬럼).집계함수()[계산하고&amp;nbsp;싶은&amp;nbsp;컬럼]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; groupby 후, count()로 데이터 개수 집계&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726650459919&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flg_is_serial = kokyaku_data[&quot;등록일&quot;].astype(&quot;str&quot;).str.isdigit()
flg_is_serial.sum()&lt;/code&gt;&lt;/pre&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;- 등록일 칼럼에 숫자 데이터가 남아 있는지 다시 확인해보면 모든 숫자 데이터가 날짜로 잘 수정되었다는 것을 알 수 있음!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;018. 고객 이름을 키로 두 개의 데이터를 결합(조인)하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1726650632625&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;join_data = pd.merge(uriage_data, kokyaku_data, left_on=&quot;customer_name&quot;, right_on=&quot;고객이름&quot;, how=&quot;left&quot;)
join_data = join_data.drop(&quot;customer_name&quot;, axis=1)
join_data&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;1331&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7rMiz/btsJFuoFbYp/LePiAFzZBaLD5qSnDDKT01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7rMiz/btsJFuoFbYp/LePiAFzZBaLD5qSnDDKT01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7rMiz/btsJFuoFbYp/LePiAFzZBaLD5qSnDDKT01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7rMiz%2FbtsJFuoFbYp%2FLePiAFzZBaLD5qSnDDKT01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;397&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;pd.merge()&lt;/b&gt;&lt;/span&gt; : 두 개의 데이터의 서로 다른 열을 지정하여 결합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;left_on&lt;/b&gt; 의 인수로 uriage_data의 customer_name 칼럼을 키로, &lt;b&gt;right_on&lt;/b&gt;의 인수로 kokyaku_data의 고객 이름 칼럼을 키로 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;how&lt;/b&gt;&lt;/span&gt;로 결합 방법을 left로 지정 ( &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;uriage_data을 기준으로 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;일치하는 &lt;/span&gt;kokyaku_data를 결합 )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- join_data.drop(&quot;customer_name&quot;, &lt;b&gt;axis=1&lt;/b&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: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;rarr; &quot;고객 이름&quot;과 중복되는 customer_name 열 제거&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;데이터 정제&lt;/b&gt; 완료!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;019. 정제한 데이터를 덤프하자&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 먼저 칼럼의 배치를 다루기 쉽게 조정하기&lt;/p&gt;
&lt;pre id=&quot;code_1726651161758&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dump_data = join_data[[&quot;purchase_date&quot;, &quot;purchase_month&quot;, &quot;item_name&quot;, &quot;item_price&quot;, &quot;고객이름&quot;, &quot;지역&quot;, &quot;등록일&quot;]]
dump_data&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;1212&quot; data-origin-height=&quot;739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zO5BH/btsJDSdrIL1/PENwOjkky4Gflku7K1Y721/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zO5BH/btsJDSdrIL1/PENwOjkky4Gflku7K1Y721/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zO5BH/btsJDSdrIL1/PENwOjkky4Gflku7K1Y721/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzO5BH%2FbtsJDSdrIL1%2FPENwOjkky4Gflku7K1Y721%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;427&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;739&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;- join_data에서 필요한 칼럼을 임의의 순서로 정렬 후, dump_data에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726651254354&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dump_data.to_csv(&quot;dump_data.csv&quot;, index=False)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; to_csv&lt;/b&gt;&lt;/span&gt;를 이용해 파일로 출력&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;020. 데이터를 집계하자&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726651363638&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import_data = pd.read_csv(&quot;dump_data.csv&quot;)
import_data&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;1215&quot; data-origin-height=&quot;739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rhXmQ/btsJFtwIvek/Wrj8Dip0xdfoMMmlRfOKN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rhXmQ/btsJFtwIvek/Wrj8Dip0xdfoMMmlRfOKN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rhXmQ/btsJFtwIvek/Wrj8Dip0xdfoMMmlRfOKN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrhXmQ%2FbtsJFtwIvek%2FWrj8Dip0xdfoMMmlRfOKN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;727&quot; height=&quot;442&quot; data-origin-width=&quot;1215&quot; data-origin-height=&quot;739&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;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726651434694&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;byItem = import_data.pivot_table(index=&quot;purchase_month&quot;, columns=&quot;item_name&quot;, aggfunc=&quot;size&quot;, fill_value=0)
byItem&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;1963&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDf3PM/btsJD45Hua5/dziRR4mUFzZ8CMQTcYgo11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDf3PM/btsJD45Hua5/dziRR4mUFzZ8CMQTcYgo11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDf3PM/btsJD45Hua5/dziRR4mUFzZ8CMQTcYgo11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDf3PM%2FbtsJD45Hua5%2FdziRR4mUFzZ8CMQTcYgo11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1963&quot; height=&quot;573&quot; data-origin-width=&quot;1963&quot; data-origin-height=&quot;573&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;- purchase_month를 세로축으로 상품별로 집계&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1726651595465&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;byPrice = import_data.pivot_table(index=&quot;purchase_month&quot;, columns=&quot;item_name&quot;, values=&quot;item_price&quot;, aggfunc=&quot;sum&quot;, fill_value=0)
byPrice&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;1953&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCGjxV/btsJDNJWcxd/posV58AhLHNs3Vxg2J1N00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCGjxV/btsJDNJWcxd/posV58AhLHNs3Vxg2J1N00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCGjxV/btsJDNJWcxd/posV58AhLHNs3Vxg2J1N00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCGjxV%2FbtsJDNJWcxd%2FposV58AhLHNs3Vxg2J1N00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1953&quot; height=&quot;568&quot; data-origin-width=&quot;1953&quot; data-origin-height=&quot;568&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;- purchase_month를 세로축으로 매출금액별로 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726651665703&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;byCustomer = import_data.pivot_table(index=&quot;purchase_month&quot;, columns=&quot;고객이름&quot;, aggfunc=&quot;size&quot;, fill_value=0)
byCustomer&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;1963&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/twA1d/btsJEi3LlbY/6JOm6OcM1a5BIFsooWXY91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/twA1d/btsJEi3LlbY/6JOm6OcM1a5BIFsooWXY91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/twA1d/btsJEi3LlbY/6JOm6OcM1a5BIFsooWXY91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtwA1d%2FbtsJEi3LlbY%2F6JOm6OcM1a5BIFsooWXY91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1963&quot; height=&quot;546&quot; data-origin-width=&quot;1963&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- purchase_month를 세로축으로 고객별로 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726651721873&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;byRegion = import_data.pivot_table(index=&quot;purchase_month&quot;, columns=&quot;지역&quot;, aggfunc=&quot;size&quot;, fill_value=0)
byRegion&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;754&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boTZ2Q/btsJFwGMZ6C/xuCNUweA7UKUXoWk5Jb5KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boTZ2Q/btsJFwGMZ6C/xuCNUweA7UKUXoWk5Jb5KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boTZ2Q/btsJFwGMZ6C/xuCNUweA7UKUXoWk5Jb5KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboTZ2Q%2FbtsJFwGMZ6C%2FxuCNUweA7UKUXoWk5Jb5KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;310&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- purchase_month를 세로축으로 지역별로 집계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726651807747&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;away_data = pd.merge(uriage_data, kokyaku_data, left_on=&quot;customer_name&quot;, right_on=&quot;고객이름&quot;, how=&quot;right&quot;)
away_data[away_data[&quot;purchase_date&quot;].isnull()][[&quot;고객이름&quot;, &quot;등록일&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;350&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD6t2V/btsJDH4hZUl/IpImkRBz10ky4JjJdDZ750/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD6t2V/btsJDH4hZUl/IpImkRBz10ky4JjJdDZ750/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD6t2V/btsJDH4hZUl/IpImkRBz10ky4JjJdDZ750/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD6t2V%2FbtsJDH4hZUl%2FIpImkRBz10ky4JjJdDZ750%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;84&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;108&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;- right join으로 결합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 집계 기간 내에 구매하지 않은 고객은 NaN으로 채워짐&lt;/p&gt;</description>
      <category>파이썬 데이터 분석 실무 테크닉 100</category>
      <author>채영sw</author>
      <guid isPermaLink="true">https://swchaey.tistory.com/26</guid>
      <comments>https://swchaey.tistory.com/26#entry26comment</comments>
      <pubDate>Wed, 18 Sep 2024 18:36:22 +0900</pubDate>
    </item>
  </channel>
</rss>