πŸ’‘ Data Analysis/Study

[DA][Python] 데이터 뢄석 μ‹œ ν™œμš©ν•  수 μžˆλŠ” 기초 ν•¨μˆ˜

Sun A 2024. 7. 5. 13:00

κ°œμš”

데이터 뢄석에 ν™œμš©ν•  수 μžˆλŠ” ν•¨μˆ˜ 4개λ₯Ό 생성해보고 데이터λ₯Ό μž…λ ₯ ν›„ 좜λ ₯ν–ˆμ„ λ•Œ μ–΄λ–€ ν˜•μ‹μœΌλ‘œ λ‚˜μ˜€λŠ” 지에 λŒ€ν•΄ μ•Œ 수 μžˆλ‹€.

 

ν•¨μˆ˜ μ’…λ₯˜

1. 평균과 ν‘œμ€€νŽΈμ°¨ 계산 ν•¨μˆ˜

2. 상관행렬을 κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜

  • μƒκ΄€ν–‰λ ¬μ΄λž€
    • 데이터 μ„ΈνŠΈμ˜ μ—¬λŸ¬ λ³€μˆ˜λ“€ κ°„μ˜ 상관관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν‘œλ₯Ό 의미
    • 행렬은 λ³€μˆ˜λ“€ κ°„μ˜ μƒκ΄€κ³„μˆ˜λ₯Ό κ³„μ‚°ν•˜μ—¬ κ·Έ κ²°κ³Όλ₯Ό ν–‰λ ¬ ν˜•νƒœλ‘œ λ‚˜νƒ€λ‚Έλ‹€.
    • 값은 -1λΆ€ν„° 1κΉŒμ§€μ˜ 값을 κ°€μ§„λ‹€.
: 두 λ³€μˆ˜ 간에 μ™„λ²½ν•œ μ–‘μ˜ 상관관계가 있음
-1 : 두 λ³€μˆ˜ 간에 μ™„λ²½ν•œ 음의 상관관계가 있음
: 두 λ³€μˆ˜ 간에 상관관계가 μ—†μŒ

3. 결츑치λ₯Ό μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜

4. νŠΉμ • μ—΄μ˜ 기초 톡계 정보λ₯Ό μ œκ³΅ν•˜λŠ” ν•¨μˆ˜

 

기본 파이썬 라이브러리

데이터 ν”„λ ˆμž„μ„ μ„€μ •ν•˜κΈ° μœ„ν•΄ pandasλ₯Ό 뢈러였고 결츑값을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ numpy 라이브러리λ₯Ό λΆˆλŸ¬μ˜¨λ‹€.

import pandas as pd
import numpy as np

 

1. 평균과 ν‘œμ€€νŽΈμ°¨ 계산 ν•¨μˆ˜

평균 meanκ³Ό ν‘œμ€€νŽΈμ°¨ stdλ₯Ό κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜λΌλŠ” μ˜λ―Έμ—μ„œ calculate_mean_std 둜 ν•¨μˆ˜λͺ…을 μ§“λŠ”λ‹€.

def calculate_mean_std(data) :
  • data 인수λ₯Ό μž…λ ₯ν•˜μ—¬ ν•΄λ‹Ή ν•¨μˆ˜κ°€ 계산해야 ν•˜λŠ” 데이터 ν”„λ ˆμž„μ„ λ‚˜νƒ€λ‚Έλ‹€.

 

μΈμˆ˜μ— meanκ³Ό std ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κ³„μ‚°ν•˜κ³  λ°˜ν™˜ν•˜λŠ” μ½”λ“œλ‘œ ν•΄λ‹Ή ν•¨μˆ˜ μ½”λ“œλ₯Ό λ§ˆλ¬΄λ¦¬ν•œλ‹€.

	mean = data.mean()
	std = data. std()
	return {"mean": mean, "std":std}

 

2. 상관행렬 계산 ν•¨μˆ˜

ν•¨μˆ˜λͺ…을 μ •μ˜ν•œλ‹€.

def calculate_correlation_matrix(data) :

상관행렬을 κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜λŠ” corr() μ΄λ―€λ‘œ ν•΄λ‹Ή 계산을 ν•œ ν›„ λ°˜ν™˜ν•˜λŠ” μ½”λ“œλ₯Ό μž…λ ₯ν•œλ‹€.

    correlation_matrix = data.corr()
    return correlation_matrix

 

3. 결츑치 처리 ν•¨μˆ˜

ν•¨μˆ˜ μ •μ˜

def handle_missing_values(data, method='mean') :
  • 결츑값을 μ²˜λ¦¬ν•˜λŠ” 방법을 μ„ νƒν•˜λŠ” 선택적 인수둜 method = 'mean'을 썼닀.
  • κΈ°λ³Έ 값이 'mean'μ΄λΌλŠ” 뜻

 

쑰건문을 톡해 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ λŒ€μ²΄ν•  값을 μ°ΎλŠ”λ‹€.

if method == 'mean' :
	return data.fillna(data.mean())
elif method == 'median' :
	return data.fillna(data.median())
elif method == 'mode' :
	return data.fillna(data.mode().iloc[0])
else : 
	raise ValueError("MethodλŠ” 'mean', 'median', 'mode'쀑 ν•˜λ‚˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.")
  • 각각 method μΈμˆ˜κ°€ mean, median, mode에 ν•΄λ‹Ήν•  λ•Œ λ©”μ†Œλ“œμ— ν•΄λ‹Ήν•˜λŠ” κ°’μœΌλ‘œ 데이터 ν”„λ ˆμž„μ„ λ°˜ν™˜ν•œλ‹€.
  • modeλŠ” μ΅œλΉˆκ°’μœΌλ‘œ λŒ€μ²΄ν•˜λŠ” 것이며, iloc[0] 을 μ‚¬μš©ν•˜μ—¬ 첫 번째 μ΅œλΉˆκ°’μ„ 선택할 수 μžˆλ‹€.
  • λ§ˆμ§€λ§‰μœΌλ‘œ μ˜ˆμ™Έ 처리λ₯Ό ν•˜μ—¬ μœ νš¨ν•˜μ§€ μ•Šμ€ method μΈμˆ˜μ— λŒ€ν•΄ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€κ³  였λ₯˜ λ©”μ‹œμ§€ λ˜ν•œ 뜰 수 μžˆλ„λ‘ ν•œλ‹€.

 

4. νŠΉμ • μ—΄μ˜ 기초 톡계 정보λ₯Ό μ œκ³΅ν•˜λŠ” ν•¨μˆ˜

ν•¨μˆ˜ μ •μ˜

def get_column_statistics(data, column_name) :
  • column_name은 기초 톡계 정보λ₯Ό 계산할 μ—΄μ˜ 이름을 μ˜λ―Έν•œλ‹€.

 

dataμ—μ„œ column_name에 ν•΄λ‹Ήν•˜λŠ” μ—΄ 데이터λ₯Ό μΆ”μΆœν•  수 μžˆλ„λ‘ column_dataλΌλŠ” λ³€μˆ˜λ₯Ό μ •μ˜ν•œλ‹€.

    column_data = data[column_name]

 

status둜 μΆ”μΆœν•œ μ—΄ 데이터에 λŒ€ν•œ 기초 톡계 정보λ₯Ό κ³„μ‚°ν•˜μ—¬ λ”•μ…”λ„ˆλ¦¬μ— μ €μž₯ν•œλ‹€.

기초 톡계 μ •λ³΄λ‘œλŠ” μ΅œμ†Œκ°’, μ΅œλŒ€κ°’, 평균값, 쀑앙값, ν‘œμ€€νŽΈμ°¨λ₯Ό 계산할 수 μžˆλ‹€.

    status = {
        "min": column_data.min(),
        "max": column_data.max(),
        "mean": column_data.mean(),
        "median": column_data.median(),
        "std": column_data.std()
    }

 

λ§ˆμ§€λ§‰μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” μ½”λ“œλ₯Ό μž…λ ₯ν•˜μ—¬ λ”•μ…”λ„ˆλ¦¬λ₯Ό λ°˜ν™˜ν•˜λ©΄ λœλ‹€.

    return status

 

ν•¨μˆ˜ ν™œμš©ν•˜κΈ°

μœ„μ— μƒμ„±ν•œ ν•¨μˆ˜λ“€μ„ ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ˜ˆμ‹œ 데이터가 ν•„μš”ν•˜λ‹€. 

μ˜ˆμ‹œ 데이터λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν˜•μ„±ν•œλ‹€.

def create_sample_data() :
	sample_data = pd.DataFrame({
    	'A': [1, 2, np.nan, 4, 5],
        'B': [5, 4, 3, 2, 1],
        'C': [2, 3, 4, np.nan, 6]
    })
    return sample_data

 

ν˜•μ„±ν•œ ν•¨μˆ˜λ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž…λ ₯ν•˜κ³  ν˜ΈμΆœν•˜μ—¬ 값을 λ‚΄λ©΄ λœλ‹€.

def process_data():
    """데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜"""
    sample_data = create_sample_data()
    print("1:", calculate_mean_std(sample_data))
    print("2:\n", calculate_correlation_matrix(sample_data))
    print("3:\n", handle_missing_values(sample_data, method='mean'))
    print("4:", get_column_statistics(sample_data, 'A'))

# ν•¨μˆ˜ 호좜
if __name__ == "__main__":
    process_data()

 


μ΅œμ’… 좜λ ₯값은 μ•„λž˜μ™€ κ°™λ‹€.