본문 바로가기
카테고리 없음

(10/1일) 요약 통계량·상관분석·Plotly EDA 실습

by proprocess-manager 2026. 10. 1.
반응형

2026년 10월 1일 | Pandas 데이터 탐색부터 시각화까지

오늘은 Pandas를 활용한 데이터 탐색과 요약 통계량 분석, 평균·중앙값·표준편차·데이터 개수 확인, 상관분석을 학습했다. 이어서 Plotly를 이용해 데이터를 그래프로 표현하는 탐색적 데이터 분석(EDA) 실습도 진행했다.

지난 수업에서 DataFrame의 인덱싱과 필터링을 배웠다면, 이번에는 데이터의 전체적인 특성을 숫자로 파악하고 변수 간 관계를 분석한 뒤 시각화하는 방법을 익혔다.

1. 데이터 탐색이란?

데이터 분석을 시작할 때 가장 먼저 해야 할 일은 데이터를 자세히 살펴보는 것이다. 데이터가 어떤 컬럼으로 구성되어 있는지, 각 항목의 값은 어느 정도인지, 결측치가 있는지 등을 파악해야 정확한 분석 방향을 정할 수 있다.

이처럼 데이터를 여러 관점에서 살펴보고 특징과 패턴을 파악하는 과정을 데이터 탐색이라고 한다. 이번 수업에서는 Pandas의 요약 통계량과 다양한 통계 함수를 사용해 데이터를 탐색하는 방법을 학습했다.

핵심 개념
데이터 탐색은 분석에 앞서 데이터의 구조와 분포, 특성을 파악하는 과정이다. 숫자로 된 요약 통계량을 확인하면 데이터의 전반적인 상태를 빠르게 이해할 수 있다.

2. 데이터 불러오기와 요약 통계량

Pandas의 DataFrame을 이용하면 데이터를 불러온 후 다양한 통계 정보를 간단한 명령어로 확인할 수 있다. 가장 먼저 사용하는 함수 중 하나가 describe()이다.

요약 통계량 확인하기

# Pandas 라이브러리 불러오기 import pandas as pd # CSV 파일 불러오기 df = pd.read_csv('data.csv') # 요약 통계량 확인 df.describe()

describe()는 숫자형 컬럼을 대상으로 데이터 개수, 평균, 표준편차, 최소값, 사분위수, 최대값 등을 한 번에 보여준다.

통계 항목의미
count결측치가 아닌 데이터의 개수
mean산술평균
std표준편차, 데이터가 평균에서 얼마나 퍼져 있는지 나타내는 값
min최소값
25%제1사분위수
50%중앙값, 제2사분위수
75%제3사분위수
max최대값

특정 통계량 선택하기

요약 통계량 전체를 확인하는 것뿐만 아니라, 특정 통계 항목과 컬럼만 선택해서 조회할 수도 있다. 이때 loc를 사용하면 행 이름과 컬럼 이름으로 원하는 값을 가져올 수 있다.

# 요약 통계량 생성 df_summary = df.describe() # Cost 컬럼의 중앙값(50%) 확인 df_summary.loc['50%', 'Cost'] # Cost 컬럼의 평균 확인 df_summary.loc['mean', 'Cost'] # Cost 컬럼의 표준편차 확인 df_summary.loc['std', 'Cost'] # Cost 컬럼의 최소값과 최대값 df_summary.loc['min', 'Cost'] df_summary.loc['max', 'Cost']
학습 포인트
df.describe()는 여러 통계량을 한 번에 보여주고, df_summary.loc['mean', 'Cost']처럼 작성하면 원하는 통계 항목과 컬럼의 값 하나를 선택할 수 있다.
광고

3. 평균·중앙값·표준편차·데이터 개수

요약 통계량을 확인하는 것 외에도 Pandas에서는 개별 함수를 사용해 필요한 통계값을 직접 계산할 수 있다. 각 함수의 의미와 사용법을 익혀두면 데이터 분석 과정에서 편리하게 활용할 수 있다.

① 평균(mean)

평균은 모든 데이터 값을 더한 후 데이터의 개수로 나눈 값이다. 데이터의 전반적인 수준을 파악할 때 사용한다.

# Cost 컬럼의 평균 df['Cost'].mean() # Revenue 컬럼의 평균 df['Revenue'].mean()

② 중앙값(median, quantile)

중앙값은 데이터를 크기순으로 정렬했을 때 가운데 위치하는 값이다. 극단적으로 크거나 작은 값의 영향을 평균보다 덜 받기 때문에 데이터의 중심을 파악할 때 유용하다.

# Cost 컬럼의 중앙값 df['Cost'].median() # 분위수 0.5를 이용한 중앙값 df['Cost'].quantile(q=0.5) # describe() 결과에서 50% 행 조회 df.describe().loc['50%', 'Cost']

quantile(q=0.5)는 50% 분위수를 의미하며, 일반적인 숫자형 데이터에서는 중앙값과 같은 값을 반환한다.

③ 표준편차(std)

표준편차는 데이터가 평균을 중심으로 얼마나 흩어져 있는지를 나타내는 통계량이다. 표준편차가 크면 데이터의 변동성이 상대적으로 크고, 작으면 평균 주변에 값들이 모여 있는 경향이 있다.

# Cost 컬럼의 표준편차 df['Cost'].std() # 요약 통계량에서 표준편차 확인 df.describe().loc['std', 'Cost']

④ 데이터의 개수(count, len)

데이터의 개수를 확인할 때는 count()와 len()을 사용할 수 있다. 다만 두 함수는 결측치를 처리하는 방식이 다르므로 구분해서 사용해야 한다.

# Cost 컬럼의 결측치가 아닌 값의 개수 df['Cost'].count() # DataFrame의 전체 행 개수 len(df) # Cost 컬럼의 전체 행 개수(결측치 포함) len(df['Cost'])
count()와 len()의 차이
count()는 결측치(NaN)를 제외하고 개수를 계산한다. 반면 len()은 결측치 여부와 관계없이 행 또는 요소의 전체 개수를 반환한다. 따라서 데이터의 실제 유효값 개수를 확인할 때는 count()를 사용하는 것이 적절하다.

4. 상관분석(Correlation Analysis)

상관분석은 두 변수 사이에 어떤 관계가 있는지 살펴보는 분석 방법이다. 예를 들어 광고비가 증가할 때 매출도 증가하는 경향이 있는지 확인할 때 활용할 수 있다.

Pandas의 corr() 함수를 이용하면 숫자형 컬럼 간 상관계수를 계산할 수 있다. 일반적으로 상관계수는 -1에서 1 사이의 값을 가진다.

상관계수 범위일반적인 해석
1에 가까움강한 양의 상관관계
0에 가까움선형 상관관계가 약하거나 거의 없음
-1에 가까움강한 음의 상관관계

① 숫자형 컬럼 전체의 상관분석

# 숫자형 컬럼 간 상관계수 계산 df_corr = df.corr(numeric_only=True) # 상관계수 행렬 출력 df_corr

numeric_only=True는 숫자형 데이터만 사용해 상관계수를 계산하도록 지정한다. 문자형 컬럼이 포함된 DataFrame에서도 숫자형 컬럼을 대상으로 분석할 수 있다.

② 특정 두 컬럼의 상관계수 확인

# 상관계수 행렬에서 두 컬럼의 관계 확인 df_corr.loc['Revenue', 'Cost'] # 두 컬럼만 선택해 상관분석 df[['Revenue', 'Cost']].corr()

첫 번째 방법은 전체 상관계수 행렬에서 원하는 두 컬럼의 교차 위치 값을 가져오는 방식이다. 두 번째 방법은 관심 있는 두 컬럼만 선택한 후 상관계수 행렬을 계산하는 방식이다.

주의할 점
상관관계가 높다고 해서 한 변수가 다른 변수의 원인이라고 단정할 수는 없다. 상관분석은 변수 사이의 통계적 관계를 보여주는 것이며, 인과관계를 입증하려면 별도의 분석과 근거가 필요하다.

5. 탐색적 데이터 분석(EDA)이란?

EDA(Exploratory Data Analysis)는 탐색적 데이터 분석을 의미한다. 데이터를 본격적으로 모델링하거나 결론을 도출하기 전에 데이터의 구조, 분포, 이상치, 변수 간 관계 등을 다양한 방법으로 살펴보는 과정이다.

이번 수업에서는 Pandas로 데이터를 탐색하고 Plotly Express를 이용해 그래프로 시각화하는 방법을 학습했다.

실습에 필요한 라이브러리

# 데이터 분석 라이브러리 import pandas as pd # Plotly Express 시각화 라이브러리 import plotly.express as px # 경고 메시지 관리 import warnings warnings.filterwarnings('ignore')

Pandas는 데이터를 불러오고 정리하며 통계량을 계산하는 데 사용한다. Plotly Express는 데이터를 다양한 그래프로 표현할 때 활용한다. warnings.filterwarnings('ignore')는 경고 메시지를 숨기는 설정으로, 오류까지 무시하는 것은 아니므로 주의해야 한다.

6. Tips 데이터 불러오기와 DataFrame 생성

이번 실습에서는 식당에서 받은 팁 데이터를 담고 있는 Tips 데이터셋을 사용한다. 이 데이터에는 식사 금액, 팁, 성별, 흡연 여부, 요일, 식사 시간대, 동반 인원 등의 정보가 포함되어 있다.

Plotly Express에서 제공하는 내장 데이터셋을 이용하면 별도의 파일 다운로드 없이 실습할 수 있다.

# Plotly Express의 Tips 데이터 불러오기 df = px.data.tips() # 데이터 상위 5개 행 확인 df.head() # 데이터 구조와 자료형 확인 df.info() # 요약 통계량 확인 df.describe()
데이터 탐색 순서
데이터를 불러온 다음에는 head()로 실제 데이터의 모양을 확인하고, info()로 컬럼과 자료형, 결측치 정보를 살펴본다. 이후 describe()를 통해 숫자형 데이터의 통계적 특성을 확인하면 분석의 기초를 마련할 수 있다.

7. 데이터 정렬하기(sort_values)

데이터를 특정 컬럼을 기준으로 정렬하면 값의 크기에 따른 패턴을 살펴보기 쉽다. Pandas의 sort_values() 함수는 지정한 컬럼을 기준으로 데이터를 정렬한다.

# total_bill 컬럼을 기준으로 오름차순 정렬 df_sorted = df.sort_values(by='total_bill') # 정렬된 데이터 확인 df_sorted.head()

기본 설정은 오름차순이다. 내림차순으로 정렬하려면 ascending=False를 추가하면 된다.

# total_bill 기준 내림차순 정렬 df_sorted_desc = df.sort_values( by='total_bill', ascending=False )

8. Plotly Express로 그래프 만들기

데이터를 숫자로만 확인하는 것보다 그래프로 표현하면 변수 간 관계와 데이터의 분포를 직관적으로 파악할 수 있다. Plotly Express는 비교적 간단한 코드로 인터랙티브 그래프를 생성할 수 있는 파이썬 시각화 도구다.

① 선 그래프(line chart) 생성

수업에서 학습한 선 그래프의 기본 구조는 px.line() 함수에 DataFrame과 x축, y축, 색상 구분 컬럼을 지정하는 방식이다.

# total_bill 기준으로 정렬된 데이터를 이용한 선 그래프 fig1 = px.line( data_frame=df_sorted, x='total_bill', y='tip', color='time', title='식사 금액과 팁의 관계' ) # 그래프 출력 fig1.show()

위 예시에서는 식사 금액을 x축, 팁을 y축으로 지정하고 식사 시간대(time)를 색상으로 구분했다. 데이터가 정렬된 순서대로 선이 연결되므로, 그래프를 해석할 때 x축이 시간 순서가 아니라 식사 금액이라는 점을 유의해야 한다.

② 그래프를 HTML 파일로 저장하기

Plotly 그래프는 브라우저에서 상호작용할 수 있는 HTML 파일로 저장할 수 있다. 저장된 파일을 웹 브라우저에서 열면 그래프를 확대하거나 마우스를 올려 상세 정보를 확인할 수 있다.

# 그래프를 HTML 파일로 저장 fig1.write_html('line1.html')
실습 코드에서 기억할 부분
수업 노트의 fig1.write.html()은 올바른 함수 호출 방식이 아니다. Plotly에서는 fig1.write_html('line1.html')처럼 밑줄을 포함해 작성해야 한다.

③ 선 그래프와 산점도의 차이

선 그래프는 데이터의 순서나 연속적인 변화 양상을 보여줄 때 유용하다. 반면 산점도는 두 숫자형 변수 사이의 분포와 관계를 살펴보는 데 적합하다.

# 식사 금액과 팁의 관계를 산점도로 표현 fig2 = px.scatter( data_frame=df, x='total_bill', y='tip', color='time', title='식사 금액과 팁의 산점도' ) fig2.show()

Tips 데이터는 시간에 따라 연속적으로 기록된 시계열 데이터가 아니라 개별 식사 기록이다. 따라서 식사 금액과 팁의 관계를 살펴볼 때는 산점도를 사용하는 것이 일반적으로 더 적절하다. 선 그래프 실습은 그래프 생성 문법을 익히는 예제로 이해하면 좋다.

광고

9. 식사 시간대별 데이터 개수 확인하기

Tips 데이터의 time 컬럼에는 식사 시간대 정보가 들어 있다. value_counts()를 사용하면 각 시간대에 해당하는 데이터가 몇 건씩 있는지 확인할 수 있다.

# 식사 시간대별 데이터 개수 확인 df['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를 사용해 그래프로 시각화하는 과정을 경험했다. 데이터 분석은 단순히 코드를 실행하는 것이 아니라, 결과를 올바르게 해석하고 실제 문제에 연결하는 능력이 중요하다는 점을 다시 한번 느꼈다.

오늘의 핵심 학습 문장
데이터 분석은 데이터를 불러오는 것에서 끝나지 않는다. 요약 통계량으로 데이터의 특성을 파악하고, 상관분석으로 변수 간 관계를 살펴보며, 시각화를 통해 결과를 직관적으로 이해하는 과정이 중요하다.

다음 학습 예정

파이썬 데이터 분석 학습일지 #2
작성일: 2026년 10월 1일

반응형