Link
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dataq
- 셋
- 빅데이터분석기사
- 컨테이너
- 파이썬튜플
- 2회기출
- 공빅데기관매칭
- 파이썬입출력
- 실기
- 빅분기실기
- 리스트
- 백준1920
- 파이썬
- 백준 2164
- 작업형2
- 공공빅데이터청년인턴
- csv병합
- 딕셔너리
- konlpy
- 튜플
- 태블로
- set시간복잡도
- 빅분기
- 공빅데
- 파이썬AHP
- 워드클라우드
- 파이썬셋
- 예측모델링
- 행별속성합계
- 파이썬딕셔너리
- Today
- Total
Data Science
가중치 적용, 총점, 순위 산정, folium 으로 지도에 나타내기 본문
가중치 적용하여 총점과 순위 산정¶
In [1]:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
데이터의 속성을 확인하고, 가중치를 어떤 속성에 적용할 것인지 정함¶
In [2]:
# 선정된 동에 대하여 각 시설의 갯수가 카운팅된 데이터
file_name = '특정동_공원_시설개수.csv'
df = pd.read_csv(file_name,encoding='cp949')
전체칼럼 = df.columns.tolist()
print (전체칼럼)
['EMD_CD', 'EMD_NM', 'SGG_OID', 'COL_ADM_SE', 'GID', 'id', 'layer', 'path', 'field_1_1', '관리번호', '공원명', '공원구분', '소재지도로', '소재지지번', '위도', '경도', '공원면적', '공원보유시', '공원보유_1', '공원보유_2', '공원보유_3', '공원보유_4', '지정고시일', '관리기관명', '전화번호', '데이터기준', '제공기관코', '제공기관명', '시설설치가', '복지시설', '요양시설', '경로당', '노인대학', '버스정류장', '지하철역']
In [3]:
점수칼럼 = ['복지시설', '요양시설', '경로당', '노인대학', '버스정류장','지하철역']
print("입력한 점수컬럼명\n", 점수칼럼)
가중치 = [1] * len(점수칼럼)
입력한 점수컬럼명 ['복지시설', '요양시설', '경로당', '노인대학', '버스정류장', '지하철역']
산정되었던 가중치를 입력¶
In [4]:
#복지 0.141412
#요양 0.157201
#경로 0.256214
#대학 0.029778
#지하철 0.200142
#버스 0.215252
가중치 = [0.141412,0.157201,0.256214,0.029778,0.200142,0.215252]
if (len(가중치) != len(점수칼럼)):
print("입력한 가중치 갯수가 점수칼럼 갯수와 다릅니다.")
else:
print("입력완료")
입력완료
In [5]:
pre_process_set = pd.read_csv(file_name,encoding='cp949')
pre_process_set = pre_process_set.sort_values(by='EMD_CD')
# Null to 0
pre_process_set.fillna(0, inplace=True)
총점 계산 -> 새컬럼 sum
In [6]:
df = pre_process_set.copy()
# 가중치를 곱하여 새로운 값으로 변경해준다.
for i in range(0, len(점수칼럼)):
name = 점수칼럼[i]
df[name] = df[name] * 가중치[i]
점수컬럼들의 합계를 내기 위해
나머지 속성은 임시로 인덱스화 한다
In [7]:
df.set_index(['EMD_CD', 'EMD_NM', 'SGG_OID', 'COL_ADM_SE', 'GID', 'id', 'layer', 'path', 'field_1_1', '관리번호', '공원명', '공원구분', '소재지도로', '소재지지번', '위도', '경도', '공원면적', '공원보유시', '공원보유_1', '공원보유_2', '공원보유_3', '공원보유_4', '지정고시일', '관리기관명', '전화번호', '데이터기준', '제공기관코', '제공기관명', '시설설치가'], inplace=True)
df['sum'] = df.sum(1)
df.reset_index(inplace=True)
총점(sum)을 통해 순위 컬럼을 생성
In [8]:
# 등수 계산
df['순위'] = df['sum'].rank(method='dense', ascending=False).astype(int)
final = df.sort_values(by='순위')
final.reset_index(drop=True, inplace=True)
In [9]:
# 상위 데이터 확인
display("결과", final.head(5))
'결과'
EMD_CD | EMD_NM | SGG_OID | COL_ADM_SE | GID | id | layer | path | field_1_1 | 관리번호 | ... | 제공기관명 | 시설설치가 | 복지시설 | 요양시설 | 경로당 | 노인대학 | 버스정류장 | 지하철역 | sum | 순위 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 28200103 | 만수동 | 49 | 28200 | 3172 | 0.0 | ICN_Dong | D:\Big_project_qgis\ICN_Dong.shp|layername=ICN... | 197 | 28200-00136 | ... | 인천광역시 남동구 | 900.0 | 0.0 | 0.786005 | 1.024856 | 0.0 | 3.202272 | 0.000000 | 5.013133 | 1 |
1 | 28200103 | 만수동 | 49 | 28200 | 3172 | 0.0 | ICN_Dong | D:\Big_project_qgis\ICN_Dong.shp|layername=ICN... | 198 | 28200-00137 | ... | 인천광역시 남동구 | 992.4 | 0.0 | 0.471603 | 0.512428 | 0.0 | 3.802698 | 0.000000 | 4.786729 | 2 |
2 | 28200103 | 만수동 | 49 | 28200 | 3172 | 0.0 | ICN_Dong | D:\Big_project_qgis\ICN_Dong.shp|layername=ICN... | 192 | 28200-00131 | ... | 인천광역시 남동구 | 2400.0 | 0.0 | 0.000000 | 0.512428 | 0.0 | 3.802698 | 0.000000 | 4.315126 | 3 |
3 | 28200103 | 만수동 | 49 | 28200 | 3172 | 0.0 | ICN_Dong | D:\Big_project_qgis\ICN_Dong.shp|layername=ICN... | 199 | 28200-00138 | ... | 인천광역시 남동구 | 900.0 | 0.0 | 0.786005 | 1.281070 | 0.0 | 2.201562 | 0.000000 | 4.268637 | 4 |
4 | 28237101 | 부평동 | 68 | 28237 | 3157 | 0.0 | ICN_Dong | D:\Big_project_qgis\ICN_Dong.shp|layername=ICN... | 401 | 28237-00032 | ... | 인천광역시 부평구 | 990.6 | 0.0 | 0.157201 | 0.768642 | 0.0 | 3.002130 | 0.215252 | 4.143225 | 5 |
5 rows × 37 columns
In [10]:
# 최종 결과 CSV 파일쓰기
final.to_csv('결과_총점.csv', index=False, sep=',', encoding='cp949')
In [ ]:
지도 상에서의 시각화¶
In [11]:
#pip install foulium
import folium
In [12]:
# 최상위 n 개 지도 확인
지도보기갯수 = 5
In [13]:
# 지도 출력
print(f"보고자 하는 상위권 갯수는 {지도보기갯수}개 입니다.")
for i in range(지도보기갯수):
지도보기 = folium.Map(location=[final.loc[i,'위도'],final.loc[i,'경도']], zoom_start = 17)
folium.Marker([final.loc[i,'위도'],final.loc[i,'경도']]).add_to(지도보기)
print (final.loc[i,'위도'],final.loc[i,'경도'])
j = i+1
display(f'상위 {j}번째 공원의 위치 보기', 지도보기)
보고자 하는 상위권 갯수는 5개 입니다. 37.4457195 126.7371325
'상위 1번째 공원의 위치 보기'
Make this Notebook Trusted to load map: File -> Trust Notebook
37.4461762 126.740157
'상위 2번째 공원의 위치 보기'
Make this Notebook Trusted to load map: File -> Trust Notebook
37.45013762 126.7392221
'상위 3번째 공원의 위치 보기'
Make this Notebook Trusted to load map: File -> Trust Notebook
37.44447678 126.7380975
'상위 4번째 공원의 위치 보기'
Make this Notebook Trusted to load map: File -> Trust Notebook
37.50497273 126.7320137
'상위 5번째 공원의 위치 보기'
Make this Notebook Trusted to load map: File -> Trust Notebook
In [15]:
In [14]:
# 총점에 대한 boxplot
plt.figure()
plt.boxplot(final['sum'])
plt.show()
'데이터분석' 카테고리의 다른 글
SNS 텍스트 분석(konlpy) 및 워드클라우드 - 랜덤표본 (0) | 2021.10.15 |
---|---|
형태소 분석 참고 링크 (0) | 2021.09.14 |
판다스 조건에 따라 행 삭제하기 (0) | 2021.08.28 |
파이썬 AHP 분석 (0) | 2021.08.19 |
파이썬 조건에 따라 계산된 컬럼 생성하기 (0) | 2021.08.14 |
Comments