본문 바로가기

(파이썬) DataHandling 기초 & 실습(2) - 데이터 슬라이싱, 필터링

Derrick 발행일 : 2024-04-01
728x90
반응형

 

데이터 다루는 실습(1)에 이어서
데이터를 불러와서 슬라이싱필터링을 통해
실제로 어떻게 활용될 수 있는지 학습해보자

 

 

 

# Data handling 기초 & 실습(1) 첨부 

2024.03.29 - [Machine Learning/Basic of Python (Colab)] - (sklearn) DataHandling 기초 & 실습 - 결측치 처리

 

(sklearn) DataHandling 기초 & 실습 - 결측치 처리

# 결측치 처리 - 일반적인 처리 방법 - sklearn을 이용한 처리 방법 - pandas를 이용한 처리 방법 파이썬 기본 함수와 특성을 이용해서 데이터를 다루는 실습을 해보자 1. Import & DataFrame 생성 결측치를

derrick.tistory.com

 

# 실습 파일 첨부 #

sales_data.csv
0.02MB
social1.csv
0.00MB
social2.csv
0.00MB
social3.csv
0.00MB

 


1. 데이터 불러오기

1) Google Drive Mount 하기 (Colab)

구글 드라이브에 있는 데이터를 마운트할 곳을 정하는 코드
from google.colab import drive
import pandas as pd
drive.mount('/content/test')

 

 # 데이터 불러오기

위와 같이 Mount된 파일들은 Local 환경과 동일하게 사용이 가능하다.
sales_df = pd.read_csv('test/MyDrive/data/data_handling/sales_data.csv')
social1_df = pd.read_csv('test/MyDrive/data/data_handling/social1.csv')
social2_df = pd.read_csv('test/MyDrive/data/data_handling/social2.csv')
social3_df = pd.read_csv('test/MyDrive/data/data_handling/social3.csv')

 

2) Local 환경에서 불러오기 (Jupyter)

Local 환경에서도 불러오는 연습을 해보고 실제로 잘 읽어왔는지 확인해보자
import pandas as pd

# 데이터 불러오기
sales_df = pd.read_csv('C:/Users/Desktop/test/50개 프로젝트로 머신러닝_패캠/수강생 강의자료_1/Part 1. 실무 중심의 데이터 분석 방법/Chapter 03. Basic of Python/Data/sales_data.csv')
social1_df = pd.read_csv('C:/Users/Desktop/test/50개 프로젝트로 머신러닝_패캠/수강생 강의자료_1/Part 1. 실무 중심의 데이터 분석 방법/Chapter 03. Basic of Python/Data/social1.csv')
social2_df = pd.read_csv('C:/Users/Desktop/test/50개 프로젝트로 머신러닝_패캠/수강생 강의자료_1/Part 1. 실무 중심의 데이터 분석 방법/Chapter 03. Basic of Python/Data/social2.csv')
social3_df = pd.read_csv('C:/Users/Desktop/test/50개 프로젝트로 머신러닝_패캠/수강생 강의자료_1/Part 1. 실무 중심의 데이터 분석 방법/Chapter 03. Basic of Python/Data/social3.csv')

 

[ sales_df / social1 / social2 ]

# 데이터별 설명 

- sales_df : 주단위로 판매되는 물건의 갯수
- social1~3_df : 판매량과 연관이 있는 데이터들

 

반응형

2. 데이터 다루기

1) 데이터 컬럼명 변경하기

 데이터의 컬럼명이 한글로 되어있는 경우가 많기 때문에 이를 영문으로 변경

 

sales_df.columns = ['date', 'sum']
sales_df.head(10)

 

 

# 소셜미디어(sns)에서 언급된 비율(ratio)
social1_df.columns = ['date', 'ratio1']
social1_df.head(10)

 

 

# 해당 아이템들이 검색 채널별로 얼마나 검색되었는지 
social2_df.columns = ['date', 'key1', 'key2', 'key3', 'key4']
social2_df

 

 

# social1_df 와는 다른 채널에서 언급된 비율
social3_df.columns = ['date', 'ratio2']
social3_df

 

2) 데이터들 합치기 

Inner Merge(Join)을 통해 데이터 합쳐보자
→ 동일하게 있는 데이터(date)에 대해서 합치는 원리
→ 이 경우, 모든 데이터들이 동일하게 가지고 있는 데이터들만 남게 됨.
 즉, inner merge를 할 경우 merge 시키는 데이터들이 공통으로 가지고 있는 데이터들만 합쳐서 남겨된다.
 (on = 'date')
# Inner Merge(Join)을 통해 데이터 합치기
result_df = sales_df.merge(social1_df, on='date', how='inner')
result_df = result_df.merge(social2_df, on='date', how='inner')
result_df = result_df.merge(social3_df, on='date', how='inner')
result_df

 

위의 작업을 1줄로 처리할 수도 있지만, 가독성을 위해서는 따로따로 하는게 좋을 수 있다.
→ 아래 코드는 한 줄로 작업하는 방법. merge 함수를 계속 붙이면서 늘릴 수 있다.

 

test_df = sales_df.merge(social1_df, on='date', how='inner').merge(social2_df, on='date', how='inner').merge(social3_df, on='date', how='inner')
test_df

3) iloc를 이용하여 원하는 데이터만 불러오기

feature selection 등의 feature에 대해서 어떠한 작업을 할 때, column들 중 선택적으로 수행하는 경우가 많다. 
→ 아래 데이터에서는 날짜를 제외한 모든 feature, 그리고 모든 행에 대해서 

 

# 2번째 컬럼부터 마지막 컬럼까지의 데이터만 불러오기

 

test_df.iloc[:,1:]

 

 

# 2번째 컬럼부터 마지막 이전까지의 컬럼

 

test_df.iloc[:,1:-1]

 

 

# 슬라이싱 응용 - target 데이터만 추출하기 (열 분리)

모든 행과 2번째와 마지막 열에 해당하는 데이터만 불러오고자 한다면?
→ target인 데이터가 포함된 경우, 학습할 때 제외하는 용도로 활용할 수 있다.

 

test_df.iloc[:, [2,-1]]

 

위와 같이 불러올 데이터의 열을 지정할 수 있다.

 

# Training과 Test 데이터를 나누기 (행 분리)

Training과 Test 데이터셋을 나눌때는 슬라이싱으로 행을 구분해서 불러오면 간단히 할 수 있다.
→ 아래는 traing dataset을 전체 데이터의 60%를 분배하고, 그 외는 test dataset으로 했을 때의 코드

 

test_df.iloc[0:int(len(test_df) * 0.6), :]

 

[ 60%에 해당되는 데이터는 training ]

 

test_df.iloc[int(len(test_df) * 0.6):, :]

 


3. 데이터 필터링하기 (loc 활용)

loc를 이용하여 특정 컬럼의 조건으로 걸어서 데이터 필터링해서 추출

 

test_df.loc[(test_df['ratio1'] > 40.0) & (test_df['ratio2'] > 30.0)]

 

ratio1이 40 초과, ratio2가 30을 초과한 데이터들만 추출
→ & 연산자를 이용해야 한다.
→ 'and'를 사용하면, 에러가 나온다. return되는 값이 다르다.

 

 

 

 

학습 참고 : 50개 프로젝트로 완벽하게 끝내는 머신러닝 SIGNATURE (패스트캠퍼스)

 

 

댓글