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

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

python ๊ธฐ์ดˆ 14

์จ๋ฐ 2023. 3. 13. 01:11

 

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

 

ํŒŒ์ด์ฌ์˜ GIL ๊ณผ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋“ค ๊ทธ๋ฆฌ๊ณ  ์ „์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๋“ค์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

 


 

 

 

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

 

์ง€ํ•˜์ฒ  ์ด์šฉ ์ •๋ณด ๋ฐ์ดํ„ฐ๋Š” 2016 ๋…„ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋กœ, 1์›”๋ถ€ํ„ฐ 12์›”๊นŒ์ง€ 1๋…„๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ํ™œ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

 

map

 

list ์— map ์„ ์‚ฌ์šฉํ•˜๋ฉด, for ๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

a = [ 1.5, 2.3, 6.3 ]

# int ๋กœ ๋ชจ๋‘ ๋ฐ”๊พธ์–ด ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅ
a1 = list(map(int, a))

# int ๋กœ ๋ฐ”๊พธ๋ฉด์„œ * 10 ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅ
a2 = list(map(lambda x : int(x) * 10, a))

 

์ด๋ ‡๊ฒŒ, ๊ฐ„๋‹จํ•œ ํ•œ ์ค„ ์ฝ”๋“œ๋กœ ๋ฐ˜๋ณต๋ฌธ ์—†์ด ์ˆ˜์‹์„ ํ†ตํ•ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

reduce

 

ํŒŒ์ด์ฌ์—์„œ functools ๋ชจ๋“ˆ์˜ reduce ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด, ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ์˜ ์›์†Œ๋ฅผ ๋ˆ„์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

from functools import reduce

# reduce(์ ์šฉ์‹œํ‚ฌ ํ•จ์ˆ˜, ๋ฆฌ์ŠคํŠธ ํ˜น์€ ํŠœํ”Œ)
reduce(lambda x, y : x + y, [1, 2, 3, 4, 5])

 

reduce ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, x + y ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋ฉด,

 

1(0 ๋ฒˆ์งธ ๊ฐ’) + 2(1๋ฒˆ์งธ ๊ฐ’) = 3 (๋ˆ„์  ํ•ฉ)

3(๋ˆ„์  ํ•ฉ) + 3(2๋ฒˆ์งธ ๊ฐ’) = 6 (๋ˆ„์  ํ•ฉ)

6(๋ˆ„์  ํ•ฉ) + 4(3๋ฒˆ์งธ ๊ฐ’) = 10 (๋ˆ„์  ํ•ฉ)

10(๋ˆ„์  ํ•ฉ) + 5(4๋ฒˆ์งธ ๊ฐ’) = 15 (๋ˆ„์  ํ•ฉ)

 

์œผ๋กœ, ๊ฐ„๋‹จํ•˜๊ฒŒ 1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

filter

 

ํŒŒ์ด์ฌ์—์„œ filter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด, ํŠน์ • ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋งŒ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

test = [1, 2, 3, 4, 5, 6]

# filter(์ ์šฉ์‹œํ‚ฌ ํ•จ์ˆ˜(์กฐ๊ฑด), ๋ฆฌ์ŠคํŠธ ํ˜น์€ ํŠœํ”Œ)
list(filter(lambda x : x % 2 == 0, test))

 

filter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” lambda ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ ‡๊ฒŒ ์ง์ˆ˜๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

multiprocessing

 

ํŒŒ์ด์ฌ์—์„œ๋Š”, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ์ง€์›ํ•ด์ฃผ๋Š” Pool ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.

 

from multiprocessing import Pool

 

Pool ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์œผ๋กœ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์„œ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค.

 

๋‹จ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ , ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

 

 

ํŠนํžˆ, ํŒŒ์ด์ฌ์—์„œ์˜ GIL(Global Interpreter Lock) ์— ์˜ํ•ด ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค.

 

 

- ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ
์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ์ฒ˜๋ฆฌ
์—ฌ๋Ÿฌ CPU ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ๋กœ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

- ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ
ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ์ฒ˜๋ฆฌ
ํŒŒ์ด์ฌ์—์„œ๋Š” GIL ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์œผ๋กœ ์ธํ•œ ๋ณ‘๋ ฌ์„ฑ ํ–ฅ์ƒ์€ ์–ด๋ ค์›€

- ์Šค๋ ˆ๋“œ
ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ๋‹จ์œ„
ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๊ณต์œ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ž‘์—… ์ฒ˜๋ฆฌ์˜ ๋ณ‘๋ ฌ์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
๊ทธ๋Ÿฌ๋‚˜, ํ•˜๋‚˜์˜ GIL ์— ์˜ํ•ด ์ œํ•œ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘๋ ฌ์„ฑ ๋ณด์žฅ ์•ˆ๋จ

 

 

์ฆ‰, ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ์ด์šฉํ•œ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, GIL ์— ์˜ํ•ด์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ํ†ตํ•œ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋Š” ์–ด๋ ค์›€์ด ์žˆ๋‹ค.

 

 

 

 

๊น”๋”ํ•œ ๋ฐ์ดํ„ฐ์˜ ์กฐ๊ฑด

 

- ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ชฉ์ ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด table ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

- ์ธก์ •ํ•œ ๊ฐ’์€ row ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

- ๋ณ€์ˆ˜๋Š” columns ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

ํ•ญ์ƒ ์œ„ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์— ๋งž๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋„๋ก ํ•˜์ž.

 

 

 

 

locals

 

locals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ณ€์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

# data : concat_1.csv, concat_2.csv, concat_3.csv
for file in os.listdir("./data"):
    locals()[f'{file.split(".")[0]}'] = pd.read_csv(f"./data/{file}")

 

data ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ์ฝ์–ด์™€์„œ, ํŒŒ์ผ๋“ค์˜ ํ™•์žฅ์ž๋ช…์„ ์ œ์™ธํ•œ ํŒŒ์ผ ์ด๋ฆ„์„ ๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ํ• ๋‹นํ•˜๊ณ , ๊ทธ ๋กœ์ปฌ ๋ณ€์ˆ˜์— ํ•ด๋‹น ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

concat

 

pandas ์˜ concat ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด, series ๋‚˜ df ํ˜•ํƒœ๋ผ๋ฆฌ ํ˜น์€, series ์™€ df ๋ผ๋ฆฌ ์—ฌ๋Ÿฌ ํ˜•ํƒœ๋กœ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.

 

import pandas as pd

row_concat = pd.concat([concat_1, concat_2, concat_3])

df = pd.concat([row_concat, pd.Series(['n1', 'n2', 'n3', 'n4'])])

row_concat
df

์ด๋ ‡๊ฒŒ, DataFrame ๋ผ๋ฆฌ ํ•ฉ์ณ row_concat ์ด๋ผ๋Š” DataFrame ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , DataFrame ๊ณผ Series ํ˜•ํƒœ๋ผ๋ฆฌ ํ•ฉ์ณ ์ƒˆ๋กœ์šด DataFrame์ธ df ๋ฅผ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๊ฒฐ์ธก์น˜ ๊ฐœ์ˆ˜

 

DataFrame ์˜ ๊ฒฐ์ธก์น˜๋ฅผ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ isnull() ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๊ฒฐ์ธก์น˜์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

df.isnull().sum() # ๊ฐ ํ–‰๊ณผ ์—ด์˜ ๊ฒฐ์ธก์น˜ ์ˆ˜

df.isnull().sum().sum() # ์ „์ฒด ๊ฒฐ์ธก์น˜ ์ˆ˜

 

 

 

DataFrame index ์ดˆ๊ธฐํ™”

 

DataFrame ์˜ index ๊ฐ’๋“ค์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ reset_index() ํ†ตํ•ด, ๊ธฐ์กด index ๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ์ž.

 

df.reset_index(drop=True, inplace=True)

 

drop ๊ณผ inplace ๋ฅผ ์ ์šฉํ•˜์—ฌ df ์˜ ๊ธฐ์กด index ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์›๋ณธ df ์— ๋ฐ”๋กœ ์ ์šฉํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

 

์ง€ํ•˜์ฒ  ์ด์šฉ ์ •๋ณด ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ

 

์ง€ํ•˜์ฒ  ์ด์šฉ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด csv ํŒŒ์ผ๋“ค์„, ๊ฐ ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ํ•ฉ์น˜๋„๋ก ํ•˜์ž.

 

import pandas as pd
import numpy as np
import os

total_df = pd.DataFrame()

for file in os.listdir("./subway"):
    temp = pd.read_csv(f"./subway/{file}" , encoding='euc-kr')
    
    if temp.columns.size == 24:
        
        temp['ํ˜ธ์„ '] = np.NaN
        temp['ํ• ์ธ']= np.NaN
        temp['04 ~ 05'] = np.NaN
        temp['02 ~ 03'] = np.NaN
        temp['03 ~ 04'] = np.NaN
        
        temp.columns = ['๋‚ ์งœ', 'ํ˜ธ์„ ', '์—ญ๋ช…', '๊ตฌ๋ถ„', 'ํ• ์ธ', '04 ~ 05', '05 ~ 06', '06 ~ 07',
       '07 ~ 08', '08 ~ 09', '09 ~ 10', '10 ~ 11', '11 ~ 12', '12 ~ 13',
       '13 ~ 14', '14 ~ 15', '15 ~ 16', '16 ~ 17', '17 ~ 18', '18 ~ 19',
       '19 ~ 20', '20 ~ 21', '21 ~ 22', '22 ~ 23', '23 ~ 24', '00 ~ 01',
       '01 ~ 02', '02 ~ 03', '03 ~ 04']
        
    
    else :
        temp.columns = ['๋‚ ์งœ', 'ํ˜ธ์„ ', '์—ญ๋ช…', '๊ตฌ๋ถ„', 'ํ• ์ธ', '04 ~ 05', '05 ~ 06', '06 ~ 07',
       '07 ~ 08', '08 ~ 09', '09 ~ 10', '10 ~ 11', '11 ~ 12', '12 ~ 13',
       '13 ~ 14', '14 ~ 15', '15 ~ 16', '16 ~ 17', '17 ~ 18', '18 ~ 19',
       '19 ~ 20', '20 ~ 21', '21 ~ 22', '22 ~ 23', '23 ~ 24', '00 ~ 01',
       '01 ~ 02', '02 ~ 03', '03 ~ 04']
    
    total_df = pd.concat([total_df, temp])

 

๋จผ์ €, ๊ฐ ํŒŒ์ผ๋“ค๋งˆ๋‹ค columns ์˜ ๊ฐœ์ˆ˜์™€ name ์ด ์ƒ์ดํ•˜๊ธฐ์— ์ด๋ฅผ ๋˜‘๊ฐ™์ด ๋งž์ถฐ์ฃผ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ , DataFrame ์„ concat ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ณ„์† ํ•ฉ์น˜๋ฉฐ ๋ชจ๋“  ํŒŒ์ผ์˜ ์ง€ํ•˜์ฒ  ์ด์šฉ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ„ ํ•˜๋‚˜์˜ DataFrame ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

'Python > [๊ธฐ์ดˆ ๊ฐ•์˜ ์ •๋ฆฌ]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

python ๊ธฐ์ดˆ 13  (0) 2023.03.12
python ๊ธฐ์ดˆ 12  (3) 2023.03.06
python ๊ธฐ์ดˆ 11  (0) 2023.03.03
python ๊ธฐ์ดˆ 10  (0) 2023.03.03
python ๊ธฐ์ดˆ 9  (0) 2023.03.01