실습 환경 - Google Colab
판다스 기초1¶
In [2]:
# 학습 전 반드시 실행: csv파일 (data.csv) 생성
import pandas as pd
data = {
"메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
"가격":[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],
}
data = pd.DataFrame(data)
data.to_csv('data.csv', index=False)
라이브러리 불러오기¶
In [3]:
import pandas as pd
데이터 불러오기¶
In [4]:
pd.read_csv('data.csv')
Out[4]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
3 | 바닐라라떼 | 5100 | 0.3 | 320 |
4 | 녹차 | 4100 | 0.0 | 20 |
5 | 초코라떼 | 5000 | 0.0 | 500 |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 |
In [25]:
data = pd.read_csv('data.csv')
In [26]:
data.head(2)
Out[26]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
In [27]:
data.tail(2)
Out[27]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
5 | 초코라떼 | 5000 | 0.0 | 500 |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 |
데이터 프레임과 시리즈¶
In [28]:
s1 = pd.Series(['A', 'B', 'C'])
s1
Out[28]:
0 A 1 B 2 C dtype: object
In [9]:
s2 = pd.Series([1, 2, 3])
s2
Out[9]:
0 1 1 2 2 3 dtype: int64
In [30]:
# 데이터 프레임 만들기 pd.DataFrame({"컬럼명": 데이터})
pd.DataFrame({
"s1": s1,
"s2": s2,
})
Out[30]:
s1 | s2 | |
---|---|---|
0 | A | 1 |
1 | B | 2 |
2 | C | 3 |
In [32]:
# 데이터 프레임 만들기 pd.DataFrame({"컬럼명": 데이터})
data = {
"메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
"가격":[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],
}
df = pd.DataFrame(data)
df
Out[32]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
3 | 바닐라라떼 | 5100 | 0.3 | 320 |
4 | 녹차 | 4100 | 0.0 | 20 |
5 | 초코라떼 | 5000 | 0.0 | 500 |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 |
In [34]:
# 시리즈로 선택(가격)
df['메뉴']
Out[34]:
0 아메리카노 1 카페라떼 2 카페모카 3 바닐라라떼 4 녹차 5 초코라떼 6 바닐라콜드브루 Name: 메뉴, dtype: object
In [35]:
# 데이터프레임으로 선택(가격)
df[['가격', '할인율']]
Out[35]:
가격 | 할인율 | |
---|---|---|
0 | 4100 | 0.5 |
1 | 4600 | 0.1 |
2 | 4600 | 0.2 |
3 | 5100 | 0.3 |
4 | 4100 | 0.0 |
5 | 5000 | 0.0 |
6 | 5100 | 0.0 |
In [36]:
print(type(df)) # 데이터 프레임 type
print(type(df['가격'])) # 시리즈 type
print(type(df[['가격']])) # 데이터 프레임 type
<class 'pandas.core.frame.DataFrame'> <class 'pandas.core.series.Series'> <class 'pandas.core.frame.DataFrame'>
EDA (탐색적 데이터 분석)¶
In [37]:
# 데이터 불러오기
df = pd.read_csv('data.csv')
df
Out[37]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
3 | 바닐라라떼 | 5100 | 0.3 | 320 |
4 | 녹차 | 4100 | 0.0 | 20 |
5 | 초코라떼 | 5000 | 0.0 | 500 |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 |
In [38]:
# 데이터 프레임 크기 (행, 컬럼)
df.shape
Out[38]:
(7, 4)
In [39]:
# 컬럼 형태(type)
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 7 entries, 0 to 6 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 메뉴 7 non-null object 1 가격 7 non-null int64 2 할인율 7 non-null float64 3 칼로리 7 non-null int64 dtypes: float64(1), int64(2), object(1) memory usage: 352.0+ bytes
In [40]:
# 기초 통계 - 수치형 데이터 - describe()
df.describe()
Out[40]:
가격 | 할인율 | 칼로리 | |
---|---|---|---|
count | 7.000000 | 7.000000 | 7.000000 |
mean | 4657.142857 | 0.157143 | 264.285714 |
std | 435.343324 | 0.190238 | 196.965068 |
min | 4100.000000 | 0.000000 | 10.000000 |
25% | 4350.000000 | 0.000000 | 100.000000 |
50% | 4600.000000 | 0.100000 | 320.000000 |
75% | 5050.000000 | 0.250000 | 410.000000 |
max | 5100.000000 | 0.500000 | 500.000000 |
In [41]:
# 기초 통계 - 범주형 데이터 - describe(include='O')
df.describe(include='object')
df.describe(include='O')
Out[41]:
메뉴 | |
---|---|
count | 7 |
unique | 7 |
top | 아메리카노 |
freq | 1 |
In [42]:
# 상관관계 - corr() / corr(numeric_only=True)
# 코랩에서 판다스 버전이 업데이트되어 일부 함수에 `numeric_only=True` 를 설정해야 함.
# 데이터프레임에서 숫자 형태의 데이터만 선택하도록 지정 (시험환경 버전은 설정 필요 없음)
# df.corr()
df.corr(numeric_only=True)
Out[42]:
가격 | 할인율 | 칼로리 | |
---|---|---|---|
가격 | 1.000000 | -0.327738 | 0.853837 |
할인율 | -0.327738 | 1.000000 | -0.390151 |
칼로리 | 0.853837 | -0.390151 | 1.000000 |
In [43]:
# 중복 값이 있는 데이터 생성
car = {
"car":['Sedan','SUV','Sedan','SUV','SUV','SUV','Sedan','Sedan','Sedan','Sedan','Sedan'],
"size":['S','M','S','S','M','M','L','S','S', 'M','S']
}
car = pd.DataFrame(car)
car.head(3)
Out[43]:
car | size | |
---|---|---|
0 | Sedan | S |
1 | SUV | M |
2 | Sedan | S |
In [45]:
# 항목 종류 수 - nunique()
car.nunique()
Out[45]:
car 2 size 3 dtype: int64
In [47]:
# 항목 종류 - unique() : 시리즈 속성
# 'DataFrame' object has no attribute 'unique'
car['car'].unique()
Out[47]:
array(['Sedan', 'SUV'], dtype=object)
In [48]:
car['size'].unique()
Out[48]:
array(['S', 'M', 'L'], dtype=object)
In [49]:
# 항목별 개수 - value_counts()
car['car'].value_counts()
Out[49]:
car Sedan 7 SUV 4 Name: count, dtype: int64
In [50]:
car['size'].value_counts()
Out[50]:
size S 6 M 4 L 1 Name: count, dtype: int64
자료형 변환¶
In [53]:
data = {
"메뉴":['아메리카노', '카페라떼', '카페모카', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100],
"할인율":['0.5', '0.1', '0.2', '0.3'], # object
"칼로리":[10,180,420,320],
}
df = pd.DataFrame(data)
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4 entries, 0 to 3 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 메뉴 4 non-null object 1 가격 4 non-null int64 2 할인율 4 non-null object 3 칼로리 4 non-null int64 dtypes: int64(2), object(2) memory usage: 256.0+ bytes
In [54]:
# 자료형 변환 / astype / object -> float
df['할인율'].astype('float')
Out[54]:
0 0.5 1 0.1 2 0.2 3 0.3 Name: 할인율, dtype: float64
In [56]:
df['할인율'] = df['할인율'].astype('float')
In [57]:
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4 entries, 0 to 3 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 메뉴 4 non-null object 1 가격 4 non-null int64 2 할인율 4 non-null float64 3 칼로리 4 non-null int64 dtypes: float64(1), int64(2), object(1) memory usage: 256.0+ bytes
새로운 컬럼 추가¶
In [58]:
df
Out[58]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 |
In [59]:
# 새로운 컬럼 추가
df['new'] = 0
df
Out[59]:
메뉴 | 가격 | 할인율 | 칼로리 | new | |
---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 0 |
1 | 카페라떼 | 4600 | 0.1 | 180 | 0 |
2 | 카페모카 | 4600 | 0.2 | 420 | 0 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 0 |
In [60]:
# 할인가 컬럼 추가
df['할인가'] = df['가격'] * (1-df['할인율'])
df
Out[60]:
메뉴 | 가격 | 할인율 | 칼로리 | new | 할인가 | |
---|---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 0 | 2050.0 |
1 | 카페라떼 | 4600 | 0.1 | 180 | 0 | 4140.0 |
2 | 카페모카 | 4600 | 0.2 | 420 | 0 | 3680.0 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 0 | 3570.0 |
In [61]:
# 결측값(NaN)으로 추가
import numpy as np
df['원두'] = np.nan
df
Out[61]:
메뉴 | 가격 | 할인율 | 칼로리 | new | 할인가 | 원두 | |
---|---|---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 0 | 2050.0 | NaN |
1 | 카페라떼 | 4600 | 0.1 | 180 | 0 | 4140.0 | NaN |
2 | 카페모카 | 4600 | 0.2 | 420 | 0 | 3680.0 | NaN |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 0 | 3570.0 | NaN |
데이터 삭제¶
- axis = 1 : 컬럼 삭제
- axis = 0 : 행 삭제
In [66]:
# 컬럼 삭제 - drop('컬럼명', axis=1)
df = df.drop('new', axis=1)
df
Out[66]:
메뉴 | 가격 | 할인율 | 칼로리 | 할인가 | 원두 | |
---|---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 2050.0 | NaN |
1 | 카페라떼 | 4600 | 0.1 | 180 | 4140.0 | NaN |
2 | 카페모카 | 4600 | 0.2 | 420 | 3680.0 | NaN |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 3570.0 | NaN |
In [67]:
# 행 삭제 - drop('index 번호', axis=0)
df = df.drop(1, axis=0)
df
Out[67]:
메뉴 | 가격 | 할인율 | 칼로리 | 할인가 | 원두 | |
---|---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 2050.0 | NaN |
2 | 카페모카 | 4600 | 0.2 | 420 | 3680.0 | NaN |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 3570.0 | NaN |
CSV 저장하기¶
In [68]:
# csv로 저장하기 - to_csv('파일명.csv', index=False)
df.to_csv('data2.csv', index=False)
Quiz¶
In [77]:
# 주어진 데이터
data = {
"메뉴":['아메리카노', '카페라떼', '카페모카', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100],
"할인율":['0.5', '0.1', '0.2', '0.3'],
"칼로리":[10,180,420,320],
}
df = pd.DataFrame(data)
df
Out[77]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 |
In [69]:
# 1. 이벤트가 컬럼 만들기 - 원 가격의 50% 할인을 적용한 이벤트 가격
In [71]:
df['이벤트가'] = df['가격'] * 0.5
df
Out[71]:
메뉴 | 가격 | 할인율 | 칼로리 | 이벤트가 | |
---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 2050.0 |
1 | 카페라떼 | 4600 | 0.1 | 180 | 2300.0 |
2 | 카페모카 | 4600 | 0.2 | 420 | 2300.0 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 2550.0 |
In [78]:
# 2. 할인가 컬럼 만들기 - 할인을 적용한 할인 가격
In [79]:
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4 entries, 0 to 3 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 메뉴 4 non-null object 1 가격 4 non-null int64 2 할인율 4 non-null object 3 칼로리 4 non-null int64 dtypes: int64(2), object(2) memory usage: 256.0+ bytes
In [80]:
df['할인율'] = df['할인율'].astype('float')
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4 entries, 0 to 3 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 메뉴 4 non-null object 1 가격 4 non-null int64 2 할인율 4 non-null float64 3 칼로리 4 non-null int64 dtypes: float64(1), int64(2), object(1) memory usage: 256.0+ bytes
In [81]:
df['할인가'] = df['가격'] * (1 - df['할인율'])
df
Out[81]:
메뉴 | 가격 | 할인율 | 칼로리 | 할인가 | |
---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | 2050.0 |
1 | 카페라떼 | 4600 | 0.1 | 180 | 4140.0 |
2 | 카페모카 | 4600 | 0.2 | 420 | 3680.0 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 | 3570.0 |
In [ ]:
# 3. 컬럼 삭제 - 칼로리 컬럼 삭제
In [73]:
df = df.drop('칼로리', axis=1)
df
Out[73]:
메뉴 | 가격 | 할인율 | 이벤트가 | 할인가 | |
---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 2050.0 | 2050.0 |
1 | 카페라떼 | 4600 | 0.1 | 2300.0 | 2300.0 |
2 | 카페모카 | 4600 | 0.2 | 2300.0 | 2300.0 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 2550.0 | 2550.0 |
In [74]:
df.to_csv('결과.csv', index=False)
참고
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3) | 퇴근후딴짓 - 인프런
퇴근후딴짓 | 비전공자, 입문자가 빅데이터 분석기사 실기를 빠르게 취득할 수 있도록 안내해드려요! 꼭 필요한 파이썬, 판다스, 머신러닝을 다루고 있어요!, ❤️공지❤️ 7회 기출 유형 업데이
www.inflearn.com
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형1 - 시계열 데이터 2 (0) | 2024.06.10 |
---|---|
[빅데이터분석기사] 작업형1 - 시계열 데이터 1 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 3 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 2 (0) | 2024.06.10 |
[빅데이터분석기사/실기] 01. 데이터 전처리 1 (2) | 2023.11.26 |