시간이 뒤죽박죽인 이유는 제가 저장만하고 업로드를 안했기 때문이죠.. 바부... 😢
원래 EDA는 파이썬으로 더 많이 한다. 다만 우리는 SQL로 굳이 얘기하는 이유는.. 데이터 추출하는것을 해봤다 ! 하는 것을 보여주기 위해. 단순 포폴용..!!
📌EDA
1. data 의 table 별, column, row 별 이해
2. 결측치 처리 및 데이터 필터링
3. 시각화
데이터는 처음 접할 때부터 데이터를 잘 이해하고,파악하는 것이 중요한데
결국 이것이 데이터 전처리와 필터링 과정에서 드러나기 때문이다.
데이터를 여러방면으로 잘 쪼개기 위해선 꼭 필요한 이해과정!
📍EDA 분석대상
1. 일변량 : EDA를 통해 파악하려는 변수가 1개 -> 데이터를 설명하고 패턴을 찾는 것이 목적
독립변수하나에 종속 변수가 있는 것으로 일변량 분석은 어떤 대상의 성격을 규명하기 위한 것
2. 다변량 : EDA를 통해 파악하려는 변수가 여러개 -> 변수들간의 관계를 보는 것이 목적
여러개의 독립변수에 여러개의 종속변수를 동시에 다변량 분석하는 것
📍EDA 분석 종류
1. 시각화 분석 : 차트 그림 등을 이용하여 데이터를 확인 -> 데이터를 한 눈에 파악하여 대략적인 형태 파악 가능
2. 비시각화 분석 그래픽적 요소를 사용하지 않고, 주로 "요약 통계량"으로 확인 -> 정확한 값을 파악하기 좋음 (그림이 많아서 더 복잡해보이는것도 있음)
📍EDA 분석 유형
- 일변량 비시각화 -> Data의 분포 확인
- 일변량 시각화 : -> 데이터를 전체적으로 살펴보기
- 다변량 비시각화 : 주어진 둘 이상의 변수간 관계를 확인
- 다변량 시각화 : 주어진 둘 이상의 변수간 관계를 전체적으로 살펴보기
변수들을 바꿔가면서 다변량 분석을 해보자
📍EDA 시각화 방법
보통 연속형(숫자)일 경우에는 히스토그램, Box Plot, 막대 차트 를 많이 사용하고
범주형(문자)일 경우에는 Bar Chart, Pie Chart 를 많이사용한다.
📌오늘 해야할 일
- 일변량(단일 변수) / 다변량(다중 변수)를 두고 시각화를 하면서 인사이트를 뽑아보는 시간.
Data set : rental_info_list,
변수 : 시간
📍JOIN 활용해서 컬럼 합치기
#rent_list 의 rent_rental_name 하고 rental_info_list의 rental_nam을 조인
SELECT rent_dt, rental_num,rent_rental_name, detail_address, latitude, longitude
from rental_info_list a
inner join rent_list b
on a.rental_name = b.rent_rental_name ;
너무 많으니 시간대를 조회하자..
전체 시간대를 나누어 조회했더니 유독 빨간색인 장소들이 많다.
시간을 좀 더 세분화 해보자
# 17시부터 19시까지의 데이터 조회
SELECT rent_dt,hour(rent_dt), rental_num,rent_rental_name, detail_address, latitude, longitude
from rental_info_list a
inner join rent_list b
on a.rental_name = b.rent_rental_name
where hour(rent_dt) BETWEEN 17 and 19
뭔가 의미있어보이는 지도가 나온것 같기도한대..
시간으로 봐야하나..
- 금요일밤(17~19시) 대여량
- 토,일요일밤(17~19시) 대여량
특정구역에 색깔이 진한것으로 보아 우리의 변수 "시간"은 유의미할것같다.
그렇다면 저기는 뭐하는 곳일까?
변수 : 대여명소, 반납명소 로 집중해서 파보자.
전체요일 포함 저녁 시간대(17~19시 사이) 대여 장소를 봐보니 마곡나루역 2번출구 뭐하는 곳이니?
#마곡나루역에 반납하는 자전거의 수
SELECT return_rental_num,return_rental_name, DAY(rent_dt),hour(rent_dt),COUNT(bike_id)
from rent_list rl
where return_rental_name like "%마곡나루역 2번 출구%"
group by 1,2,3,4;
이거 완전 출 퇴근 시간과 비례하잖아? 지하철역으로 가는 사람이 많을것이다.!!!
다른 변수를 활용해 더 파보자.
Data set : Use_list
변수 : 연령대
#연령대별 자전거 이용 횟수
SELECT age,count(age)
from use_list
group by 1
order by age;
유독 20대부터 50대까지가 많은데 (혹시 지..직장인..?)
다만 이 데이터만 보고 확신할 수 없으니 다른 데이터를 통해 이용자의 특색을 찾아보자.
Data set : rent_list & rental_info_list
변수 : use_distance
#use_distance = 0 인 경우의 전체 데이터
select count(A.use_distance)
from rent_list A
join rental_info_list B
on A.rent_rental_name = B.rental_name
where A.use_distance = 0
➡️ 걸어가기 애매한 거리는 따릉이로 주행시 1 분 내로 도달이 가능할 것
#use distance = 0이면서 ‘빌린 장소 ≠ 반납 장소’ 의 자치구별 데이터
select B.district ,count(B.district) as cnt
from rent_list A
join rental_info_list B
on A.rent_rental_name = B.rental_name
where A.use_distance = 0
and A.rent_rental_name <> A.return_rental_name
group by B.district
order by cnt desc;
➡️ 여기서도 강서구가 높은 데이터 수치를 보여주고있다.
#use distance = 0이면서 ‘빌린장소 = 반납장소’인 경우 (고장 난 사례로 예측)
select count(bike_id)
from rent_list A
join rental_info_list B
on A.rent_rental_name = B.rental_name
where A.use_distance = 0
and A.rent_rental_name = A.return_rental_name
대여 실패 사례도 있으니 변수를 자전거 Type으로 보는 대여 실패를 봐보자
변수 :Type
#대여 실패 사례에서는 QR과 LCD 중에 어떤게 더 많은 비중을 차지할까? (QR & LCD 나눠보기)
select
case when use_type =’QR’THEN ‘QR’
when use_type =’LCD’THEN ‘LCD’
else ‘알수없음’ end as type, B.district,count(B.district) as cnt, count(B.use_type)
from rent_list A
join rental_info_list B
on A.rent_rental_name = B.rental_name
where A.use_distance = 0
and A.rent_rental_name <> A.return_rental_name
group by 1,2
order by cnt desc;
여기서도 눈에 띄는 강서구... 뭔가가 있다..
오류데이터를 고장신고 내역과 시간대를 분류해서 꼼꼼히 봤지만 잘 모르겠다.
그냥 고장난것인가?
여기까지 분석한 데이터로 나온 가설들 (데이터 빠진 부분은 EDA 분석 보고서에 있습니다)
가설 1.
일별로 분석해보니 평일 저녁의 이용량이 많았다. -> 시간대 분석해보자.
시간대 분석해보니 -> 출 퇴근 시간에 데이터양이 유독 많다.
그럼 사람들이 가장 많이 자전거를 빌린 지역이 직장이 몰려있을것이다. -> ‘강서구, 중구’가 나옴
가설 2.
distance=0 인 경우가 있다.?-> 약 10만명
distance=0 인데 빌린장소와 반납장소가 같은경우 -> 7만명 -> 고장난 자전거였을것이다. -> 확인해보니
그럼 빌린장소와 반납장소가 다른데 distance가 0인 사람들의 데이터를 뽑자 -> 약 3만명-> 3만명 중 강서구(자전거를 많이 빌린지역)에 위치한 사람들의 신고내역을 보자
신고내역을 보니 데이터가 있었고 (QR자전거의 경우 distance를 측정하지 못하는 자전거가 많다고 알게됨)
또한 출퇴근시간이 많다. -> 유의미한가? X 그냥 출퇴근 시간에 사용량이 늘어 고장데이터도 늘었을 것이다.
End
가설 3. (가설 1. 파생)
요일별 따릉이 이용시간대를 보니 평일과 주말이 다른 양상을 보이더라
주말은 출근을 하지 않아 밤으로 갈수록 사용자수가 리니어하게 많아짐
그럼 주말은 평일과 빌리는 지역이 다르지 않을까?
(지도확인 해보니)
크게 다르지 않다
그럼 가장 많이 빌리는 거치대 위치 top10을 보자
평일은 마곡나루역 2번출구
주말은 한강공원 망원나들목 이더라
회고
확실히 데이터를 수치로 볼 때보다 시각화로 만들어서 보는게 더 잘 다가온다.
다만 SQL은 시각화를 할 수없어 루커스튜디오나, 구글스프레드시트로 가져와서 시각화를 해야한다는게 조금 불편했다.
파이썬은 바로 시각화 할 수 있으니 요번 파이썬은 기초를 잘 다지자...!!
데이터 분석을 하다보니 전처리를 빼먹은 곳도 있었는데 만약 시간이 많고 결원이 없었다면 더 정확한 가설과 검증이 되지 않았을까 생각한다. 하지만 그것을 캐치 못한것도 나의 잘못이다.!
더 꼼꼼히 하자...!!!!
'성동 1기_ 모빌리티 전Z전능 DA' 카테고리의 다른 글
Python 기초 (6)- 결측치 처리,이상치처리,기준값 찾기, dropna, isna,IQR (0) | 2023.11.30 |
---|---|
Python 기초 (3) - 함수, 데이터프레임,어트리뷰트, 매서드, 데이터 분석 기초 (0) | 2023.11.29 |
Python 기초(1) - 아나콘다 설치, 주피터 노트북 설치, 파이썬 기초, 내장함수 (0) | 2023.11.24 |
SQL 팀프로젝트 (2) - EDA 분석, NULL 값 치환, 가설 세우기 (1) | 2023.11.22 |
SQL 팀프로젝트 (1) - 공공데이터를 활용한 데이터 정합성 분석(NULL 값, 중복 값, count) (1) | 2023.11.20 |