[혼공분석] 4주차

LeeHsss·2025년 2월 2일
0

데이터 분석

목록 보기
6/9
post-thumbnail

Chapter 04

04-1. 통계로 요약하기

💡 기술 통계란? (Descriptive Statistics)

  • 테크니컬한 어떤 기술적인 부분을 지칭하는 것이 아니라 자료의 내용을 압축하여 설명하는 방법이다.
  • 요약 통계(Summary Statistics) 라고 부르기도 한다.
  • 정량적인 수치로 전체 데이터를 요약하거나 이해하기 쉬운 그래프를 사용한다.
  • 파이썬 pandas 패키지의 DataFrame 객체는 기본적으로 수치형 열에 대한 요약 통계를 보여주는 describe() 메서드를 가지고 있다.
    • count: 누락된 값을 제외한 데이터 개수 표시
    • mean: 평균값 계산
    • std: 표준 편차 계산
    • min: 최솟값 계산
    • 50%: 중앙값 계산
    • 25%, 75%: 25%지점과 75%지점에 놓인 값 계산
    • max: 최댓값 계산

percentiles 매개변수

  • describe() 메서드는 기본적으로 데이터의 25%, 50% 75% 에 위치한 값을 보여준다.
  • 원하는 위치의 값을 보고 싶을 때 percentiles 매개변수에 위치를 지정한다.
  • 위치를 지정할 때는 소수점으로 지정한다. (e.g. 60% => 0.6)
ns_book7.describe(percentiles=[0.3, 0.6, 0.9])

include 매개변수

  • 열의 데이터 타입이 수치가 아닌 다른 데이터 타입의 열의 기술 통계를 보고 싶을 때 사용

  • 포함 시키고 싶은 열이 여러개일 경우 list 형태로 전달

  • 반대로 제외시키고 싶은 열이 있을 때는 exclude 매개변수를 사용

    ns_book7.describe(include='object')

평균 구하기

  • 숫자 값을 모두 더해 개수로 나눈 것.

  • 숫자의 합을 구하기 위해서는 합 기호(시그마)를 사용해서 수식으로 표현한다.

    e.g.) i=1 부터 376770까지의 합을 구하는 수식

    i=1376770xi\sum_{i=1}^{376770} x_i

  • pandas에서는 mean() 메서드를 제공한다.

중앙값 구하기

  • 전체 데이터를 순서대로 늘어 놓았을 때 중앙에 위치한 값.
  • describe() 메서드의 기본 출력에서 50% 위치의 값이 중앙값에 해당한다.
  • 데이터 개수가 짝수이면, 가운데 두개의 값을 평균하여 중앙값을 결정한다.
  • pandas에서는 median() 메서드를 제공한다.
  • 중복 값을 제거하고 중앙 값을 구할 때는 drop_duplicates() 메서드를 사용한다.

최솟값, 최댓값 구하기

  • pandas 에서는 최솟값, 최댓값을 구하기 위해 각각 min(), max() 메서드를 제공한다.

분위수 구하기

  • 분위수는 데이터를 순서대로 늘어 놓았을 때 이를 균등한 가격으로 나누는 기준점이다.

  • 사분위수는 순서대로 정렬된 데이터를 네 구간으로 나누기 때문에 사분위수는 3개가 나오고 각 25%, 50%, 75%에 해당한다.

    • 25%에 해당하는 값을 제 1사분위
    • 50%에 해당하는 값을 제 2사분위
    • 75%에 해당하는 값을 제 3사분위
  • pandas에서 분위수 값을 계산할 때는 quantile() 메서드를 사용한다.

    • 여러 개의 분위수를 지정할 때는 리스트 형태로 전달하고, 각 분위수에 해당 하는 값을 담은 시리즈 객체를 반환한다.
    ns_book7['대출건수'].quantile([0.25, 0.5, 0.75])
    • interpolation 매개변수: 두 지점 사이에 놓인 특정 위치의 값을 구하는 방법을 보간이라고 한다.
      • linear (분위수에 따라 특정 위치의 값을 구한다. 보통 비례식을 사용하여 구한다.)
      • midpoint: 분위수에 상관 없이 무조건 두 수 사이의 중앙값을 사용한다.
      • nearest: 두 수중에서 가까운 값을 선택한다.
      • lower: 두 수 중 작은 값을 선택한다.
      • higher: 두 수 중 큰 값을 선택한다.

백분위 구하기

  • pandas에서 계산하는 메서드를 제공하지는 않지만, 평균 값을 통해서 유사한 결과를 얻을 수 있다.
    • 특정 조건을 만족하는 불리언 배열을 만들고, 불리언 배열의 평균을 구하면 특정 조건에 해당하는 값의 백분위를 비슷하게 구할 수 있다.

분산 구하기

  • 분산(Variance, s2s^2): 평균으로부터 데이터가 얼마나 퍼져있는지를 나타내는 통계량. 데이터가 가운데 모여 있다면 분산이 작고, 넓게 퍼져 있다면 분산이 크다.

    • 분산은 데이터의 각 값에서 평균을 뺀 다음, 제곱한 후 평균처럼 샘플 개수로 나누어서 구할 수 있다.

    xix_i: 데이터

    xmx_m: 평균

    n: 전체 샘플 개수

    s2s^2 = i=1n(xixm)2n\sum_{i = 1}^{n}(x_i - {x_m})^2\over n

  • 판다스에는 분산을 계산하는 var() 메서드가 있다.

표준편차 구하기

  • 표준편차(Standard deviation, s): 분산에 제곱근을 한 것 (= 표준편차를 제곱하면 분산이 된다.)
  • 평균을 중심으로 데이터가 대략 얼만큼 떨어져 분포해 있는지를 표현하는 값이다.
  • 판다스에는 표준편차를 계산하는 std() 메서드가 있다.

최빈값 구하기

  • 최빈값(mode): 데이터에서 가장 많이 등장하는 값이다.
  • 판다스에는 최빈값을 계산하는 mode() 메서드가 있다.

💡 numeric_only 매개변수

  • 데이터프레임에서 수치형 열만 연산할 필요가 있을 때 True로 지정한다.
  • 만약 numeric_only 매개변수를 지정하지 않으명 모든 데이터 타입의 열에 대해 값을 계산하기 때문에 시간이 매우 오래 걸린다.

04-2. 분포 요약하기

산점도 그리기

  • 산점도는 데이터를 화면에 뿌리듯 그리는 그래프.
  • 변수 혹은 두 가지 특성 값을 직교 좌표계에 점으로 나타내는 그래프.
  • matplotlib.pyplot 모듈의 scatter() 함수를 사용해서 산점도를 그린다.
  • 산점도는 데이터를 2차원 좌표에 점으로 뿌려서 표현하기 때문에 데이터 분포를 한 눈에 볼 수 있는 유용한 도구이다.
  • alpha 매개변수에 0~1 사이의 값으로 투명도를 지정할 수 있다. (0에 가까울수록 투명하고, 1에 가까울수록 불투명하다.)

💡 변수나 특성이란?

  • 데이터 분석이나 머신러닝에서 변수는 한 레코드를 구성하는 개별 측정 값을 의미하며, 특성이라고도 한다.
  • 남산도서관 대출 데이터의 경우, '도서명', '저자' 와 같이 각 열이 하나의 특성이 된다.

💡 상관 관계?

  • 양의 상관관계: x축이 증가함에 따라, y축이 증가하면 양의 상관관계
  • 음의 상관관계: x축이 증가함에 따라, y축이 감소하면 음의 상관관계

히스토그램 그리기

  • 히스토그램은 수치형 특성의 값을 일정한 구간으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 그래프.

    • 구간 안에 속한 데이터 개수를 도수(frequency) 라고 부른다.

    💡 히스토그램의 도수분포표

    • 히스토그램에 나오는 구간과 도수를 표로 요약한 것을 도수분포표라고 한다.
  • hist() 함수

    • matplotlib으로 히스토그램을 그릴 떄는 hist() 함수를 사용한다. hist() 함수는 1차원 데이터를 입력받아 히스토그램을 그리고, 기본적으로 데이터를 10개의 구간으로 나눈다.
    • bins 매개변수에 지정된 값에 따라 구간을 나눈다.
    • 히스토그램의 구간을 정확하게 확인하기 위해서 numpy 패키지의 histogram_bin_edges() 함수를 사용한다.

    💡 정규분포와 표준정규분포

    • 정규분포: 종 모양처럼 가운데가 볼록하고 평균을 중심으로 대칭인 분포
    • 표준정규분포: 평균이 0이고, 표준편차가 1인 정규분포

    구간 조정하기

    • 한 구간의 도수가 너무 커서 다른 구간에는 도수가 표시되지 않는 경우, y축을 로그 스케일로 바꾸면 해결 가능하다.
    • matplotlib 에서 y축을 로그 스케일로 바꾸려면, yscale() 함수에 log를 지정하면 된다.
    • hist() 함수에는 특별히 로그 스케일로 히스토그램을 그릴 수 있도록 log 매개변수를 제공한다.
      • 값이 True면, yscale() 함수를 이용한 것과 같은 결과를 도출할 수 있다.
    • x축의 구간을 세밀하게 나누기 위해서는 bins 매개변수의 값을 크게 설정하면 된다.
    • x축에도 마찬가지로 xcale() 함수에 log를 지정하면, 로그 스케일을 적용할 수 있다.
    • 수치를 로그로 표현하면 넓은 범위의 데이터를 표시하기 좋다.
  • 히스토그램은 하나의 특성에 대한 분포를 확인할 때 사용하면 좋다.

상자 수염 그림 그리기

  • 상자 수염 그림은 최솟값, 세 개의 사분위수, 최댓값 이렇게 다섯 개의 숫자를 사용해 데이터를 요약하는 그래프를 그린다.

    • 사분위수를 계산하고, 25%와 75% 지점을 밑면과 윗면으로 하는 직사각형을 그린다.
    • 중간값에 해당하는 지점에 수평선을 긋는다.
    • 사각형의 밑면과 윗면에서 사각형의 높이에 1.5배만큼 떨어진 거리 안에서 가장 멀리 있는 샘플까지 수직선을 긋는다.
    • 수직선 밖에서 최솟값과 최댓값까지 데이터를 점으로 표시한다. 이 영역의 데이터를 이상치(Outier)라고 부른다. => 관측 범위에서 아주 많이 벗어난 값 혹은 데이터
    • 제 1사분위수(25%)와 제 3사분위수(75%) 사이의 거리를 IQR(Interquartile range) 이라고 한다.
  • 상자 수염 그림은 여러 개의 특성을 시각적으로 비교하기 좋다. 특히 데이터가 어떤 방향으로 더 많이 늘어져 있는지 한 눈에 파악할 수 있다.

  • boxplot() 함수

    상자 수염 그림 수평으로 그리기

    • boxplot() 함수의 vert 매개변수를 기본값 True에서 False로 바꾼다. => x-y축이 바뀐다.

    수염 길이 조정하기

    • 기본적으로 수염 길이는 IQR의 1.5배이다.
    • boxplot() 함수의 whis 매개변수를 사용하여 조정할 수 있다.
    • whis 매개변수는 백분율로도 지정할 수 있다. e.g.) (10, 90) => 10%, 90% 백분위수에 해당하는 데이터까지 수염을 그린다.

⭐️ pandas의 그래프 함수

  • pandas 데이터프레임에서도 여러 가지 그래프를 그릴 수 있는 메서드를 제공한다.

  • 판다스 데이터프레임 객체의 plot 속성은 여러 가지 그래프를 그릴 수 있는 메서드를 제공한다.

    1. 산점도 그리기

      • scatter() 메서드
      • e.g.)
        # x축: 도서권수, y축: 대출건수, alpha: 투명도
        ns_book7.plot.scatter('도서권수', '대출건수', alpha=0.1) 
    2. 히스토그램 그리기

      • hist() 메서드
      • e.g.)
      	ns_book7['도서명'].apply(len).plot.hist(bins=100)

    3. 상자 수염 그리기

      • boxplot() 메서드
      • e.g.)
        	df = ns_book7[['대출건수', '도서권수']]
        	df.boxplot()
        	plt.yscale('log')

숙제.

필수숙제

ns_book7 남산도서관 대출 데이터에서 1980년~2022년 사이에 발행된 도서를 선택하여 
'발행년도'열의 히스토그램을 그려 보세요.

추가숙제

8가지 기술 통계량의 개념에 대해 정리하기

1. 평균: 데이터 값을 모두 더한 후 데이터 개수로 나눈 값.

2. 중앙값: 전체 데이터를 크기 순서대로 일렬로 늘어 놓았을 때 중간에 위치한 값.

3. 최솟값: 전체 데이터 중에서 가장 작은 값.

4. 최댓값: 전체 데이터 중에서 가장 큰 값.

5. 분위수: 순서대로 나열된 데이터를 일정한 간격으로 나누는 기준점.

6. 분산: 평균으로부터 데이터가 얼마나 퍼져있는지를 나타내는 통계량.
	- 데이터가 가운데 모여 있으면 분산이 작고, 넓게 퍼져 있으면 분산이 크다.
    
7. 표준편차: 분산의 제곱근으로 분산과 마찬가지로 데이터의 분포 정도를 나타내는 통계량.

8. 최빈값: 데이터에서 가장 많이 등장하는 값.
profile
조금씩 지식의 영역을 넓혀가는 중이에요...😌

0개의 댓글

관련 채용 정보