Загружаем каталог…
Загружаем каталог…
코드잇 데이터분석가 부트캠프를 통해 배우고 느낀 것을 적습니다. 강의/미션/위클리페이퍼/프로젝트로 나누어 작성합니다. 📅 2026.05.20 | 🗺️ 과정: 1개월차 ▓░░░░░░ | 📖 커리큘럼: EDA 숫자로 적혀 있다고 모두 숫자가 아니라는 것을 배우며, 데이터를 계산하기 전에 의미부터 읽는 습관을 만든 하루였다. 🗓️ 오늘의 일정 교시 시간 내용 1~3교시 09:00~12:00 EDA 강의, 컬럼의 역할 나누기 4~7교시 13:00~17:00 EDA 강의, 이상치와 상관관계, 그래프 해석 8~9교시 17:00~19:00 자습 오늘은 EDA 강의를 듣고, 내일은 같은 흐름을 직접 데이터에 적용하는 미션 4를 진행한다. 1️⃣ 컬럼부터 다시 보기 1-1. dtype은 저장 방식일 뿐이다 ❓ 의문. 컬럼이 float로 저장되어 있는데 왜 연속형이 아니라고 하는지 궁금했다. 📖 배움. dtype은 값이 컴퓨터에 저장된 방식이고, 변수의 종류는 값이 가진 의미로 정한다. 흡연 여부나 청력 같은 범주형 코드가 float로 보이는 이유는 대개 결측치가 섞여 있어서 정수 대신 실수로 저장되었기 때문이다. 즉 의미는 범주인데 저장만 실수인 상태이다. 그래서 info() 를 본 다음에는 컬럼을 하나씩 보며 이 숫자가 계산해도 되는 숫자인지를 다시 물어야 한다. 💭 지금까지는 숫자형이면 평균을 내도 된다고 당연하게 생각했다. 지역 코드의 평균이나 성별 코드의 평균은 계산은 되지만 아무 뜻이 없다는 말을 듣고, 계산이 되는 것과 의미가 있는 것은 다르다는 것을 처음 실감했다. 1-2. 컬럼의 역할을 다섯 가지로 나눈다 📖 배움. 컬럼을 식별자, 명목형, 순서형, 연속형, 특수 처리 변수로 나누면 각 컬럼에 무엇을 해야 하는지가 정해진다. 식별자는 행을 구분하는 용도라서 분석에서 빼고, 명목형은 이름표로 바꿔서 빈도를 본다. 순서형은 순서를 유지한 채 이름표로 바꾸고, 연속형은 평균과 분포를 본다. 특수 처리 변수는 숫자처럼 보이지만 규칙이 숨어 있는 컬럼이다. 아래는 이 기준을 작은 설문 표에 적용해 본 예시이다. import pandas as pd survey = pd.DataFrame({ '응답번호': [101, 102, 103, 104], # 식별자 '지역코드': [11, 26, 11, 41], # 명목형, 크기에 의미가 없다 '만족도': [3, 5, 4, 2], # 순서형, 순서에는 의미가 있다 '키': [160, 172, 165, 158], # 연속형 }) # 역할별로 컬럼을 묶어 두면 이후 처리가 쉬워진다 id_cols = ['응답번호'] nominal_cols = ['지역코드'] ordinal_cols = ['만족도'] numeric_cols = ['키'] print(survey[numeric_cols].mean()) # 평균은 연속형에만 낸다 💡 역할별로 변수 목록을 먼저 만들어 두면, 나중에 상관계수나 평균을 낼 때 어떤 컬럼을 넣어야 하는지 고민이 줄어들 것 같다. 분석을 시작하기 전에 해야 할 일이 하나 생긴 셈이다. 1-3. 특수한 코드는 결측으로 바꾸고, 표시 열을 남긴다 ❓ 의문. 측정값 열에 측정이 아닌 코드가 섞여 있으면 그 행을 버려야 하는지 궁금했다. 📖 배움. 버리지 않고 두 가지로 나눈다. 먼저 그 코드가 있었다는 사실을 별도의 표시 열로 남기고, 원래 열의 특수 코드는 결측으로 바꾼다. 그러면 원래 열은 순수한 측정값만 남아서 평균과 분포를 믿을 수 있고, 표시 열로는 그 상태에 해당하는 사람이 몇 명인지를 따로 볼 수 있다. 모든 알 수 없는 값을 결측 하나로 통일하는 효과도 있어서 이후 결측 처리가 한 방식으로 정리된다. import numpy as np # 나이가 모를 때 999로 적어 둔 표라고 가정한다 people = pd.DataFrame({'나이': [31, 999, 45, 28]}) people['나이_미응답'] = np.where(people['나이'] == 999, 1, 0) # 표시 열을 먼저 남긴다 people['나이'] = people['나이'].replace(999, np.nan) # 원래 열은 결측으로 바꾼다 print(people) 💭 값을 지우는 것이 아니라 정보를 나눠서 보관한다는 발상이 신선했다. 버리지 않고 두 개의 열로 살린다는 점이 마음에 들었다. 1-4. 결측치도 역할별로 다르게 채운다 📖 배움. 수치형 측정값은 중앙값으로, 범주형 코드는 최빈값으로 채우는 것이 기본이다. 중앙값을 쓰는 이유는 극단적인 값이 있어도 평균처럼 끌려가지 않기 때문이다. 다만 채우기 전에 결측이 왜 생겼는지, 채운 값이 분석을 왜곡하지 않는지를 먼저 생각해야 한다. 💭 7일차에 결측을 채우는 방법을 배웠을 때는 방법만 외웠는데, 오늘은 어떤 컬럼에 어떤 방법을 쓰는지를 기준으로 고르는 연습이 되었다. 2️⃣ 이상치를 어떻게 볼 것인가 2-1. describe 한 번으로 읽을 수 있는 것 📖 배움. 기술통계표는 값을 훑는 표가 아니라 질문을 던지는 표이다. 평균과 중앙값이 비슷하면 분포가 비교적 대칭이라는 단서가 되고, 평균이 중앙값보다 훨씬 크면 큰 값 몇 개가 평균을 끌어올렸을 가능성을 의심한다. 최솟값과 최댓값은 상식과 맞는지 확인하는 용도이다. 사람의 허리둘레가 비현실적으로 작거나 크다면 통계 이전에 입력 오류를 먼저 의심한다. 사분위수는 전체의 가운데가 어디에 몰려 있는지를 보여 준다. 💭 표 한 장에서 읽어 낼 수 있는 것이 이렇게 많다는 것이 놀라웠다. 앞으로 describe를 출력하면 숫자를 훑지 말고 하나씩 질문하면서 읽어야겠다고 생각했다. 2-2. IQR이 표준편차보다 믿을 만한 이유 ❓ 의문. 퍼짐 정도는 표준편차로도 알 수 있는데 왜 굳이 IQR을 따로 보는지 궁금했다. 📖 배움. 표준편차는 평균을 기준으로 계산하기 때문에 극단적인 값 하나에도 크게 부풀려진다. IQR은 가운데 절반이 퍼진 폭만 보므로 양쪽 끝의 이상한 값에 흔들리지 않는다. 이런 성질을 강건하다고 부른다. 이상치를 찾는 기준으로 쓰는 것도 이 때문이다. 아래는 직접 만든 예시로 경계를 계산해 본 것이다. scores = pd.Series([62, 70, 71, 74, 75, 78, 80, 150]) # 150은 입력 실수라고 가정 q1 = scores.quantile(0.25) q3 = scores.quantile(0.75) iqr = q3 - q1 lower = q1 - 1.5 * iqr # 아래쪽 경계 upper = q3 + 1.5 * iqr # 위쪽 경계 print(scores[(scores < lower) | (scores > upper)]) # 경계 밖의 값만 확인 💭 평균은 값 하나에 흔들리고 중앙값과 IQR은 흔들리지 않는다는 비교가 와닿았다. 평균만 보고 판단하는 것이 얼마나 위험한지 알게 되었다. 2-3. 지우기 전에 진단하고 처방한다 📖 배움. 이상치 처리는 식별, 진단, 처방, 검증의 네 단계로 한다. 식별은 상식과 시각화, 통계 기준으로 후보를 찾는 단계이다. 진단은 그 값이 명백한 오류인지 현실에서 충분히 나올 수 있는 극단값인지를 가르는 단계로, 여기서 처리 방향이 갈린다. 오류라면 삭제하거나 대체한다. 극단값이라면 오히려 중요한 신호일 수 있으므로 변환, 구간화, 상한과 하한으로 누르기, 별도 분석 중에서 고른다. 마지막으로 처리 전후에 결과가 어떻게 달라졌는지, 중요한 정보를 잃지 않았는지 확인한다. 💡 IQR 경계 밖에 있다는 것만으로 지우면 안 된다는 점이 핵심이다. 혈당이 아주 높은 사람은 오류가 아니라 분석해야 할 집단일 수 있다. 이상치는 먼저 이유를 묻는 대상이라고 정리했다. 3️⃣ 상관관계와 그래프 읽기 3-1. 상관계수는 방향과 강도, 그리고 인과가 아니다 ❓ 의문. 상관계수가 높으면 한 변수가 다른 변수의 원인이라고 말해도 되는지 궁금했다. 📖 배움. 상관계수는 두 변수가 얼마나 일관되게 함께 움직이는지를 방향과 강도로 보여 줄 뿐이다. 양의 상관이면 같이 오르고, 음의 상관이면 한쪽이 오를 때 다른 쪽이 내려간다. 절댓값이 클수록 관계가 강하다. 하지만 원인과 결과를 말해 주지는 않는다. 눈에 보이지 않는 제3의 요인이 둘을 함께 움직이는 경우가 많기 때문이다. 비 오는 날 우산 판매량과 지각 건수가 함께 늘어도, 우산이 지각의 원인은 아니다. 💭 상관관계가 높다는 말을 들으면 원인이라고 읽는 습관이 있었다. 앞으로 "관련이 있다" 정도로만 쓰는 연습을 해야겠다고 느꼈다. 3-2. 산점도는 방향, 형태, 강도 순서로 읽는다 📖 배움. 산점도는 두 수치형 변수의 관계를 확인하는 가장 첫 번째 도구이다. 점들이 어느 쪽으로 뻗는지가 방향이고, 직선인지 곡선인지가 형태이고, 점들이 선 주위에 얼마나 모여 있는지가 강도이다. 점이 촘촘할수록 한 변수 값으로 다른 변수 값을 비교적 잘 짐작할 수 있다는 뜻이다. 구름처럼 흩어져 있다면 관계가 약한 것이다. 3-3. 페어플롯과 히트맵은 역할이 다르다 📖 배움. 페어플롯은 여러 변수 쌍의 산점도와 각 변수의 분포를 한 번에 보여 주므로 모양과 이상한 점을 탐색하는 용도이다. 히트맵은 상관계수를 숫자와 색으로 요약하므로 어떤 관계가 가장 센지를 비교하는 용도이다. 변수가 많아지면 페어플롯은 읽기 어려워져서 몇 개로 줄여서 쓴다. 또 둘 다 직선 관계 위주로 보기 때문에 곡선 관계는 놓칠 수 있다. import seaborn as sns import matplotlib.pyplot as plt # 변수가 많으면 페어플롯이 무거우니 일부만 뽑아서 그린다 small = survey[['키']].copy() small['몸무게'] = [52, 68, 60, 49] sns.heatmap(small.corr(), annot=True, cmap='Blues') # 숫자와 색으로 요약한다 plt.title('상관계수 히트맵 예시') plt.show() 💭 그래프를 하나만 쓰는 것이 아니라 하나는 모양을, 하나는 수치를 맡는다는 구분이 머릿속에 정리되었다. 둘을 함께 보면 서로의 약점을 채워 준다. 3-4. 지표 하나로 판단하면 놓치는 것이 있다 📖 배움. 연령대별로 여러 건강 지표를 막대그래프로 나란히 놓으면 지표마다 움직임이 다르다. 어떤 지표는 나이가 들수록 내려가고, 어떤 지표는 오르거나 높은 채로 유지된다. 한 지표만 보고 판단하면 다른 지표에서 드러나는 위험을 놓칠 수 있다는 점이 이 비교의 핵심이었다. 그래서 의사결정 기준도 하나가 아니라 여러 지표를 조합해서 세워야 한다. 💡 그래프를 읽는다는 것은 추세를 말하는 데서 끝나지 않고 "그래서 어떤 기준을 바꿔야 하는가"까지 이어져야 한다는 것을 알았다. 해석의 끝에는 결정이 있어야 한다. 3-5. 막대그래프가 못 보여 주는 것은 바이올린 플롯으로 📖 배움. 막대그래프는 평균 하나만 보여 준다. 바이올린 플롯은 같은 그룹 안에서 값이 어느 구간에 몰려 있는지, 퍼짐이 어떤지까지 보여 준다. 평균이 비슷해도 분포 모양이 다를 수 있기 때문에 평균 비교 뒤에 보조로 쓰기 좋다. 📝 오늘의 정리 주제 내가 이해한 핵심 더 공부할 점 컬럼의 역할 dtype이 아니라 의미로 변수 종류를 정한다 역할별 컬럼 목록 만들기 특수 코드 표시 열을 남기고 원래 열은 결측으로 바꾼다 코드가 여러 종류일 때 정리 결측 처리 수치형은 중앙값, 범주형은 최빈값 채우기 전에 결측 원인 보기 이상치 지우기 전에 오류인지 극단값인지 진단한다 처리 전후 비교 검증 상관관계 방향과 강도를 보되 인과로 읽지 않는다 곡선 관계 확인 방법 그래프 해석 산점도는 방향, 형태, 강도 순서로 읽는다 해석을 결정으로 연결하기 📌 다음 일차 다음 일차: 13일차 (2026-05-21) 커리큘럼: 미션 4 - 다음 강의자료 예고: 오늘 배운 EDA 흐름을 큰 데이터에 직접 적용하고, 해설과 내 코드를 비교한다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[코드잇 데이터분석가 부트캠프][강의] 12일차 EDA. 코드잇 데이터분석가 부트캠프를 통해 배우고 느낀 것을 적습니다. 강의/미션/위클리페이퍼/프로젝트로 나누어 작성합니다. 📅 2026.05.20 | 🗺️ 과정: 1개월차 ▓░░░░░░ | 📖 커리큘럼: EDA 숫자로 적혀 있다고 모두 숫자가 아니라는 것을 배우며, 데이터를 계산하기 전에 의미부터 읽는 습관을 만든 하루였다. 🗓️ 오늘의 일정 교시 시간 내용 1~3교시 09:00~12:00 EDA 강의, 컬럼의 역할 나누기 4~7교시 13:00~17:00 EDA 강의, 이상치와 상관관계, 그래프 해석 8~9교시 17:00~19:00 자습 오늘은 EDA 강의를 듣고, 내일은 같은 흐름을 직접 데이터에 적용하는 미션 4를 진행한다. 1️⃣ 컬럼부터…
Открыть источник