반응형
In [7]:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import folium
%matplotlib inline
도서관 데이터 가져오기¶
In [6]:
library = pd.read_excel('./data/library.xlsx', skiprows=7)
library.head()
Out[6]:
In [12]:
library['주소'].isnull().sum(), library['전화번호'].isnull().sum()
Out[12]:
주소 null 값이 있는 애들은 0, 전화번호는 47건이나되니까 주소를 가지고 서울구역을 나누기로 마음 먹었따
In [14]:
library['주소'].str.split()[0]
Out[14]:
2. str.split()¶
- str.split()을 사용하게 되면, ' ' 띄어쓰기(default)를 기준으로 주소를 나누어 list형식으로 나타내준다.
- str.split(' ', n=2, expand=True)를 이용하면, 시/ 구/ 세부주소 로 나눌 수 있다.
- rename까지 해주면, 깔끔하게 columns 명까지 바꾸어 줄 수 있다.
In [26]:
library['주소'].str.split(' ', n=2, expand=True).rename(columns={0:'시', 1:'구', 2:'상세주소'}).head()
Out[26]:
하지만, 우리는 str.split(' ', n=n).str을 이용해 바로 column을 추가해줄거임!
In [29]:
library['시'], library['구'], library['상세주소'] = library['주소'].str.split(' ', n=2).str
library.tail()
Out[29]:
3. 서울 데이터만 뽑아내기¶
서울과 서울특별시로 나누어져있기 때문에, str.match('서울')를 이용하여 서울이 들어간 곳을 '서울특별시'로 통일해주자.
In [43]:
print(len(library[library['시'].str.match('서울')]))
library[library['시'].str.match('서울')].head()
Out[43]:
3-1. df.replce(to_replace=['Abas'], values='A', inplace=True)를 이용하여 문자를 대체할 수 있다.¶
In [65]:
library['시'].replace(
to_replace=['서울'],
value='서울특별시',
inplace=True
)
len(library[library['시'] == '서울'])
Out[65]:
In [67]:
library_seoul = library[library['시']=='서울특별시']
print(library_seoul.shape, library.shape)
library_seoul.head()
Out[67]:
총 689개의 도서관중 155개의 서울 도서관들이 뽑혔다.
4. 위도와 경도를 이용하여 folium 지도에 뿌려주기¶
In [73]:
seoul = library_seoul.set_index('도서관명')
seoul.head()
Out[73]:
In [74]:
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
for i in seoul.index:
folium.Marker([seoul['위도'][i],
seoul['경도'][i]]).add_to(map)
map
Out[74]:
In [78]:
seoul_gu = list(set(seoul['구']))
print(seoul_gu)
In [89]:
seoul[seoul['구']=='관악구'].shape[0]
Out[89]:
In [97]:
gu_dict = {}
for gu in seoul_gu:
gu_dict[gu] = seoul[seoul['구']==gu].shape[0]
print(gu_dict)
In [139]:
gu = pd.DataFrame.from_dict(gu_dict, orient='index')
gu.columns = ['개수']
gu.T
Out[139]:
5. 서울 인구수 정리하기¶
In [122]:
pop_seoul = pd.read_excel('./data/population_in_Seoul.xls',
header=2, parse_cols='B, D, G, J, N',
encoding='utf-8')
pop_seoul.head()
Out[122]:
column 이름 변경하기¶
df.rename(columns={'자치구':'구', '계':'인구수', '계.1':'한국인', '계.2':'외국인', '65세이상고령자':'고령자'}, inplace=True)
In [124]:
pop_seoul.rename(columns={'자치구':'구', '계':'인구수', '계.1':'한국인', '계.2':'외국인', '65세이상고령자':'고령자'}, inplace=True)
pop_seoul=pop_seoul[1:]
pop_seoul.head()
Out[124]:
6. 서울 인구별 도서관 비율 구하기¶
인구/ 도서관개수 합치기
In [129]:
pop_seoul = pop_seoul[0:25]
In [140]:
gu = gu.reset_index()
gu.columns = ['구', '도서관개수']
gu.head()
Out[140]:
In [141]:
data_result = pd.merge(pop_seoul, gu, on='구')
data_result.head()
Out[141]:
6-1.도서관개수 시각화¶
폰트 설정
In [151]:
from matplotlib import font_manager, rc
rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
In [153]:
data_result.set_index('구')['도서관개수'].sort_values().plot(kind='barh', grid='True', figsize=(10, 10))
Out[153]:
6-2.도서관 비율¶
In [154]:
data_result['도서관비율'] = data_result['도서관개수']/data_result['인구수']*100
data_result.set_index('구')['도서관비율'].sort_values().plot(kind='barh', grid='True', figsize=(10, 10))
Out[154]:
6-4. scatter로 표현하기¶
In [164]:
plt.figure(figsize=(7, 7))
plt.scatter(data_result['인구수'], data_result['도서관개수'], s= 30)
for i in data_result['구']:
plt.text(data_result[data_result['구']==i]['인구수'], data_result[data_result['구']==i]['도서관개수'], i)
plt.xlabel('인구수')
plt.xlabel('도서관개수')
plt.grid()
plt.show()
In [166]:
result = data_result.set_index('구')
result.head()
Out[166]:
In [174]:
import json
geo_str = json.load(open('./data/02. skorea_municipalities_geo_simple.json', encoding='utf-8'))
도서관 개수별 시각화¶
In [175]:
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
map.choropleth(geo_data=geo_str,
data=result['도서관개수'],
columns=[result.index, result['도서관개수']],
fill_color='YlGnBu',
key_on='feature.id')
map
Out[175]:
도서관 비율 시각화¶
In [173]:
map2 = folium.Map(location=[37.5502, 126.982], zoom_start=11)
map2.choropleth(geo_data=geo_str,
data=result['도서관비율'],
columns=[result.index, result['도서관비율']],
fill_color='YlGnBu',
key_on='feature.id')
map2
Out[173]:
데이터는 정보나루(https://www.data4library.kr/libDataL)에서 다운받아 사용했다.
반응형
'Project > 데이터 가지고 놀기' 카테고리의 다른 글
[Seoul Store] 내맘대로 하는 서울상가 데이터 탐색기 (2) (0) | 2018.07.16 |
---|---|
[Seoul Store] 내맘대로 하는 서울상가 데이터 탐색기 (1) (0) | 2018.07.14 |
pixel-art :: openCV 기초 (4) - 이미지 임계처리 (1) | 2018.03.06 |
pixel-art :: openCV 기초 (3) - 이미지 연산 (0) | 2018.03.06 |
pixel-art :: openCV 기초 (2) - pixel 접근 및 이미지 복사 (0) | 2018.02.08 |
댓글