Python 데이터 분석(2)

2021. 7. 17. 19:11Soft_Ware/Python

이번 블로그는 지난 블로그보다 조금 더 복잡한 데이터를 다루기로 하자.

사용할 데이터는 상가에 대한 분류명,업소번호,도로명, 시군구 등 39개의 column을 가지는 데이터를 다룬다.

 

우선 저번과 마찬가지로 Python의 Pandas 라이브러리를 이용하여 csv파일을 읽어들이자.

 

csv데이터

다음과 같이 읽어들인 데이터는 여러가지 column에 의해서 나뉘며, 데이터의 수도 상당하다.

 

이렇게  Column이 많은 데이터의 경우 이를 확인하는 방법이 있는데 다음과 같다.

list(변수 이름) ##len(list(변수이름))으로 list의 숫자도 파악할 수 있다.

또한 하나의 칼럼에서 분류되는 특징이 어떤 것이 있는지 알 수 있는 방법도 있다.

set(변수이름['칼럼 이름'])

 

필자는 가지고 있는 데이터에서 구에 따른 치킨가게 수의 합계를 얻어내고 싶었고 이를 위해서는 먼저 도로명 주소를 쪼개야 했다.

필자가 가지고 있는 데이터의 도로명 주소에서 시,구,상세주소를 뽑아내고 싶어서  str.split()함수를 이용하였고 결과적으로 칼럼이 확장된 것을 확인할 수 있었다.

칼럼이 확장된 모습

첫째로 구를 뽑아내는데 성공했으면 두번쨰로는 업종에서 치킨가게를 뽑아내야 했다.

우리의 데이터에서 set키워드와 상권업종소분류명을 이용하여 치킨과 관련된 데이터는 '후라이드/양념치킨'이라는 것을 알아내었다.

추가적으로 우리는 많이 지역중에서 서울시에 있는 구에 대해서 데이터를 분석하기 위해서 데이터에서 서울특별시를 뽑았는데 다음과 같은 코드로 구현하였다.

seoul_data = commerical[commerical['시'] == '서울특별시']

이 다음으로 치킨과 관련된 데이터를 서울시를 뽑아낸 방법과 같은 방법으로 진행하였다.

seoul_chk_data = seoul_data[seoul_data['상권업종소분류명'] == '후라이드/양념치킨']

 

 

여기까지가 수많은 데이터중에서 서울시의 치킨가게에 대한 데이터를 뽑은 과정이다.

지난 블로그에서 데이터를 추출하고 다음 단계로 정렬 및 데이터 시각화를 진행하였다.

이번 블로그에서도 마찬가지로 추출한 데이터에 대해서 우선 정렬, 데이터 시각화를 다음과 같은 코드로 진행한다.

 

###내림차순으로 정렬
groupby_category = seoul_chk_data.groupby('구')['상권업종소분류명']
sorted_chk_count_region = groupby_category.count().sort_values(ascending = False)
sorted_chk_count_region

###그래프 그리기
plt.figure(figsize=(10,5))
plt.bar(sorted_chk_count_region.index, sorted_chk_count_region)
plt.title('구에 따른 치킨가게 수의 합계')
plt.xticks(rotation = 90)##x축 라벨 설정
plt.show()

코드 실행 결과

다음과 같이 막대 바 형식으로 잘 출력된 것을 알 수 있다.

 

하지만 데이터를 시각화하는 방법에는 matplotlib 외에도 지도형식으로 그릴 수 있는 방법이 있는데, 이는 folium라이브러리를 이용하면 된다.

 

import folium
import json

seoul_state_geo = './data/seoul_geo.json'
geo_data = json.load(open(seoul_state_geo, encoding = 'utf-8'))

map = folium.Map(location = [37.5502, 126.982], zoom_start = 11)

folium.Choropleth(geo_data = geo_data,data =sorted_chk_count_region,colums = [sorted_chk_count_region.index]
                 ,fill_color = 'PuRd',key_on = 'properties.name').add_to(map)

실행 결과이다.

실행 결과

  • JSON

파이썬에서 많이 사용하는 JSON은 javaScript Object Notation은 "속성-값" 쌍 또는 "키-값" 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이라고 위키백과에 표기되어 있다.

간단히 말하면 어떤 데이터를 JSON형식으로 바꾸는 것인데 JSON은 분류하는데 사용하는 키 혹은 속성 그리고 그에 대한 값으로 이루어진 데이터인 것이다.이러한 데이터를 JSON형태의 텍스트로 분류해준다.

 

이와 관련된 결과는 소스코드 5번째줄의 json.load를 통해 확인할 수 있다.

geo_data = json.load(open(seoul_state_geo, encoding = 'utf-8'))

이는 4번째 줄에서 경로로 지정해준 seoul_statge_geo 데이터를 open하는데 utf-8방식으로 인코딩 하여 open하겠다는 의미이다.

UTF-8 : 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용하는 가변 길이 문자 인코딩 방식 중 하나.

open한 데이터를 json형태로 load하여 geo_data에 저장한다는 의미이다.

 

 

  • Folium

folium 라이브러리는 지도 데이터를 시각화하는데 주로 이용되며, 코드의 folium.Map은 지도를 설정하는 함수이다.

 

다음은 지도를 생성하는 코드이다.

map = folium.Map(location = [37.5502, 126.982], zoom_start = 11)

location은 리스트내에 위도와 경도를 입력할 수 있으며, 필자가 입력한 숫자는 서울 중심부의 위도 및 경도이다.

zoom_start는 지도 생성시 확대 및 축소에 관련된 것이며 11로 시작한다.

추가적으로 folium.Map()의 인자에 tiles을 이용하여 지도를 설정할 수도 있다.

tiles을 'stamentoner'로 설정하면 논과 강만을 볼 수 있다.

 

앞서 바 그래프로 시각화한 데이터를 이용하여 지도 시각화를 진행하는 Choropleth 레이어이다.

folium.Choropleth(geo_data = geo_data,data =sorted_chk_count_region,colums = [sorted_chk_count_region.index]
                 ,fill_color = 'PuRd',key_on = 'properties.name').add_to(map)

 

여기서 중요하게 볼 것은 key_on이라는 키워드인데 'properties.name'이라는 것은 앞서 json으로 load한 값에서 찾을 수 있다.

json.load의 결과

위 사진과 같이 출력되며 우리가 알고 싶은 정보는 구에 따른 치킨가게 수이므로, key_on에 사진에서 강동구가 표시된 properties.name을 입력해주면 된다.

추가적으로 fill_color = 'PuRd'는 치킨가게 수가 많은 곳에 색을 진하게 칠할 것인데 Purple Red로 칠하겠다는 의미이다.

 

마지막으로 필자는 구에 따른 유동인구수와 치킨가게의 수의 관계를 통하여 어느 지역에 치킨 가게가 필요할까라는 결과를 도출하기 위해서 데이터를 추출하는 과정을 거쳤다.

new_chk_count_region = pd.DataFrame(sorted_chk_count_region).reset_index()
new_sum_pop_data = pd.DataFrame(sorted_population_data).reset_index()
region_chk = new_chk_count_region.join(new_sum_pop_data.set_index('군구'), on = '구')
region_chk['유동인구수/치킨집수'] = region_chk['유동인구수']/region_chk['상권업종소분류명']

위와 같이 지역별 치킨 가게의 수 데이터 프레임을 구축하고 이에 대한 인덱스를 구에 맞춰서 설정하였고, 지역별 유동 인구수도 같은 방식으로 설정하였다.

필자가 가져야 하는 데이터는 구에 따른 유동인구수/치킨가게의 수이므로 구축한 두개의 데이터 프레임을 합칠 필요가 있었다.

데이터 프레임.join(합치고 싶은 데이터 프레임.set_index('특정 index'), on = '만들어질 column')

위 코드로 두개의 데이터 프레임을 합칠 수 있다.

마지막으로 나누기 연산인 '/'를 통하여 새롭게 만든 데이터 프레임에 Column을 추가하여 원하는 데이터를 추출할 수 있다.

 

데이터 추출 및 시각화에는 여러 방법이 있으며 여러 가지 시각화 방법을 통해 자신이 얻고 싶은 데이터를 알맞은 방법으로 시각화하는 연습이 필요하다.

 

'Soft_Ware > Python' 카테고리의 다른 글

Python 데이터 분석(4)  (0) 2021.08.02
Python 데이터 분석(3)  (0) 2021.07.17
Python 데이터분석(1)  (0) 2021.07.05
Python 기초 문법  (0) 2021.07.03