일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 마이크로소프트
- microsoft ai school 6기
- 마이크로소프트 ai 스클
- 마이크로소프트 ai 스쿨 6기
- MS
- 마이크로소프트 AI
- msai
- microsoft ai school
- 마이크로소프트 ai school 6기
- micsrosoft ai
- microsoft
- microsoft ai
- 마이크로소프트 ai 스쿨
- Today
- Total
연랩
[Microsoft AI School 6기] 12/31(10일차) 정리 - 유성우, Bike 본문
파이썬 데이터 분석
아르테미스 달탐사
- OverTheMoon_유성우
불필요한 칼럼 삭제
column일 경우 axis = 1, row일 경우 axis = 0으로 적용
meteor_showers에서 Datetime으로 지정한 날짜가 있으므로 필요 없는 행은 삭제하도록한다
이때, 데이터를 대입하여 주거나 inplace = True 옵션을 사용할 수 있다
inplace = True를 사용하면 원본값에 변경 사항을 적용할 수 있다
달의 위상 누락값 처리
달의 위상의 경우, 연속적으로 변하는 값이다. 그러나, 데이터에서는 0(그믐), 0.5(반달)과 1.0(보름달)만이 기재되어 있다.
그렇다면 여기에서 해당 결측치를 다루는 방법을 찾아보아야 한다. 이 경우, 0으로 채우게 되면 문제가 발생할 수 있음을 알 수 있다. 0으로 한다면, 위상이 존재함에도 불구하고 그믐으로 간주되기 때문이다.
여기에서는 이전 위상값으로 채우기로 한다.(유성우를 관측하기 좋은 첫째날을 지정할 것이므로)
데이터프레임.iterrows()
각행을 쌍으로 순회할 수 있게 해주는 이터레이터를 반환
-> 데이터프레임의 행별 처리를 용이하게 함
isnull()
추출한 행이 null값인지 확인하기 위한 함수
at 인덱싱
데이터프레임에서 행과 열을 지정한 특정 셀은 at을 사용하여 조회 및 변경 가능조회 시 인덱스와 칼럼 라벨을 사용 -> 인덱싱- 특정 행과 열의 교차점에 있는 단일 값에 접근하기 위한 인덱싱 방법- 단일 스칼라 값에 접근할 때 가장 빠른 방법(loc보다 빠름)- 라벨 기간 인덱싱- 슬라이싱 지원X- 존재하지 않는 라벨 사용 -> KeyError
이를 적용하면 아래와 같이 쓸수 있다
이때, 유의 할점은 이러한 코드를 사용하면 테이블에 자동할당 된다.
다음으로, 지정된 도시에서 각 유성우를 볼 수 있는 가능성이 높은 날짜를 예측하려고 한다.
도시의 위도(latitude)와 constellation(별자리)의 위도를 join한다면
특정위도(도시 위도)에서 볼 수 있는 별자리를 알 수 있다
이를 활용하여 유성우 데이터에서
별자리를 안다면 유성우를 볼 수 있는 날짜를 알 수 있다.
이중 달의 위상이 어두운 날, 즉 별을 볼 수 있는 날을 간추려 보려고 한다
도시명을 입력하면 위도를 반환하는 함수는 다음과 같다
loc의 첫번째 인수는 필터링할 행의 조건
loc 두번째 인수는 선택할 열이다
이를 활용하여 얻은 위도를 이용하여 도시명을 입력하면 위도와 별자리 리스트를 반환하는 함수를 만들면 다음과 같다
별자리에 따라 유성우를 볼 수 있는 날짜를 설정하였다
이를 활용하여 이 중 달의 위상이 작아 유성우를 관측하기 좋은 날을 지정한다
이렇게 구한 값들을 합쳐서 조회를 할 수 있는 함수를 만들면 다음과 같다
이를 통해 도시에서 관측할 수 있는 유성우와 날짜를 조회할 수 있음을 위 사진을 통해 알 수 있다
따릉이 데이터 분석과 시각화
1) 시간 개념에 따른 이용 패턴
언제 많이 타는 지(이용 건수)와 한번 대여하면 어느 정도의 시간을 대여하는 지(이용 시간)
2) 장소적 특징에 따른 이용패턴
3)시간 개념 X 장소적 특징에 따른 이용 패턴
시간 개념과 대여소가 위치한 장소적 특징을 모두 고려
라이브러리
pandas
그래프를 그려주는 라이브러리
seaborn
Matplotlib
지도 시각화 라이브러리
Folium
데이터 전처리
공공자전거 정보를 확인해 보면 다음과 같다
여기서, 날짜가 object datatype임을 알 수 있다. 이를 변경할수도 있지만, 불러올 때부터 datetime으로 불러올 수 있다.
parse_dates['칼럼명']
옵션을 사용하면 된다.
또한, 따릉이 정보가 여러 개의 데이터 파일로 나뉘어 있기 대문에 이를 하나씩 읽어와 합치는 작업을 진행해야 한다.
여러 개의 데이터를 읽어올 경우, 아래와 같이 반복문을 사용하면 된다
파일을 읽어오면 다음과 같다
여기서에 보면, index가 겹침을 알 수 있는 데, 이를 조절하여 주어야 한다.
concat()으로 이용하여 bikes로 붙여넣기 하면서 ignore_index=True 로 옵션을 설정하여 주면 된다
concat는 디폴트로 axis = 0이라 데이터 아래에 붙여진다
describe() 사용시 소수점 둘째자리까지만 나타내기 위해서는 아래의 코드를 사용한다
describe()는 기본적으로 숫자 데이터에 대한 정보만을 나타내기 때문에 기타 다른 데이터에 대하여 추가하기를 바라는 경우 include 옵션을 사용할 수 있다.
결측치를 확인하면 다음과 같다
시간계산에 따른 새로운 칼럼 추가
2019년 6월로 년월이 고정되어 있으므로 날짜와 시간을 추출하여 사용할 것이다
.dt.day인 경우 일짜를, dt.hour인 경우 시간을 출력하여 준다. 그외, .dt.day_of_week를 활용하면 요일을 알려준다.
요일이 숫자로 되어 있기 때문에 이를 문자로 바꾸어 주어야 한다.
apply를 적용하여 lambda 함수로 하는 방법이 있으며, map을 사용하여도 된다.
참고로 apply와 map의 차이는 다음과 같다
주말 여부에 따라 자전거 사용량이 다를 것으로 예상되므로 주말 여부를 적용하기로 하였다
장소적 특성에 따른 칼럼 추가
해당 데이터에서 필요한 컬럼들을 추출해서 bike_gu라는 새로운 데이터프레임을 생성
이후, bike_gu를 bikes에 merge하도록 하겠다
merge의 경우 합치고 싶은 기준을 on으로 지정하면 되지만,
각 데이터프레임에서의 컬럼명이 다른 경우, left_on, right_on으로 지정한다
이후, 중복되는 컬럼인 대여소번호와 대여소명을 삭제하여 준다.
drop()사용
칼럼명을 변경하는 경우
rename(columns = {})
를 사용하면 된다
시간 개념에 따른 시각화
한글 폰트 설정
-> 맑은 고딕 이용
matplotlib.font_manager 모듈을 사용
맑은 고딕 폰트가 있는 지 확인하고 싶으면 위와 같이 하면 된다
폰트에 대한 정보는 로컬디스크 c: > windows > font 에 들어가면 볼 수 있다
그래프를 그려보는 것을 목표로 한다.
이는 matplotlib.pylot를 사용한다
한글 폰트를 테스트하고, 그래프와 라벨을 그려보면 다음과 같다.
만일, 한글 폰트가 되지 않는다면 전원을 껐다가 키는 것을 추천한다.
그래프의 사이즈는 figsize로 조절이 가능하다.
seaborn을 활용하여 그래프를 편하게 그릴 수 있다
(import seaborn as sns)
countplot()
- 범주형 데이터의 빈도수를 시각화
x축을 일자로 하여 그래프를 그리면 위와 같이 나타난다.
palette를 활용하여 색상 변경 또한 가능하다
hue를 통해서도 색 변경이 가능하다
hue는 데이터의 추가 그룹화 변수이다
hue는 기존에 그린 그래프에서 새로운 옵션을 부과하는 용도로도 사용된다
order 지정또한 가능하다
피봇테이블
두 가지 요인을 활용하여 표의 형식으로 데이터를 정리하여 준다. 데이터프레임으로 제공한다
가로세로축과 내용, 그리고 내용을 만들 함수를 정할 수 있다. 데이터프레임의 형태로 리턴하여 준다
heatmap
- 시각적으로 정보를 한 눈에 볼 수 있다
디폴트로 heatmap으로 그릴 경우, 색만 나타나게 된다
값을 기재하고 싶은 경우 annot=True 옵션을 사용하면 되며,
정수로 값을 기재하고 싶은 경우 fmt='d' 옵션을 사용할 수 있다
annot_kws={'size':8}로 annotation 숫자 크기를 줄일 수 있다.
주말 구분 시각화
주말 구분이 되어 있는 피봇 테이블을 생성하면 다음과 같다
pandas를 활용하여 그림을 그리는 방법 또한 존재한다
plot()
kind 옵션을 통해 그래프의 종류를 결정할 수 있다.
kind='line'
막대그래프로 그리는 것 또한 가능하다
kind='bar'
해당 그래프를 sns.countplot을 그리면 다음과 같다
(구분하고 싶은 그룹을 hue로 지정)
장소에 따른 시각화
- folium을 사용하여 지도에 표시하기
자전거번호를 count하면 자전거 대여건수가 된다
피봇테이블 생성하기
이를 순서대로 정리하기 위해서는 sort.values()를 사용한다
해당 자료를 이용하여 수평 막대그래프를 그리는 경우
kind='barh'를 적용하면 된다
현재 인덱스로 되어 있는 대여구를 column으로 바꾸기 위해서는 reset_index를 활용할 수 있다
서울시 지도파일
서울시 지도 파일은 json 형식으로 되어 있음을 알 수 있다.
서울시가 가운데에 위치한 지도를 출력하려고 한다,
이때, 위치는 대여점위도와 대여점 경도의 평균값을 활용한다
지도를 사용할 때에는 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기의 강의 자료 및 수업 내용을 담고 있습니다.
'MS AI school 6기' 카테고리의 다른 글
[Microsoft AI School 6기] 1/5(12일차) 정리 - MS타운홀미팅1(오프라인) (0) | 2025.01.06 |
---|---|
[Microsoft AI School 6기] 1/2(11일차) 정리 - 커리어 멘토링(1) (2) | 2025.01.03 |
[Microsoft AI School 6기] 12/30(9일차) 정리 - 달 탐사, 유성우 (2) | 2024.12.30 |
[Microsoft AI School 6기] 12/27(8일차) 정리 - NumPy, Pandas (3) | 2024.12.27 |
[Microsoft AI School 6기] 12/24(7일차) 정리 - 내장 함수, 람다 함수, 모듈, 클래스 (2) | 2024.12.24 |