๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ) โ€“ Python Part 1 (Q1 to Q20)

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

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ) โ€“ Python Part 1 (Q1 to Q20)์˜ ํ•ด์„ค์ž…๋‹ˆ๋‹ค.

ย 

์ฐธ๊ณ (Reference) : ใ€Œ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ ํ˜‘ํšŒ ์Šคํ‚ฌ ์ •์˜ ์œ„์›ใ€์˜ ใ€Œ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100๋ฒˆ์˜ ๋…ธํฌ(๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํŽธ)ใ€์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ ์†Œ์‚ฌ์ด์–ดํ‹ฐ ๊นƒํ—ˆ๋ธŒ : https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค 100 ๋…ธํฌ (๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ) URL : https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/blob/master/docker/work/answer/ans_preprocess_knock_Python.ipynb

โ€“ ์ฐธ๊ณ : ์›๋ž˜ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ ์†Œ์‚ฌ์ด์–ดํ‹ฐ(ใƒ‡ใƒผใ‚ฟใ‚ตใ‚คใ‚จใƒณใƒ†ใ‚ฃใ‚นใƒˆๅ”ไผšใ‚นใ‚ญใƒซๅฎš็พฉๅง”ๅ“ก)์—์„œ ๋งŒ๋“  ipynb ํŒŒ์ผ์„ DeepL ์—์„œ ์ผ๋ณธ์–ด์—์„œ ์˜์–ด๋กœ ๋ฒˆ์—ญํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

โ€“ ์ด ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•œ ์ด์œ ๋Š” ์ดˆ๋ณด์ž๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ์—”์ง€๋‹ˆ์–ด๊นŒ์ง€ Python์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉํ•œ ์ด ์‹ค์Šต์„ ์ „ํŒŒํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

โ€“ ์ด ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ณธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ์—ฐ์Šตํ•  ๋•Œ ์–ธ์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌ๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ย 

ํ•ด์„ค:

df_receipt.head(10) ์ฝ”๋“œ๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

Pandas์—์„œ DataFrame์€ ์ž ์žฌ์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์—ด์„ ๊ฐ€์ง„ 2์ฐจ์› ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ๋‚˜ SQL์˜ ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

Pandas์˜ .head() ๋ฉ”์„œ๋“œ๋Š” DataFrame์˜ ์ฒ˜์Œ n๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒ˜์Œ 5๊ฐœ ํ–‰์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ .head(10)์€ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
ย 
ํ•ด์„ค :

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].head(10) ์ฝ”๋“œ๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์˜ ์ปฌ๋Ÿผ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ธ df_receipt์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]๋ผ๋Š” ์ฝ”๋“œ๋Š” DataFrame df_receipt์—์„œ ์ปฌ๋Ÿผ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, amount๋ผ๋Š” ์ปฌ๋Ÿผ์ด ์„ ํƒ๋œ๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” ์ด๋Ÿฌํ•œ ์„ ํƒ๋œ ์ปฌ๋Ÿผ๋งŒ ํฌํ•จ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  .head(10) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์„œ๋ธŒ์…‹ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ํ‘œ์‹œํ•œ๋‹ค.

ย 

ย 
ย 
ํ•ด์„ค :

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].query('customer_id == "CS018205000001"')๋ผ๋Š” ์ฝ”๋“œ๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์—์„œ customer_id ์—ด์ด ํŠน์ • ๊ฐ’(CS0182050001)๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]๋ผ๋Š” ์ฝ”๋“œ๋Š” DataFrame df_receipt์—์„œ ์ปฌ๋Ÿผ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, amount๋ผ๋Š” ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ .query() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์กฐ๊ฑด์€ customer_id ์—ด์ด "CS018205000001" ๊ฐ’๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ–‰ ๋์— ์žˆ๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ(๋ฐฑ์Šฌ๋ž˜์‹œ)๋Š” ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด์–ด์ง„๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” customer_id ์ปฌ๋Ÿผ์ด ์ง€์ •๋œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
ย 
ย 
ํ•ด์„ค:

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].query('customer_id == "CS018205000001"')๋ผ๋Š” ์ฝ”๋“œ๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์—์„œ customer_id ์—ด์ด ํŠน์ • ๊ฐ’(CS0182050001)๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]๋ผ๋Š” ์ฝ”๋“œ๋Š” DataFrame df_receipt์—์„œ ์ปฌ๋Ÿผ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, amount๋ผ๋Š” ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ .query() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์กฐ๊ฑด์€ customer_id ์—ด์ด "CS018205000001" ๊ฐ’๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ–‰ ๋์— ์žˆ๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ(๋ฐฑ์Šฌ๋ž˜์‹œ)๋Š” ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด์–ด์ง„๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” customer_id ์ปฌ๋Ÿผ์ด ์ง€์ •๋œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ฝ”๋“œ df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]์ž…๋‹ˆ๋‹ค. \ .query('customer_id == "CS018205000001" & amount >= 1000')๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์—์„œ ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ customer_id ์—ด์€ ํŠน์ • ๊ฐ’(CS 018205000001)๊ณผ ๊ฐ™๊ณ , amount ์—ด์€ 1000 ์ด์ƒ์ด๋‹ค.

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]๋ผ๋Š” ์ฝ”๋“œ๋Š” DataFrame df_receipt์—์„œ ์—ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, amount๋ผ๋Š” ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ .query() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ˜ธ &๋Š” ๋‘ ์กฐ๊ฑด ๊ฐ„์˜ ๋…ผ๋ฆฌ์  AND ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์€ customer_id ์ปฌ๋Ÿผ์ด 'CS018205000001'๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ amount ์ปฌ๋Ÿผ์ด 1000 ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜๋Š” ํ–‰๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ฝ”๋“œ df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']]. query('customer_id == "CS018205000001" & (amount >= 1000 | quantity >=5)')๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์—์„œ ๊ณ ๊ฐ_id ์—ด์ด ํŠน์ • ๊ฐ’(CS018205000001)์„ ๊ฐ–๋Š” ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŠน์ • ๊ฐ’(CS018205000001)๊ณผ ๊ฐ™๊ณ , umount ์—ด์ด 1000 ์ด์ƒ ๋˜๋Š” quantity ์—ด์ด 5 ์ด์ƒ์ด๋‹ค.

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']]๋ผ๋Š” ์ฝ”๋“œ๋Š” DataFrame df_receipt์—์„œ ์—ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, quantity, amount๋ผ๋Š” ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ .query() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ˜ธ &๋Š” ๋‘ ์กฐ๊ฑด ๊ฐ„์˜ ๋…ผ๋ฆฌ์  AND ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์€ customer_id ์—ด์ด 'CS018205000001' ๊ฐ’๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ๊ณ  ๋…ผ๋ฆฌ OR ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” | ๊ธฐํ˜ธ๋กœ ๊ตฌ๋ถ„๋œ ๋‘ ๊ฐœ์˜ ํ•˜์œ„ ์กฐ๊ฑด์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ•˜์œ„ ์กฐ๊ฑด์€ ๊ธˆ์•ก ์—ด์ด 1000 ์ด์ƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ํ•˜์œ„ ์กฐ๊ฑด์€ quantity ์—ด์ด 5 ์ด์ƒ์ด๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” customer_id๊ฐ€ ์ง€์ •๋œ ๊ฐ’๊ณผ ๊ฐ™๊ณ  amount๊ฐ€ 1000 ์ด์ƒ, quantity๊ฐ€ 5 ์ด์ƒ์ธ ํ–‰๋งŒ ํฌํ•จ๋œ๋‹ค.
ย 
ย 
ํ•ด์„ค:

์ฝ”๋“œ df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]์ž…๋‹ˆ๋‹ค. \ .query('customer_id == "CS018205000001" & 1000 <= amount <= 2000')๋Š” df_receipt๋ผ๋Š” Pandas DataFrame์—์„œ ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ customer_id ์—ด์€ ํŠน์ • ๊ฐ’(CS018205000001)๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’(CS018205000001)๊ณผ ๊ฐ™๊ณ , amount ์—ด์€ 1000์—์„œ 2000(inclusive)๊นŒ์ง€์ด๋‹ค.

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]๋ผ๋Š” ์ฝ”๋“œ๋Š” DataFrame df_receipt์—์„œ ์—ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, amount๋ผ๋Š” ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ .query() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ˜ธ &๋Š” ๋‘ ์กฐ๊ฑด ๊ฐ„์˜ ๋…ผ๋ฆฌ์  AND ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์€ customer_id ์—ด์ด 'CS018205000001' ๊ฐ’๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ ๋น„๊ต ์—ฐ์‚ฐ์ž <=์™€ >=๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ amount ์—ด์˜ ๊ฐ’ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์™„์„ฑ๋œ DataFrame์—๋Š” customer_id๊ฐ€ ์ง€์ •๋œ ๊ฐ’๊ณผ ๊ฐ™๊ณ  amount๊ฐ€ 1000์—์„œ 2000 ์‚ฌ์ด์ธ ํ–‰๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(ํฌ๊ด„์ ์ธ ๊ฐ’).
ย 
ํ•ด์„ค:

์ฝ”๋“œ df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]์ž…๋‹ˆ๋‹ค. \ df_receipt['customer_id == "CS018205000001" & product_cd ! = "P071401019"]๋Š” Pandas DataFrame์˜ df_receipt์—์„œ ๊ณ ๊ฐ_id ์—ด์ด ํŠน์ • ๊ฐ’(CS018205000001)๊ณผ ๊ฐ™๊ณ , product_cd ์—ด์ด ํŠน์ • ๊ฐ’(P0714019)๊ณผ ๊ฐ™์ง€ ์•Š์€ ํ–‰์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. )์™€ ๋™์ผํ•˜์ง€ ์•Š๋‹ค.

์ฝ”๋“œ df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]๋Š” DataFrame df_receipt์—์„œ ์—ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ sales_ymd, customer_id, product_cd, amount๋ผ๋Š” ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ .query() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ˜ธ &๋Š” ๋‘ ์กฐ๊ฑด ๊ฐ„์˜ ๋…ผ๋ฆฌ์  AND ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์€ customer_id ์—ด์ด "CS018205000001" ๊ฐ’๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ product_cd ์—ด์ด "P071401019" ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋Š” ! = ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ˜„๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” customer_id๊ฐ€ ์ง€์ •๋œ ๊ฐ’๊ณผ ๊ฐ™๊ณ  product_cd๊ฐ€ ์ง€์ •๋œ ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์€ ํ–‰๋งŒ ํฌํ•จ๋œ๋‹ค.
ย 
ํ•ด์„ค :ย 

df_store.query('prefecture_cd ! = "13" & floor_area <= 900')๋ผ๋Š” ์ฝ”๋“œ๋Š” df_store๋ผ๋Š” Pandas DataFrame์—์„œ prefecture_cd ์—ด์ด ํŠน์ • ๊ฐ’(13)๊ณผ ๊ฐ™์ง€ ์•Š๊ณ , floor_area ์—ด์ด ํŠน์ • ๊ฐ’(900) ์ดํ•˜์ธ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์— ์‚ฌ์šฉ๋œ๋‹ค.

.query() ๋ฉ”์„œ๋“œ๋Š” ๋ถ€์šธ ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ DataFrame์˜ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ถ€์šธ ํ‘œํ˜„์‹์€ 'prefecture_cd ! = "13" & floor_area <= 900' ์ž…๋‹ˆ๋‹ค.

! = ์—ฐ์‚ฐ์ž๋Š” prefecture_cd ์—ด์˜ ๊ฐ ๊ฐ’์ด '13'๊ณผ ๊ฐ™์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์—ฐ์‚ฐ์ž &๋Š” ์ด ์กฐ๊ฑด๊ณผ floor_area ์—ด์˜ ๊ฐ’์ด 900 ์ดํ•˜์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด ์‚ฌ์ด์˜ ๋…ผ๋ฆฌ์  AND ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ True์ธ ํ–‰๋งŒ ํฌํ•จ๋œ๋‹ค.
ย 
ํ•ด์„ค:

df_store.query("store_cd.str.startswith('S14')", engine='python').head(10)๋ผ๋Š” ์ฝ”๋“œ๋Š” df_store๋ผ๋Š” Pandas DataFrame์—์„œ store_cd ์—ด์ด ํŠน์ • ๋ฌธ์ž์—ด (S14) ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

.query() ๋ฉ”์„œ๋“œ๋Š” DataFrame์˜ ํ–‰์„ ๋ถ€์šธ ํ‘œํ˜„์‹์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ถ€์šธ ํ‘œํ˜„์‹์€ 'store_cd.str.startswith('S14')'๊ฐ€ ๋œ๋‹ค. ์ด ํ‘œํ˜„์‹์€ engine ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 'python'์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ด์ฌ ๊ตฌ๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค. ์ด ์‹์€ store_cd ์ปฌ๋Ÿผ์ด 'S14' ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.

str.startswith() ๋ฉ”์„œ๋“œ๋Š” Python์˜ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋กœ, ๋ฌธ์ž์—ด์ด ์ง€์ •๋œ ์ ‘๋‘์–ด๋กœ ์‹œ์ž‘ํ•˜๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ด ๊ฒฝ์šฐ str.startswith('S14') ๋ฉ”์„œ๋“œ๊ฐ€ store_cd ์ปฌ๋Ÿผ์˜ ๊ฐ ์š”์†Œ์— ์ ์šฉ๋œ๋‹ค.

๊ฒฐ๊ณผ DataFrame์—๋Š” store_cd ์ปฌ๋Ÿผ์˜ ์‹œ์ž‘์ด 'S14' ๋ฌธ์ž์—ด์ธ ํ–‰๋งŒ ํฌํ•จ๋œ๋‹ค.

.head(10) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ๋Š” df_customer๋ผ๋Š” Pandas DataFrame์—์„œ ๋ฐ์ดํ„ฐ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•œ๋‹ค. ์ด ์„œ๋ธŒ์…‹์€ query() ๋ฉ”์„œ๋“œ์—์„œ ์ง€์ •ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด์€ query() ๋ฉ”์„œ๋“œ์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฌธ์ž์—ด 'customer_id.str.endswith('1')'์— ์˜ํ•ด ์ •์˜๋œ๋‹ค. ์ด ์กฐ๊ฑด์€ df_customer DataFrame์˜ ํ–‰ ์ค‘ customer_id ์ปฌ๋Ÿผ์˜ ๋์ด '1'์ธ ํ–‰๋งŒ ํฌํ•จํ•˜๋„๋ก ํ•„ํ„ฐ๋งํ•œ๋‹ค.

engine='python' ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ, ์กฐ๊ฑด ํ‰๊ฐ€์— Python ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. query() ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋ณธ ์—”์ง„(pandas.evaluate)์ด ๋ชจ๋“  ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์— ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ ์ด ์ง€์ •์ด ํ•„์š”ํ•˜๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ head(10) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋ง๋œ DataFrame์˜ ์ฒ˜์Œ 10์ค„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ๋Š” ์ถœ๋ ฅ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ํฌ๊ธฐ๋กœ ์ œํ•œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

๊ตฌ์ฒด์ ์œผ๋กœ query()์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” "address.str.contains('์š”์ฝ”ํ•˜๋งˆ์‹œ')๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ df_store์˜ address ์ปฌ๋Ÿผ์— '์š”์ฝ”ํ•˜๋งˆ์‹œ'๋ผ๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ถ€์šธ ์‹์ด๋‹ค.

str.contains() ๋ฉ”์„œ๋“œ๋Š” Pandas์˜ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋กœ, ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์˜ ๊ฐ ์š”์†Œ๊ฐ€ ์ง€์ •๋œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€์šธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋ฒˆ์—๋Š” df_store์˜ address ์ปฌ๋Ÿผ์— ์ ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

engine='python' ์ธ์ˆ˜๋Š” ๊ธฐ๋ณธ numexpr ์—”์ง„์ด ์•„๋‹Œ ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ๋œ eval() ํ•จ์ˆ˜๋กœ ํ•„ํ„ฐ๋ง ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค. ์ด๋Š” str.contains()์™€ ๊ฐ™์ด numexpr ์—”์ง„์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŠน์ • ์œ ํ˜•์˜ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์„ ์ฟผ๋ฆฌ ์‹์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค.
ย 
ํ•ด์„ค:

df_customer๋Š” DataFrame ๊ฐ์ฒด์ด๋‹ค.

.query()๋Š” ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด Pandas๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์กฐ๊ฑด์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์กฐ๊ฑด์€ 'status_cd.str.contains(r'^[A-F]')์ด๋‹ค. ์ด๋Š” str.contains() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DataFrame์˜ status_cd ์ปฌ๋Ÿผ์— A๋ถ€ํ„ฐ F๊นŒ์ง€ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€(ํฌ๊ด„์ ์œผ๋กœ) ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด '^[A-F]' ์•ž์˜ r์€ ์›์‹œ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž(\)๊ฐ€ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ํ•ด์„๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

engine='python' ์ธ์ˆ˜๋Š” Pandas๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์—”์ง„์ด ์•„๋‹Œ Python์˜ ๋‚ด์žฅ ์ •๊ทœ ํ‘œํ˜„์‹ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ ์—”์ง„์ด ํŠน์ • ์ •๊ทœ ํ‘œํ˜„์‹ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ๋А๋ฆด ๋•Œ ์œ ์šฉํ•˜๋‹ค.

.head(10) ๋ฉ”์„œ๋“œ๋Š” ํ•„ํ„ฐ๋ง๋œ DataFrame์˜ ์ฒ˜์Œ 10์ค„๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์ฆ‰, ์ด ์ฝ”๋“œ๋Š” ์ „์ฒด์ ์œผ๋กœ df_customer DataFrame์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ status_cd ์—ด์ด A๋ถ€ํ„ฐ F๊นŒ์ง€์˜ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ–‰๋งŒ ํฌํ•จํ•˜๋„๋ก ํ•„ํ„ฐ๋งํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ย 

ย 
ํ•ด์„ค:

df_customer๋Š” DataFrame ๊ฐ์ฒด์ด๋‹ค.

.query()๋Š” ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด Pandas๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์กฐ๊ฑด์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์กฐ๊ฑด์€ 'status_cd.str.contains(r'[1-9]$', regex=True)๊ฐ€ ๋œ๋‹ค. ์ด๋Š” str.contains() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DataFrame์˜ status_cd ์ปฌ๋Ÿผ์— 1~9(ํฌํ•จ)๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž $๋Š” ๋ฌธ์ž์—ด์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, regex=True ์ธ์ˆ˜๋Š” ํŒจํ„ด์ด ์ •๊ทœ ํ‘œํ˜„์‹์œผ๋กœ ํ•ด์„๋  ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

engine='python' ์ธ์ˆ˜๋Š” Pandas๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์—”์ง„์ด ์•„๋‹Œ Python์˜ ๋‚ด์žฅ ์ •๊ทœ ํ‘œํ˜„์‹ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ ์—”์ง„์ด ํŠน์ • ์ •๊ทœ ํ‘œํ˜„์‹ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ๋А๋ฆฐ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.

.head(10) ๋ฉ”์„œ๋“œ๋Š” ํ•„ํ„ฐ๋ง๋œ DataFrame์˜ ์ฒ˜์Œ 10์ค„๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” status_cd ์—ด์ด 1์—์„œ 9๊นŒ์ง€์˜ ์ˆซ์ž๋กœ ๋๋‚˜๋Š” ํ–‰๋งŒ ํฌํ•จํ•˜๋„๋ก df_customer DataFrame์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” Python์˜ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_customer๋ผ๋Š” ์ด๋ฆ„์˜ DataFrame์—์„œ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ๋‹ค. ํ•„ํ„ฐ๋ง์€ query() ๋ฉ”์„œ๋“œ์—์„œ ์ง€์ •ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ถ€์šธ ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

status_cd: df_customer DataFrame์˜ ์ปฌ๋Ÿผ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

. : ํŒŒ์ด์ฌ์—์„œ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋‚˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์  ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

str: str: status_cd ์ปฌ๋Ÿผ์˜ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

contains() : ์ปฌ๋Ÿผ์˜ ๊ฐ ์š”์†Œ์— ์ฃผ์–ด์ง„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ์ด๋‹ค.

r'^[A-F]. *[1-9]$': ๋ฌธ์ž A๋ถ€ํ„ฐ F(ํฌํ•จ)๋กœ ์‹œ์ž‘ํ•˜๊ณ  1๋ถ€ํ„ฐ 9(ํฌํ•จ)์˜ ์ˆซ์ž๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด์ด๋‹ค. ํŒจํ„ด ์•ž์˜ r ์ ‘๋‘์‚ฌ๋Š” ์›์‹œ ๋ฌธ์ž์—ด์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ ์ทจ๊ธ‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋˜ํ•œ, query() ๋ฉ”์„œ๋“œ์—์„œ engine์˜ ์ธ์ˆ˜๋กœ 'python'์ด๋ผ๋Š” ๊ฐ’์ด ์ง€์ •๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” Pandas๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์—”์ง„์ด numexpr๋กœ ์ฟผ๋ฆฌ ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ๋Š” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ .head(10) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•„ํ„ฐ ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฒ˜์Œ 10๊ฐœ์˜ ๋ผ์ธ์œผ๋กœ ์ถœ๋ ฅ์ด ์ œํ•œ๋œ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” Python์˜ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_store๋ผ๋Š” DataFrame์—์„œ ํ–‰์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ๋‹ค. ํ•„ํ„ฐ๋ง์€ query() ๋ฉ”์„œ๋“œ์—์„œ ์ง€์ •ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ถ€์šธ ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

tel_no : df_store DataFrame์˜ ์ปฌ๋Ÿผ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

. : ํŒŒ์ด์ฌ์—์„œ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋‚˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์  ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

str : tel_no ์ปฌ๋Ÿผ์˜ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

contains() : ์ปฌ๋Ÿผ์˜ ๊ฐ ์š”์†Œ์— ์ฃผ์–ด์ง„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ์ด๋‹ค.

r'^[0-9]{3}-[0-9]{3}-[0-9]{3}-[0-9]{4}$' : ๋ถ๋ฏธ ์ „ํ™”๋ฒˆํ˜ธ ํ˜•์‹(3์ž๋ฆฌ, ํ•˜์ดํ”ˆ, ์ถ”๊ฐ€ 3์ž๋ฆฌ, ์ถ”๊ฐ€ 3์ž๋ฆฌ, ์ถ”๊ฐ€ ํ•˜์ดํ”ˆ, ์ถ”๊ฐ€ 4์ž๋ฆฌ)์˜ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ์ •๊ทœ์‹ ํŒจํ„ด์ด๋‹ค. ํŒจํ„ด ์•ž์˜ r ์ ‘๋‘์‚ฌ๋Š” ์›์‹œ ๋ฌธ์ž์—ด์ž„์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ๊ฐ€ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ ์ทจ๊ธ‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ค‘๊ด„ํ˜ธ {}๋Š” ์ง์ „ ํŒจํ„ด์„ ์ง€์ •ํ•œ ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋งˆ์ง€๋ง‰ $๋Š” ๋ฌธ์ž์—ด์˜ ๋์„ ์˜๋ฏธํ•œ๋‹ค.

๋˜ํ•œ, query() ๋ฉ”์„œ๋“œ์—์„œ engine์˜ ์ธ์ˆ˜์— 'python'์ด๋ผ๋Š” ๊ฐ’์ด ์ง€์ •๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” Pandas๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์—”์ง„์ด numexpr๋กœ ์ฟผ๋ฆฌ ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ๋Š” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ, df_store DataFrame์—์„œ tel_no ์ปฌ๋Ÿผ์— ์œ ํšจํ•œ ๋ถ๋ฏธ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ํ–‰๋งŒ ๋‚จ๊ธฐ๋Š” ํ•„ํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” Python์˜ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_customer๋ผ๋Š” DataFrame์˜ ํ–‰์„ birth_day ์—ด์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ •๋ ฌ๋œ DataFrame์€ head() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

df_customer: ์ •๋ ฌ๋  DataFrame์˜ ์ด๋ฆ„์ด๋‹ค.

sort_values() : ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ DataFrame์„ ์ •๋ ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Pandas์˜ ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์ด ๊ฒฝ์šฐ birth_day ์ปฌ๋Ÿผ์ด ์ •๋ ฌ ํ‚ค๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค.

'birth_day' : ์ •๋ ฌ ํ‚ค๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์ด๋‹ค.

.head(10) : ์ถœ๋ ฅ์„ ์ •๋ ฌ๋œ DataFrame์˜ ์ฒซ 10ํ–‰์œผ๋กœ ์ œํ•œํ•˜๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ df_customer DataFrame์˜ ์ฒซ 10๊ฐœ์˜ ํ–‰์ด birth_day ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด birth_day๊ฐ€ ๊ณ ๊ฐ์˜ ์ƒ๋…„์›”์ผ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ 10๋ช…์˜ ๊ณ ๊ฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ด ์ฝ”๋“œ์—์„œ๋Š” Python์˜ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ df_customer๋ผ๋Š” DataFrame์˜ ํ–‰์„ birth_day ์—ด์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ •๋ ฌ๋œ DataFrame์€ head() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

df_customer: ์ •๋ ฌ๋  DataFrame์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

sort_values() : Pandas์˜ ๋ฉ”์†Œ๋“œ์ด๋ฉฐ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ DataFrame์„ ์ •๋ ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, birth_day ์ปฌ๋Ÿผ์ด ์ •๋ ฌ ํ‚ค๋กœ ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

'birth_day' : ์ •๋ ฌ ํ‚ค๋กœ ์‚ฌ์šฉ๋  ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ascending=False : ์ด ์ธ์ˆ˜๋Š” ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๊ธฐ๋ณธ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ์•„๋‹Œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

.head(10): ์ถœ๋ ฅ์„ ์ •๋ ฌ๋œ DataFrame์˜ ์ฒ˜์Œ 10ํ–‰์œผ๋กœ ์ œํ•œํ•˜๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์€ df_customer DataFrame์˜ ์ฒ˜์Œ 10๊ฐœ์˜ ํ–‰์ด๋ฉฐ, birth_day ์—ด์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด birth_day๊ฐ€ ๊ณ ๊ฐ์˜ ์ƒ๋…„์›”์ผ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๊ฐ€์žฅ ์–ด๋ฆฐ 10๋ช…์˜ ๊ณ ๊ฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
ํ•ด์„ค:

์ฃผ์–ด์ง„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

pd.concat() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ df_receipt[['customer_id', 'amount']]์™€ df_receipt['amount'].rank(method='min', ascending=False)๋ฅผ ์—ด ์ถ•(axis= 1)์„ ๋”ฐ๋ผ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค. ์–ป์–ด์ง„ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ ๋ณ€์ˆ˜ df_tmp์— ํ• ๋‹น๋œ๋‹ค. ์ฒซ ๋ฒˆ์งธ dataframe df_receipt[['customer_id', 'amount']]์—๋Š” ๋” ํฐ dataframe df_receipt์—์„œ 'customer_id'์™€ 'amount' ๋‘ ๊ฐœ์˜ ์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ๋‘ ๋ฒˆ์งธ dataframe์€ ' min' ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐํ•œ 'amount' ์—ด์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆœ์œ„๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

์—ฐ๊ฒฐ๋œ df_tmp์˜ ์ปฌ๋Ÿผ์„ df_tmp.columns ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ 'customer_id', 'amount', 'ranking'์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พผ๋‹ค.

sort_values() ๋ฉ”์„œ๋“œ๋กœ df_tmp์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ 'ranking' ์—ด์—์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , head(10) ๋ฉ”์„œ๋“œ๋กœ ์ƒ์œ„ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ์ฝ”๋“œ๋Š” df_receipt dataframe์˜ 'customer_id'์™€ 'amount' ์ปฌ๋Ÿผ๊ณผ 'min' ๋ฉ”์„œ๋“œ๋กœ ๊ณ„์‚ฐํ•œ 'amount'์˜ ์ˆœ์œ„๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ณผ dataframe์€ 'ranking' ์ปฌ๋Ÿผ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ๊ฐ€์žฅ ๋†’์€ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์ƒ์œ„ 10๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ตฌ๋งค์— ๊ฐ€์žฅ ๋งŽ์€ ๋น„์šฉ์„ ์ง€์ถœํ•œ ๊ณ ๊ฐ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ย 

ย 

ย 

ย 

Comment