TIL_3주차(1) 데이터분석_개인과제(1)

원진·2024년 12월 30일

#들어가며,,,,
첫 개인과제를 받았는데, 어려웠던 내용을 따로 뽑아 작성하였다.

문제 2-3 : 특정 개수 이상의 데이터의 합 구하기

배경

우리 공장에서는 매일 일정 수량의 부품을 생산하지만, 품질 문제로 인해 생산량이 줄어드는 경우도 발생합니다. 특정 기준(예: 하루 100개 이상)을 초과하여 생산된 날들의 생산량 합계를 계산하여 공장의 생산 효율성을 분석하고자 합니다.

목표

일일 생산 수량이 기록된 리스트를 활용하여, 특정 기준 이상 생산된 날의 생산 수량 합계를 계산하는 함수를 작성하세요.

데이터

production_counts : 일 별 생산량 리스트

내가 작성한 답:

def calculate_range_total(production_counts, min_value):
    range_total = sum(count for count in production_counts if count >= min_value)
    return range_total 
# 예시 데이터
production_counts = [100, 150, 120, 130, 110, 180, 140]
range_total = calculate_range_total(production_counts, 110)
print("특정 수량 이상 생산한 날의 생산 수량 합:", range_total)
# 실행 결과
# 특정 수량 이상 생산한 날의 생산 수량 합: 830

스파르타 공식 정답:

 def calculate_range_total(production_counts, min_value):
    range_total = 0
    for cnt in production_counts:
        if min_value <= cnt:
            range_total += cnt  # 범위 내 값만 더함
    return range_total
#예시데이터
production_counts = [100, 150, 120, 130, 110, 180, 140]
range_total = calculate_range_total(production_counts, 110)
print("특정 수량 이상 생산한 날의 생산 수량 합:", range_total)
# 실행 결과
# 특정 수량 이상 생산한 날의 생산 수량 합: 830

문제 3-2 : 공장 환경에서 이동 데이터를 활용해 장비의 효율성 평가

배경

당신은 공정 데이터를 분석하는 데이터 분석가입니다. 공장의 자동화 장비는 작업 중 이동 데이터를 기록하며, 이 데이터를 기반으로 장비의 이동 패턴을 분석하는 것은 작업 효율성을 평가하고 최적화하는 데 필수적입니다.
장비가 작업 중 이동한 총 누적 거리 를 계산하여 작업 효율성을 평가하는 프로그램을 작성해야 합니다.

목표

주어진 공장 장비의 이동 데이터를 분석하여, 각 장비가 작업 중 이동한 총 누적 거리를 계산하는 코드를 작성하세요.

요구사항

(1) 이동 거리 계산:
각 장비가 이동한 두 위치 간의 거리는 유클리드 거리 공식을 사용하여 계산합니다.
거리=(x2−x1)2+(y2−y1)2−−−−−−−−−−−−−−−−−−√
(2) 누적 거리 계산:
장비가 이동한 모든 거리를 합산하여 총 이동 거리를 계산합니다.
(3) 결과 출력:
각 장비의 이름과 함께 이동한 총 거리를 출력합니다.

데이터

입력 데이터는 장비 이름과 해당 장비의 위치 좌표가 포함된 리스트로 제공됩니다.
각 좌표는 (x, y) 형태의 튜플로 표현됩니다.
장비는 작업 중 한 번만 이동합니다.

내가 작성한 답:

import math

장비별 이동 거리 계산 함수

def calculate_single_distance(machine_positions):
for machine, positions in machine_positions.items():

    # 위치는 항상 두 개의 좌표만 제공됨
    total_distance = 0
    for i in range(1, len(positions)):
      x1, y1 = positions[i-1]
      x2, y2 = positions[i]
      distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
      total_distance += distance
    print(f"{machine}의 이동 거리: {total_distance:.2f} 미터")

#장비별 위치 데이터
machine_positions = {
"Machine A": [(0, 0), (5, 5)],
"Machine B": [(2, 2), (6, 8)],
"Machine C": [(0, 0), (3, 4)]
}
#이동 거리 계산 실행
calculate_single_distance(machine_positions)

출력 값:

Machine A의 이동 거리: 7.07 미터
Machine B의 이동 거리: 7.21 미터
Machine C의 이동 거리: 5.00 미터

스파르타 공식 정답:

import math
#장비별 이동 거리 계산 함수
def calculate_single_distance(machine_positions):
for machine, positions in machine_positions.items():

    # 위치는 항상 두 개의 좌표만 제공됨
    x1, y1 = positions[0]
    x2, y2 = positions[-1]
    distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
    print(f"{machine}의 이동 거리: {distance:.2f} 미터")

#장비별 위치 데이터
machine_positions = {
"Machine A": [(0, 0), (5, 5)],
"Machine B": [(2, 2), (6, 8)],
"Machine C": [(0, 0), (3, 4)]
}
#이동 거리 계산 실행
calculate_single_distance(machine_positions)

  • machine_positions은 dict 형으로 되어 있고, 각 key 의 value는 list로 되어 있습니다. 각 리스트 안엔 두 개의 점이 있네요.
  • for문을 이용해 machine의 이름과 positions을 가져옵니다.
  • positions에는 두 점의 좌표가 있어요([(0, 0), (5, 5)] ). list indexing 을 이용해 각 점의 좌표를 각 변수에 저장합니다.
  • 유클리드 거리 공식을 사용하여 두 좌표 간의 거리를 계산하는 코드를 작성합니다.
    • math.sqrt() 함수는 주어진 숫자의 제곱근을 계산합니다.
    • (x2 - x1)(y2 - y1)은 각각 x축, y축의 차이입니다.
    • 이 차이를 각각 제곱하고 더한 뒤, 그 값을 제곱근(math.sqrt())으로 계산합니다.
    • {distance:.2f} 는 소수점 두 자리까지 표시하는 포매팅 방식입니다.

고찰: 다른 방식으로도 동일한 결과 값이 나온 걸 확인 할 수 있었다. 무엇이 정답인지는 모르겠지만, 동일한 결과값이니까 맞지 않을까 싶다.

0개의 댓글