본문 바로가기
ABC 부트캠프

[10일차] ABC 부트캠프 데이터 집계

by ejis 2024. 7. 17.

오늘은 교수님께서 마지막으로 데이터 분석에 대해 복습시켜 주신 뒤 과제를 내주셨어요!

처음 1번 문제부터 오류가 발생하여 조금 당황했지만 곧 잘 헤쳐나가는 제 모습이 아주 멋졌답니다 ㅎㅎ


내주신 문제는 이러합니다.

어떻게 할까 고민할 필요도 없이 pd.read_csv를 활용...하면 안 되겠죠?

처음에 pandas를 import해준 뒤, 문제에 나온 대로 pd.read_csv를 해준 뒤, 경로를 입력해 준 뒤, encoding = 'CP949'를 해주며 한글 파일의 깨짐이 없도록 해주고, df_trade에 저장해 두었습니다. 그래서 나온 코드는 이러합니다.

import pandas as pd

df_trade = pd.read_csv('./data/아파트(매매)_실거래가_서울_2022.CSV', skiprows=16, encoding='CP949')
df_trade.shape
(12685, 15)

결과는 이러합니다. (무려 12685 rows...)

꼭 저장 한 뒤, df_trade를 활용해 실행시켜 보면 좋을 거 같아요!

df_trade출력 값


2번 문제는 이러했는데요, 코드부터 보여 드리겠습니다.

cond = df_trade['해제사유발생일'].isnull()
df_trade = df_trade.loc[cond]

df_trade['평당거래금액(만원)'] = df_trade['거래금액(만원)'] / df_trade['전용면적(㎡)']
df_trade

cond에 '해제사유발생일' 컬럼의 값이 null인지 확인하는 조건을 둡니다.

두 번째 열은 cond가 참인 행만 포함하도록 데이터 프레임 df_trade를 필터링합니다. ('해제사유발생일'이 null인 행들만 포함)

세 번째 열은 산술식대로 대입해 주었습니다.

네 번째 열은 수정된 df_trade를 출력해 주었습니다.

출력화면.


target = df_trade.groupby('시군구')['평당거래금액(만원)'].mean().nlargest(5).index
target # 평균이 높은 5개의 지역 출력
target1 = df_trade[df_trade['시군구'].isin(target)]
target1 # 시군구 변수가 target에 속하는 관측치
target2 = target1[target1['거래유형'] == '중개거래']
target2 # 거래유형이 중개거래인 관측치만인것을 선택
df_sub = df_trade[(df_trade['시군구'].isin(target)) & (df_trade['거래유형'] == '중개거래')]
df_sub # 모두 만족하는 관측치

3번은 그렇게 어렵지 않았고, 차례대로 문제대로 풀어주었어요! (파이썬이니까 사람말이랑 비슷해서 편ㅡㅡ안..)


4번이 정말.. 오래 걸렸는데 그룹으로 다시 지정해 주고, 컬럼도 재정의해주고, 문제대로 해결해 보았답니다..

df_qu = df_sub.groupby('단지명').agg({
    '거래금액(만원)':['count','mean', 'max'], '전용면적(㎡)':'min'}).reset_index()

df_qu.columns = ["단지명", "거래건수", "평당평균거래금액(만원)", "최대거래금액(만원)", "최소전용면적(㎡)"]

df_sorted = df_qu.sort_values(by=['거래건수', '평당평균거래금액(만원)'], ascending=[False, False])

df_result = df_sorted.head(15)
df_result

df_result.to_csv("agg_result.csv", index=False, encoding="CP949")

마지막으로 저장해서 끝~!

저장한 결과 입니다!


python과 데이터 분석의 기초를 담당해 주신 교수님과는
오늘을 마지막으로 인사하게 되었습니다...
파이썬이 실행되는 원리부터 함수 하나하나 궁금했던 저에게는
정말 감사한 교수님입니다.
교수님 덕분에 파이썬에 대한 기초 지식을
탄탄히 잘 배워갑니다!
정말 감사합니다!

 

 

썸네일