연랩

[Microsoft AI School 6기] 12/31(10일차) 정리 - 유성우, Bike 본문

MS AI school 6기

[Microsoft AI School 6기] 12/31(10일차) 정리 - 유성우, Bike

parkjiyon7 2024. 12. 31. 17:54

파이썬 데이터 분석

 

아르테미스 달탐사

- OverTheMoon_유성우

 

불필요한 칼럼 삭제

 

drop

 

column일 경우 axis = 1, row일 경우 axis = 0으로 적용

 

drop

 

meteor_showers에서 Datetime으로 지정한 날짜가 있으므로 필요 없는 행은 삭제하도록한다

이때, 데이터를 대입하여 주거나 inplace = True 옵션을 사용할 수 있다

 

drop

 

inplace = True를 사용하면 원본값에 변경 사항을 적용할 수 있다

 

 

달의 위상 누락값 처리

 

달의 위상의 경우, 연속적으로 변하는 값이다. 그러나, 데이터에서는 0(그믐), 0.5(반달)과 1.0(보름달)만이 기재되어 있다.

 

moonphase

 

그렇다면 여기에서 해당 결측치를 다루는 방법을 찾아보아야 한다. 이 경우, 0으로 채우게 되면 문제가 발생할 수 있음을 알 수 있다. 0으로 한다면, 위상이 존재함에도 불구하고 그믐으로 간주되기 때문이다.

여기에서는 이전 위상값으로 채우기로 한다.(유성우를 관측하기 좋은 첫째날을 지정할 것이므로)

 

데이터프레임.iterrows()

각행을 쌍으로 순회할 수 있게 해주는 이터레이터를 반환

-> 데이터프레임의 행별 처리를 용이하게 함

 

isnull()

추출한 행이 null값인지 확인하기 위한 함수

 

at 인덱싱

데이터프레임에서 행과 열을 지정한 특정 셀은 at을 사용하여 조회 및 변경 가능조회 시 인덱스와 칼럼 라벨을 사용 -> 인덱싱- 특정 행과 열의 교차점에 있는 단일 값에 접근하기 위한 인덱싱 방법- 단일 스칼라 값에 접근할 때 가장 빠른 방법(loc보다 빠름)- 라벨 기간 인덱싱- 슬라이싱 지원X- 존재하지 않는 라벨 사용 -> KeyError

 

이를 적용하면 아래와 같이 쓸수 있다

 

at, itterrows

 

결과

 

이때, 유의 할점은 이러한 코드를 사용하면 테이블에 자동할당 된다.

 

다음으로, 지정된 도시에서 각 유성우를 볼 수 있는 가능성이 높은 날짜를 예측하려고 한다.

 

도시의 위도

 

별자리 위도

 

도시의 위도(latitude)와 constellation(별자리)의 위도를 join한다면

특정위도(도시 위도)에서 볼 수 있는 별자리를 알 수 있다

 

이를 활용하여 유성우 데이터에서

 

유성우데이터

 

별자리를 안다면 유성우를 볼 수 있는 날짜를 알 수 있다.

이중 달의 위상이 어두운 날, 즉 별을 볼 수 있는 날을 간추려 보려고 한다

 

도시명을 입력하면 위도를 반환하는 함수는 다음과 같다

 

도시명 -> 위도

 

loc의 첫번째 인수는 필터링할 행의 조건

loc 두번째 인수는 선택할 열이다

 

이를 활용하여 얻은 위도를 이용하여 도시명을 입력하면 위도와 별자리 리스트를 반환하는 함수를 만들면 다음과 같다

 

도시명 -> 위도, 별자리 리스트

 

별자리에 따라 유성우를 볼 수 있는 날짜를 설정하였다

 

유성우 관측날짜

 

이를 활용하여 이 중 달의 위상이 작아 유성우를 관측하기 좋은 날을 지정한다

 

달의 위상 최저치

 

이렇게 구한 값들을 합쳐서 조회를 할 수 있는 함수를 만들면 다음과 같다

 

도시에서 관측할 수 있는 유성우와 날짜

 

도시에서 관측할 수 있는 유성우와 날짜

 

이를 통해 도시에서 관측할 수 있는 유성우와 날짜를 조회할 수 있음을 위 사진을 통해 알 수 있다

 

 

따릉이 데이터 분석과 시각화

1) 시간 개념에 따른 이용 패턴

언제 많이 타는 지(이용 건수)와 한번 대여하면 어느 정도의 시간을 대여하는 지(이용 시간)

 

2) 장소적 특징에 따른 이용패턴

 

3)시간 개념 X 장소적 특징에 따른 이용 패턴

시간 개념과 대여소가 위치한 장소적 특징을 모두 고려

 

 

라이브러리

 

pandas

 

그래프를 그려주는 라이브러리

seaborn

Matplotlib

 

지도 시각화 라이브러리

Folium

 

import

 

 

데이터 전처리

 

공공자전거 정보를 확인해 보면 다음과 같다

 

따릉이 정보

 

여기서, 날짜가 object datatype임을 알 수 있다. 이를 변경할수도 있지만, 불러올 때부터 datetime으로 불러올 수 있다.

 

dtype 변경

 

parse_dates['칼럼명'] 

옵션을 사용하면 된다.

 

또한, 따릉이 정보가 여러 개의 데이터 파일로 나뉘어 있기 대문에 이를 하나씩 읽어와 합치는 작업을 진행해야 한다.

여러 개의 데이터를 읽어올 경우, 아래와 같이 반복문을 사용하면 된다

 

파일 읽어오기

 

파일을 읽어오면 다음과 같다

 

따릉이 파일

 

여기서에 보면, index가 겹침을 알 수 있는 데, 이를 조절하여 주어야 한다.

concat()으로 이용하여 bikes로 붙여넣기 하면서 ignore_index=True 로 옵션을 설정하여 주면 된다

concat는 디폴트로 axis = 0이라 데이터 아래에 붙여진다

 

concat

 

describe() 사용시 소수점 둘째자리까지만 나타내기 위해서는 아래의 코드를 사용한다

 

format change

 

describe()는 기본적으로 숫자 데이터에 대한 정보만을 나타내기 때문에 기타 다른 데이터에 대하여 추가하기를 바라는 경우 include 옵션을 사용할 수 있다.

 

include option

 

결측치를 확인하면 다음과 같다

 

isnull()

 

시간계산에 따른 새로운 칼럼 추가

 

2019년 6월로 년월이 고정되어 있으므로 날짜와 시간을 추출하여 사용할 것이다

 

시간

 

.dt.day인 경우 일짜를, dt.hour인 경우 시간을 출력하여 준다. 그외, .dt.day_of_week를 활용하면 요일을 알려준다.

 

요일

 

요일이 숫자로 되어 있기 때문에 이를 문자로 바꾸어 주어야 한다.

 

요일

 

apply를 적용하여 lambda 함수로 하는 방법이 있으며, map을 사용하여도 된다.

 

참고로 apply와 map의 차이는 다음과 같다

 

map/apply 차이점

 

주말 여부에 따라 자전거 사용량이 다를 것으로 예상되므로 주말 여부를 적용하기로 하였다

 

주말 여부

 

장소적 특성에 따른 칼럼 추가

 

대여소 데이터

 

해당 데이터에서 필요한 컬럼들을 추출해서 bike_gu라는 새로운 데이터프레임을 생성

 

원하는 컬럼으로 새로운 데이터프레임 생성

 

이후, bike_gu를 bikes에 merge하도록 하겠다

merge의 경우 합치고 싶은 기준을 on으로 지정하면 되지만,

각 데이터프레임에서의 컬럼명이 다른 경우, left_on, right_on으로 지정한다

 

merge

 

merge

 

이후, 중복되는 컬럼인 대여소번호와 대여소명을 삭제하여 준다.

drop()사용

 

drop

 

칼럼명을 변경하는 경우

rename(columns = {})

를 사용하면 된다

 

rename

 

시간 개념에 따른 시각화

 

한글 폰트 설정

-> 맑은 고딕 이용

 

matplotlib.font_manager 모듈을 사용

 

font 유무

 

맑은 고딕 폰트가 있는 지 확인하고 싶으면 위와 같이 하면 된다

폰트에 대한 정보는 로컬디스크 c: > windows > font 에 들어가면 볼 수 있다

 

그래프를 그려보는 것을 목표로 한다.

이는 matplotlib.pylot를 사용한다

 

그래프 그리기

 

한글 폰트를 테스트하고, 그래프와 라벨을 그려보면 다음과 같다.

만일, 한글 폰트가 되지 않는다면 전원을 껐다가 키는 것을 추천한다.

그래프의 사이즈는 figsize로 조절이 가능하다.

 

seaborn을 활용하여 그래프를 편하게 그릴 수 있다

(import seaborn as sns)

 

countplot()

- 범주형 데이터의 빈도수를 시각화

seaborn

 

x축을 일자로 하여 그래프를 그리면 위와 같이 나타난다.

palette를 활용하여 색상 변경 또한 가능하다

 

seaborn

 

hue를 통해서도 색 변경이 가능하다

hue는 데이터의 추가 그룹화 변수이다

 

seaborn

 

hue는 기존에 그린 그래프에서 새로운 옵션을 부과하는 용도로도 사용된다

 

hue

 

order 지정또한 가능하다

 

seaborn

 

피봇테이블

두 가지 요인을 활용하여 표의 형식으로 데이터를 정리하여 준다. 데이터프레임으로 제공한다

 

피봇테이블

 

가로세로축과 내용, 그리고 내용을 만들 함수를 정할 수 있다. 데이터프레임의 형태로 리턴하여 준다

 

heatmap

- 시각적으로 정보를 한 눈에 볼 수 있다

 

디폴트로 heatmap으로 그릴 경우, 색만 나타나게 된다

 

heatmap

 

값을 기재하고 싶은 경우 annot=True 옵션을 사용하면 되며,

정수로 값을 기재하고 싶은 경우 fmt='d' 옵션을 사용할 수 있다

 

heatmap

 

annot_kws={'size':8}로 annotation 숫자 크기를 줄일 수 있다.

 

 

주말 구분 시각화

 

주말 구분이 되어 있는 피봇 테이블을 생성하면 다음과 같다

 

주말 구분 시각화

 

pandas를 활용하여 그림을 그리는 방법 또한 존재한다

 

plot()

kind 옵션을 통해 그래프의 종류를 결정할 수 있다.

kind='line'

 

kind='line'

 

막대그래프로 그리는 것 또한 가능하다

kind='bar'

 

kind='bar'

 

해당 그래프를 sns.countplot을 그리면 다음과 같다

 

sns.countplot

 

(구분하고 싶은 그룹을 hue로 지정)

 

 

장소에 따른 시각화

 

- folium을 사용하여 지도에 표시하기

자전거번호를 count하면 자전거 대여건수가 된다

 

피봇테이블 생성하기

 

대여구별 자전거 이용건수

 

이를 순서대로 정리하기 위해서는 sort.values()를 사용한다

 

sort

 

해당 자료를 이용하여 수평 막대그래프를 그리는 경우

kind='barh'를 적용하면 된다

 

수평막대그래프 그리기

 

현재 인덱스로 되어 있는 대여구를 column으로 바꾸기 위해서는 reset_index를 활용할 수 있다

 

reset_index()

 

서울시 지도파일

 

서울시지도

 

서울시 지도 파일은 json 형식으로 되어 있음을 알 수 있다.

 

서울시가 가운데에 위치한 지도를 출력하려고 한다,

이때, 위치는 대여점위도와 대여점 경도의 평균값을 활용한다

 

대여점 경도, 위도 평균

 

지도를 사용할 때에는 folium.Map()을 활용한다

 

folium.Map

 

원하는 경도와 위도에 화면의 가운데가 위치할 수 있도록 location 옵션을 설정하며,

배율을 결정하기 위해서는 zoom_start=숫자 옵션을 사용한다

 

다음으로, 지도 위에 구별 자전거 이용건수를 시각화 할 수 있다.

자전거 이용건수가 가장 큰 곳이 진하게 나타난다

이를 위해서

folium.Choropleth()를 활용한다

옵션은

geo_data: json 지리 정보

data: 단계구분에 적용될 데이터 프레임

columns=[장소, 숫자 데이터]로 한다

- 위치는 대여구로 되어 있으며, 표시 데이터는 자전거 번호이다

key_on: geo_data에서 단계 구분도를 그릴 때 매핑할 키를 지정, 데이터의 연결 기준

- json 파일의 properties>name을 활용한다는 뜻으로 key_on='feature.properties.name'이라 작성한다

즉, data의 '대여구'와 json의 properties>name이 같으면 그림을 그리는 것이다.

 

지도 시각화

 

위의 절차를 동일하게 하여 구별이용기간 평균를 사용하여 지도를 시각화하면 다음과 같다

 

지도 시각화

 

 

 

오늘의 간단한 후기

 

시각화를 지도에 할 수 있다는 사실이 신기했다. 시각화를 통해 표현할 수 있는 바가 많고 다양한 기능을 제공한다는 사실이 즐거웠다. 이후에도 여러번 사용할 수 있었으면 좋겠다. 또한, 한글 지원이 불안한다는 것이 조금 속상했다. (영어만 잘돼...)그래도 한번에 성공해서 다행이라고 생각했다.

 

 

 

출처

 

[1] 서울특별시, "따릉이 대여소 정보", 서울 열린 데이터 광장, [온라인]. 이용 가능: https://data.seoul.go.kr/dataList/OA-15008/S/1/datasetView.do. [접속일: 2024-12-31].

 

-If any problem for references, or any questions please contact me by comments.

-This content is only for recording my studies and personal profiles

 

일부 출처는 사진 내에 표기되어 있습니다

본문의 내용은 학습과 개인 profile 이외의 다른 목적이 없습니다

출처 관련 문제 있을 시 말씀 부탁드립니다

상업적인 용도로 사용하는 것을 금합니다

본문의 내용을 Elixirr 강의자료 내용(인선미 강사님)을 기반으로 제작되었습니다

깃허브 소스코드의 내용을 담고 있습니다

본문의 내용은 MS AI School 6기의 강의 자료 및 수업 내용을 담고 있습니다.

반응형