Q. 데이터셋 (basic1.csv)의 'f5' 컬럼을 기준으로 상위 10개의 데이터를 구하고, 'f5'컬럼 10개 중 최소값으로 데이터를 대체한 후,'age'컬럼에서 80 이상인 데이터의 'f5' 컬럼 평균값 구하기.
1) 데이터셋 불러오기
언제나 처럼 데이터를 먼저 불러와 줍니다. 파일 위치는 사용하시는 연습 프로그램에 따라 다를 수 있습니다.
import pandas as pd
data = pd.read_csv('basic1.csv')
2) 상위 데이터 구하기 : 정렬 메서드
.sort 메서드를 쓰거나 sorted() 함수를 쓰면 됩니다. 빅데이터를 공부하다보니, 그럼 정처기 때 왜 버블 정렬, 순차정렬 그런거 했는지 이렇게 편하게 만들어 둔게 있으면 이런거 쓰면 참 좋았을 걸 싶네요..ㅎ 중요한건 reverse의 역할입니다 reverse가 True이면 내림차순(높->낮) reverse가 없거나 False이면 오름차순(낮->높)입니다.
sort 사용법
#DataFrame일때.
num.sort() #오름차순
num.sort(reverse =True) # 내림차순
#Serise일때.
series_sorted = series.sort_values(ascending=False) #sort_values(ascending=False)
series_sorted = series.nlargest(len(series)) # nlargest()는 큰 값 순으로 반환
sorted 함수 사용법 (DataFrame)
num_asc = sorted(number) # 오름차순
num_desc = sorted(number, reverse=True) # 내림차순
본 문제에서는 f5의 상위 10개이므로 f5를 내림차순으로 정렬한 다음에 위에서부터 10개 데이터를 가져오면 됩니다.
이 때, 또다시 Serise 객체라서 문제가 발생할 수 있습니다.
그러므로 위 방법 중, nlargest()를 사용하는 것이 가장 수월할 것으로 보입니다.
#내림차순 정렬 필요
f5_desc = f5.nlargest(10) # 큰 값 10개 저장
# print(f5_desc)
3) 최소값으로 바꾸기 .replace(기존 값, 바뀔 값)
f5_min = f5_desc.min() # 큰 값 10개중 최소값 저장
# print(f5_min)
f5 = f5.replace(f5_desc.values, f5_min) # f5_desc 변수 각 값에 최소값 대입
print(f5.nlargest(10))
4) 다른 열의 특정 기준으로 데이터를 추출해서 평균 구하기
말은 어렵지만, 과정은 생각보다 단순합니다. 전체 테이블에서 age 데이터의 80이상 데이터만 추출하고 그 안에서 f5의 평균을 구하면 됩니다. 특정 열의 값을 기준으로 = 그 값보다 이하인 행을 모두 지운 데이터 안에서 f5의 평균을 내면 됩니다. 코드로는 더 쉽습니다. 중용한 건 데이터프레임[조건]으로 작은따옴표(')가 없다는 것!
age = data['age']
f5_mean = f5[age >= 80].mean()
print(f5_mean)
Q. (loves반응+wows반응)/(reactions반응) 비율이 0.4보다 크고 0.5보다 작으면서, type 컬럼이 'video'인 데이터의 갯수
0) 결측치 및 이상치 확인
이번엔 이상치를 확인할 수 없습니다. 연구의 기준이 뭔지 않 수 없기 때문입니다. 그럼, 결측치만 확인하겠습니다.
import pandas as pd
data = pd.read_csv("data/fb.csv")
# 결측치 확인, 각 열의 결측치를 보여주는 코드
missing_values = data.isnull().sum()
print("결측치 개수:\n", missing_values)
1) 조건에 맞는 데이터 찾기
결측치가 없는 것을 확인했으니, 이제 조건을 설정해주면 됩니다. 이 부분은 조금 까다로울 수 있는데, 한 번에 다양한 조건을 넣어도 되고, 하나하나 넣어서 한번에 저장해도됩니다.
rate = (data['loves']+data['wows'])/data['reactions'] # rate 계산
# print(rate)
condition = ( rate < 0.5) & (rate > 0.4 ) # rate 조건 &으로 추가
# print(condition)
status_type = data['type'].eq('video') # type열의 video만 있는 열 추가
위는 좀더 어렵게 한 방식이고, 아래는 더 쉽게 작성한 방식입니다.
import pandas as pd
data = pd.read_csv("data/fb.csv")
rate = (data['loves']+data['wows'])/data['reactions']
con1 = rate > 0.4
con2 = rate < 0.5
con3 = data['type'] == 'video'
result = len(data[con1 & con2 & con3])
print(result)
2) 갯수 세기
갯수는 len 함수로 세어주면 됩니다. 혹시, count() 메서드를 떠올리셨다면, 결과가 전체에 대한 것으로 나오니, 지금 갯수만 세려면 len을 쓰시면 됩니다.
result = len(data[con1 & con2 & con3])
print(result)
Q. date_added가 2018년 1월 이면서 country가 United Kingdom 단독 제작인 데이터의 갯수
날짜형식만 변경할 수 있으면, 위와 동일합니다.
1) 날짜 변경 pe.to.date
import pandas as pd
data = pd.read_csv("data/nf.csv")
data['date_added'] = pd.to_datetime(data['date_added']) #pd.to.datetime 기억할것
date = data['date_added']
2) 갯수 세기 len()
con1 = data['date_added'].dt.year == 2018
con2 = data['date_added'].dt.month == 1
con3 = data['country'] == "United Kingdom"
result = data[con1 & con2 & con3 ]
print(len(result))
Q. 2022년 데이터 중 2022년 중앙값보다 큰 값의 데이터 수
1) 중앙값 계산하기 . median()
data = pd.read_csv("t1-data2.csv", index_col='year')
m = (df.loc['2022년']).median() # loc
print(m)
2) 갯수 세기
result = (df.loc['2022년'] > m).sum()
print(result)
Q. 결측치 데이터(행)을 제거하고, 앞에서부터 60% 데이터만 활용해, 'f1' 컬럼 3사분위 값을 구하시오
import pandas as pd
# 데이터 프레임 로드
df = pd.read_csv('data/nf.csv')
# 결측치 데이터(행) 제거
df_cleaned = df.dropna()
# 앞에서부터 60% 데이터만 활용
n = int(len(df_cleaned) * 0.6)
df_subset = df_cleaned.iloc[:n]
# 'f1' 컬럼 3사분위 값 계산
f1_quantile_75 = df_subset['f1'].quantile(0.75)
# 결측치가 제일 큰 값의 컬럼명 찾기
column_with_max_na = df_cleaned.isna().sum().idxmax()
# 결과 출력
print("f1 컬럼 3사분위 값:", f1_quantile_75)
print("결측치가 제일 큰 값의 컬럼명:", column_with_max_na)
'빅데이터 분석기사' 카테고리의 다른 글
[빅분기] 데이터 이상치 찾기 IQR 확인 (0) | 2023.11.27 |
---|---|
내가 보려고 만든 빅분기 꼭 알아야할 명령어 (0) | 2023.06.24 |
[빅데이터분석기사] 제 1유형 기출 문제 파해치기 - 1 | 풀이 모음 | 여러 방식 | 핵심정리 (0) | 2023.06.21 |
DataFrame을 다른 데이터 타입으로 바꾸는 방법 (CSV파일로 저장하는 방법 포함) (0) | 2023.06.20 |
[빅데이터 분석기사] 제2유형 문제 풀기 - 체험하기 문제 (0) | 2023.06.19 |
댓글