Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- 유데미코리아
- 프리온보딩
- SQL
- 스타터스부트캠프
- 러닝스푼즈
- 태블로
- Tableau Desktop Specialist
- MySQL
- 데이터분석가
- 회고록
- 자격증
- 실습
- trouble shooting
- 코딩테스트
- 취업부트캠프
- 쿼리테스트
- 코테
- 프로젝트
- 데이터시각화
- 2024년
- 데이터분석
- 유데미부트캠프
- 부트캠프후기
- AICE
- Python
- 프로그래머스
- 유데미
- 자격증준비
- tableau
Archives
- Today
- Total
신이 되고 싶은 갓지이
[python 실습] 아파트 실거래 분석, 시각화 실습 본문
In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 그래프에 한글폰트 설정
plt.rcParams['font.family'] = 'AppleGothic'
# 유니코드에서 그래프에 마이너스 기호 깨지는 문제 해결
plt.rcParams['axes.unicode_minus'] = False
아파트 실거래가 분석, 시각화¶
데이터 수집¶
데이터 수집¶
- 국토교통부 실거래가 공개시스템
http://rtdown.molit.go.kr/
In [5]:
df = pd.read_csv('data2/아파트(매매)__실거래가_20211122131854.csv', encoding='cp949')
df
Out[5]:
시군구 | 번지 | 본번 | 부번 | 단지명 | 전용면적(㎡) | 계약년월 | 계약일 | 거래금액(만원) | 층 | 건축년도 | 도로명 | 해제사유발생일 | 거래유형 | 중개사소재지 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 강원도 강릉시 견소동 | 202 | 202 | 0 | 송정한신 | 59.800 | 202108 | 12 | 15,000 | 2 | 1997 | 경강로2539번길 8 | NaN | - | - |
1 | 강원도 강릉시 견소동 | 202 | 202 | 0 | 송정한신 | 84.945 | 202108 | 28 | 25,000 | 1 | 1997 | 경강로2539번길 8 | NaN | - | - |
2 | 강원도 강릉시 견소동 | 202 | 202 | 0 | 송정한신 | 39.080 | 202108 | 28 | 12,000 | 7 | 1997 | 경강로2539번길 8 | NaN | - | - |
3 | 강원도 강릉시 견소동 | 289 | 289 | 0 | 송정해변신도브래뉴아파트 | 59.990 | 202108 | 5 | 22,700 | 5 | 2005 | 경강로2539번길 22 | NaN | - | - |
4 | 강원도 강릉시 견소동 | 289 | 289 | 0 | 송정해변신도브래뉴아파트 | 84.990 | 202108 | 9 | 32,500 | 6 | 2005 | 경강로2539번길 22 | NaN | - | - |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
56238 | 충청북도 충주시 호암동 | 1191 | 1191 | 0 | 호암힐데스하임 | 84.890 | 202108 | 24 | 41,000 | 5 | 2019 | 호암토성2로 1 | NaN | - | - |
56239 | 충청북도 충주시 호암동 | 1191 | 1191 | 0 | 호암힐데스하임 | 99.800 | 202108 | 27 | 52,000 | 6 | 2019 | 호암토성2로 1 | NaN | - | - |
56240 | 충청북도 충주시 호암동 | 1191 | 1191 | 0 | 호암힐데스하임 | 84.960 | 202108 | 27 | 42,500 | 2 | 2019 | 호암토성2로 1 | NaN | - | - |
56241 | 충청북도 충주시 호암동 | 1191 | 1191 | 0 | 호암힐데스하임 | 120.490 | 202108 | 31 | 58,000 | 7 | 2019 | 호암토성2로 1 | NaN | - | - |
56242 | 충청북도 충주시 호암동 | 1191 | 1191 | 0 | 호암힐데스하임 | 84.890 | 202108 | 31 | 44,800 | 4 | 2019 | 호암토성2로 1 | NaN | - | - |
56243 rows × 15 columns
데이터 전처리¶
해제사유 발생일¶
- 해제사유 발생일 : 계약이 해지된 건에 대한 해지일
In [6]:
# 해제사유 발생일이 존재하는 데이터 삭제
df = df.drop(index=df[df['해제사유발생일'].notnull()].index)
In [7]:
df[df['해제사유발생일'].notnull()]
Out[7]:
시군구 | 번지 | 본번 | 부번 | 단지명 | 전용면적(㎡) | 계약년월 | 계약일 | 거래금액(만원) | 층 | 건축년도 | 도로명 | 해제사유발생일 | 거래유형 | 중개사소재지 |
---|
사용할 컬럼만 추출¶
- 시군구, 전용면적(㎡), 거래금액(만원)
In [8]:
df = df[['시군구','전용면적(㎡)' ,'거래금액(만원)']]
df.head()
Out[8]:
시군구 | 전용면적(㎡) | 거래금액(만원) | |
---|---|---|---|
0 | 강원도 강릉시 견소동 | 59.800 | 15,000 |
1 | 강원도 강릉시 견소동 | 84.945 | 25,000 |
2 | 강원도 강릉시 견소동 | 39.080 | 12,000 |
3 | 강원도 강릉시 견소동 | 59.990 | 22,700 |
4 | 강원도 강릉시 견소동 | 84.990 | 32,500 |
자료형 확인 및 변경¶
In [9]:
df.dtypes
Out[9]:
시군구 object
전용면적(㎡) float64
거래금액(만원) object
dtype: object
In [10]:
# 전용면적 : int(소수점 무시)
df['전용면적(㎡)'] = df['전용면적(㎡)'].astype('int64')
In [11]:
# 거래금액 : int
df['거래금액(만원)'] = df['거래금액(만원)'].str.replace(',','').astype('int64')
In [12]:
df.dtypes
Out[12]:
시군구 object
전용면적(㎡) int64
거래금액(만원) int64
dtype: object
시도별 아파트 매매가 데이터 추출¶
시도 컬럼 추가¶
In [13]:
df['시도'] = df['시군구'].str.split(' ').str[0]
In [14]:
df['시도'].unique()
Out[14]:
array(['강원도', '경기도', '경상남도', '경상북도', '광주광역시', '대구광역시', '대전광역시', '부산광역시',
'서울특별시', '세종특별자치시', '울산광역시', '인천광역시', '전라남도', '전라북도', '제주특별자치도',
'충청남도', '충청북도'], dtype=object)
In [15]:
df['시도'].nunique()
Out[15]:
17
분석할 전용면적 선택¶
In [18]:
df
Out[18]:
시군구 | 전용면적(㎡) | 거래금액(만원) | 시도 | |
---|---|---|---|---|
0 | 강원도 강릉시 견소동 | 59 | 15000 | 강원도 |
1 | 강원도 강릉시 견소동 | 84 | 25000 | 강원도 |
2 | 강원도 강릉시 견소동 | 39 | 12000 | 강원도 |
3 | 강원도 강릉시 견소동 | 59 | 22700 | 강원도 |
4 | 강원도 강릉시 견소동 | 84 | 32500 | 강원도 |
... | ... | ... | ... | ... |
56238 | 충청북도 충주시 호암동 | 84 | 41000 | 충청북도 |
56239 | 충청북도 충주시 호암동 | 99 | 52000 | 충청북도 |
56240 | 충청북도 충주시 호암동 | 84 | 42500 | 충청북도 |
56241 | 충청북도 충주시 호암동 | 120 | 58000 | 충청북도 |
56242 | 충청북도 충주시 호암동 | 84 | 44800 | 충청북도 |
54149 rows × 4 columns
In [16]:
df['전용면적(㎡)'].value_counts()
Out[16]:
84 16709
59 13125
49 2256
39 1288
74 1016
...
243 1
214 1
230 1
207 1
222 1
Name: 전용면적(㎡), Length: 213, dtype: int64
분석할 전용면적 서브셋¶
In [19]:
df_84 = df[df['전용면적(㎡)']==84].copy()
df_84
Out[19]:
시군구 | 전용면적(㎡) | 거래금액(만원) | 시도 | |
---|---|---|---|---|
1 | 강원도 강릉시 견소동 | 84 | 25000 | 강원도 |
4 | 강원도 강릉시 견소동 | 84 | 32500 | 강원도 |
7 | 강원도 강릉시 견소동 | 84 | 31900 | 강원도 |
9 | 강원도 강릉시 교동 | 84 | 41000 | 강원도 |
14 | 강원도 강릉시 교동 | 84 | 37900 | 강원도 |
... | ... | ... | ... | ... |
56236 | 충청북도 충주시 호암동 | 84 | 47700 | 충청북도 |
56237 | 충청북도 충주시 호암동 | 84 | 41800 | 충청북도 |
56238 | 충청북도 충주시 호암동 | 84 | 41000 | 충청북도 |
56240 | 충청북도 충주시 호암동 | 84 | 42500 | 충청북도 |
56242 | 충청북도 충주시 호암동 | 84 | 44800 | 충청북도 |
16709 rows × 4 columns
시도별 평균, 최대, 최소, 중간값 추출¶
In [20]:
df_84_mean = df_84.groupby('시도')['거래금액(만원)'].mean()
df_84_mean
Out[20]:
시도
강원도 25735.603214
경기도 57935.884750
경상남도 30821.486979
경상북도 25636.574724
광주광역시 38281.782713
대구광역시 39517.411444
대전광역시 45900.591398
부산광역시 43642.905830
서울특별시 121650.927757
세종특별자치시 71412.643678
울산광역시 36790.119760
인천광역시 52835.016497
전라남도 23643.111987
전라북도 26839.718367
제주특별자치도 43831.702128
충청남도 26264.903790
충청북도 28915.154827
Name: 거래금액(만원), dtype: float64
In [21]:
df_84_max = df_84.groupby('시도')['거래금액(만원)'].max()
In [22]:
df_84_min = df_84.groupby('시도')['거래금액(만원)'].min()
In [23]:
df_84_median = df_84.groupby('시도')['거래금액(만원)'].median()
In [25]:
df_84_price = pd.concat([df_84_mean, df_84_max,df_84_min,df_84_median],axis=1)
df_84_price
Out[25]:
거래금액(만원) | 거래금액(만원) | 거래금액(만원) | 거래금액(만원) | |
---|---|---|---|---|
시도 | ||||
강원도 | 25735.603214 | 72500 | 7000 | 23700.0 |
경기도 | 57935.884750 | 220000 | 7400 | 52500.0 |
경상남도 | 30821.486979 | 109000 | 5300 | 28400.0 |
경상북도 | 25636.574724 | 64500 | 4000 | 25219.0 |
광주광역시 | 38281.782713 | 104500 | 10700 | 34000.0 |
대구광역시 | 39517.411444 | 148000 | 13700 | 35900.0 |
대전광역시 | 45900.591398 | 127000 | 12500 | 44435.0 |
부산광역시 | 43642.905830 | 183000 | 9400 | 38000.0 |
서울특별시 | 121650.927757 | 384500 | 29500 | 109000.0 |
세종특별자치시 | 71412.643678 | 119000 | 23800 | 74000.0 |
울산광역시 | 36790.119760 | 120000 | 6900 | 33000.0 |
인천광역시 | 52835.016497 | 130000 | 16700 | 47500.0 |
전라남도 | 23643.111987 | 74000 | 6000 | 23000.0 |
전라북도 | 26839.718367 | 66500 | 4200 | 22800.0 |
제주특별자치도 | 43831.702128 | 95000 | 13500 | 42750.0 |
충청남도 | 26264.903790 | 94500 | 3500 | 23700.0 |
충청북도 | 28915.154827 | 72000 | 7600 | 27000.0 |
In [26]:
df_84_price.columns = ['평균','최대','최소','중간']
In [27]:
df_84_price = df_84_price.sort_values('평균', ascending=False)
In [28]:
df_84_price['평균'] = round(df_84_price['평균'],1)
df_84_price
Out[28]:
평균 | 최대 | 최소 | 중간 | |
---|---|---|---|---|
시도 | ||||
서울특별시 | 121650.9 | 384500 | 29500 | 109000.0 |
세종특별자치시 | 71412.6 | 119000 | 23800 | 74000.0 |
경기도 | 57935.9 | 220000 | 7400 | 52500.0 |
인천광역시 | 52835.0 | 130000 | 16700 | 47500.0 |
대전광역시 | 45900.6 | 127000 | 12500 | 44435.0 |
제주특별자치도 | 43831.7 | 95000 | 13500 | 42750.0 |
부산광역시 | 43642.9 | 183000 | 9400 | 38000.0 |
대구광역시 | 39517.4 | 148000 | 13700 | 35900.0 |
광주광역시 | 38281.8 | 104500 | 10700 | 34000.0 |
울산광역시 | 36790.1 | 120000 | 6900 | 33000.0 |
경상남도 | 30821.5 | 109000 | 5300 | 28400.0 |
충청북도 | 28915.2 | 72000 | 7600 | 27000.0 |
전라북도 | 26839.7 | 66500 | 4200 | 22800.0 |
충청남도 | 26264.9 | 94500 | 3500 | 23700.0 |
강원도 | 25735.6 | 72500 | 7000 | 23700.0 |
경상북도 | 25636.6 | 64500 | 4000 | 25219.0 |
전라남도 | 23643.1 | 74000 | 6000 | 23000.0 |
시도별 아파트 매매가 현황 시각화¶
- 다중막대그래프
In [29]:
import numpy as np
x_index = np.arange(1,len(df_84_price)+1)
x_index
Out[29]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])
In [30]:
plt.rcParams['figure.figsize']=(15,5)
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='최소')
plt.legend()
plt.xticks(x_index, labels=df_84_price.index, rotation=45)
plt.grid(axis='y', ls=':')
plt.title('2021년 8월 시도별 아파트 매매가 현황(84㎡)', size=20)
plt.ylabel('매매가(만원)')
plt.show()
서울시 아파트 매매가 분포¶
서울시 서브셋¶
In [31]:
df_84_seoul = df_84[df_84['시도']=='서울특별시'].copy()
df_84_seoul
Out[31]:
시군구 | 전용면적(㎡) | 거래금액(만원) | 시도 | |
---|---|---|---|---|
35560 | 서울특별시 강남구 개포동 | 84 | 285000 | 서울특별시 |
35561 | 서울특별시 강남구 개포동 | 84 | 275000 | 서울특별시 |
35567 | 서울특별시 강남구 개포동 | 84 | 289000 | 서울특별시 |
35573 | 서울특별시 강남구 개포동 | 84 | 298000 | 서울특별시 |
35583 | 서울특별시 강남구 개포동 | 84 | 77000 | 서울특별시 |
... | ... | ... | ... | ... |
39823 | 서울특별시 중랑구 신내동 | 84 | 75000 | 서울특별시 |
39824 | 서울특별시 중랑구 신내동 | 84 | 73500 | 서울특별시 |
39828 | 서울특별시 중랑구 중화동 | 84 | 90000 | 서울특별시 |
39833 | 서울특별시 중랑구 중화동 | 84 | 88000 | 서울특별시 |
39836 | 서울특별시 중랑구 중화동 | 84 | 88000 | 서울특별시 |
1315 rows × 4 columns
구 컬럼 추가¶
In [33]:
df_84_seoul['구'] = df_84_seoul['시군구'].str.split(' ').str[1]
df_84_seoul
Out[33]:
시군구 | 전용면적(㎡) | 거래금액(만원) | 시도 | 구 | |
---|---|---|---|---|---|
35560 | 서울특별시 강남구 개포동 | 84 | 285000 | 서울특별시 | 강남구 |
35561 | 서울특별시 강남구 개포동 | 84 | 275000 | 서울특별시 | 강남구 |
35567 | 서울특별시 강남구 개포동 | 84 | 289000 | 서울특별시 | 강남구 |
35573 | 서울특별시 강남구 개포동 | 84 | 298000 | 서울특별시 | 강남구 |
35583 | 서울특별시 강남구 개포동 | 84 | 77000 | 서울특별시 | 강남구 |
... | ... | ... | ... | ... | ... |
39823 | 서울특별시 중랑구 신내동 | 84 | 75000 | 서울특별시 | 중랑구 |
39824 | 서울특별시 중랑구 신내동 | 84 | 73500 | 서울특별시 | 중랑구 |
39828 | 서울특별시 중랑구 중화동 | 84 | 90000 | 서울특별시 | 중랑구 |
39833 | 서울특별시 중랑구 중화동 | 84 | 88000 | 서울특별시 | 중랑구 |
39836 | 서울특별시 중랑구 중화동 | 84 | 88000 | 서울특별시 | 중랑구 |
1315 rows × 5 columns
In [34]:
df_84_seoul['구'].unique()
Out[34]:
array(['강남구', '강동구', '강북구', '강서구', '관악구', '광진구', '구로구', '금천구', '노원구',
'도봉구', '동대문구', '동작구', '마포구', '서대문구', '서초구', '성동구', '성북구', '송파구',
'양천구', '영등포구', '용산구', '은평구', '종로구', '중구', '중랑구'], dtype=object)
In [35]:
df_84_seoul['구'].nunique()
Out[35]:
25
박스플롯으로 시각화¶
구별 데이터 분리¶
In [36]:
# 구이름
seoul_gu = df_84_seoul['구'].unique()
seoul_gu
Out[36]:
array(['강남구', '강동구', '강북구', '강서구', '관악구', '광진구', '구로구', '금천구', '노원구',
'도봉구', '동대문구', '동작구', '마포구', '서대문구', '서초구', '성동구', '성북구', '송파구',
'양천구', '영등포구', '용산구', '은평구', '종로구', '중구', '중랑구'], dtype=object)
In [37]:
df_seoul_gu = []
for i in range(len(seoul_gu)):
df_seoul_gu.append(df_84_seoul.groupby('구')['거래금액(만원)'].get_group(seoul_gu[i]))
박스플롯으로 시각화¶
In [38]:
plt.boxplot(df_seoul_gu, labels=seoul_gu, showmeans=True)
plt.xticks(rotation=45)
plt.ylabel('매매가(만원)')
plt.title('2021년 8월 서울시 아파트 매매가 분포(84㎡)',size=20)
plt.show()
서울시 아파트 구별 평균 매매가, 거래건수¶
서울시 아파트 구별 평균 매매가¶
In [40]:
df_84_seoul_mean = df_84_seoul.groupby('구')['거래금액(만원)'].mean()
df_84_seoul_mean = round(df_84_seoul_mean,1)
df_84_seoul_mean
Out[40]:
구
강남구 166324.5
강동구 130831.1
강북구 78541.3
강서구 107935.7
관악구 94022.2
광진구 141525.0
구로구 89275.4
금천구 75415.4
노원구 89126.3
도봉구 77755.1
동대문구 102024.5
동작구 136100.0
마포구 145163.1
서대문구 124358.7
서초구 246792.5
성동구 152622.2
성북구 99480.3
송파구 171039.4
양천구 107729.2
영등포구 115432.1
용산구 161473.7
은평구 94170.7
종로구 143280.0
중구 129078.6
중랑구 82726.4
Name: 거래금액(만원), dtype: float64
서울시 아파트 구별 거래건수¶
In [41]:
df_84_seoul_count = df_84_seoul.groupby('구')['거래금액(만원)'].count()
df_84_seoul_count.sort_values()
Out[41]:
구
종로구 12
중구 14
용산구 19
금천구 26
광진구 32
관악구 36
서초구 40
강북구 46
양천구 48
도봉구 49
동대문구 49
서대문구 52
중랑구 53
영등포구 53
구로구 57
노원구 57
은평구 58
마포구 61
강동구 61
동작구 63
송파구 71
성동구 72
강남구 84
강서구 98
성북구 104
Name: 거래금액(만원), dtype: int64
In [42]:
df_84_seoul_mean_count = pd.concat([df_84_seoul_mean, df_84_seoul_count], axis=1)
df_84_seoul_mean_count
Out[42]:
거래금액(만원) | 거래금액(만원) | |
---|---|---|
구 | ||
강남구 | 166324.5 | 84 |
강동구 | 130831.1 | 61 |
강북구 | 78541.3 | 46 |
강서구 | 107935.7 | 98 |
관악구 | 94022.2 | 36 |
광진구 | 141525.0 | 32 |
구로구 | 89275.4 | 57 |
금천구 | 75415.4 | 26 |
노원구 | 89126.3 | 57 |
도봉구 | 77755.1 | 49 |
동대문구 | 102024.5 | 49 |
동작구 | 136100.0 | 63 |
마포구 | 145163.1 | 61 |
서대문구 | 124358.7 | 52 |
서초구 | 246792.5 | 40 |
성동구 | 152622.2 | 72 |
성북구 | 99480.3 | 104 |
송파구 | 171039.4 | 71 |
양천구 | 107729.2 | 48 |
영등포구 | 115432.1 | 53 |
용산구 | 161473.7 | 19 |
은평구 | 94170.7 | 58 |
종로구 | 143280.0 | 12 |
중구 | 129078.6 | 14 |
중랑구 | 82726.4 | 53 |
In [43]:
df_84_seoul_mean_count.columns=['평균매매가(만원)', '거래건수']
df_84_seoul_mean_count = df_84_seoul_mean_count.sort_values('평균매매가(만원)', ascending=False)
df_84_seoul_mean_count
Out[43]:
평균매매가(만원) | 거래건수 | |
---|---|---|
구 | ||
서초구 | 246792.5 | 40 |
송파구 | 171039.4 | 71 |
강남구 | 166324.5 | 84 |
용산구 | 161473.7 | 19 |
성동구 | 152622.2 | 72 |
마포구 | 145163.1 | 61 |
종로구 | 143280.0 | 12 |
광진구 | 141525.0 | 32 |
동작구 | 136100.0 | 63 |
강동구 | 130831.1 | 61 |
중구 | 129078.6 | 14 |
서대문구 | 124358.7 | 52 |
영등포구 | 115432.1 | 53 |
강서구 | 107935.7 | 98 |
양천구 | 107729.2 | 48 |
동대문구 | 102024.5 | 49 |
성북구 | 99480.3 | 104 |
은평구 | 94170.7 | 58 |
관악구 | 94022.2 | 36 |
구로구 | 89275.4 | 57 |
노원구 | 89126.3 | 57 |
중랑구 | 82726.4 | 53 |
강북구 | 78541.3 | 46 |
도봉구 | 77755.1 | 49 |
금천구 | 75415.4 | 26 |
In [44]:
fig, ax1 = plt.subplots()
#막대 그래프
ax1.bar(df_84_seoul_mean_count.index, df_84_seoul_mean_count['평균매매가(만원)'], label='평균매매가')
plt.xticks(rotation=45)
# 꺾은선 그래프
ax2 = ax1.twinx()
ax2.plot(df_84_seoul_mean_count['거래건수'], 'k^--', mfc='r', mec='r', label='건래건수')
# 범례 표시
ax1.legend(loc='upper left', edgecolor='k')
ax2.legend(loc='upper right', edgecolor='k')
# 라벨링
ax1.set_ylabel('평균매매가(만원)')
ax2.set_ylabel('거래건수')
# 표 제목
plt.title('2021년 8월 서울시 아파트 평균매매가, 거래건수(84㎡)', size=20)
plt.show()
상가(상권)정보 분석, 시각화¶
데이터 수집¶
데이터프레임 생성¶
- 17개 파일의 데이터를 각각 데이터프레임으로 만든 후 합친다.
17개의 파일을 각각 데이터프레임으로 만들기¶
- column에 NaN값이나 여러 type의 데이터가 섞여 있으면 DtypeWarning 발생
dtype option으로 타입을 명시해주거나 low_memory = False로 지정해 주면 경고 메시지가 출력되지 않는다.
In [2]:
df1 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_강원_202109.csv')
In [3]:
df2 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_경기_202109.csv')
In [4]:
df3 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_경남_202109.csv')
In [5]:
df4 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_경북_202109.csv', low_memory=False)
In [6]:
df5 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_광주_202109.csv', low_memory=False)
In [7]:
df6 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_대구_202109.csv', low_memory=False)
In [8]:
df7 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_대전_202109.csv')
In [9]:
df8 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_부산_202109.csv')
In [10]:
df9 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_서울_202109.csv')
In [11]:
df10 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_세종_202109.csv')
In [12]:
df11 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_울산_202109.csv')
/var/folders/8p/2wvkdkrj1gv2lzj_57qr5xnc0000gn/T/ipykernel_8966/837090995.py:1: DtypeWarning: Columns (35) have mixed types. Specify dtype option on import or set low_memory=False.
df11 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_울산_202109.csv')
In [13]:
df12 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_인천_202109.csv')
In [14]:
df13 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_전남_202109.csv')
/var/folders/8p/2wvkdkrj1gv2lzj_57qr5xnc0000gn/T/ipykernel_8966/2351736579.py:1: DtypeWarning: Columns (35) have mixed types. Specify dtype option on import or set low_memory=False.
df13 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_전남_202109.csv')
In [15]:
df14 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_전북_202109.csv')
/var/folders/8p/2wvkdkrj1gv2lzj_57qr5xnc0000gn/T/ipykernel_8966/215256428.py:1: DtypeWarning: Columns (35) have mixed types. Specify dtype option on import or set low_memory=False.
df14 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_전북_202109.csv')
In [16]:
df15 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_제주_202109.csv')
/var/folders/8p/2wvkdkrj1gv2lzj_57qr5xnc0000gn/T/ipykernel_8966/3957613725.py:1: DtypeWarning: Columns (35) have mixed types. Specify dtype option on import or set low_memory=False.
df15 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_제주_202109.csv')
In [17]:
df16 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_충남_202109.csv')
/var/folders/8p/2wvkdkrj1gv2lzj_57qr5xnc0000gn/T/ipykernel_8966/931289936.py:1: DtypeWarning: Columns (35) have mixed types. Specify dtype option on import or set low_memory=False.
df16 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_충남_202109.csv')
In [18]:
df17 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_충북_202109.csv')
/var/folders/8p/2wvkdkrj1gv2lzj_57qr5xnc0000gn/T/ipykernel_8966/2172420385.py:1: DtypeWarning: Columns (35) have mixed types. Specify dtype option on import or set low_memory=False.
df17 = pd.read_csv('data2/소상공인시장진흥공단_상가(상권)정보_충북_202109.csv')
데이터프레임 연결하기¶
- pd.concat(데이터프레임리스트) : 행 방향으로 연결
- pd.concat(데이터프레임리스트, axis=1) : 열 방향으로 연결
- 인덱스 재지정 : ignore_index = True
In [19]:
# 데이터프레임 합치기 : [df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14,df15,df16,df17]
df = pd.concat([df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14,df15,df16,df17], ignore_index = True)
In [20]:
len(df.columns)
Out[20]:
39
In [21]:
# 컬럼갯수 최대 지정
pd.options.display.max_columns=39
In [22]:
df.head(1)
Out[22]:
상가업소번호 | 상호명 | 지점명 | 상권업종대분류코드 | 상권업종대분류명 | 상권업종중분류코드 | 상권업종중분류명 | 상권업종소분류코드 | 상권업종소분류명 | 표준산업분류코드 | 표준산업분류명 | 시도코드 | 시도명 | 시군구코드 | 시군구명 | 행정동코드 | 행정동명 | 법정동코드 | 법정동명 | 지번코드 | 대지구분코드 | 대지구분명 | 지번본번지 | 지번부번지 | 지번주소 | 도로명코드 | 도로명 | 건물본번지 | 건물부번지 | 건물관리번호 | 건물명 | 도로명주소 | 구우편번호 | 신우편번호 | 동정보 | 층정보 | 호정보 | 경도 | 위도 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 25033300 | 동그라미중고타이어 | NaN | D | 소매 | D23 | 자동차/자동차용품 | D23A04 | 타이어판매 | G45211 | 자동차 타이어 및 튜브 판매업 | 42 | 강원도 | 42150 | 강릉시 | 4215057100 | 포남1동 | 4.215011e+09 | 포남동 | 4215011100110960006 | 1 | 대지 | 1096 | 6.0 | 강원도 강릉시 포남동 1096-6 | 4.215032e+11 | 강원도 강릉시 가작로 | 270 | NaN | 4215011100110960006010791 | NaN | 강원도 강릉시 가작로 270 | 210110.0 | 25488.0 | 1 | NaN | NaN | 128.904472 | 37.770252 |
데이터 확인 및 전처리¶
데이터 크기¶
In [23]:
df.shape
Out[23]:
(2245938, 39)
데이터프레임 정보¶
In [24]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2245938 entries, 0 to 2245937
Data columns (total 39 columns):
# Column Dtype
--- ------ -----
0 상가업소번호 int64
1 상호명 object
2 지점명 object
3 상권업종대분류코드 object
4 상권업종대분류명 object
5 상권업종중분류코드 object
6 상권업종중분류명 object
7 상권업종소분류코드 object
8 상권업종소분류명 object
9 표준산업분류코드 object
10 표준산업분류명 object
11 시도코드 int64
12 시도명 object
13 시군구코드 int64
14 시군구명 object
15 행정동코드 int64
16 행정동명 object
17 법정동코드 float64
18 법정동명 object
19 지번코드 int64
20 대지구분코드 int64
21 대지구분명 object
22 지번본번지 int64
23 지번부번지 float64
24 지번주소 object
25 도로명코드 float64
26 도로명 object
27 건물본번지 int64
28 건물부번지 float64
29 건물관리번호 object
30 건물명 object
31 도로명주소 object
32 구우편번호 float64
33 신우편번호 float64
34 동정보 object
35 층정보 object
36 호정보 object
37 경도 float64
38 위도 float64
dtypes: float64(8), int64(8), object(23)
memory usage: 668.3+ MB
서브셋 만들기¶
In [25]:
df.head(1)
Out[25]:
상가업소번호 | 상호명 | 지점명 | 상권업종대분류코드 | 상권업종대분류명 | 상권업종중분류코드 | 상권업종중분류명 | 상권업종소분류코드 | 상권업종소분류명 | 표준산업분류코드 | 표준산업분류명 | 시도코드 | 시도명 | 시군구코드 | 시군구명 | 행정동코드 | 행정동명 | 법정동코드 | 법정동명 | 지번코드 | 대지구분코드 | 대지구분명 | 지번본번지 | 지번부번지 | 지번주소 | 도로명코드 | 도로명 | 건물본번지 | 건물부번지 | 건물관리번호 | 건물명 | 도로명주소 | 구우편번호 | 신우편번호 | 동정보 | 층정보 | 호정보 | 경도 | 위도 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 25033300 | 동그라미중고타이어 | NaN | D | 소매 | D23 | 자동차/자동차용품 | D23A04 | 타이어판매 | G45211 | 자동차 타이어 및 튜브 판매업 | 42 | 강원도 | 42150 | 강릉시 | 4215057100 | 포남1동 | 4.215011e+09 | 포남동 | 4215011100110960006 | 1 | 대지 | 1096 | 6.0 | 강원도 강릉시 포남동 1096-6 | 4.215032e+11 | 강원도 강릉시 가작로 | 270 | NaN | 4215011100110960006010791 | NaN | 강원도 강릉시 가작로 270 | 210110.0 | 25488.0 | 1 | NaN | NaN | 128.904472 | 37.770252 |
In [27]:
# 컬럼명 가져오기
df.columns
Out[27]:
Index(['상가업소번호', '상호명', '지점명', '상권업종대분류코드', '상권업종대분류명', '상권업종중분류코드',
'상권업종중분류명', '상권업종소분류코드', '상권업종소분류명', '표준산업분류코드', '표준산업분류명', '시도코드',
'시도명', '시군구코드', '시군구명', '행정동코드', '행정동명', '법정동코드', '법정동명', '지번코드',
'대지구분코드', '대지구분명', '지번본번지', '지번부번지', '지번주소', '도로명코드', '도로명', '건물본번지',
'건물부번지', '건물관리번호', '건물명', '도로명주소', '구우편번호', '신우편번호', '동정보', '층정보',
'호정보', '경도', '위도'],
dtype='object')
필요한 컬럼만 추출하여 서브셋 만들기¶
- 서브셋을 만들 때는 copy()기능을 사용하는 것을 권장
In [28]:
df_store = df[['상호명','상권업종대분류명','상권업종중분류명','상권업종소분류명','시도명','시군구명','행정동명','법정동명','경도','위도']].copy()
In [29]:
df_store
Out[29]:
상호명 | 상권업종대분류명 | 상권업종중분류명 | 상권업종소분류명 | 시도명 | 시군구명 | 행정동명 | 법정동명 | 경도 | 위도 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 동그라미중고타이어 | 소매 | 자동차/자동차용품 | 타이어판매 | 강원도 | 강릉시 | 포남1동 | 포남동 | 128.904472 | 37.770252 |
1 | 세인트존스호텔Ohcrab | 숙박 | 호텔/콘도 | 호텔/콘도 | 강원도 | 강릉시 | 초당동 | 강문동 | 128.920908 | 37.791299 |
2 | 평창라마다호텔 | 숙박 | 호텔/콘도 | 호텔/콘도 | 강원도 | 평창군 | 대관령면 | 대관령면 | 128.717971 | 37.660051 |
3 | 호텔탑스텐스카이라운지 | 숙박 | 호텔/콘도 | 호텔/콘도 | 강원도 | 강릉시 | 옥계면 | 옥계면 | 129.052902 | 37.654680 |
4 | 족발야시장 | 음식 | 한식 | 족발/보쌈전문 | 강원도 | 강릉시 | 교1동 | 교동 | 128.878636 | 37.765339 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2245933 | 스카이미술교습소 | 학문/교육 | 학원-음악미술무용 | 서예/서화/미술 | 충청북도 | 진천군 | 덕산읍 | 덕산읍 | 127.527967 | 36.902562 |
2245934 | 시티창호 | 생활서비스 | 주택수리 | 유리창호 | 충청북도 | 음성군 | 금왕읍 | 금왕읍 | 127.527023 | 37.011734 |
2245935 | 타이타닉 | 생활서비스 | 이/미용/건강 | 비만/피부관리 | 충청북도 | 청주시 청원구 | 오근장동 | 주성동 | 127.497228 | 36.671633 |
2245936 | 브릭헤어 | 생활서비스 | 이/미용/건강 | 여성미용실 | 충청북도 | 청주시 서원구 | 성화.개신.죽림동 | 성화동 | 127.456752 | 36.617518 |
2245937 | 싸이코참치기업도시점 | 음식 | 일식/수산물 | 참치전문점 | 충청북도 | 충주시 | 중앙탑면 | 중앙탑면 | 127.824401 | 37.017746 |
2245938 rows × 10 columns
서브셋 데이터 확인¶
In [30]:
# 데이터 크기
df_store.shape
Out[30]:
(2245938, 10)
In [31]:
# 데이터 정보(메모리 용량)
df_store.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2245938 entries, 0 to 2245937
Data columns (total 10 columns):
# Column Dtype
--- ------ -----
0 상호명 object
1 상권업종대분류명 object
2 상권업종중분류명 object
3 상권업종소분류명 object
4 시도명 object
5 시군구명 object
6 행정동명 object
7 법정동명 object
8 경도 float64
9 위도 float64
dtypes: float64(2), object(8)
memory usage: 171.4+ MB
결측치분석/처리¶
In [32]:
df_store.isnull().sum()
Out[32]:
상호명 2
상권업종대분류명 0
상권업종중분류명 0
상권업종소분류명 0
시도명 0
시군구명 0
행정동명 11839
법정동명 1453
경도 0
위도 0
dtype: int64
상권업종분류¶
In [33]:
df_store['상권업종대분류명'].unique()
Out[33]:
array(['소매', '숙박', '음식', '학문/교육', '생활서비스', '부동산', '관광/여가/오락', '스포츠'],
dtype=object)
In [34]:
df_store['상권업종대분류명'].nunique()
Out[34]:
8
In [35]:
df_store['상권업종중분류명'].unique()
Out[35]:
array(['자동차/자동차용품', '호텔/콘도', '한식', '가구소매', '학원기타', '유흥주점', '철물/난방/건설자재소매',
'주유소/충전소', '가방/신발/액세서리', '가정/주방/인테리어', '커피점/카페', '캠프/별장/펜션',
'음/식료품소매', '기타판매업', '화장품소매', '부동산중개', '선물/팬시/기념품', '개인/가정용품수리',
'학원-음악미술무용', '민박/하숙', '의복의류', '요가/단전/마사지', '세탁/가사서비스', '주택수리',
'분식', '인력/고용/용역알선', '사진/광학/정밀기기소매', '가전제품소매', '종합소매점', '사무/문구/컴퓨터',
'이/미용/건강', '학원-어학', '일식/수산물', '무도/유흥/가무', '모텔/여관/여인숙', '제과제빵떡케익',
'자동차/이륜차', '광고/인쇄', '취미/오락관련소매', '학원-보습교습입시', '대중목욕탕/휴게', '패스트푸드',
'실내운동시설', '놀이/여가/취미', '건강/미용식품', '닭/오리요리', '학원-창업취업취미', '시계/귀금속소매',
'중식', '운동/경기용품소매', '페인트/유리제품소매', '대행업', '실외운동시설', '중고품소매/교환',
'의약/의료품소매', '유아용품', '학원-예능취미체육', '유아교육', '학문교육기타', '별식/퓨전요리',
'책/서적/도서', '기타서비스업', 'PC/오락/당구/볼링등', '분양', '애견/애완/동물', '양식',
'장례/묘지', '물품기기대여', '기타음식업', '사진', '도서관/독서실', '행사/이벤트', '부페',
'운송/배달/택배', '개인서비스', '학원-자격/국가고시', '예식/의례/관혼상제', '음식배달서비스',
'경마/경륜/성인오락', '스포츠/운동', '종교용품판매', '운영관리시설', '학원-컴퓨터',
'예술품/골동품/수석/분재', '평가/개발/관리', '연극/영화/극장', '법무세무회계', '유스호스텔',
'부동산관련서비스'], dtype=object)
In [36]:
df_store['상권업종중분류명'].nunique()
Out[36]:
89
In [37]:
df_store['상권업종소분류명'].nunique()
Out[37]:
716
상권업종분류표¶
In [40]:
df_store_class = df_store[['상권업종대분류명','상권업종중분류명','상권업종소분류명']].drop_duplicates().sort_values(['상권업종대분류명','상권업종중분류명','상권업종소분류명'])
In [41]:
# 상권업종 분류표 모두보기(최대 행 수 지정)
pd.options.display.max_rows=20
df_store_class
Out[41]:
상권업종대분류명 | 상권업종중분류명 | 상권업종소분류명 | |
---|---|---|---|
8094 | 관광/여가/오락 | PC/오락/당구/볼링등 | 기원 |
2885 | 관광/여가/오락 | PC/오락/당구/볼링등 | 당구장 |
4683 | 관광/여가/오락 | PC/오락/당구/볼링등 | 볼링장 |
44597 | 관광/여가/오락 | PC/오락/당구/볼링등 | 비디오감상실 |
53746 | 관광/여가/오락 | PC/오락/당구/볼링등 | 오락용사격장 |
... | ... | ... | ... |
140419 | 학문/교육 | 학원기타 | 학원-모델 |
101249 | 학문/교육 | 학원기타 | 학원-실내운전 |
11474 | 학문/교육 | 학원기타 | 학원-심리변론 |
162249 | 학문/교육 | 학원기타 | 학원-역학 |
115129 | 학문/교육 | 학원기타 | 학원-침술 |
716 rows × 3 columns
전국 상가 등록 현황¶
업종 대분류별 상가 갯수¶
In [40]:
df_store_class1 = df_store['상권업종대분류명'].value_counts()
df_store_class1
Out[40]:
음식 791784
소매 727770
생활서비스 377242
학문/교육 157123
부동산 80471
관광/여가/오락 47527
숙박 38841
스포츠 25180
Name: 상권업종대분류명, dtype: int64
In [41]:
fig = plt.figure(figsize=(10,5), facecolor='snow')
# 막대그래프
plt.subplot(121)
plt.bar(df_store_class1.index, df_store_class1.values)
plt.xticks(rotation=45)
plt.grid(axis='y',ls=':')
# 파이그래프
plt.subplot(122)
plt.pie(df_store_class1.values, labels=df_store_class1.index, autopct='%.1f%%', pctdistance=0.8,
wedgeprops={'width':0.6})
fig.suptitle('전국 업종별 상가 등록 현황', size=20)
fig.tight_layout()
plt.show()
시도별 상가 갯수¶
In [42]:
df_store_sido = df_store['시도명'].value_counts()
df_store_sido
Out[42]:
경기도 516790
서울특별시 325880
경상남도 158901
부산광역시 140029
경상북도 135299
충청남도 115651
전라남도 109831
인천광역시 107679
전라북도 106471
강원도 105273
대구광역시 96784
충청북도 86653
대전광역시 69583
광주광역시 65786
제주특별자치도 47851
울산광역시 45504
세종특별자치시 11973
Name: 시도명, dtype: int64
In [43]:
fig = plt.figure(figsize=(10,5), facecolor='snow')
# 막대그래프
plt.subplot(121)
plt.bar(df_store_sido.index, df_store_sido.values)
plt.xticks(rotation=45)
plt.grid(axis='y',ls=':')
# 파이그래프
plt.subplot(122)
plt.pie(df_store_sido.values, labels=df_store_sido.index, autopct='%.1f%%', pctdistance=0.8,
wedgeprops={'width':0.6})
fig.suptitle('전국 시도별 상가 등록 현황', size=20)
fig.tight_layout()
plt.show()
시도별 업종대분류별 상가 현황¶
In [44]:
df_store_pivot = df_store.pivot_table(index='상권업종대분류명', columns='시도명', values='상호명', aggfunc='count')
In [45]:
plt.figure(figsize=(15,5))
sns.heatmap(df_store_pivot, cmap='Blues', annot=True, fmt='d')
plt.show()
서울특별시 상가 현황¶
In [46]:
df_store_seoul = df_store[df_store['시도명']=='서울특별시'].copy()
df_store_seoul.head(3)
Out[46]:
상호명 | 상권업종대분류명 | 상권업종중분류명 | 상권업종소분류명 | 시도명 | 시군구명 | 행정동명 | 법정동명 | 경도 | 위도 | |
---|---|---|---|---|---|---|---|---|---|---|
1288445 | BYC상신점 | 소매 | 의복의류 | 셔츠/내의/속옷 | 서울특별시 | 송파구 | 거여2동 | 거여동 | 127.147321 | 37.493054 |
1288446 | 제중건강원 | 소매 | 건강/미용식품 | 건강원 | 서울특별시 | 영등포구 | 영등포동 | 영등포동5가 | 126.907168 | 37.520613 |
1288447 | 민속악기사 | 소매 | 취미/오락관련소매 | 악기판매 | 서울특별시 | 성동구 | 용답동 | 용답동 | 127.049018 | 37.566857 |
구별 상가 등록 현황¶
In [47]:
df_store_seoul_gu = df_store_seoul['시군구명'].value_counts()
df_store_seoul_gu
Out[47]:
강남구 31783
송파구 19278
서초구 19038
중구 16595
강서구 15786
...
금천구 9407
서대문구 9099
동작구 8877
강북구 8415
도봉구 7833
Name: 시군구명, Length: 25, dtype: int64
판다스 함수로 시각화¶
- 데이터프레임.plot.함수명
In [48]:
df_store_seoul_gu
Out[48]:
강남구 31783
송파구 19278
서초구 19038
중구 16595
강서구 15786
...
금천구 9407
서대문구 9099
동작구 8877
강북구 8415
도봉구 7833
Name: 시군구명, Length: 25, dtype: int64
In [49]:
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='%.1f%%', pctdistance=0.8, wedgeprops={'width':0.6})
fig.suptitle('서울시 구별 상가등록 현황', size=20)
fig.tight_layout()
plt.show()
In [ ]:
구별/업종대분류별 상가 현황¶
히트맵으로 시각화¶
In [50]:
df_store_seoul_pivot = df_store_seoul.pivot_table(index='상권업종대분류명' , columns='시군구명', values='상호명', aggfunc='count')
In [51]:
plt.figure(figsize=(15,5))
sns.heatmap(df_store_seoul_pivot, cmap='Purples', annot=True, fmt='d')
plt.show()
소분류-구별 상가 등록 수 시각화¶
- scatter차트, hexbin으로 특정 소분류의 구별 상가 등록 수 시각화
- 위도, 경도에 상가 위치 표시
구별 위도, 경도 평균값¶
In [52]:
df_store_seoul_location = df_store_seoul[['시군구명','경도','위도']].groupby('시군구명').mean()
df_store_seoul_location
Out[52]:
경도 | 위도 | |
---|---|---|
시군구명 | ||
강남구 | 127.046516 | 37.505559 |
강동구 | 127.139304 | 37.542769 |
강북구 | 127.023701 | 37.631658 |
강서구 | 126.838680 | 37.553720 |
관악구 | 126.938068 | 37.480156 |
... | ... | ... |
용산구 | 126.979110 | 37.535308 |
은평구 | 126.919514 | 37.609427 |
종로구 | 126.991246 | 37.576429 |
중구 | 126.996447 | 37.563221 |
중랑구 | 127.087664 | 37.596236 |
25 rows × 2 columns
커피전문점/카페/다방 현황¶
In [53]:
plt.figure(figsize=(8,6))
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명']=='커피전문점/카페/다방']
df_store_seoul_class3
sns.scatterplot(data=df_store_seoul_class3, x='경도', y='위도', hue='시군구명', marker='.', alpha=0.1)
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('커피전문점/카페/다방')
plt.show()
In [54]:
plt.figure(figsize=(8,6))
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명']=='커피전문점/카페/다방']
plt.hexbin(df_store_seoul_class3['경도'],df_store_seoul_class3['위도'], cmap='Blues', gridsize=30)
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('커피전문점/카페/다방')
plt.show()
여성미용실¶
In [55]:
plt.figure(figsize=(8,6))
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명']=='여성미용실']
plt.hexbin(df_store_seoul_class3['경도'],df_store_seoul_class3['위도'], cmap='Blues', gridsize=30)
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('여성미용실')
plt.show()
학원-입시¶
In [56]:
plt.figure(figsize=(8,6))
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명']=='학원-입시']
plt.hexbin(df_store_seoul_class3['경도'],df_store_seoul_class3['위도'], cmap='Blues', gridsize=30)
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('학원-입시')
plt.show()
어린이집¶
In [57]:
plt.figure(figsize=(8,6))
df_store_seoul_class3 = df_store_seoul[df_store_seoul['상권업종소분류명']=='어린이집']
plt.hexbin(df_store_seoul_class3['경도'],df_store_seoul_class3['위도'], cmap='Blues', gridsize=30)
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('어린이집')
plt.show()
In [ ]:
'Python' 카테고리의 다른 글
2. Python 기초 - Pandas를 통해 데이터 병합하고 정리, 집계하기 (1) | 2024.01.04 |
---|---|
1. Python 기초 - Pandas에 대한 기본 사용법 정리 (3) | 2024.01.02 |
[python 실습] 인구데이터를 통한 분석 실습 (0) | 2023.03.10 |
[python 실습] 서울시 폭염/열대야 현황 실습 (0) | 2023.03.10 |
[python 실습] seaborn 여러가지 시각화 (0) | 2023.03.10 |