Pandas 라이브러리
- 파이썬 데이터 처리에서 제일 많이 이용
- 데이터 전처리
- DataFrame
In [2]:
import pandas as pd
In [3]:
lemonade = pd.read_csv('Lemonade2016.csv')
lemonade.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 31 non-null object
1 Location 32 non-null object
2 Lemon 32 non-null int64
3 Orange 32 non-null int64
4 Temperature 32 non-null int64
5 Leaflets 31 non-null float64
6 Price 32 non-null float64
dtypes: float64(2), int64(3), object(2)
memory usage: 1.9+ KB
데이터 둘러보기
- head()
- tail()
- info()
In [4]:
lemonade.head()
Out[4]:
Date | Location | Lemon | Orange | Temperature | Leaflets | Price | |
---|---|---|---|---|---|---|---|
0 | 7/1/2016 | Park | 97 | 67 | 70 | 90.0 | 0.25 |
1 | 7/2/2016 | Park | 98 | 67 | 72 | 90.0 | 0.25 |
2 | 7/3/2016 | Park | 110 | 77 | 71 | 104.0 | 0.25 |
3 | 7/4/2016 | Beach | 134 | 99 | 76 | 98.0 | 0.25 |
4 | 7/5/2016 | Beach | 159 | 118 | 78 | 135.0 | 0.25 |
In [5]:
lemonade.tail()
Out[5]:
Date | Location | Lemon | Orange | Temperature | Leaflets | Price | |
---|---|---|---|---|---|---|---|
27 | 7/27/2016 | Park | 104 | 68 | 80 | 99.0 | 0.35 |
28 | 7/28/2016 | Park | 96 | 63 | 82 | 90.0 | 0.35 |
29 | 7/29/2016 | Park | 100 | 66 | 81 | 95.0 | 0.35 |
30 | 7/30/2016 | Beach | 88 | 57 | 82 | 81.0 | 0.35 |
31 | 7/31/2016 | Beach | 76 | 47 | 82 | 68.0 | 0.35 |
In [6]:
#info(): 각 열에 null값 있는지, 열의 데이터타입.
## 1. 전체 결과값 중 31 non-null은 1개의 null값이 있다는 것 >> 처리 필수
## 2. 데이터 유형: 예를 들어 object 유형의 데이터는 시계열 분석을 위해 Date 형식으로 형 변환 해야함
lemonade.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 31 non-null object
1 Location 32 non-null object
2 Lemon 32 non-null int64
3 Orange 32 non-null int64
4 Temperature 32 non-null int64
5 Leaflets 31 non-null float64
6 Price 32 non-null float64
dtypes: float64(2), int64(3), object(2)
memory usage: 1.9+ KB
In [7]:
#describe(): 데이터 분포와 기술 통계량 확인가능
# count:non-null값의 개수 mean:평균 std:표준편차 min:최솟값 25%:사분위수 max:최댓값
print(lemonade.describe())
Lemon Orange Temperature Leaflets Price
count 32.000000 32.000000 32.000000 31.000000 32.000000
mean 116.156250 80.000000 78.968750 108.548387 0.354688
std 25.823357 21.863211 4.067847 20.117718 0.113137
min 71.000000 42.000000 70.000000 68.000000 0.250000
25% 98.000000 66.750000 77.000000 90.000000 0.250000
50% 113.500000 76.500000 80.500000 108.000000 0.350000
75% 131.750000 95.000000 82.000000 124.000000 0.500000
max 176.000000 129.000000 84.000000 158.000000 0.500000
In [8]:
#value_counts(): 문자형 데이터의 개수를 파악할 때 유용
lemonade['Location'].value_counts()
Out[8]:
Beach 17
Park 15
Name: Location, dtype: int64
데이터의 자료형
- 정성적 데이터 : 명목척도, 서열척도
- 정량적 데이터 : 등간척도, 비율척도
측정 척도의 유형과 내용
- 명목척도: 범주형 데이터로 측정된 측정 대상을 단순히 범주로 분류하기위해 숫자를 부여한 척도. 수학적 가감승제 계산 안됨 (성별, 종교, 직업, 혈액형, 예/아니오 등)
- 서열척도: 범주형 데이터로 명목 척도의 기능 뿐 아니라 각 범주 간 대소관계, 순위(서열성)에 대해 숫자를 부여한 척도, 수학적 가감승제 계산 안됨 (학력, 건강상태 등)
- 등간척도: 연속형 데이터로 절대적 영점이 없으며 대상의 양에 따라 등간격으로 숫자를 부여한 척도, 수학적 가감승제 계산 가능 (온도, 만족도, 충성도, 물가지수 등)
- 비율척도: 연속형 데이터로 절대적 열점 존재하며 비율 계산이 가능한 숫자를 부여한 척도, 수학적 가감승제 계산 가능 (매출액, 무게, 가격, 소득 등)
데이터 유형, 성질에 따라 통계분석 방법, 머신러닝 연구 방법이 다르다. 특히 모든 데이터는 문자가 아닌 수치로 코딩화해야 한다.
머신러닝에서는 label encoding, ordinal encoding, one-hot encoding 으로 문자를 수치로 변경
In [10]:
#데이터 다루기
## 열추가: 값 할당시 모두 같은 값으로 채워짐
lemonade['sold'] = 'paid'
print(lemonade.head(3))
Date Location Lemon Orange Temperature Leaflets Price sold
0 7/1/2016 Park 97 67 70 90.0 0.25 paid
1 7/2/2016 Park 98 67 72 90.0 0.25 paid
2 7/3/2016 Park 110 77 71 104.0 0.25 paid
In [11]:
lemonade['sold'] = lemonade['Lemon'] + lemonade['Orange']
print(lemonade.head(3))
Date Location Lemon Orange Temperature Leaflets Price sold
0 7/1/2016 Park 97 67 70 90.0 0.25 164
1 7/2/2016 Park 98 67 72 90.0 0.25 165
2 7/3/2016 Park 110 77 71 104.0 0.25 187
In [12]:
lemonade['revenue'] = lemonade['Price'] * lemonade['sold']
lemonade.head(3)
Out[12]:
Date | Location | Lemon | Orange | Temperature | Leaflets | Price | sold | revenue | |
---|---|---|---|---|---|---|---|---|---|
0 | 7/1/2016 | Park | 97 | 67 | 70 | 90.0 | 0.25 | 164 | 41.00 |
1 | 7/2/2016 | Park | 98 | 67 | 72 | 90.0 | 0.25 | 165 | 41.25 |
2 | 7/3/2016 | Park | 110 | 77 | 71 | 104.0 | 0.25 | 187 | 46.75 |
In [14]:
## 열의 개수가 많아져서 중간값이 생략되는데 생략되지 않도록 하기
pd.set_option('display.max_columns',None)
## 옵션해제
pd.set_option('display.max_columns',0)
In [16]:
# 열 제거: drop(), axis=0: 행 방향 제거, axis=1: 열 방향 제거
## 열 방향 제거
lemonade_column_drop = lemonade.drop('sold', axis=1)
lemonade_column_drop.head(5)
Out[16]:
Date | Location | Lemon | Orange | Temperature | Leaflets | Price | revenue | |
---|---|---|---|---|---|---|---|---|
0 | 7/1/2016 | Park | 97 | 67 | 70 | 90.0 | 0.25 | 41.00 |
1 | 7/2/2016 | Park | 98 | 67 | 72 | 90.0 | 0.25 | 41.25 |
2 | 7/3/2016 | Park | 110 | 77 | 71 | 104.0 | 0.25 | 46.75 |
3 | 7/4/2016 | Beach | 134 | 99 | 76 | 98.0 | 0.25 | 58.25 |
4 | 7/5/2016 | Beach | 159 | 118 | 78 | 135.0 | 0.25 | 69.25 |
In [18]:
## 행 방향 제거
lemonade_row_drop = lemonade.drop(1, axis=0)
lemonade_row_drop.head()
Out[18]:
Date | Location | Lemon | Orange | Temperature | Leaflets | Price | sold | revenue | |
---|---|---|---|---|---|---|---|---|---|
0 | 7/1/2016 | Park | 97 | 67 | 70 | 90.0 | 0.25 | 164 | 41.00 |
2 | 7/3/2016 | Park | 110 | 77 | 71 | 104.0 | 0.25 | 187 | 46.75 |
3 | 7/4/2016 | Beach | 134 | 99 | 76 | 98.0 | 0.25 | 233 | 58.25 |
4 | 7/5/2016 | Beach | 159 | 118 | 78 | 135.0 | 0.25 | 277 | 69.25 |
5 | 7/6/2016 | Beach | 103 | 69 | 82 | 90.0 | 0.25 | 172 | 43.00 |
In [19]:
#데이터 인덱싱: 데이터 일부 추출
## 기본
print(lemonade[0:5])
Date Location Lemon Orange ... Leaflets Price sold revenue
0 7/1/2016 Park 97 67 ... 90.0 0.25 164 41.00
1 7/2/2016 Park 98 67 ... 90.0 0.25 165 41.25
2 7/3/2016 Park 110 77 ... 104.0 0.25 187 46.75
3 7/4/2016 Beach 134 99 ... 98.0 0.25 233 58.25
4 7/5/2016 Beach 159 118 ... 135.0 0.25 277 69.25
[5 rows x 9 columns]
In [21]:
## location=beach인 경우의 데이터만 보고 싶은 경우
print(lemonade[lemonade['Location']=='Beach'].head())
Date Location Lemon Orange ... Leaflets Price sold revenue
3 7/4/2016 Beach 134 99 ... 98.0 0.25 233 58.25
4 7/5/2016 Beach 159 118 ... 135.0 0.25 277 69.25
5 7/6/2016 Beach 103 69 ... 90.0 0.25 172 43.00
6 7/6/2016 Beach 103 69 ... 90.0 0.25 172 43.00
7 7/7/2016 Beach 143 101 ... 135.0 0.25 244 61.00
[5 rows x 9 columns]
In [24]:
#iloc & loc
## iloc: 위치 기반 인덱싱 iloc(행, 열)
## loc: 명칭 기반 인덱싱
print(lemonade.iloc[0:3, 0:2])
Date Location
0 7/1/2016 Park
1 7/2/2016 Park
2 7/3/2016 Park
In [25]:
#loc: 명칭 기반
#loc은 iloc과 다르게 마지막 수 포함
print(lemonade.loc[0:2, ['Date','Location']])
Date Location
0 7/1/2016 Park
1 7/2/2016 Park
2 7/3/2016 Park
In [27]:
#조건 인덱싱: 데이터 전처리에 필수! 조건에 따라 빠르게 필요한 데이터만 추출하기
## lemonade에서 revenue>45인 행만 추출한 뒤 date, revenue열만 출력
print(lemonade.loc[lemonade['revenue']>45, ['Date', 'revenue']].head())
Date revenue
2 7/3/2016 46.75
3 7/4/2016 58.25
4 7/5/2016 69.25
7 7/7/2016 61.00
8 NaN 52.25
In [28]:
#기본 데이터 전처리: sort_values()이용한 데이터 정렬, groupby() 이용한 연산
## sort_values(): numpy의 sort와 비슷. sort_values(by, ascending, inplace)
### by: 어떤 열 기준으로 정렬할 지
### ascending=t/f: 오름차순 정렬 여부
### inplace=t/f: 해당 명령을 본 데이터에 정렬할지. 디폴트는 f이고 데이터에 바로 적용되지 않음
print(lemonade.sort_values(by=['Temperature']).head())
Date Location Lemon Orange ... Leaflets Price sold revenue
0 7/1/2016 Park 97 67 ... 90.0 0.25 164 41.00
20 7/20/2016 Park 71 42 ... NaN 0.50 113 56.50
2 7/3/2016 Park 110 77 ... 104.0 0.25 187 46.75
1 7/2/2016 Park 98 67 ... 90.0 0.25 165 41.25
16 7/16/2016 Beach 81 50 ... 90.0 0.50 131 65.50
[5 rows x 9 columns]
In [30]:
lemonade.sort_values(by=['Temperature','revenue'], ascending=False, inplace=True)
print(lemonade.loc[:, ['Date', 'Temperature', 'revenue']].head())
Date Temperature revenue
25 7/25/2016 84 134.50
12 7/12/2016 84 56.25
26 7/26/2016 83 106.75
11 7/11/2016 83 70.50
24 7/24/2016 82 101.50
In [31]:
#groupby(): 특정 열을 기준으로 그 열의 고윳값들로 데이터를 나눔
print(lemonade.groupby(by='Location').count())
Date Lemon Orange Temperature Leaflets Price sold revenue
Location
Beach 16 17 17 17 17 17 17 17
Park 15 15 15 15 14 15 15 15
In [33]:
#agg(): aggregation의 약자. groupby로 묶인 데이터를 연산
print(lemonade.groupby('Location')['revenue'].agg([max,min]))
max min
Location
Beach 95.5 43.0
Park 134.5 41.0
In [36]:
#여러 개의 변수도 넣을 수 있음
print(lemonade.groupby('Location')[['revenue','sold']].agg([max,min]))
revenue sold
max min max min
Location
Beach 95.5 43.0 282 123
Park 134.5 41.0 305 113
In [ ]:
'AI Theory > key concept of AI' 카테고리의 다른 글
[모두의 딥러닝] 선형 회귀와 로지스틱 회귀 (0) | 2022.07.08 |
---|---|
[파이썬으로 캐글뽀개기] 캐글에서 사용되는 머신러닝 알고리즘 (0) | 2022.07.04 |
[파이썬 캐글뽀개기] Numpy (0) | 2022.06.21 |
[파이썬으로 캐글뽀개기] 튜플과 딕셔너리, 집합(set) (0) | 2022.06.21 |
[파이썬으로 캐글뽀개기] 데이터분석에 유용한 리스트 관련 메소드 (0) | 2022.06.20 |