๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก Data Analysis/Study

[DA][Python] ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ - ์ผ๋ณ„ ์ถœํ‡ด๊ทผ ๊ธฐ๋ก ๋ถ„์„

by Sun A 2024. 7. 2.

์ฃผ์ œ

๊ณต์žฅ์˜ ์ผ๋ณ„ ์ถœํ‡ด๊ทผ ๊ธฐ๋ก์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ผ์ฐ ์ถœ๊ทผํ•˜๋Š” ๊ทผ๋ฌด์ž์™€ ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ํ‡ด๊ทผํ•˜๋Š” ๊ทผ๋ฌด์ž์˜ ์„ฑํ•จ๊ณผ ์‹œ๊ฐ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ

 

๋ฐ์ดํ„ฐ ํ˜•์‹

  • ํ•จ์ˆ˜๋ช… : records
'YYYY-MM-DD' : {
	'worker name1' : ('์ถœ๊ทผ ์‹œ๊ฐ„', 'ํ‡ด๊ทผ ์‹œ๊ฐ„'),
	'worker name2' : ('์ถœ๊ทผ ์‹œ๊ฐ„', 'ํ‡ด๊ทผ ์‹œ๊ฐ„'),
	.....}

 

์š”๊ตฌ์‚ฌํ•ญ

1. ์ถœํ‡ด๊ทผ ๊ธฐ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋”•์…”๋„ˆ๋ฆฌ ์ •์˜

2. ๊ฐ€์žฅ ์ผ์ฐ ์ถœ๊ทผํ•˜๋Š” ๊ทผ๋ฌด์ž๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜ 'earliest_worker(records)'

3. ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ํ‡ด๊ทผํ•˜๋Š” ๊ทผ๋ฌด์ž๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜ 'latest_worker(records)'

 

์˜ˆ์‹œ ๋ฐ์ดํ„ฐ

records = {
    '2024-07-01' : {
        '์„ ์• ' : ('08:00', '17:00'),
        '์„œ์˜' : ('09:00', '18:00'),
        '์ˆ˜์ง€' : ('10:00', '19:00')
    },
    '2024-07-02' : {
        '์„ ์• ' : ('08:15', '17:40'),
        '์„œ์˜' : ('08:00', '17:00'),
        '์ˆ˜์ง€' : ('09:00', '18:00')
    }
}

 

์ตœ์ข… ์ถœ๋ ฅ๊ฐ’

๊ฐ€์žฅ ์ผ์ฐ ์ถœ๊ทผํ•œ ๊ทผ๋ฌด์ž์™€ ์ถœ๊ทผ ์‹œ๊ฐ„ {'2024-07-01': ('์„ ์• ', '08:00'), '2024-07-02': ('์„œ์˜', '08:00')}
๊ฐ€์žฅ ๋Šฆ๊ฒŒ ํ‡ด๊ทผํ•œ ๊ทผ๋ฌด์ž์™€ ํ‡ด๊ทผ ์‹œ๊ฐ„ {'2024-07-01': ('์ˆ˜์ง€', '19:00'), '2024-07-02': ('์ˆ˜์ง€', '18:00')}

 

ํ•จ์ˆ˜ ์ƒ์„ฑํ•˜๊ธฐ

earliest_work ํ•จ์ˆ˜

# ์ผ์ฐ ์ถœ๊ทผํ•˜๋Š” ๊ทผ๋ฌด์ž
def earliest_work(records):
    earliest_times = {}
    
    for date, workers in records.items():
        earliest_worker, earliest_time = min(workers.items(), key=lambda x: x[1][0])
        earliest_times[date] = (earliest_worker, earliest_time[0])
        
    return earliest_times

 

def earliest_work(records):
  • earliest_work ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค
  • records๋ผ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

 

earliest_times = {}
  • ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

 

for date, workers in records.items() :
  • records  ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฐ ๋‚ ์งœ(date)์™€ ํ•ด๋‹น ๋‚ ์งœ์˜ ๊ทผ๋ฌด์ž ์ถœํ‡ด๊ทผ ๊ธฐ๋ก(workers) ์ˆœํšŒ
  • records ๊ฐ’์—์„œ (date:workers)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

earliest_worker, ealiest_time = min(workers.items(), key=lambda x: x[1][0])
  • earliest_time์€ ๊ฐ€์žฅ ๋นจ๋ฆฌ ์ถœ๊ทผํ•œ ์‚ฌ๋žŒ์˜ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • workers ๊ฐ’์˜ ํ˜•ํƒœ๋Š” '์ด๋ฆ„' : ('์ถœ๊ทผ์‹œ๊ฐ„' : 'ํ‡ด๊ทผ์‹œ๊ฐ„')
    • ์œ„์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— workers์˜ ๊ฐ’์˜ '์ถœ๊ทผ์‹œ๊ฐ„' ์ค‘, ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ min์„ ์“ด๋‹ค.
    • index๋กœ ์น˜๋ฉด ('์ถœ๊ทผ์‹œ๊ฐ„' : 'ํ‡ด๊ทผ์‹œ๊ฐ„')์€ [1], ์ถœ๊ทผ์‹œ๊ฐ„์€ [0]

 

earliest_times[date] = (ealiest_worker, earliest_time[0])
  • ์ด์ œ ์ตœ์ข…์ ์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ์— ๋„ฃ์„ ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค.
  • earliest_times ๋”•์…”๋„ˆ๋ฆฌ์— ๋‚ ์งœ(date)๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ทผ๋ฌด์ž ์ด๋ฆ„(earliest_worker)๊ณผ ์ถœ๊ทผ ์‹œ๊ฐ„(earliest_time[0])์„ ํŠœํ”Œ๋กœ ์ €์žฅํ•œ๋‹ค.

 

return earliest_times
  • ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

 

latest_work ํ•จ์ˆ˜

# ๋Šฆ๊ฒŒ ํ‡ด๊ทผํ•˜๋Š” ๊ทผ๋ฌด์ž
def latest_work(records) : 
    latest_times = {}
    
    for date, workers in records.items() :
        latest_worker, latest_time = max(workers.items(), key=lambda x:x[1][1])
        latest_times[date] = (latest_worker, latest_time[1])
        
    return latest_times
  • earliest์™€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ lambda ์ •์˜๋งŒ ๋‹ค๋ฅด๋‹ค.

 

max(workers.items(), key=lambda x:x[1][1])
  • ํ‡ด๊ทผ ์‹œ๊ฐ„์€ ๊ฐ€์žฅ ๋Šฆ์€ ์‹œ๊ฐ„์„ ๊ณจ๋ผ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— max์ด๋ฉฐ 1์˜ ๊ฐ’์ด๋ฏ€๋กœ [1]์ด๋‹ค.

 

์˜ˆ์‹œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ›„ ์ถœ๋ ฅํ•˜๊ธฐ

- ์˜ˆ์‹œ ๋ฐ์ดํ„ฐ๋Š” ์œ„๋ฅผ ์ฐธ์กฐ

์ถœ๋ ฅ

print("๊ฐ€์žฅ ์ผ์ฐ ์ถœ๊ทผํ•œ ๊ทผ๋ฌด์ž์™€ ์ถœ๊ทผ ์‹œ๊ฐ„", earliest_work(records))
print("๊ฐ€์žฅ ๋Šฆ๊ฒŒ ํ‡ด๊ทผํ•œ ๊ทผ๋ฌด์ž์™€ ํ‡ด๊ทผ ์‹œ๊ฐ„", latest_work(records))

 

์ตœ์ข… ์ถœ๋ ฅ๊ฐ’

 


ํ•ด๋‹น ๋ฐ์ดํ„ฐ ํ•จ์ˆ˜ ์ƒ์„ฑ์„ ์ƒ๊ฐํ•œ ์ด์œ 

๋Œ€๊ทœ๋ชจ ์ธ์›์ด ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„์„ ์ž…๋ ฅํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํšŒ์‚ฌ๋‚˜ ๊ณต์žฅ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ณ„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„ ๊ด€๋ฆฌ์— ์œ ์šฉํ•˜๋‹ค. ์—ฌ๊ธฐ์„œ ๋‚˜์•„๊ฐ€ ๊ฐ ๋ถ€์„œ๋ณ„๋กœ ์ง์›๋“ค์˜ ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์„œ๋น„์Šค์˜ ๊ธฐ๋ฐ˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค.