[TIL#33 250407]

๊ฐ•๋ฏผ์ง€ยท2025๋…„ 4์›” 7์ผ

๋ฐ์ดํ„ฐ๋ถ„์„_TIL

๋ชฉ๋ก ๋ณด๊ธฐ
35/81

Daily plan

๐ŸŒž์˜ค์ „

- SQL ์ฝ”๋“œ์นดํƒ€ 89, 90, 91
- 10์‹œ ํ†ต๊ณ„ ๋ผ์ด๋ธŒ์„ธ์…˜
- 11์‹œ 30๋ถ„ ๋ฐœ์ œ?

๐Ÿ”ฅ ์˜คํ›„

- ํ†ต๊ณ„ ๋ผ์ด๋ธŒ์„ธ์…˜ ์ •๋ฆฌ
- ์Šคํƒ ๋‹ค๋“œ 4ํšŒ์ฐจ ์‹ค์Šต ๋ณต์Šต
- ํ†ต๊ณ„ ๊ฐ•์˜ 2์ฃผ์ฐจ + 3์ฃผ์ฐจ~~

๐ŸŒ ์ €๋…

- ํŒŒ์ด์ฌ ๊ฐœ์ธ๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ ํ™•์ธ 
- ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ&์‹œ๊ฐํ™” 3์ฃผ์ฐจ ๋‹ค์‹œ ๋ณต์Šต

To Do

  • โœ… SQL ์ฝ”๋“œ์นดํƒ€ 86~88
  • โœ… ํ†ต๊ณ„ ๋ผ์ด๋ธŒ์„ธ์…˜ ์ •๋ฆฌ & ์‹ค์Šต ๋ณต์Šต
  • โœ… ํ†ต๊ณ„ ๊ฐ•์˜ 2์ฃผ์ฐจ (2-3~)
  • โ›” ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 2ํšŒ์ฐจ ์‹ค์Šต ๋ณต์Šต + ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ๋งŒ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌ
  • โœ… ๊ฐœ์ธ๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ ํ™•์ธ
  • โ›” QCC 4๋ฒˆ ๋ฌธ์ œ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ

์ด๋ฒˆ์ฃผ ๋ชฉํ‘œ

  • ํ†ต๊ณ„ํ•™ ๊ฐ•์˜ ์™„๊ฐ•
  • ์‹œ๊ฐํ™”&์ „์ฒ˜๋ฆฌ ๊ฐ•์˜ ์™„๊ฐ•
  • ๋ฐ์ดํ„ฐ๋ถ„์„ ํŒŒ์ด์ฌ ์ข…ํ•ฉ๋ฐ˜ 5์ฃผ์ฐจ ์ •๋ฆฌ
  • ํ†ต๊ณ„ ๋ผ์ด๋ธŒ์„ธ์…˜ ์ •๋ฆฌ&๋ณต์Šต ๋ฐ€๋ฆฌ์ง€ ์•Š๊ธฐ!
  • ํŒŒ์ด์ฌ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์ •๋ฆฌ&๋ณต์Šต ๋ฐ€๋ฆฌ์ง€ ์•Š๊ธฐ!
  • ํŒŒ์ด์ฌ ๋ฒ ์ด์ง๋ฐ˜ ๋‚ด์šฉ ๊ณต๋ถ€ (ํ—ท๊ฐˆ๋ฆฌ๊ฑฐ๋‚˜ ์ฒ˜์Œ๋ณด๋Š” ๋‚ด์šฉ๋“ค๋งŒ ์ •๋ฆฌ)
  • ์ง€๋‚œ ํ”„๋กœ์ ํŠธ ๋นจ๋ฆฌ ์ •๋ฆฌํ•ด์„œ ์—…๋กœ๋“œํ•˜์ž...
  • SQL ์ฝ”๋“œ์นดํƒ€ 100๋ฒˆ ์ฐ๊ธฐ!

SQL ์ฝ”๋“œ์นดํƒ€

Q86 - Average Time of Process per Machine

select machine_id, 
    round(avg(time_diff),3) as processing_time
from(
    select a1.machine_id, a1.process_id,
        a2.timestamp-a1.timestamp as time_diff
    from activity a1 
        join activity a2
        on a1.machine_id=a2.machine_id 
        and a1.process_id=a2.process_id
        and a1.activity_type = 'start'
        and a2.activity_type = 'end'
    ) t
group by machine_id
  • join ํ•  ๋•Œ on์ ˆ์— and ๋˜๋Š” or๋กœ ์กฐ๊ฑด ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ
  • ๋™์ผํ•œ ํ…Œ์ด๋ธ”์—์„œ activity_type์ด 'start'์ธ ๊ฒฝ์šฐ์™€ 'end'์ธ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ join

Q87 - Employee Bonus

select e.name, b.bonus
from employee e 
    left join bonus b
    on e.empId = b.empId
where b.bonus<1000 or b.bonus is null

๋ฌธ์ œ ์กฐ๊ฑด์—์„œ null๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•ด์„œ

  • left join์„ ํ•˜๊ณ ,
  • where์ ˆ์— b.bonus<1000๋งŒ ์ ์—ˆ๋”๋‹ˆ null๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธ๋ผ์„œ b.bonus๊ฐ€ null์ธ ๊ฒฝ์šฐ๋„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ์กฐ๊ฑด์„ ํ•˜๋‚˜ ๋” ๊ฑธ์–ด์คŒ

Q88 - Students and Examinations

select st.student_id, st.student_name, sub.subject_name, 
    if(e.cnt is null, 0, e.cnt) attended_exams
from students st
    cross join subjects sub
    left join (select student_id, subject_name, count(1) cnt
               from examinations
               group by student_id, subject_name) e
    on st.student_id = e.student_id
        and sub.subject_name=e.subject_name
order by student_id, subject_name
  • cross join์„ ์ด์šฉ
    - ๋จผ์ € students์™€ subjects ํ…Œ์ด๋ธ”์„ crossjoinํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํ•™์ƒ ๋ชจ๋‘ ๋ชจ๋“  ๊ณผ๋ชฉ์— ๋Œ€ํ•œ ํ–‰์„ ๊ฐ€์ง€๋„๋ก ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ
    • students์™€ examinations๋ฅผ ํ•ฉ์น˜๋ฉด ํŠน์ • ๊ณผ๋ชฉ์„ ๋“ฃ์ง€ ์•Š์€ ํ•™์ƒ์—์„œ๋Š” ๊ทธ ๊ณผ๋ชฉ์— ๋Œ€ํ•œ ์นด์šดํŠธ๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
    • cross join ํ•œ ํ…Œ์ด๋ธ”๊ณผ ๊ณผ๋ชฉ๋ณ„ count ์—ด์„ ์ถ”๊ฐ€ํ•œ examinations ํ…Œ์ด๋ธ”์„ join
      - count๊ฐ€ ์—†๋Š” ํ–‰์€ null๋กœ ํ‘œ์‹œ๋˜๋ฏ€๋กœ 0์œผ๋กœ ๋ฐ”๊พธ์–ด์คŒ

๋” ์ข‹์€ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ์ง€ํ”ผํ‹ฐ ์„ ์ƒ๋‹˜๊ป˜ ์—ฌ์ญค๋ณธ ๊ฒฐ๊ณผ

WITH exam_counts AS (
    SELECT 
        student_id, 
        subject_name, 
        COUNT(*) AS cnt
    FROM examinations
    GROUP BY student_id, subject_name
)

SELECT 
    st.student_id, 
    st.student_name, 
    sub.subject_name, 
    COALESCE(e.cnt, 0) AS attended_exams
FROM students st
CROSS JOIN subjects sub
LEFT JOIN exam_counts e 
    ON st.student_id = e.student_id 
    AND sub.subject_name = e.subject_name
ORDER BY st.student_id, sub.subject_name;
  • ์—ญ์‹œ๋‚˜ with ๊ตฌ๋ฌธ์„ ์“ฐ๋ผ๊ณ  ์ถ”์ฒœํ•ด์ฃผ์‹ฌ (๊ฐ€๋…์„ฑ ์ฆ๊ฐ€)
  • COALESCE(e.cnt, 0)
    - if์ ˆ ๋Œ€์‹  ์ด๊ฑธ ์“ฐ๋ผ๊ณ  ์•Œ๋ ค์ฃผ์‹ฌ
    - coalesce ํ•จ์ˆ˜๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‘ ์ปฌ๋Ÿผ์„ ํ•ฉ์น˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋ฉฐ, ์ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด์„œ Null๊ฐ’์„ ํŠน์ • ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•จ
    SELECT a, b, COALESCE(a,b) FROM test;
    • ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๊ณ , ์ฒซ๋ฒˆ์งธ ์ธ์ž(a)์˜ 0๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ value๋ฅผ ์‚ดํ•Œ
    • ๋งŒ์•ฝ a์˜ 0๋ฒˆ์งธ ํ–‰์ด Null์ด๋ฉด ๊ฐ™์€ ์ค„์— ์žˆ๋Š” b์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด
    • b ๋Œ€์‹  Null๊ฐ’์˜ ๋Œ€์ฒด๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ ํ™œ์šฉ ๊ฐ€๋Šฅ

ํ†ต๊ณ„ ๋ผ์ด๋ธŒ์„ธ์…˜ 3ํšŒ์ฐจ

์œ ์˜์ˆ˜์ค€

  • ์ค‘์‹ฌ๊ทนํ•œ์ •๋ฆฌ
    : ๋ชจ์ง‘๋‹จ์˜ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ํฌ๋‹ค๋ฉด, ๋ชจ์ง‘๋‹จ์˜ ๋ถ„ํฌ๊ฐ€ ์–ด๋–ค ๋ชจ์–‘์ด๋”๋ผ๋„ ํ‘œ๋ณธํ‰๊ท ์˜ ๋ถ„ํฌ๊ฐ€ ์ •๊ทœ๋ถ„ํฌ๋ฅผ ์ด๋ฃจ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ชจ์ง‘๋‹จ์˜ ๋ชจ์ˆ˜๋ฅผ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • ์œ ์˜์ˆ˜์ค€(ฮฑ)
    : ๊ท€๋ฌด๊ฐ€์„ค์ด ๋งž์„ ๋•Œ ๊ธฐ๊ฐํ•  ํ™•๋ฅ 
    95% ์‹ ๋ขฐ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ ์˜์ˆ˜์ค€์€ 0.05 (์‹ ๋ขฐ๋„์™€ ๋ฐ˜๋Œ€์˜ ๊ฐœ๋…)
  • ์ •๊ทœ๋ถ„ํฌ ๊ทธ๋ž˜ํ”„
    - ๊ทธ๋ž˜ํ”„ ๋ฉด์ ์€ ํ™•๋ฅ ์„ ์˜๋ฏธํ•˜๋ฉฐ, 0~1 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง

๊ฒ€์ •ํ†ต๊ณ„๋Ÿ‰

  • ๊ฒ€์ •ํ†ต๊ณ„๋Ÿ‰
    : ๊ท€๋ฌด๊ฐ€์„ค ์ฑ„ํƒ ๋˜๋Š” ๊ธฐ๊ฐ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ™•๋ฅ ๋ณ€์ˆ˜
    ํ™•๋ฅ ๋ณ€์ˆ˜๋ž€ ํŠน์ • ํ™•๋ฅ ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์น˜๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ณ€์ˆ˜
    ex) ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์กŒ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ˆซ์ž๋ฅผ ํ™•๋ฅ ๋ณ€์ˆ˜ X๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, X = 1,2,3,4,5,6

p-value

  • p-value: ์–ด๋–ค ์‚ฌ๊ฑด์ด ์šฐ์—ฐํžˆ ๋ฐœ์ƒํ•  ํ™•๋ฅ ๋กœ, 0์ด์ƒ 1์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง
  • p-value๊ฐ€ 0.05๋ณด๋‹ค ์ž‘๋‹ค
    = ์šฐ์—ฐํžˆ ์ผ์–ด๋‚ฌ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฑฐ์˜ ์—†๋‹ค
    = ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ์ถ”์ • ๊ฐ€๋Šฅํ•˜๋‹ค
    = ๋Œ€๋ฆฝ๊ฐ€์„ค ์ฑ„ํƒ
  • ๋ฐ˜๋Œ€๋กœ p-value๊ฐ€ 0.05๋ณด๋‹ค ํฌ๋ฉด, ์šฐ์—ฐํžˆ ์ผ์–ด๋‚ฌ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค๊ณ  ์ถ”์ •ํ•˜์—ฌ ๋Œ€๋ฆฝ๊ฐ€์„ค์„ ๊ธฐ๊ฐ

์‹ค์Šต์€ ์ฃผํ”ผํ„ฐ์—,,,


ํ†ต๊ณ„ํ•™ ๊ธฐ์ดˆ ๊ฐ•์˜

2ํšŒ์ฐจ(2-3~)

์ •๊ทœ๋ถ„ํฌ

  • ์ข… ๋ชจ์–‘์˜ ๋Œ€์นญ ๋ถ„ํฌ
  • ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ‰๊ท  ์ฃผ์œ„์— ๋ชฐ๋ ค ์žˆ๋Š” ๋ถ„ํฌ๋กœ, ํ‰๊ท ์„ ์ค‘์‹ฌ์œผ๋กœ ์ขŒ์šฐ ๋Œ€์นญ์ด๋ฉฐ ํ‰๊ท ์—์„œ ๋ฉ€์–ด์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ ๋นˆ๋„๊ฐ€ ๊ฐ์†Œ
  • ํ‘œ์ค€ํŽธ์ฐจ๋Š” ๋ถ„ํฌ์˜ ํผ์ง ์ •๋„๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ์ •๊ทœ๋ถ„ํฌ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ -> ์ค‘์‹ฌ๊ทนํ•œ์ •๋ฆฌ
  • ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ๊ด€์ฐฐ๋˜๋Š” ๋ถ„ํฌ

ํŒŒ์ด์ฌ ์‹ค์Šต

# ์ •๊ทœ๋ถ„ํฌ ์ƒ์„ฑ
normal_dist = np.random.normal(170, 10, 1000) # ํ‰๊ท , ํ‘œ์ค€ํŽธ์ฐจ, ๊ฐœ์ˆ˜
#
# ํžˆ์Šคํ† ๊ทธ๋žจ ์‹œ๊ฐํ™”
plt.hist(normal_dist, bins=30, density=True, alpha=0.6, color='g')
#
# ์ •๊ทœ๋ถ„ํฌ ๊ณก์„  ์ถ”๊ฐ€
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('normal distribution histogram')
plt.show()
#
# ์ •๊ทœ๋ถ„ํฌ ๊ณก์„ ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํžˆ์Šคํ† ๊ทธ๋žจ์ด ์ •๊ทœ๋ถ„ํฌ์™€ ์–ผ๋งˆ๋‚˜ ๊ฐ€๊นŒ์šด ํ˜•ํƒœ๋ฅผ ๋„๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

๊ธด ๊ผฌ๋ฆฌ ๋ถ„ํฌ

  • ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„ํฌ์˜ ํ•œ์ชฝ ๋์— ๋ชฐ๋ ค์žˆ๊ณ , ๋ฐ˜๋Œ€์ชฝ์œผ๋กœ ๊ธด ๊ผฌ๋ฆฌ๊ฐ€ ์ด์–ด์ง€๋Š” ํ˜•ํƒœ
  • ๋น„๋Œ€์นญ์ 
  • ํŠน์ •ํ•œ ํ•˜๋‚˜์˜ ๋ถ„ํฌ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์œผ๋ฉฐ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ถ„ํฌ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
    - ํŒŒ๋ ˆํ†  ๋ถ„ํฌ, ์ง€ํ”„์˜ ๋ฒ•์น™, ๋ฉฑํ•จ์ˆ˜ ๋“ฑ
  • ์ผ๋ถ€๊ฐ€ ์ „์ฒด์ ์œผ๋กœ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
    - ์†Œ๋“ ๋ถ„ํฌ, ์›น์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ์ž ์ˆ˜, ๋„์„œ ํŒ๋งค ๋“ฑ

ํŒŒ์ด์ฌ ์‹ค์Šต

  # ๊ธด ๊ผฌ๋ฆฌ ๋ถ„ํฌ ์ƒ์„ฑ
  long_tail = np.random.exponential(1,1000)
  #
  # ํžˆ์Šคํ† ๊ทธ๋žจ ์‹œ๊ฐํ™”
  plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='b')
  plt.title('long tail distribution histogram')
  plt.show()

์ŠคํŠœ๋˜ํŠธ t๋ถ„ํฌ

  • ํ‘œ๋ณธ์ด ์ž‘์„ ๋•Œ (๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ) ์ •๊ทœ๋ถ„ํฌ ๋Œ€์‹  ์‚ฌ์šฉ (์ผ๋ฐ˜์ ์œผ๋กœ 30๊ฐœ ๋ฏธ๋งŒ)
  • ์ž์œ ๋„๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ •๊ทœ๋ถ„ํฌ์— ๊ฐ€๊นŒ์›Œ์ง
    - ์ž์œ ๋„๋Š” ํ‘œ๋ณธ์˜ ํฌ๊ธฐ์™€ ๊ด€๋ จ ์žˆ๋Š” ๊ฐ’์ด๋ฏ€๋กœ, ํ‘œ๋ณธ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ •๊ทœ๋ถ„ํฌ์— ๊ฐ€๊นŒ์›Œ์ง„๋‹ค๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ
  • ์ •๊ทœ๋ถ„ํฌ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ‘œ๋ณธ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์„์ˆ˜๋ก ๊ผฌ๋ฆฌ๊ฐ€ ๋‘๊บผ์›Œ์ง€๋Š” ํŠน์ง•์ด ์žˆ์Œ
  • ์ž‘์€ ํ‘œ๋ณธ์˜ ํ‰๊ท ์„ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ
    - ์•ฝ๋ฌผ ์‹œํ—˜ ๋“ฑ

ํŒŒ์ด์ฌ ์‹ค์Šต

# ์ŠคํŠœ๋˜ํŠธ t๋ถ„ํฌ ์ƒ์„ฑ
t_dist = np.random.standard_t(df=10, size=1000)  # df๋Š” ์ž์œ ๋„๋ฅผ ์˜๋ฏธ
# 
# ํžˆ์Šคํ† ๊ทธ๋žจ ์‹œ๊ฐํ™”
plt.hist(t_dist, bins=30, density=True, alpha=0.6, color='r'
#
# ์ŠคํŠœ๋˜ํŠธ t๋ถ„ํฌ ๊ณก์„  ์ถ”๊ฐ€
x = np.linspace(-4,4,100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('student t distribution histogram')
plt.show()

์นด์ด์ œ๊ณฑ๋ถ„ํฌ

  • ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ์˜ ๋…๋ฆฝ์„ฑ ๊ฒ€์ •์ด๋‚˜ ์ ํ•ฉ๋„ ๊ฒ€์ •์— ์‚ฌ์šฉ๋˜๋Š” ๋ถ„ํฌ
  • k๊ฐ’์€ ์ž์œ ๋„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ž์œ ๋„์— ๋”ฐ๋ผ ๋ชจ์–‘์ด ๋‹ฌ๋ผ์ง
  • ์นด์ด์ œ๊ณฑ๋ถ„ํฌ๋„ ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ •๊ทœ๋ถ„ํฌ์— ๊ทผ์‚ฌ
  • ์ƒ๊ด€๊ด€๊ณ„๋‚˜ ์ธ๊ณผ๊ด€๊ณ„๋ฅผ ํŒ๋ณ„ํ•˜๊ณ ์ž ํ•˜๋Š” ์›์ธ์˜ ๋…๋ฆฝ๋ณ€์ˆ˜๊ฐ€ '์™„๋ฒฝํ•˜๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ์งˆ์  ์ž๋ฃŒ'์ผ ๋•Œ ํ™œ์šฉ
    - ex) ์„ฑ๋ณ„์ด๋‚˜ ๋‚˜์ด์— ๋”ฐ๋ฅธ ์„ ๊ฑฐ ํ›„๋ณด ์ง€์ง€์œจ
  • '๊ด€์ธกํ•œ ๊ฐ’๋“ค์ด ํŠน์ • ๋ถ„ํฌ์— ํ•ด๋‹นํ•˜๋Š”์ง€?' ์ ํ•ฉ๋„ ๊ฒ€์ •์„ ํ•  ๋•Œ ์‚ฌ์šฉ

    ํŒŒ์ด์ฌ ์‹ค์Šต

    # ์นด์ด์ œ๊ณฑ๋ถ„ํฌ ์ƒ์„ฑ
    chi2_dist = np.random.chisquare(df=2, size=1000)
    #
    # ํžˆ์Šคํ† ๊ทธ๋žจ์œผ๋กœ ์‹œ๊ฐํ™”
    plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='m')
    #
    # ์นด์ด์ œ๊ณฑ๋ถ„ํฌ ๊ณก์„  ์ถ”๊ฐ€
    x = np.linspace(0,10,100)
    p = stats.chi2.pdf(x, df=2)
    plt.plot(x, p, 'k', linewidth=2)
    plt.title('์นด์ด์ œ๊ณฑ ๋ถ„ํฌ ํžˆ์Šคํ† ๊ทธ๋žจ')
    plt.show() 

์ดํ•ญ๋ถ„ํฌ

  • ๊ฒฐ๊ณผ๊ฐ€ 2๊ฐœ ๋‚˜์˜ค๋Š” ์ƒํ™ฉ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„ํฌ
    - ์„ฑ๊ณต/์‹คํŒจ์™€ ๊ฐ™์€ ๋‘๊ฐ€์ง€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๋Š” ์‹คํ—˜์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ–ˆ์„ ๋•Œ ์„ฑ๊ณต ํšŸ์ˆ˜์˜ ๋ถ„ํฌ
    • ๋…๋ฆฝ์ ์ธ ์‹œํ–‰์ด n๋ฒˆ ๋ฐ˜๋ณต๋˜๊ณ , ๊ฐ ์‹œํ–‰ํ•ด์„œ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๋ถ„ํฌ
  • ์—ฐ์†๋œ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ํŠน์ •ํ•œ ์ •์ˆ˜ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • ์ดํ•ญ๋ถ„ํฌ์ฒ˜๋Ÿผ ์—ฐ์†๋œ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๋ถ„ํฌ๋ฅผ ์ด์‚ฐํ˜• ๋ถ„ํฌ๋ผ๊ณ  ์ง€์นญํ•˜๊ธฐ๋„ ํ•จ
  • ์„ฑ๊ณต ํ™•๋ฅ ์„ p๋ผ๊ณ  ํ•  ๋•Œ ์„ฑ๊ณต์˜ ํšŸ์ˆ˜๋ฅผ ํ™•๋ฅ ์ ์œผ๋กœ ๋‚˜ํƒ€๋ƒ„
  • ์‹คํ—˜ ํšŸ์ˆ˜(n)์™€ ์„ฑ๊ณต ํ™•๋ฅ (p)๋กœ ์ •์˜๋จ

    ํŒŒ์ด์ฌ ์‹ค์Šต

    # ์ดํ•ญ๋ถ„ํฌ ์ƒ์„ฑ
    binom_dist = np.random.binomial(n=10, p=0.5, size=1000)
    #
    # ํžˆ์Šคํ† ๊ทธ๋žจ ์‹œ๊ฐํ™”
    plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
    plt.title('์ดํ•ญ ๋ถ„ํฌ ํžˆ์Šคํ† ๊ทธ๋žจ')
    plt.show()

ํ‘ธ์•„์†ก๋ถ„ํฌ

  • ํฌ๊ท€ํ•œ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„ํฌ
    - ๋‹จ์œ„ ์‹œ๊ฐ„ ๋˜๋Š” ๋‹จ์œ„ ๋ฉด์  ๋‹น ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๊ฑด์˜ ์ˆ˜๋ฅผ ๋ชจ๋ธ๋งํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„ํฌ
  • ํ‰๊ท  ๋ฐœ์ƒ๋ฅ (ฮป)์ด ์ถฉ๋ถ„ํžˆ ํฌ๋ฉด ์ •๊ทœ๋ถ„ํฌ์— ๊ทผ์‚ฌ
    - ํ‰๊ท  ๋ฐœ์ƒ๋ฅ : ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์ด๋‚˜ ๊ณต๊ฐ„์—์„œ ์‚ฌ๊ฑด์ด ๋ช‡ ๋ฒˆ ๋ฐœ์ƒํ–ˆ๋Š”์ง€
  • ์—ฐ์†ํ•œ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด์‚ฐํ˜• ๋ถ„ํฌ์— ํ•ด๋‹น
  • ํŠน์ • ๊ณต๊ฐ„์ด๋‚˜ ํŠน์ • ์‹œ๊ฐ„์— ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ
    - ex) ์ฝœ์„ผํ„ฐ, ๊ตํ†ต์‚ฌ๊ณ , ๋ฌธ์ž๋ฉ”์„ธ์ง€, ์œ•์‚ฌ์ดํŠธ ํŠธ๋ž˜ํ”ฝ ๋“ฑ

    ํŒŒ์ด์ฌ ์‹ค์Šต

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import poisson
    #
    # ํ‘ธ์•„์†ก ๋ถ„ํฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
    lambda_value = 4  ## ํ‰๊ท  ๋ฐœ์ƒ๋ฅ 
    x = np.arange(0,15)  ## ์‚ฌ๊ฑด ๋ฐœ์ƒ ํšŸ์ˆ˜ ๋ฒ”์œ„
    #
    # ํ‘ธ์•„์†ก ๋ถ„ํฌ ํ™•๋ฅ  ์งˆ๋Ÿ‰ ํ•จ์ˆ˜ ๊ณ„์‚ฐ
    poisson_pmf = poisson.pmf(x, lambda_value)
    #
    # ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
    plt.figure(figsize=(10,6))
    plt.bar(x, poisson_pmf, alpha=0.6, color='b', label=f'Poisson PMF (lambda={lambda_value})')
    plt.xlabel('Number of Events')
    plt.ylabel('Probability')
    plt.title('Poisson Distribution')
    plt.legend()
    plt.grid(True)
    plt.show()

3์ฃผ์ฐจ ๋‚ด์šฉ์€ ์˜ค๋Š˜ ํ†ต๊ณ„ ๋ผ์ด๋ธŒ์„ธ์…˜์œผ๋กœ ๋“ค์€ ๋‚ด์šฉ์ด๋ž‘ ๋„ˆ๋ฌด ๊ฒน์ณ์„œ ๋ณต์Šตํ•  ๊ฒธ ๋‚ด์ผ ๋“ค์–ด์•ผ๊ฒ ๋‹ค


ํŒŒ์ด์ฌ ๊ฐœ์ธ๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

7๋ฒˆ

์ขŒํ‘œ ์„ค์ • ์˜ค๋ฅ˜.. y์ขŒํ‘œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์ž๋ฆฌ์— x์ขŒํ‘œ ๊ณ„์‚ฐํ•จ

  • i[1][j+1][1]-i[1][j][0] -> i[1][j+1][1]-i[1][j][1] ์œผ๋กœ ์ˆ˜์ •
def calculate_total_distances(player_positions):
    # ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”
    for i in player_positions.items():
        distance=0
        for j in range(len(i[1])-1):
            distance += ((i[1][j+1][0]-i[1][j][0])**2+(i[1][j+1][1]-i[1][j][1])**2)**(1/2) 
        print (i[0]+"์˜ ์ด ๋ˆ„์  ์ด๋™ ๊ฑฐ๋ฆฌ: "+str(round(distance,2))+" ๋ฏธํ„ฐ")

8๋ฒˆ

ํŠœํ„ฐ๋‹˜ ํ”ผ๋“œ๋ฐฑ์ด ์ดํ•ด๊ฐ€ ๊ฐ€์งˆ ์•Š์•„์š”...
"์•”ํ˜ธ ํ•ด๋… ํ•จ์ˆ˜๊ฐ€ ์˜์–ด์™€ ํ•œ๊ธ€ ์ˆซ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ๋กœ์ง์€ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์˜์–ด ์ˆซ์ž ์ฒ˜๋ฆฌ ๋ถ€๋ถ„์—์„œ ๋ฌธ์ž์—ด ์‹œ์ž‘ ๋‘ ๊ธ€์ž๋งŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์€ ์ „์ฒด ๋‹จ์–ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒ๋ณ„ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "five"์™€ "four"๋Š” ์ฒซ ๋‘ ๊ธ€์ž๊ฐ€ ๊ฐ™์Šต๋‹ˆ๋‹ค." (?????)

์ด๊ฑด ๋‚ด์ผ ํŠœํ„ฐ๋‹˜๊ป˜ ์งˆ๋ฌธํ•˜๋Ÿฌ ๊ฐ€์•ผ๊ฒ ๋‹ค..


์ผ๊ธฐ


ํŒ€๋ณต์„ ๋งž์ท„์–ด์š”
ํ”ผ๋ถ€์ƒ‰๋„ ์ฐธ ์š”๋ž€์Šค๋Ÿฝ๋‹ค

5์กฐ์— ์ƒˆ ์‹๊ตฌ๊ฐ€ ์ƒ๊ฒผ์–ด์š”
๊ท€์—ฌ์šด ๋น„์ˆ‘
์ด๋ฆ„: ๋น„์ˆ‘์ธ๋Œ€์šฉ (๋น„์ˆ‘์ธ...'๋Œ€์šฉ'....)

๋ณธ๊ฐ€์— ์™€์„œ ํ•˜๋ฃจ์ข…์ผ ๋จน๊ธฐ๋งŒํ–ˆ๋”๋‹ˆ ์–ผ๊ตด์ด ๋„ˆ๋ฌด ๋ถ€์€ ๊ฑฐ ๊ฐ™๋‹คใ…Ž
๋ถ„๋ช… ์–ด์ œ ์ง‘์— ๋„์ฐฉํ–ˆ์„ ๋•Œ๋งŒ ํ•ด๋„ ๋ฐฐ๊ฐ€ ์ข€ ํ™€์ญ‰ํ–ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ๋นต๋นตํ•ด์ง..
์‚ด์ฐŒ๊ธฐ ์ „์— ์–ด์„œ ์„œ์šธ๋กœ ๋Œ์•„๊ฐ€์•ผ๊ฒ ๋‹ค,,

0๊ฐœ์˜ ๋Œ“๊ธ€