13장: 데이터 분석

데이터 분석은 데이터를 수집, 정리, 해석하여 의미 있는 정보를 도출하는 과정입니다. 파이썬에서는 데이터 분석을 위한 강력한 라이브러리를 제공하며, 이 장에서는 `pandas`와 `numpy`를 사용하여 데이터를 분석하는 방법에 대해 알아보겠습니다.


#### 13.1 `pandas` 라이브러리


`pandas`는 데이터 조작 및 분석을 위한 고성능, 사용이 간편한 데이터 구조와 데이터 분석 도구를 제공합니다. 먼저 `pandas` 라이브러리를 설치해야 합니다.


```sh

pip install pandas

```


#### 13.2 데이터프레임 생성


데이터프레임(DataFrame)은 `pandas`의 주요 데이터 구조로, 테이블 형식의 데이터를 저장합니다.


```python

import pandas as pd


# 데이터프레임 생성

data = {

    'name': ['Alice', 'Bob', 'Charlie', 'David'],

    'age': [25, 30, 35, 40],

    'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']

}


df = pd.DataFrame(data)

print(df)

```


#### 13.3 데이터프레임 읽기 및 쓰기


데이터를 파일에서 읽고 파일로 저장할 수 있습니다. `pandas`는 다양한 파일 형식을 지원합니다.


```python

# CSV 파일 읽기

df = pd.read_csv('data.csv')

print(df)


# CSV 파일 쓰기

df.to_csv('output.csv', index=False)

```


#### 13.4 데이터 탐색


데이터프레임의 기본적인 정보를 확인할 수 있습니다.


```python

# 데이터프레임의 크기 확인

print(df.shape)


# 데이터프레임의 요약 정보 확인

print(df.info())


# 데이터프레임의 기본 통계량 확인

print(df.describe())

```


#### 13.5 데이터 선택 및 필터링


데이터프레임에서 특정 열과 행을 선택하고 필터링할 수 있습니다.


```python

# 특정 열 선택

print(df['name'])


# 조건을 사용한 필터링

adults = df[df['age'] > 30]

print(adults)


# 특정 행 선택 (인덱스로)

print(df.iloc[1])  # 두 번째 행

```


#### 13.6 데이터 추가 및 삭제


데이터프레임에 열과 행을 추가하고 삭제할 수 있습니다.


```python

# 열 추가

df['salary'] = [50000, 60000, 70000, 80000]

print(df)


# 행 추가

new_row = {'name': 'Eve', 'age': 28, 'city': 'San Francisco', 'salary': 90000}

df = df.append(new_row, ignore_index=True)

print(df)


# 열 삭제

df = df.drop(columns=['salary'])

print(df)


# 행 삭제

df = df.drop(index=[4])

print(df)

```


#### 13.7 데이터 정렬


데이터프레임을 특정 열을 기준으로 정렬할 수 있습니다.


```python

# 나이 기준으로 오름차순 정렬

df = df.sort_values(by='age')

print(df)


# 이름 기준으로 내림차순 정렬

df = df.sort_values(by='name', ascending=False)

print(df)

```


#### 13.8 데이터 그룹화


`groupby` 메서드를 사용하여 데이터를 그룹화하고 집계할 수 있습니다.


```python

# 도시에 따른 평균 나이 계산

grouped = df.groupby('city')['age'].mean()

print(grouped)

```


#### 13.9 결측값 처리


결측값(NaN)을 처리하는 방법을 알아봅니다.


```python

# 결측값 확인

print(df.isnull().sum())


# 결측값 대체

df['age'] = df['age'].fillna(df['age'].mean())

print(df)


# 결측값 제거

df = df.dropna()

print(df)

```


#### 13.10 데이터 시각화


`pandas`는 `matplotlib`와 통합되어 데이터 시각화를 쉽게 할 수 있습니다.


```python

import matplotlib.pyplot as plt


# 나이 분포 히스토그램 그리기

df['age'].hist()

plt.xlabel('나이')

plt.ylabel('빈도수')

plt.title('나이 분포')

plt.show()

```


#### 13.11 `numpy` 라이브러리


`numpy`는 대규모 다차원 배열과 행렬을 쉽게 처리할 수 있도록 지원하는 라이브러리입니다. 먼저 `numpy` 라이브러리를 설치해야 합니다.


```sh

pip install numpy

```


`numpy` 배열을 생성하고 조작하는 기본 예제입니다.


```python

import numpy as np


# 배열 생성

arr = np.array([1, 2, 3, 4, 5])

print(arr)


# 배열의 크기 확인

print(arr.shape)


# 배열의 요소 접근

print(arr[0])


# 배열의 요소 변경

arr[0] = 10

print(arr)

```


#### 13.12 배열 연산


`numpy`는 배열 간의 다양한 연산을 지원합니다.


```python

# 배열 덧셈

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

result = arr1 + arr2

print(result)


# 배열 곱셈

result = arr1 * arr2

print(result)


# 배열의 모든 요소에 대한 연산

result = arr1 * 2

print(result)

```


이상으로, 파이썬에서 데이터 분석을 수행하는 방법에 대해 알아보았습니다. 다음 장에서는 머신러닝에 대해 더 자세히 알아보겠습니다. 질문이나 요청사항이 있으시면 댓글로 남겨주세요!


---


이 글의 내용은 GoalKicker.com의 Python Notes for Professionals 책을 참조하였습니다.

댓글