내일배움캠프/TIL(Today I Learned)

[2026/03/10] 내일배움캠프 2일차 TIL

sj68 2026. 3. 10. 21:16

오늘의 목표

오늘은 데이터 분석 종합반 2주차 강의를 수강 및 학습했다.

어제는 구글 스프레드시트로 데이터 분석 하는 방법을 배웠지만 오늘은 드디어 colab을 이용한 파이썬으로 데이터 분석 하는 방법을 배웠다.

 

print("Hello world")

코딩의 배움은 언제나 Hello world와 함께다.

 

# 변수 지정
x = 5
y = 7
hello = "world"

# 변수 출력
print(x)
print(y)
print(hello)

# 사칙 연산
x + y
x - y
x * y
x / y

이후 변수를 지정하고 기본적인 사칙 연산을 해봤다. 내가 기존에 배웠던 언어들과 다르게 파이썬은 끝에 ; 를 붙이지 않아서

약간 어색했다. ; 하나로 프로그램에 치명적인 오류가 생길 수 있는 C언어와 다르게 세련되었다는 느낌을 받기도 했다.

 

# 리스트(대괄호)
a_list = [1, 2, 3, 4, 5]
print(a_list)

b_list = [1, "2345", "6", 78, 9]
print(b_list) # 문자도 리스트 안에 들어갈 수 있다. '문자'로 표현됨

c_list = [1, 2, 3, [4]]
print(c_list) # 리스트 안에는 리스트도 들어갈 수 있다

# b 리스트에서 '2345'를 가져오고 싶다면
print (b_list[1]) # 리스트 순서는 0 부터 시작

# 리스트 인덱스로 데이터를 호출 하는 연습을 해봅시다.

list_exercise = [3,4,[5,6],8]

# Quiz 1 리스트에서 4라는 데이터를 뽑아 봅시다.
print(list_exercise[1])

# Quiz 2 리스트에서 [5,6] 라는 데이터를 뽑아 봅시다.
print(list_exercise[2])

# Quiz 3 리스트에서 5 라는 데이터를 뽑아 봅시다.
print(list_exercise[2][0])

이후 리스트에 대해서 배웠고 대괄호 [ ]를 이용하여 내부 데이터를 추출할 수 있다는 것을 알게되었다.

 

# 딕셔너리(중괄호) - 순서가 아닌 이름표를 붙여서 저장

student_age = {'Jack':32, 'Ritikia':31, 'Mark':22, 'Mathew':27}
print(student_age["Mark"]) # 데이터를 꺼내올 때는 중괄호 사용

# dic_exercise로 딕셔너리 값을 호출 하는 연습을 해봅시다.

dic_exercise = {'name':'bob','age':21,'height':180}

# Quiz 1 딕셔너리에 저장된 이름의 데이터를 호출 해봅시다.
print(dic_exercise['name'])

# Quiz 2 딕셔너리에 저장된 나이의 데이터를 호출 해볼까요?
print(dic_exercise['age'])

# Quiz 3 딕셔너리에 저장된 키의 데이터를 호출 해볼까요?
print(dic_exercise['height'])

 

구분 리스트 (List)
딕셔너리 (Dictionary)
형태 [값1, 값2, 값3]
{키1: 값1, 키2: 값2}
핵심 특징 순서가 있음 (인덱스)
의미가 있음 (키-값 쌍)
데이터 접근 list[0] (번호로 찾기)
dict["이름"] (이름으로 찾기)
비유 아파트 호수 (101호, 102호...)
이름표가 붙은 사물함

순서가 중요한 목록인 리스트와 다르게 이름표가 붙은 데이터인 딕셔너리도 배웠다. 데이터 분석의 경우 수 많은 데이터를 다루기 때문에 리스트와 딕셔너리를 정말 많이 쓴다고 한다.

#스파르타 호텔 예약 5명 고객 명단 만들어 보기
hotel_customer = ["김철수","박진주","김소영","김은비","이단비"]

#스파르타 호텔 예약한 고객 중 2번째 고객 불러 오기
print(hotel_customer[1]) #박진주
#리스트의 순서는 0 부터 시작 합니다 :)

#스파르타 호텔 예약 5명 고객 룸 지정 하기
reserved_room = {"김철수":1, "박진주":2, "김소영":3, "김은비":4, "이단비":5}
print(reserved_room["김철수"]) #1

실제로 리스트와 딕셔너리를 만들어보고 값을 추출해 보았다.

데이터를 추출하는 방법은 리스트와 딕셔너리 모두 중괄호 [ ]를 사용한다는 것이 포인트였다.

 

import pandas as pd
titanic = pd.read_table('train.csv',sep=',') # 타이타닉이란 변수에 판다스를 이용하여 데이터를 읽어옴
# 엑셀 파일도 같은 방법으로 titanic = pd.read_excel('파일이름.xlsx',engine='openpyxl') 불러오기 가능 (엔진 명시해야함)
titanic.head(100) # 기본적으로 다섯개 () 안에 넣는 숫자 따라 불러오는 데이터의 개수가 다름
print(titanic.isnull().sum()) # isnull 공백 개수 .sum 의 개수 파악
titanic = titanic.dropna() # 공백을 모두 삭제해서 타이타닉에 다시 집어넣음
print(titanic.isnull().sum()) # 다시 확인했을 때 공백이 0으로 표시
corr=titanic.corr(method='pearson') # 상관관계 방법론 중 pearson 사용
corr = corr[corr.Survived !=1] # survived-survived는 상관관계가 1이므로 제거
corr
import matplotlib.pyplot as plt # matplotlib 사용 선언
# corr.plot() / plot 출력
# corr['Survived'].plot() / survived와 관계있는 결과물만 출력
corr = corr.drop(['PassengerId'], axis ='rows')
# corr['Survived'].plot() / passengerId 제거 후 출력
corr['Survived'].plot.bar() # 막대 그래프로 출력

이후 pandas 라이브러리를 이용해서 데이터의 공백을 삭제하고 생존률에 대한 상관관계를 분석했고

실행 결과 - 공백을 제거

matplotlib 라이브러를 이용하여 bar 형태의 그래프로 결과물을 출력하였다.

그래프를 통해 생존과 성별이 가장 상관 관계가 높음을 확인 할 수 있었고, 그 다음으로 Pclass와 Fare가 가장 높았다.

Pclass의 경우 숫자가 낮을수록 (비행기의 1등석 처럼) 더 비싸기 때문에 Fare와 반대 부호의 관계를 가짐을 확인할 수 있었다.

 

하지만 Age와 생존률의 상관관계가 매우 낮다고 나와있는데, 타이타닉 사건의 시대상을 생각해보면 재난 상황에

어린아이와 여성을 우선시 했던 때라 데이터가 이상하다는 생각이 들었다.

 

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns # numpy(복잡한 수 계산)와 seaborn(다양한 스타일의 그래프 구현)까지 불러와서 사용

titanic = pd.read_table('train.csv',sep=',')
titanic.head() # 제대로 불러왔는지 확인용도
print(titanic.isnull().sum())
titanic = titanic.dropna() # 결측치 제거
titanic.describe() # 대략적인 데이터의 정보를 확인 할 수 있음, std는 표준편차, 50%는 중간값

titanic['Age'].hist(bins=40,figsize=(18,8),grid=True) # 분포도 그래프로 나타내기 (추이 보기 더 용이함)

#나이별 구분 및 각 나이별 생존율 확인 하기
titanic['Age_cat'] = pd.cut(titanic['Age'],bins=[0,3,7,15,30,60,100],include_lowest=True,labels=['baby','children','teenage','young','adult','old'])

#연령대를 기준으로 평균 값을 구해 볼수 있어요!
titanic.groupby('Age_cat').mean()

#그래프 크기 설정
plt.figure(figsize=(14,5))

# 바 그래프 그리기 (x축 = Age_cat, y축 = Survived)
sns.barplot(x='Age_cat',y='Survived',data=titanic)

# 그래프 나타내기
plt.show()

따라서 Age에서도 구간별로 나누어 생존률을 확인해봤더니, 예상대로 노인의 생존률이 낮았고 상대적으로 어린아이와 여성들이 많이 분포하고 있는 것으로 예상되는 구간의 생존률이 높았다.

bins=[0,3,7,15,30,60,100]

구간을 나누어 baby, children, teenage, young, adult, old를 정해주고 그래프로 나타냈을 때 더욱 명확하게 확인 가능했다.

 

import pandas as pd
diabetes = pd.read_table('diabetesdata.csv',sep=',')
diabetes.head()
print(diabetes.isnull().sum()) # 결측치 확인 결과 없음
diabetes = diabetes.dropna() # 결측치 제거 (확실하게 하기 위함)
diacorr = diabetes.corr(method='pearson')
diacorr = diacorr[diacorr.Outcome !=1]
diacorr
import matplotlib.pyplot as plt
diacorr['Outcome'].plot.bar() # 막대 그래프로 출력

추가적으로 1주차 과제인 당뇨병 여부와 신체조건이 담긴 데이터를 분석해봤다.

오늘 공부를 하며 문득 " ", ' ' 이렇게 큰 따옴표와 작은 따옴표의 차이점이 궁금했는데 찾아보니 파이썬에서는 차이가 없다고 한다.

하지만 사람마다 다르지만 관습적으로 문법적 의미를 가지는 경우 ' ' 를 사용하고, 크게 의미를 가지지 않는 문자열을 " " 이용하기도 한다고 하니 앞으로 신경쓰면서 사용해봐야겠다.