https://colab.research.google.com/drive/1rGLfghbMHkAXZPFOxRmc2IFBjMcGposi?usp=sharing
'데이터 분석 > Machine Learning & Deep Learning' 카테고리의 다른 글
[ML] XGBoost (0) | 2023.03.25 |
---|
https://colab.research.google.com/drive/1rGLfghbMHkAXZPFOxRmc2IFBjMcGposi?usp=sharing
[ML] XGBoost (0) | 2023.03.25 |
---|
https://colab.research.google.com/drive/1vN-z1jP2dNsvPvnjAH0uiaUTJmRS-aGz?usp=sharing
[ML] LGBM (0) | 2023.03.25 |
---|
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:80% !important;}</style>"))
%matplotlib inline
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy import stats
import warnings
import folium
import folium.plugins
import requests
import json
import folium.plugins
from IPython.display import Image
warnings.filterwarnings('ignore')
mpl.rcParams['figure.figsize'] = (12,8) #시각화 figure default 설정
mpl.rcParams['font.family'] = 'NanumGothic' #폰트 디폴트 설정
mpl.rcParams['font.size'] = 10 #폰트 사이즈 디폴트 설정
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format='retina' # 그래프 글씨 뚜렷
pd.options.display.float_format = '{:.3f}'.format # 넘파이 과학적 표기 제거
# 부산 행정구역 json raw파일(githubcontent)
r = requests.get('https://raw.githubusercontent.com/raqoon886/Local_HangJeongDong/master/hangjeongdong_%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C.geojson')
c = r.content
busan_geo = json.loads(c)
import os
path = "./"
file_list = os.listdir(path)
csv_list = [file for file in file_list if file.endswith(".csv")]
csv_list
['강서구_방문자 수.csv',
'강서구_요일_시간대 별 방문자 집중율.csv',
'금정구_방문자 수.csv',
'금정구_요일_시간대 별 방문자 집중율.csv',
'기장군_방문자 수.csv',
'기장군_요일_시간대 별 방문자 집중율.csv',
'남구_방문자 수.csv',
'남구_요일_시간대 별 방문자 집중율.csv',
'동구_방문자 수.csv',
'동구_시간대 별 방문자 집중율.csv',
'동래구_방문자 수.csv',
'동래구_요일_시간대 별 방문자 집중율.csv',
'부산진구_방문자 수.csv',
'부산진구_요일_시간대 별 방문자 집중율.csv',
'북구_방문자 수.csv',
'북구_요일_시간대 별 방문자 집중율.csv',
'사상구_방문자 수.csv',
'사상구_요일_시간대 별 방문자 집중율.csv',
'사하구_방문자 수.csv',
'사하구_요일_시간대 별 방문자 집중율.csv',
'서구_방문자 수.csv',
'서구_요일_시간대 별 방문자 집중율.csv',
'수영구_방문자 수.csv',
'수영구_요일_시간대 별 방문자 집중율.csv',
'연제구_방문자 수.csv',
'연제구_요일_시간대 별 방문자 집중율.csv',
'영도구_방문자 수.csv',
'영도구_요일_시간대 별 방문자 집중율.csv',
'중구_방문자 수.csv',
'중구_요일_시간대 별 방문자 집중율.csv',
'해운대구_방문자 수.csv',
'해운대구_요일_시간대 별 방문자 집중율.csv']
visitor_csv = [csv for csv in csv_list if csv.split(".")[0].endswith("수")]
time_csv = [csv for csv in csv_list if csv not in visitor_csv]
gu_list = [csv.split("_")[0] for csv in time_csv]
print(len(visitor_csv), len(time_csv))
print(gu_list)
16 16
['강서구', '금정구', '기장군', '남구', '동구', '동래구', '부산진구', '북구', '사상구', '사하구', '서구', '수영구', '연제구', '영도구', '중구', '해운대구']
pd.read_csv("연제구_요일_시간대 별 방문자 집중율.csv", encoding = "cp949")
요일 | 방문 시간대 | 방문자 집중률 | |
---|---|---|---|
0 | 일요일 | 00~06시 | 2.400 |
1 | 일요일 | 06~11시 | 2.600 |
2 | 일요일 | 11~14시 | 2.600 |
3 | 일요일 | 14~18시 | 3.300 |
4 | 일요일 | 18~21시 | 1.900 |
5 | 일요일 | 21~24시 | 1.200 |
6 | 월요일 | 00~06시 | 1.700 |
7 | 월요일 | 06~11시 | 2.700 |
8 | 월요일 | 11~14시 | 2.300 |
9 | 월요일 | 14~18시 | 3.100 |
10 | 월요일 | 18~21시 | 1.900 |
11 | 월요일 | 21~24시 | 1.200 |
12 | 화요일 | 00~06시 | 1.600 |
13 | 화요일 | 06~11시 | 2.700 |
14 | 화요일 | 11~14시 | 2.400 |
15 | 화요일 | 14~18시 | 3.200 |
16 | 화요일 | 18~21시 | 2.000 |
17 | 화요일 | 21~24시 | 1.300 |
18 | 수요일 | 00~06시 | 1.600 |
19 | 수요일 | 06~11시 | 2.700 |
20 | 수요일 | 11~14시 | 2.400 |
21 | 수요일 | 14~18시 | 3.200 |
22 | 수요일 | 18~21시 | 2.100 |
23 | 수요일 | 21~24시 | 1.400 |
24 | 목요일 | 00~06시 | 1.600 |
25 | 목요일 | 06~11시 | 2.700 |
26 | 목요일 | 11~14시 | 2.300 |
27 | 목요일 | 14~18시 | 3.100 |
28 | 목요일 | 18~21시 | 2.100 |
29 | 목요일 | 21~24시 | 1.400 |
30 | 금요일 | 00~06시 | 1.700 |
31 | 금요일 | 06~11시 | 2.900 |
32 | 금요일 | 11~14시 | 2.500 |
33 | 금요일 | 14~18시 | 3.400 |
34 | 금요일 | 18~21시 | 2.400 |
35 | 금요일 | 21~24시 | 1.800 |
36 | 토요일 | 00~06시 | 2.400 |
37 | 토요일 | 06~11시 | 3.100 |
38 | 토요일 | 11~14시 | 3.300 |
39 | 토요일 | 14~18시 | 4.500 |
40 | 토요일 | 18~21시 | 3.200 |
41 | 토요일 | 21~24시 | 2.200 |
df_visitor = pd.DataFrame()
for gu, csv in zip(gu_list, visitor_csv):
df = pd.read_csv(csv, encoding = "cp949")
df["지역구"] = gu
df_visitor = df_visitor.append(df)
df_visitor
기준연월 | 방문자수 | 지역구 | |
---|---|---|---|
0 | 202201 | 2836937.000 | 강서구 |
1 | 202202 | 2498954.000 | 강서구 |
2 | 202203 | 2863433.000 | 강서구 |
3 | 202204 | 3318821.000 | 강서구 |
4 | 202205 | 3277041.000 | 강서구 |
... | ... | ... | ... |
7 | 202208 | 6428823.000 | 해운대구 |
8 | 202209 | 5351563.000 | 해운대구 |
9 | 202210 | 5799430.000 | 해운대구 |
10 | 202211 | 5255393.000 | 해운대구 |
11 | 202212 | 5797922.000 | 해운대구 |
192 rows × 3 columns
df_time = pd.DataFrame()
for gu, csv in zip(gu_list, time_csv):
df = pd.read_csv(csv, encoding = "cp949")
df["지역구"] = gu
df_time = df_time.append(df)
df_time
요일 | 방문 시간대 | 방문자 집중률 | 지역구 | |
---|---|---|---|---|
0 | 일요일 | 00~06시 | 1.300 | 강서구 |
1 | 일요일 | 06~11시 | 3.100 | 강서구 |
2 | 일요일 | 11~14시 | 3.400 | 강서구 |
3 | 일요일 | 14~18시 | 4.600 | 강서구 |
4 | 일요일 | 18~21시 | 2.200 | 강서구 |
... | ... | ... | ... | ... |
37 | 토요일 | 06~11시 | 3.200 | 해운대구 |
38 | 토요일 | 11~14시 | 3.400 | 해운대구 |
39 | 토요일 | 14~18시 | 5.200 | 해운대구 |
40 | 토요일 | 18~21시 | 3.200 | 해운대구 |
41 | 토요일 | 21~24시 | 2.200 | 해운대구 |
672 rows × 4 columns
df_202212 = df_visitor.loc[df_visitor["기준연월"] == 202212, ["지역구", "방문자수"]].reset_index(drop = True)
df_time["방문자 집중률"] = df_time["방문자 집중률"] / 100
df_visitor_time = df_time.join(df_202212.set_index("지역구"), on = "지역구")
df_visitor_time["시간별방문자수"] = df_visitor_time["방문자 집중률"] * df_visitor_time["방문자수"]
df_visitor_time.to_csv("부산시_지역별_시간대별_방문자수.csv")
df_visitor_time
요일 | 방문 시간대 | 방문자 집중률 | 지역구 | 방문자수 | 시간별방문자수 | |
---|---|---|---|---|---|---|
0 | 일요일 | 00~06시 | 0.013 | 강서구 | 3079993.000 | 40039.909 |
1 | 일요일 | 06~11시 | 0.031 | 강서구 | 3079993.000 | 95479.783 |
2 | 일요일 | 11~14시 | 0.034 | 강서구 | 3079993.000 | 104719.762 |
3 | 일요일 | 14~18시 | 0.046 | 강서구 | 3079993.000 | 141679.678 |
4 | 일요일 | 18~21시 | 0.022 | 강서구 | 3079993.000 | 67759.846 |
... | ... | ... | ... | ... | ... | ... |
37 | 토요일 | 06~11시 | 0.032 | 해운대구 | 5797922.000 | 185533.504 |
38 | 토요일 | 11~14시 | 0.034 | 해운대구 | 5797922.000 | 197129.348 |
39 | 토요일 | 14~18시 | 0.052 | 해운대구 | 5797922.000 | 301491.944 |
40 | 토요일 | 18~21시 | 0.032 | 해운대구 | 5797922.000 | 185533.504 |
41 | 토요일 | 21~24시 | 0.022 | 해운대구 | 5797922.000 | 127554.284 |
672 rows × 6 columns
df_example = df_visitor_time.groupby("지역구").mean().reset_index()
# busan_geo
m = folium.Map(
location=[35.137922, 129.055628],
zoom_start=11,
tiles='OpenStreetMap',
zoom_control = True
)
folium.GeoJson(
busan_geo,
name='지역명',
).add_to(m)
folium.Choropleth(
geo_data= busan_geo,
data=df_example,
columns = ["지역구", "시간별방문자수"],
fill_color='RdBu_r',
line_color="Black",
fill_opacity=0.8,
line_opacity=1.0,
bins = 10,
key_on='properties.sggnm',
legend_name='지역별 방문자수').add_to(m)
m
[EDA] 경기도 지역화폐 이용 현황 (0) | 2023.02.28 |
---|---|
[EDA] 부산시 지역구별 & 업종별 소비 (0) | 2023.02.28 |
[EDA] 부산시 주요 관광지 및 지역화폐 가맹점 (0) | 2023.02.28 |
[EDA] 제주도 지역별 연간 방문객 수 & 1인당 지출 비교 (0) | 2023.01.31 |
[EDA] SuperStore EDA (0) | 2023.01.19 |
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:80% !important;}</style>"))
%matplotlib inline
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy import stats
import warnings
warnings.filterwarnings('ignore')
mpl.rcParams['figure.figsize'] = (12,8) #시각화 figure default 설정
mpl.rcParams['font.family'] = 'NanumGothic' #폰트 디폴트 설정
mpl.rcParams['font.size'] = 10 #폰트 사이즈 디폴트 설정
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format='retina' # 그래프 글씨 뚜렷
#라이브러리 import
import requests
import json
import pandas as pd
import numpy as np
url = 'https://openapi.gg.go.kr/RegionMnyPublctUse'
params ={'KEY' : '72e1082c14714edcb1faedaa88acff59',
'Type' : 'json',
'plndex' : '1',
'pSize' : '1000' }
response = requests.get(url, params=params)
contents = response.content
json_localmoney = json.loads(contents)
body = json_localmoney['RegionMnyPublctUse'][1]['row']
df_localmoney = pd.json_normalize(body)
df_localmoney
SIGUN_CD | SIGUN_NM | STD_YM | CARD_PUBLCT_CNT | CARD_CHRGNG_AMT | CARD_USE_AMT | MOBILE_GIFTCERTF_USER_CNT | MOBILE_CHRGNG_AMT | MOBILE_USE_AMT | BRNHSTRM_GIFTCERTF_SALE_AMT | BRNHSTRM_GIFTCERTF_RETRVL_AMT | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 41480 | 파주시 | 2021-05 | 10829.0 | 9704216.0 | 9123830.0 | NaN | NaN | NaN | NaN | NaN |
1 | 41220 | 평택시 | 2021-05 | 6686.0 | 13681523.0 | 12335711.0 | NaN | NaN | NaN | 1703245.0 | 2458660.0 |
2 | 41650 | 포천시 | 2021-05 | 1559.0 | 2701165.0 | 2523209.0 | NaN | NaN | NaN | 319205.0 | 270563.0 |
3 | 41450 | 하남시 | 2021-05 | 4153.0 | 11646402.0 | 13880948.0 | NaN | NaN | NaN | NaN | NaN |
4 | 41590 | 화성시 | 2021-05 | 7615.0 | 26955815.0 | 27578227.0 | NaN | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
995 | 41610 | 광주시 | 2022-05 | 2504.0 | 23641363.0 | 23687402.0 | NaN | NaN | NaN | NaN | NaN |
996 | 41310 | 구리시 | 2022-05 | 18969.0 | 11306436.0 | 13181766.0 | NaN | NaN | NaN | NaN | NaN |
997 | 41410 | 군포시 | 2022-05 | 2297.0 | 15994841.0 | 16802768.0 | NaN | NaN | NaN | NaN | NaN |
998 | 41570 | 김포시 | 2022-05 | NaN | NaN | NaN | 4487.0 | 31684958.0 | 33034471.0 | NaN | NaN |
999 | 41360 | 남양주시 | 2022-05 | 3913.0 | 23608793.0 | 24752046.0 | NaN | NaN | NaN | NaN | NaN |
1000 rows × 11 columns
df_localmoney['SIGUN_NM'].value_counts()
연천군 33
안양시 33
용인시 33
군포시 33
안산시 33
김포시 33
남양주시 33
양평군 33
양주시 33
오산시 33
여주시 33
안성시 33
구리시 32
평택시 32
성남시 32
광주시 32
파주시 32
광명시 32
의정부시 32
고양시 32
시흥시 32
동두천시 32
부천시 32
과천시 32
이천시 32
수원시 32
의왕시 32
가평군 31
화성시 31
하남시 31
포천시 31
Name: SIGUN_NM, dtype: int64
time_list = df_localmoney['STD_YM'].unique()
time_list.sort()
time_list
array(['2019-01', '2019-02', '2019-03', '2019-04', '2019-08', '2019-09',
'2019-10', '2019-11', '2019-12', '2020-01', '2020-02', '2020-03',
'2020-04', '2020-05', '2020-12', '2021-01', '2021-02', '2021-03',
'2021-04', '2021-05', '2021-06', '2021-07', '2021-08', '2021-09',
'2021-10', '2021-11', '2021-12', '2022-01', '2022-02', '2022-03',
'2022-04', '2022-05', '2022-10', '2022-11', '2022-12'],
dtype=object)
df_suwon = df_localmoney[df_localmoney['SIGUN_NM'] == "수원시"].reset_index()
df_suwon.drop([16,17,18], inplace = True)
df_suwon.sort_values(by = "STD_YM", inplace = True)
df_suwon
index | SIGUN_CD | SIGUN_NM | STD_YM | CARD_PUBLCT_CNT | CARD_CHRGNG_AMT | CARD_USE_AMT | MOBILE_GIFTCERTF_USER_CNT | MOBILE_CHRGNG_AMT | MOBILE_USE_AMT | BRNHSTRM_GIFTCERTF_SALE_AMT | BRNHSTRM_GIFTCERTF_RETRVL_AMT | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
19 | 606 | 41110 | 수원시 | 2019-04 | 4505.0 | 924101.0 | 151025.0 | NaN | NaN | NaN | NaN | NaN |
20 | 628 | 41110 | 수원시 | 2019-08 | 6271.0 | 3339872.0 | 3305846.0 | NaN | NaN | NaN | NaN | NaN |
21 | 659 | 41110 | 수원시 | 2019-09 | 4209.0 | 1372844.0 | 2397516.0 | NaN | NaN | NaN | NaN | NaN |
22 | 690 | 41110 | 수원시 | 2019-10 | 7390.0 | 5550020.0 | 3240156.0 | NaN | NaN | NaN | NaN | NaN |
23 | 721 | 41110 | 수원시 | 2019-11 | 3098.0 | 1706971.0 | 3309251.0 | NaN | NaN | NaN | NaN | NaN |
24 | 752 | 41110 | 수원시 | 2019-12 | 5879.0 | 5005054.0 | 3508175.0 | NaN | NaN | NaN | NaN | NaN |
25 | 783 | 41110 | 수원시 | 2020-01 | 5948.0 | 4803386.0 | 3644121.0 | NaN | NaN | NaN | NaN | NaN |
26 | 814 | 41110 | 수원시 | 2020-02 | 9069.0 | 2178828.0 | 3042140.0 | NaN | NaN | NaN | NaN | NaN |
27 | 845 | 41110 | 수원시 | 2020-03 | 13576.0 | 7967046.0 | 4265271.0 | NaN | NaN | NaN | NaN | NaN |
28 | 876 | 41110 | 수원시 | 2020-04 | 203175.0 | 15060595.0 | 8229987.0 | NaN | NaN | NaN | NaN | NaN |
29 | 907 | 41110 | 수원시 | 2020-05 | 74407.0 | 17845709.0 | 15787540.0 | NaN | NaN | NaN | NaN | NaN |
9 | 281 | 41110 | 수원시 | 2020-12 | 11906.0 | 23074013.0 | 20287869.0 | NaN | NaN | NaN | NaN | NaN |
10 | 312 | 41110 | 수원시 | 2021-01 | 19139.0 | 20073612.0 | 18991978.0 | NaN | NaN | NaN | NaN | NaN |
11 | 343 | 41110 | 수원시 | 2021-02 | 32993.0 | 22486684.0 | 16312959.0 | NaN | NaN | NaN | NaN | NaN |
12 | 374 | 41110 | 수원시 | 2021-03 | 17865.0 | 22486684.0 | 16312959.0 | NaN | NaN | NaN | NaN | NaN |
13 | 405 | 41110 | 수원시 | 2021-04 | 25109.0 | 27421284.0 | 24984584.0 | NaN | NaN | NaN | NaN | NaN |
14 | 436 | 41110 | 수원시 | 2021-05 | 12167.0 | 26431115.0 | 26700384.0 | NaN | NaN | NaN | NaN | NaN |
0 | 17 | 41110 | 수원시 | 2021-06 | 34891.0 | 39592231.0 | 35850859.0 | NaN | NaN | NaN | NaN | NaN |
1 | 48 | 41110 | 수원시 | 2021-07 | 9097.0 | 25919121.0 | 30400028.0 | NaN | NaN | NaN | NaN | NaN |
2 | 79 | 41110 | 수원시 | 2021-08 | 11777.0 | 25919121.0 | 30400028.0 | NaN | NaN | NaN | NaN | NaN |
6 | 200 | 41110 | 수원시 | 2021-09 | 20812.0 | 25919121.0 | 30400028.0 | NaN | NaN | NaN | NaN | NaN |
7 | 231 | 41110 | 수원시 | 2021-10 | 18658.0 | 20422726.0 | 23899626.0 | NaN | NaN | NaN | NaN | NaN |
8 | 262 | 41110 | 수원시 | 2021-11 | 24357.0 | 37254826.0 | 31175985.0 | NaN | NaN | NaN | NaN | NaN |
3 | 113 | 41110 | 수원시 | 2021-12 | 11793.0 | 38589931.0 | 35437544.0 | NaN | NaN | NaN | NaN | NaN |
4 | 144 | 41110 | 수원시 | 2022-01 | 10244.0 | 35517134.0 | 37412949.0 | NaN | NaN | NaN | NaN | NaN |
5 | 175 | 41110 | 수원시 | 2022-02 | 10004.0 | 26493652.0 | 30490745.0 | NaN | NaN | NaN | NaN | NaN |
30 | 941 | 41110 | 수원시 | 2022-03 | 10678.0 | 32314288.0 | 33872904.0 | NaN | NaN | NaN | NaN | NaN |
31 | 972 | 41110 | 수원시 | 2022-04 | 8983.0 | 34439482.0 | 34409863.0 | NaN | NaN | NaN | NaN | NaN |
15 | 479 | 41110 | 수원시 | 2022-12 | 6991.0 | 33114060.0 | 30915410.0 | NaN | NaN | NaN | NaN | NaN |
plt.figure(figsize = (20, 8))
time = df_suwon['STD_YM'].unique()
time.sort()
ax1 = sns.barplot(x = "STD_YM", y = "CARD_PUBLCT_CNT", data = df_suwon, label = "월별카드발행수량(천원)", color = "#560bad", alpha = 0.5)
ax1.set_xlabel("날짜", fontsize = 15, fontweight = "medium")
ax1.set_ylabel("카드 발행 수량", fontsize = 15, fontweight = "medium")
ax1.set_xticklabels(labels = time, fontsize = 15, fontweight = "medium", rotation = 30)
ax2 = ax1.twinx()
ax2 = sns.lineplot(x = "STD_YM", y = "CARD_CHRGNG_AMT", data = df_suwon, label = "월별카드충전액(천원)", color = "#f4a261", linewidth = 5)
ax2 = sns.lineplot(x = "STD_YM", y = "CARD_USE_AMT", data = df_suwon, label = "월별카드사용액(천원)", color = "#2a9d8f", linewidth = 5)
ax2.set_ylabel("금액(천원)", fontsize = 17, fontweight = "medium")
ax1.set_title("<수원시 지역화폐 이용현황>", fontsize = 25, fontweight = "semibold")
plt.legend(fontsize = 20, loc = "upper left")
plt.tight_layout()
plt.show()
df_gyeonggi = df_localmoney.groupby("STD_YM").mean().reset_index()
df_gyeonggi.columns
Index(['STD_YM', 'CARD_PUBLCT_CNT', 'CARD_CHRGNG_AMT', 'CARD_USE_AMT',
'MOBILE_GIFTCERTF_USER_CNT', 'MOBILE_CHRGNG_AMT', 'MOBILE_USE_AMT',
'BRNHSTRM_GIFTCERTF_SALE_AMT', 'BRNHSTRM_GIFTCERTF_RETRVL_AMT'],
dtype='object')
df_gg_card = df_gyeonggi[['STD_YM', 'CARD_PUBLCT_CNT', 'CARD_CHRGNG_AMT', 'CARD_USE_AMT']]
df_gg_mobile = df_gyeonggi[['STD_YM', 'MOBILE_GIFTCERTF_USER_CNT', 'MOBILE_CHRGNG_AMT', 'MOBILE_USE_AMT']]
df_gg_giftcertif = df_gyeonggi[['STD_YM', 'BRNHSTRM_GIFTCERTF_SALE_AMT', 'BRNHSTRM_GIFTCERTF_RETRVL_AMT']]
plt.figure(figsize = (20, 8))
time = df_gg_card['STD_YM'].unique()
time.sort()
ax1 = sns.barplot(x = "STD_YM", y = "CARD_PUBLCT_CNT", data = df_gg_card, label = "월별카드발행수량(천원)", color = "#560bad", alpha = 0.5)
ax1.set_xlabel("날짜", fontsize = 15, fontweight = "medium")
ax1.set_ylabel("카드 발행 수량", fontsize = 15, fontweight = "medium")
ax1.set_xticklabels(labels = time, fontsize = 15, fontweight = "medium", rotation = 30)
ax1.legend(fontsize = 20, loc = (0.01, 0.9))
ax2 = ax1.twinx()
ax2 = sns.lineplot(x = "STD_YM", y = "CARD_CHRGNG_AMT", data = df_gg_card, label = "월별카드충전액(천원)", color = "#f4a261", linewidth = 5)
ax2 = sns.lineplot(x = "STD_YM", y = "CARD_USE_AMT", data = df_gg_card, label = "월별카드사용액(천원)", color = "#2a9d8f", linewidth = 5)
ax2.set_ylabel("금액(천원)", fontsize = 17, fontweight = "medium")
ax1.set_title("<경기도 카드형 지역화폐 이용현황>", fontsize = 25, fontweight = "semibold")
plt.legend(fontsize = 20, loc = (0.01, 0.75))
plt.tight_layout()
plt.savefig("경기도 카드형 지역화폐 이용현황.png")
plt.show()
df_gg_mobile.drop([32,33], inplace = True)
df_gg_mobile
STD_YM | MOBILE_GIFTCERTF_USER_CNT | MOBILE_CHRGNG_AMT | MOBILE_USE_AMT | |
---|---|---|---|---|
0 | 2019-01 | 813.000000 | NaN | NaN |
1 | 2019-02 | 6526.000000 | 3.705250e+05 | 5.893950e+04 |
2 | 2019-03 | 2796.333333 | 7.882200e+05 | 2.623787e+05 |
3 | 2019-04 | 4500.333333 | 3.384317e+05 | 3.588367e+05 |
4 | 2019-08 | 3983.333333 | 1.830311e+06 | 2.188063e+06 |
5 | 2019-09 | 5423.000000 | 3.800558e+06 | 2.598947e+06 |
6 | 2019-10 | 3847.333333 | 3.092179e+06 | 3.180244e+06 |
7 | 2019-11 | 3349.000000 | 2.527478e+06 | 2.858398e+06 |
8 | 2019-12 | 3981.000000 | 4.005129e+06 | 3.332524e+06 |
9 | 2020-01 | 5109.000000 | 6.340931e+06 | 4.071635e+06 |
10 | 2020-02 | 3991.000000 | 5.431040e+06 | 4.399053e+06 |
11 | 2020-03 | 24655.333333 | 6.788728e+06 | 5.195703e+06 |
12 | 2020-04 | 26312.666667 | 8.137525e+06 | 6.853801e+06 |
13 | 2020-05 | 10883.000000 | 9.218127e+06 | 7.739201e+06 |
14 | 2020-12 | 6846.333333 | 1.026509e+07 | 1.227914e+07 |
15 | 2021-01 | 11946.000000 | 2.188773e+07 | 1.765134e+07 |
16 | 2021-02 | 11350.666667 | 2.054240e+07 | 1.752217e+07 |
17 | 2021-03 | 9132.666667 | 2.146350e+07 | 2.119547e+07 |
18 | 2021-04 | 9458.333333 | 2.323718e+07 | 2.320000e+07 |
19 | 2021-05 | 8653.333333 | 2.434344e+07 | 2.340232e+07 |
20 | 2021-06 | 30379.666667 | 3.058925e+07 | 3.088359e+07 |
21 | 2021-07 | 9979.000000 | 2.320158e+07 | 2.499876e+07 |
22 | 2021-08 | 9619.666667 | 2.091933e+07 | 2.187118e+07 |
23 | 2021-09 | 8166.666667 | 1.478043e+07 | 1.548799e+07 |
24 | 2021-10 | 12623.000000 | 2.302622e+07 | 1.642057e+07 |
25 | 2021-11 | 11132.000000 | 3.128526e+07 | 2.476039e+07 |
26 | 2021-12 | 4717.333333 | 2.075663e+07 | 2.450455e+07 |
27 | 2022-01 | 9063.333333 | 3.397933e+07 | 2.896521e+07 |
28 | 2022-02 | 6581.666667 | 2.470746e+07 | 2.551880e+07 |
29 | 2022-03 | 7713.000000 | 2.837354e+07 | 2.899830e+07 |
30 | 2022-04 | 7018.000000 | 2.927896e+07 | 3.030195e+07 |
31 | 2022-05 | 4487.000000 | 3.168496e+07 | 3.303447e+07 |
34 | 2022-12 | 3585.333333 | 2.856279e+07 | 2.367726e+07 |
plt.figure(figsize = (20, 8))
time = df_gg_mobile['STD_YM'].unique()
time.sort()
ax1 = sns.barplot(x = "STD_YM", y = "MOBILE_GIFTCERTF_USER_CNT", data = df_gg_mobile, label = "월별모바일상품권이용등록자수(명)", color = "#560bad", alpha = 0.5)
ax1.set_xlabel("날짜", fontsize = 15, fontweight = "medium")
ax1.set_ylabel("이용등록자수(명)", fontsize = 15, fontweight = "medium")
ax1.set_xticklabels(labels = time, fontsize = 15, fontweight = "medium", rotation = 30)
ax1.legend(fontsize = 20, loc = (0.01, 0.9))
ax2 = ax1.twinx()
ax2 = sns.lineplot(x = "STD_YM", y = "MOBILE_CHRGNG_AMT", data = df_gg_mobile, label = "월별모바일충전액(천원)", color = "#f4a261", linewidth = 5)
ax2 = sns.lineplot(x = "STD_YM", y = "MOBILE_USE_AMT", data = df_gg_mobile, label = "월별모바일사용액(천원)", color = "#2a9d8f", linewidth = 5)
ax2.set_ylabel("금액(천원)", fontsize = 17, fontweight = "medium")
ax1.set_title("<경기도 모바일상품권형 지역화폐 이용현황>", fontsize = 25, fontweight = "semibold")
plt.legend(fontsize = 20, loc = (0.01, 0.75))
plt.tight_layout()
plt.savefig("경기도 모바일상품권형 지역화폐 이용현황.png")
plt.show()
df_gg_giftcertif.drop(32, inplace=True)
plt.figure(figsize = (20, 8))
time = df_gg_giftcertif['STD_YM'].unique()
time.sort()
# ax1 = sns.barplot(x = "STD_YM", y = "MOBILE_GIFTCERTF_USER_CNT", data = df_gg_giftcertif, label = "월별카드발행수량(천원)", color = "#560bad", alpha = 0.5)
# ax1.set_xlabel("날짜", fontsize = 15, fontweight = "medium")
# ax1.set_ylabel("이용등록자수", fontsize = 15, fontweight = "medium")
# ax1.set_xticklabels(labels = time, fontsize = 15, fontweight = "medium", rotation = 30)
# ax2 = ax1.twinx()
ax2 = sns.barplot(x = "STD_YM", y = "BRNHSTRM_GIFTCERTF_SALE_AMT", data = df_gg_giftcertif, label = "월별지류상품권판매액(천원)", color = "#f4a261", linewidth = 5)
ax2 = sns.lineplot(x = "STD_YM", y = "BRNHSTRM_GIFTCERTF_RETRVL_AMT", data = df_gg_giftcertif, label = "월별지류상품권회수액(천원)", color = "#2a9d8f", linewidth = 5)
ax2.set_ylabel("금액(천원)", fontsize = 17, fontweight = "medium")
ax2.set_xlabel("날짜", fontsize = 15, fontweight = "medium")
ax2.set_xticklabels(labels = time, fontsize = 15, fontweight = "medium", rotation = 30)
ax2.set_title("<경기도 지류상품권형 지역화폐 이용현황>", fontsize = 25, fontweight = "semibold")
plt.legend(fontsize = 20, loc = "upper left")
plt.tight_layout()
plt.savefig("경기도 지류상품권형 지역화폐 이용현황.png")
plt.show()
[EDA] 부산시 시간대별 방문자수 전처리 작업 (0) | 2023.02.28 |
---|---|
[EDA] 부산시 지역구별 & 업종별 소비 (0) | 2023.02.28 |
[EDA] 부산시 주요 관광지 및 지역화폐 가맹점 (0) | 2023.02.28 |
[EDA] 제주도 지역별 연간 방문객 수 & 1인당 지출 비교 (0) | 2023.01.31 |
[EDA] SuperStore EDA (0) | 2023.01.19 |
1 환경설정
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:80% !important;}</style>"))
%matplotlib inline
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy import stats
import warnings
import folium
import folium.plugins
import requests
import json
import folium.plugins
from IPython.display import Image
warnings.filterwarnings('ignore')
mpl.rcParams['figure.figsize'] = (12,8) #시각화 figure default 설정
mpl.rcParams['font.family'] = 'NanumGothic' #폰트 디폴트 설정
mpl.rcParams['font.size'] = 10 #폰트 사이즈 디폴트 설정
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format='retina' # 그래프 글씨 뚜렷
pd.options.display.float_format = '{:.3f}'.format # 넘파이 과학적 표기 제거
# 부산 행정구역 json raw파일(githubcontent)
r = requests.get('https://raw.githubusercontent.com/raqoon886/Local_HangJeongDong/master/hangjeongdong_%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C.geojson')
c = r.content
busan_geo = json.loads(c)
2 데이터 분석
2.1 부산광역시_지역구별_업종별_소비
import os
path = "./"
file_list = os.listdir(path)
csv_list = [file for file in file_list if file.endswith(".csv")]
csv_list
['강서구_업종별_소비.csv',
'금정구_업종별_소비.csv',
'기장군_업종별_소비.csv',
'남구_업종별_소비.csv',
'동구_업종별_소비.csv',
'동래구_업종별_소비.csv',
'부산진구_업종별_소비.csv',
'북구_업종별_소비.csv',
'사상구_업종별_소비.csv',
'사하구_업종별_소비.csv',
'서구_업종별_소비.csv',
'수영구_업종별_소비.csv',
'연제구_업종별_소비.csv',
'영도구_업종별_소비.csv',
'중구_업종별_소비.csv',
'해운대구_업종별_소비.csv']
gu_list = [csv.split("_")[0] for csv in csv_list]
df_gu = pd.DataFrame()
for gu, csv in zip(gu_list, csv_list):
df = pd.read_csv(csv, encoding = "cp949")
df["지역구"] = gu
df_gu = df_gu.append(df)
df_gu
대분류 | 중분류 | 대분류 지출액 | 대분류 지출액 비율 | 중분류 지출액 | 중분류 지출액 비율 | 지역구 | |
---|---|---|---|---|---|---|---|
0 | 여가서비스업 | 골프장 | 6829341 | 4 | 5439373 | 80 | 강서구 |
1 | 쇼핑업 | 관광기념품 | 39264712 | 22 | 11973 | 0 | 강서구 |
2 | 여가서비스업 | 관광유원시설 | 6829341 | 4 | 40997 | 1 | 강서구 |
3 | 여가서비스업 | 기타레저 | 6829341 | 4 | 736423 | 11 | 강서구 |
4 | 숙박업 | 기타숙박 | 2453944 | 1 | 2452058 | 100 | 강서구 |
... | ... | ... | ... | ... | ... | ... | ... |
12 | 여행업 | 여행업 | 106961 | 0 | 106961 | 100 | 해운대구 |
13 | 운송업 | 육상운송 | 2542213 | 0 | 547 | 0 | 해운대구 |
14 | 숙박업 | 캠핑장/펜션 | 58896679 | 9 | 12386 | 0 | 해운대구 |
15 | 숙박업 | 콘도 | 58896679 | 9 | 2593067 | 4 | 해운대구 |
16 | 숙박업 | 호텔 | 58896679 | 9 | 39661413 | 67 | 해운대구 |
224 rows × 7 columns
df_gu.to_csv("부산광역시_지역구별_대분류중분류_지출액.csv", index = False)
df_category = pd.DataFrame(df_gu.groupby(["대분류"])["대분류 지출액"].sum())
df_subcategory = pd.DataFrame(df_gu.groupby(["대분류", "중분류"])["중분류 지출액"].sum())
df_category
대분류 지출액 | |
---|---|
대분류 | |
쇼핑업 | 4517477214 |
숙박업 | 464258351 |
식음료업 | 1417281899 |
여가서비스업 | 478652488 |
여행업 | 1484189 |
운송업 | 153697065 |
df_subcategory.sort_values(by = "중분류 지출액", ascending = False).plot.bar()
pd.DataFrame(df_gu.groupby(["지역구"])["대분류 지출액"].sum()).sort_values(by = "대분류 지출액", ascending = False).plot.bar(rot = 30)
plt.title("<부산시 지역구별 소비 지출액 (내국인 지출액(BC+신한))>", fontsize = 15)
plt.tight_layout()
plt.savefig("부산시 지역구별 소비 지출액", dpi = 1000)
plt.show()
df_gu_ct = pd.crosstab(index = df_gu["지역구"],
columns = df_gu["중분류"],
values = df_gu["중분류 지출액"],
aggfunc = "sum")
df_gu.groupby("지역구")["중분류 지출액"].sum()
지역구
강서구 180859689
금정구 116058905
기장군 370923358
남구 96229414
동구 94883696
동래구 172124359
부산진구 400177395
북구 196859964
사상구 112087464
사하구 80440952
서구 46517420
수영구 160724027
연제구 146718272
영도구 36067436
중구 173680036
해운대구 638052088
Name: 중분류 지출액, dtype: float64
df_gu_ct.sum(axis = 1)
지역구
강서구 180859689
금정구 116058905
기장군 370923358
남구 96229414
동구 94883696
동래구 172124359
부산진구 400177395
북구 196859964
사상구 112087464
사하구 80440952
서구 46517420
수영구 160724027
연제구 146718272
영도구 36067436
중구 173680036
해운대구 638052088
dtype: float64
df_gu_ct = df_gu_ct.div(df_gu_ct.sum(axis = 1), axis =0)
df_gu_ct = df_gu_ct * 100
plt.figure(figsize =(16, 8))
sns.heatmap(df_gu_ct,
annot = True,
fmt = ".2f",
cmap = "OrRd")
plt.title("<부산시 지역구별 중분류별 지출비중(%)>", fontsize = 17, fontweight = "bold")
plt.tight_layout()
plt.savefig("부산시 지역구별 중분류별 지출비중(%)", dpi = 500)
plt.show()
df_subcategory_gu = df_gu.groupby(["지역구", "중분류"])["중분류 지출액"].sum().reset_index()
df_subcategory_gu = df_subcategory_gu[df_subcategory_gu["중분류"] == "대형쇼핑몰"]
df_category_gu = df_gu.groupby("지역구")['대분류 지출액'].sum().reset_index().sort_values(by = "대분류 지출액", ascending = False)
df_category_gu
지역구 | 대분류 지출액 | |
---|---|---|
15 | 해운대구 | 1992987423 |
6 | 부산진구 | 964878868 |
2 | 기장군 | 927827815 |
7 | 북구 | 493989820 |
14 | 중구 | 401164770 |
0 | 강서구 | 393345910 |
5 | 동래구 | 308912855 |
12 | 연제구 | 278759750 |
11 | 수영구 | 231823514 |
1 | 금정구 | 214862507 |
8 | 사상구 | 209333878 |
4 | 동구 | 192826826 |
3 | 남구 | 168696129 |
9 | 사하구 | 132990385 |
10 | 서구 | 68158050 |
13 | 영도구 | 52292706 |
x_list = list(df_category_gu["지역구"].values)
# sns.set_theme(style="whitegrid")
# Initialize the matplotlib figure
f, ax = plt.subplots(figsize=(15, 6))
# Plot the total crashes
sns.set_color_codes("pastel")
sns.barplot(x="지역구", y="대분류 지출액", data=df_category_gu,
label="지역구별 총 소비지출액", color="b")
# Plot the crashes where alcohol was involved
sns.set_color_codes("muted")
sns.barplot(x="지역구", y="중분류 지출액", data=df_subcategory_gu,
label="대형쇼핑몰 소비지출액", color="b", order = x_list)
# Add a legend and informative axis label
ax.legend(ncol=2, loc="upper right", frameon=True, fontsize = 15)
ax.set(ylabel="지출액(천원)",
xlabel="지역구")
sns.despine(left=True, bottom=True)
plt.title("<부산시 지역구별 총 소비지출 및 대형쇼핑몰 지출액(내국인 지출액(BC+신한))>", fontsize = 20, fontweight = "bold")
plt.tight_layout()
plt.savefig("부산시 지역구별 총 소비지출 및 대형쇼핑몰 지출액", dpi = 800)
plt.show()
[EDA] 부산시 시간대별 방문자수 전처리 작업 (0) | 2023.02.28 |
---|---|
[EDA] 경기도 지역화폐 이용 현황 (0) | 2023.02.28 |
[EDA] 부산시 주요 관광지 및 지역화폐 가맹점 (0) | 2023.02.28 |
[EDA] 제주도 지역별 연간 방문객 수 & 1인당 지출 비교 (0) | 2023.01.31 |
[EDA] SuperStore EDA (0) | 2023.01.19 |
[EDA] 부산시 시간대별 방문자수 전처리 작업 (0) | 2023.02.28 |
---|---|
[EDA] 경기도 지역화폐 이용 현황 (0) | 2023.02.28 |
[EDA] 부산시 지역구별 & 업종별 소비 (0) | 2023.02.28 |
[EDA] 제주도 지역별 연간 방문객 수 & 1인당 지출 비교 (0) | 2023.01.31 |
[EDA] SuperStore EDA (0) | 2023.01.19 |
[EDA] 부산시 시간대별 방문자수 전처리 작업 (0) | 2023.02.28 |
---|---|
[EDA] 경기도 지역화폐 이용 현황 (0) | 2023.02.28 |
[EDA] 부산시 지역구별 & 업종별 소비 (0) | 2023.02.28 |
[EDA] 부산시 주요 관광지 및 지역화폐 가맹점 (0) | 2023.02.28 |
[EDA] SuperStore EDA (0) | 2023.01.19 |
[EDA] 부산시 시간대별 방문자수 전처리 작업 (0) | 2023.02.28 |
---|---|
[EDA] 경기도 지역화폐 이용 현황 (0) | 2023.02.28 |
[EDA] 부산시 지역구별 & 업종별 소비 (0) | 2023.02.28 |
[EDA] 부산시 주요 관광지 및 지역화폐 가맹점 (0) | 2023.02.28 |
[EDA] 제주도 지역별 연간 방문객 수 & 1인당 지출 비교 (0) | 2023.01.31 |