글또9기10기:영국직장:데이터과학

런던직장: 주말공부

채유나 chaeyoonaaa 2024. 11. 10. 08:52
반응형

수도코드를 쓰는 것으로 오늘 하루가 끝이 났다. 코드 전개라던지 디자인 할 영역들이 절대 복잡하지 않은데도 이렇게 시간이 오래 걸린 것에는 도메인 지식 부족이 컸던 것 같다.

앞으로 구성해야 하는 함수 모델이 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

반응형