본문 바로가기
공부해볼갱/데이터 배워볼갱

[데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY18

by 갱ㄷ 2025. 1. 16.
🗓️ 2025-01-16(목) 파이썬 기초4
1. 기본 명령어 : head, tail, shape, info, describe, DataFrame, copy, rename
2. 파생변수 만들기 : where, isin, value_counts, plot.hist, plot.bar, sort_index
3. 데이터 전처리 1. 원하는 형태로 데이터 가공하기  :  pandas 패키지
4. 데이터 전처리 2. 조건에 맞는 데이터만 추출하기  :  query
5. 데이터 프레임 출력 제한 설정 : set_option('display.max_rows', None), reset_option

 

  • 구글코랩에 데이터 파일을 올려서 사용할 수 있지만, 12시간이 지나면 자동으로 사라져 다시 올려야 함

기본 명령어

import pandas as pd 

exam = pd.read_csv('exam.csv')
exam
exam.head()  # 처음 행 5개
exam.tail()  # 마지막 행 5개
exam.shape   # (행, 열) 괄호없이 사용
exam.info()  # 칼럼의 Non-Null Count, dtype
exam.describe() # 요약 - count, mean, min, 25%, 50%, 75%, max, std(standard variation 표준편차)

# pd.DataFrame({ ‘칼럼’:[리스트], ‘칼럼’:[리스트]})  :  데이터 프레임 생성하기
df_raw = pd.DataFrame({'var1':[1,2,1],
                       'var2':[2,3,2],})
df_raw
# copy 데이터 프레임 복사본 만들기
# df_new = df_raw 하면 동기화 되므로 X
df_new = df_raw.copy()
df_new

# rename 칼럼명 바꾸기
df_new = df_new.rename(columns = {'var2':'v2'})
df_new
mpg_new['category'].drop_duplicates()
mpg_new['category'].unique()

파생변수 만들기

# 변수 조합하여 파생변수 만들기
df['var_sum'] = df['var1'] + df['var2']

# 그래프 만들기
mpg['total'].plot.hist()  # 히스토그램

# 조건문 활용하여 파생변수 만들기
mpg['test'] = np.where(mpg['total'] >= 20, 'pass', 'fail')  
# total의 값이 20 이상이면 pass, 아니면 fail

count_test = mpg['test'].value_counts()
count_test.plot.bar(rot = 0)  # 막대 그래프, 축 이름 수평으로 만들기 - 원래 수직으로 나옴

# 중첩 조건문 활용하기
mpg['grade'] = np.where(mpg['total'] >= 30, 'A', np.where(mpg['total'] >=20, 'B', 'C'))
# grade의 값이 30이상이면 A, 20이상이면 B, 아니면 C => 30부터는 A, 20~29 B, 0~19 C

# 알파벳 순 정렬
count_grade = mpg['grade'].value_counts().sort_index()

# np.where에서 or 사용하기
mpg['size'] = np.where( (mpg['category']=='compact') | 
                        (mpg['category']=='subcompact') |
                        (mpg['category']=='2seater'),
                        'small', 'large' )

# np.where에서 isin 사용하기
mpg['size'] = np.where( mpg['category'].isin( ['compact', 'subcompact', '2seater'] ),
                        'small', 'large' )
# midwest.csv 연습문제

import pandas as pd 
import numpy as np
mw = pd.read_csv('midwest.csv')

mw = mw.rename(columns = {'poptotal':'total', 'popasian':'asian'} )
mw['ratio'] = mw['asian']/mw['total']*100

#mw['ratio'].plot.hist()

mw['count'] = np.where(mw['ratio'] > mw['ratio'].mean(), 'large', 'small')

count = mw['count'].value_counts()
count.plot.bar(rot=0)

데이터 전처리 1. 원하는 형태로 데이터 가공하기

pandas : 전처리 작업에 가장 많이 사용되는 패키지

함수 기능
query( ) 행 추출
df[ ] 열(변수) 추출
sort_values( ) 정렬
groupby( ) 집단별로 나누기
assign( ) 변수 추가
agg( ) 통계치 구하기
merge( ) 데이터 합치기(열)
concat( ) 데이터 합치기(행)

 


데이터 전처리 2. 조건에 맞는 데이터만 추출하기

query 

대괄호[ ]를 사용해서 조건식을 입력해도 되지만, 방대한 양의 데이터 처리 시 query 메소드의 성능이 더 좋다. 
(pandas 공식 사이트에서는 약 20만개 이상의 행 처리 시에 query가 더 좋다고 설명한다)

import pandas as pd
import numpy as np

exam = pd.read_csv('exam.csv')
print(exam)

# exam에서 nclass가 1인 경우만 추출
exam.query('nclass == 1')

# 수학 점수가 50점을 초과한 경우
exam.query('math > 50')

# 외부 변수 사용하기
var = 3
exam.query('nclass == @var')
## 연습문제
mpg = pd.read_csv('mpg.csv')

print(mpg)

# 연습문제1
displ_low = mpg.query('displ <= 4 ')
displ_high = mpg.query('displ >= 5')
displ_low_mean = displ_low['hwy'].mean()
displ_high_mean = displ_high['hwy'].mean()
print("displ_high_mean :", displ_high_mean, "\ndispl_low_mean :", displ_low_mean)
if displ_high_mean > displ_low_mean :
    print("배기량 5이상인 자동차가 배기량 4이하인 자동차보다 고속도로 연비 평균이 더 높습니다.")
elif displ_high_mean < displ_low_mean :
    print("배기량 4이하인 자동차가 배기량 5이상인 자동차보다 고속도로 연비 평균이 더 높습니다.")
else : 
    print("배기량 4이하인 자동차와 배기량 5이상인 자동차는 고속도로 연비 평균이 같습니다.")

# 연습문제2
audi = mpg.query("manufacturer == 'audi'")
toyota = mpg.query("manufacturer == 'toyota'")
audi_mean = audi['cty'].mean()
toyota_mean = toyota['cty'].mean()
print("audi_mean :", audi_mean, "\ntoyota_mean :", toyota_mean)
if audi_mean > toyota_mean :
    print("아우디가 토요타보다 도시 연비 평균이 더 높습니다.")
elif audi_mean < toyota_mean :
    print("토요타가 아우디보다 도시 연비 평균이 더 높습니다.")
else :
    print("아우디와 토요타는 도시 연비 평균이 같습니다.")

# 연습문제3
# 노가다
chevrolet = mpg.query("manufacturer == 'chevrolet'")
ford = mpg.query("manufacturer == 'ford'")
honda = mpg.query("manufacturer == 'honda'")

chevrolet_mean = chevrolet['hwy'].mean()
ford_mean = ford['hwy'].mean()
honda_mean = honda['hwy'].mean()

print("chevrolet_mean :", chevrolet_mean,"\nford_mean :", ford_mean,"\nhonda_mean :", honda_mean )

print("전체 평균 :",chevrolet_mean+ford_mean+honda_mean /3)

# or 사용
cfh_or = mpg.query("manufacturer == 'chevrolet' | manufacturer == 'ford' | manufacturer == 'honda' ")

# in 사용
cfh_in = mpg.query("manufacturer in ['chevrolet','ford','honda']")

데이터 프레임 출력 제한 설정

  • 60행 넘기면 위아래 5행씩, 총 10행만 출력
  • 20열 넘기면 좌우 10열씩 20열만 출력
# 행/열 제한없이 모두 출력하기
pd.set_option('display.max_rows', None)   # 모든 행 출력
pd.set_option('display.max_columns',None) # 모든 열 출력

# 설정 되돌리기
pd.reset_option('display.max_rows')
pd.rest_option('display.max_columns')
pd.rest_option('all')

느낀점

query 함수에서 논리연산자 (and, or, not)이 아니라 비트 연산자(&, |, ^) 사용하는 이유가 궁금했는데, 다들 그냥 사용하는 것 같다. 진짜 '비트연산'할 때만 비트연산자를 꼭 사용해야할뿐, 논리연산시에 비트 연산자를 사용해도 큰 문제는 없는 것 같다. 
내가 의문을 가진 문제를 온전히 구글링을 통해 해결할 수 없다는 점이 답답했다.  
우선순위  : 비트연산자 > 비교연산자 > 논리연산자 순이므로, 비트연산자 사용시 괄호 필수, 논리연산자는 필수는 아니다.


 

 

[Pandas] Query 함수 사용법 (Pandas의 꽃)

Pandas(판더스 or 팬더스)에서 조건에 부합하는 데이터를 추출할 때 가장 많이 사용하는 Query 함수에 대...

blog.naver.com

 

 

query 메서드 옵션, 설명, 사용 예-pandas(18)

파이썬 버전 3.7 기준pandas 버전 0.25.1 기준 query 메서드 옵션, 설명, 사용 예 본 포스팅에서는 query 메서드의 대한 내용, 설명, 사용 예 등을 서술한다. query 메서드 pandas에서 DataFrame은 query 메서드를

kongdols-room.tistory.com

 

 

[04-2] Python - 논리연산자/비트연산자 (boolean/bitwise operation)

언듯 보기에 논리연산자와 비트연산자가 유사해서 그 차이점이 헷갈렸다. 논리연산자의 "and"와 비트연산자의 "&"는 결국 같은 "그리고"가 아닌가?논리연산자의 "or"와 비트연산자의 "|"는 결국 같

technote.kr