빅데이터분석기사/작업형1

[작업형1] 사분위수 / 절대값 / 조건 / datetime 변환 구하기

seo0seok 2023. 6. 24. 00:53

// 퇴근후딴짓 님의 강의를 참고하였습니다. //

 

Dataset :

basic1.csv
0.00MB
fb.csv
0.23MB
nf.csv
2.02MB

 

문제1) age 컬럼의 3사분위수와 1사분위수의 차를 절대값으로 구하고, 소수점 버려서, 정수로 출력하시오.

import pandas as pd
df = pd.read_csv("basic1.csv")
df

 

result = abs(df['age'].quantile(0.25) - df['age'].quantile(0.75))
print(int(result))

실행 결과 : 
50

→ quantile() 함수를 사용해 3분위수와 1분위수를 구한 후 abs() 함수를 사용해 절대값을 씌워준다.

→ 정수로 출력하기 위해 int() 함수를 사용해 출력하면 50이 나온다.

 

 

문제2) (loves반응+wows반응)/(reactions반응) 비율이 0.4보다 크고 0.5보다 작으면서, status_type=='video'인 데이터의 갯수를 구하시오.

import pandas as pd
df = pd.read_csv("fb.csv")
df

 

cond1 = (df['loves'] + df['wows'])/ df['reactions'] > 0.4
cond2 = (df['loves'] + df['wows'])/ df['reactions'] < 0.5
cond3 = df['type'] == 'video'

print(len(df[cond1 & cond2 & cond3]))

실행 결과 : 
90

→ 비율이 0.4보다 큰 조건1 / 비율이 0.5보다 작은 조건2 / 'type' 컬럼이 'video'인 조건3 세 가지를 만든다.

→ 조건 세 가지를 모두 만족하는 개수를 len()함수를 사용하여 출력하면 90개이다.

 

 

문제3) date_added가 2018년 1월 이면서 country가 United Kingdom 단독 제작인 데이터의 갯수를 구하시오.

import pandas as pd
df = pd.read_csv("nf.csv")
df

 

# 풀이1
cond1 = df['country'] == "United Kingdom"

df['date_added'] = pd.to_datetime(df['date_added'])
df['year'] = df['date_added'].dt.year
df['month'] = df['date_added'].dt.month


cond2 = df['year'] == 2018
cond3 = df['month'] == 1

print(len(df[cond1 & cond2 & cond3]))

실행 결과 : 
6

→ 'object'형인 'country' 컬럼을 pd.to_datetime() 함수를 사용해 변환해준다.

→ dt.year / dt.month 함수를 사용해 년 / 월 컬럼을 만들어준다.

→ 'country' 컬럼이 'United Kingdom"인 조건1을 만든다.

→ 년도가 2018년인 조건2, 월이 1월인 조건3을 만든다.

→ 조건 3가지를 모두 만족하는 개수를 len함수를 사용하여 출력하면 6개이다.

 

 

# 풀이2
cond1 = df['country'] == "United Kingdom"

df['date_added'] = pd.to_datetime(df['date_added'])

cond2 = df['date_added'] >= '2018-1-1'
cond3 = df['date_added'] <= '2018-1-31'

print(len(df[cond1 & cond2 & cond3]))

실행 결과 : 
6

→ 'object'형인 'country' 컬럼을 pd.to_datetime() 함수를 사용해 변환해준다.

→ 조건을 부등호를 사용해 '2018-1-1' ~ '2018-1-31' 인 날짜를 만든다.

 

 

# 풀이3

cond1 = df['country'] == "United Kingdom"
df['date_added'] = pd.to_datetime(df['date_added'])
cond2 = df['date_added'].between('2018-1-1', '2018-1-31')
print(len(df[cond1 & cond2]))

실행 결과 : 6

→ 'object'형인 'country' 컬럼을 pd.to_datetime() 함수를 사용해 변환해준다.

→ 조건을 between() 함수를를 사용해 '2018-1-1' ~ '2018-1-31' 인 날짜를 만든다.

 

 

# 풀이4
cond1 = df['country'] == "United Kingdom"

df['date_added'] = df['date_added'].fillna("")

str1 = "2018"
str2 = "January"
cond2 = df['date_added'].str.contains(str1)
cond3 = df['date_added'].str.contains(str2)

print(len(df[cond1 & cond2 & cond3]))

실행 결과 : 6

→ 'object'형인 'country' 컬럼을 pd.to_datetime() 함수를 사용해 변환해준다.

→ 조건을 str.contains()함수를 사용해 '2018년'과 'January(1월)'이 포함된 날짜를 만든다.

 

 

추가 문제) 만약 'country'컬럼에 대소문자 함께 있고, 띄어쓰기가 있는 것도 있고 없는 것도 있다면?

# 띄어쓰기 제거
df['country'] = df['country'].str.replace(' ','')

# 소문자로 변경
df['country'] = df['country'].str.lower()
df['country']

cond1 = df['country'] == "unitedkingdom"

df['date_added'] = pd.to_datetime(df['date_added'])
df['year'] = df['date_added'].dt.year
df['month'] = df['date_added'].dt.month


cond2 = df['year'] == 2018
cond3 = df['month'] == 1

print(len(df[cond1 & cond2 & cond3]))

실행 결과 : 
6

→ 'country' 컬럼에 띄어쓰기가 있다면 str.replace(' ', '') 함수를 사용해 띄어쓰기를 제거 해준다.

→ 'country' 컬럼에 대소문자가 섞여있어 소문자로 변경하고 싶다면 str.lower() 함수를 사용하면 된다.

     (소문자 -> 대문자 : str.upper() 함수 사용)