노력에는 지름길이 없으니까요

데이터전처리, 시각화 - 2) Pandas 기초 본문

내일배움캠프 일지

데이터전처리, 시각화 - 2) Pandas 기초

데건 2024. 7. 17. 18:20
728x90

 

Pandas를 활용하면

  • 대용량 데이터 처리가 가능 : Pandas는 데이터를 메모리에 로드하고, 다양한 연산을 빠른 처리가 가능하며 대용량 데이터를 처리하는데 최적화되어 있습니다.
  • 데이터 조작 기능 : 데이터 정렬, 필터링, 집계, 결측값 처리 등 데이터를 쉽게 가공할 수 있음
  • 데이터 시각화 기능 제공 : Matplotlib, Seaborn , … , etc
  • 데이터를 구조화하여 분석할 수 있음 : DataFrame이라는 자료형을 제공하여 데이터를 표 형태로 나타내어 분석이 가능함

 

 

시리즈와 데이터프레임의 차이

데이터프레임에 있는 하나의 컬럼이 시리즈라고 생각하면 됨!

데이터프레임음 컬럼이 두 개 이상인 표.

 

 

데이터 불러오기, 저장하기

인덱스 : 데이터프레임(DataFrame) 또는 시리즈(Series)의 각 행 또는 각 요소에 대한 식별자

 

 

인덱스 활용하기 (set_index)

→ 특정 컬럼에 들어있는 값을 인덱스로 활용하기

# df가 가지고 있는 특정 컬럼명을 기준으로 인덱스를 설정하기
data = df.set_index('컬럼명')
data.head()

 

reset_index() 를 활용해서 현재 인덱스를 0부터 시작하는 정수로 변경할 수 있습니다.

 

 

컬럼

pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])
#컬럼 확인하기
data.column

 

 

데이터 확인

.head()
데이터를 N개 행까지 보여줍니다.

data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌

 

 .Info()
데이터의 정보를 파악합니다. (인덱스, 컬럼명, 컬럼의 데이터 개수, 데이터 타입)

data.info() 
# null 값을 확인할때도 활용

 

각 컬럼의 이름, 데이터타입, 전체 컬럼의 데이터 타입별 개수 등등...

 

.describe()
- 데이터의 기초통계량을 확인합니다. (개수, 평균, 표준편차, 사분위, 중앙값)

data.describe()
# 숫자값에 대해서만 기초통계량 확인이 가능합니다.

숫자로 구성되어 있는 컬럼에 대해서만 기초통계량 출력

 

데이터를 불러온 다음에 반드시 체크해야 할 것

1. 데이터의 결측치(null)가 있는지

# 결측치 확인 : isnull()
df.isnull().sum() # 이렇게하면 결측치가 몇개있는지도 알 수 있어요 !

# 결측치 제거 : dropna()
df.dropna()

 

2. 중복 데이터는 없는지

# 중복 데이터 확인
df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3'])

# 중복 데이터 제거
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])

 

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)]

 

4. 데이터 타입이 알맞게 들어가있는지

# 데이터 타입 변경을 원한다면 ! 
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)

astype() 는 Pandas 데이터프레임의 열의 데이터 타입을 변경하는 데 사용됩니다. 이를 사용하여 열의 데이터 타입을 원하는 형식으로 변환할 수 있습니다.

 

 

 

iloc, loc

iloc는 인덱스 값을 사용하여 데이터를 부분적으로 출력

# 샘플 데이터프레임 생성
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)

1~3까지의 인덱스 출력

loc는 컬럼명을 사용하여 데이터를 부분적으로 출력

# 샘플 데이터프레임 생성
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)

b-d까지의 인덱스 출

iloc와 loc에서 주의할 점

iloc에서 1~3 행을 출력하기 위해df.iloc[1:4]를 써준 반면,

loc는 지정한 행까지의 모든 데이터를 출력함 (df.loc['b':'d'])

'd'이전까지의 데이터가 출력되거나 하지 않는다는 뜻!

미묘하게 다르니 기억해두자

 

컬럼, 레코드 선택법

원하는 컬럼의 데이터를 출력

df[['A','B']] #복수 출력 원할 시에 리스트로 묶어서 불러야 에러 안남
df[['B','A']] #순서 원하는대로 가능

df[['A','B']]
df[['B','A']]

 

불리언 인덱싱

 

조건을 & 로 연결

#df[조건] -> 조건이 참인 데이터를 출력
df[(df['sex']=='Male') & (df['smoker']=='Yes')].head()

 

빨간박스와 노란박스의 조건이 동시에 만족하는 데이터를 출력

 

조건을 | 로 연결

#or 조건
df[(df['sex']=='Male') | (df['smoker']=='Yes')].head()

초록박스와 파란박스 조건 둘 중 하나를 만족하는 데이터를 출력

 

 

조건, 칼럼 선택

df.loc[df['size']>3, 'tip':'smoker'].head()

감청색박스의 조건을 해당하는 데이터의 라임색 칼럼만을 출력

 

 

isin [리스트]

#isin([찾는 값들!!])
df[df['size'].isin([1,2])]

칼럼 size의 값이 1,2에 속해 있다면 출력한다.

 

 

 

코드 클렌징

조건을 변수에 넣어두고 그 변수를 사용한다.

코드가 길어질 때 더 깔끔하게 정리할 수 있는 방법!

#조건을 변수에 넣어서 계산할 시 조금 더 간편하게 출력할 수 있음
condition = df['tip'] <2
df[condition].head()

condition에 해당하는 데이터가 출력됨

728x90
반응형