1. 새롭게 알게된 내용
1.1 다중 막대그래프
## 1. x축을 숫자로 표현하기 위해 index 리스트를 만들기
import numpy as np
x_index = np.arange(1, len(df_84_price)+1)
# [out] array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])
## 2. figure 크기 설정
plt.rcParams['figure.figsize'] = (15, 5)
## 3. 각 그래프의 위치를 조정하기 위해 위에서 만든 index 리스트 활용
# x축을 숫자로 해야 위치 조정이 가능함
# 각 그래프의 너비를 0.2로 설정 (width)
plt.bar(x_index - 0.3, df_84_price['최대'], width = 0.2, label = '최대')
plt.bar(x_index - 0.1, df_84_price['평균'], width = 0.2, label = '평균')
plt.bar(x_index + 0.1, df_84_price['중간'], width = 0.2, label = '중간')
plt.bar(x_index + 0.3, df_84_price['최소'], width = 0.2, label = '최소')
## 4. 그래프 세부사항 설정
plt.legend()
# 숫자로 표현한 x축을 label 설정하여 지역명으로 변경
plt.xticks(x_index, labels = df_84_price.index, rotation = 45)
plt.grid(axis = 'y', ls = ':')
plt.title('2021년 8월 시도별 아파트 매매가 현황(84㎡)', size = 20, weight = 'bold')
plt.ylabel('매매가(만원)')
plt.show()
1.2 그룹핑 후 각 그룹별 데이터프레임을 가져와 박스플롯으로 시각화
1) 지역 구 이름을 리스트로 담기
seoul_gu = df_84_seoul['구'].unique()
seoul_gu
array(['강남구', '강동구', '강북구', '강서구', '관악구', '광진구', '구로구', '금천구', '노원구',
'도봉구', '동대문구', '동작구', '마포구', '서대문구', '서초구', '성동구', '성북구', '송파구',
'양천구', '영등포구', '용산구', '은평구', '종로구', '중구', '중랑구'], dtype=object)
2) 구 별로 그룹핑을 한 후, 각 그룹별 데이터프레임을 만들어 리스트에 저장하기
# get_group : 그룹핑된 데이터프레임을 가져옴
# 데이터 저장할 리스트
df_seoul_gu = []
for i in seoul_gu:
df_seoul_gu.append(df_84_seoul.groupby('구')['거래금액(만원)'].get_group(i))
3) 박스플롯으로 시각화
- 시각화할 데이터 : 그룹별 데이터프레임이 담긴 리스트 (df_seoul_gu)
- 라벨 : 구 이름이 담긴 리스트 (seoul_gu)
plt.boxplot(df_seoul_gu, labels = seoul_gu, showmeans = True, meanline = True)
plt.xticks(rotation = 45)
plt.ylabel('매매가(만원)')
plt.title('2021년 8월 서울시 아파트 매매가 분포(84㎡)', size = 20, weight = 'bold')
plt.show()
1.3 seaborn 히트맵 그래프 그리기
- colorbar 옵션을 추가하지 않아도 seaborn 히트맵의 경우, 자동으로 추가가 됨
plt.figure(figsize = (15, 5))
sns.heatmap(df_store_pivot
, cmap = 'Blues' # cmap 색상 적용
, annot = True # 히트맵 내 수치 표현
, fmt = 'd') # 수치를 정수로 표현
plt.show()
1.4 판다스 함수로 시각화 (df.plot.함수명)
- matplotlib, seaborn이 아닌 Pandas에서 제공하는 함수로 시각화가 가능하다.
- 데이터프레임명.plot(kind = 함수명) / 데이터프레임명.plot.함수명
# 어떤 그래프를 그릴 수 있는지에 대한 정보 출력
df_store_seoul_gu.plot?
fig = plt.figure(figsize = (10, 5))
plt.subplot(121)
# df_store_seoul_gu.plot(kind = 'bar')
df_store_seoul_gu.plot.bar(color = 'r')
plt.subplot(122)
df_store_seoul_gu.plot.pie(autopct = '%.f%%', pctdistance = 0.8, wedgeprops = {'width':0.6})
fig.suptitle('서울시 구별 상가등록 현황', size = 20)
fig.tight_layout()
plt.show()
1.5 seaborn의 scatterplot
- 데이터에 있는 경도, 위도 정보를 바탕으로 지역별 데이터 분포를 그릴 수 있다.
plt.figure(figsize = (8, 6))
# 시군구명으로 경도, 위도를 평균낸 데이터프레임 생성
df_store_seoul_location = df_store_seoul[['시군구명', '경도', '위도']].groupby('시군구명').mean()
# 커피전문점/카페/다방인 데이터만 추출한 데이터프레임 생성
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명'] == '커피전문점/카페/다방']
sns.scatterplot(data = df_store_seoul_class3
, x = '경도', y = '위도'
, hue = '시군구명' # 데이터를 그룹핑할 컬럼
, marker = '.', alpha = 0.1) # 마커를 .으로 하여 작게 표현, alpha로 투명도 조절
plt.legend(ncol = 2, loc = (1.01, 0))
# 시군구명의 평균 경도, 위도를 활용하여 지도에 시군구명을 표현
for i in range(len(df_store_seoul_location)):
x = df_store_seoul_location.iloc[i, 0]
y = df_store_seoul_location.iloc[i, 1]
text = df_store_seoul_location.index[i]
plt.text(x, y, text, ha = 'center')
plt.title('커피전문점/카페/다방', size = 20)
plt.show()
1.6 hexbin 그래프
- seaborn의 scatterplot과 유사하게 경도, 위도 정보를 바탕으로 지역별 데이터 분포를 그릴 수 있다.
plt.figure(figsize = (8, 6))
# 시군구명으로 경도, 위도를 평균낸 데이터프레임 생성
df_store_seoul_location = df_store_seoul[['시군구명', '경도', '위도']].groupby('시군구명').mean()
# 커피전문점/카페/다방인 데이터만 추출한 데이터프레임 생성
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명'] == '커피전문점/카페/다방']
plt.hexbin(df_store_seoul_class3['경도'], df_store_seoul_class3['위도']
, cmap = 'Blues'
, gridsize = 30) # x축 기준 그리드 한 칸의 크기
plt.colorbar()
# 시군구명의 평균 경도, 위도를 활용하여 지도에 시군구명을 표현
for i in range(len(df_store_seoul_location)):
x = df_store_seoul_location.iloc[i, 0]
y = df_store_seoul_location.iloc[i, 1]
text = df_store_seoul_location.index[i]
plt.text(x, y, text, ha = 'center')
plt.title('커피전문점/카페/다방', size = 20)
plt.show()
2. 회고
파이썬 시각화에 대해 많이 배웠다고 생각을 했는데, 여전히 새로운 그래프들이 많아서 놀랬다.
일반 scatterplot을 위도, 경도 데이터를 활용해서 지도로 그릴 수 있다는 점을 새롭게 배웠다.
이렇게 배운 시각화를 데이터셋에 적용해서 내 것으로 만들어 봐야겠다. 어떤 데이터가 적합할지 찾아보고 시도해봐야지!
이번만큼 파이썬 문법부터 시각화까지 제대로 배운 적이 없어서 그런지 더더욱 알찬 시간이었고 많은 도움이 되었다. :)
배운 것을 적극적으로 활용해봐야지!
공간정보 탐색적 데이터 분석 경진대회 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
💡 ▲ 해당 데이터로 해보기
'웅진X유데미 STARTERS > TIL (Today I Learned)' 카테고리의 다른 글
[스타터스 TIL] 9일차.SQL을 통한 데이터활용과 분석 (2) - 기본 문법 (0) | 2023.02.16 |
---|---|
[스타터스 TIL] 8일차.SQL을 통한 데이터활용과 분석 (1) - DDL, DML, WHERE절 (0) | 2023.02.16 |
[스타터스 TIL] 7일차.파이썬 데이터 시각화 (4) - 시각화 실습 (0) | 2023.02.14 |
[스타터스 TIL] 6일차.파이썬 데이터 시각화 (3) - seaborn, 실습 (0) | 2023.02.13 |
[스타터스 TIL] 5일차.파이썬 데이터 시각화 (2) - 그래프 종류 (0) | 2023.02.11 |