데이터분석/DACON

판다스 첫걸음

묘걍 2023. 9. 18. 21:30

1️⃣판다스

* Pandas *
- 파이썬 데이터 처리를 위한 라이브러리이다.
- 파이썬을 이용한 데이터 분석과 같은 작업에서 필수적인 라이브러리

👉🏻판다스의 기능

- 공식 깃헙에서 본인들을 "관계형" 또는 "레이블된" 데이터를 쉽고 직관적으로 조작할 수 있도록 설계된 파이썬 패키지라고 설명한다.

  • 통합 인덱싱으로 데이터를 조작할 수 있는 데이터 프레임
  • 다양한 데이터 구조와 파일 형식 지원
  • 대규모 데이터 분류, 슬라이싱, 인덱싱
  • 데이터의 통계 및 시각화
  • 데이터 형태 변경, 삭제 및 추가
  • 데이터 그룹화, 정렬, 결합, 필터링
  • 데이터 셋 병합
  • 시계열/ 문자열 데이터 지원

- 판다스는 데이터를 구조화하고 처리하는데 유용한 기능을 제공한다

- 데이터를 표 형태로 표시하거나, 데이터를 정렬하거나, 데이터를 그룹화하는 등의 작업을 수행할 수 있다.

 

2️⃣실습

주석 달기

# 주석을 작성할 경우 '#'기호를 사용한다

라이브러리 import

import pandas as pd

- 데이터 프레임 생성을 위한 pandas 라이브러리

  • 데이터 분석을 위한 라이브러리(library)인 판다스(pandas)를 불러오는 코드이다.

- as 명령어로 pd라는 별칭 지정하기

  • pd라는 별칭(alias)을 사용해 판다스를 불러올 수 있다.
  • 이후에 이 라이브러리를 이용하여 데이터를 다루는 코드를 작성할 때마다 'pd'라는 별칭을 사용하여 pandas의 함수들을 호출하게 된다.

- 라이브러리 도는 모듈(module)은 프로그래밍에서 재사용 가능한 코드의 집합이다.

  • 라이브러리는 특정 기능이나 작업을 수행하기 위해 필요한 함수, 클래스, 상수 등을 포함하고 있다.
  • 이러한 라이브러리는 개발자가 별도로 작성하지 않고도 가져와서 사용할 수 있다
  • 이미 구현된 기능들을 제공하여 개발 프로세스를 단순화하고 생산성을 향상시킨다.

파일 읽어오기

df = pd.read_csv('train.csv')
df

- read_csv() 함수를 이용해 'train.csv' 파일을 df라는 변수명으로 불러온다

  • train.csv파일을 읽어와 데이터프레임(dataframe)형태로 저장하는 코드이다.
  • train.csv파일에 저장된 데이터를 데이터 프레임 형태로 불러와서 필요한 작업을 수행할 수 있다.
  • 판다스 라이브러리의 read_csv() 함수를 이용한다.
  • 파일의 경로를 인자로 전달하면 해당 파일을 읽어와서 데이터 프레임 형태로 반환한다.
  • 이를 df변수에 저장하면, 이후에 df변수를 이용하여 데이터 처리 작업을 수행할 수 있다.

데이터 선택

df.loc[0]

- loc[숫자] 함수를 이용하여 데이터 프레임(DataFrame) df의 첫 번째 행을 선택한다.

- df.loc[0]는 판다스 라이브러리에 있는 데이터 프레임 객체의 loc 속성을 사용하는 코드이다.

  • loc 속성은 데이터 프레임에서 특정 행 또는 열을 선택하기 위해 사용되는 방법 중 하나이다.
  • loc는 location의 약어로, 데이터 프레임의 행 또는 열의 레이블이나 boolean array로 인덱싱하는 방법이다.
  • 즉, 레이블 값을 이용하여 특정 값을 선택할 수 있다.

- df 라는 데이터 프레임에서 레이블이 0인 행을 선택하라는 의미를 가지고 있다

  • 행의 첫 번째 요소를 선택하는 것과 같다

- loc은 레이블 기반 인덱싱이므로, 만약 행 인덱스가 0, 1, 2.. 같은 숫자가 아니라

   'a', 'b', 'c' 등의 문자로 구성되어있다면 df.loc['a']와 같은 형태로 사용해야 한다.

 

여러 행 선택하기

display(df[100:])

- 데이터 프레임을 출력하는 용도

- df[100:]을 이용하여 데이터프레임 df의 101번째 행부터 마지막 행까지를 선택

- display(df[100:])는 데이터 프레임의 100번째 인덱스부터 끝까지 출력하는 코드이다.

- df[100:]은 Python의 슬라이싱(Slicing)문법을 사용하고 있다.

  • 이는 '100번째 인덱스부터 끝까지'라는 의미이다
  • 이 떄의 인덱스는 0부터 시작하기 때문에, 실질적으로는 101번째 행부터 마지막 행까지를 선택한다

- 판다스에서 슬라이싱은 데이터프레임(DataFrame)이나 시리즈(Series)객체에서 원하는데이터를 선택하는 방법이다.

  • 슬라이싱은 데이터프레임의 특정 행(row)이나 열(column), 도는 시리즈의 특정 인덱스를 선택하는 데 사용된다.
  • 이를 활용해 원하는 데이터를 추출하고 분석에 활용할 수 있다.

iloc를 활용한 인덱스가 100인 데이터 선택

df[100:].iloc[0]

- 데이터 프레임 df의 101번째 행을 선택

- iloc[]는 integer location의 약어

  • 데이터프레임의 행이나 열의 순서를 나타내는 정수로 특정 값을 추출하는 함수

- df[100:].iloc[0] 는

  • df[100:]로 데이터 프레임의 101번재 행부터 마지막 행까지를 선택한다
  • 그 다음 .iloc[0]으로 이 선택된 부분 중 첫 번째 행을 선택한다
  • 즉, 원래 데이터프레임에서 101번재 행을 선택하는 것이다.

loc를 활용한 인덱스가 100인 데이터 선택

df[100:].loc[100]

- 데이터 프레임 df의 101번째 행을 선택한다

- df[100:].loc[100]은

  • df[100:]로 데이터 프레임의 101번째 행부터 마지막 행까지를 선택한다
  • 그 다음 .loc[100]으로 이 선택된 부분 중 레이블이 100인 행을 선택한다.
  • 즉, 원래 데이터프레임에서 레이블이 100인 행을 선택하는 것

- loc는 레이블 기반의 인덱싱을 사용

 

loc를 활용한 genre 열 선택

df.loc[:, 'genre']

- df.loc[행, 열]을 이용하여 데이터프레임 df의 genre열 데이터를 선택

- df.loc[:, 'genre']는 df에서 genre라는 이름의 열(column)을 선택하는 코드이다.

- loc[]는 특정 행 또는 열을 선택하는 데 사용되는 함수이다.

  • loc는 레이블 기반의 인덱싱을 사용하며, loc[행,열] 형태로 사용된다
  • :는 모든 행을 선택하라는 의미이다 (시작과 끝 숫자를 넣어주지 않아서

- 따라서 df.loc[:, 'genre']는 모든 행에서 genre열의 데이터를 선택하라는 의미

- 열을 선택함으로써 열의 데이터를 수정하거나 추가하는 등의 작업을 수행할수 있다

 

title 열 선택

df['title']

- df['열 이름']을 이용하여 데이터프레임 df의 title 열 데이터를 선택

- loc[]를 사용해서 열을 선택할 수 있지만, 일반적으로 열을 선택할 대에는 loc과 iloc을 사용하지 않고 직접 지정하는 방식으로 진행된다.

- df['title']은 데이터 프레임 df에서 title이라는 이름의 열(column)을 선택하는 코드이다.

- 데이터 프레임은 2차원 테이블 형태 데이터를 다루는 데 사용된다

- 각 열에는 고유한 레이블(또는 이름)이 있다.

- df['title'] 코드를 사용하면, title 열의 모든 데이터를 선택할 수 있다.

- 이렇게 선택된 데이터는 pandas Series 라는 1차원 데이터 구조로 반환된다.

 

여러 열 정보 선택하기

- 데이터 프레임 df의 title 열과 genre 열 데이터를 선택한다

df[['title', 'genre']]

- df[['title', 'genre']]는 데이터 프레임 df에서 title과 genre열(column)을 선택하는 코드이다

- 데이터 프레임에서 여러 열을 선택하려면, 선택하려는 열의 이름들을 리스트([ ]) 안에 넣어서 전달해주면 된다.

- 이 코드는 여러 열의 데이터를 이용해 계산을 하거나, 데이터를 수정 및 추가하는 등의 작업을 할때 사용한다.

 

조건으로 선택하기

df['genre'] == '액션'

- 데이터프레임 df의 genre열에서 값이 액션이면 True 아니면 False를 반환

- df['genre'] == '액션'은 데이터 프레임 df의 genre 열에 서 값이 '액션'인 행을 찾는 코드이다

- 해당 코드는 각 행의 genre 피처의 값이 '액션'인지 여부를 확인하고, 결과를 Boolean값 (True 또는 False)로 반환한다.

- 이 결과 genre가 '액션'인 행은 True로, 그렇지 않은 행은 False로 표시된다,

- 특정 조건을 만족하는 행들을 필터링 하는 데 사용된다

- genre 피처의 값이 '액션'인지 확인하기 위해 비교 연산자 ==을 사용했다.

  •  비교 연산자를 사용함으로써 특정 조건에 해당하는 데이터만을 추출할 경우, 불필요한 데이터를 제외한 채 데이터를 분석할 수 있는 이점이 있다.

장르가 '액션'인 데이터 프레임 출력하기

df[df['genre']=='액션']

- 데이터프레임 df의 genre 열의 값이 액션인 행(row)을 선택

-df[df['genre'] == '액션']는 df에서 genre열의 값이 '액션'인 행들만 선택하는 코드

- df['genre'] == '액션' 은 데이터 프레임의 genre 열에서 각 값이 '액션'인지를 비교하고 그 결과를 Boolean값 (True 또는 False)로 구성된 Series를 반환

  • 이 Series에서는 genre 값이 '액션'인 행은 True로, 그렇지 않은 행은 False로 표시

- df[...]은 대괄호 안에 Boolean series를 넣어 조건을 만족하는 행들만 선택하는 역할

  • 특정 조건을 만족하는 행들을 필터링하고자 할 때 사용됨

 

두 가지 이상의 조건 선택하기

df[df['genre'] == '액션') & (df['distributor'] == '(주)쇼박스')]

- 데이터프레임 df의 genre열의 값이 '액션'이면서 distributor열의 값이 '(주)쇼박스'인 행을 출력

- df[(df['genre'] == '액션') & (df['distributor'] == '(주)쇼박스')]는 데이터프레임 df에서 genre열의 값이 '액션'이고, 동시에 distributor 열의 값이 '(주)쇼박스'인 행들만 선택하는 코드

- 두 개의 조건을 동시에 충족하는 행들을 필터링

  • 여기서 사용된 & 연산자는 논리 AND 연산을 수행하며, 두 조건 모두 True일 때만 True를 반환

- df['genre'] == '액션'은 genre 열의 값이 '액션'인지를 확인하고, 그 결과를 Boolean Series로 반환

- df['distributor'] == '(주)쇼박스'는 distributor열의 값이 '(주)쇼박스'인지를 확인하고, 그 결과를 Boolean Seires로 반환

- (df['genre'] == '액션') & (df['distributor'] == '(주)쇼박스')는 위 두 조건을 AND연산하여 두 조건 모두 충족하는 행을 찾는다.

- df[...]은 최종적으로 이 조건을 충족하는 행들만 선택한다

 

-논리 연산자를 사용해 두 조건을 만족시키는 데이터만을 선택

  • 대표적 논리 연산자
    • &: and, 두 값이 동일할 경우에만 1을 출력
    • |: or, 두 값 중 하나만 참(True)이어도 1을 출력

 

조건에 해당하는 데이터 프레임 출력

- 데이터 프레임 df의 num_actor열의 값이 5를 초과하는 행(row)을 출력

df[df['num_actor'] > 5]

- df[df['num_actor'] > 5]는 데이터 프레임 df에서 num_actor열의 값이 5보다 큰 행들마을 선택하는 코드

- 여기서 사용된 > 는 비교 연산자

  • num_actor 열의 각 값이 5보다 큰지 검사
  • 연산 결과는 각 행에 대해 True 또는 False 값으로 이루어진 Boolean Series를 반환한다

결측치가 존재하는 데이터 선택

- dir_prev_bfnum열의 값이 결측치(NaN)인 행(row) 데이터만을 선택하여 출력

df[df['dir_prev_bfnum'].isnull()]

- df[df['dir_prev_bfnum'].isnull()] 코드는 데이터프레임 df에서 dir_prev_bfnum 열의 값이 null인 행들만 선택하는 코드

  • null값은 결측치(missing value)를 나타낸다.

- 결측치는 데이터가 없는 값을 의미한다

  • 이것은 데이터 수집 과정에서 정보가 누락되었거나, 해당 정보가 존재하지 않음을 나타낼 수 있다.
  • 데이터 분석에서는 결측치를 처리하는 것이 중요하다
  • 결측치가 포함된 데이터를 사용하면 분석 결과가 왜곡될 수 있기 때문이다.

- df['dir_prev_bfnum'].isnull()은 dir_prev_bfnum열의 각 값이 null인지, 즉 결측치인지를 확인하고, 그 결과를 Boolean Series로 반환

  • 이 Series에서 dir_prev-bfnum값이 결측치인 행은 True로, 그렇지 않은 행은 False로 표시

- df[...]은 대괄호 안에 Boolean Series를 넣어 조건을 만족하는 행들만 선택하는 역할

  • dir_prev_bfnum 값이 결측치인 행들만 선택하여 새로운 DataFrame을 만드는 코드

- 이렇게 선택된 데이터를 사용해 결측치를 분석하거나, 대체하거나, 제거하는 처리를 할 수 있다.

 

결측치가 없는 데이터 출력

[문제 1]
dir_prev_bfnum 열 값이 결측치(NaN)가 아닌 행을 선택하기 위해 notnull() 메서드를 사용해보세요.

notnull_data = df[df['dir_prev_bfnum'].notnull()]
notnull_data

- temp 변수에 'dir_prev_bfnum' 이 NaN이 아닌 값만을 저장

 

데이터 변경(1)

display(df.head(2))
df.loc[1, 'dir_prev_bfnum'] = 500000.0
df.head(2)

- 인덱스가 1인 dir_prev_bfnum열의 값을 500000.0으로 변경하기

- df.loc['행 인덱스', '열'] = 변경할 값 형식으로 값을 변경할 수 있다.

- 데이터를 변경한 뒤 dri_prev_bfnum의 값이 어떻게 변경되었는지 확인

 

- display(df.head(2)): 데이터 프레임의 처음 두 행을 출력

  • 데이터를 변경하기 전의 데이터를 확인하기 위해 작성된 코드

- df.loc[1, 'dir_prev_bfnum'] = 500000.0은 df데이터프레임의 인덱스가 1인 행의 dri_prev_bfnum열의 위치 값이 500000.0으로 변경됨

 

- 데이터를 변경하는 코드를 사용함으로써 데이터를 원하는대로 수정하거나 결측치를 처리하는 등의 작업을 수행할 수 있다.

 

데이터 변경

[문제 2]
0행, 'number'의 값을 4로 변경하기 위해 빈칸을 채워 주세요.

df.loc[0, 'number'] = 4

 

 

 

 

 

성공~~!!

이어서 다음 강의 보려고 했더니 돈내라고 하네^^

돈 없는 취준생은 여기서 마칩니다...

데이콘 언제 이렇게 유료화가 된거죠..

정말 속상하다