๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ)- Python Part 5 (Q81 to Q100)

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ)- Python Part 5 (Q81 to Q100)์˜ ํ•ด์„ค์ž…๋‹ˆ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_product๋ผ๋Š” pandas DataFrame์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

fillna() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ unit_price์™€ unit_cost ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ๊ฐ ์—ด์˜ ๋ฐ˜์˜ฌ๋ฆผ๋œ ํ‰๊ท ๊ฐ’์œผ๋กœ ์ฑ„์šด๋‹ค. ๋ฐ˜์˜ฌ๋ฆผ๋œ ํ‰๊ท ๊ฐ’์€ NumPy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ np.round() ๋ฐ np.nanmean() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋˜๋ฉฐ, fillna() ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์ „์„ ์ธ์ˆ˜๋กœ ๋ฐ›๊ณ , ํ‚ค๋Š” ์—ด ์ด๋ฆ„, ๊ฐ’์€ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•œ ๊ฐ’์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  isnull() ๋ฉ”์„œ๋“œ๋กœ DataFrame์— ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , sum() ๋ฉ”์„œ๋“œ๋กœ ๊ฐ ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์—…๋ฐ์ดํŠธ๋œ DataFrame df_product_2์˜ ๊ฐ ์—ด์˜ ๊ฒฐ์†๊ฐ’ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์—…๋ฐ์ดํŠธ๋œ DataFrame df_product_2๋Š” unit_price์™€ unit_cost ์—ด์˜ ๊ฒฐ์†๊ฐ’์ด ๊ฐ๊ฐ ๋ฐ˜์˜ฌ๋ฆผ๋œ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์œผ๋ฉฐ, ๋‘ ๋ฒˆ์งธ ์ค„์˜ ์ถœ๋ ฅ์€ fillna ์ž‘์—… ํ›„ DataFrame์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ฒฐ์†๊ฐ’์ด ๋‚จ์•˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.
ย 
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sklearn.impute ๋ชจ๋“ˆ์—์„œ SimpleImputer ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, SimpleImputer ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๊ฒฐ์†๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

imp_mean์ด๋ผ๋Š” SimpleImputer ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปดํ“จํ„ฐ๋Š” ๊ฒฐ์†๊ฐ’(์ด ๊ฒฝ์šฐ np.nan์œผ๋กœ ํ‘œํ˜„๋จ)์„ ํ•ด๋‹น ์—ด์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฒŒ ๋œ๋‹ค. ์ธํ’‹ํ…Œ์ด์…˜์˜ ์ „๋žต์€ 'mean'๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

fit_transform() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_product DataFrame์˜ unit_price ์—ด๊ณผ unit_cost ์—ด์— SimpleImputer ๊ฐ์ฒด๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ฒฐ์†๊ฐ’์ด ์ž…๋ ฅ๋œ ๋ณ€ํ™˜ ํ›„ DataFrame์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

copy() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_product_2๋ผ๋Š” ์›๋ณธ df_product DataFrame์˜ ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•œ๋‹ค.

df_product_2์˜ unit_price์™€ unit_cost ์—ด์„ imp_values.round()๋ฅผ ํ†ตํ•ด ์ž…๋ ฅํ•œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. round() ๋ฉ”์„œ๋“œ๋Š” ์ž…๋ ฅ๋œ ๊ฐ’์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

isnull() ๋ฉ”์„œ๋“œ๋กœ DataFrame์— ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , sum() ๋ฉ”์„œ๋“œ๋กœ ๊ฐ ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์—…๋ฐ์ดํŠธ๋œ DataFrame df_product_2์˜ ๊ฐ ์—ด์˜ ๊ฒฐ์†๊ฐ’ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ด ์ฝ”๋“œ์˜ ์ตœ์ข… ์ถœ๋ ฅ์€ ๊ฐ ์—ด์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ๊ฒฐ์†๊ฐ’์„ ์ž„๋ฒ ๋“œํ•œ ํ›„ ์—…๋ฐ์ดํŠธ๋œ df_product_2 DataFrame์˜ ๊ฒฐ์†๊ฐ’ ์ˆ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํŠนํžˆ ๊ฒฐ์†๊ฐ’ ์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์˜ ๊ฒฐ์† ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” ๋จผ์ € "df_product"๋ผ๋Š” DataFrame์˜ "unit_price"์™€ "unit_cost"๋ผ๋Š” ๋‘ ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ์ฑ„์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง„ fillna ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์†๊ฐ’์„ ์ฑ„์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” "unit_price"์™€ "unit_cost"๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋”•์…”๋„ˆ๋ฆฌ์ด๋ฉฐ, ๊ฐ๊ฐ ํ•ด๋‹น ๊ฐ’์— ๋งคํ•‘๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’๋“ค์€ DataFrame์˜ ๊ฐ ์—ด์— ์ ์šฉ๋˜๋Š” NumPy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ nanmedian ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋˜๋ฉฐ, nanmedian์€ NaN์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ๊ฒฐ์†๊ฐ’์„ ๋ฌด์‹œํ•˜๊ณ  ์—ด์˜ ์ค‘์•™๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.

์ด ์ฝ”๋“œ์—์„œ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ƒ๋žต๋˜์–ด DataFrame์˜ ๋‹ค๋ฅธ ์—ด์˜ ๊ฒฐ์†๊ฐ’์€ ๊ทธ๋Œ€๋กœ ๋‚จ๊ฒŒ ๋œ๋‹ค.

์ด ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” "df_product_3"์ด๋ผ๋Š” ์ƒˆ๋กœ์šด DataFrame์ด ๋œ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ์—์„œ๋Š” isnull() ๋ฉ”์„œ๋“œ์™€ sum() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ "df_product_3"์˜ DataFrame์— ์—ฌ์ „ํžˆ ๊ฒฐ์†๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” DataFrame์˜ ๊ฐ ์—ด์— ๋ˆ„๋ฝ๋œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” Series ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‘ ์—ด์— ๋ชจ๋‘ ๊ฒฐ์†๊ฐ’์ด ์—†๋‹ค๊ณ  ์ถœ๋ ฅ๋˜๋ฉด fillna์˜ ์กฐ์ž‘์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” scikit-learn์˜ SimpleImputer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DataFrame "df_product"์˜ "unit_price"์™€ "unit_cost" ์—ด์˜ ๊ฒฐ์†๊ฐ’์— ๋Œ€ํ•œ ์ธํ’‹์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฝ”๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ "imp_mean"์ด๋ผ๋Š” ์ด๋ฆ„์˜ SimpleImputer ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์žˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์ฃผ์–ด์ง„ ์ „๋žต์œผ๋กœ ๊ฒฐ์†๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ ๊ฒฐ์†๋˜์ง€ ์•Š์€ ๊ฐ’์˜ ์ค‘๊ฐ„๊ฐ’์ด๋ฉฐ, missing_values ์ธ์ˆ˜๋Š” ๊ฒฐ์†์œผ๋กœ ๊ฐ„์ฃผํ•  ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ NaN์ด ๋œ๋‹ค.

์ฝ”๋“œ์˜ ๋‘ ๋ฒˆ์งธ ์ค„์€ "df_product" DataFrame์˜ "unit_price"์™€ "unit_cost" ์—ด์˜ ๊ฒฐ์†๊ฐ’์„ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด "imp_mean" ๊ฐ์ฒด์˜ fit_transform ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์ž…๋ ฅ๋œ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” "imp_values"๋ผ๋Š” ์ด๋ฆ„์˜ NumPy ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ์˜ ์„ธ ๋ฒˆ์งธ ์ค„์€ "df_product" DataFrame์˜ ์‚ฌ๋ณธ์„ "df_product_3"์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋Š” ์›๋ณธ DataFrame์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ์˜ ๋„ค ๋ฒˆ์งธ ์ค„์€ "df_product_3" DataFrame์˜ "unit_price"์™€ "unit_cost" ์ปฌ๋Ÿผ์— imp_values ๋ฐฐ์—ด์— ๋Œ€ํ•œ round() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๊ฐ’์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ค„์€ isnull() ๋ฉ”์„œ๋“œ์™€ sum() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 'df_product_3' DataFrame์— ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ถœ๋ ฅ์— ๋‘ ์—ด ๋ชจ๋‘ ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด, ์ธํ’‹ ์—ฐ์‚ฐ์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” DataFrame "df_product"์˜ "unit_price"์™€ "unit_cost" ์—ด์˜ ๊ฒฐ์†๋œ ๊ฐ’์„ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ค‘์•™๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ’‹ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ–‰์€ DataFrame "df_product"๋ฅผ "category_small_cd" ์—ด๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๊ฐ ๊ทธ๋ฃน์˜ "unit_price"์™€ "unit_cost"์˜ ์ค‘์•™๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์™„์„ฑ๋œ DataFrame์˜ ์ด๋ฆ„์€ "df_tmp"์ด๋ฉฐ, ์„ธ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ€์ง„๋‹ค." category_small_cd", "median_price", "median_cost"์˜ ์„ธ ๊ฐœ์˜ ์—ด์„ ๊ฐ€์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์€ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ merge() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "category_small_cd" ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ "df_product"์™€ "df_tmp" DataFrame์„ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ณผ DataFrame์ธ "df_product_4"๋Š” "df_product"์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ๊ณผ "df_tmp"์˜ "median_price"์™€ "median_cost" ์ปฌ๋Ÿผ์„ ํฌํ•จํ•œ๋‹ค.

3๋ฒˆ์งธ ์ค„์€ "df_product_4"์— "unit_price"๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•œ๋‹ค." "unit_price"์™€ "median_price" ์—ด์— ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ๋‹ค. ๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” "unit_price" ์—ด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”์ง€(์ฆ‰, NaN) ํ™•์ธํ•˜๊ณ , ์กด์žฌํ•œ๋‹ค๋ฉด "median_price"์˜ ๋ฐ˜์˜ฌ๋ฆผ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ "unit_price"์˜ ์›๋ž˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ์ž‘์—…์„ ํ†ตํ•ด "unit_price" ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ์ฑ„์šด๋‹ค.

4๋ฒˆ์งธ ์ค„์€ "df_product_4"์— "unit_cost"๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค." "unit_cost"์™€ "median_cost" ์—ด์— ์œ ์‚ฌํ•œ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋œ๋‹ค. ์ด ์ž‘์—…์€ "unit_cost" ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด๋‹ค.

๋งˆ์ง€๋ง‰ ํ–‰์€ isnull() ๋ฉ”์„œ๋“œ์™€ sum() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ "df_product_4" DataFrame์— ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ถœ๋ ฅ์— ๋‘ ์—ด ๋ชจ๋‘ ๊ฒฐ์ธก๊ฐ’์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด, ์ธํ’‹ ์—ฐ์‚ฐ์ด ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋œ๋‹ค.

ย 

ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” DataFrame "df_product"์˜ "unit_price"์™€ "unit_cost" ์—ด์˜ ๊ฒฐ์†๋œ ๊ฐ’์„ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ค‘์•™๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ’‹ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ–‰์€ DataFrame "df_product"๋ฅผ "category_small_cd" ์—ด๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๊ฐ ๊ทธ๋ฃน์˜ "unit_price"์™€ "unit_cost"์˜ ์ค‘์•™๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์™„์„ฑ๋œ DataFrame์˜ ์ด๋ฆ„์€ "df_tmp"์ด๋ฉฐ, ์„ธ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ€์ง„๋‹ค." category_small_cd", "median_price", "median_cost"์˜ ์„ธ ๊ฐœ์˜ ์—ด์„ ๊ฐ€์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์€ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ merge() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "category_small_cd" ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ "df_product"์™€ "df_tmp" DataFrame์„ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ณผ DataFrame์ธ "df_product_4"๋Š” "df_product"์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ๊ณผ "df_tmp"์˜ "median_price"์™€ "median_cost" ์ปฌ๋Ÿผ์„ ํฌํ•จํ•œ๋‹ค.

3๋ฒˆ์งธ ํ–‰์€ "df_product_4"์— Pandas์˜ mask() ๋ฉ”์„œ๋“œ๋กœ ๊ณ„์‚ฐ๋œ "unit_price"๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์œผ๋กœ "unit_price" ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ์ฑ„์›Œ์ง„๋‹ค.

4๋ฒˆ์งธ ์ค„์€ "df_product_4"์— "unit_cost"๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ๋งŒ๋“ค๊ณ  "unit_price"์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด ์ž‘์—…์„ ํ†ตํ•ด "unit_cost" ์—ด์˜ ๊ฒฐ์†๋œ ๊ฐ’์„ ์ฑ„์šด๋‹ค.

๋งˆ์ง€๋ง‰ ํ–‰์€ isnull() ๋ฉ”์„œ๋“œ์™€ sum() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ "df_product_4"์˜ DataFrame์— ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ถœ๋ ฅ์— ๋‘ ์—ด ๋ชจ๋‘ ๊ฒฐ์†๊ฐ’์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด, ์ธํ’‹ ์—ฐ์‚ฐ์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
ย 
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” DataFrame "df_product"์˜ "unit_price"์™€ "unit_cost" ์—ด์˜ ๊ฒฐ์†๋œ ๊ฐ’์„ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ค‘์•™๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ’‹ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ค„์€ ์›๋ž˜ DataFrame "df_product"์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  "df_product_4"๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ™์ธ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์€ for ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ 'unit_price'์™€ 'unit_cost' ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ค„์€ ๊ฐ ์ปฌ๋Ÿผ์˜ ๊ฒฐ์†๊ฐ’์„ ์ฑ„์šฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. fillna() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์—ด์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ค‘๊ฐ„๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 'df_product_4'๋ฅผ 'category_small_cd' ์—ด๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  transform() ๋ฉ”์„œ๋“œ๋กœ ๊ฐ ์—ด์˜ ์ค‘์•™๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ˆ˜ํ–‰๋˜๋ฉฐ, round() ๋ฉ”์„œ๋“œ๋Š” ์ค‘์•™๊ฐ’์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

4๋ฒˆ์งธ ์ค„์€ isnull() ๋ฉ”์„œ๋“œ์™€ sum() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 'df_product_4' DataFrame์— ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ถœ๋ ฅ์—์„œ ๋‘ ์—ด ๋ชจ๋‘ ๊ฒฐ์†๊ฐ’์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด, ์ธํ’‹ ์—ฐ์‚ฐ์ด ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์ด ์ฝ”๋“œ๋Š” ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ค‘์•™๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ DataFrame "df_product"์˜ "unit_price"์™€ "unit_cost" ์—ด์˜ ๊ฒฐ์†๊ฐ’์„ ์ž…๋ ฅํ•œ ํ›„, ์ž…๋ ฅํ•œ ๊ฐ’์œผ๋กœ ์ƒˆ๋กœ์šด DataFrame "df_product_4"๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ธํ’‹์€ ์›๋ณธ DataFrame์„ ๋ณต์‚ฌํ•˜์—ฌ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ค‘์•™๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๊ฐ ์—ด์˜ ๊ฒฐ์†๊ฐ’์„ ์ฑ„์šฐ๊ณ  ๊ฒฐ์†๊ฐ’์ด ๋‚จ์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_receipt๋ผ๋Š” Pandas์˜ DataFrame์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ 2019๋…„ ๊ณ ๊ฐ์˜ ์ด ๋งค์ถœ ๋Œ€๋น„ ๋งค์ถœ ๋น„์œจ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ด ์ฝ”๋“œ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ–‰์€ df_receipt_2019๋ผ๋Š” ์ƒˆ๋กœ์šด DataFrame์„ ์ƒ์„ฑํ•˜๊ณ , 2019๋…„(20190101 <= sales_ymd <= 20191231)์˜ ๋งค์ถœ๋งŒ ํฌํ•จํ•˜๋„๋ก df_receipt์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  customer_id๋กœ ํ–‰์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ ๊ทธ๋ฃน์˜ ๊ธˆ์•ก ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ DataFrame์€ customer_id์™€ amount_2019์˜ ๋‘ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์€ df_receipt_all์ด๋ผ๋Š” ์ƒˆ๋กœ์šด DataFrame์„ ๋งŒ๋“ค๊ณ , df_receipt์˜ ํ–‰์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ ๊ทธ๋ฃน์˜ ๊ธˆ์•ก ์ปฌ๋Ÿผ์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์™„์„ฑ๋œ DataFrame์€ customer_id์™€ amount_all ๋‘ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

์„ธ ๋ฒˆ์งธ ํ–‰์€ df_sales_rate๋ผ๋Š” ์ƒˆ๋กœ์šด DataFrame์„ ๋งŒ๋“ค์–ด df_customer์˜ customer_id ์—ด์„ df_receipt_2019์™€ df_receipt_all์˜ amount_2019 ์—ด๊ณผ amount_all ์—ด์— ๊ฐ๊ฐ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, df_customer์˜ ๋ชจ๋“  ํ–‰์ด ๊ฒฐ๊ณผ DataFrame์— ํฌํ•จ๋˜์ง€๋งŒ, df_receipt_2019์™€ df_receipt_all์˜ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ํฌํ•จ๋œ๋‹ค. ๊ฒฐ๊ณผ DataFrame์—๋Š” customer_id, amount_2019, amount_all์˜ ์„ธ ๊ฐœ์˜ ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

4๋ฒˆ์งธ์™€ 5๋ฒˆ์งธ ํ–‰์—์„œ๋Š” amount_2019์™€ amount_all ์—ด์—์„œ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ 0์œผ๋กœ ์ฑ„์šด๋‹ค.

6ํ–‰์€ amount_2019์™€ amount_all ์—ด์— ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ df_sales_rate์— amount_rate๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ฮป ํ•จ์ˆ˜๋Š” amount_2019๊ฐ€ 0์ธ ๊ฒฝ์šฐ 0์„, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ amount_2019์™€ amount_all์˜ ๋น„์œจ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ column amount_rate ์—ด์€ ๊ฐ ๊ณ ๊ฐ์˜ ์ด ๋งค์ถœ๊ณผ ๋น„๊ตํ•˜์—ฌ 2019๋…„์˜ ๋งค์ถœ ๋น„์œจ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

7๋ฒˆ์งธ ์ค„์€ amount_rate ์—ด์˜ ๊ฒฐ์†๊ฐ’์„ 0์œผ๋กœ ์ฑ„์šด๋‹ค.

8ํ–‰์€ df_sales_rate ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์–‘์ˆ˜ amount_rate๋ฅผ ๊ฐ€์ง„ ๊ณ ๊ฐ๋งŒ ํฌํ•จํ•˜๋„๋ก ํ•˜๊ณ , DataFrame์„ amount_rate๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋“ค์€ ์ด ๋งค์ถœ ๋Œ€๋น„ 2019๋…„ ๋งค์ถœ ๋น„์œจ์ด ๊ฐ€์žฅ ๋†’์€ ์ƒ์œ„ 10๋ช…์˜ ๊ณ ๊ฐ์ด๋‹ค.

ย 

ย 

ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_customer_1, df_store, df_tmp๋ผ๋Š” 3๊ฐœ์˜ Pandas DataFrame์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ง€๋ฆฌ์  ๊ณต๊ฐ„ ๊ณ„์‚ฐ๊ณผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ด ์ฝ”๋“œ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ค„์€ calc_distance๋ผ๋Š” ํŒŒ์ด์ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  x1๊ณผ y1(์  1์˜ ์œ„๋„์™€ ๊ฒฝ๋„), x2์™€ y2(์  2์˜ ์œ„๋„์™€ ๊ฒฝ๋„)๋ผ๋Š” 4๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ทจํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋ฐ˜๊ฒฝ 6371km์˜ ๊ตฌํ˜• ์ง€๊ตฌ๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ํ—ˆ๋ฒ„์‹ ์˜ ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ํ‚ฌ๋กœ๋ฏธํ„ฐ ๋‹จ์œ„๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ฒฐ๊ณผ๋Š” distance๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์€ df_customer_1๊ณผ df_store๋ฅผ ๊ฐ๊ฐ application_store_cd์™€ store_cd ์ปฌ๋Ÿผ์œผ๋กœ ๋ณ‘ํ•ฉํ•˜์—ฌ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด DataFrame์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, ๋‘ DataFrame์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰๋งŒ ๊ฒฐ๊ณผ DataFrame์— ํฌํ•จ๋œ๋‹ค. ๊ฒฐ๊ณผ DataFrame์€ ๋‘ DataFrame์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ฃผ์†Œ_x๋Š” customer_address๋กœ, address_y๋Š” store_address๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ๋ช‡ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๋” ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ค„์€ .apply() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ m_latitude, m_longitude, latitude, longitude ์—ด์— calc_distance ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ df_tmp์— distance๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค. .apply() ๋ฉ”์„œ๋“œ๋Š” axis=1 ์ธ์ž์™€ ํ•จ๊ป˜ ํ•จ์ˆ˜๋ฅผ ํ–‰ ๋‹จ์œ„๋กœ ์ ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ฒฐ๊ณผ ๊ฑฐ๋ฆฌ ๊ฐ’์€ distance ์—ด์— ์ €์žฅ๋œ๋‹ค.

4๋ฒˆ์งธ ์ค„์€ ์ด์ค‘ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp์—์„œ ์ปฌ๋Ÿผ์˜ ์ผ๋ถ€(customer_id, customer_address, store_address, and distance)๋ฅผ ์„ ํƒํ•˜๊ณ , .head(10) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ๊ฐ ๋ฐ ๋งค์žฅ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ณ‘ํ•ฉ๋œ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๊ณผ ๊ทธ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ย 

ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_customer_1, df_store, df_tmp๋ผ๋Š” 3๊ฐœ์˜ Pandas DataFrame์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ง€๋ฆฌ์  ๊ณต๊ฐ„ ๊ณ„์‚ฐ๊ณผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ด ์ฝ”๋“œ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ค„์€ calc_distance_numpy๋ผ๋Š” ํŒŒ์ด์ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  x1๊ณผ y1(์  1์˜ ์œ„๋„์™€ ๊ฒฝ๋„), x2์™€ y2(์  2์˜ ์œ„๋„์™€ ๊ฒฝ๋„)๋ผ๋Š” 4๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ทจํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋ฐ˜๊ฒฝ 6371km์˜ ๊ตฌํ˜• ์ง€๊ตฌ๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ํ—ˆ๋ฒ„์‹ ์˜ ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ํ‚ฌ๋กœ๋ฏธํ„ฐ ๋‹จ์œ„๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด ๊ตฌํ˜„์—์„œ๋Š” NumPy ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ๊ตฌํ˜„๋ณด๋‹ค ๋” ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ–‰์€ df_customer_1๊ณผ df_store๋ฅผ ๊ฐ๊ฐ application_store_cd์™€ store_cd ์—ด๋กœ ๋ณ‘ํ•ฉํ•˜์—ฌ df_tmp๋ผ๋Š” ์ƒˆ๋กœ์šด DataFrame์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‘ DataFrame์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰๋งŒ ๊ฒฐ๊ณผ DataFrame์— ํฌํ•จ๋œ๋‹ค. ๊ฒฐ๊ณผ DataFrame์€ ๋‘ DataFrame์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ฃผ์†Œ_x๋Š” customer_address๋กœ, address_y๋Š” store_address๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ ๋ช‡ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๋” ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ค„์€ df_tmp์˜ 4๊ฐœ ์—ด์— ๋Œ€ํ•ด NumPy์˜ ๋ฐฐ์—ด ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ calc_distance_numpy ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ distance๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๊ตฌํ˜„์—์„œ๋Š” .apply() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  NumPy์˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์š”์†Œ๋ณ„ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ๊ฑฐ๋ฆฌ ๊ฐ’์€ distance ์—ด์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

4๋ฒˆ์งธ ์ค„์€ ์ด์ค‘ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp์—์„œ ์ปฌ๋Ÿผ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ(customer_id, customer_address, store_address, and distance)์„ ์„ ํƒํ•˜๊ณ  .head(10) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ๊ฐ ๋ฐ ๋งค์žฅ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ณ‘ํ•ฉ๋œ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๊ณผ ๊ทธ ์‚ฌ์ด์˜ ํ•ด๋‹น ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

df_receipt ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ ๊ธˆ์•ก ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ df_receipt_tmp์— ์ €์žฅ๋œ๋‹ค.

customer_id ์—ด์„ ๊ธฐ์ค€์œผ๋กœ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ df_receipt_tmp ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ ๊ฒฐํ•ฉํ•œ๋‹ค. ์ด๊ฒƒ์€ ์™ผ์ชฝ ๊ฒฐํ•ฉ์ด๋ฏ€๋กœ df_customer์˜ ๋ชจ๋“  ๊ณ ๊ฐ์ด ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer_u์— ํฌํ•จ๋œ๋‹ค.

sum_amount ์ปฌ๋Ÿผ์˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์„ 0์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

df_customer_u์˜ ํ–‰์„ sum_amount๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ, customer_id๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

customer_name ์—ด๊ณผ postal_cd ์—ด์„ ๊ธฐ์ค€์œผ๋กœ df_customer_u์˜ ์ค‘๋ณต์„ ์‚ญ์ œํ•˜๊ณ  ์ค‘๋ณต์˜ ์ฒซ ๋ฒˆ์งธ ์ถœํ˜„๋งŒ ๋‚จ๊ฒจ๋‘”๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด df_customer_u๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.

์›๋ž˜ df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ํ–‰ ์ˆ˜ (df_customer_cnt), ์—…๋ฐ์ดํŠธ ํ›„ df_customer_u ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ํ–‰ ์ˆ˜ (df_customer_u_cnt), ๋‘˜ ์‚ฌ์ด์˜ ์ฐจ์ด (diff)๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ์ •๋ฆฌ์™€ ์กฐ์ž‘์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_customer_u๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ์ด ๊ตฌ๋งค ๊ธˆ์•ก(sum_amount)์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ๊ธˆ์•ก์— ๋”ฐ๋ผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ณ , customer_name๊ณผ postal_cd ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต๋˜๋Š” ํ•ญ๋ชฉ์€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_customer์™€ df_customer_u๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ด๋ฆ„๊ณผ ์šฐํŽธ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์œ ํ•œ ๊ณ ๊ฐ์„ ์‹๋ณ„ํ•˜๊ณ  ์ผ์น˜์‹œํ‚จ๋‹ค.

๋ณ‘ํ•ฉ๋œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ df_customer_n์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ €์žฅ๋˜๋ฉฐ, merge ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ณ‘ํ•ฉํ•˜๊ณ , on=['customer_name', 'postal_cd']๋ผ๋Š” ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋‘ ์—ด์— ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ‘ํ•ฉํ•  ๊ฒƒ์„ ์ง€์ •ํ•œ๋‹ค.

๋ณ‘ํ•ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” customer_id_x์™€ customer_id_y๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๊ณ ๊ฐ ID ์ปฌ๋Ÿผ์ด ํฌํ•จ๋œ๋‹ค. ํ˜ผ๋ž€์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด rename ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์—ด์˜ ์ด๋ฆ„์„ ๊ฐ๊ฐ customer_id์™€ integration_id๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

๋งˆ์ง€๋ง‰ ํ–‰์—์„œ customer_id ์—ด์˜ ๊ณ ์œ ํ•œ ๊ณ ๊ฐ ID ์ˆ˜์™€ integration_id ์—ด์˜ ๊ณ ์œ ํ•œ ๊ณ ๊ฐ ID ์ˆ˜๋ฅผ ๋น„๊ตํ•œ๋‹ค. ์ฐจ์ด๊ฐ€ 0์ด๋ฉด ๋ณ‘ํ•ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ค‘๋ณต๋œ ๊ณ ๊ฐ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์ด๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด๋ฆ„๊ณผ ์šฐํŽธ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ณ ๊ฐ์ด ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๊ณ  ๊ทธ ID๊ฐ€ ์ค‘๋ณต๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” ๊ฐ ๊ณ ๊ฐ์˜ ๋งค์ถœ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ํ›ˆ๋ จ ๋ฐ ํ…Œ์ŠคํŠธ ๋ถ„ํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋จผ์ € df_receipt dataframe์„ customer_id๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  amount ์—ด์„ ํ•ฉ์‚ฐํ•˜์—ฌ ๊ฐ ๊ณ ๊ฐ์˜ ๋งค์ถœ ์ •๋ณด๋ฅผ ์ง‘๊ณ„ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์–ป์€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ df_sales_customer์— ์ €์žฅ๋œ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋งค๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ณ ๊ฐ(์ฆ‰, ๊ธˆ์•ก์ด 0์ธ ๊ณ ๊ฐ)์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  df_sales_customer๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ด๋“ค ๊ณ ๊ฐ๋งŒ ํฌํ•จํ•˜๋„๋ก ํ•œ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ df_sales_customer์˜ customer_id ์ปฌ๋Ÿผ๊ณผ df_customer์˜ ๋‚ด๋ถ€ ๊ฒฐํ•ฉ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ตฌ๋งค๋ฅผ ํ•œ ๊ณ ๊ฐ๋งŒ ์œ ์ง€ํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ df_tmp์— ์ €์žฅ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ scikit-learn์˜ train_test_split ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_tmp๋ฅผ ํ›ˆ๋ จ ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋ถ„ํ• ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ํฌ๊ธฐ๋Š” 0.2, ๋žœ๋ค ์ƒํƒœ๋Š” 71์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ›ˆ๋ จ ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ ์„ธํŠธ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์˜ ๋น„์œจ์„ ํ‘œ์‹œํ•œ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

'sales_ymd', 'amount', 'sales_ym' ์ปฌ๋Ÿผ์„ ๊ฐ€์ง„ df_ts_amount dataframe์„ ์ƒ์„ฑํ•˜๊ณ , sales_ym ์ปฌ๋Ÿผ์€ sales_ymd ์ปฌ๋Ÿผ์˜ ์ฒซ 6๊ธ€์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.

df_ts_amount ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ 'sales_ym' ์ปฌ๋Ÿผ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ , 'sum' ํ•จ์ˆ˜๋กœ 'amount' ์ปฌ๋Ÿผ์„ ์ง‘๊ณ„ํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์žฌ์„ค์ •ํ•œ๋‹ค. ์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ ๋™์ผํ•œ ๋ณ€์ˆ˜ 'df_ts_amount'์— ์ €์žฅ๋œ๋‹ค.

split_data ํ•จ์ˆ˜๋Š” df, train size, test size, slide window, start point๋ฅผ ์ธ์ˆ˜๋กœ ์ทจํ•˜๋ฉฐ, split_data ํ•จ์ˆ˜๋Š” train ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ test ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

split_data ํ•จ์ˆ˜๋Š” df_ts_amount ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ train ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ test ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ถ„ํ• ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ๋‹ค๋ฅธ ์ธ์ˆ˜๋กœ ์„ธ ๋ฒˆ ํ˜ธ์ถœ๋œ๋‹ค. ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์™€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์„ธ ์„ธํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด df_train_1, df_test_1, df_train_2, df_test_2, df_train_3, df_test_3์— ์ €์žฅ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๋ชฉ์ ์€ ์‹œ๊ณ„์—ด ์˜ˆ์ธก ๋ชจ๋ธ์˜ ํ›ˆ๋ จ ์„ธํŠธ์™€ ๊ฒ€์ฆ ์„ธํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„ธํŠธ๋กœ ๋ถ„ํ• ํ•˜๋ฉด ๋ชจ๋ธ์„ ๋‹ค๋ฅธ ๊ธฐ๊ฐ„ ๋™์•ˆ ํ•™์Šต์‹œํ‚ค๊ณ  ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฒ„ํ”ผํŒ…์„ ํ”ผํ•˜๊ณ  ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” pandas์˜ DataFrame df_ts_amount์— ๋Œ€ํ•ด ์‹œ๊ณ„์—ด ๊ต์ฐจ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, sklearn.model_selection ๋ชจ๋“ˆ์˜ TimeSeriesSplit ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 3๊ฐœ์˜ ํ›ˆ๋ จ๊ณผ ํ…Œ์ŠคํŠธ ๋ถ„ํ• ์„ ์ƒ์„ฑํ•˜์—ฌ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

TimeSeriesSplit์€ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์„ ๋ถ„ํ• ํ•˜๊ธฐ ์œ„ํ•œ ํ›ˆ๋ จ/ํ…Œ์ŠคํŠธ ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ต์ฐจ ๊ฒ€์ฆ๊ธฐ์ด๋ฉฐ, 4๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

n_splits: ๋ถ„ํ•  ํšŸ์ˆ˜
max_train_size: ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ
test_size: ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ
gap: ์ƒˆ๋กœ์šด ๋ถ„ํ• ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๊ฑด๋„ˆ๋›ธ ์ƒ˜ํ”Œ ์ˆ˜

์ฝ”๋“œ์—์„œ๋Š” n_splits=3, max_train_size=12, test_size=6, gap=0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ํ•™์Šต ๊ธฐ๊ฐ„ 12๊ฐœ์›”, ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„ 6๊ฐœ์›”์˜ 3๋ถ„ํ• ์„ ์ƒ์„ฑํ•œ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋Š” 2019๋…„ 6์›”๊นŒ์ง€์˜ ๋งค์ถœ ๋ฐ์ดํ„ฐ๋งŒ ํฌํ•จํ•˜๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ (df_ts_amount.query('sales_ym <= "201906"')), list series_list๋ฅผ ์ƒ์„ฑํ•˜์—ฌ TimeSeriesSplit์—์„œ ์ƒ์„ฑํ•œ ํ•™์Šต ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ฅผ ์ €์žฅํ•œ๋‹ค. for ๋ฃจํ”„๋Š” TimeSeriesSplit์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ถ„ํ• ์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ฐ ๋ถ„ํ• ์„ series_list์— ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ํ›ˆ๋ จ๊ณผ ํ…Œ์ŠคํŠธ ๋ถ„ํ• ์„ df_train_1๊ณผ df_test_1์—, ๋‘ ๋ฒˆ์งธ ๋ถ„ํ• ์„ df_train_2์™€ df_test_2์—, ์„ธ ๋ฒˆ์งธ ๋ถ„ํ• ์„ df_train_3๊ณผ df_test_3์— ํ• ๋‹นํ•˜๊ณ  ์žˆ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋Œ€์ƒ ๋ณ€์ˆ˜ is_buy_flag์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ฌด์ž‘์œ„ ์–ธ๋”์ƒ˜ํ”Œ๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋จผ์ € ๊ฐ ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ๊ธˆ์•ก ํ•ฉ๊ณ„๊ฐ€ groupby๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋˜์–ด df_tmp์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ df_customer์™€ df_tmp๋Š” ์™ผ์ชฝ ๊ฒฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜์—ฌ ๊ตฌ๋งค๋ฅผ ํ•˜์ง€ ์•Š์•˜๋”๋ผ๋„ ๋ชจ๋“  ๊ณ ๊ฐ์„ ํฌํ•จํ•˜๋„๋ก ํ•˜๊ณ , is_buy_flag ์—ด์€ np.where๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋งค๋ฅผ ํ•œ ๊ณ ๊ฐ์—๊ฒŒ๋Š” 1์„, ๊ตฌ๋งค๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ณ ๊ฐ์—๊ฒŒ๋Š” 0์„ ํ• ๋‹นํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ imblearn ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ RandomUnderSampler ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ๋ณ€์ˆ˜์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ณ , is_buy_flag ์—ด์„ ๋Œ€์ƒ ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” fit_resample ๋ฉ”์„œ๋“œ๋ฅผ df_tmp์— ์ ์šฉํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ๋Œ€์ƒ ๋ณ€์ˆ˜์˜ ๊ฐ’์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ˆ˜์˜ ์ผ€์ด์Šค๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด DataFrame์ธ df_down_sampling์ด ์ƒ์„ฑ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ is_buy_flag์˜ ๊ฐ’์ด 0๊ณผ 1์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ๋žœ๋ค ์–ธ๋”์ƒ˜ํ”Œ๋ง์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ํ™•์ธํ•œ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” df_customer ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ 'gender_cd'์™€ 'gender' ์—ด์„ ์„ ํƒํ•˜๊ณ  drop_duplicates() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต๋œ ํ–‰์„ ์‚ญ์ œํ•˜์—ฌ df_gender_std๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 'gender_cd'์™€ 'gender' ๊ฐ’์˜ ๊ณ ์œ ํ•œ ์กฐํ•ฉ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

df_customer_std๋Š” df_customer dataframe์—์„œ 'gender' ์—ด์„ drop() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ columns ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 'gender'๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ญ์ œํ•จ์œผ๋กœ์จ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด df_customer์—์„œ 'gender' ์ปฌ๋Ÿผ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด dataframe์ด ์ƒ์„ฑ๋œ๋‹ค.

์ด ์ฝ”๋“œ์˜ ๋ชฉ์ ์€ 'gender_cd'์™€ 'gender'์˜ ๊ณ ์œ ํ•œ ์กฐํ•ฉ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๊ณผ df_customer์˜ 'gender'๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ ์ถ”๊ฐ€ ๋ถ„์„ ๋ฐ ๋ชจ๋ธ๋ง์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” ๋‘ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_product์™€ df_category ์‚ฌ์ด์—์„œ category_small_cd ์ปฌ๋Ÿผ์œผ๋กœ ๋‚ด๋ถ€ ๋ฐ”์ธ๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฒฐ๊ณผ df_product_full์€ df_product์™€ df_category์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ํฌํ•จํ•˜๋ฉฐ, ๊ฒฐํ•ฉ์€ category_small_cd์˜ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_product_full์—๋Š” df_category์˜ ์ถ”๊ฐ€ ์ปฌ๋Ÿผ, ํŠนํžˆ category_major_name, category_medium_name, category_small_name๋„ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์ด ์—ด๋“ค์€ ์ƒํ’ˆ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋Œ€ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋‘ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰๋งŒ ์œ ์ง€ํ•˜๋Š” how='inner' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘ํ•ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ํฌํ•จ๋œ๋‹ค. .head(3) ๋ฉ”์„œ๋“œ๋Š” ๋ณ‘ํ•ฉ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ ์„ธ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” Pandas์˜ DataFrame df_product_full์„ ํŒŒ์ผ ๊ฒฝ๋กœ์™€ ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•˜์—ฌ CSV ํŒŒ์ผ . /data/P_df_product_full_UTF-8_header.csv๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ณด๋‚ด๋Š” CSV ํŒŒ์ผ์€ ๋‹ค์–‘ํ•œ ๋ฌธ์ž๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด UTF-8 ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, index=False ์ธ์ˆ˜๋Š” DataFrame์˜ ํ–‰ ์ธ๋ฑ์Šค๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” CSV ํŒŒ์ผ์— ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ย 

ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_product_full์˜ DataFrame์„ P_df_product_full_UTF-8BOM_header.csv๋ผ๋Š” ํŒŒ์ผ๋ช…์œผ๋กœ CSV ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์žˆ๋‹ค.

pandas DataFrame์˜ to_csv() ๋ฉ”์„œ๋“œ๋Š” DataFrame์˜ ๋‚ด์šฉ์„ CSV ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ์—๋Š” ํŒŒ์ผ ์ด๋ฆ„๊ณผ ์‚ฌ์šฉํ•  ์ธ์ฝ”๋”ฉ ๋“ฑ ๋ช‡ ๊ฐ€์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ, filename ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” '. /data/P_df_product_full_UTF-8BOM_header.csv'๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, CSV ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. . /data/' ์ ‘๋‘์‚ฌ๋Š” ํŒŒ์ผ์„ ์ €์žฅํ•  ์ƒ๋Œ€์ ์ธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

encoding ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” CSV ํŒŒ์ผ์— ์‚ฌ์šฉํ•  ์ธ์ฝ”๋”ฉ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” 'utf_8_sig'๊ฐ€ ์„ค์ •๋˜๋ฉฐ, 'utf_8_sig'๋Š” ํŒŒ์ผ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ฐ”์ดํŠธ ์ˆœ์„œ ํ‘œ์‹œ(BOM)๋ฅผ ํฌํ•จํ•˜๋Š” UTF-8 ์ธ์ฝ”๋”ฉ์˜ ์ผ์ข…์ด๋‹ค. ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์ˆ˜ ๋งˆ์ปค๋กœ, ํŒŒ์ผ์„ ์—ด ๋•Œ ํ”„๋กœ๊ทธ๋žจ์ด ์ธ์ฝ”๋”ฉ ํ˜•์‹์„ ํŒ๋‹จํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

index ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” False๋กœ ์„ค์ •๋˜์–ด DataFrame์˜ ์ธ๋ฑ์Šค๋ฅผ CSV ํŒŒ์ผ์— ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ง€์ •ํ•œ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” pandas์˜ DataFrame์ธ df_product_full์„ ". /data/' ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” 'P_df_product_full_CP932_header.csv'๋ผ๋Š” ์ด๋ฆ„์˜ CSV ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ธ CSV ํŒŒ์ผ์€ 'Windows-31J'๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ผ๋ณธ์–ด ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ธ 'CP932' ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์ฝ”๋”ฉ์€ ์ผ๋ณธ์—์„œ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฝ”๋”ฉ์œผ๋กœ Windows ์šด์˜ ์ฒด์ œ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

parameter encoding='CP932'๋Š” CSV ํŒŒ์ผ์„ ๋‚ด๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•œ๋‹ค.

index=False ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋‚ด๋ณด๋‚ธ CSV ํŒŒ์ผ์— index ์ปฌ๋Ÿผ์„ ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ย 

ํ•ด์„ค:

df_product_full DataFrame์„ ". /data/" ๋””๋ ‰ํ† ๋ฆฌ์˜ "P_df_product_full_UTF-8_noh.csv"๋ผ๋Š” CSV ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์—๋Š” CSV ํŒŒ์ผ์„ ์ €์žฅํ•  ํŒŒ์ผ๋ช…๊ณผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ , header ์ธ์ˆ˜๋Š” False๋กœ ์„ค์ •ํ•˜์—ฌ DataFrame์˜ ํ—ค๋” ๋ผ์ธ์ด ์ถœ๋ ฅ ํŒŒ์ผ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, encoding ์ธ์ˆ˜๋Š” 'UTF-8'๋กœ ์„ค์ •ํ•˜์—ฌ ํŒŒ์ผ ์“ฐ๊ธฐ ์‹œ ์‚ฌ์šฉํ•  ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•œ๋‹ค. ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•œ๋‹ค. ์ด๋Š” DataFrame์˜ ์ธ๋ฑ์Šค๊ฐ€ ์ถœ๋ ฅ ํŒŒ์ผ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” df_product_full DataFrame์„ UTF-8 ์ธ์ฝ”๋”ฉ์œผ๋กœ CSV ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๋Š”๋ฐ, ํ—ค๋” ๋ผ์ธ์€ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

ย 

ํ•ด์„ค:

์œ„ ์ฝ”๋“œ๋Š” UTF-8 ์ธ์ฝ”๋”ฉ์œผ๋กœ ํ—ค๋” ํ–‰์ด ์—†๋Š” CSV ํŒŒ์ผ P_df_product_full_UTF-8_no.csv๋ฅผ ์ฝ๊ณ  ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์—ด ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

pd.read_csv('... /data/P_df_product_full_UTF-8_noh.csv', dtype={1:str, 2:str, 3:str}, encoding='UTF-8', header=None): ํ—ค๋” ๋ผ์ธ์ด ์—†๋Š” CSV ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€ 2์—ด, 3์—ด, 4์—ด์„ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” 0, 1, 2, 3, 4, 5, 6, 7, 8์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

df_product_full.columns = ['product_cd', 'category_major_cd', 'category_medium_cd', 'category_small_cd', 'unit_price', 'unit_cost',' category_major_name', 'category_medium_name', 'category_small_name']: ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ปฌ๋Ÿผ์— ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ๋‹ค. ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ product_cd, category_major_cd, category_major_cd, category_medium_cd, category_small_cd, unit_price, unit_cost, category_major_name, category_medium_name, and category_small_name ์—ด์„ ๊ฐ€์ง„๋‹ค.

df_product_full.head(3): df_product_full์˜ ์ฒ˜์Œ ์„ธ ์ค„์„ ํ‘œ์‹œํ•œ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” '. /data' ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” 'P_df_product_full_UTF-8_noh.csv'๋ผ๋Š” ์ด๋ฆ„์˜ CSV ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋ฉฐ, 'names' ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” 'c_names'๋ผ๋Š” ๋ฌธ์ž์—ด ๋ชฉ๋ก์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, 'dtype' ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” 'category_major_cd', 'category_medium_cd', 'category_small_cd'๋ผ๋Š” ์ด๋ฆ„์˜ ์—ด์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ, 'category_major_cd', 'category_medium_cd', 'category_small_cd'๋ผ๋Š” ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ 'str'(๋ฌธ์ž์—ด)๋กœ ์ง€์ •ํ•œ๋‹ค. ๋  ๊ฒƒ์„ ์ง€์ •ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 'header' ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํŒŒ์ผ์— ํ—ค๋” ํ–‰์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด 'None'์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

์™„์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ 'df_product_full' ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ณ , 'head' ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ ์„ธ ์ค„์„ ํ‘œ์‹œํ•œ๋‹ค.

ย 

ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” read_csv ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CSV ํŒŒ์ผ์„ ์‚ฌ์šฉ์ž ์ •์˜๋œ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ๊ฐ€์ง„ Pandas DataFrame์— ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

c_names: ์ปค์Šคํ„ฐ๋งˆ์ด์ง•๋œ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๋ฌธ์ž์—ด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
pd.read_csv(): CSV ํŒŒ์ผ์„ ์ฝ์–ด์™€ DataFrame์„ ๋ฐ˜ํ™˜ํ•˜๋Š” Pandas ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
'... /data/P_df_product_full_UTF-8_noh.csv': ๋ถˆ๋Ÿฌ์˜ฌ CSV ํŒŒ์ผ์˜ ํŒŒ์ผ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

names=c_names: c_names ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ํ•œ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
dtype={'category_major_cd':str, 'category_medium_cd':str, 'category_small_cd':str}: category_major_cd, category_medium_cd, category_small_cd, category_small_cd small_cd ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ str๋กœ ์ง€์ •ํ•œ๋‹ค.

encoding='UTF-8': ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์„ 'UTF-8'๋กœ ์ง€์ •ํ•œ๋‹ค.
header=None: CSV ํŒŒ์ผ์— ํ—ค๋” ๋ผ์ธ์ด ์—†์Œ์„ ์ง€์ •ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ head() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ DataFrame์„ ํ‘œ์‹œํ•˜๊ณ  ์ฒ˜์Œ ์„ธ ์ค„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_product_full์ด๋ผ๋Š” pandas์˜ DataFrame์˜ ๋‚ด์šฉ์„ '. /d/P_df_product_full_UTF-8_header.tsv'์— ์žˆ๋Š” TSV(Tab-Separated Values) ํŒŒ์ผ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

.to_csv() ๋ฉ”์„œ๋“œ๋Š” df_product_full DataFrame์— ๋Œ€ํ•ด ํ˜ธ์ถœ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ CSV (Comma-Separated Values) ๋˜๋Š” TSV ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด pandas๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์ธ '. /d/P_df_product_full_UTF-8_header.tsv'๋Š” DataFrame์„ ์ €์žฅํ•  ํŒŒ์ผ ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„์ด๋‹ค. ํŒŒ์ผ์€ . /d/ ๋””๋ ‰ํ† ๋ฆฌ์— P_df_product_full_UTF-8_header.tsv๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ sep='หถ'๋Š” ํŒŒ์ผ ๋‚ด ๊ฐ’์„ ์‰ผํ‘œ ๋Œ€์‹  ํƒญ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜ encoding='UTF-8'์€ ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์„ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์˜ ํ‘œ์ค€ ์ธ์ฝ”๋”ฉ์ธ UTF-8๋กœ ์ง€์ •ํ•œ๋‹ค.

๋„ค ๋ฒˆ์งธ ์ธ์ˆ˜ index=False๋Š” DataFrame์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅ ํŒŒ์ผ์— ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ง€์ •ํ•œ๋‹ค.

ย 

ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” '. /data/P_df_product_full_UTF-8_header.tsv'์— ์žˆ๋Š” TSV(Tab-Separated Values) ํŒŒ์ผ์—์„œ df_product_full์ด๋ผ๋Š” pandas DataFrame์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด pd.read_table() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž์ธ '. /data/P_df_product_full_UTF-8_header.tsv'๋Š” ์ฝ์„ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์™€ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์ธ dtype={'category_major_cd':str, 'category_medium_cd':str, 'category_small_cd':str}๋Š” DataFrame์˜ ํŠน์ • ์—ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ category_major_cd, category_medium_cd, category_small_cd์˜ ๊ฐ ์—ด์„ string(str) ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

์ด ํ•จ์ˆ˜์˜ ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜ encoding='UTF-8'์€ ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์ด UTF-8์ž„์„ ์ง€์ •ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์™„์„ฑ๋œ DataFrame์ธ df_product_full์„ head(3) ๋ฉ”์„œ๋“œ๋กœ ํ‘œ์‹œํ•˜๋ฉด DataFrame์˜ ์ฒซ 3ํ–‰์ด ํ‘œ์‹œ๋œ๋‹ค.

ย 

์„ค๋ช…:

์ด ์ฝ”๋“œ์—์„œ๋Š” '. /data/P_df_product_full_UTF-8_header.tsv'์— ์žˆ๋Š” TSV(Tab-Separated Values) ํŒŒ์ผ์—์„œ df_product_full์ด๋ผ๋Š” pandas DataFrame์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด pd.read_csv() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์ธ '. /data/P_df_product_full_UTF-8_header.tsv'๋Š” ์ฝ์„ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์™€ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์ธ dtype={'category_major_cd':str, 'category_medium_cd':str, 'category_small_cd':str}๋Š” DataFrame์˜ ํŠน์ • ์—ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ category_major_cd, category_medium_cd, category_small_cd์˜ ๊ฐ ์—ด์„ string(str) ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์žˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜ sep='หถ'๋Š” ํŒŒ์ผ ๋‚ด ๊ฐ’์„ ์‰ผํ‘œ๊ฐ€ ์•„๋‹Œ ํƒญ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ๊ฒƒ์„ ์ง€์ •ํ•œ๋‹ค.

๋„ค ๋ฒˆ์งธ ์ธ์ˆ˜ encoding='UTF-8'์€ ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์ด UTF-8์ž„์„ ์ง€์ •ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์™„์„ฑ๋œ DataFrame์ธ df_product_full์„ head(3) ๋ฉ”์„œ๋“œ๋กœ ํ‘œ์‹œํ•˜๋ฉด DataFrame์˜ ์ฒซ 3ํ–‰์ด ํ‘œ์‹œ๋œ๋‹ค.

ย 

Comment