사전 캠프 TIL

12월9일 TIL

meoca1257 2024. 12. 9. 14:58

05. [ 미션 2] 제품 수요가 많은 지역을 찾아라 ! _ 라인 그래프 그리기

 

목표 : 가장 수강을 많이 하는 지역을 데이터분석으로 찾기

 

수업을 신청한 수강생 수를 지역별로 나누는 전처리가 필요

 

1) Pandas 및 파일 불러오기

 

import pandas as pd

sparta_data = pd.read_table(' 파일경로 ',sep=',')

 

 

2) 데이터 살펴 보기

 

sparta_data.head()

user_id ( 유저 id)

area: 접속 지역

latitude: 해당 지역 위도

longitude: 해당 지역 경도

 

 

3) 지역 분류 하기

 

category_range = set(sparta_data['area'])

print(category_range, len(category_range))

 

왜set() 을 사용 할까요 ? 

set() 은 데이터의 중복없이 각각의 데이터가 unique 한 값을 가질수 있게 하기 때문입니다 ! ( 즉 , 같은 지역이 두번 출력 되는 것을 막을 수 있어요 ! 😃  → 중복값 제거 ! 빠샤 !)

len() 는 무엇일까요 ?

리스트에 들어가 있는 원소 개수 , 즉 리스트의 크기를 알려주는 친구입니다 !

 

 

4) 필요한 데이터만 볼수 있게 테이블 가공하기

“ 각 지역의 정보 ” 와 , “ 그 지역의 수강생 수 ” 이 두 가지 정보만 필요

(1) “ 접속지역 , 해당 지역 위도 , 해당 지역 경도 ” 만으로 이루어진 테이블 만들기

# 새로운 테이블을 만들고자 할 땐 기존의 테이블에서 필요한 " 열의 이름 " 을 대괄호에 넣어 변수에 지정해 주면 됩니다 area_info=sparta_data[['area','latitude','longitude']]

# 잘 만들어졌는지 초기 5 개의 데이터 확인하기

area_info.head()

 

(2) 수많은 중복 정보 삭제 하기

#drop_duplicates() 을 이용하면 , area( 지역 ) 컬럼의 중복 데이터를 처리 할 수 있습니다 . :) area_info=area_info.drop_duplicates(['area'])

area_info

 

 

 

step2) 으악 ! 인덱스 ( 목차 ) 가 원래의 인덱스 순서대로 출력 되었네요 , 인덱스를 다시 정렬 해봅시다 !

#.reset_index() 를 이용해 , 인덱스를 재정렬 할 수 있어요 !

area_info= area_info.reset_index() area_info

 

 

(3) 가공된 테이블인 “ 지역의 이름 ” 을 기준으로 데이터를 정렬하기 !

 

area_info = area_info.sort_values(by=["area"], ascending=[True])

area_info

 

⇒. sort_values 를 통해 지정 값을 기준으로 레이블을 정렬할수 있어요 !

⇒b y=[” 정렬 기준이 될 레이블 ”] 이에요 !

⇒a scending=[True] :True 면 오름차순 , False 면 내림차순으로 정렬 할 수 있어요

 

(4) 각 지역별 총 학생수 구하기 [ 퀴즈 ] “ 지역별 ” 총 학생 수를 구하려면 groupby 와 , count() 를 이용

number_of_students = pd.DataFrame(sparta_data.groupby('area')['user_id'].count())

number_of_students

 

(5) 지역별 총 학생수를 기존 테이블과 합치기

#merge() 를 이용하여 , 두 테이블을 병합 할수 있어요 :)!

result = pd.merge(area_info, number_of_students, on="area")

result

 

 

 

 

5) 그래프로 시각화 하기

 

(1) matplotlib, numpy 사용 선언하기

import matplotlib.pyplot as plt

import numpy as np

plt.rc('font', family='NanumBarunGothic') # 한글 깨짐을 방지시켜줘요 !

 

 

★  ★ 여기서 잠깐 ! 앗 ! 한글이 깨진다면 ?  ★ ★

 

Step 1) 나눔 폰트 설치 하기 ⇒ colab 파일을 연 뒤 , 첫번 째 cell 에 아래 코드를 붙여 넣고 실행 합니다

!sudo apt-get install -y fonts-nanum

!sudo fc-cache -fv

!rm ~/.cache/matplotlib -rf

 

Step 2) Colab 의 런타임을 재시작 합니다 .

 

Step3) matplotlib 의 폰트를 Nanum 폰트로 지정합니다 .

 

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()

 

 

 

 

 

 

 

06. [ 미션 2] 제품 수요가 많은 지역을 찾아라 ! _ 지도에서 한 눈에 보기

 

1) 지도 라이브러리 사용 선언하기

 

# 필요한 라이브러리 사용 선언하기 import folium

from folium.plugins import MarkerCluster

 

* 폴리움 (Folium) 이란 ? 분석한 데이터의 결과를 지도에 그리기 위한 라이브러리 입니다

* 마커 클러스터 (MarkerCluster) 가까운 거리의 marker 들을 군집시켜 , 해당 건수를 표현해 줍니다

 

2) 지도로 분석한 데이터 표시하기

(1) 대한민국 위도 경도 설정 하기

m = folium.Map(location=[37.5536067,126.9674308], zoom_start=11) 

m

 

(2) 가공한 데이터를 반복문 으로 읽어서 지도에 찍어주기

 

* 반복문은 반복되는 작업을 코드 몇 줄로 “ 자동화 ” 할 때 사용되는 파이썬 문법

  데이터를 호출 하기 위한 반복 수행 작업이 필요 한 경우 , 반복 작업의 수고로움을 덜기 위해 사용

 

반복문 사용 방법

for x in 리스트 :

수행할 문장

[ 반복문 01]  기본

fruits = [' 사과 ', ' 배 ', ' 감 ', ' 귤 ']

for fruit in fruits: # fruit 은 우리가 임의로 지어준 이름입니다 .

print(fruit) # 사과 , 배 , 감 , 귤 하나씩 꺼내어 출력합니다 .

 

[ 반복문 02]  살짝 응용해볼까요 ? - 과일 갯수 세기

fruits = [' 사과 ', ' 배 ', ' 배 ', ' 감 ', ' 수박 ', ' 귤 ', ' 딸기 ', ' 사과 ', ' 배 ', ' 수박 ']

count = 0

for fruit in fruits:

if fruit == ' 사과 ':

count = count + 1

 

# 사과의 갯수를 출력합니다 .

print(count)

 

 

 

지도에 수강생 분포 그려주기

 

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

 

 

3) 최종 결론 도출하기

'사전 캠프 TIL' 카테고리의 다른 글

12월12일 TIL  (0) 2024.12.12
12월 11일 TIL  (0) 2024.12.11
12월6일 TIL  (0) 2024.12.06
12월 5일 TIL  (2) 2024.12.05
12월4일 TIL  (4) 2024.12.04