반응형
수도코드를 쓰는 것으로 오늘 하루가 끝이 났다. 코드 전개라던지 디자인 할 영역들이 절대 복잡하지 않은데도 이렇게 시간이 오래 걸린 것에는 도메인 지식 부족이 컸던 것 같다.
앞으로 구성해야 하는 함수 모델이 3개 더 남았다. 아래 작성한 2개를 포함해 총 6개 모두에게서 글로벌하게 사용되는 변수 세팅값을 찾는 데 1/3 정도 시간이 흘러갔다. 그리고 나머지 메인함수 2개 각각에 플러그인 해야하는 데이터 소스를 파악하고 계산 로직 및 파라미터들을 역산하는데 나머지 시간을 사용했다.
항생제 복용하면서부터는 몸에서 같이 싸우기 시작하는지 컨디션이 더욱 떨어지는데 씁쓸할 따름이다. 일요일 남은 주말 이어서 완성할 수 있는 부분들이길 바라고 아래 남겨둔다.
# Init global variables
cpws_ratio = 2
technician_pct = 0.15
annual_capacity = 1560
duration = 15
def IP():
"""
Calculates the counterfactual values for a given duration and returns a Spark DataFrame.
Returns:
Spark DataFrame: A DataFrame with 'FY' and 'counterfactual' columns.
"""
# Define IP parameters
consultations_per_person = 2
time_per_session = 28 / 60 # mins to hrs
ramp_up_factor = 0.66**2
# Data placeholder from data sources
no_of_patients = 8762588.5
demographic_growth = 0.007967588
# Calculate total time required from IPs
total_time_required = no_of_patients * consultations_per_person * time_per_session
# Calculate target population needs in hours
target_population_needs = total_time_required * pow(1 + demographic_growth, 2)
# Calculate counterfactual
counterfactual = target_population_needs * annual_capacity / global_capacity
# Create a DataFrame with FY column and counterfactual value
df = spark.range(1, duration + 1).withColumnRenamed("id", "FY")
df = df.withColumn("counterfactual", lit(counterfactual))
return df
def Dispensing():
"""
Calculates the counterfactual dispensing values for a given duration and returns a Spark DataFrame.
Returns:
Spark DataFrame: A DataFrame with 'FY' and 'counterfactual_dispensing' columns.
"""
# Define Dispensing parameters
survey_data_remote_dispensing = 0.14
calculated_paperless_pct = 0.17
time_per_dispensing = 2 / 60 # mins to hrs
growth_rate = 0.01
# Data placeholder from data sources
dispensing_volume = 1199779116
# Calculate total dispensing demand
total_dispensing_demand = dispensing_volume * time_per_dispensing / annual_capacity
# Calculate remote and paperless dispensing
remote_dispensing = dispensing_volume * survey_data_remote_dispensing
paperless_dispensing = dispensing_volume * calculated_paperless_pct
# Calculate counterfactual dispensing
counterfactual_dispensing = total_dispensing_demand - remote_dispensing - paperless_dispensing
# Create a DataFrame with FY column and counterfactual dispensing value
df = spark.range(1, duration + 1).withColumnRenamed("id", "FY")
df = df.withColumn("counterfactual_dispensing", lit(counterfactual_dispensing))
return df
if __name__ == "__main__":
ip_df = IP()
dispensing_df = Dispensing()
demand <- IP_df concat dispensing_df
반응형
'글또9기10기:영국직장:데이터과학' 카테고리의 다른 글
런던직장: 디펜스 (2) | 2024.11.12 |
---|---|
런던직장: 효율 높이기 (0) | 2024.11.11 |
런던직장: 가장 중요한 일 (0) | 2024.11.09 |
런던직장: 엑셀모델 파이썬화 (2) | 2024.11.08 |
런던직장: 월간 해커톤 고민중 (8) | 2024.11.07 |