JHJ
[내일배움캠프 QAQC 부트캠프]VS Code와 데이터2(15일차, 260601) 본문
1. 오늘 학습 키워드:
(VS Code) 데이터 전처리(생성부터 정렬까지)

2. 오늘 학습 한 내용을 나만의 언어로 정리하기:

데이터 레벨업! 전처리 & 시각화 세션
3회차
| titanic.describe(percentiles=[.1, .25, .5, .75, .9, .95]) 백분위 분석으로 볼 수도 있음(왜도나 이상치 확인에 유용) titanic.describe() 은 결국 기술적 통계(숫자)을 요약해줌 --> str 계열 등의 범주형 데이터는 요약 곤란 titanic.describe(include='all') 범주형 변수까지 전부 호출(대신 NaN) titanic.describe(include='object') 범주형 변수만 출력(유니크 값에 주목할 필요) titanic['Sex'].value_counts(normalize=True) 노말라이즈를 True로 할 시, 상대값 구할 수 있음 |
| 평균과 중앙값 중앙값 기준으로 평균의 위치에 따라 이상치 여부 파악 가능 왜도: 데이터의 치우침 정도(+: 높은값 이상치) 첨도: 데이터가 평균 몰림 정도(+: 중간 과몰림) 막대 그래프: 범주 데이터의 막대 비교 히스토그램: 연속 데이터의 막대 분포 상관관계(corr): 양의 상관(1), 음의 상관(-1), 상관無(0), 주로 히트맵, 0.3~0.7 정도면 상관관계가 있다고 봄. 상관관계가 인과관계를 의미하진 않음 |
| 결측치: NaN, N/A, Null, "", 0, 9999 등등 값이 없거나 누락된 상태 데이터 수집 과정의 문제(설문 미응답), 입력 실수(누락), 시스템적 결측(특정 조건, 버그 등), 의도적 결측 등 결측치 탐색: df.isnull().sum() 결측치 삭제: df.dropna() 다만 결측치가 너무 많으면 남은 데이터의 신뢰 down --> 때에 따라 대체할 필요 df.dropna(axis=1): 컬럼 기준으로 삭제(기본은 행(인덱스) 삭제) subset으로 특정 컬럼의 결측치만 있는 행 삭제 가능 결측치 대체: df[].fillna(대체값) 시간 순서가 있는 데이터는, 앞뒤 값을 활용한 대체가 효과적 .ffill : 앞 값으로 채우기 .bfill: 뒤 값으로 채우기 선형보강법: 앞 뒤의 값으로 선형 함수화, 중간값 예측 |
| 데이터 타입 df.dtypes() 타입 확인 df.astype(int) int 타입으로 변경 pd.to_numeric 문자열을 숫자로 변환하되, 변환할 수 없는 값은 NaN 문자형 날짜간 차를 구해야 할 때 --> pd.to_datetime() .dt.days, .dt.month, .dt.day_name() 등을 활용해 추출 가능 |

데이터 전처리&시각화
3강
| 2차원 데이터 생성 data = { 'A':[1,2,3], 'B': [4,5,6], 'C': [7,8,9] } df = pd.DataFrame(data) |
| A열 호출 df['A'] 열 인덱스 확인 df. columns 열 인덱스 변경1 df.columns = {'a', 'b', 'c'} 열 인덱스 변경2 df = df.rename(columns= {'a':'에이'}) 열 추가(리스트 형태나 계산식 등으로도 추가 가능) df['d'] = '9' df['D'] = (df['A'] + df['B']) * df['C'] * 2 열 삭제 del df['d'] |
| 데이터 불러오기(seaborn) data = pd.read_csv("tips_data.csv") data.head() 위에서부터 n행 데이터 data.info() 데이터 요약(null 값 확인가능) data.describe() 기초통게량 확인 df.isnull().sum() 결측치 확인 df.dropna() 결측치 제거 df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3']) 중복 데이터 확인 df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3']) 중복 데이터 제거 |
| IQR(Interquartile Range) 계산 Q1 = df['컬럼1'].quantile(0.25) Q3 = df['컬럼1'].quantile(0.75) IQR = Q3 - Q1 이상치 기준 설정 lower_bound = Q1 - 1.5 * IQR upper_bound = Q3 + 1.5 * IQR 이상치 제거 df[(df['컬럼1'] >= lower_bound) & (df['컬럼1'] <= upper_bound)] |
| 데이터 타입 확인 df['컬럼명'].dtype 데이터 타입 변경 df['column_name'].astype(int) +그 외 타입 float, str, bool, 'category', 'datetime64[ns]', complex, object 데이터 타입 변경 틀 DataFrame['column_name'] = DataFrame['column_name'].astype(new_dtype) |
| iloc은 정수 기반의 인덱스(숫자기반) loc은 레이블 기반의 인덱스(이름기반) df.iloc[0:4:2] df 데이터에서 인덱스번호 0부터 4-1까지 2간격으로 출력 df.loc[0:4:2] df 데이터에서 라벨명 0부터 4까지 2간격으로 출력 행/열 인덱스가 존재하는 데이터는 df.iloc [a:b, c:d] 등으로도 가능 데이터 호출시 df[['A','C']] 등으로 컬럼명을 리스트로 묶어야 함 *늘 명심할 것. 슬라이싱 [a,b]에선 기본적으로 b는 포함되지 않음.(단, loc는 예외) |
| 불리언 인덱싱 df[df['A'] == 'B'] A열 데이터가 B인 경우만 호출 &, | 으로 and, or 조건 추가 가능 df.loc[df['A'] >= B, 'C'] 'A' 열에서 B 이상인 경우의 'C' 열만 선택 df['A'].isin(['B']) A열 안에 'B'가 있는지 T/F로 반환 df.isin({'A': [1, 3], 'B': ['apple', 'orange']}) 여러 열에 적용 가능 |
| 데이터 병합 concat pd.concat([df1,df2,df3],axis = 0).reset_index(drop=True) axis = 0 세로로 병합 axis = 1 가로로 병합 병합할 때, 값이 없으면 NaN 값 발생 merge pd.merge(df1, df2, on='key',how = 'inner' ) key 값을 기준으로 join inner/outer/left/right 4가지 |
| 데이터 집계 df.groupby('카테고리') 카테고리 기준으로 그룹화 명령 .sum(), .count(), .max(), .min() 등을 groupby 뒤에 붙혀서 계산 grouped_multiple = df.groupby(['Category', 'SubCategory']).agg({'Value1': ['mean', 'sum'], 'Value2': 'sum'}) 두가지 카테고리로, 값마다 집계를 다르게. 피벗테이블 pivot = df.pivot_table(index='Date', columns='Category', values=['Value1', 'Value2'], aggfunc={'Value1': 'mean', 'Value2': 'sum'}) 기본틀 pivot.plot(kind='line') 피벗테이블로 시각화시. plt.show() |
| 데이터 정렬 sorted_by_score = df.sort_values('A',ascending=Ture/False) 컬럼 기준 sorted_by_index = df.sort_index(ascending=True/False) 인덱스 기준 |
3. 학습하며 겪었던 문제점& 에러 + 회고

3-1 문제점& 에러: X
3-2 회고: 2차원 데이터 쪽은 직접 몇번 해보면 감을 잡을 듯 하다.
4. 내일 학습할 것은 무엇인지(기본적인 AI 진단퀴즈, 코드카타, TIL 제외)
- 화요일(2일): 강의(전처리/시각화 4강), 개인 과제 수행

'[내일배움캠프 QAQC 부트캠프] > TIL' 카테고리의 다른 글
| [내일배움캠프 QAQC 부트캠프]종합공부세트(17일차, 260604) (3) | 2026.06.04 |
|---|---|
| [내일배움캠프 QAQC 부트캠프]VS Code와 시각화(16일차, 260602) (0) | 2026.06.02 |
| [내일배움캠프 QAQC 부트캠프]VS Code와 데이터(14일차, 260529) (0) | 2026.05.29 |
| [내일배움캠프 QAQC 부트캠프]VS Code 맛보기(13일차, 260528) (0) | 2026.05.28 |
| [내일배움캠프 QAQC 부트캠프]컨디션 난조(12일차, 260527) (0) | 2026.05.27 |
