본문 바로가기

성동1기 전Z전능 데이터 분석가 과정

[전Z전능 DA]Day34 - PYTHON 기초5

🎯자유자재로 데이터 가공하기 

 

  1. 데이터 전처리  -  원하는 형태로 데이터 가공하기
  2. 조건에 맞는 데이터만 추출하기
  3. 필요한 변수만 추출하기
  4. 순서대로 정렬하기
  5. 파생 변수 추가하기
  6. 집단별로 요약하기
  7. 데이터 합치기

 

1. 데이터 전처리 

 

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

 

 

2. 조건에 맞는 데이터 추출하기

 

전체 조건에 작은따옴표, 추출할 문자 조건에 큰 따옴표 사용 (사용순서 바껴도 상관없음, 같은 모양 따옴표 사용하면 에러)

 

 

🌵외부 변수를 이용해 추출하기

더보기

파이썬에서 사용하는 기호 (보통 사용하는 논리연산자 크다,작다 등도 사용한다)

| 또는 or
& 그리고
in 매칭확인

 

 

 

3. 필요한 변수만 추출하기 df [ ]

🌵 여러 변수(컬럼)만 추출하기 

 

 

 

 

 

 

 

DataFrame에서 추출하고싶은 컬럼명 대괄호로 묶어준다

 

 

 

 

 

 

 

 

 

 

 

 

 

💡변수(컬럼) 제거하기 drop(columa='컬럼명' )

 

 

 

 

 

원본은 drop되지 않는다 

새로운 변수에 저장해야 제거된 df 볼수있다.

여러 컬럼을 제거하고싶을떄 대괄호로 묶는다

 

 

 

 

 

 

 

 

💡query() 와 [ ] 조합하기

 

 

 

 

수학 점수가 50이상인 학생의 id와 수학점수 보여죠

 

 

 

 

 

 

 

 

 

4. 순서대로 정렬하기

sort_values( )

오름차순이 디폴트

내림차순을 하고싶다면 ascending=False

 

🌵 여러 정렬 기준 적용하기

 

 

5. 파생변수(컬럼) 추가하기

 

assign()

 

 

 

 

total 컬럼이 추가됐따

 

 

 

 

 

 

 

🌵여러 파생변수 한 번에 추가하기

 

 

 

 

 

total과 mean 컬럼 추가됐다

 

 

 

 

 

 

 

🌵assign()에 np.where() 적용하기

 

 

 

 

 

 

 

 

 

 

 

💡lambda 이요해 데이터 프레임명 줄여쓰기

 

 

 

 

• 프레임명을 x로 부르겠다!

  lambda 뒤에오는 이름으로 명명

파생변수(컬럼)를 만드는 행에

각각 lambda를 입력하여 프레임명을 통일하면 가독성을 높일수있다.

 

 

 

 

6. 집단별로 요약하기

groupby(), agg()

 

 

 

 

 

 

 

 

 

 

💡agg()에 자주 사용하는 요약 통계량 함수

함수 통계량
mean() 평균
std() 표준편차
sum() 합계
median() 중앙값
min() 최소값
max() 최대값
count() 빈도 (개수)

 

 

🌵 여러 요약 통계량 한꺼번에 구하기 

 

 

 

 

 

🌵모든 변수의 요약 통계량을 한 번에 구하기

 

🌵집단을 나눈 다음 다시 하위 집단으로 나누기 groupby 기준 여러개 쓰기

 

 

 

 

 

 

제조 회사 및 구동 방식별 분리

cty 평균 구하기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

🌵value_counts()로 집단별 빈도 간단하게 구하기

 

 

 

 

7. 데이터 합치기

pd.merge(data1, data2, how = ' ', on=' ') : 가로로 합치기

pd.concat([data1, data2]) :  세로로 합치기

 -  인덱스 새로 부여하려면 pd.concat()에 ignore_index = True 

 


🔥분석 과제

 

 

 

#1. 전체 인구 대비 미성년 인구 백분율 변수 추가 

midwest = pd.read_csv("midwest.csv")
midwest.head()
new_midwest = midwest.copy()
new_midwest = new_midwest.assign(perkids = lambda x: (x['poptotal'] - x['popadults'])/x['poptotal']*100).sort_values('perkids')
new_midwest.head()

#2. 미성년 인구 백분율이 가장높은 상위 county 의 미성년 인구 백분율 출력

new_midwest.sort_values('perkids', ascending=False).head()[['county','perkids']]

# 3. 분류표에따라 미성년 비율 컬럼을 추가하고 등급에 몇개의 지역이 있는지 알아보기

new_midwest = new_midwest.assign(perkids_cls = np.where(new_midwest['perkids'] >= 40, 'large', np.where(new_midwest['perkids'] >= 30, 'middle','small')))
new_midwest
new_midwest['perkids_cls'].value_counts()

# 4. 전체인구대비 아시아인 인구 백분율 변수를 추가하고 하위 10개 지역의 state(주), country(지역), 아시아인 인구 백분율을 출력

new_midwest.assign(perasian = lambda x: x['popasian']/x['poptotal']*100).sort_values('perasian').head(10)[["state","county","perasian"]]

 

 


 

 

🎯데이터 정제 

1. 빠진 데이터 - 결측치 정제하기

2. 이상한 데이터 -  이상치 제거하기 


 

1. 결측치 정제하기

 

결측치

  • 누락된 값, 비어있는 값
  • 데이터 수집 과정에서 발생한 오류로 포함될 가능성
  • 함수가 적용되지 안거나 분석 결과가 왜곡되는 문제 발생
  • 실제 데이터 분석시 결측치 확인, 제거후 분석해야 함

 

 

 

 

강의자료 데이터분석(5) 분량 추가로 적기....넘 많아서 정리 다 못해따..