Sam Park Blog.

Sam의 워드프레스 블로그

Sam Park Blog.

Sam의 워드프레스 블로그

미분류

‘처음이야? 파이썬 데이터 분석’ 4주차 스터디 후기:시각화부터 전처리까지


이번 파이썬 데이터 분석 4주차 스터디에서는 데이터 시각화와 데이터 전처리의 기초를 다루었습니다. Matplotlib과 Seaborn을 활용한 데이터 시각화 기법을 익혔으며, 데이터 분석의 필수 과정인 데이터 전처리에 대한 이해를 높였습니다.



4장 Matplotlib

데이터 분석 결과를 효과적으로 시각화하기 위해 Matplotlib과 Seaborn 라이브러리를 학습했습니다.



4.1 Matplotlib 개요

Matplotlib은 파이썬의 기본적인 데이터 시각화 라이브러리입니다. 다양한 형태의 그래프를 생성할 수 있습니다.



4.2 Matplotlib 기능

주요 그래프 유형을 실습하며 Matplotlib의 기능을 익혔습니다.



선 그래프(Line Plot): 데이터의 추세 변화를 표현합니다.

import matplotlib.pyplot as plt
import numpy as np

x = [0,1,2,3]
y = [9,8,7,6]
plt.plot(x,y)
plt.title('선 그래프')
plt.show()



막대 그래프(Bar Chart): 범주형 데이터의 값을 비교합니다.

categories = ['학생1', '학생2']
values = [85, 92]
x = np.arange(len(categories))
plt.bar(x, values)
plt.title('학생 성적')
plt.xticks(x, categories)
plt.show()



파이 차트(Pie Chart): 전체 대비 각 부분의 비율을 나타냅니다.

labels = ['피자', '햄버거']
sizes = [40, 30]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('음식 선호도')
plt.show()



선점도(Scatter Plot): 두 변수 간의 관계를 시각화합니다.

x = [1.5, 2.5]
y = [50, 60]
plt.scatter(x, y)
plt.title('키와 몸무게 관계')
plt.show()



히스토그램(Histogram): 데이터의 분포를 보여줍니다.

data = np.random.randn(100)
plt.hist(data, bins=10)
plt.title('데이터 분포')
plt.show()



서브플롯(Subplot): 여러 그래프를 한 그림에 배치하여 비교합니다.

fig, axs = plt.subplots(1, 2)
axs[0].plot([1, 2], [1, 2])
axs[1].bar([1, 2], [2, 1])
plt.show()



플롯 이미지 저장: 생성된 그래프를 이미지 파일로 저장할 수 있습니다.

plt.plot([1,2,3],[1,2,3])
plt.savefig('sample_plot.png')
plt.show()




4.3 Seaborn 개요 및 기능

Seaborn은 Matplotlib 기반의 통계 시각화 라이브러리로, 보다 정교하고 아름다운 그래프를 쉽게 생성할 수 있습니다.



히트맵(Heatmap): 데이터 간의 관계를 색상 강도로 표현합니다.

data_heatmap = [[100, 150], [80, 120]]
sns.heatmap(data_heatmap, annot=True, fmt='d', cmap='Blues')
plt.title('히트맵')
plt.show()



클러스터맵(Clustermap): 히트맵에 군집 분석 기능을 추가하여 데이터 패턴을 파악합니다.

df_cluster = pd.DataFrame({'A': [1,2], 'B': [3,4]})
sns.clustermap(df_cluster, annot=True, fmt='d')
plt.title('클러스터맵')
plt.show()



박스플롯(Boxplot): 데이터의 분포와 이상치를 시각적으로 나타냅니다.

df_box = pd.DataFrame({'수익': [1000, 1500], '비용': [800, 1200]})
sns.boxplot(data=df_box)
plt.title('박스플롯')
plt.show()



카운트플롯(Countplot): 범주형 데이터의 각 카테고리별 빈도를 막대로 표시합니다.

df_count = pd.DataFrame({'지역': ['서울', '부산', '서울']})
sns.countplot(data=df_count, x='지역')
plt.title('카운트 플롯')
plt.show()




5장 데이터 전처리

데이터 전처리는 원본 데이터를 분석에 적합한 형태로 가공하는 필수 과정입니다.



5.1 데이터 준비 및 불러오기

데이터 분석을 위해 다양한 형식의 데이터를 pandas를 통해 불러오는 방법을 학습했습니다.

CSV 파일 불러오기

import pandas as pd

df_csv = pd.read_csv('data.csv')
print(df_csv.head())



엑셀 파일 불러오기

df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df_excel.head())



JSON 파일 불러오기

import json

with open('data.json', 'r') as json_file
  data_json = json.load(json_file)
df_json = pd.DataFrame(data_json)
print(df_json.head())




5.2 데이터 탐색

데이터를 불러온 후에는 그 구조와 특성을 파악하는 과정을 거칩니다.



데이터 구조 이해: df.info()를 사용하여 데이터프레임의 전반적인 정보를 확인합니다.

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



통계적 요약: df.describe()를 통해 숫자형 데이터의 요약 통계를 확인합니다.

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




5.3 데이터 전처리

실제 데이터에 흔히 존재하는 결과값과 중복 데이터를 처리하는 방법을 학습했습니다.

import pandas as pd
data_dict = [
    {'사번': 25001, '이름': '김철수', '나이': 20, '부서': '정보보호부'},
    {'사번': 25002, '이름': '이영희', '나이': None, '부서': '기술부'},
    {'사번': 25001, '이름': '김철수', '나이': 20, '부서': '정보보호부'}
]
df = pd.DataFrame(data_dict)
print(df)



데이터 결과값 처리

결과값 확인: isNull().sum()으로 각 열의 결과값 개수를 확인합니다.

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



결과값 제거: dropna()를 사용하여 결측값이 포함된 행또는 열을 제거합니다.

df_dropped_rows = df.dropna()
print(df_dropped_rows)



결측값 대체: fillna()를 사용하여 평균, 중앙값, 최빈값 등으로 결측값을 대체합니다.

df = df.fillna({'나이': df['나이'].mean()})
print(df)



중복 데이터 제거

drop_duplicates()를 사용하여 중복된 행을 제거합니다.

df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)




5.4 데이터 변환

데이터 분석 목적에 맞게 데이터의 형태를 변경하는 과정을 학습했습니다.

import pandas as pd

data_dict = [
  {'사번': 25001, '이름': '김철수', '나이': 20, '입사일': '2002-03-02', '부서': '정보보호부'},
  {'사번': 25002, '이름': '이영희', '나이': 21, '입사일': '2001-03-02', '부서': '기술부'},
  {'사번': 25003, '이름': '박민수', '나이': 22, '입사일': '2000-03-02', '부서': '생산부'},
]

df = pd.DataFrame(data_dict)
print(df)



데이터 형식 변환: pd.to_datetime() 등을 사용하여 데이터 타입을 변경합니다.

df['입사일'] = pd.to_datetime(df['입사일'])
print(df.dtypes)



범주형 데이터 인코딩: pd.get_dummies() 를 사용하여 범주형 데이터를 숫자형으로 변환합니다.

df_encoded = pd.get_dummies(df, columns=['부서'])
print(df_encoded.head())



데이터 정규화 및 표준화: 데이터 스케일을 조정하여 분석의 정확도를 높입니다.

df['나이_정규화'] = (df['나이'] - df['나이'].min()) / (df['나이'].max() - df['나이'].min())
print(df['나이_정규화'].describe())



데이터 인덱싱: 특성 조건에 맞는 데이터를 선택합니다.

print(df[df['나이'] >= 21])



데이터 슬라이싱: 원하는 범위의 행이나 열을 선택합니다.

print(df.iloc[:, 0:2])



데이터 정렬: sort_values()를 사용하여 데이터를 정렬합니다.

print(df.sort_values('나이'))




5.5 데이터 저장

분석이 완료된 데이터를 다양한 파일 형식으로 저장하는 방법을 학습했습니다.

import pandas as pd

data_dict = [
  {'사번': 25001, '이름': '김철수', '나이': 20, '입사일': '2002-03-02', '부서': '정보보호부'},
  {'사번': 25002, '이름': '이영희', '나이': 21, '입사일': '2001-03-02', '부서': '기술부'},
  {'사번': 25003, '이름': '박민수', '나이': 22, '입사일': '2000-03-02', '부서': '생산부'},
]

df = pd.DataFrame(data_dict)
print(df)



CSV 형식으로 저장: to_csv()

df.to_csv('data_out.csv', index=False, encoding='utf-8-sig')



Excel 형식으로 저장: to_excel()

df.to_excel('data_out.xlsx', index=False)



JSON 형식으로 저장: to_json()

df.to_json('data_out.json', orient='records', force_ascii=False)




4주자 마무리

이번 4주차 스터디를 통해 Matplotlib과 Seaborn을 활용한 데이터 시각화 기법을 익혔습니다. 또한, 데이터 전처리의 중요성을 이해하고 데이터 불러오기, 탐색, 결측값 및 중복 데이터 처리, 데이터 변환, 그리고 저장에 이르는 일련의 과정을 실습했습니다. 특히 DataFrame을 활용한 데이터 조작 및 분석 기법은 실제 데이터 분석에서 매우 유용하게 활용될 것이라는 점을 깨달았습니다.



답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다