โ๐ป ๋ฐฐ์ด์
requests ์ get, post ๋ฐฉ์์ ๋ค๋ฆ์ ์ดํดํ๊ณ , DataFrame ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ(๊ทธ๋ฃนํ, ๋ณํฉ, ๋ณต์ฌ)์ ๋ํด ์ตํ ์ ์์๋ค.
๐ ๋ชฉ์ฐจ
1. requests GET, requests POST
2. groupby ์ agg
3. DataFrame merge
4. ์ข ๊ฐ ๋ฐ์ดํฐ๋ก ์์ต๋ฅ ๊ตฌํ๊ธฐ
5. DataFrame copy
๋ค์ด๊ฐ๋ฉฐ
๊ทธ ์ ํฌ์คํ ์๋ฃ์์ ์ด์ด, ์๋ก ์ฝ๋๊ฐ ๊ด๋ จ์ด ์๊ธฐ์ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค!
requests GET, requests POST
- GET ๋ฐฉ์
requests.get(url)
get ๋ฐฉ์์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ '๊ฒ์'ํ๋ ๋ฐ ์ฌ์ฉํ๋ค.
- POST ๋ฐฉ์
requests.post(url, data=payload)
post ๋ฐฉ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ '๋ณด๋ด๋๋ฐ' ์ฌ์ฉํ๋ค.
groupby ์ agg
groupby() ํจ์๋ DataFrame์์ ๊ทธ๋ฃน ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ agg() ํจ์๋ฅผ ํตํด ๋ชจ๋ column ์ ์ฌ๋ฌ๊ฐ์ง ํจ์๋ฅผ ์ ์ฉ์ํฌ ์ ์๋ค.
stock = pd.read_sql_query("select * from stock_day", con)
stock.groupby(['symbol'])['close'].agg(['max', 'min', 'mean'])
stock ๊ฐ์ฒด์ symbol ๊ธฐ์ค ๊ทธ๋ฃนํ๋ก close ์ปฌ๋ผ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ max, min, mean ํจ์๋ฅผ ์ ์ฉํ์ฌ ํด๋น ๊ฐ์ ๊ตฌํ ์ ์๋ค.
DataFrame merge
merge() ํจ์๋ ๋ ๊ฐ์ง DataFrame ์ ๋ณํฉํ ์ ์๋ค.
right = stock[stock.stock_date == pd.to_datetime('2023-02-09')]
left = stock[stock.stock_date == pd.to_datetime('2023-02-22')]
rt = merge(left[['symbol', 'close']], right[['symbol', 'close']],
right_on = 'symbol', left_on = 'symbol', how = 'inner')
rt # symbol, close_x, close_y columns data
right ๋ ๋ณํฉํ ์ค๋ฅธ์ชฝ df, left ๋ ๋ณํฉํ ์ผ์ชฝ df ๋ฅผ ์๋ฏธํ๋ค.
right_on ์ ๋ณํฉํ ์ค๋ฅธ์ชฝ df ์ column ์ด๋ฆ, left_on ์ ๋ณํฉํ ์ผ์ชฝ df ์ column ์ด๋ฆ์ด๋ค.
how ์๋ ๋ณํฉ ์ ํ์ ๋ํด ์ ์ด์ฃผ๋๋ฐ, inner ๋ ๋ด๋ถ join ์ ์๋ฏธํ๋ค.
์ข ๊ฐ ๋ฐ์ดํฐ๋ก ์์ต๋ฅ ๊ตฌํ๊ธฐ
์์์ ์งํํ ์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ, ์์ต๋ฅ ์ ๋ํ column ์ ์ถ๊ฐํ ์ ์๋ค.
rt['์์ต๋ฅ '] = (rt['close_y'] - rt['close_x']) / rt['close_x'] * 100
rt.sort_values(by=['์์ต๋ฅ ']) # ์์ต๋ฅ ๊ธฐ์ค์ผ๋ก df ์ ๋ ฌ
# krx df ์ ํฉ์น๊ธฐ
pd.merge(rt.sort_values(by=['์์ต์จ']), krx[['ISU_NM', 'ISU_SRT_CD']],
left_on = 'symbol', right_on = 'ISU_SRT_CD', how ='left')
๊ฐ ์ข ๋ชฉ์ ๋ํด ํน์ ๊ธฐ๊ฐ๋ด์ ์ข ๊ฐ์ ์์ต๋ฅ ์ ํ์ธํ ์ ์๋ค.
DataFrame copy
temp = pd.DataFrame([{'a' : 1, 'b' : 2}, {'a' : 3, 'b' : 4}])
# temp ๊ตฌ์กฐ
# a b
# 0 1 2
# 1 3 4
temp2 = temp
temp2.iloc[1,1] = 99 # temp2 ์ 1ํ 1์ด ๊ฐ 99 ๋ก ๋ฐ๊พธ๊ธฐ
temp
# temp ๊ตฌ์กฐ
# a b
# 0 1 2
# 1 3 99 -> ์ temp2 ๊ฐ ์๋๋ผ temp ๊ฐ ๋ฐ๋์์๊น?
์์๋ก temp ๋ผ๋ ๊ณณ์ DataFrame ์ ๋ง๋ค๊ณ , temp2 ์๋ temp ์ ๊ฐ๊ฒ ์ ์ธํด์ค๋ค.
๊ทธ๋ฌ๋, temp2 ์ ๋ฐ์ดํฐ ๊ฐ๋ง ๋ฐ๊ฟจ๋๋ฐ temp ๊น์ง ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ฐ๋ก, ํ์ด์ฌ์ pandas ์ DataFrame ์ ํน์ง์ด๋ค.
๋จ์ํ, ์ด๋ ๊ฒ temp2 ์๊ฒ temp ๋ก ์ ์ธํด์ฃผ๋ฉด, ๋ ์ค ์ด๋ค df ๊ฐ ๋ฐ๋๋๋ผ๋ ๋๊ฐ์ด ๊ฐ์ df ๊ฐ์ฒด๋ก ๋ณด๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํด์ผ ํ๋ค.
์๋ก ์ํฅ์ ๋ฐ์ง ์๊ณ ๋ ๋ฆฝ์ ์ธ DataFrame ์ผ๋ก ๋ง๋ค๊ณ ์ถ์ ๋, ์ฌ์ฉํ๋ ๋ฉ์๋์ธ copy() ๊ฐ ์๋ค.
temp3 = temp.copy()
temp3.iloc[1,1] = 0
temp
# temp ๊ตฌ์กฐ
# a b
# 0 1 2
# 1 3 99 -> ์ด๋ฒ์ ์ํฅ์ ๋ฐ์ง ์์๋ค.
# [ ํน์ column ๋ง ๋ณต์ฌํ๋ค๋ฉด? ]
temp4 = temp[['a']]
temp4
# temp4 ๊ตฌ์กฐ
# a
# 0 1
# 1 3
temp4.iloc[0,0] = 1000 # warning ๋ฐ์
temp4 = temp[['a']].copy() # ์ ์ ์คํ
temp4
# temp4 ๊ตฌ์กฐ
# a
# 0 1000
# 1 3
df ์ ๋ฐ์ดํฐ๋ง ๊ทธ๋๋ก ๋ณต์ฌํ์ฌ ๋ ๋ฆฝ์ ์ธ df ๊ฐ์ฒด๊ฐ ํ์ํ ๋, copy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์.
(ํญ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๊ณ ๊ฐ์ ธ์ค๊ณ ์ถ์๋ copy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์. warning ๋ฐฉ์ง!)
'Python > [๊ธฐ์ด ๊ฐ์ ์ ๋ฆฌ]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
python ๊ธฐ์ด 8 (0) | 2023.02.26 |
---|---|
python ๊ธฐ์ด 7 (0) | 2023.02.26 |
python ๊ธฐ์ด 5 (0) | 2023.02.26 |
python ๊ธฐ์ด 4 (1) | 2023.02.25 |
python ๊ธฐ์ด 3 (0) | 2023.02.24 |