250x250
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 |
Tags
- __getitem__
- __len__
- __annotations__
- zipfile
- randrange()
- MySQL
- items()
- MySqlDB
- fileinput
- inplace()
- 오버라이딩
- choice()
- glob
- shuffle()
- 파이썬
- decode()
- discard()
- JS
- __sub__
- node.js
- Database
- shutil
- mro()
- locals()
- count()
- View
- CSS
- HTML
- remove()
- fnmatch
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(Python) 전국 도시공원 데이터 프로젝트 본문
728x90
반응형
In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
In [ ]:
park = pd.read_csv('/content/drive/MyDrive/KDT/2. 데이터분석/전국도시공원표준데이터.csv', encoding='ms949')
park.head()
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 공원보유시설(운동시설) | 공원보유시설(유희시설) | 공원보유시설(편익시설) | 공원보유시설(교양시설) | 공원보유시설(기타시설) | 지정고시일 | 관리기관명 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | Unnamed: 19 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26440-00001 | 구랑공원 | 문화공원 | NaN | 부산광역시 강서구 구랑동 1199-7 | 35.157215 | 128.854935 | 9137.0 | 4 | NaN | 화장실 | NaN | 팔각정자, 파고라2, 평의자6, 앉음벽14.38m, 축구장(골대2), 컨테이너, 안... | 2011-09-02 | 부산광역시 강서구청 녹지공원과 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | NaN |
1 | 26440-00002 | 압곡공원 | 근린공원 | NaN | 부산광역시 강서구 구랑동 1219 | 35.154655 | 128.854727 | 33756.0 | 4 | NaN | NaN | NaN | 배드민턴장, 족구장, 파고라4, 안내판, 볼라드7, 데크435.11㎡, 데크계단19... | 2008-02-28 | 부산광역시 강서구청 녹지공원과 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | NaN |
2 | 26440-00003 | 서연정공원 | 소공원 | NaN | 부산광역시 강서구 대저1동 1330-7 | 35.216183 | 128.969558 | 646.0 | 7 | NaN | NaN | NaN | 앉음벽13.57m, 트렐리스3, 안내판2, 플랜트2, 파고라, 평의자4 | 2013-01-23 | 부산광역시 강서구청 녹지공원과 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | NaN |
3 | 26440-00004 | 용두공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 1870-67 | 35.183679 | 128.956007 | 1620.0 | NaN | 조합놀이기구, 그네 | NaN | NaN | 정자, 농구장, 평의자6 | 1998-07-25 | 부산광역시 강서구청 녹지공원과 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | NaN |
4 | 26440-00005 | 새동내공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 2407-1 | 35.174568 | 128.950612 | 1009.0 | 8 | 조합놀이기구, 그네, 흔들놀이기구2 | NaN | NaN | 정자, 평의자14, 트렐리스2, 안내판, 볼라드 | 1995-04-07 | 부산광역시 강서구청 녹지공원과 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | NaN |
In [ ]:
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
Reading package lists... Done
Building dependency tree
Reading state information... Done
fonts-nanum is already the newest version (20180306-3).
0 upgraded, 0 newly installed, 0 to remove and 28 not upgraded.
/usr/share/fonts: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/truetype: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/truetype/humor-sans: caching, new cache contents: 1 fonts, 0 dirs
/usr/share/fonts/truetype/liberation: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/truetype/nanum: caching, new cache contents: 10 fonts, 0 dirs
/usr/local/share/fonts: caching, new cache contents: 0 fonts, 0 dirs
/root/.local/share/fonts: skipping, no such directory
/root/.fonts: skipping, no such directory
/usr/share/fonts/truetype: skipping, looped directory detected
/usr/share/fonts/truetype/humor-sans: skipping, looped directory detected
/usr/share/fonts/truetype/liberation: skipping, looped directory detected
/usr/share/fonts/truetype/nanum: skipping, looped directory detected
/var/cache/fontconfig: cleaning cache directory
/root/.cache/fontconfig: not cleaning non-existent cache directory
/root/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
In [ ]:
plt.rc('font', family='NanumBarunGothic')
In [ ]:
park.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 18137 entries, 0 to 18136
Data columns (total 20 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 관리번호 18137 non-null object
1 공원명 18137 non-null object
2 공원구분 18137 non-null object
3 소재지도로명주소 8039 non-null object
4 소재지지번주소 17158 non-null object
5 위도 18137 non-null float64
6 경도 18137 non-null float64
7 공원면적 18137 non-null float64
8 공원보유시설(운동시설) 4845 non-null object
9 공원보유시설(유희시설) 6964 non-null object
10 공원보유시설(편익시설) 5084 non-null object
11 공원보유시설(교양시설) 1160 non-null object
12 공원보유시설(기타시설) 3116 non-null object
13 지정고시일 15225 non-null object
14 관리기관명 17383 non-null object
15 전화번호 16957 non-null object
16 데이터기준일자 18137 non-null object
17 제공기관코드 18137 non-null object
18 제공기관명 18137 non-null object
19 Unnamed: 19 0 non-null float64
dtypes: float64(4), object(16)
memory usage: 2.8+ MB
In [ ]:
park.isnull().sum()
Out[ ]:
관리번호 0
공원명 0
공원구분 0
소재지도로명주소 10098
소재지지번주소 979
위도 0
경도 0
공원면적 0
공원보유시설(운동시설) 13292
공원보유시설(유희시설) 11173
공원보유시설(편익시설) 13053
공원보유시설(교양시설) 16977
공원보유시설(기타시설) 15021
지정고시일 2912
관리기관명 754
전화번호 1180
데이터기준일자 0
제공기관코드 0
제공기관명 0
Unnamed: 19 18137
dtype: int64
In [ ]:
park.columns
Out[ ]:
Index(['관리번호', '공원명', '공원구분', '소재지도로명주소', '소재지지번주소', '위도', '경도', '공원면적',
'공원보유시설(운동시설)', '공원보유시설(유희시설)', '공원보유시설(편익시설)', '공원보유시설(교양시설)',
'공원보유시설(기타시설)', '지정고시일', '관리기관명', '전화번호', '데이터기준일자', '제공기관코드', '제공기관명',
'Unnamed: 19'],
dtype='object')
In [ ]:
park.drop(columns=['공원보유시설(운동시설)', '공원보유시설(유희시설)', '공원보유시설(편익시설)',
'공원보유시설(교양시설)', '공원보유시설(기타시설)', '지정고시일',
'관리기관명', 'Unnamed: 19'], inplace=True)
In [ ]:
park.head()
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26440-00001 | 구랑공원 | 문화공원 | NaN | 부산광역시 강서구 구랑동 1199-7 | 35.157215 | 128.854935 | 9137.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 |
1 | 26440-00002 | 압곡공원 | 근린공원 | NaN | 부산광역시 강서구 구랑동 1219 | 35.154655 | 128.854727 | 33756.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 |
2 | 26440-00003 | 서연정공원 | 소공원 | NaN | 부산광역시 강서구 대저1동 1330-7 | 35.216183 | 128.969558 | 646.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 |
3 | 26440-00004 | 용두공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 1870-67 | 35.183679 | 128.956007 | 1620.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 |
4 | 26440-00005 | 새동내공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 2407-1 | 35.174568 | 128.950612 | 1009.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 |
In [ ]:
park.plot.scatter(x='경도', y='위도', figsize=(8, 10), grid=True)
Out[ ]:
<Axes: xlabel='경도', ylabel='위도'>
In [ ]:
sns.boxplot(y=park['위도'])
Out[ ]:
<Axes: ylabel='위도'>
In [ ]:
sns.boxplot(y=park['경도'])
Out[ ]:
<Axes: ylabel='경도'>
In [ ]:
# 위도와 경도가 잘못 입력된 데이터를 확인
park.loc[(park['위도'] < 32) | (park['경도'] > 132)] # Serise 비교 연산자는 비트연산자와 유사 or == |
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
374 | 11440-00004 | 와우공원 | 근린공원 | NaN | 서울특별시 마포구 창전동3-231 등 59필지 | 27.551606 | 126.929047 | 73590.0 | 02-3153-9553 | 2019-07-22 | 3130000 | 서울특별시 마포구 |
12926 | 43113-00080 | 근린공원5(만수공원) | 근린공원 | NaN | 충청북도 청주시 흥덕구 오송읍 만수리 512 | 36.374204 | 137.202661 | 33258.0 | 043-201-4433 | 2019-06-21 | 5710000 | 충청북도 청주시 |
In [ ]:
park_loc_error = park.loc[(park['위도'] < 32) | (park['경도'] > 132)]
In [ ]:
# 올바른 데이터만 추출
park = park.loc[(park['위도'] >= 32) & (park['경도'] <= 132)]
In [ ]:
park.shape
Out[ ]:
(18135, 12)
In [ ]:
# '공원면적비율' 파생변수 만들기
# sqrt(공원면적) * 0.01
park['공원면적비율'] = park['공원면적'].apply(lambda x: np.sqrt(x) * 0.01)
<ipython-input-70-c8a17ab5b543>:3: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
park['공원면적비율'] = park['공원면적'].apply(lambda x: np.sqrt(x) * 0.01)
In [ ]:
park.head()
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | 공원면적비율 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26440-00001 | 구랑공원 | 문화공원 | NaN | 부산광역시 강서구 구랑동 1199-7 | 35.157215 | 128.854935 | 9137.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.955877 |
1 | 26440-00002 | 압곡공원 | 근린공원 | NaN | 부산광역시 강서구 구랑동 1219 | 35.154655 | 128.854727 | 33756.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 1.837281 |
2 | 26440-00003 | 서연정공원 | 소공원 | NaN | 부산광역시 강서구 대저1동 1330-7 | 35.216183 | 128.969558 | 646.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.254165 |
3 | 26440-00004 | 용두공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 1870-67 | 35.183679 | 128.956007 | 1620.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.402492 |
4 | 26440-00005 | 새동내공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 2407-1 | 35.174568 | 128.950612 | 1009.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.317648 |
In [ ]:
# '도로명 주소'는 입력되지 않고, '지번 주소'만 입력된 데이터를 확인
park.loc[park['소재지도로명주소'].isnull() & park['소재지지번주소'].notnull()]
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | 공원면적비율 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26440-00001 | 구랑공원 | 문화공원 | NaN | 부산광역시 강서구 구랑동 1199-7 | 35.157215 | 128.854935 | 9137.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.955877 |
1 | 26440-00002 | 압곡공원 | 근린공원 | NaN | 부산광역시 강서구 구랑동 1219 | 35.154655 | 128.854727 | 33756.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 1.837281 |
2 | 26440-00003 | 서연정공원 | 소공원 | NaN | 부산광역시 강서구 대저1동 1330-7 | 35.216183 | 128.969558 | 646.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.254165 |
3 | 26440-00004 | 용두공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 1870-67 | 35.183679 | 128.956007 | 1620.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.402492 |
4 | 26440-00005 | 새동내공원 | 어린이공원 | NaN | 부산광역시 강서구 대저2동 2407-1 | 35.174568 | 128.950612 | 1009.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.317648 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
18132 | 28140-00009 | 송림4공원 | 어린이공원 | NaN | 인천광역시 동구 송림동 291-6 | 37.478715 | 126.653257 | 412.9 | 032-770-6205 | 2019-07-30 | 3500000 | 인천광역시 동구 | 0.203199 |
18133 | 47760-00002 | 서부공원 | 근린공원 | NaN | 경상북도 영양군 영양읍 서부리 123 | 36.660456 | 129.114953 | 56045.0 | 054-680-6340 | 2019-09-05 | 5170000 | 경상북도 영양군 | 2.367383 |
18134 | 47760-00003 | 입암공원 | 근린공원 | NaN | 경상북도 영양군 입암면 신구리 산27-5 | 36.594802 | 129.093007 | 109262.0 | 054-680-6340 | 2019-09-05 | 5170000 | 경상북도 영양군 | 3.305480 |
18135 | 47760-00004 | 수비공원 | 근린공원 | NaN | 경상북도 영양군 수비면 발리리 산48 | 36.761440 | 129.200011 | 67159.0 | 054-680-6340 | 2019-09-05 | 5170000 | 경상북도 영양군 | 2.591505 |
18136 | 47760-00005 | 삼지연꽃 테마파크 | 수변공원 | NaN | 경상북도 영양군 영양읍 삼지리 200 | 36.662816 | 129.129372 | 380000.0 | 054-680-6340 | 2019-09-05 | 5170000 | 경상북도 영양군 | 6.164414 |
10096 rows × 13 columns
In [ ]:
# '도로명 주소'와 '지번 주소'가 모두 입력된 데이터를 확인
park.loc[park['소재지도로명주소'].notnull() & park['소재지지번주소'].isnull()]
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | 공원면적비율 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2132 | 46130-00071 | 오복공원 | 근린공원 | 전라남도 여수시 경호동 239번지 | NaN | 34.709529 | 127.722047 | 16036.0 | 061-659-4627 | 2019-06-13 | 6460000 | 전라남도 | 1.266333 |
2133 | 46130-00072 | 대경도공원 | 근린공원 | 전라남도 여수시 경호동 193-2 | NaN | 34.707635 | 127.722798 | 26384.0 | 061-659-4627 | 2019-06-13 | 6460000 | 전라남도 | 1.624315 |
2135 | 46130-00076 | 성산공원 | 근린공원 | 전라남도 여수시 화장동 949 | NaN | 34.774538 | 127.645884 | 70845.0 | 061-659-4627 | 2019-06-13 | 6460000 | 전라남도 | 2.661672 |
2137 | 46130-00078 | 주공공원 | 어린이공원 | 전라남도 여수시 신기동 4 | NaN | 34.765323 | 127.676103 | 1500.0 | 061-659-4627 | 2019-06-13 | 6460000 | 전라남도 | 0.387298 |
2138 | 46130-00079 | 들몰공원 | 어린이공원 | 전라남도 여수시 신기동 5 | NaN | 34.765144 | 127.679023 | 1500.0 | 061-659-4627 | 2019-06-13 | 6460000 | 전라남도 | 0.387298 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
18115 | 44800-00078 | 남당취락2소공원 | 소공원 | 충청남도 홍성군 서부면 남당리 859 일원 | NaN | 36.539355 | 126.471621 | 2395.0 | 041-630-1268 | 2019-06-25 | 4600000 | 충청남도 홍성군 | 0.489387 |
18116 | 44800-00079 | 옥암1호소공원 | 소공원 | 충청남도 홍성군 홍성읍 옥암리 148-8 일원 | NaN | 36.593251 | 126.651456 | 1142.0 | 041-630-1268 | 2019-06-25 | 4600000 | 충청남도 홍성군 | 0.337935 |
18117 | 44800-00080 | 옥암2호어린이공원 | 어린이공원 | 충청남도 홍성군 홍성읍 오관리 190 일원 | NaN | 36.599064 | 126.663734 | 1612.0 | 041-630-1268 | 2019-06-25 | 4600000 | 충청남도 홍성군 | 0.401497 |
18118 | 44800-00081 | 옥암1호어린이공원 | 어린이공원 | 충청남도 홍성군 홍성읍 옥암리 381-3 일원 | NaN | 36.587390 | 126.646558 | 1586.0 | 041-630-1268 | 2019-06-25 | 4600000 | 충청남도 홍성군 | 0.398246 |
18119 | 44800-00082 | 홍성읍24호소공원 | 소공원 | 충청남도 홍성군 홍성읍 오관리 472 일원 | NaN | 36.599064 | 126.663734 | 701.0 | 041-630-1268 | 2019-06-25 | 4600000 | 충청남도 홍성군 | 0.264764 |
979 rows × 13 columns
In [ ]:
# '도로명 주소'와 '지번 주소'가 모두 입력되지 않은 데이터를 확인
park.loc[park['소재지도로명주소'].isnull() & park['소재지지번주소'].isnull()]
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | 공원면적비율 |
---|
In [ ]:
# 도로명 주소가 입력되지 않은 데이터를 지번 주소로 대신 채움
park['소재지도로명주소'].fillna(park['소재지지번주소'], inplace=True)
<ipython-input-81-aefedfcc3843>:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
park['소재지도로명주소'].fillna(park['소재지지번주소'], inplace=True)
In [ ]:
park.head()
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | 공원면적비율 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26440-00001 | 구랑공원 | 문화공원 | 부산광역시 강서구 구랑동 1199-7 | 부산광역시 강서구 구랑동 1199-7 | 35.157215 | 128.854935 | 9137.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.955877 |
1 | 26440-00002 | 압곡공원 | 근린공원 | 부산광역시 강서구 구랑동 1219 | 부산광역시 강서구 구랑동 1219 | 35.154655 | 128.854727 | 33756.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 1.837281 |
2 | 26440-00003 | 서연정공원 | 소공원 | 부산광역시 강서구 대저1동 1330-7 | 부산광역시 강서구 대저1동 1330-7 | 35.216183 | 128.969558 | 646.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.254165 |
3 | 26440-00004 | 용두공원 | 어린이공원 | 부산광역시 강서구 대저2동 1870-67 | 부산광역시 강서구 대저2동 1870-67 | 35.183679 | 128.956007 | 1620.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.402492 |
4 | 26440-00005 | 새동내공원 | 어린이공원 | 부산광역시 강서구 대저2동 2407-1 | 부산광역시 강서구 대저2동 2407-1 | 35.174568 | 128.950612 | 1009.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.317648 |
In [ ]:
# split(' ', expend=True): 데이터프레임으로 해당 데이터가 분리되고 인덱싱과 슬라이싱이 가능
# 0 1 2 3
# 부산광역시 강서구 구랑동 1199-7
park['소재지도로명주소'].str.split(' ', expand=True)
Out[ ]:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|---|
0 | 부산광역시 | 강서구 | 구랑동 | 1199-7 | None | None | None | None | None |
1 | 부산광역시 | 강서구 | 구랑동 | 1219 | None | None | None | None | None |
2 | 부산광역시 | 강서구 | 대저1동 | 1330-7 | None | None | None | None | None |
3 | 부산광역시 | 강서구 | 대저2동 | 1870-67 | None | None | None | None | None |
4 | 부산광역시 | 강서구 | 대저2동 | 2407-1 | None | None | None | None | None |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
18132 | 인천광역시 | 동구 | 송림동 | 291-6 | None | None | None | None | None |
18133 | 경상북도 | 영양군 | 영양읍 | 서부리 | 123 | None | None | None | None |
18134 | 경상북도 | 영양군 | 입암면 | 신구리 | 산27-5 | None | None | None | None |
18135 | 경상북도 | 영양군 | 수비면 | 발리리 | 산48 | None | None | None | None |
18136 | 경상북도 | 영양군 | 영양읍 | 삼지리 | 200 | None | None | None | None |
18135 rows × 9 columns
In [ ]:
# '도로명 주소'에서 '시도'만 추출하여 '시도' 파생변수 만들기
park['시도'] = park['소재지도로명주소'].str.split(' ', expand=True)[0]
In [ ]:
park.head()
Out[ ]:
관리번호 | 공원명 | 공원구분 | 소재지도로명주소 | 소재지지번주소 | 위도 | 경도 | 공원면적 | 전화번호 | 데이터기준일자 | 제공기관코드 | 제공기관명 | 공원면적비율 | 시도 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26440-00001 | 구랑공원 | 문화공원 | 부산광역시 강서구 구랑동 1199-7 | 부산광역시 강서구 구랑동 1199-7 | 35.157215 | 128.854935 | 9137.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.955877 | 부산광역시 |
1 | 26440-00002 | 압곡공원 | 근린공원 | 부산광역시 강서구 구랑동 1219 | 부산광역시 강서구 구랑동 1219 | 35.154655 | 128.854727 | 33756.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 1.837281 | 부산광역시 |
2 | 26440-00003 | 서연정공원 | 소공원 | 부산광역시 강서구 대저1동 1330-7 | 부산광역시 강서구 대저1동 1330-7 | 35.216183 | 128.969558 | 646.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.254165 | 부산광역시 |
3 | 26440-00004 | 용두공원 | 어린이공원 | 부산광역시 강서구 대저2동 1870-67 | 부산광역시 강서구 대저2동 1870-67 | 35.183679 | 128.956007 | 1620.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.402492 | 부산광역시 |
4 | 26440-00005 | 새동내공원 | 어린이공원 | 부산광역시 강서구 대저2동 2407-1 | 부산광역시 강서구 대저2동 2407-1 | 35.174568 | 128.950612 | 1009.0 | 051-970-4536 | 2019-05-02 | 3360000 | 부산광역시 강서구 | 0.317648 | 부산광역시 |
In [ ]:
park['시도'].value_counts()
Out[ ]:
경기도 3318
전라남도 1882
경상남도 1825
서울특별시 1744
충청남도 1723
전라북도 1137
경상북도 917
충청북도 898
울산광역시 887
인천광역시 675
부산광역시 653
강원도 647
대구광역시 586
대전광역시 497
광주광역시 429
제주특별자치도 246
세종특별자치시 70
강원 1
Name: 시도, dtype: int64
In [ ]:
# '시도'에 '강원'을 '강원도'로 변경
park['시도'][park['시도'] == '강원'] = '강원도'
<ipython-input-87-d3958943db97>:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
park['시도'][park['시도'] == '강원'] = '강원도'
In [ ]:
park['시도'].value_counts()
Out[ ]:
경기도 3318
전라남도 1882
경상남도 1825
서울특별시 1744
충청남도 1723
전라북도 1137
경상북도 917
충청북도 898
울산광역시 887
인천광역시 675
부산광역시 653
강원도 648
대구광역시 586
대전광역시 497
광주광역시 429
제주특별자치도 246
세종특별자치시 70
Name: 시도, dtype: int64
In [ ]:
plt.figure(figsize=(8, 10))
sns.scatterplot(data=park, x='경도', y='위도', hue='시도')
Out[ ]:
<Axes: xlabel='경도', ylabel='위도'>
In [ ]:
park_sido = pd.DataFrame(park['시도'].value_counts())
park_sido
Out[ ]:
시도 | |
---|---|
경기도 | 3318 |
전라남도 | 1882 |
경상남도 | 1825 |
서울특별시 | 1744 |
충청남도 | 1723 |
전라북도 | 1137 |
경상북도 | 917 |
충청북도 | 898 |
울산광역시 | 887 |
인천광역시 | 675 |
부산광역시 | 653 |
강원도 | 648 |
대구광역시 | 586 |
대전광역시 | 497 |
광주광역시 | 429 |
제주특별자치도 | 246 |
세종특별자치시 | 70 |
In [ ]:
# value_counts(normalize=True): 전체 합계에 대한 비율이 계산
park_sido_normalize = pd.DataFrame(park['시도'].value_counts(normalize=True))
park_sido_normalize
Out[ ]:
시도 | |
---|---|
경기도 | 0.182961 |
전라남도 | 0.103777 |
경상남도 | 0.100634 |
서울특별시 | 0.096168 |
충청남도 | 0.095010 |
전라북도 | 0.062696 |
경상북도 | 0.050565 |
충청북도 | 0.049518 |
울산광역시 | 0.048911 |
인천광역시 | 0.037221 |
부산광역시 | 0.036008 |
강원도 | 0.035732 |
대구광역시 | 0.032313 |
대전광역시 | 0.027406 |
광주광역시 | 0.023656 |
제주특별자치도 | 0.013565 |
세종특별자치시 | 0.003860 |
In [ ]:
# value_counts(ascending=True): 오름차순으로 정렬
park_sido_ascending = pd.DataFrame(park['시도'].value_counts(ascending=True))
park_sido_ascending
Out[ ]:
시도 | |
---|---|
세종특별자치시 | 70 |
제주특별자치도 | 246 |
광주광역시 | 429 |
대전광역시 | 497 |
대구광역시 | 586 |
강원도 | 648 |
부산광역시 | 653 |
인천광역시 | 675 |
울산광역시 | 887 |
충청북도 | 898 |
경상북도 | 917 |
전라북도 | 1137 |
충청남도 | 1723 |
서울특별시 | 1744 |
경상남도 | 1825 |
전라남도 | 1882 |
경기도 | 3318 |
In [ ]:
# 시도별 합계 데이터(park_sido)와 비율 데이터(park_sido_normalize)를 병합
pd.concat([park_sido, park_sido_normalize], axis=1)
Out[ ]:
시도 | 시도 | |
---|---|---|
경기도 | 3318 | 0.182961 |
전라남도 | 1882 | 0.103777 |
경상남도 | 1825 | 0.100634 |
서울특별시 | 1744 | 0.096168 |
충청남도 | 1723 | 0.095010 |
전라북도 | 1137 | 0.062696 |
경상북도 | 917 | 0.050565 |
충청북도 | 898 | 0.049518 |
울산광역시 | 887 | 0.048911 |
인천광역시 | 675 | 0.037221 |
부산광역시 | 653 | 0.036008 |
강원도 | 648 | 0.035732 |
대구광역시 | 586 | 0.032313 |
대전광역시 | 497 | 0.027406 |
광주광역시 | 429 | 0.023656 |
제주특별자치도 | 246 | 0.013565 |
세종특별자치시 | 70 | 0.003860 |
In [ ]:
park_sido = park_sido.merge(park_sido_normalize, left_index=True, right_index=True).reset_index()
park_sido
Out[ ]:
index | 시도_x | 시도_y | |
---|---|---|---|
0 | 경기도 | 3318 | 0.182961 |
1 | 전라남도 | 1882 | 0.103777 |
2 | 경상남도 | 1825 | 0.100634 |
3 | 서울특별시 | 1744 | 0.096168 |
4 | 충청남도 | 1723 | 0.095010 |
5 | 전라북도 | 1137 | 0.062696 |
6 | 경상북도 | 917 | 0.050565 |
7 | 충청북도 | 898 | 0.049518 |
8 | 울산광역시 | 887 | 0.048911 |
9 | 인천광역시 | 675 | 0.037221 |
10 | 부산광역시 | 653 | 0.036008 |
11 | 강원도 | 648 | 0.035732 |
12 | 대구광역시 | 586 | 0.032313 |
13 | 대전광역시 | 497 | 0.027406 |
14 | 광주광역시 | 429 | 0.023656 |
15 | 제주특별자치도 | 246 | 0.013565 |
16 | 세종특별자치시 | 70 | 0.003860 |
In [ ]:
park_sido.columns = ['시도', '합계', '평균']
In [ ]:
park_sido
Out[ ]:
시도 | 합계 | 평균 | |
---|---|---|---|
0 | 경기도 | 3318 | 0.182961 |
1 | 전라남도 | 1882 | 0.103777 |
2 | 경상남도 | 1825 | 0.100634 |
3 | 서울특별시 | 1744 | 0.096168 |
4 | 충청남도 | 1723 | 0.095010 |
5 | 전라북도 | 1137 | 0.062696 |
6 | 경상북도 | 917 | 0.050565 |
7 | 충청북도 | 898 | 0.049518 |
8 | 울산광역시 | 887 | 0.048911 |
9 | 인천광역시 | 675 | 0.037221 |
10 | 부산광역시 | 653 | 0.036008 |
11 | 강원도 | 648 | 0.035732 |
12 | 대구광역시 | 586 | 0.032313 |
13 | 대전광역시 | 497 | 0.027406 |
14 | 광주광역시 | 429 | 0.023656 |
15 | 제주특별자치도 | 246 | 0.013565 |
16 | 세종특별자치시 | 70 | 0.003860 |
In [ ]:
plt.figure(figsize=(12, 8))
plt.xticks(rotation=45)
sns.barplot(data=park_sido, x='시도', y='합계')
Out[ ]:
<Axes: xlabel='시도', ylabel='합계'>
In [ ]:
plt.figure(figsize=(12, 8))
sns.barplot(data=park_sido, x='합계', y='시도')
Out[ ]:
<Axes: xlabel='합계', ylabel='시도'>
728x90
반응형
'파이썬 데이터 분석' 카테고리의 다른 글
(Python) 스타벅스 API를 이용한 프로젝트 (0) | 2023.06.09 |
---|---|
(Python) 따릉이 API를 이용한 프로젝트 (0) | 2023.06.09 |
(Python) 상권별 업종 밀집 통계 프로젝트 (0) | 2023.06.09 |
(Python) folium (0) | 2023.06.08 |
(Python) 워드 클라우드 (0) | 2023.06.08 |
Comments