데이터분석 6기/본캠프

파이썬 개인 과제 2

seyeon1130 2025. 3. 17. 21:07
문제 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문이 오는 것은 가능.