2주차
데이터 분석의 4단계 - 데이터 불러오기, 데이터 살펴보기, 데이터 가공하기, 데이터 시각화
어울리는 그래프 찾기 - 바 그래프(각 항목들의 수치와 순위를 볼 때), 라인 그래프(이전 항목들 혹은 흐름에 따라 데이터의 관계를 볼 때), 파이 차트(비율을 볼 때), 히트맵(두 개의 축의 수치를 한 눈에 볼 때), 지도(지리 정보를 한 눈에 볼 때)
[상권 데이터] 전처리하기
NaN은 Not a Number
라이브러리 불러오기
import pandas as pd
데이터 불러오기
commercial = pd.read_csv('./data/commercial.csv')
commercial
데이터 살펴보기
commercial.tail(5)
컬럼 살펴보기
list(commercial), len(list(commercial))
살펴볼 컬럼 정하기
상가업소번호 - 가게가 중복이 되는지 확인할 때 필요
commercial.groupby('상가업소번호')['상권업종소분류명'].count().sort_values(ascending=False) -내림차순
중복제거는 set
상권업종소분류명 - 치킨집을 분류하기 위한 이름
category_range = set(commercial['상권업종소분류명'])
category_range
-후라이드/양념치킨
서울에 치킨집이 몇 개 있는가
서울: 도로명주소 - 치킨집의 위치를 파악하기 위해 필요, 서울특별시의 구 별 데이터가 필요, 우리가 가진 데이터는 시군구 데이터 → 데이터 전처리 필요
치킨집: 소분류명
몇 개: 셀 수 있는 고유값
도로명 잘라 정리하기
str을 가지고 쪼갤 수 있다 split(문자열 나누기, 문자열 쪼개기)
무엇을 기준으로 쪼갤건지, 몇번 쪼갤건지
commercial[['시', '구', '상세주소']] = commercial['도로명'].str.split(' ', n=2, expand=True)
commercial.tail(5)
서울시 데이터만 남기기
seoul_data = commercial[ commercial['시'] == '서울특별시' ]
seoul_data
진짜 서울특별시만 남겼는지 확인하는 방법 (데이터 검증)
city_type = set(seoul_data['시'])
city_type, len(city_type)
{'서울특별시'} 1 이라고 뜨면 성공
'후라이드/양념치킨' 데이터만 남기기
seoul_chicken_data = seoul_data[ seoul_data['상권업종소분류명'] == '후라이드/양념치킨' ]
set(seoul_chicken_data['상권업종소분류명'])
구 별로 정리하기
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
[상권 데이터] 시각화
sorted_chicken_count_gu
바 그래프 그리기
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "AppleGothic"
1. 크기
2. 그래프 종류
3. 제목
4.x축 돌아감
5.show()
plt.figure(figsize=(10,5)) # 그래프의 사이즈
plt.bar(sorted_chicken_count_gu.index, sorted_chicken_count_gu)
plt.title('구에 따른 치킨가게 수의 합계') # 그래프의 제목
plt.xticks(rotation = 90)
plt.show() # 그래프 그리기
지도에 그리는 방법
folium설치:
conda install -c conda-forge folium
# 라이브러리 가져오기
import folium
import json
seoul_state_geo = './data/seoul_geo.json'
geo_data = json.load(open(seoul_state_geo, encoding='utf-8'))
geo_data
map = folium.Map(location=[37.5502,126.982], zoom_start=11)
map
folium.Choropleth(geo_data=geo_data,
data=chicken_count_gu,
columns=[chicken_count_gu.index, chicken_count_gu],
fill_color='PuRd',
key_on='properties.name').add_to(map)
map
[유동인구 데이터] 전처리 및 시각화하기
라이브러리 불러오기
import pandas as pd
데이터 불러오기
population = pd.read_csv('./data/population07.csv')
population
데이터 살펴보기
population.tail(5)
컬럼 살펴보기
list(population), len(list(population))
# ['일자', '시간(1시간단위)', '연령대(10세단위)', '성별', '시', '군구', '유동인구수']
살펴볼 컬럼 정하기
구 별로 얼마만큼의 유동인구가 있는 가
set(population['연령대(10세단위)']), len(set(population['연령대(10세단위)']))
# {20, 30, 40, 50, 60, 70}
set(population['시'])
# {'서울'}
set(population['군구']), len(set(population['군구']))
구 별로 정리하기
긴 버전.
groupdata = population.groupby('군구')
count = groupdata['유동인구수']
sum_of_groupdata = count.sum()
간소화 버전.(chaining)
sum_of_populaiton_by_gu = population.groupby('군구')['유동인구수'].sum()
sum_of_population_by_gu
폰트 설정
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "AppleGothic"
sum_of_populaiton_by_gu
plt.figure(figsize=(10,5))
plt.bar(sum_of_populaiton_by_gu.index, sum_of_populaiton_by_gu)
plt.title('2020년 7월 서울 군구별 유동인구 수')
plt.xlabel('군구')
plt.ylabel('유동인구 수(명)')
plt.xticks(rotation= -45)
plt.show()
정렬
sorted_sum_of_populaiton_by_gu = sum_of_populaiton_by_gu.sort_values(ascending=True)
plt.figure(figsize=(10,5))
plt.bar(sorted_sum_of_populaiton_by_gu.index, sorted_sum_of_populaiton_by_gu)
plt.title('2020년 7월 서울 군구별 유동인구 수')
plt.xlabel('군구')
plt.ylabel('유동인구 수(명)')
plt.xticks(rotation= -45)
plt.show()
강남구 일별로 유동량 그리기
population_gangnam = population[ population['군구'] == '강남구' ]
population_gangnam
populaion_gangnam_daily = population_gangnam.groupby('일자')['유동인구수'].sum()
populaion_gangnam_daily
라인 그래프
plot(ploting 선그래프)
# 날짜를 string 타입으로 변경해야 숫자로 인식하지 않아 값이 줄여지지 않습니다.
plt.figure(figsize=(10,5))
date = []
for day in populaion_gangnam_daily.index:
print(day)
date.append(str(day))
plt.plot(date, populaion_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')
map
보강 버전
map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles='stamentoner')
- folium.Map 은 설정값을 넣어주어야 합니다.
- 위도 경도를 나타내 주는, location
- 지도의 초기 확대 정도를 나타내주는 zoom_start
- tiles='stamentoner' 옵션 값은 지도의 길과 강 위주로 보여줍니다.
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_populaiton_by_gu,
columns=[sum_of_populaiton_by_gu.index, sum_of_populaiton_by_gu],
fill_color='PuRd',
key_on='properties.name').add_to(map)
map
Folium 참고 링크: https://python-visualization.github.io/folium/modules.html#module-folium.map
folium — Folium 0.12.1 documentation
folium Make beautiful, interactive maps with Python and Leaflet.js class folium.folium.GlobalSwitches(no_touch=False, disable_3d=False) Bases: branca.element.Element class folium.folium.Map(location=None, width='100%', height='100%', left='0%', top='0%', p
python-visualization.github.io
상권과 유동인구 같이 분석
데이터 합치기
- 구 이름을 기준으로 합쳐 놓았던 데이터를 다시 행과 열의 데이터로 만들어 주어야 합니다.
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_populaiton_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
By: ascending, decending
그래프
plt.figure(figsize=(10,5))
plt.bar(gu_chicken['구'], gu_chicken['유동인구수/치킨집수'])
plt.title('치킨집 당 유동인구수')
plt.xlabel('구')
plt.ylabel('유동인구수/치킨집수')
plt.xticks(rotation=90)
plt.show()
의미 파악하기
- 유동인구가 많은 곳은 장사가 잘 되나요? 모릅니다
- 치킨집이 적은 곳은 장사가 잘 되나요? 모릅니다
- 적당히 치킨집은 적으면서 유동인구가 많은 곳은 없나요?
- 치킨집 당 유동인구의 노출되는 값이라는 것은 어떤 의미일까요?
- 치킨집 당 유동인구의 노출되는 값이 높으면 장사가 잘 되나요? 아니요
그래프 두개 그릴때는 하나 그리고 덧대어서 하나 더 그림
'IT > 개발' 카테고리의 다른 글
파이썬 3주차 개발일지 (1/3~1/9) (0) | 2022.01.13 |
---|---|
웹 개발 3주차 개발일지 (1/3~1/9) (0) | 2022.01.13 |
웹 개발 2주차 개발일지 (12/27~1/2) (0) | 2022.01.05 |
파이썬 1주차 개발일지 (12/20~12/26) (0) | 2021.12.27 |
웹 개발 1주차 개발일지 (12/20~12/26) (0) | 2021.12.27 |