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 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()
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()
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()
Author And Source
이 문제에 관하여(Python 데이터분석 - 2주차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@youngmk19/Python-데이터분석-2주차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)