🎯자유자재로 데이터 가공하기
- 데이터 전처리 - 원하는 형태로 데이터 가공하기
- 조건에 맞는 데이터만 추출하기
- 필요한 변수만 추출하기
- 순서대로 정렬하기
- 파생 변수 추가하기
- 집단별로 요약하기
- 데이터 합치기
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) 분량 추가로 적기....넘 많아서 정리 다 못해따..
'성동1기 전Z전능 데이터 분석가 과정' 카테고리의 다른 글
[전Z전능 DA]Day36 - PYTHON 프로젝트 1 (0) | 2023.12.04 |
---|---|
[전Z전능 DA]Day35 - PYTHON 기초6 (1) | 2023.12.01 |
[전Z전능 DA]Day33 - PYTHON 기초4 (0) | 2023.11.29 |
[전Z전능 DA] Day32 - PYTHON 기초3 (1) | 2023.11.28 |
[전Z전능 DA] Day31 - PYTHON 기초2 (1) | 2023.11.27 |