ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스파르타]파이썬 데이터 분석 - 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주차에서 배운 내용이라 반복할 수 있어서 좋았다. 다만, 조금씩 추가되는 내용들이 있어 정리를 잘 해야겠다는 생각이 들었다. 여전히 데이터를 다루는 것은 어렵기보다 재밌다는 생각이 더 많이 들고 있지만, 실제 데이터들은 예제에서 쓰인 데이터들처럼 깔끔하지 않다는 것을 알기에 불쑥불쑥 아쉬운 마음이 찾아오기도 했던 것 같다.

    댓글