Data/23_2 BDA 데이터 분석 기초

[2주차 복습] 데이터 전처리 기초 문법

안정민 2023. 9. 17. 23:01

1. query()

: 행 데이터를 추출할 때 사용

: df 데이터를 추출할 때, id 혹은 nclass 수치형 데이터가 아니라 연속적인 범주형 데이터를 추출할 때 활용한다.

: 연속형 변수는 기초 통계 등의 분산, 평균 등의 계산이 가능하며, 데이터 추출 시 이상, 이하, 초과, 미만, 특정 값으로 추출이 가능한 것을 이야기

: df.query('nclass==2') 와 같은 내가 원하는 필터 조건을 문자열로 구성하여 넣기만 하면 된다.

:논리 연산자를 가지고 데이터 추출도 가능하다 -> df.query("english>95 and math>50") 입력 시 영어 성적이 95점 이상이고 수학 성적이 50점 이상인 값만 추출하게 된다.

 

import pandas as pd

df = pd.read_csv("C:\\Users\\jordi\\OneDrive\\문서\\exam.csv")

print(df.query('nclass==2'))
print(df.query('nclass!=2'))

난 도대체 파일을 어디다 저장해야 그냥 exam.csv만 적어도 파일을 열 수 있는 건지 도무지 모르겠어서 그냥 경로 적어줌

이 코드에 대한 실행 결과 :

 

2. 열을 추출하는 법

:[] 대괄호 연산자와 콤마를 사용하여 추출 -> 배열 리스트를 생성한다고 생각하면 된다, n차원 배열을 만든다고 생각

:id와 math, english만 출력하고 싶다면, df[['id','math','english']]

df[['id','math','english']]
#시리즈 형태로 출력이 되는 것이며, 컬럼이 1개라서 1차원 개념으로 이해하면 된다.
df['english']

첫 번째 코드 실행결과

두 번째 코드 실행결과

 

 

3. 변수를 제거하고 싶은 경우

: drop() 함수를 사용하면 됨, 그러나 위 함수를 사용하여 칼럼을 삭제해도 원본 자체에는 반영되지 않고 원본 데이터는 그대로 유지되는 성질을 가지고 있음

 

** 원본 데이터를 변경하고 싶을 때 사용 가능한 방법

inplace=True 라는 변수를 삽입하면 원본데이터까지 변경된다.

df_sp.drop(columns='math',inplace=True)

 

 

4. 데이터 정렬

: sort_values() 메소드 사용

: 디폴트 값은 오름차순 값임, 내림차순으로 정렬하기 위해서는 위 함수에 ascending=False 변수를 삽입한다

print(df)
df=df.sort_values('math', ascending=False)
print(df)

실행결과:

: 응용하여, 위의 문법들을 모두 적용하여

df.sort_values('math', ascending=False)[['math','id']].query('math>30')
 

위와 같은 코드도 작성이 가능하다, 실행 결과는 아래와 같다.

** 참고로, 위의 함수를 사용하여 정렬을 하려면 한 번에 하나의 열밖에 정렬을 못 함,

    매개변수로 'math', 'english' 와 같은 형태로 열 두 개를 삽입하게 되면, syntax 오류가 발생하게 된다.

** 따라서 두 개 이상의 조건으로 차순을 정리한다면 2차원의 개념을 적용시켜 꼭 리스트 형태로 매개변수를 전달해야한다. 아래의 코드의 의미는 math가 가장 먼저 앞에 있어서 메인 정렬 열이 되고, 서브가 nclass가 된다는 의미이다. 즉, 리스트의 인덱스에 따라서 메인 정렬 요소와 서브 정렬 요소가 정해진다.

 

df.sort_values(['math','nclass'])

**리스트의 인덱싱을 활용하여 각각의 정렬 방식을 정할 수 있는데, 아래와 같이 적게 되면 math에 한해서 우선적으로 오름차순으로 정렬을 한 뒤, 같은 값을 가진 항목에 대해서는 nclass 열의 내림차순 정렬을 통하여 정렬한다

df.sort_values(['math','nclass'], ascending=[True,False])

 실행결과:

 

5. 파생변수 만들기

: 파생변수란, 통상적으로는 내부 데이터를 가지고 새로운 변수를 만드는 것을 이야기한다.

: 즉, 재료 조건이 내부 데이터 안에 있고 그 데이터를 가지고 새로운 변수를 만드는 것

: 그 변수를 왜 만드는가? 

-데이터 분석에 필요한 경우

-모델링을 통해 피처에 대한 엔지니어링을 진행하는 경우 등과 같이 많은 필요의 경우의 수가 존재

 

-만드는 방법

: assign 함수를 사용하여 파생변수를 제작할 수 있음

df.assign(mean_t = (df['math'] + df['english'] + df['science'])/ 3, inplace=True, no=1).head(5)

: 위의 코드에서는 pandas의 데이터 확인 메서드가 마지막에 사용되었는데, head() 메서드의 경우 데이터의 상단 부분에 해당하는 부분만 출력하여 보여준다.

:head(i)로 i라는 매개변수를 전달하면, 데이터 자료형을 확인하고 각 레이블에 맞는 데이터 매칭을 확인한 다음  i 값에 해당하는 만큼의 줄 데이터 수를 출력한다. 위의 경우에는 해당 데이터 군집의 상위 5개의 정보를 출력하는 명령이 되는 것이며, 파생변수에 해당하는 데이터에 대한 출력 명령이므로 도트 연산자 (.)를 활용하여  메소드 적용 데이터를 지정하였다.

 

 

6. lambda 함수

: 기본 문법 -> lambda에 매개변수를 지정하고 :(콜론) 뒤에 반환값으로 사용할 식을 지정

lambda( x: (df['math'] + df['english'] + df['science']) /3 )