๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

๐Ÿ’ป Programming/Python14

[python] ํŒŒ์ด์ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ | joblib ์‚ฌ์šฉ๋ฒ• | ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ | ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ joblib์€ ํŒŒ์ด์ฌ์—์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. Parallel ํด๋ž˜์Šค Parallel ํด๋ž˜์Šค๋Š” ๋ณ‘๋ ฌ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ - n_jobs n_jobs ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ž‘์—…์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ CPU์˜ ์ฝ”์–ด ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์ด๋‹ค. n_jobs=-1์€ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ฝ”์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ - backend ๋ฐฑ์—”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•˜๋ฉฐ, loky ๋ฐฑ์—”๋“œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. loky (๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ) loky๋Š” ํŒŒ์ด์ฌ์˜ concurrent.futures๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐฑ์—”๋“œ๋กœ, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ํ™œ์šฉ ํ”„๋กœ์„ธ์Šค ํ’€๋ง์„ ํ†ตํ•ด ํšจ.. 2024. 1. 19.
[python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Process ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Process | ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ• ๋‹น [python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Pool ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Pool | python ์†๋„ ํ–ฅ์ƒ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋ฉฐ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  (Inter-Process Co mvje.tistory.com ์œ„ ํฌ์ŠคํŒ…์—์„œ ํŒŒ์ด์ฌ์œผ๋กœ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด multiprocessing.Pool ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ดค๋‹ค. ์ด๋ฒˆ์—๋Š” multiprocessing.Process๋ฅผ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ๋ฐฉ๋ฒ•๊ณผ Pool, Process ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. multiprocessing.Pool๊ณผ multiprocessing.Process๋Š”.. 2024. 1. 7.
[python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Pool ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Pool | python ์†๋„ ํ–ฅ์ƒ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋ฉฐ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  (Inter-Process Communication, IPC) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ๋ชจ๋“ˆ์€ multiprocessing์ด๋‹ค. multiprocessing ๋ชจ๋“ˆ์€ ํŒŒ์ด์ฌ์—์„œ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, threading ๋ชจ๋“ˆ๊ณผ ๋‹ฌ๋ฆฌ Global Interpreter Lock (GIL)์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์œผ๋ฏ€๋กœ CPU-bound ์ž‘์—…์— ํšจ๊ณผ์ ์ด๋‹ค. multiprocessing.Pool multiprocessing.P.. 2024. 1. 7.
[pandas] ํŠน์ • ์ปฌ๋Ÿผ์—์„œ ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ํ–‰ ์ฐพ๊ธฐ | str.contains ํŒ๋‹ค์Šค์—์„œ๋Š” ํŠน์ • ์ปฌ๋Ÿผ์—์„œ ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ํ–‰์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด str.contains() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. str.contains() ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• contains_apple = df[df['์ปฌ๋Ÿผ A'].str.contains('๊ฐ€๋‚˜๋‹ค๋ผ')] "์ปฌ๋Ÿผ A"์—์„œ "๊ฐ€๋‚˜๋‹ค๋ผ"๊ฐ€ ํฌํ•จ๋œ ํ–‰์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉ contains_pattern = df[df['A'].str.contains('์‚ฌ๊ณผ|๋ฐ”๋‚˜๋‚˜', regex=True)] regex=True ๋กœ ์„ค์ •ํ•˜์—ฌ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ํŒจํ„ด์ด๋‚˜ ๋ฌธ์ž์—ด์„ ์ •๊ทœ ํ‘œํ˜„์‹์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„ ์˜ˆ์‹œ๋Š” '์‚ฌ๊ณผ' ๋˜๋Š” '๋ฐ”๋‚˜๋‚˜'๊ฐ€ ํฌํ•จ๋œ.. 2023. 11. 17.
[pandas] ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ๊ณต๋ฐฑ์ธ ํ–‰์„ ์ œ์™ธํ•˜๋Š” ๋ฐฉ๋ฒ• | dropna ํŒ๋‹ค์Šค์˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์—์„œ ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ๊ณต๋ฐฑ(๋˜๋Š” ๋นˆ ๋ฌธ์ž์—ด)์ธ ํ–‰์„ ์ œ์™ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ณต๋ฐฑ์ธ ํ–‰ ์ œ๊ฑฐ import pandas as pd # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ data = {'A': [1, 2, 3, 4], 'B': ['apple', 'banana', '', 'orange']} df = pd.DataFrame(data) # 'B' ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ๊ณต๋ฐฑ์ธ ํ–‰ ์ œ์™ธ df_no_empty_values = df[df['B'].str.strip() != ''] # ๊ฒฐ๊ณผ ์ถœ๋ ฅ print(df_no_empty_values) ์œ„ ์ฝ”๋“œ์—์„œ df['B'].str.strip() != '' ๋ถ€๋ถ„์€ 'B' ์ปฌ๋Ÿผ์˜ ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด ์ขŒ์šฐ์˜ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋นˆ ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ณต๋ฐฑ์ธ.. 2023. 11. 17.
[pandas] ํŠน์ • ์ปฌ๋Ÿผ์—์„œ ์ค‘๋ณต๋œ ๊ฐ’ ์ œ๊ฑฐ | drop_duplicates ํŒ๋‹ค์Šค ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์—์„œ ๊ฐ„ํ˜น ํŠน์ • ์ปฌ๋Ÿผ์— ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋งŒ์•ฝ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰ ์ค‘ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ํ–‰์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ค‘๋ณต๋œ ํ–‰์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. import pandas as pd # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ data = {'column_name': [1, 2, 3, 1, 2, 4]} df = pd.DataFrame(data) # ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰ ์ค‘ ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ํ–‰์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ค‘๋ณต๋œ ํ–‰ ์ œ๊ฑฐ df_no_duplicates = df.drop_duplicates(subset='column_name', keep='first') # ๊ฒฐ๊ณผ ์ถœ๋ ฅ print(df_no_duplicates) # ํ–‰ ๊ฐœ์ˆ˜ ๋น„๊ต print(len(df.. 2023. 11. 17.
728x90