[Python] ํ๋ค์ค(Pandas) - Series
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ Pandas์ Series๋ฅผ ๋ค๋ฃฌ๋ค.
Pandas๋? ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๊ณ ์์ค์ ์๋ฃ๊ตฌ์กฐ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ์ฌ๊ธฐ์ โ๊ณ ์์คโ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ดยท์๊ฐํํ๋ ๋ฉ์๋๋ฅผ ๋ปํ๋ค. ๋ฐ์ดํฐ ๋ถ์์ ํ์ ๋ชจ๋์ด๋ค.
Series: ์ธ๋ฑ์ค๊ฐ ๋ถ์ 1์ฐจ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
1. Series ์์ฑ
1
2
3
4
5
data = np.array(["๊ฐ", "๋", "๋ค"])
s = Series(data)
# 0 ๊ฐ
# 1 ๋
# 2 ๋ค (๊ธฐ๋ณธ ์ธ๋ฑ์ค 0,1,2)
์ธ๋ฑ์ค๋ฅผ ์ง์ ์ง์ ํ ์ ์๋ค.
1
2
3
4
5
6
data = [1000, 2000, 3000]
index = ['๋ฉ๋ก๋', '๊ตฌ๊ตฌ์ฝ', 'ํ๊ฒ๋ค์ฆ']
s = Series(data=data, index=index)
# ๋ฉ๋ก๋ 1000
# ๊ตฌ๊ตฌ์ฝ 2000
# ํ๊ฒ๋ค์ฆ 3000
Series์ ์์ฑ์ ํ์ธํ ์ ์๋ค.
| ์์ฑ | ๋ฐํ |
|---|---|
s.index | ์ธ๋ฑ์ค |
s.values | ๊ฐ |
s.dtype | ์๋ฃํ |
2. ์ธ๋ฑ์ฑ โ loc vs iloc
| ๋ฐฉ์ | ๊ธฐ์ค | ์ฌ๋ผ์ด์ฑ |
|---|---|---|
s.loc['๋ฉ๋ก๋'] | ๋ด๊ฐ ๋ง๋ ์ธ๋ฑ์ค | ๋ง์ง๋ง ํฌํจ |
s.iloc[0] | ๊ธฐ๋ณธ(์ ์) ์ธ๋ฑ์ค | ๋ง์ง๋ง ์ ์ธ |
1
2
s.loc['๋ฉ๋ก๋'] # 1000 (๋ผ๋ฒจ๋ก)
s.iloc[0] # 1000 (์ ์ ์์น๋ก)
โ ๏ธ
loc๋ก ์ฌ๋ผ์ด์ฑํ๋ฉดiloc์ ๋ฌ๋ฆฌ ๋ง์ง๋ง ์์๋ ํฌํจํ๋ค.
3. ์ธ๋ฑ์ค๊ฐ ๋ค๋ฅธ Series ์ฐ์ฐ
1
2
3
4
s1 = Series([10, 20, 30], index=["๊ฐ", "๋", "๋ค"])
s2 = Series([20, 30, 40]) # ์ธ๋ฑ์ค 0,1,2
s1 + s2 # ์ ๋ถ NaN!
๐ก Series ์ฐ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ ๊ณ์ฐํ๋ค. ์ธ๋ฑ์ค๊ฐ ๋ง์ง ์์ผ๋ฉด ์ง์ด ์์ด NaN(float ํ์ )์ด ๋๋ค.
4. ์กฐ๊ฑด(๋ถ๋ฆฌ์ธ) ์ธ๋ฑ์ฑ
1
2
3
4
5
lge = Series([93000, 82400, 99100, 81000, 72300],
index=["05/27", "05/28", "05/29", "05/30", "05/31"])
lge.index[lge.values < 85000]
# >>> Index(['05/28', '05/30', '05/31']) โ ์ข
๊ฐ 85000 ๋ฏธ๋ง ๋ ์ง
๐ก
values < 85000์ ๊ฐ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋์ ํด True/False Series๋ฅผ ๋ง๋ ๋ค. ์ด๋ฅผ ์ธ๋ฑ์ฑ์ ๋ฃ์ผ๋ฉด True์ธ ๊ฒ๋ง ์ถ์ถ๋๋ค. (LG์ ์ ์ข ๊ฐ์์ 85000 ๋ฏธ๋ง์ธ ๋ ์ง)
๋ฒ์ธ โ ๋นํธ์ฝ์ธยท๋ฆฌํ ์๊ด๊ด๊ณ ํ๊ท
๋ ์ฝ์ธ ๊ฐ๊ฒฉ์ ๊ด๊ณ๋ฅผ ์ญํ๋ ฌ(์ต์์ ๊ณฑ)๋ก ์ผ์ฐจํจ์๋ก ๋์ถํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
btc_re = btc['close'].values[-1000:].reshape(-1, 1)
xrp_re = xrp['close'].values[-1000:].reshape(-1, 1)
o = np.ones((1000, 1), dtype=np.uint32)
btc_o = np.hstack((btc_re, o))
btc_o_t = np.linalg.pinv(btc_o) # ์ ์ฌ ์ญํ๋ ฌ
result = btc_o_t @ xrp_re
a, b = result[0, 0], result[1, 0] # ๊ธฐ์ธ๊ธฐ, ์ ํธ
x = btc['close'].values[-1000:]
y = a * x + b # ํ๊ท์
plt.plot(x, y, color="r")
x์ถ์ ๋นํธ์ฝ์ธ, y์ถ์ ๋ฆฌํ๋ก ๋๊ณ ๋์๊ฐ์ ์ผ์ฐจํจ์๋ก ํํํด ํ๊ท์ ์ ๊ทธ๋ ธ๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
6
Pandas Series
โโ ์์ฑ Series(data, index=...)
โโ ์์ฑ index / values / dtype
โโ ์ธ๋ฑ์ฑ loc(๋ผ๋ฒจ, ๋ ํฌํจ) vs iloc(์ ์)
โโ ์ฐ์ฐ ์ธ๋ฑ์ค ๊ธฐ์ค ์ ๋ ฌ, ์ ๋ง์ผ๋ฉด NaN
โโ ์กฐ๊ฑด values<n โ True/False โ ํํฐ๋ง
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| Series | ์ธ๋ฑ์ค๊ฐ ๋ถ์ 1์ฐจ์ ๋ฐ์ดํฐ |
| loc / iloc | ๋ผ๋ฒจ ์ธ๋ฑ์ฑ / ์ ์ ์ธ๋ฑ์ฑ |
| ๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ | ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ ํํฐ |
| NaN | ์ธ๋ฑ์ค ๋ถ์ผ์น ์ ๊ฒฐ์ธก๊ฐ |
Series์ ํต์ฌ์ โ์ธ๋ฑ์ค๊ฐ ๋ถ์ ๋ฐ์ดํฐโ๋ผ๋ ์ ์ด๋ค. ๊ทธ๋์ ์ฐ์ฐ์ด ์ธ๋ฑ์ค ๊ธฐ์ค์ผ๋ก ์ด๋ค์ง๊ณ , ์กฐ๊ฑด ์ธ๋ฑ์ฑ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฝ๊ฒ ๊ฑธ๋ฌ๋ผ ์ ์๋ค. ๋ค์์ 2์ฐจ์์ธ DataFrame์ ๋ค๋ฃฌ๋ค.

Comments powered by Disqus.