데이터 전처리 문제 실습

2024. 7. 19. 11:53·✨Today I Learned/Python
목차
  1. 20240719 TIL
  2. Seaborn 내장데이터 셋을 활용해서 데이터를 전처리 해보자!
  3. Q1. 'species' 열 값이 'setosa'인 데이터 선택하기
  4. Q2. 10부터 20까지의 행과 1부터 3까지의 열 선택
  5. tips 데이터셋을 활용해서 전처리를 해보자
  6. Q1. total_bill이 30 이상인 데이터만 선택하기
  7. Q2. 성별('sex')을 기준으로 데이터 그룹화하여 팁(tip)의 평균 계산
  8. Q3. 'day'와 'time'을 기준으로 데이터 그룹화하여 전체 지불 금액(total_bill)의 합 계산
  9. Q4. 'day' 열을 기준으로 각 요일별로 팁(tip)의 평균을 새로운 데이터프레임으로 만든 후, 이를 기존의 tips 데이터셋에 합쳐보자

20240719 TIL

 

Seaborn 내장데이터 셋을 활용해서 데이터를 전처리 해보자!

Q1. 'species' 열 값이 'setosa'인 데이터 선택하기

import seaborn as sns

iris_data = sns.load_dataset('iris')
setosa_data = iris_data.loc[iris_data['species'] == 'setosa']

print("Setosa 데이터:")
print(setosa_data.head())
  1. 데이터셋 불러오기 --> iris_data = sns.load_dataset('iris')
  2. 'species' 열 값이 'setosa'인 데이터 선택 --> setosa_data = iris.data.loc[iris_data['species'] == 'setosa]
  3. 선택된 데이터 확인 --> print("Setosa 데이터:") print(setosa_data.head())
더보기

결과값:


  • .loc() --> 특정 조건의 데이터셋 선택

 

Q2. 10부터 20까지의 행과 1부터 3까지의 열 선택

subset = iris_data.iloc[10:21, 1:4]

print("\nSubset 데이터:")
print(subset)
  1. 10부터 20까지의 행과 1부터 3까지의 열 선택 --> subset = iris_data.iloc[10:21, 1:4]
  2. 선택된 데이터 확인 --> print("\nSubset 데이터:") print(subset)
더보기

결과값:


.iloc() --> 특정 인덱스 범위의 데이터 선택

  행만 가져오기 행과 열 같이 가져오기
.loc df.loc[행이름] 
df.loc[[행여러개]] 
df.loc[행슬라이싱]
df.iloc[인덱스번호] 
df.iloc[[인덱스번호 여러개]] 
df.iloc[인덱스번호슬라이싱]
.iloc df.loc[ 행 , 열 ] df.iloc[ 행 , 열 ]
행,열에는 라벨 , 번호인덱스 모두 가능
슬라이싱의 경우 끝번호,라벨 포함 O
행,열에는 번호 인덱스만 가능
슬라이싱의 경우 끝번호 포함 X
행: 인덱스번호 1개 , [ 인덱스 여러개 ] , [ 인덱스번호 슬라이싱] 행: 인덱스번호 1개 , [ 인덱스 여러개 ] , [ 인덱스번호 슬라이싱]
열: 칼럼 1개 , [ 칼럼 여러개 ] , [ 칼럼이름 슬라이싱 ] 열: 칼럼번호 1개 , [ 칼럼번호 여러개 ] , [ 칼럼번호 슬라이싱 ]

 

tips 데이터셋을 활용해서 전처리를 해보자

Q1. total_bill이 30 이상인 데이터만 선택하기

import seaborn as sns

tips_data = sns.load_dataset('tips')

total_bills = tips_data.loc[tips_data['total_bill'] >= 30]
print(total_bills.head())
  1. 데이터셋 불러오기 --> tips_data = sns.load_dataset('tips)
  2. total_bill이 30 이상인 데이터만 선택 --> total_bills = tips_data.loc[tips_data['total_bill'] >= 30]
  3. 선택된 데이터 가져오기 --> print(total_bills.head())
더보기

결과값:

Q2. 성별('sex')을 기준으로 데이터 그룹화하여 팁(tip)의 평균 계산

grouped = tips_data.groupby('sex')['tip'].mean()

print("\n성별에 따른 팁 평균:")
print(grouped)
  1. 'sex'를 기준으로 데이터 그룹화하여 팁(tip)의 평균 계산 --> grouped = tips_data.groupby('sex')['tip'].mean()
  2. 그룹화된 데이터의 통계적 요약 확인 --> print("\n성별에 따른 팁 평균:") print(grouped)
더보기

결과값:


groupby() --데이터프레임을 그룹화하고, 그룹 단위로 데이터를 분할(split), 적용(apply), 결합(combine)하는 기능을 제공

 

Q3. 'day'와 'time'을 기준으로 데이터 그룹화하여 전체 지불 금액(total_bill)의 합 계산

grouped2 = tips_data.groupby(['day', 'time'])['total_bill'].sum()

print("\n요일과 시간별 전체 지불 금액 합계:")
print(grouped2)
  1. 'day'와 'time'을 기준으로 데이터 그룹화하여 전체 지불 금액(total_bill)의 합 계산 -->grouped2 =tips_data.groupby(['day', 'time'])['total_bill'].sum()
  2. 그룹화된 데이터의 통계적 요약 확인 --> print("\n요일과 시간별 전체 지불 금액 합계:") print(grouped2)
더보기

결과값:

 

Q4. 'day' 열을 기준으로 각 요일별로 팁(tip)의 평균을 새로운 데이터프레임으로 만든 후, 이를 기존의 tips 데이터셋에 합쳐보자

import seaborn as sns
import pandas as pd

tips_data = sns.load_dataset('tips')
print("Tips 데이터셋:")
print(tips_data.head())

avg_tip_per_day = tips_data.groupby('day')['tip'].mean().reset_index()
avg_tip_per_day.columns = ['day', 'avg_tip']

print("\n요일별 평균 팁 데이터:")
print(avg_tip_per_day)

merged_data = pd.merge(tips_data, avg_tip_per_day, on='day', how='left')

print("\n병합된 데이터:")
print(merged_data.head())
  1. 데이터셋 불러오기 --> tips_data = sns.load_dataset('tips')
  2. 'day'별 평균 팁 데이터 생성 --> avg_tip_per_day = tips_data.groupby('day')['tip'].mean().reset_index()
    avg_tip_per_day.columns = ['day', 'avg_tip']
  3. 'day' 열을 기준으로 기존의 tips 데이터셋과 새로 생성한 데이터셋 merge --> merged_data = pd.merge(tips_data, avg_tip_per_day, on='day', how='left')
  4.  데이터의 통계적 요약 확인 --> print("\n병합된 데이터:") print(merged_data.head())
더보기

결과값:


merge() -- QL의 JOIN 연산과 유사한 방식으로 데이터프레임을 합칠 수 있다.

  • left와 right: 병합할 데이터프레임 중 병합되는 기준이 되는 왼쪽(left)과 오른쪽(right) 데이터프레임
  • how: 병합 방법을 나타내는 매개변수로, 'inner', 'outer', 'left', 'right' 등의 옵션이 있다
    • 'inner': 공통된 키(열)를 기준으로 교집합을 만든다
    • 'outer': 공통된 키를 기준으로 합집합을 만든다
    • 'left': 왼쪽 데이터프레임의 모든 행을 포함하고 오른쪽 데이터프레임은 공통된 키에 해당하는 행만 포함
    • 'right': 오른쪽 데이터프레임의 모든 행을 포함하고 왼쪽 데이터프레임은 공통된 키에 해당하는 행만 포함
    • on: 병합 기준이 되는 열 이름(혹은 열 이름의 리스트)을 지정
      • left_on과 right_on: 왼쪽 데이터프레임과 오른쪽 데이터프레임에서 병합할 열 이름이 다른 경우에 사용
💡
확실히 쉽지 않다 .........
개념을 알고 문제를 푸는건데도 잘 모르는게 더 많았다. 그래서 문제를 풀때 계속 개념을 보면서 다시 풀었다.
특히 Q4는 내 기준 좀 어려웠다 ㅠㅠ 내가 만든 코드와 튜터쌤이 만든 코드가 좀 다른데 어쨌거나 결과값은 나왔기 때문이다.
좀 분석을 해봐야 할 것 같다. 그래도 그냥 파이썬보다 코드들이 생소해서 어렵게 느껴지긴 하지만 뭔가 재밌다(나름 희망적 ..)
이대로 열심히 복습하고 노력해야겠다 >,,<

'✨Today I Learned > Python' 카테고리의 다른 글

[Python] 문자열 내림차순으로 배치하기  (0) 2024.09.04
📊데이터 시각화 (Matplotilb)  (1) 2024.07.18
데이터 전처리 (Pandas)  (0) 2024.07.17
Python codekata 19번 - 정수 제곱근 판별  (1) 2024.07.11
파이썬 라이브 세션 3회차 개인과제  (1) 2024.07.10
  1. 20240719 TIL
  2. Seaborn 내장데이터 셋을 활용해서 데이터를 전처리 해보자!
  3. Q1. 'species' 열 값이 'setosa'인 데이터 선택하기
  4. Q2. 10부터 20까지의 행과 1부터 3까지의 열 선택
  5. tips 데이터셋을 활용해서 전처리를 해보자
  6. Q1. total_bill이 30 이상인 데이터만 선택하기
  7. Q2. 성별('sex')을 기준으로 데이터 그룹화하여 팁(tip)의 평균 계산
  8. Q3. 'day'와 'time'을 기준으로 데이터 그룹화하여 전체 지불 금액(total_bill)의 합 계산
  9. Q4. 'day' 열을 기준으로 각 요일별로 팁(tip)의 평균을 새로운 데이터프레임으로 만든 후, 이를 기존의 tips 데이터셋에 합쳐보자
'✨Today I Learned/Python' 카테고리의 다른 글
  • [Python] 문자열 내림차순으로 배치하기
  • 📊데이터 시각화 (Matplotilb)
  • 데이터 전처리 (Pandas)
  • Python codekata 19번 - 정수 제곱근 판별
임빵빵
임빵빵
헤맨 만큼 내 땅
임빵빵
mj.space
임빵빵
전체
오늘
어제
  • 분류 전체보기 (156)
    • 아티클스터디 (14)
    • ✨Today I Learned (41)
      • MySQL (11)
      • Python (15)
    • 이번 주 돌아보기 (11)
    • 자격증 (9)
      • ADsP (8)
      • SQLD (1)
    • CODEKATA (44)
    • Project (11)
    • Intern (0)
    • Marketing (26)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

링크

공지사항

인기 글

태그

데이터 전처리
오블완
아티클스터디
wil
Eda
스파르타코딩클럽
CodeKata
스파르타 코딩클럽
pandas
코드카타
내일배움카드
데이터 리터러시
데이터분석
아티클
태블로
SQL
사전캠프
회귀분석
심화프로젝트
프로그래머스
전처리
머신러닝
데이터분석가
데이터 문해력
ADsP
파이썬
programmers
기초
자격증
python

최근 댓글

최근 글

hELLO· Designed By정상우.v4.6.1
임빵빵
데이터 전처리 문제 실습
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.