[ 데이터 전처리 & 시각화 ] ( 4주차 강의 )
- 데이터를 시각화한 예시 ( 바다거북 , 나폴레옹 , 나이팅게일 )
- Matplotlib 알아보기
- 그래프 그리기 & 합치기
- 실시간 세션 실습 정리
[ Part 01 ] - 데이터를 시각화 한 예시
- 나이팅 게일 - 사망원인 분석
- 시각화 : 로즈 다이어그램(원형 그래프 변형)
- 핵심 인사이트
: 전투보다 감염병으로 많이 죽음
: 위생 개선 필요성 강조



2. 나폴레옹 러시아 원정 - 미나르 지도
1. 인사이트
: 군대 규모 , 이동 경로 , 온도 변화 , 퇴각 과정
2. 핵심 내용
: 추위 + 거리 + 보급 문제로 군대 붕괴

3 . 존 스노우 - 콜레라 지도
1. 핵심 인사이트
: 특정 우물 주변에서 집중 발생
2. 결과
: 오염된 물이 원인 - > 펌프 제거

[ Part 02 ] - Matplotlib 알아보기
- Matplotlib이란?
- 파이썬 시각화를 위한 라이브러리 중 하나이다.
- 2D 그래픽을 생성하는데 주로 사용
- Matplotlib 선언하기
: import matplotlib.pyplot as plt
- Matplotlib 선언하기
[ Part 03 ] - 그래프 그리기
- .Plot()
- Pandas에서 plot() 메서드는 DataFrame객체에서 데이터를 시각화 하는데 사용된다.
- import pandas as pd
import matplotlib.pyplot as plt
# 샘플 데이터프레임 생성
data = {
'A': [1, 2, 3, 4, 5],
'B': [5, 4, 3, 2, 1]
}
df = pd.DataFrame(data)
# 선 그래프 그리기
df.plot(x='A', y='B')
plt.show()
- 그래프 스타일 정하기 ( color , linestyle , marker )
- color (색상)
: 문자열로 지정할 수 있으며 , 'blue' , 'green' ,'red','cyan' 등과 같은 색상 이름 또는 RGB값을 지정할 수 있다. - Linestyle (선 스타일)
: 선의 스타일은 '-'(실선) , '--'(대시선) , ':'(점선) , '-.'(점-대시선) 등으로 지정할 수 있다. - Marker (마커)
: 마커는 데이터 포인트를 나타내는 기호로 'o'(원) , '^'(삼각형) , 's'(사각형) , '+'(플러스) 등으로 지정할 수 있다.
- Plt.plot(x , y , color = " " , Linestyle == ' ' , Marker = ' ' )
- color (색상)
- 범례 추가하기 ( label , legend )
- label
: Plt.plot(x ,y ,color = ' ' , Linestyle == ' ' , Marker = ' ' , label = ' ' ) - legend()
:a.legend(['Data Series'])
- label
- 축 , 제목 입력하기 ( xlabel , ylabel , title )
- . set_xlabel( ' ' )
- . set_ylabel( ' ' )
- . set_title ( ' ' )
- 텍스트 추가 (text)
- a.text(x , y ," text " , fontsize = 숫자 )
< 총 다 합쳐서 데이터 시각화 하기 >

[ Part 04 ] - 데이터를 직접 시각화 해보기!

- line plot ( 선 그래프 )
: 선그래프는 연속적인 데이터의 추이를 보여줄 때 사용됩니다. - bar plot ( 막대 그래프 )
: 범주형 데이터 간의 비교를 나타낼 때 주로 사용 됩니다. - Histogram ( 히스토그램 )
: 연속형 데이터의 분포를 보여줄 때 사용됩니다. - Pie Chart ( 원 그래프 )
: 범주형 데이터의 상대적 비율을 시각화 하는데 사용된다. - Box Plot
: 연속형 데이터의 분포와 이상치를 시각화 하는데 주로 사용된다.


# 피어슨 상관계수란 ?
: 두 변수 간의 선형적인 관계를 측정하기 위한 통계적인 방법중 하나이다
주로 연속형 변수 들 간의 상관관계를 평가 하는데 사용된다.
# 피어슨 상관계수의 특징:
- 범위: -1에서 1 사이의 값을 가집니다.
- 양의 상관관계: 1에 가까울수록 강한 양의 선형관계를 나타냅니다.
- 음의 상관관계: -1에 가까울수록 강한 음의 선형관계를 나타냅니다.
- 무상관 관계: 0에 가까울수록 선형관계가 거의 없거나 약한 관계를 가집니다.
[ 실시간 세션 03/26(목) 실습 ]
1) 데이터 준비 및 시계열 변환 (datetime)
- tips 데이터에는 날짜가 없습니다. 실습을 위해 가상의 날짜(2024년 1월 1일부터)를 만들어 부여해 봅시다.
import Pandas as pd
import Seaborn as sns
import Matplotlib.pyplot as plt
df = sns.load_dataset('tips')
df. head()

㉮ 가상의 날짜 데이터 생성 ( 2024-01-01 부터 데이터 개수 만큼 날짜 생성 )
- HINT : pd.date_range()
dates = pd.date_range(start = "2024-01-01" , periods = len(df))
df['order_date'] = dates
# pd.date_range(start = " ' , end= " " , periods = " " )
㉯ 날짜가 제대로 들어갔는지 확인
1. df.dtypes
: 데이터 프레임 안 모든 데이터 타입 확인
2) 중복 데이터 제거하기 ( duplicated() )
df_dirty = pd.concat([df , df.iloc[ :5]])
print(f"중복 제거 전 : {len(df_dirty)}행")
print("중복된 행 개수 : " ,df_dirty.duplicated().sum())
df_clean = df_dirty.drop_duplicates()
print(f"중복 제거 후 : {len(df_clean)}행")
3) 날짜 정보 추출 및 정렬 ( dt accessor , sort_values )
㉮ 요일 , 월 정보를 추출해서 새로운 컬럼 만들기
df['month'] = df['order_date'].dt.month_name()
df['weekday'] = df['order_date'].dt.day_name()
㉯ 최신 날짜 순으로 정렬해보기 (내림차순)
df_sorted = df.sort_values(by = 'order_date' , ascending = False)
df_sorted.head()

4) 데이터 변환하기 ( map , apply )
㉮ [Map] 성별을 한글로 변환
gender_map = {'Female' : '여성' , 'Male' : '남성'}
df_sorted['성별'] = df_sorted['sex'].map(gender_map)
df_sorted.head()
㉯ [Apply] 팁 비율에 따라 고객 등급 분류 ( 팁이 총액의 20% 이상이면 "VIP" 아니면 "Normal" )
def classify_customer(row):
if row['tip'] / row['total_bill'] >= 0.2:
return "VIP"
else :
return "Normal"
df_sorted['고객등급'] = df_sorted.apply(classify_customer,axis=1)
df_sorted[['성별','total_bill','tip','고객등급']].head()
5) 데이터 합치기 1 ( merge )
㉮ 요일별 할인율 테이블 생성
discount_policy = pd.DataFrame({
'day': ['Thur', 'Fri', 'Sat', 'Sun'],
'discount_rate': [0.05, 0.0, 0.1, 0.15] #
})
discount_policy

㉯ merge로 병합
df_merged = pd.merge(df_sorted , discount_policy , on = 'day')
df_merged.head()
㉰ 할인이 적용된 값 계산
6) 데이터 합치기 2 ( concat )
㉮ vip룸 추가 데이터 생성
vip_data = pd.DataFrame({
'total_bill': [150.0, 200.0],
'tip': [20.0, 30.0],
'sex': ['Male', 'Female'],
'smoker': ['No', 'No'],
'day': ['Sat', 'Sun'],
'time': ['Dinner', 'Dinner'],
'size': [5, 6],
'order_date': pd.to_datetime(['2024-02-01', '2024-02-02'])
})
vip_data
㉯ concat으로 위 아래로 합치기
df_final = pd.concat([df_merged,vip_data],axis=0,ignore_index=True)
df_final.head()
7) 그룹 집계 ( groupby )
report = pd.groupby('day)[['total_bill' ,'tip']].agg(['mean','max'])
report
'내일배움캠프(QA,QC_5기)' 카테고리의 다른 글
| [내일배움캠프] QA/QC_5기 ( 17일차 ) (0) | 2026.03.31 |
|---|---|
| [내일배움캠프] QA/QC_5기 ( 16일차 ) (0) | 2026.03.30 |
| [내일배움캠프] QA/QC_5기 ( 14일차 ) (0) | 2026.03.26 |
| [내일배움캠프] QA/QC_5기 ( 13일차 ) (0) | 2026.03.25 |
| [내일배움캠프] QA/QC_5기 ( 12일차 ) (0) | 2026.03.24 |