programming/파이썬으로 배우는 통계학

[파이썬/통계] Python에 의한 기술 통계 : numpy·pandas의 기본

Jofresh 2023. 5. 5. 21:44
728x90
반응형

안녕하세요!

조신선입니다.

 

해당 카테고리에서는 파이썬을 활용한 통계기법에 대해서 포스팅하도록 하겠습니다. 

파이썬통계는 기본적으로 쥬피터 환경에서 실행하도록 합니다!

vscode를 사용하고 계시다면 확장자가 py가 아닌 ipynb로 하셔야합니다.

 

쥬피터 환경으로 하는 이유는 필요한 라이브러리가 대부분 같은데, 하나의 데이터로 여러개의 분석을 할 때

일일이 파일을 생성하기 보다는 쥬피터 환경에서는 하나의 데이터로 여러개의 분석을 할 수 있기 때문입니다.

 

그럼 시작하겠습니다. 

 

numpy·pandas란?

NumPy는 파이썬에서 대규모 다차원 배열과 행렬 연산을 지원하는 라이브러리로, 과학, 수학, 엔지니어링 등 다양한 분야에서 활용되고 있습니다. NumPy는 배열을 효율적으로 다루기 위해 벡터화 연산을 사용하고, 이를 통해 빠른 계산이 가능합니다.

Pandas는 데이터를 다루기 위한 라이브러리로, 표 형태의 데이터를 다루기 쉽게 만들어주며, 데이터를 불러오고 저장하는 기능 또한 지원합니다. Pandas는 데이터의 인덱싱, 슬라이싱, 필터링, 변형, 병합, 그룹화, 집계 등 다양한 데이터 조작 기능을 제공하며, 대용량의 데이터도 처리할 수 있습니다. Pandas는 주로 데이터 분석, 처리, 전처리 등의 작업에 사용됩니다.

 

numpy·pandas의 기본

1. numpy와 pandas 모듈을 불러옵니다.
2. 리스트 sample_list와 numpy array sample_array를 생성하고, 각각 출력합니다.
3. sample_array에 2를 더한 값을 출력하고, sample_array에 2를 곱한 값을 출력합니다.
4. np.array([1 ,2, "A"])와 같이 배열에 문자열과 숫자가 섞여 있으면 오류가 발생합니다.
5. 2차원 배열(행렬) sample_array_2를 생성하고 출력합니다.
6. sample_array_2.shape를 통해 sample_array_2의 행과 열의 수를 출력합니다.

 

※ 예시 코드

import numpy as np
import pandas as pd

# 리스트 정의
sample_list = [1,2,3,4,5]
sample_list

# Numpy 배열 생성
sample_array = np.array([1,2,3,4,5])
sample_array

# 배열에 2를 더한 값 출력
sample_array + 2

# 배열에 2를 곱한 값 출력
sample_array * 2

# 배열에 문자열과 숫자가 섞여 있을 경우 오류가 발생함
np.array([1 ,2, "A"])

# 2차원 배열(행렬) 생성
sample_array_2 = np.array(
    [[1,2,3,4,5],
     [6,7,8,9,10]])
sample_array_2

# 배열의 행과 열의 수 출력
sample_array_2.shape

※ 위 예시 코드 결과값

 

 

 

 

구현: 등차수열 작성 방법

- 아래 코드는 numpy 라이브러리의 arange 함수를 사용하여 1부터 6 미만까지 1씩 증가하는 배열을 생성하는 코드입니다.

start : 배열의 시작값을 나타냅니다. 위 코드에서는 1입니다.
stop : 배열의 마지막값(생성하지 않음)을 나타냅니다. 위 코드에서는 6입니다.
step : 배열의 증가 간격을 나타냅니다. 위 코드에서는 1씩 증가하도록 설정되어 있습니다.
따라서 위 코드의 결과는 [1, 2, 3, 4, 5]가 됩니다.

- 0.1부터 0.8 전까지 0.2씩 증가하는 값을 배열로 생성합니다. 즉, [0.1, 0.3, 0.5, 0.7]을 반환합니다. start는 시작 값, stop은 마지막 값(이 값은 포함되지 않음), step은 증가 간격을 의미합니다.

 

- np.arange(0.1, 0.8, 0.2)는 0.1부터 0.8까지 0.2씩 증가하는 값을 생성하는 NumPy 배열을 만드는 함수입니다. 결과적으로 [0.1, 0.3, 0.5, 0.7]을 반환합니다. 이때 start는 시작값, stop은 끝값보다 작은 값을 지정하며, step은 증가하는 간격을 나타냅니다.

 

구현: 다양한 어레이 작성 방법

아래 코드는 numpy를 사용하여 1차원 배열과 2차원 배열에서 각각의 요소들을 어떻게 선택하고 슬라이스하는지를 보여줍니다.

- d1_array = np.array([1,2,3,4,5]) : 1차원 배열을 생성합니다.
- d1_array[0] : 1차원 배열에서 첫 번째 요소를 선택합니다. 결과는 1입니다.
- d1_array[1:3] : 1차원 배열에서 두 번째 요소부터 세 번째 요소까지를 선택합니다. 결과는 [2, 3]입니다.
- d2_array = np.array([[1,2,3,4,5], [6,7,8,9,10]]) : 2차원 배열을 생성합니다.
- d2_array[0, 3] : 2차원 배열에서 첫 번째 행과 네 번째 열의 요소를 선택합니다. 결과는 4입니다.
- d2_array[1, 2:4] : 2차원 배열에서 두 번째 행과 세 번째 요소부터 네 번째 요소까지를 선택합니다. 결과는 [8, 9]입니다.

 

 

※ 예시코드

#1차원 배열
d1_array = np.array([1,2,3,4,5])
d1_array

#첫 번째 요소 가져오기
d1_array[0]

#2~3번째 요소 취득
d1_array[1:3]

#2차원 배열
d2_array = np.array(
    [[1,2,3,4,5],
    [6,7,8,9,10]])
d2_array

d2_array[0, 3]

d2_array[1, 2:4]

 

※ 예시 코드 결과값

 

구현: 데이터 프레임

아래 코드는 샘플 데이터를 이용해 Pandas DataFrame 객체를 생성하고 출력하는 코드입니다.
샘플 데이터는 다음과 같이 세 개의 열(col1, col2, col3)로 이루어져 있습니다.

col1: 1부터 5까지의 정수가 저장된 1차원 배열
col2: col1의 값에 2를 곱한 값을 저장한 1차원 배열
col3: "A", "B", "C", "D", "E"와 같은 문자열 값이 저장된 1차원 배열
pd.DataFrame() 함수를 이용해 이러한 데이터를 입력하면 DataFrame 객체가 생성됩니다. 이 객체는 행(row)과 열(column)로 이루어진 2차원 테이블 형태의 데이터를 다룰 때 사용됩니다.

이렇게 생성된 DataFrame 객체를 print 함수를 이용해 출력합니다.

 

※ 예시코드

sample_df = pd.DataFrame({
    'col1' : sample_array, 
    'col2' : sample_array * 2,
    'col3' : ["A", "B", "C", "D", "E"]
})
print(sample_df)

※ 예시코드 결과값

 

구현: 파일 데이터 가져오기

아래 코드는 "2-4-1-sample_data.csv"파일을 불러옵니다.

 

file_data = pd.read_csv("2-4-1-sample_data.csv")
print(file_data)

 

구현: 데이터 프레임 결합

아래 코드는 pandas 라이브러리를 이용하여 2개의 DataFrame 객체인 df_1과 df_2를 생성하는 코드입니다.

df_1은 col1이 1, 2, 3이고, col2가 A, B, C인 2개의 열을 가진 DataFrame입니다.

df_2는 col1이 4, 5, 6이고, col2가 D, E, F인 2개의 열을 가진 DataFrame입니다. 각 DataFrame 객체는 서로 다른 값들을 가진 열을 갖고 있습니다.

 

※ 예시코드

df_1 = pd.DataFrame({
    'col1' : np.array([1, 2, 3]),
    'col2' : np.array(["A", "B", "C"])
})
df_2 = pd.DataFrame({
    'col1' : np.array([4, 5, 6]),
    'col2' : np.array(["D", "E", "F"])
})

print(pd.concat([df_1, df_2]))

 

※ 예시코드 결과값

구현: 열에 대한 데이터 프레임 조작

위에 작성한 sample_df 값을 출력합니다.

1. 전체를 출력

2~3. 2번칼럼을 출력

4. 2,3번 컬럼을 출력

추가로,,

print(sample_df.head(n=3)): 데이터프레임에서 상위 3개의 행을 출력합니다.
print(sample_df.query('index == 0')): index가 0인 첫번째 행을 추출합니다.
print(sample_df.query('col3 == "A"')): col3 컬럼에서 값이 "A"인 행을 추출합니다.
print(sample_df.query('col3 == "A" | col3 == "D"')): col3 컬럼에서 값이 "A" 또는 "D"인 행을 추출합니다.
print(sample_df.query('col3 == "A" & col1 == 3')): col3 컬럼에서 값이 "A"이면서, col1 컬럼에서 값이 3인 행을 추출합니다.
print(sample_df.query('col3 == "A"')[["col2", "col3"]]): col3 컬럼에서 값이 "A"인 행에서 col2, col3 컬럼을 선택하여 추출합니다.

 

이상입니다.

 

오늘은 통계의 기본인 넘파이와 판다스를 활용하는 방법에 대해서 알아보았습니다.

다음 포스팅으로 돌아오겠습니다 ! :)

 

 

728x90
반응형