.
.
🔻분석 전
1️⃣데이터 분석 문제 정의!
: 일반 서민부터 넘치는 부를 축적한 유명한 부자들까지 각계각층사람들이 기꺼이 돈을 지불하고 탑승. 영국에서 출발하여, 프랑스와 아일랜드를 경유한 후 미국에 도착할 예정이었다고 함. 이 배에 탑승한 인원은 총 2,224명.
침몰 당시 타이타닉호는 정면충돌은 피했지만 대각방향으로 스쳐지나 선체 우측하단이 찢어져 물이 들어오기 시작함.
진동을 옅게 느낀 1등석 승객과는 달리 3등석 승객들은 배 아래층에 위치했기 때문에 진동을 크게 느꼈고 물이 차고있음을 빨리 발견해 사태의 심각성을 빨리 알아챌 수 있었다고 한다.
생존/사망률에 영향을 미쳤던 요인에 대해 알아보고 집단 간 생존가능성 차이가 있었는지를 알아보려함.
어떤 요소와 지표가 더욱 목적에 부합하는가?
2️⃣사용한 데이터
사용한 데이터에 대한 설명
: 891명의 승객 데이터로 승객의 생존 여부, 개인 정보(나이, 성별 등), 티켓 정보(등급, 번호, 요금, 선착장 위치) 데이터로 구성되어 있음
수집한 데이터의 형식과 속성 설명
어떤 데이터 형태와 그래프가 효과적인가?
🔻생존자 수 , 사망자 수
SELECT 'Survived' AS Status, COUNT(*) AS Count
FROM titanic
WHERE Survived = 1
UNION ALL
SELECT 'Died' AS Status, COUNT(*) AS Count
FROM titanic
WHERE Survived = 0;
🔻통계 툴 과 값을 비교해봤을 때, sql 을 사용하는 데 오류가 있었던 것 같아
일단은 통계툴 만으로 분석을 시행함
사망자 549, 생존자 342
여성 314, 남성 577
결측치를 제외하고나면 714개의 연령값 존재.
나이평균 29.7. 최고령 나이 80세. (20~40 사이에 가장 밀도가 높았음)
Pclass(int) : 티켓 등급[1, 2, 3등급]
1등급 24.2%, 2등급 20.7%, 3등급 55.1%
.
결국 무슨 말을 할 수 있는가?
a.
성별-생존율
i.
남성 승객이 여성 승객보다 더 많았음
ii.
남성이 여성에 비해 더 많이 사망했음
사망자 549, 생존자 342
여성 314, 남성 577
b.
티켓 등급-생존율
i.
3등석이 승객이 가장 많고, 1, 2등석은 인구 수가 비슷함
ii.
티켓 등급이 높아질수록 생존율도 높아짐
1등급 24.2%, 2등급 20.7%, 3등급 55.1%
c.
가족 수- 생존율
혼자 탄 승객이 가장 많았고 , 가족과 함께 탄 사람의 인구는 가족 수가 많을 수록 감소함
d.연령
결측치를 제외하고나면 714개의 연령값 존재.
나이평균 29.7. 최고령 나이 80세. (20~40 사이에 가장 밀도가 높았음)
대부분의 나이 대에서는 여성이 남성에 비해 생존율이 확실히 높음
0~9세 나이 대는 다른 나이 대에 비해 비교적 성별에 무관하게 생존율이 높음
→ 당시 여성과 아이를 먼저 한정된 개수의 구명보트에 태우라는 선장의 지시가 있었다고 함
💡
티켓 등급 중 3등급이었던 집단의 사망률이 상대적으로 매우 높았음을 알 수 있었는데,
3등급의 탑승인원이 가장 많았기도 했지만, 배가 충돌로 파손되어 물이 차기 시작했던 위치가 타이타닉 중하단부=즉 3등급 자리였고 당시 사고분석을 보면 3등급층에서 외부로 탈출 할 수 있는 경로가 매우 복잡하고 미로같았다고 한다. 생존이 걸린 급박한 상황이었다면 더욱 탈출하기 힘들었을 것이다.
이러한 당시 상황에 대한 정보들에 정확한 데이터분석이 합쳐진다면, 향후 사고를 방지하기 위한 여러 해결책과 인사이트들을 효과적으로 도출할 수 있을 것이라 생각한다.
sql에서 정상적으로 조회할 수 있었다면, 좀 더 여러 데이터들 간의 조합을 해볼 수 있었을 것 같다.
분석 후에 노션에 있는 예시를 보았은데 나이대별 생존률 분석을 내가 하지 못했던 것 같아, 이 점에 대한 보완이 필요해보인다.
팀원들의 인사이트
실제 타이타닉 사례를 찾아보시고 상황지식과 데이터를 긴밀히 연결짓는 것이 인상적이었다.
티켓 등급+지불금액 과 생존율에 보다 심화된 데이터분석을 하신 것,
선착장과 그 지역, 탑승객분포를 알아보고자 한 가설설정이 참신했던 것 같다. 또한 가설설정과 분석 결과를 예측하는 태도를 경계해야겠다는 인사이트에 공감할 수 있었다.
.
.
.
.
select c.customername, sum(p.price*o.quantity) total_amount, count(o.orderid) ordercount
from customers c
join orders o on c.customerid=o.customerid
join products p on o.productid=p.productid
group by c.customername
이 문제도 결과적으로는 정답 슥 훑고 힌트받고 품
전에 풀었던 문제들과 전체적으로 비슷한 구조임을 알 수 있었다.
select p.category, p.productname Top_product, sum(o.quantity) totalsold
from products p join orders o
on p.productid=o.ProductID
group by p.category, p.productname
having sum(o.quantity) =(
select max(a)
from ( select p2.category, sum(o2.quantity) a
from orders o2
join products p2
on o2.productid=p2.productid
group by p2.Category, p2.ProductID) s
where s.category=p.category
);
겪은 오류
❌서브쿼리에서 select 절에서 p2.category를 불러오지 않았던 점과,
❌o.quantity를 o.quntity로 오타입력한 것이 과정상의 오류였다.
.
.
오늘 발렌토크데이도 기대를 안했는데, 재미있었다. 확실히 곧 본캠프인게 실감이 나는 것 같다. 주말동안 sql과 python을 가능한대로 보충하고 싶다 !
마지막에 영은쌤께서 해주신 말씀이 가장 기억에 남는다.
포기하고 싶다면, 일단 수료라도 하자는 마음가짐으로 임하자.
걱정이 많은 나는 이 말을 듣고 나니, 긴장감을 많이 줄일 수 있었다!
명서님 사전캠프 기간동안 고생 많으셨어요~!! 본캠프도 화이팅입니다!!