[KT AIVLE 4기] Python 프로그래밍 & 라이브러리 2

리니·2023년 8월 13일
4

KT AIVLE

목록 보기
3/22
post-thumbnail
post-custom-banner

Pandas

pandas는 데이터 조작 및 분석을 위한 파이썬 프로그래밍 언어 용으로 작성된 소프트웨어 라이브러리이다. 숫자 테이블과 시계열을 조작하기 위한 데이터 구조와 연산을 제공하며, 무료 소프트웨어 New BSD 라이센스이다.
-위키백과

데이터프레임(DataFrame)

  • Series
    • 하나의 정보에 대한 데이터들의 집합
    • DataFrame의 단일 열에 대한 데이터 구조(1차원)
  • 데이터 분석에서 가장 중요한 데이터 구조
  • 관계형 데이터베이스의 테이블 또는 엑셀 시트와 같은 형태
  • Series들을 하나의 열로 취급한 집합

📌 라이브러리 불러오기

import pandas as pd

📌 딕셔너리로 만들기

데이터프레임 직접 만들기

  • pd.DataFrame() 함수를 사용해 데이터프레임을 직접 만들 수 있다.
  • 대부분 리스트, 딕셔너리, Numpy 배열로부터 데이터프레임을 만든다.
# 딕셔너리
dict1 = {'Name': ['Gildong', 'Sarang', 'Jiemae', 'Yeoin'],
        'Level': ['Gold', 'Bronze', 'Silver', 'Gold'],
        'Score': [56000, 23000, 44000, 52000]}
df = pd.DataFrame(dict)

# 리스트
frame = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

📌 CSV파일 읽어오기

path = 'https://raw.githubusercontent.com/DA4BAM/dataset/master/titanic_simple.csv'
data = pd.read_csv(path) 

📌 데이터프레임 정보 확인

  • head 메소드: 상위 데이터 확인 (기본값 5개)
  • tail 메소드: 하위 데이터 확인 (기본값 5개)
  • shape 속성: 크기 확인 → (행수, 열수) 형태
data.head(3)	# 상위 3개
data.tail(10)	# 하위 10개
data.shape		# (891, 8)

📌 열, 행 정보 보기

  • values: 값 정보 확인(저장하면 2차원 numpy 배열이 됨)
  • columns: 열 정보 확인
data.columns
# Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'Fare','Embarked'], dtype='object')

data.columns.values		# np.array 형태

# 데이터프레임을 리스트 함수에 넣으면 열 이름이 리스트로 반환됨
list(data)
  • dtypes: 열 자료형 확인
    • int64: 정수형 데이터(int)
    • float64: 실수형 데이터(float)
    • object: 문자열 데이터(string)
  • info: 인덱스, 열, 값 개수, 데이터 형식 정보 등 확인
  • describe: 기초 통계 정보 확인(count, mean, std, mi, 25%, 50%, 75%, max)

📌 데이터 정렬

  • sort_index 메소드로 인덱스를 기준으로 정렬
  • sort_values 메소드로 특정 열을 기준으로 정렬
  • 정렬 방법
    • ascending = True: 오름차순 정렬(기본값)
    • ascending = False: 내림차순 정렬
# 내림차순 정렬
data.sort_index(ascending = False)

# Age 열을 기준으로 내림차순 정렬
data.sort_values(by = 'Age', ascending = False)

# 복합 열 정렬
data.sort_values(by = ['Age', 'Pclass'], ascending = [True, False])

📌 기본 집계

✔️고유 값 확인

  • unique() 메소드: 고유 값 확인
  • value_counts() 메소드: 고유 값과 그 개수 확인
print(data['Embarked'].unique())	# ['Southampton' 'Cherbourg' 'Queenstown' nan]

print(data['Embarked'].value_counts())
# Southampton    644
# Cherbourg      168
# Queenstown      77
# Name: Embarked, dtype: int64

✔️기본 집계 메소드

  • sum(): 합
  • mean(): 평균
  • max(): 최댓값
  • min(): 최솟값
  • count(): 개수
data['Age'].sum()	# 21205.17

# Age, Fare 두 열의 최댓값을 한 번에 확인
data[['Age', 'Fare']].max()
# Age      80.0000
# Fare    512.3292
# dtype: float64

📌 특정 열 조회

  • 1차원(시리즈)로 조회
    • DataFrame['column']
    • DataFrame.column
  • 2차원(데이터프레임)으로 조회
    • 칼럼 이름을 리스트로 입력할 것!
    • DataFrame[['column']]
# 1차원 조회
data['Age']
data.Age
 
# 2차원 조회
data[['Age']]
data[['Age', 'Pclass']]		# Age, Pclass 열만 조회
# Age, Pclass열만 Age 열 기준으로 내림차순 정렬해서 조회
data[['Age', 'Pclass']].sort_values(by = 'Age', ascending = False)
  • 조건으로 조회: .loc[행 조건, 열 이름]
    • 행 조건: 조건문 형태 → 조건에 만족하는 데이터만 조회
    • 열 이름
      • 생략 가능
      • 열 이름 1개 → 결과: 시리즈
      • 열 이름(여러 개)을 리스트로 → 결과: 데이터프레임
    • isin(), between() 메소드
      • isin([값1, ..., 값n]): 값1 또는 ... 값n인 데이터만 조회
      • between(n, m): n~m까지 범위 안의 데이터만 조회
# 단일 조건 조회
data.loc[data['Age']>=70]

# 여러 조건 조회
data.loc[data['Age']>= 70 & data['Pclass'] == 2)]

# 조건을 만족하는 행의 일부 열 조회
data.loc[data['Age'] >= 30, ['Pclass', 'Sex']]

# isit() 메소드
data.loc[data['Embarked'].isin(['Southhampton', 'Queenstown'])]

# between() 메소드
data.loc[data['Age'].between(10, 20, inclusive='left') & (data['Sex'] == 'male')]

📌 groupby()

DataFrame.groupby('집계기준변수', as_index=)['집계대상변수'].집계함수

  • as_index = True: 집계기준변수를 인덱스로 사용
  • as_index = False: 집계기준변수를 인덱스가 아닌 열로 사용 → 행 번호를 기반으로 한 정수 값이 인덱스로 설정
  • [['data']].sum()과 같이 하면 열이 여럿이라는 의미여서 결과가 데이터프레임이 됨
  • 여러 열 집계
    • [ ['feature1', 'feature2'] ].sum() 형태와 같이 집계 대상 열을 리스트로 지정
  • by=['feature1', 'feature2'] 과 같이 집계 기준 열을 여럿 설정 가능
# Embarked 별 Fare 평균 → 시리즈
data.groupby('Embarked', as_index = False)['Fare'].mean()

# 여러열 집계
# Embarked, Sex 별 Fare 평균과 Age 평균 → 데이터프레임
data.groupby(['Embarked','Sex'], as_index = False)[['Fare','Age']].mean()

# sum() 메소드 앞에 아무 열도 지정하지 않으면 기준열 이외의 모든 열에 대한 집계가 수행
# Embarked 열 이외의 모든 열에 대한 집계가 수행
data.groupby('Embarked', as_index=False).sum()

✔️agg()메소드: .agg()

  • 열 하나에 대해 합계, 평균 등의 집계를 한 번에 수행 가능
  • 여러 열에 대해 여러 집계를 한 번에 수행 가능
  • 집계 대상 열과 집계 방법을 리스트 형태로 지정
# 객실등급(Pclass)별, 생존여부(Survived)별 나이(Age), 운임(Fare)의 최대, 최소, 평균, 표준편차
data.groupby(['Pclass','Survived'], as_index = False)[['Age','Fare']].agg(['max', 'min', 'mean', 'std'])
profile
😊
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 28일

isin 메소드 써놓고 왜 주석은 ini메소드라고 하셨나요?

답글 달기