2주차에는 다양한 데이터 셋을 다루며 집계 및 시각화를 해보았다. 연간 기온 변화와 같은 시계열 데이터도 있었고 폭염과 열대야라는 지표를 정의하고 이에 따라 필요한 데이터를 추출, 가공하기도 했다. 지역, 성별, 연령과 같은 범주형 데이터로 그룹핑 될 경우 그룹별 분포를 확인하기도 했다.
이번 학습 일지 역시 1주차에 이어서 서울시 가격안정 모범업소 상품목록 현황 데이터를 활용하여 다양한 집계와 시각화를 복습하려 한다.
사용 데이터
서울시 가격안정 모범업소 상품목록 현황 가격이 저렴하고 서비스가 좋은 가격안정모범업소(착한가게)들의 상품목록 정보에 대한 OpenAPI 서비스입니다. 지방물가안정을 위해 해당 업소를 발굴·이용토록 하여 지방물가 안정에 기여하고자 합니다.
✅ 지역구별 최대, 평균, 중간, 최소 4개의 막대그래프가 위치해야 하므로 x_index를 기준으로 그래프의 위치를 조절한다.
✅ 거의 모든 지역구의 평균값이 중간값보다 큰데 극단적으로 큰 최대값이 평균값에 영향을 준 것으로 추측된다. 더 정확한 분포는 박스플롯을 통해 확인할 수 있다.
지역구별 상품가격 분포 시각화
# 지역구 리스트
gu = df_hansik['지역구'].unique()
# 지역구별 상품가격 데이터를 가져와 df_gu에 append
df_gu = []
for i in range(len(gu)):
df_gu.append(df_hansik.groupby('지역구')['상품가격(일반)(원)'].get_group(gu[i]))
✅ 지역구별 한식 상품 가격을 get_group()으로 추출하여 df_gu 데이터프레임을 만들어준다.
get_group() group 추출은 get_group('카테고리명') 함수로 할 수 있다. 그리고 이는 그 결과를 반환해 카테고리별로 데이터를 분리할 수가 있다. 이는 물론 아래 주석 처리한 기본 검색 기능으로도 할 수 있지만 groupby를 활용하면 간결할뿐더러 처리 이후 다시 합치는 것 외에 다양한 기능을 한 번에 해줘서 매우 편리하다. #1 df_hansik_price.get_group('송파구') #2 df_hansik_price[df_hansik_price['지역구']=='송파구']
Boxplot의 수염에 해당하는 박스 바깥의 위, 아래에 가로로 긴 직선을 각각 최댓값, 최솟값이라고 부릅니다. 최댓값은 IQR 값에 1.5를 곱한 값에 제3사분위수(Q3)를 더한 값이고, 최솟값은 제1사분위수(Q1)에서 IQR 값에 1.5를 곱한 값을 뺀 값입니다. 이상치는 이 최솟값과 최댓값보다 각각 크거나 작은 값을 극단치라고 부릅니다.
✅ 최댓값과 최솟값이 1QA을 가지고 만드는 값이라 해당 범위를 넘어가는 값들은 모두 이상치로 간주하기 때문에 이상치가 많은 것처럼 보이는 것이었다.
그래프를 그리기 전에 X축과 Y축 데이터, 원하는 그래프의 모양 등 간단한 기획이 선행되어야 할 것 같다. 가령 지역구별 한식 상품가격을 알아보는 취지가 어떤 지역구가 가장 저렴한지, 가장 비싼지 알아보기 위함이라면 서울시 전체 평균과 지역구별 평균, 최소, 최대, 중간값을 4개의 꺾은선 그래프로 비교하는 것도 좋을 것 같다.