🗓️ 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
'공부해볼갱 > 데이터 배워볼갱' 카테고리의 다른 글
| [데이터 배워볼갱] 배달의민족 리뷰 웹스크래핑, 리뷰어 분석하기 (1) | 2025.01.21 |
|---|---|
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY19 (0) | 2025.01.20 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY17 (1) | 2025.01.15 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY16 (2) | 2025.01.14 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY15 (0) | 2025.01.13 |