개발 일지/파이썬 데이터 분석

[스파르타]파이썬 데이터 분석 - 2주차(#folium)

혬코 2022. 1. 4. 09:18

새로 알게 된 내용😁

1. 데이터 전처리하기

데이터 분석은 다음과 같은 단계로 이뤄진다.

데이터 불러오기 - 데이터 살펴보기 - 데이터 가공하기 - 데이터 시각화하기
# 라이브러리 & 데이터 불어오기
import pandas as pd 
파일변수명 = pd.read_csv('./파일경로.csv')	# Tab 키 이용해서 파일 경로 설정하기

# 데이터 살펴보기
list(파일변수명)
set(파일변수명['column명'])

#데이터 가공하기
가공데이터변수명 = 파일변수명.groupby('colum명1')['column명2'].sum()	# column명1별로 column명2 합계 구하기
# 연도별 등록자동차 수 구하기
# count_of_car_by_year = cardata.groupby('연도')['등록자동차'].count()

# 데이터 시각화하기
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "Malgun Gothic"	# 한글 폰트 설정
plt.figure(figsize=(n,n)			# 그래프 크기 설정
plt.bar(x축, y축)				# 그래프 x축, y축 데이터 설정
plt.title('제목')				# 그래프 제목 설정
plt.xlabel('x축 이름')				# X축 이름 설정
plt.ylabel('y축 이름')				# Y축 이름 설정
plt.xticks(rotation=n)				# n값만큼 X축 항목 기울기 설정
plt.show()					#그래프 나타내기

데이터 전처리 단계의 핵심은 groupby('column명1)['column명2).함수()를 이용해 목적에 맞게 필요한 데이터만 뽑아내는 것이다.

필요에 맞에 데이터 가공하기

ex1) 도로명 주소 시 / 구 / 상세주소로 나눠서 column에 추가하기

commercial[['시', '구', '상세주소']] = commercial['도로명주소'].str.split(' ', n=2, expand=True)
# n=2는 2번 자르겠다는 뜻(3덩어리로 나누겠다.)
# expand=True는 3덩어리를 새로운 column에 추가하겠다는 뜻

 

ex2) 일치하는 데이터 찾기 - "서울특별시" 데이터만 남기기

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

# 진짜 '서울특별시' 데이터만 남았는지 확인하기
set(seoul_data['시'])
print(set(seoul_data['시']), len(set(seoul_data['시']))
# {'서울특별시'} 1

 

ex3) 데이터 합치기 - 구별 치킨집 수 + 구별 유동인구 수
(1) 구별 치킨집 수 데이터, 구별 유동인구 수 데이터를 각각 새로운 데이터 프레임에 넣어준다.

# 구별 치킨집 수
chicken_count_gu = pd.DataFrame(chicken).reset_index()

# 구별 유동인구 수
population_sum_gu = pd.DataFrame(population).reset_index()

※ reset_index()를 통해 왼쪽 이미지에서 오른쪽 이미지로 index가 부여되었다.


(2) 데이터 합쳐주기 - 구별 치킨집 수와 유동인구 수 나타내기

# 구별 유동인구 수의 "군구"를 index로 잡아 구별 치킨집 수의 "구"랑 합친다.
gu_chicken = chicken_count_gu.join(population_sum_gu.set_index('군구'), on='구')


ex4) 날짜 데이터 string 타입으로 변경하기

date = []
for day in population_daily.index:
    date.append(str(day))

# 그래프 그릴 때, plt.plot(date, population_daily)로 입력

 

 

2. folium을 이용해서 지도로 나타내기

데이터에 따라 바 그래프 / 라인 그래프 / 파이 차트 / 히트맵 / 지도 등 어울리는 그래프가 다르다.
folium은 다양한 그래프 종류 중 지리 정보를 나타내는 지도를 그려낼 때 사용되는 라이브러리이다.

# 라이브러리 가져오기
import folium
import json

# 데이터 시각화하기 - 지도
map = folium.Map(location=[위도, 경도], zoom_start=11, tiles='stamentoner')
# 설정한 위도, 경도를 11수준만큼 확대해서 나타낸다(서울 37.5502, 126.982)


여기에 데이터들을 나타내야한다.

# https://raw.githubusercontent.com/southkorea/seoul-maps/master/kostat/2013/json/seoul_municipalities_geo_simple.json
seoul_state_geo = './data/seoul_geo.json'	# 폴더에 지리 데이터가 json 파일로 저장되어있어야 한다.
geo_data = json.load(open(seoul_state_geo, encoding='utf-8'))
folium.Choropleth(geo_data=geo_data,
              data=파일변수명,	# 지도에 표시할 데이터
              columns=[x축, y축],
              fill_color='PuRd',	# 지도 데이터 결과 색상
              key_on='feature.properties.name').add_to(map)

map	# 지도 데이터 나타내기

※ 위 코드에서 key_on='feature.properties.name').add_to(map)은 geo_data가 아래 사진과 같아서 features의 properties의 name으로 매핑한 것을 map 변수에 더하여 준 것을 뜻한다.

만약, 지리 데이터에 name2: "흑석동"처럼 "구" "동"별로 나눠진 데이터도 있고, key_on에서 name2로 매핑했다면, 지도 그래프는 구가아니라 동별로 나눠져서 나타날 것이다.

지도 데이터 결과

 

개발 업무 내용📑

4월 군구별 유동인구 수 구하기

 

4월 & 7월 강남구 일별 유동인구 구하기

마무리 소감😉

큰 틀은 1주차에서 배운 내용이라 반복할 수 있어서 좋았다. 다만, 조금씩 추가되는 내용들이 있어 정리를 잘 해야겠다는 생각이 들었다. 여전히 데이터를 다루는 것은 어렵기보다 재밌다는 생각이 더 많이 들고 있지만, 실제 데이터들은 예제에서 쓰인 데이터들처럼 깔끔하지 않다는 것을 알기에 불쑥불쑥 아쉬운 마음이 찾아오기도 했던 것 같다.