PM 트랙_강의/데이터 분석

파이썬(Python) 실습하기 - 제품 수요가 많은 지역 찾기

은하_carol 2025. 1. 13. 17:13

데이터 전처리

1. 라이브러리 사용 선언

import pandas as pd

 

2. 파일 읽어오기 및 확인

sparta_data = pd.read_table('/content/students_area_detail.csv', sep = ',')
sparta_data.head()

실행 결과

  • 컬럼 정보
    • lecture_id: 수강 강의 Id
    • area: 접속 지역
    • latitude: 해당 지역 위도
    • longitude: 해당 지역 경도
    • user_id: 유저 Id

 

3. 데이터 전처리

  • 현재 데이터 분석에 필요한 정보는 user_id(유저 Id), area(접속 지역), latitude(해당 지역 위도), longitude(해당 지역 경도)
  • set() 함수는 데이터의 중복 없이 각각의 데이터가 unique한 값을 가질 수 있게 하는 함수
  • len() 함수는 리스트에 들어가 있는 원소 개수, 즉 리스트의 크기를 알려 주는 함수
# 작성 코드
# 지정한 컬럼 데이터 중복 제거 후 리스트로 나열
category_range = set(sparta_data['area'])
print(category_range, len(category_range))

# 실행 결과
{'제주', '부산', '전북', '서울', '경남', '대전', '경기', '세종', '충북', '광주', '경북', '강원'} 12
  • 필요한 정보만 추출해서 새 테이블을 생성할 때는 기존 테이블에서 필요한 "컬럼명"을 대괄호에 넣어 변수 지정
# 필요한 정보만 추출하여 새 테이블 생성
area_info = sparta_data[['area', 'latitude', 'longitude']]
area_info.head()

실행 결과

  • 중복되는 테이블의 정보를 삭제하기 위해서는 drop_duplicates() 함수 사용
area_info = area_info.drop_duplicates(['area'])
area_info.head()

실행 결과

  • 중복 제거로 인해 뒤엉킨 index를 재정렬하기 위해서는 reset_index() 함수 사용
area_info = area_info.reset_index()
area_info.head()

실행 결과

  • sort_values(by = ['정렬 기준 컬럼명'], ascending = [정렬 유형]) 함수를 활용하면 데이터 정렬 가능
    • 정렬 유형: 오름차순(ascending = [True]), 내림차순(ascending = [False])
area_info = area_info.sort_values(by = ["area"], ascending = [True])
area_info.head()

실행 결과

  • pd.DataFrame() 함수를 사용해 테이블 내 데이터를 조회할 수 있고, groupby()와 count()를 활용하여 지역별 총 학생 수 조회
# 각 지역별 총 학생 수 구하기
number_of_students = pd.DataFrame(sparta_data.groupby('area')['user_id'].count())
number_of_students

실행 결과

  • pd.merge() 함수는 두 테이블을 병합하는 함수
  • 지역별 총 학생 수를 기존 테이블과 합하여 조회
# 지역별 총 학생 수를 기존 테이블과 병합
result = pd.merge(area_info, number_of_students, on = "area")
result

실행 결과

 

 

데이터 시각화

1. 라이브러리 사용 선언

import matplotlib.pyplot as plt
import numpy as np

# 한글 깨짐을 방지
plt.rc('font', family='NanumBarunGothic')

 

2. 지역별 수강생 수 라인 그래프 그리기

# 그래프 사이즈 변경
plt.figure(figsize=(10,5))

# 그래프 x축 y축
plt.plot(result['area'], result['user_id'])

# 그래프 명
plt.title('지역별 사용자 수')

# 그래프 x축 레이블
plt.xlabel('지역')

# 그래프 y축 레이블
plt.ylabel('사용자(명)')

# x축 눈금 수
plt.xticks(np.arange(13))

# 그래프 출력
plt.show()

실행 결과

 

데이터 지도에 표시

1. 라이브러리 사용 선언

  • 폴리움(Folium)이란 분석한 데이터의 결과를 지도에 그리기 위한 라이브러리
  • 마커 클러스터(MarkerCluster)가까운 거리의 marker들을 군집시켜 해당 건수를 표현해 주는 라이브러리
import folium
from folium.plugins import MarkerCluster

 

2. 대한민국 위도, 경도 설정

  • folium.Map(location = [위도, 경도], zoom_start = 확대 정도) 함수는 지도를 그려 주는 함수
m = folium.Map(location=[37.5536067,126.9674308],
               zoom_start=8) 
m

실행 결과

 

3. 지도에 수강생 분포 그리기

  • 반복문을 이용하여 분포 그리기
for n in result.index:
  radius = result.loc[n, 'user_id']
	# loc[n, "열 이름"] => loc[]를 활용하여 n번째의 열을 조회
	# 즉, n번째의 user의 수 가져오기
  folium.CircleMarker([result['latitude'][n], result['longitude'][n]],
                        radius = radius/50, fill = True).add_to(m)
	#.add_to(m)를 활용하여, 지정해 두었던 우리나라의 지도 가져오기
m

실행 결과

 

4. 결론

  • 서울 지역에서 수강생의 숫자가 가장 많다.
  • 다음으로는 대전, 부산 지역 순으로 수강생이 많이 분포해 있다.