2026년 10월 1일 | Pandas 데이터 탐색부터 시각화까지
지난 수업에서 DataFrame의 인덱싱과 필터링을 배웠다면, 이번에는 데이터의 전체적인 특성을 숫자로 파악하고 변수 간 관계를 분석한 뒤 시각화하는 방법을 익혔다.
1. 데이터 탐색이란?
데이터 분석을 시작할 때 가장 먼저 해야 할 일은 데이터를 자세히 살펴보는 것이다. 데이터가 어떤 컬럼으로 구성되어 있는지, 각 항목의 값은 어느 정도인지, 결측치가 있는지 등을 파악해야 정확한 분석 방향을 정할 수 있다.
이처럼 데이터를 여러 관점에서 살펴보고 특징과 패턴을 파악하는 과정을 데이터 탐색이라고 한다. 이번 수업에서는 Pandas의 요약 통계량과 다양한 통계 함수를 사용해 데이터를 탐색하는 방법을 학습했다.
데이터 탐색은 분석에 앞서 데이터의 구조와 분포, 특성을 파악하는 과정이다. 숫자로 된 요약 통계량을 확인하면 데이터의 전반적인 상태를 빠르게 이해할 수 있다.
2. 데이터 불러오기와 요약 통계량
Pandas의 DataFrame을 이용하면 데이터를 불러온 후 다양한 통계 정보를 간단한 명령어로 확인할 수 있다. 가장 먼저 사용하는 함수 중 하나가 describe()이다.
요약 통계량 확인하기
describe()는 숫자형 컬럼을 대상으로 데이터 개수, 평균, 표준편차, 최소값, 사분위수, 최대값 등을 한 번에 보여준다.
| 통계 항목 | 의미 |
|---|---|
| count | 결측치가 아닌 데이터의 개수 |
| mean | 산술평균 |
| std | 표준편차, 데이터가 평균에서 얼마나 퍼져 있는지 나타내는 값 |
| min | 최소값 |
| 25% | 제1사분위수 |
| 50% | 중앙값, 제2사분위수 |
| 75% | 제3사분위수 |
| max | 최대값 |
특정 통계량 선택하기
요약 통계량 전체를 확인하는 것뿐만 아니라, 특정 통계 항목과 컬럼만 선택해서 조회할 수도 있다. 이때 loc를 사용하면 행 이름과 컬럼 이름으로 원하는 값을 가져올 수 있다.
df.describe()는 여러 통계량을 한 번에 보여주고, df_summary.loc['mean', 'Cost']처럼 작성하면 원하는 통계 항목과 컬럼의 값 하나를 선택할 수 있다.
3. 평균·중앙값·표준편차·데이터 개수
요약 통계량을 확인하는 것 외에도 Pandas에서는 개별 함수를 사용해 필요한 통계값을 직접 계산할 수 있다. 각 함수의 의미와 사용법을 익혀두면 데이터 분석 과정에서 편리하게 활용할 수 있다.
① 평균(mean)
평균은 모든 데이터 값을 더한 후 데이터의 개수로 나눈 값이다. 데이터의 전반적인 수준을 파악할 때 사용한다.
② 중앙값(median, quantile)
중앙값은 데이터를 크기순으로 정렬했을 때 가운데 위치하는 값이다. 극단적으로 크거나 작은 값의 영향을 평균보다 덜 받기 때문에 데이터의 중심을 파악할 때 유용하다.
quantile(q=0.5)는 50% 분위수를 의미하며, 일반적인 숫자형 데이터에서는 중앙값과 같은 값을 반환한다.
③ 표준편차(std)
표준편차는 데이터가 평균을 중심으로 얼마나 흩어져 있는지를 나타내는 통계량이다. 표준편차가 크면 데이터의 변동성이 상대적으로 크고, 작으면 평균 주변에 값들이 모여 있는 경향이 있다.
④ 데이터의 개수(count, len)
데이터의 개수를 확인할 때는 count()와 len()을 사용할 수 있다. 다만 두 함수는 결측치를 처리하는 방식이 다르므로 구분해서 사용해야 한다.
count()는 결측치(NaN)를 제외하고 개수를 계산한다. 반면 len()은 결측치 여부와 관계없이 행 또는 요소의 전체 개수를 반환한다. 따라서 데이터의 실제 유효값 개수를 확인할 때는 count()를 사용하는 것이 적절하다.
4. 상관분석(Correlation Analysis)
상관분석은 두 변수 사이에 어떤 관계가 있는지 살펴보는 분석 방법이다. 예를 들어 광고비가 증가할 때 매출도 증가하는 경향이 있는지 확인할 때 활용할 수 있다.
Pandas의 corr() 함수를 이용하면 숫자형 컬럼 간 상관계수를 계산할 수 있다. 일반적으로 상관계수는 -1에서 1 사이의 값을 가진다.
| 상관계수 범위 | 일반적인 해석 |
|---|---|
| 1에 가까움 | 강한 양의 상관관계 |
| 0에 가까움 | 선형 상관관계가 약하거나 거의 없음 |
| -1에 가까움 | 강한 음의 상관관계 |
① 숫자형 컬럼 전체의 상관분석
numeric_only=True는 숫자형 데이터만 사용해 상관계수를 계산하도록 지정한다. 문자형 컬럼이 포함된 DataFrame에서도 숫자형 컬럼을 대상으로 분석할 수 있다.
② 특정 두 컬럼의 상관계수 확인
첫 번째 방법은 전체 상관계수 행렬에서 원하는 두 컬럼의 교차 위치 값을 가져오는 방식이다. 두 번째 방법은 관심 있는 두 컬럼만 선택한 후 상관계수 행렬을 계산하는 방식이다.
상관관계가 높다고 해서 한 변수가 다른 변수의 원인이라고 단정할 수는 없다. 상관분석은 변수 사이의 통계적 관계를 보여주는 것이며, 인과관계를 입증하려면 별도의 분석과 근거가 필요하다.
5. 탐색적 데이터 분석(EDA)이란?
EDA(Exploratory Data Analysis)는 탐색적 데이터 분석을 의미한다. 데이터를 본격적으로 모델링하거나 결론을 도출하기 전에 데이터의 구조, 분포, 이상치, 변수 간 관계 등을 다양한 방법으로 살펴보는 과정이다.
이번 수업에서는 Pandas로 데이터를 탐색하고 Plotly Express를 이용해 그래프로 시각화하는 방법을 학습했다.
실습에 필요한 라이브러리
Pandas는 데이터를 불러오고 정리하며 통계량을 계산하는 데 사용한다. Plotly Express는 데이터를 다양한 그래프로 표현할 때 활용한다. warnings.filterwarnings('ignore')는 경고 메시지를 숨기는 설정으로, 오류까지 무시하는 것은 아니므로 주의해야 한다.
6. Tips 데이터 불러오기와 DataFrame 생성
이번 실습에서는 식당에서 받은 팁 데이터를 담고 있는 Tips 데이터셋을 사용한다. 이 데이터에는 식사 금액, 팁, 성별, 흡연 여부, 요일, 식사 시간대, 동반 인원 등의 정보가 포함되어 있다.
Plotly Express에서 제공하는 내장 데이터셋을 이용하면 별도의 파일 다운로드 없이 실습할 수 있다.
데이터를 불러온 다음에는
head()로 실제 데이터의 모양을 확인하고, info()로 컬럼과 자료형, 결측치 정보를 살펴본다. 이후 describe()를 통해 숫자형 데이터의 통계적 특성을 확인하면 분석의 기초를 마련할 수 있다.
7. 데이터 정렬하기(sort_values)
데이터를 특정 컬럼을 기준으로 정렬하면 값의 크기에 따른 패턴을 살펴보기 쉽다. Pandas의 sort_values() 함수는 지정한 컬럼을 기준으로 데이터를 정렬한다.
기본 설정은 오름차순이다. 내림차순으로 정렬하려면 ascending=False를 추가하면 된다.
8. Plotly Express로 그래프 만들기
데이터를 숫자로만 확인하는 것보다 그래프로 표현하면 변수 간 관계와 데이터의 분포를 직관적으로 파악할 수 있다. Plotly Express는 비교적 간단한 코드로 인터랙티브 그래프를 생성할 수 있는 파이썬 시각화 도구다.
① 선 그래프(line chart) 생성
수업에서 학습한 선 그래프의 기본 구조는 px.line() 함수에 DataFrame과 x축, y축, 색상 구분 컬럼을 지정하는 방식이다.
위 예시에서는 식사 금액을 x축, 팁을 y축으로 지정하고 식사 시간대(time)를 색상으로 구분했다. 데이터가 정렬된 순서대로 선이 연결되므로, 그래프를 해석할 때 x축이 시간 순서가 아니라 식사 금액이라는 점을 유의해야 한다.
② 그래프를 HTML 파일로 저장하기
Plotly 그래프는 브라우저에서 상호작용할 수 있는 HTML 파일로 저장할 수 있다. 저장된 파일을 웹 브라우저에서 열면 그래프를 확대하거나 마우스를 올려 상세 정보를 확인할 수 있다.
수업 노트의
fig1.write.html()은 올바른 함수 호출 방식이 아니다. Plotly에서는 fig1.write_html('line1.html')처럼 밑줄을 포함해 작성해야 한다.
③ 선 그래프와 산점도의 차이
선 그래프는 데이터의 순서나 연속적인 변화 양상을 보여줄 때 유용하다. 반면 산점도는 두 숫자형 변수 사이의 분포와 관계를 살펴보는 데 적합하다.
Tips 데이터는 시간에 따라 연속적으로 기록된 시계열 데이터가 아니라 개별 식사 기록이다. 따라서 식사 금액과 팁의 관계를 살펴볼 때는 산점도를 사용하는 것이 일반적으로 더 적절하다. 선 그래프 실습은 그래프 생성 문법을 익히는 예제로 이해하면 좋다.
9. 식사 시간대별 데이터 개수 확인하기
Tips 데이터의 time 컬럼에는 식사 시간대 정보가 들어 있다. value_counts()를 사용하면 각 시간대에 해당하는 데이터가 몇 건씩 있는지 확인할 수 있다.
이 함수는 범주형 데이터의 빈도수를 집계할 때 유용하다. 기본적으로 빈도수가 높은 값부터 내림차순으로 정렬해 결과를 보여준다.
10. 오늘 배운 핵심 함수 정리
| 기능 | 함수 또는 코드 | 활용 목적 |
|---|---|---|
| 요약 통계량 | df.describe() | 숫자형 컬럼의 통계량 확인 |
| 평균 | df['Cost'].mean() | 산술평균 계산 |
| 중앙값 | df['Cost'].median() | 중앙값 계산 |
| 분위수 | df['Cost'].quantile(q=0.5) | 지정한 분위수 계산 |
| 표준편차 | df['Cost'].std() | 데이터의 산포도 확인 |
| 유효 데이터 개수 | df['Cost'].count() | 결측치를 제외한 개수 |
| 행 개수 | len(df) | DataFrame 전체 행 수 |
| 상관분석 | df.corr(numeric_only=True) | 숫자형 변수 간 상관계수 계산 |
| 특정 값 선택 | df_corr.loc['Revenue','Cost'] | 상관계수 행렬에서 값 조회 |
| 데이터 정렬 | df.sort_values(by='total_bill') | 지정한 컬럼 기준 정렬 |
| 빈도수 분석 | df['time'].value_counts() | 범주별 데이터 개수 확인 |
| 선 그래프 | px.line() | 순서에 따른 값의 변화 시각화 |
| 산점도 | px.scatter() | 두 변수의 관계와 분포 시각화 |
| 그래프 출력 | fig1.show() | 그래프 화면에 표시 |
| HTML 저장 | fig1.write_html('line1.html') | 인터랙티브 그래프 파일 저장 |
11. 오늘의 학습 회고
오늘은 데이터 분석에서 반드시 알아야 할 기초 통계량과 상관분석, 시각화 방법을 학습했다. 지난 수업에서 배운 DataFrame 인덱싱과 필터링이 원하는 데이터를 선택하는 기술이었다면, 이번 수업은 선택한 데이터의 특성을 숫자와 그래프로 이해하는 과정이었다.
특히 describe()를 통해 데이터의 전반적인 통계량을 확인하고, mean(), median(), std(), count() 등 개별 함수를 사용해 필요한 정보를 구하는 방법을 익혔다.
또한 corr()를 이용한 상관분석으로 변수 간 관계를 수치로 확인하고, Plotly Express를 사용해 그래프로 시각화하는 과정을 경험했다. 데이터 분석은 단순히 코드를 실행하는 것이 아니라, 결과를 올바르게 해석하고 실제 문제에 연결하는 능력이 중요하다는 점을 다시 한번 느꼈다.
데이터 분석은 데이터를 불러오는 것에서 끝나지 않는다. 요약 통계량으로 데이터의 특성을 파악하고, 상관분석으로 변수 간 관계를 살펴보며, 시각화를 통해 결과를 직관적으로 이해하는 과정이 중요하다.
다음 학습 예정
- 다중 조건 필터링과 데이터 선택
- groupby를 이용한 그룹별 집계
- sort_values를 이용한 정렬과 결과 비교
- 결측치와 이상치 탐색 및 처리
- 실제 공공데이터를 활용한 EDA 실습
파이썬 데이터 분석 학습일지 #2
작성일: 2026년 10월 1일