1. Pandas ๋
๐ฏ pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ : ํ์ด์ฌ์์ ๋ฐ์ดํฐ ๋ถ์๊ณผ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ค๋ค
๐ฏ pandas๋ numpy๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ง๋ง ์ข ๋ ๋ณต์กํ ๋ฐ์ดํฐ ๋ถ์์ ํนํ
๐ฏ numpy๊ฐ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ ๋ฐฐ์ด๋ง ์ฒ๋ฆฌํ ์ ์๋๋ฐ ๋ฐํด pandas๋ ๋ฐ์ดํฐ ํ์
์ด ๋ค์ํ๊ฒ ์์ฌ ์์ ๋๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๐ ๊ณต์ ํํ์ด์ง : https://pandas.pydata.org/
2. ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ์์ฑํ๊ธฐ
1) Series๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์์ฑ
๐ pandas์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ Series()๋ฅผ ์ด์ฉํ๋ ๊ฒ
๐ Series()๋ฅผ ์ด์ฉํ๋ฉด Series ํ์์ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ(๋ผ๋ฒจ์ ๊ฐ๋ 1์ฐจ์ ๋ฐ์ดํฐ)๋ฅผ ์์ฑํ ์ ์์.
๐ ๋ค์์ Series()๋ฅผ ์ด์ฉํด Series ํ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
s = pd.Series(seq_data)
๐ Series()์ ์ธ์๋ก๋ ์ํ์ค ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ
๐ ์ํ์ค ๋ฐ์ดํฐ๋ก๋ ๋ฆฌ์คํธ์ ํํ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ง๋ง ์ฃผ๋ก ๋ฆฌ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉ
import pandas as pd
s1 = pd.Series([10, 20, 30, 40, 50])
print(s1)
s1
๐ ์ ์ชฝ์ ๊ฒฐ๊ณผ๋ print(s1)์ ๊ฒฐ๊ณผ
์๋ ์ชฝ์ ๊ฒฐ๊ณผ๋ s1 ๋ง ์คํํ์ ๋ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ (์ฃผํผํฐ ๋ ธํธ๋ถ ์ฌ์ฉ )
s1 = pd.Series([10, 20, 30, 40, 50])
s1.index
# ์คํ ์ถ๋ ฅ
# RangeIndex(start=0, stop=5, step=1)
s1.values
๐ numpy์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ๋ฐ์ดํฐ ํ์ ์ด ๊ฐ์์ผ ํ์ง๋ง pandas์ ๊ฒฝ์ฐ์๋ ์์์ ๋ฐ์ดํฐ ํ์ ์ด ๋ฌ๋ผ๋ ์ ์ฅ ๊ฐ๋ฅ
s2 = pd.Series(['a', 'b', 'c', 1, 2, 3]) # ๋ํ์ด ์๋ค๋ฉด ๋ชจ๋ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ.
print(s2)
# 0 a
# 1 b
# 2 c
# 3 1
# 4 2
# 5 3
# dtype: object
# ๋ณ์ s2์๋ ๋ฌธ์์ด๊ณผ ์ซ์๊ฐ ํผํฉ์ด ๋์ด ์์ด์ ํ์
์ด object
3) np.nan
๐ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด numpy๋ฅผ ์ํฌํธํ ํ np.nan์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์์ ํ์ํ ์ ์์
import numpy as np
s3 = pd.Series([np.nan, 10, 30])
print(s3)
'''
์ถ๋ ฅ๊ฒฐ๊ณผ)
0 NaN -> ๋ฐ์ดํฐ๋ฅผ ์ํ ์๋ฆฌ index๋ ์์ง๋ง ์ค์ ๊ฐ์ด ์์.
1 10.0
2 30.0
dtype: float64
'''
4) index
๐ Series ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ ์ธ์๋ก index ์ถ๊ฐ ๊ฐ๋ฅ
โถ๏ธ ์ธ์๋ก index๋ฅผ ๋ช ์์ ์ผ๋ก ์ ๋ ฅํ๋ฉด Series ๋ณ์(s)์ index์๋ ์๋ ์์ฑ๋๋ index ๋์ index_seq๊ฐ ๋ค์ด๊ฐ๊ฒ ๋จ
โถ๏ธ index_seq๋ ๋ฆฌ์คํธ์ ํํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง ์ฃผ๋ก ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉ
โถ๏ธ ์ฃผ์ํ ์ ์ seq_data์ ํญ๋ชฉ ๊ฐ์์ index_seq์ ํญ๋ชฉ ๊ฐ์๊ฐ ๊ฐ์์ผ ํจ
s = pd.Series(seq_data, index = index_seq)
# ์ด๋ ๊ฐ๊ฒ์ ๋ ์ง๋ณ ํ๋งค๋์ pandas์ Series ํ์์ผ๋ก ์
๋ ฅ. ํ๋ฃจ๋ ๋ฐ์ดํฐ๊ฐ ์์ด์ np.nan์ ์
๋ ฅ
index_data = ['2018-10-07', '2018-10-08', '2018-10-09', '2018-10-10']
s4 = pd.Series([200, 195, np.nan, 205], index=index_data)
s4
s4.index
# Index(['2018-10-07', '2018-10-08', '2018-10-09', '2018-10-10'], dtype='object')
๐ ํ์ด์ฌ์ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ index๋ฅผ ํจ๊ป ์ ๋ ฅํ ์ ์์
โถ๏ธ ์ ๋ ฅ ์ธ์๋ก ๋์ ๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ฉด ๋์ ๋๋ฆฌ ๋ฐ์ดํฐ์ ํค key์ ๊ฐ value์ด ๊ฐ๊ฐ Series ๋ฐ์ดํฐ์ index์ values๋ก ๋ค์ด๊ฐ
s = pd.Series(dict_data)
s5 = pd.Series({'๊ตญ์ด': 100, '์์ด': 95, '์ํ': 90})
s5
'''
๊ตญ์ด,100
์์ด,95
์ํ,90
'''
3. ๋ ์ง ์๋ ์์ฑ : data_range()
๐ ์
๋ ฅํด์ผ ํ ๋ ์ง๊ฐ ๋ง์ผ๋ฉด pandas์์ ๋ ์ง๋ฅผ ์๋์์ฑํ๋ data_range() ์ฌ์ฉ
๐ ๋ช ๊ฐ์ง ์ค์ ๋ง ํ๋ฉด ์ํ๋ ๋ ์ง๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ฏ๋ก ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ ๋ ํธ๋ฆฌ
pd.date_range(start=None, end=None, periods=None, freq='D'
๐พ start๋ ์์๋ ์ง, end๋ ๋๋ ์ง
๐พ periods๋ ๋ ์ง ๋ฐ์ดํฐ ์์ฑ ๊ธฐ๊ฐ = ์์ฑ ๊ฐฏ์
๐พ freq๋ ๋ ์ง ๋ฐ์ดํฐ ์์ฑ ์ฃผ๊ธฐ
๐พ start๋ ํ์์ด๊ณ , end๋ periods๋ ๋ ์ค ํ๋๋ง ์์ด๋ ๋จ
๐พ freq๋ ์
๋ ฅํ์ง ์์ผ๋ฉด 'D' ์ต์
์ด ์ค์ ๋ผ ๋ฌ๋ ฅ๋ ์ง ๊ธฐ์ค์ผ๋ก ํ๋ฃจ์ฉ ์ฆ๊ฐ
# ์์ ๋ ์ง์ ๋ ๋ ์ง๋ฅผ ์ง์ ํด ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์์ฑ. ํ๋ฃจ์ฉ ์ฆ๊ฐํ ๋ ์ง ๋ฐ์ดํฐ๊ฐ ์์ฑ.
pd.date_range(start='2019-01-01', end='2019-01-07')
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
1) ๋ ์ง ๋ฐ์ดํฐ ํ์
๐ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ๋ yyyy-mm-dd yyyy/mm/dd, yyyy.mm.dd, mm-dd-yyyy, mm/dd/yyyy, mm.dd.yyyy
ํ์ ์ฌ์ฉ๊ฐ๋ฅ
โถ๏ธ ๋์ ์ถ๋ ฅ์ yyyy-mm-dd ํ์์ผ๋ก ์์ฑ
pd.date_range(start='2019/01/01', end='2019.01.07')
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
pd.date_range(start='2019-01-01', end='01.07.2019')
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
# ๋ ๋ ์ง๋ฅผ ์ง์ ํ์ง ์๊ณ periods๋ง ์
๋ ฅํด์ ๋ ์ง ์์ฑ.
pd.date_range(start='2019-01-01', periods=7)
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
2) pandas data_range() ํจ์์ freq ์ต์
์ฝ์ด | ์ค๋ช | ์ฌ์ฉ ์ |
D | ๋ฌ๋ ฅ ๋ ์ง ๊ธฐ์ค ํ๋ฃจ ์ฃผ๊ธฐ | ํ๋ฃจ ์ฃผ๊ธฐ: freq = 'D', ์ดํ ์ฃผ๊ธฐ: freq = '2D' |
B | ์ ๋ฌด ๋ ์ง ๊ธฐ์ค ํ๋ฃจ ์ฃผ๊ธฐ | ์ ๋ฌด์ผ(์~๊ธ) ๊ธฐ์ค์ผ๋ก ์์ฑ, freq = 'B', freq = '3B' |
W | ์ผ์์ผ ์์ ๊ธฐ์ค ์ผ์ฃผ์ผ ์ฃผ๊ธฐ | ์์์ผ: W-MON, ํ์์ผ: W-TUE, freq = 'W', freq = 'W-MON' |
M | ์๋ง ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | ํ ๋ฌ ์ฃผ๊ธฐ: freq = 'M', ๋ค ๋ฌ ์ฃผ๊ธฐ: freq = '4M' |
BM | ์ ๋ฌด ์๋ง ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'BM' , freq = '2BM' |
MS | ์์ด ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'MS' , freq = '2MS' |
BMS | ์ ๋ฌด ์์ด ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'BMS' , freq = '2BMS' |
Q | ๋ถ๊ธฐ ๋ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'Q' , freq = '2Q' |
BQ | ์ ๋ฌด ๋ถ๊ธฐ ๋ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'BQ' , freq = '2BQ' |
QS | ๋ถ๊ธฐ ์์ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'QS' , freq = '2QS' |
BQS | ์ ๋ฌด ๋ถ๊ธฐ ์์ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'BQS' , freq = '2BQS' |
A | ์ผ๋ ๋ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'A' , freq = '2A' |
BA | ์ ๋ฌด ์ผ๋ ๋ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'BA' , freq = '2BA' |
AS | ์ผ๋ ์์ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'AS' , freq = '2AS' |
BAS | ์ ๋ฌด ์ผ๋ ์์ ๋ ์ง ๊ธฐ์ค ์ฃผ๊ธฐ | freq = 'BAS' , freq = '2BAS' |
H | ์๊ฐ ๊ธฐ์ค ์ฃผ๊ธฐ | 1์๊ฐ ์ฃผ๊ธฐ: freq = 'H' , 2์๊ฐ ์ฃผ๊ธฐ: freq = '2H' |
BH | ์ ๋ฌด ์๊ฐ ๊ธฐ์ค ์ฃผ๊ธฐ | ์ ๋ฌด ์๊ฐ(09:00 ~ 17:00) ๊ธฐ์ค์ผ๋ก ์์ฑ |
T, min | ๋ถ ์ฃผ๊ธฐ | 10๋ถ ์ฃผ๊ธฐ: freq = '10T' , 30๋ถ ์ฃผ๊ธฐ: freq = '30min' |
S | ์ด ์ฃผ๊ธฐ | 1์ด ์ฃผ๊ธฐ: freq = 'S' , 10์ด ์ฃผ๊ธฐ: freq = '10S' |
# 2์ผ์ฉ ์ฆ๊ฐํ๋ ๋ ์ง๋ฅผ ์์ฑ
pd.date_range(start='2019-01-01', periods=4, freq='2D')
# DatetimeIndex(['2019-01-01', '2019-01-03', '2019-01-05', '2019-01-07'],
# dtype='datetime64[ns]', freq='2D')
# ๋ฌ๋ ฅ์ ์์ผ์ ๊ธฐ์ค์ผ๋ก ์ผ์ฃผ์ผ์ฉ ์ฆ๊ฐํ๋ ๋ ์ง๋ฅผ ์์ฑ.
pd.date_range(start='2019-01-06', periods=4, freq='W')
# DatetimeIndex(['2019-01-06', '2019-01-13', '2019-01-20', '2019-01-27'],
# dtype='datetime64[ns]', freq='W-SUN')
# ์
๋ฌด์ผ ๊ธฐ์ค 2๊ฐ์ ์๋ง ์ฃผ๊ธฐ๋ก 12๊ฐ ๋ ์ง๋ฅผ ์์ฑ.
pd.date_range(start='2019-01-01', periods=12, freq='2BM')
'''
DatetimeIndex(['2019-01-31', '2019-03-29', '2019-05-31', '2019-07-31',
'2019-09-30', '2019-11-29', '2020-01-31', '2020-03-31',
'2020-05-29', '2020-07-31', '2020-09-30', '2020-11-30'],
dtype='datetime64[ns]', freq='2BM'
'''
# ๋ถ๊ธฐ ์์์ผ์ ๊ธฐ์ค์ผ๋ก 4๊ฐ์ ๋ ์ง๋ฅผ ์์ฑ
pd.date_range(start='2019-01-01', periods=4, freq='QS')
# DatetimeIndex(['2019-01-01', '2019-04-01', '2019-07-01', '2019-10-01'],
# dtype='datetime64[ns]', freq='QS-JAN')
[ ์๊ฐ ์์ฑ ]
# 1์๊ฐ ์ฃผ๊ธฐ๋ก 10๊ฐ์ ์๊ฐ์ ์์ฑํ ์
pd.date_range(start='2019-01-01 08:00', periods=10, freq='H')
'''
DatetimeIndex(['2019-01-01 08:00:00', '2019-01-01 09:00:00',
'2019-01-01 10:00:00', '2019-01-01 11:00:00',
'2019-01-01 12:00:00', '2019-01-01 13:00:00',
'2019-01-01 14:00:00', '2019-01-01 15:00:00',
'2019-01-01 16:00:00', '2019-01-01 17:00:00'],
dtype='datetime64[ns]', freq='H')
'''
# ์
๋ฌด ์๊ฐ์ ๊ธฐ์ค์ผ๋ก 1์๊ฐ ์ฃผ๊ธฐ๋ก 10๊ฐ์ ์๊ฐ์ ์์ฑํ๋ ์
# ์
๋ฌด ์๊ฐ์ 9์ ๋ถํฐ 17์๊น์ง์ด๋ฏ๋ก start์๊ฐ์ 9์ ์ด์ ์ผ๋ก ์ค์ ํด๋ 9์ ๋ถํฐ ํ์.
pd.date_range(start='2019-01-01 08:00', periods=10, freq='BH')
'''
DatetimeIndex(['2019-01-01 09:00:00', '2019-01-01 10:00:00',
'2019-01-01 11:00:00', '2019-01-01 12:00:00',
'2019-01-01 13:00:00', '2019-01-01 14:00:00',
'2019-01-01 15:00:00', '2019-01-01 16:00:00',
'2019-01-02 09:00:00', '2019-01-02 10:00:00'],
dtype='datetime64[ns]', freq='BH')
'''
# date_range()๋ฅผ ์ด์ฉํด Series์ index๋ฅผ ์ง์ ํ ์.
index_date = pd.date_range(start='2019-03-01', periods=5, freq='D')
s = pd.Series([51, 62, 55, 49, 58], index=index_date)
s
'''
2019-03-01,51
2019-03-02,62
2019-03-03,55
2019-03-04,49
2019-03-05,58
'''
[ ๋ด์ฉ ์ฐธ๊ณ : IT ํ์ ๊ฐ์ ]