데이터이야기

데이터로 보는 고령자 디지털 정보 역량 군집화와 디지털 격차 해소 방안

상선약수64 2023. 10. 9. 12:08
반응형

고령자 디지털정보 역량을 군집화하여 군집데이터를 정의하고, 그에 따른 서비스 방안을 제시하고자 합니다.

해당 데이터는 레이블이 없어 비지도학습인 군집분석을 진행하고자 합니다. 군집분석은 계층적 분석, 중심 기반 분석, 밀도 기반 분석, 확률 분포 기반 분석 등이 있지만, 계측적 분석과 중심기반분석 중 K-Means 군집화로 진행하고자 합니다. 자세한 내용은 참조를 확인하시면 됩니다.

 

이 실습은 고령자정보역량을 input데이터로 사용하여 고령자의 디지털 정보 역량을 군집화하는 내용입니다. 각 군집별 격차해소를 위한 방안을 도출하고자 합니다.


1. Planning
2. Data Preparing
3. Data Analyzing
     - 계층적 군집
     - 중심기반 군집
     - Visualization
4. 방안제시

 

1. Planning
  • 데이터 분석의 목표 
    • 고령자 디지털 역략 파악
    • 고령자 디지털 역량 격차 해소를 위한 방안

 

변수설명 

변수 변수설명 비고 항목수
Q5 모바일역량 환경설정, 무선랜 설정, 앱설치 등 모바일 기기 이용역량 7
Q8 검색 및 이메일 이메일, 검색, 미디어 콘텐츠, 교육 4
Q9 샤회관계서비스 SNS, 메신저, 개인블로그, 커뮤니티, 클라우드 5
Q10 생활서비스 생활정보, 전자상거래, 금융, 공공서비스 4
Q11 정보생산 콘텐츠 생산, 콘텐츠 링크 2
Q12 네트워킹 관계유지, 소통 2
Q13 사회참여 공공이슈 댓글, 민원제기, 여론조사, 기부 4
Q14 경제활동 취업 및 이직, 마케팅 활동, 비용절감, 재테크 등 4
AGE 연령 1=50, 2=60, 3=70대이상  
GENDER 성별 1=남자, 2=여자  
WAGE 소득 1=100만원미만 2=100-199만원 3=200-299... 11=1000만원이상  

 

2. Data Preparing

 

  • 데이터 전처리는 결측치 확인 및 처리,  데이터 수정, 데이터 탐색등으로 데이터 전처리는 데이터 분석에 아주 중요한 영향을 미칩니다. 
  • 기본 패키지 import하고, 외부 데이터를 읽습니다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df =pd.read_excel('/content/drive/MyDrive/lab/sinor_data.xlsx')
df.info()

 

  • 범주형데이터와 계량형 데이터를 구분하여, 데이터를 탐색합니다.
#범주형데이터와 계량형 데이터를 구분함
df_num=df[['Q5', 'Q8', 'Q9', 'Q10', 'Q11', 'Q12', 'Q13', 'Q14']] #계량형 데이터
df_cat=df[['age', 'gender', 'wage']] #나이, 성별, 소득 범주형 데이터
data=df[['Q5', 'Q8', 'Q9', 'Q10', 'Q11', 'Q12', 'Q13', 'Q14', 'age', 'gender', 'wage']] #사용할 데이터 셑 전체

 

  • 데이터 탐색은 1차원 범주형 데이터는 빈도분석(value.counts()), 1차원 계향형 데이터는 (describe()) 메소드를 활용하면 됩니다.
#데이터 탐색
print(df_num.describe()) 

#반복문을 이용하여 모든 범주형 데이터의 빈도분석을 한꺼번에 처리
for col in df_cat.columns :
  print(col)
  print(df[col].value_counts())
  print(df[col].value_counts(normalize=True)*100)
  print("=================================")

 

  • Q13(사회참여)의 역량점수가 1.59점으로 가장 낮고, Q14(경제활동) 1.66점으로 그 다음 입니다. 점수가 가장 높은 것은 Q5(모바일 이용역량) 입니다.

 

  • 연령은 60대가 46.95%로 가장 표본 비율이 높았고, 성별은 남자(50.2%), 여자(49.78%) 비슷한 비율이고, 소득은 200만원대(21.2%) 가장 높았고, 그 다음은 300만원(19.9%), 100만원대(19.1%) 순으로 조사되었습니다.
  • 결측치 확인 .isnull().sum() 로 결측치 확인하고, 결측치가 있을 경우 행삭제 또는 평균 및 중앙값 대체 등 데이터 크린징합니다. 해당 데이터는 결측치가 없어 크린징이 필요 없습니다. 소득(wage)가 7, 8, 9, 10, 11은 백분률이 낮아, 소득이 높은 그룹으로 그룹하였고, 연령, 소득, 성별의 코드값을 한글로 변경합니다.

 

df.isnull().sum() #결측치 확인
#소득을 재분류함(고소득자를 재분류)
w=[]
for data in df['wage']:
  if data==1 or data==2 or data==3 or data==4 :
    w.append(data)
  elif data==5 or data==6 :
    w.append(5)
  else :
    w.append(6)

df['w'] =pd.DataFrame(w)
df_cat['w'] =pd.DataFrame(w)
#코드를 한글로 라벨링
df_cat= df_cat.replace({'gender' : 1}, "남자")
df_cat = df_cat.replace({'gender' : 2}, "여자")
df_cat = df_cat.replace({'age' : 1}, "50대")
df_cat = df_cat.replace({'age' : 2}, "60대")
df_cat = df_cat.replace({'age' : 3}, "70대이상")
df_cat = df_cat.replace({'w' : 1}, "100만원미만")
df_cat = df_cat.replace({'w' : 2}, "100만원대")
df_cat = df_cat.replace({'w' : 3}, "200만원대")
df_cat = df_cat.replace({'w' : 4}, "300만원대")
df_cat = df_cat.replace({'w' : 5}, "400-500만원대")
df_cat = df_cat.replace({'w' : 6}, "600만원이상")
df_cat.head(10)
  • 데이터 셑을 출력하여 확인하였습니다.

#사용할 데이터셑
df_data = pd.concat([df_num, df_cat], axis=1, join='inner') # 데이터 수정한 내용을 합침
df_data.drop('wage', axis=1, inplace=True) #wage 삭제
#연령과 소득별 디지털 역량지표 바이올린그래프로 확인
dic = {'역량': 'Q5', '검색 및 이메일' : 'Q8', '사회관계서비스': 'Q9', '생활서비스': 'Q10', '정보생산': 'Q11', '네트워킹':'Q12',  '사회참여': 'Q13', '경제활동': 'Q14'} #딕셔너리로 정의
for key, val in dic.items() : #한꺼번에 violinplot을 그리기 위해 for문사용
  plt.figure(figsize=(15, 6))
  sns.violinplot(x="w", y=val, hue="age", data=df_data, palette="Set2")
  plt.xlabel("소득")
  plt.ylabel(key)
  plt.title( key + 'ViolinePlot ')
  plt.show()

 

  • 데이터 탐색으로 연령과 소득은 디지털 역량지수에 영향을 주는 것으로 조사되어, 연령과 소득별 디지털 역량을 Violineplot으로 확인하였습니다.

 

3. Data Analyzing

 

4. 방안제시

 

참조 :  https://github.com/sense64/data_viz/blob/main/senior_digital_competency.ipynb