데이터 분석 입문 주차

250331_Data_6기 TIL 30일차 - 통계학 기초 1주차, 기초 프로젝트 코드 분석

juneoh20 2025. 3. 31. 19:17

250331_Data_6기 TIL 30일차

 오늘부터 데이터 분석 입문 주차가 시작되었다. 그래서 팀도 재편성 되었다. 으으 팀 바뀔때마다 이 어색한 공기는 도저히 적응이 안된다ㅋㅋ얼른 친해져야겠다~

 오늘은 못들었던 파이썬 종합반 5주차를 마무리하고 통계학 기초 1주차를 듣고 복습, 저번주에 못한 기초 프로젝트 코드 분석을 메인으로 할 예정이다.

 

 


 

 

통계학 기초 1주차

 

 

1. 데이터 분석에 있어 통계가 중요한 이유

-> 데이터 기반의 의사결정을 내릴 수 있기 때문!

 

☑️ 데이터를 분석하고 이를 바탕으로 결정을 내릴 수 있다.

  • 데이터 분석에서 통계는 데이터를 이해하고 해석하는 데 중요한 역할을 한다.
  • 데이터를 요약하고 패턴을 발견할 수 있다.
  • 추론을 통해 결론을 도출하는 과정을 돕는다.
  • 즉, 데이터 기반의 의사결정을 내릴 수 있다.

실제 사용 예시)

  • 고객 만족도 설문조사 분석
  • 고객 유형별 세그먼트 상품 추천
  • 그 밖에도 다양한 상황에서 사용
    • 기업의 전략 수립
    • 마케팅을 진행하기 위해서
    • 신제품을 개발하기 위해서

 

 

2. 기술 통계와 추론 통계

 

1) 기술 통계

 

☑️ 데이터를 요약하고 설명하는 통계 방법.

  • 주로 평균, 중앙값, 분산, 표준편차 등을 사용
    • 즉 데이터를 특정 대표값으로 요약
  • 데이터에 대한 대략적인 특징을 간단하고 쉽게 알 수 있다.
  • 단, 데이터 중 예외(이상치)라는게 항상 존재할 수 있고 데이터의 모든 부분을 확인할 수 있는 것은 아니다.

용어 정리)

 

1. 분산

  • 분산은 데이터 값들이 평균으로부터 얼마나 떨어져 있는 지를 나타내는 척도로, 데이터의 흩어짐 정도를 측정하는 것
  • 분산이 크면 데이터가 넓게 퍼져 있고, 작으면 데이터가 평균에 가깝게 모여 있음을 의미한다.
  • 분산을 구하는 방법은 각 데이터 값에서 평균을 뺀 값을 제곱한 후, 이를 모두 더하고 데이터의 개수로 나누는 것이다.

2. 표준편차

  • 표준편차는 데이터 값들이 평균에서 얼마나 떨어져있는지를 나타내는 통계적 척도로, 분산의 제곱근을 취하여 계산
  • 표준편차는 데이터의 변동성을 측정하며, 값이 클수록 데이터가 평균으로부터 더 넓게 퍼져있음을 의미.

표준편차와 분산의 관계

  • 분산과 표준편차는 동일하게 데이터의 변동성을 측정하는 두 가지 주요 척도입니다.
  • 두 개념은 밀접하게 연관되어 있으며, 표준편차는 분산의 제곱근입니다.
  • 분산은 데이터 값과 평균의 차이를 제곱하여 평균을 낸 값이기 때문에 제곱 단위로 표현되지만, 표준편차는 다시 제곱근을 취하여 원래 데이터 값과 동일한 단위로 변환합니다.

 

2) 추론 통계

 

☑️ 표본 데이터를 통해 모집단의 특성을 추정하고 가설을 검정하는 통계 방법.

  • 주로 신뢰구간, 가설검정 등을 사용한다.
  • 즉, 데이터의 일부를 가지고 데이터 전체를 추정하는 것이 핵심이다.

용어 정리)

 

1. 신뢰구간 (Confidence Interval)

  • 신뢰구간은 모집단의 평균이 특정 범위 내에 있을 것이라는 확률을 나타낸다.
  • 주로 95% 신뢰구간 사용.

2. 가설검정 (Hypothesis Testing)

  • 가설 검정은 모집단에 대한 가설을 검증하기 위해 사용된다. 일반적으로 두 가지 가설이 있으며, 귀무가설(H0)은 검증하고자 하는 가설이 틀렸음을 나타내는 기본 가설이고, 대립가설(H1)은 그 반대 가설로 주장하는 바를 나타낸다. p-value를 통해 귀무가설을 기각할지 여부를 결정한다.

3. 실제 사용 예시

 

☑️ 기술통계

  • 회사의 매출 데이터를 요약하기 위해 평균 매출, 매출의 표준편차 등을 계산

☑️ 추론통계

  • 일부 고객의 설문조사를 통해 전체 고객의 만족도를 추정

 

 

3. 다양한 분석 방법

 

1) 위치 추정

 

☑️ 데이터의 중심을 확인하는 방법!

  • 평균, 중앙값이 대표적인 위치 추정 방법

2) 변이추정

 

☑️ 데이터들이 서로 얼마나 다른지 확인하는 방법!

  • 분산, 표준편차, 범위 등을 사용

3) 데이터 분포 탐색

 

☑️ 데이터의 값들이 어떻게 이루어져 있는지 확인하기

  • 히스토그램과 상자 그림(Box plot)은 데이터의 분포를 시각적으로 표현하는 대표적인 방법
  • ex) 시험 점수의 분포를 히스토그램과 상자 그림으로 표현

4) 이진 데이터와 범주 데이터 탐색

 

☑️ 데이터들이 서로 얼마나 다른지 확인하는 방법!

  • 최빈값(개수가 제일 많은 값)을 주로 사용
  • 파이그림과 막대 그래프는 이진 데이터와 범주 데이터의 분포를 표현하는 대표적 방법

5) 상관관계

 

☑️ 데이터들끼리 서로 관련이 있는지 확인하는 방법!

  • 상관계수는 두 변수 간의 관계를 측정하는 방법
  • 상관계수를 계산해서 -1이나 +1에 가까워지면 강력한 상관관계를 가진다.
  • 0에 가까울수록 상관관계가 없다.

6) 인과관계와 상관관계의 차이

 

☑️ 인과관계는 상관관계와는 다르게 원인, 결과가 분명해야 함!

  • 상관관계는 두 변수 간의 관계를 나타내며, 인과관계는 한 변수가 다른 변수에 미치는 영향을 나타냄.
  • ex) 아이스크림 판매량과 익사 사고 수 간의 상관관계는 높지만 인과관계를 갖지는 않는다.

7) 두 개 이상의 변수 탐색

 

☑️ 여러 데이터들끼리 서로 관련이 있는지 확인

  • 다변량 분석은 여러 변수 간의 관계를 분석하는 방법이다.
  • ex) 여러 마케팅 채널의 광고비와 매출 간의 관계 분석 주로 히트맵이 활용됨

 


 

 

기초 프로젝트 코드 분석

 

 

 오늘 분석할 코드는 우리 프로젝트의 핵심 중 하나였던 카테고리별 월별 매출 증감률이다.

크게 세가지로 나눠 코드 작성이 이뤄졌다. 

1. 월별 매출 계산 코드

2. 매출을 증감률로 변환하는 코드

3. 월별&카테고리별 증감률 시각화

 그럼 이제 자세히 알아보자.

 

1. 카테고리별 월별 매출 계산 코드

# 월별 매출 계산
monthly_revenue = (
    merge_df
    .groupby(["index_group_name", "order_month"])["price"]
    .sum()
    .reset_index()
    .rename(columns = {
        'index_group_name': '카테고리',
        'order_month': '월',
        'price': '매출'})
    .round(2)
)

 

해당 코드는 카테고리별 월별 매출 계산을 위해 작성된 코드인데 차근차근 설명하자면

merge_df 데이터프레임에서 각 상품 카테고리별(index_group_name)로 월별(order_month) 총 매출(price)

 

1. 데이터 그룹화(groupby)

merge_df.groupby(["index_group_name", "order_month"])

 

2. 매출 합계 계산

["price"].sum()

각 그룹(카테고리-월)에서 가격 컬럼(price)의 합계를 계산한다.

 

3. 데이터프레임 변환 (reset_index)

.reset_index()

 

  • groupby 결과는 기본적으로 멀티 인덱스 형태이기 때문에, 이를 보기 좋게 표 형태로 전환
  • 새로운 데이터프레임 형태로 만들어 주는 과정

4. 컬럼명 변경 (rename)

.rename(columns={
    'index_group_name': '카테고리',
    'order_month': '월',
    'price': '매출'
})

컬럼 이름을 한글로 바꿔주는 단계 솔직히 안해도 된다고 생각한다

 

5. 소수점 반올림 처리

.round(2)

매출의 소수점 아래 숫자를 2자리까지 표시하도록 반올림

 

2. 매출을 증감률로 변환

monthly_revenue["증감률"] = (
    monthly_revenue
    .groupby("카테고리")["매출"]
    .pct_change() * 100
)
monthly_revenue["증감률"] = monthly_revenue["증감률"].round(2)

 

 

1. 그룹화 (groupby)

monthly_revenue.groupby("카테고리")

monthly_revenue 데이터를 카테고리별로 다시 한번 그룹화하여 각 카테고리별로만 증감률을 계산할 수 있게 함.

 

2. 증감률 계산 (pct_change)

["매출"].pct_change() * 100

pct_change()는 현재 값과 이전 값 간의 변화율(증감률)을 계산하는 함수



3. 소수점 정리 (round(2))

.round(2)

계산된 증감률을 소수점 둘째 자리까지 반올림

 

3. 월별&카테고리별 증감률 시각화

#월별&카테고리별 매출증감률 시각화
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

# 스타일 설정
sns.set(style="whitegrid", palette="muted")

# 월 데이터를 정수로 사용했기 때문에 정렬해서 표시
monthly_revenue = monthly_revenue.sort_values(by=['카테고리', '월'])

# 그래프 그리기
plt.figure(figsize=(14, 7))

sns.lineplot(
    data=monthly_revenue,
    x='월',
    y='증감률',
    hue='카테고리',
    marker='o',
    linewidth=2.5
)

# 제목 및 축 레이블 설정
plt.title("Monthly Revenue Growth Rate (%) by Category", fontsize=16, fontweight='bold')
plt.xlabel("Month", fontsize=13)
plt.ylabel("Growth Rate (%)", fontsize=13)

# x축 월 단위 표시 설정
plt.xticks(range(1, 13))

# 범례 위치 조정
plt.legend(title='Category', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.tight_layout()
plt.show()

 

1. 스타일 설정

# 그래프 스타일 설정 (흰색 배경, muted 톤 색상)
sns.set(style="whitegrid", palette="muted")

 

2. 데이터 정렬

monthly_revenue = monthly_revenue.sort_values(by=['카테고리', '월'])

  • 그래프를 그리기 전에 데이터가 카테고리와 월 기준으로 정렬되어야, 그래프가 깔끔하고 자연스럽게 표현됨

3. 시각화 코드

# 그래프의 크기 설정
plt.figure(figsize=(14, 7))

# 선 그래프(line plot) 생성
sns.lineplot(
    data=monthly_revenue,
    x='월',            # x축은 '월'
    y='증감률',        # y축은 '매출 증감률(%)'
    hue='카테고리',    # 카테고리별로 선을 분리하여 표시
    marker='o',       # 각 데이터 포인트를 원형 마커로 표시
    linewidth=2.5     # 선 두께를 굵게 설정하여 잘 보이게 함
)

 

- 그래프의 크기를 설정한 뒤

- 선 그래프를 이용한 시각화를 할 것이기 때문에 선 그래프 설정하기.

- x, y축 지정

- hue 선 분리

 

4. 그래프 제목 및 축 레이블 설정

plt.title("Monthly Revenue Growth Rate (%) by Category", fontsize=16, fontweight='bold')
plt.xlabel("Month", fontsize=13)
plt.ylabel("Growth Rate (%)", fontsize=13)

 

그래프의 제목과 축의 이름을 명확히 표시하여 데이터를 직관적으로 이해할 수 있도록 함

 

5. x축 설정

plt.xticks(range(1, 13))

  • 월별 데이터를 1월부터 12월까지 정수로 표시하여 그래프를 명확하게 표현

 

6. 범례(legend) 설정

plt.legend(title='Category', bbox_to_anchor=(1.05, 1), loc='upper left')

범례 위치 조정하기

 

7. 레이아웃 최적화 및 출력

plt.tight_layout()
plt.show()

 

최종적으론 이렇게 시각화된다.

 

 

복습 해보니까 시각화 복습하고 이해하는데 좋은 것 같아서 적어도 이번주에는 매일 그래프 하나씩 복습해보려고 노력해봐야겠다.

 


마무리

 

 

오늘도 무사히 끝났다. 바뀐 팀원들과 새로 적응하고 통계 라이브세션 시작하면 또 바빠질 것 같으니 시작 전까지 최대한 통계 기초 같은 강의들 들어둬야겠다!

 

ps. 그리고 오늘 진짜 왤케 졸린지 모르겠다 끝나자마자 바로 침대에 누워야지... 잠 깨려고 블로그 조금 만지작 대봤다 ㅋㅋ