본문 바로가기

DS/DS2

데이터 분석에 필요한 Python 기본 문법

[ ✅ 기본 문법 ]

🔹 변수와 데이터 타입

Python에서 주로 사용하는 데이터 타입:

  • 정수 (int): a = 10
  • 실수 (float): b = 3.14
  • 문자열 (str): c = "Hello"
  • 불리언 (bool): d = True
  • 리스트 (list): e = [1, 2, 3] (변경 가능)
  • 튜플 (tuple): f = (4, 5, 6) (변경 불가능)
  • 딕셔너리 (dict): g = {"name": "Alice", "age": 25}
  • 집합 (set): h = {1, 2, 3, 4, 5} (중복 허용 안 함)
a = 10
b = 3.14
c = "Hello"
d = True
e = [1, 2, 3]
f = (4, 5, 6)
g = {"name": "Alice", "age": 25}
h = {1, 2, 3, 4, 5}

print(type(a), type(b), type(c), type(d), type(e), type(f), type(g), type(h))

[ ✅ 제어 ]

🔹 조건문 (if, elif, else)

x = 10
if x > 5:
    print("x는 5보다 큼")
elif x == 5:
    print("x는 5임")
else:
    print("x는 5보다 작음")

🔹 반복문 (for, while)

# for문
for i in range(5):
    print(i)

# while문
count = 0
while count < 5:
    print(count)
    count += 1

🔹 리스트 컴프리헨션 (List Comprehension)

squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares)  # [0, 4, 16, 36, 64]

[ ✅ 함수 ]

🔹 함수 (def)

def add(a, b):
    return a + b

print(add(3, 4))  # 7

🔹 람다 함수 (lambda)

square = lambda x: x**2
print(square(5))  # 25

[ ✅ 행렬 (Numpy 배열)  ]

 

Numpy는 데이터 분석에서 숫자 연산을 빠르고 효율적으로 수행할 수 있도록 도와줍니다. 다차원 배열을 쉽게 다룰 수 있으며, 벡터 연산과 행렬 연산이 가능하여 데이터 처리 속도를 향상시킵니다.

 

🔹 Numpy 배열(행렬) 생성 및 기본 연산

import numpy as np

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

# 2차원 배열 (행렬)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

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

print(arr1.shape)  # (5,) - 1차원 벡터
print(arr2.shape)  # (2, 3) - 2행 3열 행렬
print(arr3.shape)  # (2, 2, 2) - 3차원 배열

 

🔹 Numpy를 활용한 데이터 분석 예제

import numpy as np

랜덤 데이터 생성 (10x3 행렬)
data = np.random.rand(10, 3)

각 열의 평균 계산
col_means = np.mean(data, axis=0)
print("각 열의 평균값:", col_means)

각 행의 평균 계산
row_means = np.mean(data, axis=1)

# 열(column)의 평균 (결측치 제외)
col_mean_nan = np.nanmean(data, axis=0)

# 행(row)의 평균 (결측치 제외)
row_mean_nan = np.nanmean(data, axis=1)


특정 조건을 만족하는 값 필터링 (0.5보다 큰 값)
filtered_data = data[data > 0.5]
print("0.5보다 큰 값들:", filtered_data)

[ ✅ 튜플 (Tuple)  ]

튜플은 리스트와 비슷하지만 불변(Immutable) 이라는 특징을 갖고 있어 데이터 변경이 불가능합니다. 데이터 분석에서는 고정된 데이터 구조를 저장할 때 사용됩니다.

# 튜플 생성
t = (1, 2, 3, "hello", (4, 5))
print(t[0])  # 1
print(t[-1])  # (4,5)

# 튜플을 활용한 여러 개의 값 반환
def get_statistics():
    mean = 10
    std = 2.5
    median = 9
    return mean, std, median  # 튜플 형태로 반환됨

mean, std, median = get_statistics()
print(f"평균: {mean}, 표준편차: {std}, 중앙값: {median}")

[ ✅ 딕셔너리 (Dictionary) ]

딕셔너리는 키(Key)와 값(Value)로 이루어진 데이터 구조 로, 데이터를 빠르게 조회하고 수정할 수 있습니다. 데이터 분석에서는 JSON 데이터 처리, 데이터 매핑, 그룹화 등에 유용하게 사용됩니다.

 

🔹 기본 개념 

# 딕셔너리 생성
data = {
    "name": "Alice",
    "age": 25,
    "scores": [85, 90, 95]
}

# 특정 값 가져오기
print(data["name"])  # Alice
print(data["scores"])  # [85, 90, 95]

🔹 활용 예제

# 학생들의 시험 점수 데이터
students_scores = {
    "Alice": [85, 90, 88],
    "Bob": [78, 81, 85],
    "Charlie": [92, 95, 93]
}

# 학생별 평균 점수 계산
for name, scores in students_scores.items():
    avg_score = sum(scores) / len(scores)
    print(f"{name}의 평균 점수: {avg_score:.2f}")

 

 

🔹 행렬, 튜플, 딕셔너리를 함께 활용한 데이터 분석 예제

import numpy as np

# 학생별 성적 데이터 (딕셔너리 사용)
students_data = {
    "Alice": (85, 90, 88),  # 튜플 사용 (불변 데이터)
    "Bob": (78, 81, 85),
    "Charlie": (92, 95, 93)
}

# 데이터 행렬로 변환
scores_matrix = np.array(list(students_data.values()))

# 학생별 평균 점수 계산
average_scores = np.mean(scores_matrix, axis=1)

# 딕셔너리에 평균 점수 추가
for i, (name, scores) in enumerate(students_data.items()):
    print(f"{name}의 평균 점수: {average_scores[i]:.2f}")

 

1. students_data

  • students_data는 학생 이름을 키(key), 점수를 값(value) 으로 저장하는 딕셔너리(dict) 입니다.
  • 각 학생의 점수는 튜플(tuple) 로 저장되며, 튜플은 불변(immutable) 이므로 데이터가 변경되지 않습니다.

2. 데이터를 행렬(numpy array)로 변환

- scores_matrix = np.array(list(students_data.values()))

  • students_data.values()를 사용하여 학생들의 점수만 리스트 형태로 가져옴
  • list()로 변환하여 리스트 형태의 데이터 로 만듦
  • np.array()를 사용해 2차원 Numpy 배열(행렬) 로 변환. scores_matrix는 각 행(row)이 학생 1명의 점수를 의미하는 2차원 행렬 이 됩니다.
list(students_data.values()) 
# 출력: [(85, 90, 88), (78, 81, 85), (92, 95, 93)]

scores_matrix
# 출력:
# array([[85, 90, 88],
#        [78, 81, 85],
#        [92, 95, 93]])

 

 

3. 학생 별 평균 점수 계산

- np.mean(scores_matrix, axis=1)
각 행(row)에 대해 평균을 계산 (즉, 각 학생별 평균 점수)

 

4. 딕셔너리에 평균 점수 추가 & 출력

for i, (name, scores) in enumerate(students_data.items()):
    print(f"{name}의 평균 점수: {average_scores[i]:.2f}")

  • students_data.items()를 사용하여 (이름, 점수) 쌍을 가져옴
  • enumerate()를 사용하여 i (인덱스)와 (name, scores) (학생 이름, 점수)를 동시에 가져옴
  • average_scores[i]를 사용하여 학생별 평균 점수를 매칭하여 출력

 

 

 

'DS > DS2' 카테고리의 다른 글

이론 1  (0) 2025.02.25
Numpy, Pandas  (0) 2025.02.21
메소드 정리  (0) 2025.02.20