삼성SDS Brightics

[Brightics Studio] 개인 미션 2-2. 지역별 지역화페 사용현황 지도로 나타내기 (알록달록~하니 이뻐요 와서 구경하세요~)

해붕 2021. 6. 29. 21:26
반응형

안녕하세요~!

Brightics 서포터즈 2기 정해웅입니다💙

개인미션 2-1에서는 경기도 지도를 Brightics Studio로 불러오는 과정을 경험했었는데요,

혹시라도 못보신 분들은 아래 링크를 참고해주세요!

https://blog.naver.com/mbmb7777/222413352418

 

[Brightics Studio] 개인 미션 2-1. 골목대장 지역화폐 (경기도 지도 가져오기편)

안녕하세요~ Brightics 서포터즈 2기 정해웅입니다💙 삼성SDS 관련 소식으로 주로 전해드리다가 오랜...

blog.naver.com


이번 시간에는

[경기도 내 지역 별 지역 화폐 사용 현황]을 분석하고 Brightics Studio 지도에 나타내는 과정을 구현해보려합니다!

기본적인 과정은 아래 링크 Brightics Studio 튜토리얼을 어느 정도 참고하며 진행했으니

아래 링크를 띄워놓고 같이 보시면 좋을 것 같습니다❗

https://www.brightics.ai/kr/docs/ai/s1.0/tutorials/224_py_mean_shift?type=insight

 

Brightics Studio

 

www.brightics.ai

먼저, 데이터셋 구축부터 차근차근 확인해보겠습니다.

1. 데이터셋 구축(1) : 지역화폐 데이터셋

먼저, 어떻게 지역화폐 데이터셋을 구했는지부터 설명드리겠습니다.

https://www.bigdata-map.kr/

 

통합 데이터 지도

통합 데이터 지도는 빅데이터 플랫폼 및 센터가 생산 유통한 공공‧민간 데이터를 쉽게 연계∙활용할 수 있도록 합니다. 데이터를 친숙하게 이용하고 나아가 데이터 거래의 장을 구축하여 데이

www.bigdata-map.kr

통합 데이터 지도에 [지역화폐]를 검색하고 분석할만한 자료가 있나 하나하나 확인해봤습니다.

꽤 다양한 자료가 나오는데,

[지역별 지역화폐 결제금액 및 결제 변화율]이라는 자료가 지역 별로의 총 결제금액이 나와있어

이번 프로젝트에 적합하다고 판단하였습니다.

통합 데이터 지도는 사이트에서 직접 데이터를 제공하는 것이 아닌

이 데이터셋을 가진 페이지로 연계해주는 사이트입니다.

[경기지역 경제포털]로 연결을 해주었고,

데이터 이용 신청 -> 데이터 다운 을 거쳐 손쉽게 데이터셋을 구축했습니다.

csv 파일로 다운받아지고

열어보시면

이렇게 깨지는 것을 확인할 수 있습니다.

바로 인코딩에 의해 발생하는 문제인데요.

이를 해결할 수 있는 방법은 크게 2가지가 있습니다.

1. txt파일로 인코딩을 바꾸기 UTF -> ANSI

2. 엑셀에서 인코딩을 바꿔서 csv 열기

한글깨짐 현상은 Brightics Studio에서도 나타나기에

어느 정도는 다룰 필요가 있어 간략하게 다뤄보겠습니다.


간략하게 설명드리자면,

1번 방식은

먼저 csv파일을 txt 파일로 바꾸면서 인코딩 형식을 ANSI로 바꾸고 다시 csv 파일로 변환하는 것을 의미합니다.

ANSI로 인코딩 후

모든 파일 선택 후 .csv 확장자를 붙여 csv 파일로 재변환하는 방식입니다.


2번 방식은

엑셀 내에서 데이터 보기를 인코딩을 바꿔서 보는 방식입니다.

엑셀에서 데이터 -> 텍스트/CSV 를 누르고

 

949로 로드 되던 원본 -> 65001 UTF-8로 읽고 로드합니다.

두 방식 모두 적용 시

한글 깨짐을 해결할 수 있습니다.


2. 데이터셋 구축(2) : 위도 경도 좌표 데이터셋

다음은

결제 금액 별로 지도에 나타내기 위해서는

이 행정동에 맞는 위도 경도 좌표 데이터셋이 필요했습니다.

Brightics 튜토리얼이 소개한 사이트는 유료라 이용하지 못하고

http://www.gisdeveloper.co.kr/?p=4784

 

주소 좌표 변환 툴, Geocoder-Xr – GIS Developer

개 요 Geocoder-Xr은 주소를 좌표로 변환하거나 좌표를 주소로 변환하여 그 결과를 SHP 파일로 저장해 주는 툴입니다. 전국의 지번주소와 도로명주소를 기반으로 지속적으로 DB가 업데이트됩니다.

www.gisdeveloper.co.kr

이 툴을 활용하여 변환했습니다.

먼저, 본 데이터셋에서

행정동명만 나와있는 열만을 추출하여 새로운 csv 파일을 만들고

이를 주소 좌표 변환툴에 csv 파일로 입력했습니다.

시간이 조금 걸리고, 결측치가 있지만

나름 잘 변환해줌을 알 수 있습니다.

마지막으로 기존 데이터셋과

위치 좌표를 합치는 작업을 해야 하는데,,

이 부분이 조금 당혹스러웠습니다.

문제점은

1. 일정 월을 정해야, 하나의 행을 형성하고 주소를 붙이기 편함

2. 2020년 3월로 정하니, 주소 csv와 본 csv의 행 갯수가 달라진다 .. 😭

 

위에 보시다시피

첫 번째 사진 (본 데이터 csv)는 475개의 행

두 번째 사진 (위치 csv)는 469개의 행

을 가지고 있어

행의 갯수를 맞추기 위해서는 일일이 비교하지 않을 수 없었습니다.

예상대로 비교하니

위치 csv에서 결측치가 있음을 확인할 수 있었습니다.

이런 식으로 병점 2동까지는 잘 따라가다가

봉담읍에 대한 위치 좌표가 없는 것이 보이는데요.

따라서 이를 직접 채워가면서 진행했습니다.

역시 전처리 과정이 정말,, 힘든 과정인 것 같습니다 😥


결론으로는

2020년 3월 시점에서

[지역화폐 결제금액]에 대한 데이터셋과

[행정동 별 위치 좌표] 데이터셋을 합친 csv 파일을 완성시켰습니다.

GGmap.json 파일과 형식이 맞는 주소 열이 필요할지도 몰라서

엑셀 함수를 활용하여 시도, 시군구, 행정동을 합친 열도 새로 만들어놨습니다.


3. Brightics Studio Map 시각화

데이터셋 구축을 완료했다면

이제 드디어..............

Brightics Studio를 활용하여 지도에 시각화하는 과정을 진행해보겠습니다.

😲

튜토리얼에서는 본 데이터셋과 주소 데이터셋을 따로 Load하고 Join 함수를 이용하여 붙였지만

저희 데이터에서는 위에서 이미 합쳐놨으니

Join 함수는 생략하고 진행하겠습니다.

사실 지도로 시각화하는 것 자체는 Load만 해도 충분합니다 .. 😇

Load 함수는 이제 익숙하신 것 같으니 바로 진행하겠습니다!

[지역 별 지역화폐 사용 금액] + [지역 좌표 csv] 를 합친 combined.csv를 Local에서 불러옵니다.

엇! 이때, 행정동명이 겹쳐서 error가 발생하는데요.

큰 문제는 아니니 침착하게

바꿔줄 행을 고르고 [바꾸고 싶은 이름 : 행정동명] [바꿀 이름 : 행정동]을 입력합니다.

이런 식으로 Brightics 내에서 바로 바꿀 수 있으니 걱정 마세욥 😊

다음 Delete Missing Data를 통해 결측치를 제거할 건데요!

실행 결과 없어지는 행이 20개 정도 있길래

엇.. 왜 없어지지?

했더니

전처리 할 때, 새로 추가된 주소에 index를 제가 빈 칸으로 뒀어서 그렇네요.. 하하.. 😥

새로 채우기 보다는

함수에서 측정할 column에서 index를 빼겠습니다.

체크 해제하고 다시 돌리겠습니다.

다시 실행 결과,,, 하나의 행이 또 삭제된 것을 확인했는데요

바로

경도를 밀려 쓴 데이터가 하나 있었습니다.

다시 제대로 csv 수정하고 왔습니다.

이제 지도로 나타낼 준비가 된 것 같은데, 한 번 나타내 볼까요?

Chart Setting에서

Chart Type : Map

Map Type : GGMap.json -> 1편에서 만든 경기도-서울 지도입니다.

Latitude : 위도

Longitude : 경도

Color By : 행정동 명 -> 행정동 별로 거래 금액이 다르므로 색깔도 다르게 넣기 위해 행정동 명을 골랐습니다.

Size By : 결제 금액(Average) -> 결제 금액에 따라 원의 사이즈가 커지게 설정하였습니다. (Average든 Sum이든 상관없는 것 같습니다)

결과는..!

짜잔!!!!!!!!!

경기도 위치 별로 다른 원의 색깔

위치 별로 다른 원의 크기로

2020년 3월에 지역 화폐가 경기 내 어느 지역에서 가장 많이 쓰이고, 얼마나 다양하게 쓰이고 있는지 한 눈에 파악할 수 있습니다.

이는 World.json map으로 봐도 재밌게 보이는데요

 

이런 식으로 세계 지도에서 한국 지도로 좁혀가는 그림도 볼 수가 있습니다.

경기도 외 권에도 찍히는 것은

행정동을 좌표로 변환할 때 문제가 있었던 것으로 보이네요..!


4. Mean Shift 이용한 군집화

Mean Shift 알고리즘은 빈도수가 주위보다 많은 곳을 중심점으로 하여 군집화하는 알고리즘입니다.

이번 프로젝트에서 만약

주소가 경기도 고양시 일산1동 ~번 길

이렇게 더 자세하게 나와있다면 Mean Shift 함수를 이용하여 더 쉽게 군집화를 할 수 있었을 텐데

저희 프로젝트는 지역 간 거리가 꽤 있고, 군집화하기에는 너무 다양한 지역들이 있기에

Mean shift라는 알고리즘을 잘 활용할 수 있을까에 대한 의문이 들면서 시작하겠습니다.

(이 의문이 사라지는 마법을 보실 수 있습니다.)


튜토리얼에는 Mean Shift를 활용하여

빈도수에 따라 군집도를 체크하는 것이 나와있었는데,

저희 데이터는 사실 빈도 수와는 무관하고 행정동 별로 이미 나뉜 상태이기에

두드러지는 결과를 보일 것 같진 않을 것으로 예상됩니다.

(아직까지는 자기 생각이 틀릴 것이라고 생각 못함..)

Input Columns : 경도, 위도

Bandwidth : 0.05

로 초기 파라미터를 설정했습니다.

이 때, Bandwidth는 RBF 커널에서 쓰이는 Bandwidth라는데요.

sample을 확인하면, 빨간 X표를 중심으로 주변이 많이 지역화폐사용이 되고 있는 곳들입니다.

Mean Shift 함수를 통해

125개의 군집이 형성된 것을 볼 수 있는데요.

Mean Shift는 이렇게 집중되는 곳 주변을 군집화 하는 함수라고 생각하시면 될 것 같습니다.

이를 다시 Map으로 시각화 하면

색깔을 prediction으로 군집화한 값으로 정했습니다.

조금 달라진 것 같나요..?

확실히 비슷한 색이 모여있는 것 같기도 한 결과를 보입니다.

데이터가 워낙 많기 때문에 한 눈에 파악하기가 어려운 것 같습니다.

왠지 모르게 Bandwidth를 늘려보고 싶은 마음이 들지는 않으신가요?

파라미터를 너무 작게 설정하여 너무 세세하게 군집이 이루어진 것 같은 느낌적인 느낌이 들어

Bandwidth를 0.1로 조정하고 다시 진행해보았습니다.


Bandwidth = 0.1로 조정 후 다시 Mean Shift 알고리즘을 실행해봤습니다.

prediction 열의 행 갯수가 125개 -> 48개로 확연하게 줄어든 것을 볼 수 있네요!

Map으로 시각화한 것이 벌써부터 기대되지 않나요?!

우와아아아~~!!!

확실히 Bandwidth = 0.05일 때보다 군집화가 훨씬 잘 보이는 것을 확인할 수 있습니다 🙋‍♂️

양 옆으로 비교해보겠습니다.

 

좌측이 Bandwidth=0.1, 우측이 Bandwidth = 0.05일 때의 Map입니다.

처음에 파라미터를 넣어보고 잘 안되네? 하고 넘어가는 것이 아니라

파라미터 조정을 통해 원하는 결과물을 얻어내는 것도 정말 중요한 것 같습니다..

(사실 어제 너무 피곤해서.. 역시나 잘 안되네? 하고 넘어갈 뻔 한 제 자신 반성해~ 😈)


5. Mean Shift Predict 이용한 군집 예측

마지막으로 Train, Test으로 Split한 데이터 중

Test 데이터와 Mean shift를 활용하여 새로운 지역이 들어왔을 때,

어느 군집으로 넣어 줄지 계산해주는 Mean Shift Predict를 활용해보면

아래는 Bandwidth = 0.05일 때의 모습입니다.

 

역시나 새로운 데이터가 어디의 군집으로 들어갔는지 너무나 많은 Prediction 숫자에 의해 안보이시죠?

Bandwidth = 0.1로 조정 후, Mean Shift Predict를 다시 실행했습니다.

Table로 먼저 살펴보면

 

325개의 데이터가 적절한 수의 군집(Prediction)에 들어가 지도에서도 아름답게 분포하는 것을 확인할 수 있습니다.

이렇게 Test Data, 즉 아직 어느 군집으로 들어갈 지 정해지지 않은 데이터들도

기존 Train Data를 이용하여 Mean Shift 알고리즘을 학습시킨 덕분에

적절한 군집에 잘 분포하게 된다는 것까지 파악게 되었습니다 😊


6. 결론

Load 후 바로 Map으로 시각화

 

Mean Shift 알고리즘 사용하여 군집화한 결과

위 사진이 데이터 Load 후 바로 Map으로 시각화한 결과이고

아래 두 사진이 Mean Shift 알고리즘을 활용하여, Train과 Test 데이터를 군집화한 결과입니다.

여러분들이 보시기엔 경기도에서 어느 지역이 가장 20년 3월에 지역화폐를 많이 사용한 것 같나요?

저는 이렇게 3개 정도의 지역이 눈에 띈다고 생각하는데

군집 색깔과 빈도 수를 통해서 파악이 가능합니다.

 

진분홍색이 0번 선수로 가장 많은 군집을 형성한 것을 볼 수 있고,

그 이후로, 짙은 남색, 짙은 회색 순으로 많은 군집을 형성함을 알 수 있습니다.

 

실제 경기 지도와 비교하자면 용인 / 수원 / 성남 / 광주

이 부근 지역에서 가장 핫하게(빈도 수가 높게) 사용했다 라는 것을 확인할 수 있고


원의 크기가 큰 것을 꼽아보자면 (결제 금액이 높은 것)

 

3개 정도 눈에 띄는 곳을 골라봤는데 부천 / 안산 / 양평으로 보이죠?

역시나 표로 확인해도 안산, 부천, 양평이 상위권을 차지하는 것을 알 수 있습니다.

큰 손(?)들이 저 지역에 서식하시나 봅니다.. 하하


왜 안산이 20년 3월의 핫핸드였을까 생각을 해보다가

20년 1월~3월의 기사를 찾아보게 되었습니다.

아무래도 3월에 지역화폐로 소비를 하려면

1~2월 정도에는 보급이 이루어져야하므로 그 시점부터 기사를 확인한 결과

안산에서 지역화폐를 10% 특별할인을 1월부터 하고

코로나로 인해 3월까지 재연장했다는 소식을 접하고

아마 이 것이 꽤나 크게 작용하지는 않았을까?

실제로 1,2,3월의 안산 지역 화폐 소비 데이터를 살펴보면

확인 결과 안산시 26개의 동 중,

26개 모두 2월에 1월 대비 지역화폐 소비가 증가한 것을 확인하였고,

26개 동 모두 3월에도 2월 대비 지역화페의 소비가 증가한 것을 확인했습니다.


이렇게 [경기도 내 지역화폐 결제금액 데이터셋]과 [경기지역 좌표] 데이터셋을 활용하여

Brightics Studio으로 시각화 및 군집화하는 과정을 마쳤습니다.

어떠셨나요?

전처리 과정이 고통스러웠지만,,, 후에 작업들은 꽤나 순탄했다고 볼 수 있는데

이렇게 간단한 프로젝트를 통해서도

아~ 지자체에서 이렇게 지역화폐 할인 정책을 펼치니

실제 시민들이 지역화폐를 잘 활용하고, 실제 결제금액이 올라가구나?

지역화폐의 활성화를 위해서는 이러한 정책을 세우면 시민들이 더욱 잘 활용할 수 있겠다!

이렇게 생각을 전개시킬 수 있어서 정말 좋은 것 같습니다.


이번 프로젝트를 마치며

1. Brightics Studio의 지도 기능은 놀랍다..

2. Mean Shift가 내 프로젝트와는 거리가 멀다고 생각했지만, 오산이였다 (경기도 오산 아님)

3. 결과적으론 Mean Shift을 사용하여 지도 자체가 훨씬 보기 좋게 군집화가 되었네요,, (본 데이터가 워낙 많은 행정동을 포함하고 있으니)

4. 수많은 지역 데이터를 지도로 나타내니 눈에 확 띄어서 보기 좋다!

이 정도의 감상평(?)을 낼 수 있을 것 같습니다.

저번 개인 미션 1에 비해 확실히 주제도 재밌어서

저도 되게 재밌게 준비한 것 같습니다.

지역화폐 관련 데이터도 생각보다 다양하고,

이에 더 나아가 코로나가 종식된 이후에도 지역화폐 추이도 궁금해지고,

어떤 품목이 가장 지역화폐로 많이 팔릴까? 와 같은 부분도 궁금해지는데

시간이 된다면 추후에 진행해보겠습니다 :)

너무 뜻깊고 재밌는 프로젝트였고

이만 마치겠습니다 💙


 

저희 연구단 앞에 건축학과가 해놓은 모형인데,,

뭔가 저희 Brightics Studio 지도와 비슷하지 않나요..? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

(나만 비슷한감 (っ °Д °;)っ)


googlee5a38ed35f5c885b.html
0.00MB

* Brightics 서포터즈 활동의 일환으로 작성된 포스팅입니다.

#삼성SDS #브라이틱스 #브라이틱스서포터즈 #AI #분석플랫폼 #분석프로그램 #데이터분석 #빅데이터 #인공지능 #SamsungSDS #초보자분석 #분석초보 #코딩 #코딩초보 #통계 #데이터사이언스 #Python #R #SQL #Scala #분석툴 #BrighticsAI #BrighticsStudio #브라이틱스스튜디오 #Brightics #대외활동 #대학생 #대학생대외활동 #삼성SDSBrightics #모델링