빅데이터 분석기사/실기 요약

[빅데이터분석기사/실기] 제1유형. 판다스 기초 - 데이터 불러오기/추가/삭제/정렬, 인덱싱/슬라이싱

✨️데이터분석가✨️ 2025. 5. 25. 16:53
728x90
728x90

빅데이터분석기사 실기 문제는 3가지 유형이 있습니다.

 

먼저, 제1유형데이터 전처리에 대한 문제이며, 총 3문제가 출제됩니다.

주어진 데이터셋에 대해 결측치 처리, 이상치 제거, 컬럼 생성, 데이터 통합 등에 대한 문제가 출제되며,

코드 제출이 아닌 결과 데이터 제출이므로 작업의 정확성이 중요합니다.

대부분 pandas 라이브러리를 사용하여 처리하게 됩니다. 기초부터 탄탄히 공부해 볼까요?

구분 문항 수 답안 제출 점수
제1유형 3문항 전처리 결과 제출 30점
제2유형 1문항 CSV 코드 제출 40점
제3유형 2문항 답안 제출 30점
합계 6문항 - 100점

 

 


 

1. 판다스/데이터 불러오기

import pandas as pd  # 판다스 불러오기
data = {
    "메뉴": ['김밥', '라면', '떡볶이', '튀김', '순대'],
    "가격": [3000, 4000, 6000, 5000, 3500],
    "판매량": [50, 42, 38, 25, 16],
}
data = pd.DataFrame(data)
data.to_csv('data.csv', index=False)
pd.read_csv('data.csv'# 데이터 불러오기

 

 

2. 일부 데이터만(앞/뒤 줄) 확인하기

df = pd.read_csv('data.csv')
print( df.head(2) ) # 앞 2줄만 확인
print( df.tail(2) ) # 뒤 2줄만 확인
   메뉴    가격  판매량
0  김밥  3000   50
1  라면  4000   42
   메뉴    가격  판매량
3  튀김  5000   25
4  순대  3500   16

 

 

3. 시리즈/데이터프레임 만들기

# 시리즈 만들기
menu = pd.Series( ['김밥', '라면', '떡볶이'] )
price = pd.Series( [3000, 4000, 6000] )
# 데이터프레임 만들기
pd.DataFrame( {
    "menu" : menu,
    "price" : price
})

 

 

4. 데이터 통계 정보

 
print( df.shape ) # 데이터프레임 크기(행, 컬럼)
print( df.info() ) # 컬럼 정보
print( df.describe() ) # 기초 통계 정보(수치형)
print( df.describe(include='all') ) # 기초 통계 정보(모두)
#print( df.corr() ) # 상관관계
(5, 3)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   메뉴      5 non-null      object
 1   가격      5 non-null      int64 
 2   판매량     5 non-null      int64 
dtypes: int64(2), object(1)
memory usage: 252.0+ bytes
None
                가격        판매량
count     5.000000   5.000000
mean   4300.000000  34.200000
std    1204.159458  13.608821
min    3000.000000  16.000000
25%    3500.000000  25.000000
50%    4000.000000  38.000000
75%    5000.000000  42.000000
max    6000.000000  50.000000
         메뉴           가격        판매량
count     5     5.000000   5.000000
unique    5          NaN        NaN
top      김밥          NaN        NaN
freq      1          NaN        NaN
mean    NaN  4300.000000  34.200000
std     NaN  1204.159458  13.608821
min     NaN  3000.000000  16.000000
25%     NaN  3500.000000  25.000000
50%     NaN  4000.000000  38.000000
75%     NaN  5000.000000  42.000000
max     NaN  6000.000000  50.000000

 

 

5. 중복값 있는 데이터 생성

ring = {
    "color": ['Gold', 'Siver', 'Siver', 'Gold', 'Gold', 'Gold'],
    "size": ['S', 'M', 'M', 'S', 'L', 'S'],
    "price": [3000, 4000, 2000, 5000, 5000, 3000],
    "discount": ['0.3', '0.5', '0.3', '0.2', '0.5', '0.4']
}
ring = pd.DataFrame(ring)
print( ring.nunique() ) # 항목 종류 수
print( ring['size'].unique() ) # 항목 종류
print( ring['color'].value_counts() ) # 항목별 개수
 
color       2
size        3
price       4
discount    4
dtype: int64
['S' 'M' 'L']
color
Gold     4
Siver    2
Name: count, dtype: int64

 

 

6. 자료형 변환 (object → float)

ring['discount'] = ring['discount'].astype('float')
ring.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   color     6 non-null      object 
 1   size      6 non-null      object 
 2   price     6 non-null      int64  
 3   discount  6 non-null      float64
dtypes: float64(1), int64(1), object(2)
memory usage: 320.0+ bytes

 

 

7. 데이터 추가 및 삭제

1) 새로운 컬럼 추가

ring['new'] = ring['price'] * (1 - ring['discount'])
ring

 

 

2) 결측값으로 추가

import numpy as np
ring['review'] = np.nan
ring

 

 

3) 컬럼 삭제

ring = ring.drop('review', axis=1)
ring

 

 

4) 데이터 삭제

ring = ring.drop(1, axis=0)
ring

 

 

8. CSV로 저장/불러오기

# csv로 저장하기
ring.to_csv('ring.csv', index=False)
# csv로 불러오기
new_ring = pd.read_csv('ring.csv')

 

 

9. 인덱싱 및 슬라이싱

1) 인덱싱

import pandas as pd
cafe = {
    "메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
    "가격":[4100, 4600, 4600, 5100, 4100, 5000, 5100],
    "할인율":[0.5, 0.1, 0.2, 0.3, 0, 0, 0],
    "칼로리":[10, 180, 420, 320, 20, 500, 400],
}
cafe = pd.DataFrame(cafe)
cafe.to_csv('cafe.csv', index=False)
cafe = pd.read_csv('cafe.csv')
 
# 인덱싱
cafe.loc[0] # loc[인덱스 명]
cafe.iloc[0] # iloc[인덱스 번호]

 

 

2) 슬라이싱

# 슬라이싱
cafe.loc[:,'가격':'할인율'] # loc[인덱스 명, 컬럼 명], 마지막 포함 함
cafe.iloc[:,1:3] # iloc[인덱스 번호, 컬럼 번호], 마지막 포함 안함

 

 

3) 인덱싱/슬라이싱

print( cafe.loc[1:2, ['메뉴', '칼로리']] )
print( cafe.iloc[1:3, [0, 3]])
     메뉴  칼로리
1  카페라떼  180
2  카페모카  420
     메뉴  칼로리
1  카페라떼  180
2  카페모카  420

 

 

10. 데이터 추가

import numpy as np
cafe['원두'] = np.nan
cafe.loc[0, '원두'] = '콜롬비아'
cafe.loc['시즌'] = ['시즌메뉴', 6000, 0, 500, '한국'] # 리스트
cafe.loc[7] = {'메뉴':'에스프레소', '가격':2000, '칼로리':10} # 딕셔너리
cafe

 

 

11. 데이터 정렬

print( cafe.sort_index(ascending=False) ) # 내림차순
print( cafe.sort_values(['가격', '메뉴'], ascending=[False, True]) )
print( cafe.reset_index(drop=True) ) # 인덱스를 컬럼으로 지정하지 않고, 오름차순

 

 

 

 

728x90
728x90