๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

Python/[๊ธฐ์ดˆ ๊ฐ•์˜ ์ •๋ฆฌ]

python ๊ธฐ์ดˆ 6

์จ๋ฐ 2023. 2. 26. 14:17

โœ๐Ÿป ๋ฐฐ์šด์ 

 

requests ์˜ get, post ๋ฐฉ์‹์˜ ๋‹ค๋ฆ„์„ ์ดํ•ดํ•˜๊ณ , DataFrame ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•(๊ทธ๋ฃนํ™”, ๋ณ‘ํ•ฉ, ๋ณต์‚ฌ)์— ๋Œ€ํ•ด ์ตํž ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

 


 

 

 

๋“ค์–ด๊ฐ€๋ฉฐ

 

๊ทธ ์ „ ํฌ์ŠคํŒ… ์ž๋ฃŒ์—์„œ ์ด์–ด, ์„œ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ด€๋ จ์ด ์žˆ๊ธฐ์— ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

 

 

 

 

 

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