SQL & Python Study

[D+21][ํ”„๋กœ์ ํŠธ #1-3] ๊ตฐ์ง‘๋ณ„ ํ˜ธํ…” ์„œ๋น„์Šค ์ด์šฉ ์ ์ˆ˜์™€ ์ผํ‰๊ท  ๋งค์ถœ์˜ ์ƒ๊ด€ ๊ด€๊ณ„ ๋ถ„์„๊ณผ ์‹œ๊ฐํ™” ๋ณธ๋ฌธ

๐Ÿšต‍โ™€๏ธTeam Project/๋งˆ์ผ€ํŒ…์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„

[D+21][ํ”„๋กœ์ ํŠธ #1-3] ๊ตฐ์ง‘๋ณ„ ํ˜ธํ…” ์„œ๋น„์Šค ์ด์šฉ ์ ์ˆ˜์™€ ์ผํ‰๊ท  ๋งค์ถœ์˜ ์ƒ๊ด€ ๊ด€๊ณ„ ๋ถ„์„๊ณผ ์‹œ๊ฐํ™”

๊น€์ˆฎ์—‰ 2024. 5. 28. 18:09

๐Ÿ“Š INDEX

01.  ๊ณ ๊ฐ ๊ตฌ์„ฑ์— ๋”ฐ๋ฅธ total_socre์™€ adr์˜ ๊ด€๊ณ„ 
02. ๊ตญ์ ์— ๋”ฐ๋ฅธ total_socre์™€ adr์˜ ๊ด€๊ณ„ 
03. ๋งˆ์ผ“ ์„ธ๊ทธ๋จผํŠธ์— ๋”ฐ๋ฅธ total_score์™€ adr์˜ ๊ด€๊ณ„ 

*ํ˜ธํ…” ์„œ๋น„์Šค ์ด์šฉ ์ ์ˆ˜๋Š” total_socre, ํ‰๊ท  ์ผ์ผ ์š”๊ธˆ์€ adr ์นผ๋Ÿผ์ž…๋‹ˆ๋‹ค. 
*๋งˆ์ผ“ ์„ธ๊ทธ๋จผํŠธ(market_segment)๋Š” ๊ณ ๊ฐ์˜ ์˜ˆ์•ฝ ์ฑ„๋„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

 

 

01. ๊ณ ๊ฐ ๊ตฌ์„ฑ์— ๋”ฐ๋ฅธ total_score์™€ adr์˜ ๊ด€๊ณ„ 


์ €๋Š” SQL์„ ํ™œ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ 1์ฐจ ์ง‘๊ณ„ํ–ˆ๊ณ , ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ด์ฌ์— ๊ฐ€์ ธ์™€์„œ ์‹œ๊ฐํ™”ํ–ˆ์–ด์š”. 

์ถ”ํ›„์— SQL์—์„œ ์ฟผ๋ฆฌ๋ฅผ CSV ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‚˜์ค‘์— ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! 

 

 

 

๊ณ ๊ฐ ๊ตฌ์„ฑ์— ๋”ฐ๋ฅธ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ์š”. 

WITH ๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. 

# ์ด์šฉ๊ฐ ์„ธ๊ทธ๋จผํŠธ(๊ณ ๊ฐ ์œ ํ˜•)์— ๋”ฐ๋ฅธ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜์™€ ์ผํ‰๊ท  ๋งค์ถœ ์ง‘๊ณ„ 

SELECT 
    customer_segment,
    total_score, 
    ROUND(AVG(adr)) AS avg_adr 
FROM (
    SELECT # total_score์— ๋”ฐ๋ฅธ ํ™œ์„ฑํ™” ๊ณ ๊ฐ ์„ธ๊ทธ๋จผํŠธ
    	  case when (meal_score + parking_score + request_score) <=1 then '[0~1์ ] ์†Œ๊ทน ์ด์šฉ'
    	  when (meal_score + parking_score + request_score) <=3 then '[2~3์ ] ํŽธ์˜ ์ด์šฉ'
    	  else '[4์  ์ด์ƒ] ์ ๊ทน ์ด์šฉ ๊ณ ๊ฐ' end as total_score, 
        adr, 
        hotel, 
        arrival_date_year, 
        arrival_date_month,
    # ์ธ์› ๋ฐ ์•„์ด ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์ด์šฉ๊ฐ ์„ธ๊ทธ๋จผํŠธ (์ฒ ํœ˜๋‹˜, ์œ ๋ฆผ๋‹˜ ์ฟผ๋ฆฌ ํ™œ์šฉ)
		CASE WHEN total_customer >= 4 AND youth_yn = 'y' THEN '๋‹ค์ธ๊ฐ€์กฑ'
             WHEN total_customer >= 4 AND youth_yn = 'n' THEN '๋‹จ์ฒด'
             WHEN total_customer = 3 AND youth_yn = 'y' THEN '3์ธ๊ฐ€์กฑ'
             WHEN total_customer = 3 AND youth_yn = 'n' THEN '3์ธ'
             WHEN total_customer = 2 AND youth_yn = 'y' THEN '2์ธ๊ฐ€์กฑ'
             WHEN total_customer = 2 AND youth_yn = 'n' THEN '2์ธ'
             ELSE '1์ธ' END customer_segment,
        youth_yn
    FROM (
        SELECT 
            hotel, 
            arrival_date_year, 
            arrival_date_month, 
            adr,
            # ์ด ์ธ์› ํ™•์ธ
            adults + babies + children AS total_customer,
            # ์œ ์•„ ๋™๋ฐ˜ ํ™•์ธ
            CASE WHEN babies + children > 0 THEN 'y' 
            	 ELSE 'n' 
            	 END AS youth_yn, 
            # ์‹์‚ฌ ์„œ๋น„์Šค ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์ ์ˆ˜ ํ• ๋‹น 
            CASE 
                WHEN meal IN ('SC', 'BB') THEN 1 
                WHEN meal = 'HB' THEN 2 
                WHEN meal = 'FB' THEN 3 
                ELSE 0 
            	END AS meal_score, 
            # ์ฃผ์ฐจ ์„œ๋น„์Šค ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์ ์ˆ˜ ํ• ๋‹น 
            CASE 
                WHEN required_car_parking_spaces BETWEEN 1 AND 3 THEN 1
                WHEN required_car_parking_spaces >= 4 THEN 2 
                ELSE 0 
            	END AS parking_score,
            # ํŠน๋ณ„ ์š”์ฒญ ์„œ๋น„์Šค์— ๋”ฐ์‚ฐ
            CASE 
                WHEN total_of_special_requests BETWEEN 1 AND 2 THEN 1
                WHEN total_of_special_requests >= 3 THEN 2 
                ELSE 0 
            	END AS request_score
        FROM processed_hotel_booking_file phbf  
        WHERE adr > 0 and is_canceled = 0 #์ผํ‰๊ท  ๋งค์ถœ ์Œ์ˆ˜, ์˜ˆ์•ฝ ์ทจ์†Œ ๊ณ ๊ฐ ์ œ์™ธ 
    ) AS scores_and_family
) a
GROUP BY customer_segment, total_score
ORDER BY avg_adr desc;

 

์œ„ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ CSV ํŒŒ์ผ๋กœ ์ถ”์ถœํ–ˆ๊ณ (ํŒŒ์ผ๋ช… cus_score) 

๋งฅํ”Œ๋กฏ๋ฆฝ๊ณผ ์‹œ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 

ํŒŒ์ด์ฌ์€ ํ•œ๊ธ€ ๊ธ€๊ผด์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ด๋ธ” ๋ฐ ๋ฒ”๋ก€ ํ…์ŠคํŠธ๊ฐ€ ๊นจ์ ธ์„œ ๋‚˜์™”๋Š”๋ฐ์š”, 

์•„๋ž˜์™€ ๊ฐ™์ด ๊ธ€๊ผด์„ ์ง€์ •ํ•˜๋ฉด ์˜ค๋ฅ˜ ์—†์ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์†Œํ˜„ ํŠœํ„ฐ๋‹˜๊ป˜์„œ ์•Œ๋ ค์ฃผ์‹  ๋ฐฉ๋ฒ•!) 

import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt

# DataFrame ์ •๋ ฌ 
cus_score.sort_values(by=['customer_segment', 'total_score', 'avg_adr', 'cnt'], ascending=[True, True, False, False], inplace=True)

# ํ•œ๊ธ€ ํฐํŠธ ์„ค์ • 
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False

# ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ 
sns.barplot(x='total_score', y='avg_adr', hue='customer_segment', data=cus_score)

# ํƒ€์ดํ‹€ ๋ฐ ๋ฒ”๋ก€ ์„ค์ •
plt.title('์ด์šฉ๊ฐ ์œ ํ˜•๋ณ„ ํ˜ธํ…” ์‚ฌ์šฉ ์„œ๋น„์Šค ์ ์ˆ˜, ์ผํ‰๊ท  ๋งค์ถœ')
plt.legend(title='customer_segment', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show

 

 

02. ๊ตญ์ ์— ๋”ฐ๋ฅธ total_socre์™€ adr์˜ ๊ด€๊ณ„


์ฒ˜์Œ์—๋Š” ๋‚ด๊ตญ์ธ๊ณผ ์™ธ๊ตญ์ธ ๋‘ ์ง‘๋‹จ์ด๋‹ˆ ์‚ฐ์ ๋„(scatter) ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•ด์„œ, ๊ฐ ์ง‘๋‹จ์˜ ๋งค์ถœ๊ณผ ํ‰๊ท ์˜ ๊ด€๊ณ„๋ฅผ ๋ถ„์„ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค ์ƒ๊ฐํ–ˆ๋Š”๋ฐ์š”. x์ถ•๊ณผ y์ถ•์— ๋ชจ๋‘ ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•ด์„œ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ด๊ธฐ์— ์–ด๋ ต๋”๋ผ๊ณ ์š”...  ๊ทธ๋ฆฌ๊ณ  ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜๊ฐ€ ๋ชจ๋‘ ์ •์ˆ˜์—ฌ์„œ ์ค„๋ฌด๋Šฌ ํ‹ฐ์…”์ธ  ๋งˆ๋ƒฅ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€๋”๋ผ๊ตฌ์š” .... ๐Ÿฅฒ

 

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ํ”ผ๋ฒ— ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์— ์ ํ•ฉํ•œ ์‹œ๊ฐํ™”, ์ •๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•„๋Š” ๊ฒƒ๋„ ์ˆ™๋ จ๋„๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์—ฌ์‹คํžˆ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. 

ํ•ด๋‹น ์ž‘์—…๋„ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„๋Š” SQL, ์‹œ๊ฐํ™”/์ •์ œ๋Š” ํŒŒ์ด์ฌ์„ ํ™œ์šฉํ•ด์„œ ์ง„ํ–‰ํ–ˆ์–ด์š”. 

๊ตญ์ ์— ๋”ฐ๋ฅธ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜์™€ ์ผ์ผ ์š”๊ธˆ๊ณผ์˜ ๊ด€๊ณ„

๊ตญ์ ์— ๋”ฐ๋ฅธ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜์™€ ์ผํ‰๊ท  ๋งค์ถœ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„(SQL) 

select `guest_country`,
	   total_score, 
       round(avg(adr)) as avg_adr
from 
(
    SELECT # total_score์— ๋”ฐ๋ฅธ ํ™œ์„ฑํ™” ๊ณ ๊ฐ ์„ธ๊ทธ๋จผํŠธ
	    	   case when (meal_score + parking_score + request_score) <=1 then '[0~1์ ] ์†Œ๊ทน ์ด์šฉ'
    	   		when (meal_score + parking_score + request_score) <=3 then '[2~3์ ] ํŽธ์˜ ์ด์šฉ'
    	   		else '[4์  ์ด์ƒ] ์ ๊ทน ์ด์šฉ ๊ณ ๊ฐ' end as total_score, 
           adr, 
           `guest_country`,
           hotel, 
           arrival_date_year, 
           arrival_date_month
    FROM 
    (
        SELECT hotel, 
               arrival_date_year, 
               arrival_date_month, 
               adr, 
               if(country = 'PRT', '๋‚ด๊ตญ์ธ', '์™ธ๊ตญ์ธ') as `guest_country`,	
               case when meal in ('SC', 'BB') then 1 
                    when meal = 'HB' then 2 
                    when meal = 'FB' then 3 
                    else 0 end as meal_score, 
               case when required_car_parking_spaces between 1 and 3 then 1
                    when required_car_parking_spaces >= 4 then 2 
                    else 0 end as parking_score,
               case when total_of_special_requests between 1 and 2 then 1
                    when total_of_special_requests >= 3 then 2 
                    else 0 end as request_score
        FROM processed_hotel_booking_file phbf 
        WHERE `adr` > 0 and is_canceled = 0
    ) as scores
) a
group by `guest_country`, total_score
order by avg_adr desc;
ํ”ผ๋ฒ— ํ…Œ์ด๋ธ” ์ œ์ž‘ (ํŒŒ์ด์ฌ)
# DataFrame ์ •๋ ฌ
country_score_str.sort_values(by=['guest_country', 'total_score', 'adr'], ascending=[True, True, False], inplace=True)

# ํ”ผ๋ฒ— ํ…Œ์ด๋ธ” ์ƒ์„ฑ
country_score_str.pivot_table(
    index=['guest_country', 'total_score'],
    values='adr',
    aggfunc=['mean', 'max', 'min', 'count']).round()

 

03. ๋งˆ์ผ“ ์„ธ๊ทธ๋จผํŠธ์— ๋”ฐ๋ฅธ total_score์™€ adr์˜ ๊ด€๊ณ„ 


ํŒ€์›๋“ค๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธํ…” ์ข…๋ฅ˜๋ณ„๋กœ, ์—ฐ๋„๋ณ„๋กœ, ๊ทธ๋ฆฌ๊ณ  3๊ฐœ์˜ ๊ตฐ์ง‘๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ๋ณด๊ธฐ๋กœ ํ•ด์„œ

ํ•ด๋‹น ๋งˆ์ผ“ ์„ธ๊ทธ๋จผํŠธ์— ๋”ฐ๋ฅธ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜์™€ ์ผ์ผ ์š”๊ธˆ์˜ ๊ด€๊ณ„๋„ ์ง‘๊ณ„ํ•ด๋ณด๊ณ  ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ ค๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

๋‹ค๋งŒ, ์˜ˆ์•ฝ ๊ฒฝ๋กœ ์ž์ฒด๊ฐ€ ๊ณ ๊ฐ ์œ ํ˜•์ด๋‚˜ ํŠน์ง•์„ ๋Œ€ํ‘œํ•˜๊ธด ์–ด๋ ค์›Œ์„œ 3๋ฒˆ ๋ถ„์„์€ ์œ ์˜๋ฏธํ•œ ๊ฒฐ๋ก ์„ ๋„์ถœํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”๐Ÿ˜ญ ๐Ÿ˜ญ

๊ทธ๋ž˜๋„ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ์ด ์žˆ์–ด ์ผ๋‹จ ์ •๋ฆฌํ•ด๋ณด์•˜๊ณ , ์œ„์™€ ๋™์ผํ•˜๊ฒŒ SQL๋กœ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„, ํŒŒ์ด์ฌ์œผ๋กœ ์‹œ๊ฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. 

๋งˆ์ผ“ ์„ธ๊ทธ๋จผํŠธ์— ๋”ฐ๋ฅธ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜์™€ ํ‰๊ท  ์ผ๋งค์ถœ ์ง‘๊ณ„ 

select market_segment,
	   total_score,
       round(avg(adr)) as avg_adr
from 
(
    SELECT # total_score์— ๋”ฐ๋ฅธ ํ™œ์„ฑํ™” ๊ณ ๊ฐ ์„ธ๊ทธ๋จผํŠธ
    	   case when (meal_score + parking_score + request_score) <=1 then '[0~1์ ] ์†Œ๊ทน ์ด์šฉ'
    	   		when (meal_score + parking_score + request_score) <=3 then '[2~3์ ] ํŽธ์˜ ์ด์šฉ'
    	   		else '[4์  ์ด์ƒ] ์ ๊ทน ์ด์šฉ ๊ณ ๊ฐ' end as total_score, 
           adr, 
           hotel, 
           arrival_date_year, 
           arrival_date_month,
           market_segment
    FROM 
    (
        SELECT hotel, 
               arrival_date_year, 
               arrival_date_month, 
               adr, 
               market_segment,
               # ํ˜ธํ…” ์‚ฌ์šฉ ์„œ๋น„์Šค์— ๋”ฐ๋ผ ์ ์ˆ˜ ํ• ๋‹น 
               case when meal in ('SC', 'BB') then 1 
                    when meal = 'HB' then 2 
                    when meal = 'FB' then 3 
                    else 0 end as meal_score, 
               case when required_car_parking_spaces between 1 and 3 then 1
                    when required_car_parking_spaces >= 4 then 2 
                    else 0 end as parking_score,
               case when total_of_special_requests between 1 and 2 then 1
                    when total_of_special_requests >= 3 then 2 
                    else 0 end as request_score
        FROM processed_hotel_booking_file phbf 
        WHERE `adr` > 0 and is_canceled = 0
    ) as scores
) a
group by market_segment, total_score
order by avg_adr desc ;
# DataFrame ์ •๋ ฌ 
market_score.sort_values(by=['market_segment', 'total_score', 'avg_adr'], ascending=[True, True, True], inplace=True)

# ๊ธ€๊ผด ์„ค์ •
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False

# ์‹œ๋ณธ์„ ์‚ฌ์šฉํ•œ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
sns.barplot(x='total_score', y='avg_adr', hue='market_segment', data=market_score)

# ํƒ€์ดํ‹€ ๋ฐ ๋ฒ”๋ก€ ์„ค์ • 
plt.title('์˜ˆ์•ฝ ์ฑ„๋„๋ณ„ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜, ์ผํ‰๊ท  ๋งค์ถœ')
plt.legend(title='market_segment', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show

 

[ Today I Learned ] ์ฒ˜์Œ์—” ๊ณ ๊ฐ์˜ ํ–‰๋™์ด๋‚˜ ์œ ํ˜•์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์นผ๋Ÿผ์ด ๋งŽ์ด ์—†์–ด์„œ, 'ํ˜ธํ…” ์„œ๋น„์Šค๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ฐ์ด ๋” ๋งŽ์€ ์†Œ๋น„๋ฅผ ํ•˜์—ฌ ํ‰๊ท  ๋งค์ถœ์ด ๋†’์„ ๊ฒƒ์ด๋‹ค.'๋ผ๋Š” ๊ฐ€์„ค์„ ์„ธ์›Œ ์นผ๋Ÿผ์„ ์ถ”๊ฐ€ํ–ˆ๋˜ ๊ฒƒ์ธ๋ฐ์š”. ์ „๋ฐ˜์ ์œผ๋กœ ํ˜ธํ…” ์„œ๋น„์Šค ์‚ฌ์šฉ ์ ์ˆ˜๊ฐ€ ๋†’์„์ˆ˜๋ก ํ‰๊ท  ๋งค์ถœ์ด ๋†’์€ ์–‘์˜ ์ƒ๊ด€ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์–ด์„œ ์–ด๋А ์ •๋„ ๊ฐ€์„ค์ด ๋งž์€ ๊ฒƒ ๊ฐ™์•„ ์žฌ๋ฏธ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋ฉด ์กฐ๊ธˆ ๋” ๋พฐ์กฑํ•œ ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์š”!  ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์— ์ ํ•ฉํ•œ ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๋งŽ์€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ œ๊ฐ€ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•ด๋ดค์ง€๋งŒ ๋งํ•œ ๊ทธ๋ž˜ํ”„๋“ค์ด์—์š” ... ์˜ค๋Š˜์„ ๊ธฐ๋…ํ•˜๋ฉฐ ์˜ฌ๋ ค๋ด…๋‹ˆ๋‹ค.

 

02๋ฒˆ ๋ฐ์ดํ„ฐ์— ํ”ผ๋ด‡ ํ…Œ์ด๋ธ”์„ ์ ์šฉํ•˜๊ธฐ ์ „ ๊ฑฐ์ณค๋˜ ๋งŽ์€ ์‹œํ–‰ ์ฐฉ์˜ค๋“ค(=๊ทธ๋ž˜ํ”„)