안녕하세요! 오늘은 본캠프 14일차입니다!!!!
오늘은 사전투표 첫날이라 아침에 투표도 하고 왔어요! 🗳️
오늘은 데이터 전처리 & 시각화 3주차 강의를 들었습니다!
01. Pandas 알아보기
1) Pandas 알아보기
- import 명령어를 통해서 pandas 라이브러리를 불러오기
import pandas as pd
- 오픈소스 데이터 셋을 불러오기
import seaborn as sns
# seaborn은 데이터를 시각화 하는 라이브러리 중 하나!
# 에러날 경우 !pip install seaborn #실행
data = sns.load_dataset('tips')
# tips라는 이름의 데이터 셋을 불러와서 data 변수에 저장
data
# 데이터 출력
저는 맥북이라 데이터를 불러오는 과정에서 계속 url오류가 작동해서 seaborn에서 파일을 다운받아서 했어요..!
2) 데이터 불러오기
Tip 파일 경로 찾는 방법
- Window
- 파일 탐색기(File Explorer)를 사용하여 파일 경로 찾기:
- 파일 탐색기를 열고 원하는 파일 또는 폴더를 찾은 후, 주소 표시줄(Address Bar)에 파일 경로가 표시됩니다. 이 경로를 복사하여 사용하거나, 마우스 오른쪽 버튼을 클릭하고 "속성(Properties)"을 선택하면 파일 또는 폴더의 속성 창에서 경로를 확인할 수 있습니다.
- 명령 프롬프트(Command Prompt)를 사용하여 파일 경로 찾기:
- 명령 프롬프트(cmd)를 열고, cd 명령어를 사용하여 원하는 디렉토리로 이동합니다. 그리고 pwd 명령어를 입력하면 현재 디렉토리의 경로를 확인할 수 있습니다.
- Mac
- Finder를 사용하여 파일 경로 찾기:
- Finder를 열고, 원하는 파일 또는 폴더를 찾은 후, 상단의 경로 표시줄(Address Bar)에 파일 경로가 표시됩니다. 이 경로를 복사하여 사용하거나, 파일 또는 폴더를 선택한 후 마우스 오른쪽 버튼을 클릭하여 "정보 보기(Get Info)"를 선택하면 파일 또는 폴더의 경로를 확인할 수 있습니다.
- 터미널(Terminal)을 사용하여 파일 경로 찾기:
- 터미널을 열고, pwd 명령어를 입력하면 현재 작업 디렉토리의 경로를 확인할 수 있습니다.
- 엑셀/CSV 데이터 불러오기
# pd.read_excel('파일경로/파일명.확장자')
# 엑셀 불러오기
pd.read_excel('./파일명.xlsx') # ./ ==> 현재 내가 있는 위치라는 의미
# csv 파일 불러오기
pd.read_csv('./파일명.xlsx')
3) 데이터 저장하기
- pd.to_csv(’파일경로/파일명.확장자’ , index = False)
- pd.to_excel(’파일경로/파일명.확장자’ , index = False)
4) 인덱스
- 인덱스 : 데이터프레임(DataFrame) 또는 시리즈(Series)의 각 행 또는 각 요소에 대한 식별자입니다.
- DataFrame 자료구조에도 인덱스를 설정할 수 있음
- 0부터 시작하는 숫자 뿐아니라 임의로 문자로 적용할 수 있음
- 아예 처음부터 파일 불러올때 , 인덱스를 지정하는 것도 가능
- 인덱스의 특징
- 고유성(Uniqueness): 각 행은 유일한 인덱스 값을 가져야함. 중복된 인덱스 값을 가질 수 없음.
- 불변성(Immutability): 불변성을 가진다. 즉, 한 번 생성된 인덱스는 변경(수정)할 수 없습니다.
- 단, 새로운 값을 할당하여 기존 인덱스를 대체하는 것은 가능.
- # Pandas에서 사용자가 직접 설정한 인덱스를 변경하는 예시 import pandas as pd # 사용자가 직접 인덱스를 설정한 데이터프레임 생성 df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3']) # 인덱스 변경 (대체) df.index = ['new_idx1', 'new_idx2', 'new_idx3'] print(df)
- 조작 및 탐색(Manipulation and Retrieval): 인덱스를 사용하여 데이터프레임 또는 시리즈의 특정 행을 선택하거나 탐색할 수 있습니다.
- 정렬(Sorting): 인덱스를 기준으로 데이터프레임 또는 시리즈의 행을 정렬할 수 있습니다.
- 인덱스 활용하기 (set_index)
- set_index() → 특정 컬럼에 들어있는 값을 인덱스로 활용하기
- # df가 가지고 있는 특정 컬럼명을 기준으로 인덱스를 설정하기
data = df.set_index('컬럼명')
data.head()
# 불러올때 인덱스 지정하기
pd.read_csv('./data/file.csv' , index_col = '컬럼정보')
pd.read_csv('./data/file.csv' , index_col = 0) # 0부터 시작
02. 데이터 전처리 - 컬럼
1) 컬럼(Column)
- 컬럼
- 데이터프레임(DataFrame)의 열(또는 변수)을 나타냅니다.
- 데이터프레임은 행과 열로 구성되며, 각 열은 서로 다른 종류의 데이터를 담고 있습니다.
- 데이터프레임의 세로 방향에 있는 데이터들을 컬럼이라고 부릅니다.
- 컬럼의 특징
- 고유한 이름(라벨)을 가지고 있으며, 해당 컬럼의 데이터를 식별하는 데 사용
- 특정한 종류의 데이터를 담고 있고 숫자, 문자열, 날짜 등 다양한 유형의 데이터를 포함할 수 있음
- 시리즈(Series) 객체로 구성되어 있으며, 시리즈는 동일한 데이터 유형을 가진 1차원 배열과 유사함
- 데이터프레임의 일부로 간주되며, 해당 열의 데이터를 조작하고 접근할 수 있는 인터페이스를 제공함
- 예시) import pandas as pd
# 데이터프레임 생성
data = {
'이름': ['Alice', 'Bob', 'Charlie'],
'나이': [25, 30, 35],
'성별': ['여', '남', '남']
}
df = pd.DataFrame(data)
# 각 컬럼 출력
print(df['이름']) # '이름' 컬럼 출력
print(df['나이']) # '나이' 컬럼 출력
print(df['성별']) # '성별' 컬럼 출력 - 컬럼명 변경하기
- pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])
03. 데이터 전처리 - 데이터 확인
1) 데이터 확인
.head()
data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌
.Info()
data.info()
# null 값을 확인할때도 활용
.describe()
data.describe()
# 숫자값에 대해서만 기초통계량 확인이 가능합니다.
- 데이터의 결측치(null)가 있는지?
- 결측치 제거하는 방법
- # 결측치 확인 : isnull()
df.isnull().sum() # 이렇게하면 결측치가 몇개있는지도 알 수 있어요 !
# 결측치 제거 : dropna()
df.dropna()
- 데이터 중복 데이터는 없는지?
- 중복 데이터 제거하는 방법
- # 중복 데이터 확인
df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3'])
# 중복 데이터 제거
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])
- 데이터 이상치는 없는지?
- 이상치 처리하는 방법
- # IQR (Interquartile Range) 방법 찾아보기
# 참고 : https://www.scribbr.com/statistics/interquartile-range/
# IQR 계산
Q1 = df['컬럼1'].quantile(0.25)
Q3 = df['컬럼1'].quantile(0.75)
IQR = Q3 - Q1
# 이상치 기준 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 이상치 제거
df[(df['컬럼1'] >= lower_bound) & (df['컬럼1'] <= upper_bound)]
- 데이터 타입을 알맞게 들어가있는지? ex) 날짜, 숫자
- # 데이터 타입 변경을 원한다면 !
df['column_name'].astype(int)
df['column_name'].astype(float)
df['column_name'].astype(str)
df['column_name'].astype(bool)
df['column_name'].astype('category')
df['column_name'].astype('datetime64[ns]')
df['column_name'].astype(complex)
df['column_name'].astype(object)
- # 데이터 타입 변경을 원한다면 !
2) 데이터 타입 변경

04. 데이터 전처리 - 데이터 선택
1) lioc, loc
iloc은 정수 기반의 인덱스를 사용하고, loc은 레이블 기반의 인덱스를 사용합니다
.iloc[로우,컬럼] : 인덱스 번호로 선택하기
행번호(로우)와 열번호(컬럼)를 통해 특정 행과 열 데이터를 선택할 수 있습니다.
data.iloc[0,2]
#행과 열 번호를 통해 특정 데이터를 선택할 수 있음
import pandas as pd
# 샘플 데이터프레임 생성
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)
# iloc을 사용하여 특정 행과 열 선택
selected_data = df.iloc[1:4, 0:2] # 인덱스 1부터 3까지의 행과 0부터 1까지의 열 선택
print(selected_data)
.loc[로우,컬럼] : 이름으로 선택하기
인덱스가 번호가 아니고 특정 문자일 경우
data.loc['행이름' , '컬럼명']
# 행이름과 컬럼명을 통해서도 특정 데이터를 선택할 수 있음
import pandas as pd
# 샘플 데이터프레임 생성
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# loc을 사용하여 특정 행과 열 선택
selected_data = df.loc['b':'d', 'A':'B'] # 레이블 'b'부터 'd'까지의 행과 'A'부터 'B'까지의 열 선택
print(selected_data)
05. 데이터 전처리 - 불리언 인덱싱
- Boolean Indexing이란?
- 조건을 이용하여 데이터프레임에서 특정 조건을 만족하는 행을 선택하는 방법
- 데이터를 필터링하거나 원하는 조건을 만족하는 행을 추출할 수 있음
- 주로 불리언(Boolean) 값을 가지는 조건식을 사용하여 데이터프레임을 인덱싱하는 방법
- 조건식에 따라 각 행이 True 또는 **False**로 평가되며 이를 바탕으로 데이터프레임을 필터링
💡 Boolean Indexing 사용 방법
- 단일 조건으로 필터링:
- 특정 열의 값을 기준으로 조건을 설정하여 해당 조건을 만족하는 행을 선택합니다.
- # 'age' 열에서 30세 이상인 행 필터링
df[df['age'] >= 30]
- 여러 조건으로 필터링:
- 여러 개의 조건을 조합하여 복합적인 필터링을 수행할 수 있습니다.
- # 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링
df[(df['age'] >= 30) & (df['gender'] == 'Male')]
- 조건에 따른 특정 컬럼 필터링:
- 조건을 만족하는 특정 열만 선택할 수 있습니다.
- # 'age' 열에서 30세 이상인 경우의 'name' 열만 선택
df.loc[df['age'] >= 30, 'name']
- isin()을 활용한 필터링:
- 리스트를 활용하여 여러 값들을 포함하는 행을 선택할 수 있습니다.
- # 'gender' 열에서 'Male' 또는 'Female'인 행 필터링
df[df['gender'].isin(['Male', 'Female'])]
06. 데이터 전처리 - 데이터 병합
1) concat
데이터를 위아래로 합쳐봅시다
- concat()함수는 데이터프레임을 위아래로 혹은 좌우로 연결할 수 있어요 !
- axis: 연결하고자 하는 축(방향)을 지정합니다. 기본값은 0으로, 위아래로 연결하는 경우에 해당합니다. 1로 설정하면 좌우로 연결합니다.
- ignore_index: 기본값은 False이며, 연결된 결과 데이터프레임의 인덱스를 유지합니다. True로 설정하면 새로운 인덱스를 생성합니다. (True → 기존 인덱스를 무시하고 새롭게 인덱스를 설정)
2) merge
데이터를 좌우로 합쳐봅시다
- SQL의 JOIN 연산과 유사한 방식으로 데이터프레임을 합칠 수 있습니다. 주로 두 개 이상의 데이터프레임에서 공통된 열이나 인덱스를 기준으로 데이터를 병합할 때 활용됩니다.
- merge() 함수의 주요 매개변수는 다음과 같습니다:
- left와 right: 병합할 데이터프레임 중 병합되는 기준이 되는 왼쪽(left)과 오른쪽(right) 데이터프레임입니다.
- how: 병합 방법을 나타내는 매개변수로, 'inner', 'outer', 'left', 'right' 등의 옵션이 있습니다.
- 'inner': 공통된 키(열)를 기준으로 교집합을 만듭니다.
- 'outer': 공통된 키를 기준으로 합집합을 만듭니다.
- 'left': 왼쪽 데이터프레임의 모든 행을 포함하고 오른쪽 데이터프레임은 공통된 키에 해당하는 행만 포함합니다.
- 'right': 오른쪽 데이터프레임의 모든 행을 포함하고 왼쪽 데이터프레임은 공통된 키에 해당하는 행만 포함합니다.
- on: 병합 기준이 되는 열 이름(혹은 열 이름의 리스트)을 지정합니다.
- left_on과 right_on: 왼쪽 데이터프레임과 오른쪽 데이터프레임에서 병합할 열 이름이 다른 경우에 사용합니다.
07. 데이터 전처리 - 데이터 집계
1) Group by
- Group by 함수는 데이터프레임을 그룹화하고, 그룹 단위로 데이터를 분할(split), 적용(apply), 결합(combine)하는 기능을 제공합니다
- 데이터프레임을 특정 기준에 따라 그룹으로 나누어 집계, 변환, 필터링 등을 할 수 있습니다.
- 그룹 생성: 기준 열(혹은 열들)을 지정하여 데이터프레임을 그룹으로 나눕니다.
- 그룹에 대한 연산 수행: 그룹 단위로 원하는 연산(평균, 합, 개수 등)을 수행합니다.
- 결과 결합: 각 그룹의 연산 결과를 하나의 데이터프레임으로 결합하여 새로운 데이터프레임을 생성합니다.
2) Pivot Table
Pivot Table()
- pivot_table() 함수는 데이터프레임에서 피벗 테이블을 생성하는 데 사용됩니다.
- 주어진 데이터를 사용자가 원하는 형태로 재배치하여 요약된 정보를 보기 쉽게 제공합니다.
08. 데이터 전처리 - 데이터 정렬
1) 데이터 정렬하기
- sort_values() 함수:
- 컬럼 기준으로 정렬시켜보자
- import pandas as pd
# 샘플 데이터프레임 생성
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 22, 30, 18, 27],
'Score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)
# 정렬
sorted_by_score = df.sort_values('Score') # 'Score' 열을 기준으로 오름차순 정렬
sorted_by_score = df.sort_values('Score',ascending=False) # 'Score' 열을 기준으로 내림차순 정렬
print(sorted_by_score) - sort_index() 함수:
- 인덱스를 기준으로 정렬시켜보자
- import pandas as pd
# 샘플 데이터프레임 생성
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 22, 30, 18, 27],
'Score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)
# 정렬
sorted_by_index = df.sort_index() # 인덱스를 기준으로 오름차순 정렬
sorted_by_index = df.sort_index(ascending=False) # 인덱스를 기준으로 내림차순 정렬
print(sorted_by_index)
오늘도 끝이 났습니다~!~! 내일은 금요일!! 하루만 더 하면 주말입니당!!!!
굉장히 어렵네용 큐큐 😭 오늘도 수고하셨습니다~!~!~!
'2025 내일배움캠프 QAQC_2기' 카테고리의 다른 글
| 2025 내일배움캠프 QAQC_2기 본캠프 16일차 (0) | 2025.06.02 |
|---|---|
| 2025 내일배움캠프 QAQC_2기 본캠프 15일차 (0) | 2025.05.30 |
| 2025 내일배움캠프 QAQC_2기 본캠프 13일차 (1) | 2025.05.28 |
| 2025 내일배움캠프 QAQC_2기 본캠프 12일차 (0) | 2025.05.27 |
| 2025 내일배움캠프 QAQC_2기 본캠프 11일차 (1) | 2025.05.26 |