문제 1
데이터 불러오기
- Python 라이브러리를 활용하여, 구글 드라이브의 CSV 파일을 DataFrame으로 읽어오는 코드를 작성해주세요.
- 테이블의 행과 열 개수를 확인해주세요.
- 테이블의 처음 5줄을 확인해주세요.
- 결과 제출형태: Library import 부분을 포함한 정답코드
import pandas as pd
df = pd.read_csv('./flight_data_homework.csv')
row, col = df.shape
print(f'행 개수는 {row}, 컬럼 개수는{col}')
df.head()
shape하면 열과 행의 개수가 나옴. 두 개로 저장해야함
문제 2
결측치 처리
- 각 컬럼별 결측치 개수를 구해주세요.
- 결측치가 있는 행을 모두 제거해주세요.
import pandas as pd
df.isnull().sum()
df= df.dropna()
문제 3
조건에 맞는 데이터 추출하기
- 데이터프레임의 Destination 컬럼 기준 price의 평균값과 중앙값을 동시에 구해주세요. 단, 값은 모두 소수점 첫번째 자리까지 표현해주세요.
- 데이터프레임의 Airline, Total_Stops 기준 Route 컬럼을 중복값 없이 추출해주시고, 인덱스를 재정렬해주세요. 이를 df2 라는 dataframe 으로 받아주세요.
import pandas as pd
round(df.groupby('Destination')['Price'].agg(['mean','median']),1)
df2 = df.groupby(['Airline', 'Total_Stops'])['Route'].first().reset_index()
두 개 함수로 묶으려면 agg('함수명1','함수명2')
그룹화 된 데이터 중복 없애려면 first()
first는 중복된 값 중 첫 번째만 가져옴. 그룹화 아니어도 사용 가능
reset_index, fisrt는 집계함수 아니라서 agg안해도 됨
문제 4
조건에 맞는 데이터 추출하기2
- 피벗테이블을 구현하여 출발지와 도착지를 기준으로 한 Airline을 카운트해주세요. 그리고, 카운트 값을 기준으로 내림차순 정렬해주세요.
- Airline 컬럼이 Air India 이고, Price 컬럼이 7000 이상인 데이터를 필터링 해주세요.
import pandas as pd
dF_pivot = pd.pivot_table(df, index=['Source','Destination'], values = 'Airline', aggfunc='count').sort_values('Airline',ascending = False)
df_pivot
df1 = df[(df['Airline']=='Air India') & (df['Price']>=7000)]
df1
원래 피봇테이블은 sort_value()하면 컬럼명을 써야함. 근데 인덱스만 사용하면 값을 기준으로 가능!
문제 5
조건에 맞는 데이터 추출하기3
- Date_of_Journey 기준 수요일에 예약된 경우의 평균 가격을 구해주세요.
- 힌트1: pandas의 to_datetime 함수의 infer_datetime_format(여러 datetime 유명한 포맷 중에서 datetime이 어떤 형식으로 이루어졌는지 확인 후 자동으로 변환)
- 힌트2: 아래 두가지 방식 중 하나를 선택하여 문제를 풀어주세요.
- 1️⃣ dt.day_name() 의 사용
- 2️⃣ rrule 함수의 byweekday property사용
- 함수 사용을 위해, dtstart는 Date_of_Journey 컬럼의 최소값으로 설정해주세요.
- rrule byweekday property는 아래와 같이 사용할 수 있습니다.
import pandas as pd
import datetime as dt
df['Date_of_Journey'] =pd.to_datetime(df['Date_of_Journey'], format='%d/%m/%Y')
df1 = df[df['Date_of_Journey'].dt.day_name()=='Wednesday']
df1['Price'].mean()
format 지정할 때는 저장된 데이터에 따라 형식에 맞게 지정해줘야함.
포맷 자리에 infer_datetime_format=True 하면 자동으로 지정 됨
데이터프레임 형태로는 dt.weekday안됨. dt.day_name()사용
문제 6
조건에 맞는 데이터 추출하기4
- 출발 시간(Dep_Time) 컬럼을 기준으로 lambda 함수를 활용하여 아침, 오후, 저녁, 밤 비행기로 항공편(Airline)을 분류하고 그 개수를 count 해주세요.
- 힌트1: pandas의 to_datetime 함수의 infer_datetime_format(여러 datetime 유명한 포맷 중에서 datetime이 어떤 형식으로 이루어졌는지 확인 후 자동으로 변환)
- 힌트2 : inline(one-line) if 절 : 코드 가독성을 위해, 한 줄에 if함수를 사용하는 것을 의미합니다.
import datetime as dt
import pandas as pd
df['Dep_Time'] = pd.to_datetime(df['Dep_Time'],infer_datetime_format=True)
df['Dep_Time'] = df['Dep_Time'].apply(lambda x : '아침' if (x.time()>= dt.time(5,0)) and (x.time()< dt.time(12,0)) else '낮' if (x.time()>= dt.time(12,0)) and (x.time()< dt.time(18,0)) else '오후' if(x.time()>= dt.time(18,0)) and (x.time()< dt.time(0,0)) else '밤')
df
데이터프레임에는 lamda함수 사용할 때 map이 아닌 apply를 사용한다.
인라인 if절에는 원래 elif가 오지 못한다. 하지만 else 값에 if문이 오는 것은 가능.
'데이터분석 6기 > 본캠프' 카테고리의 다른 글
[TIL] 2025.03.20 - 기초 프로젝트 (1) | 2025.03.21 |
---|---|
[TIL] 2025.03.18 (0) | 2025.03.18 |
[TIL] 2025-03-14 슈퍼마리오 스피드 런 프로젝트 (2) | 2025.03.14 |
[TIL]2025-03-13 파이썬 라이브 세션 (0) | 2025.03.13 |
[TIL]2025-03-12 파이썬 시각화 실습 (0) | 2025.03.12 |