Python 데이터분석 - 2주차

데이터분석

데이터분석의 4단계

데이터 불러오기 → 데이터 살펴보기 → 데이터 가공하기 → 데이터 시각화

어울리는 그래프 찾기

바 그래프

  • 각 항목들의 수치와 순위를 볼 때 좋아요

라인 그래프

  • 이전 항목들 혹은 흐름에 따라 데이터의 관계를 볼 때 좋아요

파이 차트

  • 비율을 볼 때 좋아요

히트맵

  • 두 개의 축의 수치를 한 눈에 보기 좋아요

지도

  • 지리 정보를 한 눈에 보기 좋아요

[상권데이터] 전처리 및 시각화

import pandas as pd

commercial = pd.read_csv('./data/commercial.csv')
commercial

commercial.groupby('상가업소번호')['상권업종소분류명'].count().sort_values(ascending=False)

category_range = set(commercial['상권업종소분류명'])
print(category_range, len(category_range))

commercial[['시', '구', '상세주소']] = commercial['도로명주소'].str.split(' ', n=2, expand=True)
commercial.tail(5)

seoul_data = commercial[commercial['시']=='서울특별시']
seoul_data.tail(5)

city_type = set(seoul_data['시'])
print(city_type, len(city_type))

seoul_chicken_data = seoul_data[seoul_data['상권업종소분류명']=='후라이드/양념치킨']
seoul_chicken_data.tail(5)

groupdata = seoul_chicken_data.groupby('구')
group_by_category = groupdata['상권업종소분류명']
chicken_count_gu = group_by_category.count()
sorted_chicken_count_gu = chicken_count_gu.sort_values(ascending=False)
sorted_chicken_count_gu
import matplotlib.pyplot as plt

# Apple은 'AppleGothic', Windows는 'Malgun Gothic'
plt.rcParams['font.family'] = "Malgun Gothic"

plt.figure(figsize= (10,5)) # 그래프의 사이즈
plt.bar(sorted_chicken_count_gu.index, sorted_chicken_count_gu)
plt.title('구에 따른 치킨가게 수의 합계') # 그래프의 제목
plt.xticks(rotation=90)
plt.show() # 그래프 그리기

# 라이브러리 가져오기
import folium
import json
  • folium 설치하기
conda install -c conda-forge folium
# https://raw.githubusercontent.com/southkorea/seoul-maps/master/kostat/2013/json/seoul_municipalities_geo_simple.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=10)

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

map

[유동인구 데이터] 전처리 및 시각화

import pandas as pd
    
population = pd.read_csv('./data/population07.csv')

list(population)
# ['일자', '시간(1시간단위)', '연령대(10세단위)', '성별', '시', '군구', '유동인구수']
set(population['연령대(10세단위)'])
# {20, 30, 40, 50, 60, 70}
set(population['시'])
# {'서울'}
set(population['군구'])

sum_of_population_by_gu = population.groupby('군구')['유동인구수'].sum()
sum_of_population_by_gu   
# 폰트 설정
import matplotlib.pyplot as plt

# Apple은 'AppleGothic', Windows는 'Malgun Gothic'을 추천
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.figure(figsize=(10, 5))
plt.bar(sum_of_population_by_gu.index, sum_of_population_by_gu)
plt.title('2020년 7월 서울 군구별 유동인구 수')
plt.xlabel('군구')
plt.ylabel('유동인구 수(명)')
plt.xticks(rotation=-45)
plt.show()
# 정렬된 결과 보이기
**sum_of_population_by_gu = sum_of_population_by_gu.sort_values()**
plt.figure(figsize=(10, 5))
plt.bar(sum_of_population_by_gu.index, sum_of_population_by_gu)
plt.title('2020년 7월 서울 군구별 유동인구 수')
plt.xlabel('군구')
plt.ylabel('유동인구 수(명)')
plt.xticks(rotation=-45)
plt.show()

population_gangnam = population[population['군구']=='강남구']
population_gangnam_daily = population_gangnam.groupby('일자')['유동인구수'].sum()
population_gangnam_daily
# 날짜를 string 타입으로 변경해야 숫자로 인식하지 않아 값이 줄여지지 않습니다.
plt.figure(figsize=(12, 5))

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

plt.plot(date, population_gangnam_daily)
plt.title('2020년 7월 서울 강남구 날짜별 유동인구 수')
plt.xlabel('날짜')
plt.ylabel('유동인구 수(천만명)')
plt.xticks(rotation=-90)
plt.show()

# 라이브러리 가져오기
import folium
import json
# 지도 만들어주기
map = folium.Map(location=[37.5502, 126.982], zoom_start=11,
                tiles='stamentoner')
# https://raw.githubusercontent.com/southkorea/seoul-maps/master/kostat/2013/json/seoul_municipalities_geo_simple.json
seoul_state_geo = './data/seoul_geo.json'
geo_data = json.load(open(seoul_state_geo, encoding='utf-8'))
folium.Choropleth(geo_data=geo_data,
              data=sum_of_population_by_gu,
              columns=[sum_of_population_by_gu.index, sum_of_population_by_gu],
              fill_color='PuRd',
              key_on='feature.properties.name').add_to(map)

map

상권과 유동인구 같이 분석

new_chicken_count_gu = pd.DataFrame(chicken_count_gu).reset_index()
new_chicken_count_gu
new_sum_of_population_by_gu = pd.DataFrame(sum_of_population_by_gu).reset_index()
new_sum_of_population_by_gu
gu_chicken = new_chicken_count_gu.join(new_sum_of_population_by_gu.set_index('군구'), on='구')
gu_chicken
gu_chicken['유동인구수/치킨집수'] = gu_chicken['유동인구수']/gu_chicken['상권업종소분류명']
gu_chicken = gu_chicken.sort_values(by='유동인구수/치킨집수')
gu_chicken
plt.figure(figsize=(10,5))
plt.bar(gu_chicken['구'], gu_chicken['유동인구수/치킨집수'])
plt.xlabel('구')
plt.ylabel('유동인구수/치킨집수')
plt.xticks(rotation=90)
plt.show()

좋은 웹페이지 즐겨찾기