Python에서 평균, 중앙값 및 모드를 찾는 방법은 무엇입니까?

평균, 중앙값 및 모드는 통계의 기본 주제입니다. 외부 라이브러리를 사용하거나 사용하지 않고 Python에서 쉽게 계산할 수 있습니다.

이 세 가지가 주요 대책이다. 중심 경향. 중심 경향은 데이터 세트의 “정상” 또는 “평균” 값을 알려줍니다. 데이터 과학을 이제 막 시작했다면 이 튜토리얼이 적합합니다.

이 자습서를 마치면 다음을 수행하게 됩니다.

  • 평균, 중앙값 및 최빈값의 개념 이해
  • Python에서 자신만의 평균, 중앙값 및 모드 함수를 만들 수 있습니다.
  • 이러한 측정의 사용을 빠르게 시작하려면 Python의 통계 모듈을 사용하십시오.

다음 연습의 다운로드 가능한 버전을 원하는 경우 언제든지 확인하십시오. GitHub 저장소.

평균, 중앙값 및 최빈값을 계산하는 다양한 방법을 살펴보겠습니다.

파이썬에서 평균 계산하기

그만큼 평균 또는 산술 평균은 중심 경향의 가장 많이 사용되는 척도입니다.

중심 경향은 데이터 세트의 일반적인 값임을 기억하십시오.

데이터 세트는 데이터 모음이므로 Python의 데이터 세트는 다음과 같은 기본 제공 데이터 구조 중 하나일 수 있습니다.

  • 목록, 튜플 및 집합: 개체 모음
  • 문자열: 문자 모음
  • 사전: 키-값 쌍 모음

참고: Python에는 큐 또는 스택과 같은 다른 데이터 구조가 있지만 기본 제공 항목만 사용합니다.

데이터 세트의 모든 값을 더하고 그 결과를 값의 수로 나누어 평균을 계산할 수 있습니다. 예를 들어 다음과 같은 숫자 목록이 있는 경우:

[1, 2, 3, 4, 5, 6]

목록의 합이 21이고 길이가 6이므로 평균은 3.5입니다. 21을 6으로 나눈 값은 3.5입니다. 아래 계산을 사용하여 이 계산을 수행할 수 있습니다.

(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21

이 자습서에서는 농구 팀의 선수를 샘플 데이터로 사용합니다.

사용자 정의 평균 함수 생성

농구 팀 선수들의 평균(평균) 연령을 계산하는 것부터 시작하겠습니다. 팀 이름은 “Pythonic Machines”입니다.

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

def mean(dataset):
    return sum(dataset) / len(dataset)

print(mean(pythonic_machine_ages))

이 코드를 분석하면 다음과 같습니다.

  • “pythonic_machine_ages”는 농구 선수의 나이 목록입니다.
  • 주어진 데이터 세트의 합을 길이로 나눈 값을 반환하는 mean() 함수를 정의합니다.
    • sum() 함수는 iterable(이 경우에는 목록) 값의 총합(아이러니하게도)을 반환합니다. 데이터 세트를 인수로 전달하려고 하면 211이 반환됩니다.
    • len() 함수는 iterable의 길이를 반환합니다. 데이터 세트를 전달하면 8을 얻게 됩니다.
  • 농구팀 나이를 mean() 함수에 전달하고 결과를 출력합니다.
  Outlook에서 팀 회의를 만드는 방법

출력을 확인하면 다음을 얻을 수 있습니다.

26.375
# Because 211 / 8 = 26.375

이 출력은 농구 팀 선수의 평균 연령을 나타냅니다. 숫자가 데이터 세트에 나타나지 않지만 대부분의 플레이어의 나이를 정확하게 설명하는 방법에 유의하십시오.

파이썬 통계 모듈에서 mean() 사용하기

중심 경향 측정값을 계산하는 것은 대부분의 개발자에게 공통적인 작업입니다. 그것은 ~ 때문에 파이썬의 통계 모듈은 다른 기본 통계 주제와 함께 이를 계산하기 위한 다양한 기능을 제공합니다.

의 일부이기 때문에 파이썬 표준 라이브러리 PIP로 외부 패키지를 설치할 필요가 없습니다.

이 모듈을 사용하는 방법은 다음과 같습니다.

from statistics import mean

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

print(mean(pythonic_machine_ages))

위의 코드에서는 통계 모듈에서 mean() 함수를 가져오고 데이터 집합을 인수로 전달하기만 하면 됩니다. 그러면 이전 섹션에서 정의한 사용자 지정 함수와 동일한 결과가 반환됩니다.

26.375

이제 평균의 개념이 명확해졌습니다. 중앙값 측정을 계속하겠습니다.

파이썬에서 중앙값 찾기

그만큼 중앙값 정렬된 데이터 집합의 중간 값입니다. 결정된 값의 “전형적인” 값을 제공하기 위해 다시 사용됩니다. 인구.

프로그래밍에서 중앙값은 시퀀스를 두 부분(하반부와 상반부)으로 구분하는 값으로 정의할 수 있습니다.

중앙값을 계산하려면 먼저 데이터 세트를 정렬해야 합니다. 정렬 알고리즘이나 내장 함수 sorted()를 사용하여 이 작업을 수행할 수 있습니다. 두 번째 단계는 데이터 세트 길이가 홀수인지 짝수인지 확인하는 것입니다. 이에 따라 다음 프로세스 중 일부가 수행됩니다.

  • 홀수: 중앙값은 데이터 세트의 중간 값입니다.
  • 짝수: 중앙값은 두 중간 값의 합을 2로 나눈 값입니다.

농구 팀 데이터 세트를 계속 사용하여 선수의 중앙 키를 센티미터 단위로 계산해 보겠습니다.

[181, 187, 196, 196, 198,  203, 207, 211, 215]
# Since the dataset is odd, we select the middle value
median = 198

보시다시피 데이터 세트 길이가 홀수이므로 중간 값을 중앙값으로 사용할 수 있습니다. 그러나 선수가 방금 은퇴하면 어떻게 될까요?

데이터 세트의 중간 값 두 개를 사용하여 중앙값을 계산해야 합니다.

[181, 187, 196, 198, 203, 207, 211, 215] 
# We select the two middle values, and divide them by 2
median = (198 + 203) / 2
median = 200.5

사용자 지정 중앙값 함수 만들기

위의 개념을 파이썬 함수로 구현해 봅시다.

데이터 세트의 중앙값을 얻기 위해 따라야 하는 세 단계를 기억하세요.

  • 데이터세트 정렬: sorted() 함수를 사용하여 이 작업을 수행할 수 있습니다.
  • 홀수인지 짝수인지 확인: 데이터 세트의 길이를 가져오고 모듈로 연산자(%)를 사용하여 이를 수행할 수 있습니다.
  • 각 사례에 따라 중앙값을 반환합니다.
    • 홀수: 중간 값 반환
    • 짝수: 두 중간 값의 평균을 반환합니다.

그러면 다음 기능이 생성됩니다.

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

def median(dataset):
    data = sorted(dataset)
    index = len(data) // 2
    
    # If the dataset is odd  
    if len(dataset) % 2 != 0:
        return data[index]
    
    # If the dataset is even
    return (data[index - 1] + data[index]) / 2

데이터 세트의 결과 인쇄:

print(median(pythonic_machines_heights))
print(median(after_retirement))

산출:

198
200.5

함수 시작 부분에서 정렬된 데이터베이스를 가리키는 데이터 변수를 생성하는 방법에 유의하십시오. 위의 목록은 정렬되어 있지만 재사용 가능한 함수를 만들고자 하므로 함수가 호출될 때마다 데이터 세트를 정렬합니다.

  오래된 안드로이드 폰을 보안 카메라로 바꾸는 방법

인덱스는 정수 나누기 연산자를 사용하여 데이터 세트의 중간 값 또는 중간 값을 저장합니다. 예를 들어 “pythonic_machine_heights” 목록을 전달하는 경우 값은 4입니다.

파이썬 시퀀스 인덱스는 0부터 시작한다는 것을 기억하세요. 정수 나누기로 목록의 중간 인덱스를 반환할 수 있기 때문입니다.

그런 다음 모듈로 연산의 결과를 0이 아닌 값과 비교하여 데이터 세트의 길이가 홀수인지 확인합니다. 조건이 참이면 예를 들어 “pythonic_machine_heights” 목록과 함께 중간 요소를 반환합니다.

>>> pythonic_machine_heights[4]
# 198

반면 데이터 세트가 짝수이면 중간 값의 합계를 2로 나눈 값을 반환합니다. 참고 데이터[index -1] 데이터 세트의 낮은 중간점을 제공하고 데이터는[index] 상위 중간점을 제공합니다.

파이썬 통계 모듈에서 median() 사용하기

이 방법은 통계 모듈에서 이미 존재하는 함수를 사용하고 있기 때문에 훨씬 간단합니다.

개인적으로 나에게 이미 정의된 것이 있다면 DRY(자신을 반복하지 마십시오) 원칙(이 경우 다른 사람의 코드를 반복하지 마십시오) 때문에 사용합니다.

다음 코드를 사용하여 이전 데이터 세트의 중앙값을 계산할 수 있습니다.

from statistics import median

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

print(median(pythonic_machines_heights))
print(median(after_retirement))

산출:

198
200.5

Python에서 모드 계산

그만큼 방법 데이터 세트에서 가장 빈번한 값입니다. 우리는 그것을 모든 학생들을 위한 표준을 대표할 수 있는 학교의 “인기 있는” 그룹으로 생각할 수 있습니다.

모드의 예로는 기술 상점의 일일 판매가 있습니다. 해당 데이터 세트의 모드는 특정 날짜에 가장 많이 판매된 제품입니다.

['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']

보시다시피 위 데이터 세트의 모드는 목록에서 가장 빈번한 값이었기 때문에 “노트북”입니다.

모드의 멋진 점은 데이터 세트가 숫자가 아니어야 한다는 것입니다. 예를 들어 문자열로 작업할 수 있습니다.

다른 날의 판매를 분석해 보겠습니다.

['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']

위의 데이터 세트에는 “마우스”와 “헤드폰”의 두 가지 모드가 있습니다. 둘 다 빈도가 2이기 때문입니다. 이것은 그것이 복합적 데이터 세트.

아래와 같이 데이터 세트에서 모드를 찾을 수 없으면 어떻게 합니까?

['usb', 'camera', 'smartphone', 'laptop', 'TV']

이것은 균등 분포기본적으로 데이터 세트에 모드가 없음을 의미합니다.

  Mac의 모든 메모리를 사용하는 프로그램을 확인하는 방법

이제 모드의 개념을 빠르게 파악했으므로 Python에서 계산해 보겠습니다.

커스텀 모드 함수 생성

값의 빈도를 키-값 쌍, 즉 Python 사전으로 생각할 수 있습니다.

농구 비유를 요약하자면, 두 가지 데이터 세트를 사용하여 작업할 수 있습니다. 게임당 점수와 일부 선수의 운동화 스폰서십입니다.

모드를 찾으려면 먼저 데이터 세트에 있는 각 값으로 빈도 사전을 만든 다음 최대 빈도를 얻고 해당 빈도를 가진 모든 요소를 ​​반환해야 합니다.

이것을 코드로 번역해 보겠습니다.

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

def mode(dataset):
    frequency = {}

    for value in dataset:
        frequency[value] = frequency.get(value, 0) + 1

    most_frequent = max(frequency.values())

    modes = [key for key, value in frequency.items()
                      if value == most_frequent]

    return modes

두 목록을 인수로 전달한 결과 확인:

print(mode(points_per_game))
print(mode(sponsorship))

산출:

[10]
['nike', 'adidas', 'jordan']

보시다시피 첫 번째 print 문은 단일 모드를 제공했지만 두 번째는 여러 모드를 반환했습니다.

위의 코드를 자세히 설명하면 다음과 같습니다.

  • 우리는 빈도 사전을 선언합니다
  • 데이터 세트를 반복하여 생성합니다. 히스토그램 – 계수기(또는 빈도) 집합에 대한 통계 용어 –
    • 키가 사전에서 발견되면 값에 1을 추가합니다.
    • 찾지 못하면 값이 1인 키-값 쌍을 만듭니다.
  • most_frequent 변수는 아이러니하게도 빈도 사전의 가장 큰 값(키가 아님)을 저장합니다.
  • 빈도가 가장 높은 빈도 사전의 모든 키로 구성된 모드 변수를 반환합니다.

읽기 쉬운 코드를 작성하려면 변수 이름 지정이 얼마나 중요한지 확인하십시오.

파이썬 통계 모듈에서 mode() 및 multimode() 사용

다시 한 번 통계 모듈은 기본 통계 작업을 수행하는 빠른 방법을 제공합니다.

두 가지 기능을 사용할 수 있습니다. 방법() 그리고 다중 모드().

from statistics import mode, multimode

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

위의 코드는 두 함수를 모두 가져오고 작업한 데이터 세트를 정의합니다.

여기에 약간의 차이가 있습니다. mode() 함수는 만나는 첫 번째 모드를 반환하는 반면 multimode()는 데이터 집합에서 가장 빈번한 값이 포함된 목록을 반환합니다.

결과적으로 정의한 사용자 지정 함수는 실제로 multimode() 함수라고 말할 수 있습니다.

print(mode(points_per_game))
print(mode(sponsorship))

산출:

10
nike

참고: Python 3.8 이상에서 mode() 함수는 찾은 첫 번째 모드를 반환합니다. 이전 버전이 있는 경우 통계 오류.

multimode() 함수 사용:

print(multimode(points_per_game))
print(multimode(sponsorship))

산출:

[10]
['nike', 'adidas', 'jordan']

요약하자면

축하합니다! 지금까지 따라오셨다면 주요 중심경향 측정값인 평균, 중앙값, 최빈값을 계산하는 방법을 배웠습니다.

평균, 중앙값 및 최빈값을 찾기 위해 사용자 지정 함수를 정의할 수 있지만 통계 모듈을 사용하는 것이 좋습니다. 표준 라이브러리의 일부이고 사용을 시작하기 위해 아무것도 설치할 필요가 없기 때문입니다.

다음으로 Python의 데이터 분석에 대한 친숙한 소개를 읽으십시오.