-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path[제주를사랑하는사람들] 잠재지역 선정 및 주거산업 단지 추천.Rmd
1158 lines (895 loc) · 54.5 KB
/
[제주를사랑하는사람들] 잠재지역 선정 및 주거산업 단지 추천.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
title: "Potential City"
author: "Jeju-Lovers"
date: '2019 7 8 '
output: html_document
---팀명 : 제주를 사랑하는 사람들
주제 : 연령대 및 지역에 따른 금융 서비스 이용 잠재력 평가와 주목해야할 잠재고객층 제시
요약 : 금융권에 도움이 되는, 금융 관련 기업이 주목해야 할 새로운 타깃 층에 대한 내비게이션 아이디어를 제시합니다. (기존 수도권 중심의 주력 지역 외 연령과 지역에 따른 잠재적 우수고객 선정)
#1. 금융서비스 이용 패턴 중심으로 분석
카드이용분석의 주요한 지표가 되는 카드 이용량을 살펴볼 때 연령 별로 패턴이 형성됨을 볼 수 있습니다.
```{r}
library(ggplot2)
library(dplyr)
library(reshape)
library(plotly)
library(car)
library(corrplot)
library(gridExtra)
library(tidyverse)
credit_raw<-read.csv('./DATA/credit_card_data.csv', stringsAsFactors = F, header = T) # 카드 사용 데이터
jeju_raw <- read.csv('./DATA/jeju_financial_life_data.csv') # 제주 지역 데이터
# raw 파일 보존을 위한 복사
credit <- credit_raw[,]
jeju <- jeju_raw [,]
# Date타입 컬럼 생성
credit$DATE <- paste0(credit$year, '-',credit$month, '-01')
credit$DATE <- as.Date(credit$DATE)
# 2016년 1월 데이터 제외(부정확한 데이터)
credit <- credit %>%
filter(DATE != as.Date('2016-01-01'))
#credit
# year, month 컬럼 대신 DATE 컬럼을 사용함
credit <- credit %>%
select(DATE, everything(), -c(year, month))
#credit
# 총 대출잔액 컬럼 생성
credit <- credit %>%
mutate(rep_loanb=ls_rep_loanb+inst_rep_loanb)%>%
group_by(ages)
# 실제 카드 사용 비율 컬럼 생성
credit$real_usecard <- ( credit$num_usecard / credit$num_opencard )
# 범주형 변수의 factor처리
credit$city <- as.factor(credit$city)
credit$avg_rat <- as.factor(credit$avg_rat)
credit$pop_cd <- as.factor(credit$pop_cd)
credit$ages <- as.factor(credit$ages)
#credit
# 성별과 지역 중 한 정보만을 갖는 행이 있으므로 각각이 결측치인 행 삭제하고 따로 구분
# 성별과 도시컬럼의 공백값을 NA처리
credit$sex <- ifelse(credit$sex=="", NA, credit$sex)
credit$city <- ifelse(credit$city =='', NA, credit$city)
# sex 데이터 포함 데이터
credit_s <- credit %>%
filter(!is.na(sex)) %>%
select(-city)
#credit_s
# city 데이터 포함 데이터
credit_c <- credit %>%
filter(!is.na(city)) %>%
select(-sex)
#credit_c
# credit_f : city 데이터가 있고, 변동이 크거나 경향성약 약한 10대와 70대 이상을 제외하여 주력 연령층에게 집중시킨 데이터
credit_f<-credit_c %>% filter(!ages %in% c("10대","70대","80대","90대"))
## 연령별 월카드이용총금액
g <- ggplot(data = credit, aes(x = ages, y = monthly_card_spend)) + geom_boxplot() + ggtitle('연령대별 월카드이용총금액')+labs(title="연령별 월카드이용 총금액액", x="연령대", y="월카드이용 총 금액")
ggplotly(g)
## 성별에 따른 연령별 월 카드 이용 총 금액
ggplot(data=credit_s, aes(x=sex, y=monthly_card_spend,color=ages))+geom_boxplot()+labs(title="성별에 따른 연령별 월카드소비액", x="성별", y="월카드소비액")
##연령대에 따른 성별 월 카드 이용 총 금액
ggplot(data=credit_s, aes(x=ages, y=monthly_card_spend,color=sex))+geom_boxplot()+labs(title="연령대에 따른 성별 월카드소비액", x="연령대", y="월카드소비액")
#연령별, 성별 신용평점
ggplot(data=credit_s, aes(x=sex, y=avg_score,color=ages))+geom_boxplot()+labs(title="성별에 따른 연령별 신용평점", x="성별", y="신용평점")
#연령별 총 대출금액
ggplot(data=credit, aes(x=ages, y=monthly_loan,color=ages))+geom_boxplot()+labs(title="연령대에 따른 대출 총액", x="연령대", y="총 대출 금액 (원)",fill="연령대")
#연령별 총 대출잔액
ggplot(data=credit, aes(x=ages, y=rep_loanb,color=ages))+geom_boxplot()+labs(title="연령대에 따른 대출 잔액", x="연령대", y="총 대출 잔액 (원)",fill="연령대")
credit
```
월 카드 소비액을 성별로 살펴볼 때 성별보다는 연령별로 군집화 및 패턴이 형성됨을 알 수 있습니다. 여성, 남성 각각에 대해 연령 별 카드 이용 금액 추이가 유사합니다.
연령에 따른 신용 평점, 대출총액과 잔액 등을 살펴볼 때에도 대체로 10대에서 30대로 갈수록 가파르게 우상향하는 양상을 보이며 20대와 30대는 사이에 충분한 간격을 보입니다. 30~50대는 비슷한 구간에 모여있고 60대부터는 하강하는 경향이 이어집니다.
여러 금융 서비스 관련 데이터에 대해 이러한 연령의 패턴이 지속적으로 나타나므로 연령은 주어진 변수 중 가장 강력한 패턴 형성의 기준으로 판단했습니다.
# 2. 주력 연령 선정 (20대에 주목해야 한다!)
앞서 살펴본 그래프들에서 연령별 패턴이 있음을 확인했습니다.
```{r }
##카드 사용비율에 대한 월 카드 이용 총 금액
g <- ggplot(data = credit, aes(x = real_usecard, y = monthly_card_spend, color = ages)) + geom_point() + ggtitle('실제카드사용비율에 대한 월카드 이용 총 금액')
ggplotly(g)
```
이때, 10대와 20대에는 다소 불안정한 패턴의 월카드평균소비 추이가 보이다가 30대, 40대, 50대는 월카드평균소비액은 다르나 카드사용비율은 서로 비슷한 비율을 지니는 모습을 보입니다.
금융 관련 기업의 입장에서, 주목해야할 연령대가 어떤 연령대인지 알아볼 필요가 있습니다.
```{r }
##총대출대비 대출종류별 비율
# 대출 종류 데이터 생성
credit_loan_per <- credit[,]
credit_loan_per$monthly_loan <- credit_loan_per$monthly_bk_loan + credit_loan_per$monthly_cd_loan + credit_loan_per$monthly_installments_loan + credit_loan_per$monthly_insurance_loan + credit_loan_per$monthly_sbk_loan
credit_loan_per$은행대출pct <- credit_loan_per$monthly_bk_loan / credit_loan_per$monthly_loan
credit_loan_per$카드대출pct <- credit_loan_per$monthly_cd_loan / credit_loan_per$monthly_loan
credit_loan_per$할부금융대출pct <- credit_loan_per$monthly_installments_loan / credit_loan_per$monthly_loan
credit_loan_per$보험업종대출pct <- credit_loan_per$monthly_insurance_loan / credit_loan_per$monthly_loan
credit_loan_per$저축은행대출pct <- credit_loan_per$monthly_sbk_loan / credit_loan_per$monthly_loan
credit_loan_per <- credit_loan_per %>%
select(ages, 은행대출pct, 카드대출pct, 할부금융대출pct, 보험업종대출pct, 저축은행대출pct)
#credit_loan_per
credit_loan_per <- as.data.frame(credit_loan_per)
loan_per_melt <- melt(credit_loan_per, id.vars = 'ages')
loan_per_melt
# 총대출대비 대출종류별 비율
ggplot(data = loan_per_melt, aes(x = ages, y = value, fill = variable)) + geom_bar(position = 'dodge', stat = 'identity') + xlab('ages') + ggtitle('총대출대비 대출종류별 비율') + ylab('Percent')
```
우선 연령별 대출 서비스 이용 패턴을 살펴보겠습니다. 연령 별로 총 대출 대비 종류별 대출 이용량을 살펴보면 은행대출은 전 연령에서 압도적으로 높은 비율을 갖습니다. 상식적인 결과입니다. 은행 대출을 제외하여 더 면밀히 살펴보겠습니다.
```{r}
# 총대출대비 대출종류별 비율(은행대출제외)
loan_except_bank <- loan_per_melt %>%
filter(variable != '은행대출pct')
ggplot(data = loan_except_bank, aes(x = ages, y = value, fill = variable)) + geom_bar(position = 'dodge', stat = 'identity') + xlab('연령대') + ggtitle('총대출대비 대출종류별 비율(은행대출 제외)') + ylab('Percent')
```
할부금융은 10대부터 80대까지 꾸준히 줄어드는 양상을 보이고, 저축은행의 경우 10대에서 꽤 높은 퍼센테이지를 차지합니다. 30대부터는 저축은행은 물론 타 대출종류 모두가 은행대출에 비해 모두 매우 미미한 수준으로 나타납니다. 연령대에서 특이하게 가시적인 값을 갖는 종류는 연령적 특성으로 고려해보아야 합니다.
```{r}
##연령 별 대출 총액
ggplot(data=credit_f, aes(x=ages, y=monthly_loan,color=ages))+geom_boxplot()+labs(title="연령대에 따른 대출 총액", x="연령대", y="총 대출 금액 (원)",fill="연령대")
##연령별 대출 잔액에 따른 월 소비액
ggplot(data=credit_c, aes(x=rep_loanb, y=monthly_card_spend,color=ages))+geom_point()+labs(title="연령별 대출 잔액에 따른 월 소비액", x="총 대출 잔액 (원)", y="카드 이용 총 금액 (원)",fill="연령대")
#연령별 총 대출 대비 은행 대출
### 10대 총대출대비 은행대출비율
loan_per_10 <- credit %>%
filter(ages == '10대')
loan_per_10$monthly_loan <- loan_per_10$monthly_bk_loan + loan_per_10$monthly_cd_loan + loan_per_10$monthly_installments_loan + loan_per_10$monthly_insurance_loan + loan_per_10$monthly_sbk_loan
loan_per_10$은행대출pct <- loan_per_10$monthly_bk_loan / loan_per_10$monthly_loan
loan_per_10$카드대출pct <- loan_per_10$monthly_cd_loan / loan_per_10$monthly_loan
loan_per_10$할부금융대출pct <- loan_per_10$monthly_installments_loan / loan_per_10$monthly_loan
loan_per_10$보험업종대출pct <- loan_per_10$monthly_insurance_loan / loan_per_10$monthly_loan
loan_per_10$저축은행대출pct <- loan_per_10$monthly_sbk_loan / loan_per_10$monthly_loan
ggplot(data = loan_per_10, aes(x = DATE, y = 은행대출pct, color = pop_cd)) + geom_line() + ggtitle('10대 총대출대비 은행대출비율')+ ylim(0,1)
### 20~30대 총대출대비 은행대출비율
loan_per_23 <- credit %>%
filter(ages %in% c('20대', '30대'))
loan_per_23$monthly_loan <- loan_per_23$monthly_bk_loan + loan_per_23$monthly_cd_loan + loan_per_23$monthly_installments_loan + loan_per_23$monthly_insurance_loan + loan_per_10$monthly_sbk_loan
loan_per_23$은행대출pct <- loan_per_23$monthly_bk_loan / loan_per_23$monthly_loan
loan_per_23$카드대출pct <- loan_per_23$monthly_cd_loan / loan_per_23$monthly_loan
loan_per_23$할부금융대출pct <- loan_per_23$monthly_installments_loan / loan_per_23$monthly_loan
loan_per_23$보험업종대출pct <- loan_per_23$monthly_insurance_loan / loan_per_23$monthly_loan
loan_per_23$저축은행대출pct <- loan_per_23$monthly_sbk_loan / loan_per_23$monthly_loan
#loan_per_23
ggplot(data = loan_per_23, aes(x = DATE, y = 은행대출pct, color = pop_cd)) + geom_line() + ggtitle('20~30대 총대출대비 은행대출비율')+ ylim(0,1)
### 50~60대 총 대출대비 은행대출비율
loan_per_56 <- credit %>%
filter(ages %in% c('50대', '60대'))
loan_per_56$monthly_loan <- loan_per_56$monthly_bk_loan + loan_per_56$monthly_cd_loan + loan_per_23$monthly_installments_loan + loan_per_23$monthly_insurance_loan + loan_per_10$monthly_sbk_loan
loan_per_56$은행대출pct <- loan_per_56$monthly_bk_loan / loan_per_56$monthly_loan
loan_per_56$카드대출pct <- loan_per_56$monthly_cd_loan / loan_per_56$monthly_loan
loan_per_56$할부금융대출pct <- loan_per_56$monthly_installments_loan / loan_per_56$monthly_loan
loan_per_56$보험업종대출pct <- loan_per_56$monthly_insurance_loan / loan_per_56$monthly_loan
loan_per_56$저축은행대출pct <- loan_per_56$monthly_sbk_loan / loan_per_56$monthly_loan
#loan_per_56
ggplot(data = loan_per_56, aes(x = DATE, y = 은행대출pct, color = pop_cd)) + geom_line() + ggtitle('50~60대 총대출대비 은행대출비율')+ ylim(0,1)
```
10대는 카드 소비액 range에서 위의 모든 세대와 큰 차이를 보이며 시기별로 이용량의 변동이 매우 큰 점 역시 특징입니다. 특별히 저축은행 이용 비율이 높은 점과 금액의 규모 면에서도 알 수 있듯 현실적으로 금융권에서 주요 고객으로 모니터링할 만큼 주체적으로 대출 및 다양한 금융서비스를 활발히 이용하기 어려운 연령대이며, 신용 점수를 산정하여 유의미한 분석을 이끌어내기에 금융 서비스 이용량 역시 현저히 부족한 것으로 보입니다. 잠재력 판단과 관련하여 신뢰성과 시장 점유성에 대해 리스크가 큰 연령으로 분석되어 후순위로 두었습니다.
70대 이상은 다른 연령대보다 성향이 분산되는 경향을 보입니다. 대출액의 개인별 편차가 굉장히 커 연령에 따른 집단적 특성을 분석하기에 다양한 양상을 나타내며 대출잔액과 무관하게 소비자체가 줄어드는 모습을 보입니다. 따라서 유의미한 잠재성있는 고객으로 추후 소비와 관련된장기적인 금융서비스 이용을 제안하기에 불리함이 있다고 판단하여 역시 후순위로 두었습니다.
```{r}
##연령대에 따른 대출 잔액
ggplot(data=credit_s, aes(x=ages, y=rep_loanb,color=ages))+geom_point()+labs(title="연령대에 따른 대출 잔액", x="연령대", y="총 대출 잔액 (원)")
```
금융서비스 이용 패턴 분석 중 하나의 예시로, 총 대출 잔액을 기준으로 살펴보아도 주로 살펴보려는 20~60대에 비해 10대와 70대 이상에서는 상당히 분산되는 경향을 보입니다.
```{r}
##대출금액에 따른 월 카드 소비액
credit_m <- credit %>%
group_by(ages) %>%
summarise(mean_monthly_cs=mean(monthly_card_spend),
mean_rep_loanb=mean(rep_loanb))
ggplot(data = credit_m, aes(x = mean_rep_loanb, y = mean_monthly_cs,color=ages))+
geom_point() +
geom_text(aes(label=ages)) +
labs(title="총 대출 금액에 따른 월 카드 이용 총 금액", x="총 대출 금액 (원)", y="월 카드 이용 총 금액 (원)")
```
대출금액에 따른 월 카드 소비액에서도 연령별로 집단이 형성됩니다. 대출액과 카드 소비액에 따른 개인적, 개별적 분포라기보다 연령대 또는 국민의 생애주기에 따른 일반적인 경향성을 도출해낼 수 있습니다. 앞서 살펴본 그래프들을 포함하여 많은 금융서비스 이용 양상에서 나타나는 이러한 연령별 특성을 충분히 반영하기로 하였습니다.
살펴본 그래프들을 토대로, 20대-30~50대-60대 이상은 카드소비의 특성에 따라 성장기-포화기-쇠퇴기로 구분할 수 있습니다.
30~50대는 대출금액도, 소비금액도 가장 커 이용량이 가장 많은 우수한 고객임을 확인할 수 있습니다.
60대는 30~50대와 70대 이상 사이에서 중간적인 양상을 보입니다. 대출액 등이 최고치를 보인 후에 60대에서 상환됨을 보이며 소비 역시 줄어들기 시작하는 단계입니다.
한편 20대는 30~50대와 구분됩니다. 30대부터 경제활동 추이가 일정한 패턴으로 고정되기 시작하므로 그 이전의 20대는 경제 활동을 시작하는 시기이면서도 소비와 대출 등 각종 경제 활동 습관이 고착화되기 전인 중요한 연령대로서 금융권이 원하는 유형으로의 가능성과 성장 면에서 주목해야할 연령대입니다. 아직 이용금액과 대출금액이 적지만 3040 세대의 패턴을 따라가며 장래 각종 금융서비스의 주요 고객으로 성장할 것입니다. 따라서 현재의 20대를 미래의 주 고객층으로 삼고 준비할 필요가 있습니다.
# 3. 지역 선정 아이디어
이제 20대로 초점을 맞추어 결국 금융기업이 미래의 고객층 확보에 있어 주목해야할 도시는 어디인가도 살펴볼 수 있습니다.
```{r}
# 지도데이터 만들기
library(maptools)
library(rgeos)
library(rgdal)
list.files('./DATA/credit card/bnd_sido_00_2018_2018')
#지도 데이터 시각화 시 주의할 점
sido <- rgdal::readOGR(
dsn = './DATA/credit card/bnd_sido_00_2018_2018', # 파일경로
layer = 'bnd_sido_00_2018_2018_2Q',#파일이름(확장자제외, 3개파일이 해당 경로에 있어야함 )
encoding = 'UTF-8'
)
sido <- rgdal::readOGR(
dsn = './DATA/credit card/bnd_sido_00_2018_2018',
layer = 'bnd_sido_00_2018_2018_2Q',
encoding = 'UTF-8'
)
#class 확인
class(x=sido)
# sido 를 data frame 형태로 저장
sidoDf <- fortify(model= sido)
str(object = sidoDf)
head(x=sidoDf, n= 10L)
#UTM-k 좌표를 UTM 좌표로 변환
#(1) 도시 이름 지정
sido@data
class(sido@data) #data frame
str(sido@data)
# id 로 rowname 지정
sido@data$id <- rownames(sido@data)
#데이터 프레임 병합
sidoDf <- merge(sidoDf, sido@data[,c('id','base_year','sido_cd','sido_nm')],
by ='id', all.x=T)
# id와 order 기준으로 오름차순 정렬하여 데이터 다듬기
sidoDf <- sidoDf[order(sidoDf$id, sidoDf$order),]
head(sidoDf, 10)
#새로 붙인 칼럼 이름 직관적으로 변경
colnames(sidoDf)[8:10] <-c('year','sidoCd','sidoNm')
str(sidoDf)
#광역시도명 두글자로 정리
sidoDf$sidoNM2 <-
ifelse(str_detect(string = sidoDf$sidoNm, pattern='(남|북)도'),
yes = str_c(str_sub(string = sidoDf$sidoNm, start=1, end=1),
str_sub(string = sidoDf$sidoNm,start=3,end=3)),
no = str_sub(string=sidoDf$sidoNm, start=1, end=2))
table(sidoDf$sidoNM2) %>% sort()
nrow(sidoDf)
#지도가 너무 자세하므로 데이터 크기를 줄인다
##크기 1/4(order를 4로 나누었을 때 나머지가 1인 행만 남긴다)
sidoDf1 <- sidoDf[sidoDf$order %% 3 == 1,]
nrow(sidoDf1)
# 그냥 지도를 그리면, 광주와 전남의 경계가 없어서
# 광주가 사라지기 때문에
# 광주 좌표를 전남에 포함시켜줌
sidoDfgj <- sidoDf1[sidoDf1$sidoNM2 == '광주',]
tail(sidoDf1[sidoDf1$sidoNM2 == '전남',])
tail(sidoDfgj)
sidoDfgj$piece =as.factor(rep(4208,times = length(sidoDfgj$piece)))
sidoDfgj$order = 2572435 + c(1:length(sidoDfgj$order))
sidoDfgj$group = as.factor(rep(13.4208, times = length(sidoDfgj$group)))
sidoDfgj$sidoNm = as.factor(rep('전라남도', length(sidoDfgj$sidoNm)))
sidoDfgj$sidoNM2 = rep('전남', length(sidoDfgj$sidoNM2))
sidoDfgj$sidoCd = as.factor(rep(36, length(sidoDfgj$sidoCd)))
sidoDfgj$id = rep('13', length(sidoDfgj$id))
head(sidoDfgj)
str(sidoDfgj)
str(sidoDf1)
sidoDf11 <-bind_rows(sidoDf1, sidoDfgj)
str(sidoDf11)
sidoDf11$piece = as.factor(sidoDf11$piece)
sidoDf11$group = as.factor(sidoDf11$group)
sidoDf11$sidoCd = as.factor(sidoDf11$sidoCd)
sidoDf11$sidoNm = as.factor(sidoDf11$sidoNm)
#완성된 sidoDf11 를 이용해 지도이미지 생성하기
sidoMap <-
ggplot(data = sidoDf11,
mapping = aes(x=long, y= lat, group = group))+
geom_polygon(fill ='white', color='black')
sidoMap
## 지도를 깔끔하게 하기 위해 부속지역 제외
sidoDf22 <- subset(sidoDf11, subset=sidoDf1$piece == 1)
nrow(sidoDf22)
sidoMap2 <-
ggplot(data=sidoDf22, mapping = aes(x = long, y = lat, group = group)) +
geom_polygon(fill='white', color='black')
sidoMap2
#좌표변환을 위한 패키지 불러오기
#(이는 ggplot에서 사용하는 좌표계가 WGS84이기 때문 )
library(sp)
library(rgdal)
library(magrittr)
#좌표계 변환 함수 생성 (GRS80 -> WGS84)
convertCoords <- function(lon, lat) {
xy <- data.frame(lon = lon, lat = lat)
coordinates(obj = xy) <- ~ lon + lat
fmCRS<-CRS('+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs')
toCRS <- CRS('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
xy %>%
SpatialPoints(proj4string = fmCRS) %>%
spTransform(CRSobj = toCRS) %>%
SpatialPoints() %>%
as.data.frame() %>%
set_colnames(c('lonWGS84', 'latWGS84')) %>%
return()
}
# sidoDf 위경도 좌표 변환한 변수(WGS84) 추가 후 지도시각화
changedCoords1 <- convertCoords(lon = sidoDf22$long, lat = sidoDf22$lat)
sidoDf22 <- cbind(sidoDf22, changedCoords1)
sidoMap <-
ggplot(data = sidoDf22,
mapping = aes(x = lonWGS84,
y = latWGS84,
group = group)) +
geom_polygon(fill = 'white',
color = 'black')
#데이터 확인
#데이터를 통해 해트맵 그려보기
#(1)지역별 평균 데이터 만들기(2016~2017 평균)
credit_avg <- credit %>%
group_by(city)%>%
summarise(
avg_score = mean(avg_score),
avg_rat = mean(avg_rat),
popupation = mean(population),
num_opencard = mean(num_opencard),
num_usecard=mean(num_usecard),
monthly_card_spend=mean(monthly_card_spend),
monthly_lc=mean(monthly_lc),
monthly_loan=mean(monthly_loan),
monthly_bk_loan=mean(monthly_bk_loan),
monthly_cd_loan=mean(monthly_cd_loan),
monthly_installments_loan=mean(monthly_installments_loan),
monthly_insurance_loan=mean(monthly_insurance_loan),
monthly_sbk_loan = mean(monthly_sbk_loan),
loan_commitment =mean(loan_commitment),
inst_rep_loanb=mean(inst_rep_loanb),
ls_rep_loanb=mean(ls_rep_loanb),
credit_loan =mean(credit_loan),
mortgage_loan=mean(mortgage_loan),
credit_card_payment=mean(credit_card_payment),
credit_card_installments_payment=mean(credit_card_installments_payment)
)
#credit_avg
#ages 20
credit_avg20 <- credit%>%
filter(ages=="20대")%>%
group_by(city)%>%
summarise(
avg_score = mean(avg_score),
avg_rat = mean(avg_rat),
popupation = mean(population),
num_opencard = mean(num_opencard),
num_usecard = mean(num_usecard),
monthly_card_spend = mean(monthly_card_spend),
monthly_lc = mean(monthly_lc),
monthly_loan = mean(monthly_loan),
monthly_bk_loan = mean(monthly_bk_loan),
monthly_cd_loan = mean(monthly_cd_loan),
monthly_installments_loan = mean(monthly_installments_loan),
monthly_insurance_loan = mean(monthly_insurance_loan),
monthly_sbk_loan = mean(monthly_sbk_loan),
loan_commitment = mean(loan_commitment),
inst_rep_loanb = mean(inst_rep_loanb),
ls_rep_loanb = mean(ls_rep_loanb),
credit_loan = mean(credit_loan),
mortgage_loan = mean(mortgage_loan),
credit_card_payment = mean(credit_card_payment),
credit_card_installments_payment = mean(credit_card_installments_payment)
)
#credit_avg20
#ages 30
credit_avg30 <- credit%>%
filter(ages =="30대") %>%
group_by(city) %>%
summarise(
avg_score = mean(avg_score),
avg_rat = mean(avg_rat),
popupation = mean(population),
num_opencard = mean(num_opencard),
num_usecard = mean(num_usecard),
monthly_card_spend = mean(monthly_card_spend),
monthly_lc = mean(monthly_lc),
monthly_loan = mean(monthly_loan),
monthly_bk_loan = mean(monthly_bk_loan),
monthly_cd_loan = mean(monthly_cd_loan),
monthly_installments_loan = mean(monthly_installments_loan),
monthly_insurance_loan = mean(monthly_insurance_loan),
monthly_sbk_loan = mean(monthly_sbk_loan),
loan_commitment = mean(loan_commitment),
inst_rep_loanb = mean(inst_rep_loanb),
ls_rep_loanb = mean(ls_rep_loanb),
credit_loan = mean(credit_loan),
mortgage_loan = mean(mortgage_loan),
credit_card_payment = mean(credit_card_payment),
credit_card_installments_payment = mean(credit_card_installments_payment)
)
#credit_avg30
#ages40
credit_avg40 <- credit %>%
filter(ages =="40대") %>%
group_by(city) %>%
summarise(
avg_score = mean(avg_score),
avg_rat = mean(avg_rat),
popupation = mean(population),
num_opencard = mean(num_opencard),
num_usecard = mean(num_usecard),
monthly_card_spend = mean(monthly_card_spend),
monthly_lc = mean(monthly_lc),
monthly_loan = mean(monthly_loan),
monthly_bk_loan = mean(monthly_bk_loan),
monthly_cd_loan = mean(monthly_cd_loan),
monthly_installments_loan = mean(monthly_installments_loan),
monthly_insurance_loan = mean(monthly_insurance_loan),
monthly_sbk_loan = mean(monthly_sbk_loan),
loan_commitment = mean(loan_commitment),
inst_rep_loanb = mean(inst_rep_loanb),
ls_rep_loanb = mean(ls_rep_loanb),
credit_loan = mean(credit_loan),
mortgage_loan = mean(mortgage_loan),
credit_card_payment = mean(credit_card_payment),
credit_card_installments_payment = mean(credit_card_installments_payment)
)
#age50
credit_avg50 <- credit %>%
filter(ages =="50대") %>%
group_by(city) %>%
summarise(
avg_score = mean(avg_score),
avg_rat = mean(avg_rat),
popupation = mean(population),
num_opencard = mean(num_opencard),
num_usecard = mean(num_usecard),
monthly_card_spend = mean(monthly_card_spend),
monthly_lc = mean(monthly_lc),
monthly_loan = mean(monthly_loan),
monthly_bk_loan = mean(monthly_bk_loan),
monthly_cd_loan = mean(monthly_cd_loan),
monthly_installments_loan = mean(monthly_installments_loan),
monthly_insurance_loan = mean(monthly_insurance_loan),
monthly_sbk_loan = mean(monthly_sbk_loan),
loan_commitment = mean(loan_commitment),
inst_rep_loanb = mean(inst_rep_loanb),
ls_rep_loanb = mean(ls_rep_loanb),
credit_loan = mean(credit_loan),
mortgage_loan = mean(mortgage_loan),
credit_card_payment = mean(credit_card_payment),
credit_card_installments_payment = mean(credit_card_installments_payment)
)
#####################################
#연령대별 시도별 요약데이터를 위경도데이터와 합치기
#####################################
#all ages
sidoDf3 <- left_join(sidoDf22, credit_avg, by=c('sidoNM2'='city'))
head(sidoDf3)
sidoDf3
sidoDf3$sidoNM2 <- as.factor(sidoDf3$sidoNM2)
#ages 20
sidoDf20 <- left_join(sidoDf22, credit_avg20, by=c('sidoNM2'='city'))
head(sidoDf2030)
#ages 30
sidoDf30 <- left_join(sidoDf22, credit_avg30, by=c('sidoNM2'='city'))
head(sidoDf2030)
sidoDf30$sidoNM2 <- as.factor(sidoDf30$sidoNM2)
#ages 40
sidoDf40 <- left_join(sidoDf22, credit_avg40, by=c('sidoNM2'='city'))
head(sidoDf40)
sidoDf40$sidoNM2 <- as.factor(sidoDf40$sidoNM2)
#ages 50
sidoDf50 <- left_join(sidoDf22, credit_avg50, by=c('sidoNM2'='city'))
head(sidoDf50)
sidoDf40$sidoNM2 <- as.factor(sidoDf50$sidoNM2)
##########################################
# 지역별 월카드 총 사용량
ggplot(sidoDf3, aes(x=lonWGS84,
y = latWGS84,
group=group)) +
geom_polygon(aes(fill = monthly_card_spend))+
ggtitle("지역별 월 카드 총 사용량 ")
# 지역별 총 대금 금액
ggplot(sidoDf3, aes(x=lonWGS84,
y = latWGS84,
group=group)) +
geom_polygon(aes(fill = monthly_loan))+
ggtitle(" 지역별 총 대출 금액")
# 지역별 신용점수
ggplot(sidoDf3, aes(x=lonWGS84,
y = latWGS84,
group=group)) +
geom_polygon(aes(fill = avg_score))+
ggtitle("지역별 월 카드 총 사용량 ")
```
지역에 따라 색으로 구분하여 개괄적으로 살펴볼 때 지역별로 수치적 차이가 보이며, 정도의 차이는 있으나 경향성을 분석해볼 수 있습니다. 예를 들어 대출금액과 신용 점수가 비례하거나, 월소비액과의 비교도 유의미해보는 지역이 상당수입니다.
```{r}
#지역별 신용카드 사용자 월별 추이
pop_diff_raw <- credit[c('DATE','pop_cd','ages','city','population')]
#pop_diff_raw
#pop_diff_raw$city
#20대 (서울, 경기 포함)
diff20 <- pop_diff_raw %>%
filter(ages =='20대' & !is.na(city)) %>%
group_by(DATE, city)
#diff20
ggplot(data = diff20, aes(x = DATE, y = population, color = city)) + geom_line() + geom_point(size = 3) + ggtitle('20대 신용카드 사용자 월별 추이(2016-02~2017-12)')
```
서울, 경기권의 인구수가 다른 지역보다 큰 차이로 그래프 상단에 위치하면서 다른 지역 인구수 값들의 변동 양상을 살피기가 상대적으로 불리하므로, 서울 경기권을 제외하여 다시 나타내 보겠습니다.
```{r}
#20대
diff20 <- pop_diff_raw %>%
filter(ages =='20대' & !is.na(city) & ! city %in% c('서울', '경기')) %>%
group_by(DATE, city)
ggplot(data = diff20, aes(x = DATE, y = population, color = city)) + geom_line() + geom_point(size = 3) + ggtitle('20대 신용카드 사용자 월별 추이(2016-02~2017-12)')
#30대
diff30 <- pop_diff_raw %>%
filter(ages =='30대' & !is.na(city) & ! city %in% c('서울', '경기')) %>%
group_by(DATE, city)
ggplot(data = diff30, aes(x = DATE, y = population, color = city)) + geom_line() + geom_point(size = 3) + ggtitle('30대 신용카드 사용자 월별 추이(2016-02~2017-12)')
#40
diff40 <- pop_diff_raw %>%
filter(ages =='40대' & !is.na(city) & ! city %in% c('서울', '경기')) %>%
group_by(DATE, city)
ggplot(data = diff40, aes(x = DATE, y = population, color = city)) + geom_line() + geom_point(size = 3) + ggtitle('40대 신용카드 사용자 월별 추이(2016-02~2017-12)')
#50
diff50 <- pop_diff_raw %>%
filter(ages =='50대' & !is.na(city) & ! city %in% c('서울', '경기')) %>%
group_by(DATE, city)
ggplot(data = diff50, aes(x = DATE, y = population, color = city)) + geom_line() + geom_point(size = 3) + ggtitle('50대 신용카드 사용자 월별 추이(2016-02~2017-12)')
#60
diff60 <- pop_diff_raw %>%
filter(ages =='60대' & !is.na(city) & ! city %in% c('서울', '경기')) %>%
group_by(DATE, city)
ggplot(data = diff60, aes(x = DATE, y = population, color = city)) + geom_line() + geom_point(size = 3) + ggtitle('60대 신용카드 사용자 월별 추이(2016-02~2017-12)')
```
20대의 지역별 신용카드 사용자 월별 추이를 살펴보면 다른연령대에 비해 월별 사용자 변화가 크지 않고 같은 지역 내에서 20대 신규유입을 기대하기가 어려워 보이므로 지역별로 성장률을 비교해보는 것이 좋은 가이드라인이 됩니다.
우리는 잠재력이 큰 타깃 연령층으로 20대를 선정하였습니다, 이제 20대의 금융서비스 이용량 성장환경을 효율적으로 구축할 수 있는 지역의 선정까지 나아갈 것입니다.
연령대와 지역을 기준으로 고객을 나누어 비교하고,
최종적으로 금융권이 집중해야 할 장래의 우수고객을 찾아볼 것입니다.
# 4. Potential Power Matrix를 통한 지역 선정 (제주, 경기, 인천의 20대에 주목하자!)
우리는 20대 고객을 잠재 고객으로 설정하고, 어느 지역의 20대가 가장 우수한 잠재 고객이 될지 가설을 세워보았습니다.
카드 이용이 점차 포화상태를 보임에 따라 서울과 경기 권처럼 이미 3040 세대에서 충분한 인프라가 형성되어 있고 20대 역시 활발한 성장을 위한 안정적인 환경이 구축되어 금융서비스 이용 양상이 예상 및 보장되는 곳 외의 지역으로 선정할 것입니다.
이를 위해 저희만의 지역 잠재력 선정 기준을 수립하였습니다.
해당 지역 20대의 잠재력과 해당 지역의 경제성장률을 지표로서, 금융권이 주목해야 할 새로운 시장을 제시합니다. 이 역시 그래프로 확인해보겠습니다.
```{r}
## 도시별 20대 PPM
####### 잠재력 Matrix 지표 컬럼 만들기
city_credit <- credit[c('pop_cd', 'city','ages', 'population', 'monthly_card_spend', 'monthly_loan' )] #필요한 컬럼만으로 새로운 데이터프레임 생성
city_credit <- as.data.frame(city_credit)
city_rate_index_raw <- city_credit %>%
filter(!is.na(city)) %>%
group_by(city, ages, pop_cd) %>%
summarise(평균인구수 = mean(population),
월카드이용총금액_평균 = mean(monthly_card_spend),
총대출금액_평균 = mean(monthly_loan)) %>%
group_by(city) %>%
mutate(도시별연령대별인구비율 = 평균인구수 / sum(평균인구수),
도시별전체월카드소비액 = sum(월카드이용총금액_평균),
p = 도시별연령대별인구비율 * 도시별전체월카드소비액,
도시별총대출금액 = sum(총대출금액_평균))
# p: 잠재력 Matrix x축에 해당
city_rate_index <- city_rate_index_raw %>%
select(city, ages, 도시별전체월카드소비액, 도시별총대출금액, p)
city_rate_index <- as.data.frame(city_rate_index)
# 20대만 추출
city_rate_index20 <- city_rate_index %>%
filter(ages == '20대')
#######경제성장률
economic_growth_rate_raw <- read.csv('./DATA/economic growth(2015-2017).csv')
names(economic_growth_rate_raw)
economic_growth_rate_raw <- economic_growth_rate_raw[c(2, 28, 27)]
economic_growth_rate_raw$경제성장률 <- (economic_growth_rate_raw$ecoRate2017 + economic_growth_rate_raw$ecoRate2016) / 2
economic_growth_rate <- economic_growth_rate_raw[c(1,4)]
write.csv(economic_growth_rate, './DATA/economic growth.csv', row.names = F)
names(economic_growth_rate_raw)
####### Potential Power Matrix
# 20대
# size: 도시별전체월카드소비액
# X축: p
# Y축: 도시별경제성장률(2016, 2017년도평균)
hi <- merge(city_rate_index20, economic_growth_rate, by = 'city')
graph <- ggplot(data = hi, aes(x=p, y = 경제성장률, size = 도시별전체월카드소비액, color = city)) + geom_point(stroke = 0, fill = 'skyblue', alpha = 0.7)+ scale_size(range = c(5, 35)) + geom_vline(colour="blue", xintercept= mean(hi$p), alpha = 0.3) + geom_hline(colour="blue", yintercept=mean(hi$경제성장률), alpha = 0.3) + ggtitle('도시별 20대 Potential Power Matrix_card') + xlab('(도시별 카드사용인구 중 20대 비율)*(해당 도시의 월평균 카드소비액)') + theme(legend.position = "none") + geom_text(aes(label=hi$city), size=4, color = 'black')
ggplotly(graph)
# 20대
# size: 도시별총대출금액
# X축: p
# Y축: 도시별경제성장률(2016, 2017년도평균)
hi <- merge(city_rate_index20, economic_growth_rate, by = 'city')
ecoRate <- read.csv("./DATA/경제성장률_시도__20190706225550.csv")
colnames(ecoRate)<-c("city","ecoRate2015","ecoRate2016","ecoRate2017")
ecoRate <- ecoRate[-1,]
ecoRate$city <-
ifelse(str_detect(string= ecoRate$city, pattern='(남|북)도'),
yes = str_c(str_sub(string = ecoRate$city, start=1, end=1),
str_sub(string = ecoRate$city,start=3,end=3)),
no = str_sub(string=ecoRate$city, start=1, end=2))
#write.csv(ecoRate, "경제성장률(2015~2017).csv")
```
잠재력 또는 잠재력 지표는 표적 지역을 선정하는 데에 특화된 잠재력 matix로 나타납니다.
x축은 ‘해당 지역 20대 인구비율’과 ‘해당 지역 전 연령의 월 카드 소비액’을 곱한 지수이고, y축은 해당 지역의 경제성장률입니다.
이것을 비교하는 이유는 카드사 입장에서 사용자 인구, 소비액이 타깃을 설정할 때 중요하며 앞서 살펴본 그래프들에서도 집단 별 뚜렷한 경향성 혹은 특성을 반영하는 값이기 때문입니다. (인구 비율과 소비액, 그리고 경제 성장률은 지역별 차이를 잘 보여주면서도 잠재력 산정에 적합한 변수입니다.)
잠재력 matrix는 종방향(연령대별)의 비교를 위한 지표는 아니므로 다른 연령에 적용한 뒤 20대의 잠재력 matrix와 종방향으로 비교(연령간 잠재력 비교)하는 것은 적합하지 않습니다. 우리나라의 인구는 점점 줄어들고 있으므로 20대보다 다른 연령대가 월등히 비율이 높게 나오며, 앞서 소비액도 생애주기별 분석을 했을 때 20대보다 그 이상의 연령대에서 높게 나옴을 확인했습니다. (1) 보통 30~50대에 가정을 이루므로 소비액이 늘어나는 것은 자연스러운 현상이며 쉬운 예로 20대보다 30대~60대에서 부동산, 자동차 등 큰 지출은 물론 경조사 비용지출까지 훨씬 더 많이 나타납니다. (2) 또한 우리나라의 임금제도를 살펴보면 20대보다 그 이상의 연령대에서 임금이 높으며, 소득이 늘어남에 따라 소비도 증가하므로 소비액을 토대로 한 잠재력 비교는 적절하지 않습니다.(2018년 고용노동부,「고용형태별근로실태조사」에 따르면 전체 근로자 중 29세 이하의 월 임금총액은 2116000원, 30대와 40대, 50대, 60대 이상은 각각 3272000원, 356000원, 3255000원, 2219000원이며 전연령 평균은 3028000원으로 조사되었습니다..) (3) 더하여 30~50대는 이미 카드소비액이 크기 때문에 잠재고객이라기보다 주 고객층에 해당합니다. 따라서 잠재력은 연령 간 비교보다는 각 연령층에 대하여 지역별로 비교하여 적당한 지역을 선정하는 것에 더 도움이 되며 본 잠재력 matrix는 해당 목적과 꼭 부합합니다.
분석의 기초로서 1사분면에 해당하는 지역들을 긍정적으로 평가합니다. matrix에 따라 제주, 경기, 인천이 해당됩니다.
```{r}
##카드사용 인구 2030과 4050비교 그래프
creditr2030<-creditr%>%
filter(ages %in% c("20대","30대"))
crer2030<-ggplot(data=creditr2030, aes(x=DATE, y=population, fill=city, color=city))+geom_point()+ylim(0,2550000)
creditr4050_1<-creditr%>%
filter(ages %in% c("40대","50대"))%>%
filter(city % in% )
crer4050<-ggplot(data=creditr4050, aes(x=DATE, y=population, fill=city, color=city))+geom_point()+ylim(0,2550000)
par(mfrow=c(2,1))
library(gridExtra)
grid.arrange(crer2030,crer4050,ncol=2)
```
20대와 30-40대의 카드사용 인구 비교 그래프입니다. 수도권의 수치가 압도적입니다. 인구가 집중되고 다방면의 정책과 서비스의 접근성이 높은 서울과 경기권에서 높은 잠재력을 예상하였으나 분석을 통해 제주와 같이 특별한 지역을 발견할 수 있었습니다.
```{r}
##연령대별 월카드 이용 금액에 대한 총 대출 금액
credit_c
ggplot(data = credit_c, aes(x = monthly_card_spend, y = monthly_loan, color = ages)) + geom_point()
mm <- model.matrix(monthly_loan ~ monthly_card_spend + ages, credit_c)
m1 <- lm(monthly_loan ~ monthly_card_spend + ages, credit_c)
summary(m1)
credit_c_lm <- credit_c
credit_c_lm$fit <- m1$fitted.values
m1$fitted.values
lm <- ggplot(data = credit_c_lm, aes(y = fit, x = monthly_card_spend, group = ages, color = ages)) + geom_line() + geom_point(aes(y = monthly_loan, x = monthly_card_spend, color = ages)) + ggtitle('연령대별 월 카드 이용 총 금액에 대한 총 대출 금액') + ylab('총 대출 금액')
ggplotly(lm)
```
더하여 대출금액 관련 데이터를 적용하여 추가로 분석해볼 수도 있습니다. 대출금액은 경제학적 개념에서 자산의 일부이면서도 금융 서비스 이용에 대한 정보를 담고 있습니다. 월 카드 이용 금액과 총 대출금액 간 선형성이 뚜렷이 나타나는데 모든 연령에서 고르게 나타나며 앞서 분석 목적에 따라 배제하기로 한 10대 및 60대이상 노년층을 제외하고 살펴볼 때는 분산된 정도도 훨씬 작습니다. 카드 이용 금액을 이용해 추정한 잠재력과 관련하여 분석해보기에 적합한 변수입니다.
```{r}
ggplot(data=creditc, aes(x=rep_loanb, y=monthly_card_spend))+geom_point()
##도시별 20대 PPM_loan
graph <- ggplot(data = hi, aes(x=p, y = 경제성장률, size = 도시별총대출금액, color = city)) + geom_point(shape = 22, stroke = 0, fill = 'skyblue', alpha = 0.7)+ scale_size(range = c(5, 35)) + geom_vline(colour="blue", xintercept= mean(hi$p), alpha = 0.3) + geom_hline(colour="blue", yintercept=mean(hi$경제성장률), alpha = 0.3) + ggtitle('도시별 20대 Potential Power Matrix_loan') + xlab('(도시별 카드사용인구 중 20대 비율)*(도시전체 월평균 카드소비액)') + theme(legend.position = "none") + geom_text(aes(label=hi$city), size=4, color = 'black')
ggplotly(graph)
```
기존 잠재력 matrix에서 원의 크기로 대출금액으로 나타낸 그래프입니다. 제주, 경기, 인천이 여전히 잠재력 matrix에서 긍정적으로 평가될 1사분면에 속하며, 이미 해당 지역 20대가 금융서비스를 이용하고 있음을 알 수 있습니다.
20대가 해당 지역에서 상당한 인구 규모를 보이면서도 지역 전체의 카드 소비와 경제 성장률 역시 보장되어 있으므로 해당 지역에서 20대에 주력하여 상품 및 서비스를 추진한다면 현 30~50대보다 활발한 거래가 일어나도록 가시적 성장을 이루어 금융권 입장에서 생산적, 효율적인 인프라 구축에 도움이 될 것입니다.
#5. 잠재력 matrix로 발견한 제주의 잠재력
이 중 좌측 하단의 섬으로 표시되는 제주는 월 카드 사용량은 현저히 높으나 평균 대출금액과 신용등급은 낮게 나타나는 특이한 지역입니다. 다양한 특성이 육지와 구분되면서도 잠재력을 보이고 있으므로 성장을 위한 새로운 시도에 열려있는 지역으로 생각됩니다. 제주 혹은 제주의 20대와 관련하여 고려할 부분을 구체적으로 살펴볼 필요가 있습니다. 따라서 금융권이 제주의 20대와 win-win할 수 있는 방안에 대해 데이터를 통해 분석해보겠습니다.
```{r}
knitr::opts_chunk$set(warning = F,message = F)
```
```{r, error =F}
library(tidyverse)
jejudata <- read.csv('./DATA/jeju_financial_life_data.csv',header=T, stringsAsFactors=F)
jejudata %>% head
jejudata$medium_resid_rat <- ifelse(jejudata$medium_resid_rat == '-999999',NA,jejudata$medium_resid_rat)
jejudata$large_resid_rat <- ifelse(jejudata$large_resid_rat == '-999999',NA,jejudata$large_resid_rat)
##제주 연령별 소득과 소득 소비 상관
jejudata <- jejudata %>% mutate(age_cat = ifelse(jejudata$age ==24,'0020',
ifelse(jejudata$age %in% c(29:39),'2030',
ifelse(jejudata$age %in% c(44:59),'4050',
ifelse(jejudata$age %in% (60:79),'6070','8090') ) ) ))
```
#위기의 제주
한국의 실리콘밸리를 꿈꾸던 제주에 이상 징후가 감지되고 있습니다.
제주는 한국, 중국, 일본의 중심에 있는 동북아시아 요충지이자 제주특별법을 기반으로 다른 지역과 차별화된 제도를 운영한다는 장점을 내세워 2000년대초부터 적극적으로 기업 유치에 나섰습니다.
하 지 만 '땅값·인재난'에 기업들은 제주를 외면하고 있습니다.
우선 천정부지로 오르고 있는 제주의 땅값에 주목하여 제주도 주택가격의 변화를 살펴보겠습니다.
```{r}
###############
library(ggplot2)
library(tidyverse)
library(reshape)
jeju_resid_data <- read.csv('./DATA/평균매매가격_종합.csv',header=T, stringsAsFactors=F)
str(jeju_resid_data)
head(jeju_resid_data)
start_date<-'2013-01-01'
end_date <-'2019-05-01'
date_set <-seq(as.Date(start_date), as.Date(end_date), by = "month")
str(date_set)
date_set <- as.character.Date(date_set)
date_set <- as.vector(date_set)
colnames(jeju_resid_data) <- c('지역',date_set)
jeju_resid_data_melt <- melt(jeju_resid_data,id=c('지역'))
jeju_resid_data_melt <- jeju_resid_data_melt %>% rename(c(variable='date',value='price'))
jeju_resid_data_melt$date<- as.Date(jeju_resid_data_melt$date, format="%Y-%m-%d")
#제주도 지역 상승
jeju_resid_jeju <- jeju_resid_data_melt %>% filter(jeju_resid_data_melt$지역=='제주')
jeju_resid_all <- jeju_resid_data_melt %>% filter(jeju_resid_data_melt$지역=='전국')
jeju_resid_jeju_vs_all <- jeju_resid_data_melt %>% filter(jeju_resid_data_melt$지역==c('전국','제주'))
```
```{r}
# plot
ggplot(jeju_resid_data_melt, aes(x=date,y=price, col=지역)) +
geom_line()+
labs(title="Time Series of Price",
subtitle="지역별 주택 가격",
caption="Source: 통계청",
color=NA) + # title and caption
theme(axis.text.x = element_text(angle = 90, vjust=0.5, size = 8), # rotate x axis text
panel.grid.minor = element_blank()) # turn off minor grid
ggplot(jeju_resid_jeju, aes(x=date,y=price, col=지역)) +
geom_line()+
labs(title="Time Series of Price",
subtitle="지역별 주택 가격",
caption="Source: 통계청",
color=NA) + # title and caption
theme(axis.text.x = element_text(angle = 90, vjust=0.5, size = 8), # rotate x axis text
panel.grid.minor = element_blank()) # turn off minor grid
ggplot(jeju_resid_all, aes(x=date,y=price, col=지역)) +
geom_line()+
labs(title="Time Series of Price",
subtitle="지역별 주택 가격",
caption="Source: 통계청",
color=NA) + # title and caption
theme(axis.text.x = element_text(angle = 90, vjust=0.5, size = 8), # rotate x axis text
panel.grid.minor = element_blank()) # turn off minor grid
ggplot(jeju_resid_jeju_vs_all, aes(x=date,y=price, col=지역)) +
geom_line()+
labs(title="Time Series of Price",
subtitle="지역별 주택 가격",
caption="Source: 통계청",
color=NA) + # title and caption
theme(axis.text.x = element_text(angle = 90, vjust=0.5, size = 8), # rotate x axis text
panel.grid.minor = element_blank()) # turn off minor grid
#전국 평균에 비해 제주도 집값 상승률이 매우 높음을 확인 할 수 있습니다.
```
제주도의 집값이 높은 집값 상승률에 따라 천정부지로 오르고 있음을 볼 수 있습니다.
인재와 부지 두가지 문제에 대한 해결방안을 찾아 보겠습니다.
#인재 찾기
실제 경제 활동 인구 중 어떠한 연령대가 가장 활발한 경제 활동력을 갖고있는지 확인해보겠습니다.
###<연령대 구분>
24세 이하 0020세대
25세이상 39세 이하 2030세대
40세이상 59세 이하 4050세대
60세이상 79세 이하 6070세대
80세이상 8090세대
```{r}
##제주 연령별 소득과 소득 소비 상관
jejudata <- jejudata %>% mutate(age_cat = ifelse(jejudata$age ==24,'0020',
ifelse(jejudata$age %in% c(29:39),'2030',
ifelse(jejudata$age %in% c(44:59),'4050',
ifelse(jejudata$age %in% (60:79),'6070','8090') ) ) ))
```
##연령대별 소득*소비 그래프
```{r}
# Plot
ggplot(jejudata, aes(x=avg_income, y=avg_spend , col=age_cat)) +
geom_point(aes(col=age_cat)) + # draw points
xlim(0,400000000) +
ylim(0,50000000)+
geom_smooth(method="loess", se=F)
```
Plot을 보면 소득 대비 소비가 2030대에서 높은 것을 확인할 수 있습니다.
소비가 활발할 수록 경제에 플러스 요인이 된다고 볼 때,
2030의 소득대비 높은 소비는 2030의 경제적 잠재성이 크다는 것을 보여줍니다.
제주 실리콘 벨리의 부활을 위해선 기업 유치 뿐 만 아니라 이 기업에 근무할 인재들이 필요랍니다.
IT산업의 주요 인재이자 경제의 핵심이 되는 2030이 거주할 수 있는 실리콘벨리 주택단지의 위치를 선정해 보겠습니다.
직종별로 어느 지역에 많이 거주하는지 지도에 시각화 해보겠습니다.
##2030 대기업 재직 비율 탑100들의 거주지 지도 시각화
```{r }
majorjob <- jejudata %>% filter(jejudata$age_cat==c('2030')) %>% arrange(desc(job_majorc)) %>% head(100)
center <- c(mean(majorjob$x_axis), mean(majorjob$y_axis))
library(ggmap)
register_google('AIzaSyB0zoHBokriScSBi-9h448FYyRSqX9BMzk')
#############실제 분석 )) 대기업 현직자 거주 지역
```
```{r}
qmap(location = center,
zoom = 10,
maptype = 'roadmap',
source = 'google') +
geom_point(data = majorjob,
aes(x = x_axis,
y = y_axis),
shape = '☆',
color = 'blue',
size = 4)
```
##2030 중소기업 재직 비율 탑100의 거주지
```{r }
smalljob <- jejudata %>% filter(jejudata$age_cat==c('2030') )%>% arrange(desc(job_smallc)) %>% head(100)
center <- c(mean(smalljob$x_axis), mean(smalljob$y_axis))
qmap(location = center,
zoom = 10,
maptype = 'roadmap',
source = 'google') +
geom_point(data = smalljob,
aes(x = x_axis,
y = y_axis),
shape = '☆',
colour = 'green',
size = 4)
```
```{r}
house_price <- read.csv('./DATA/주택가격.csv',header=T, stringsAsFactors=F)
library(readxl)
jeju_house_code <-read_xls('./DATA/법정동코드 조회자료.xls')
house_price$법정동코드<-as.character(house_price$법정동코드)
jeju_price <- inner_join(house_price,jeju_house_code, by='법정동코드')
jeju_price <- jeju_price[,-12]
jeju_price <- jeju_price %>% filter(jeju_price$지목코드==8) #법정동코드가 8이 거주
for (i in 1:length(jeju_price$법정동명.x)) {
lonlat = geocode(jeju_price[i,"법정동명.x"], messaging = F)
jeju_price$lon[i] = as.numeric(lonlat[1])
jeju_price$lat[i] = as.numeric(lonlat[2]) }
#############################################
```
##제 1 사분위수 이하의 평균 토지금액을 갖는 토지가 많이 위치하는 곳 지도 시각화
국가 토지금액 공공데이터에서 토지의 용도가 거주인 것들만 선택한 후