CoolFace
Apppublic

cryogenic22/phy_dig_twin

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
data_generators.py322 linesDownload Raw Back to root
1import pandas as pd2import numpy as np3import random4from datetime import datetime, timedelta5 6def generate_physician_segments():7    """Generate simulated physician segment data"""8    segments = [9        "High Volume PCPs",10        "Early Adopter Endocrinologists",11        "Conservative PCPs",12        "Academic Endocrinologists",13        "Urban Health System PCPs",14        "Rural Independent PCPs",15        "Diabetes-Focused PCPs",16        "Cardiologists with Diabetes Interest",17        "Nurse Practitioners in Primary Care",18        "Physician Assistants in Endocrinology"19    ]20    21    data = []22    for segment in segments:23        data.append({24            "Segment": segment,25            "Size": random.randint(1000, 15000),26            "Prescribing Volume": random.randint(50, 200),27            "Digital Engagement": random.uniform(0.1, 0.9),28            "XenoGlip Affinity": random.uniform(0.2, 0.8),29            "Message Receptivity": random.uniform(0.3, 0.9)30        })31    32    return pd.DataFrame(data)33 34def generate_prescription_data():35    """Generate simulated prescription data for the past year"""36    # Create date range for the past year37    end_date = datetime.now()38    start_date = end_date - timedelta(days=365)39    dates = pd.date_range(start=start_date, end=end_date, freq='W')40    41    # Competitors42    competitors = ["XenoGlip", "CompDPP4", "GLP1-A", "GLP1-B", "SGLT2-A", "SGLT2-B"]43    44    # Generate data45    data = []46    for date in dates:47        # Base values48        base_values = {49            "XenoGlip": 8000 + random.randint(-500, 500),50            "CompDPP4": 12000 + random.randint(-800, 800),51            "GLP1-A": 9000 + random.randint(-600, 600),52            "GLP1-B": 7500 + random.randint(-500, 500),53            "SGLT2-A": 11000 + random.randint(-700, 700),54            "SGLT2-B": 6500 + random.randint(-400, 400)55        }56        57        # Add trend over time58        week_num = (date - start_date).days / 759        growth_factor = 1 + (week_num / 52) * 0.15  # 15% annual growth for XenoGlip60        base_values["XenoGlip"] = int(base_values["XenoGlip"] * growth_factor)61        62        # Add data points63        for comp in competitors:64            data.append({65                "Date": date,66                "Product": comp,67                "Prescriptions": base_values[comp]68            })69    70    return pd.DataFrame(data)71 72def generate_key_drivers():73    """Generate key prescription drivers data"""74    drivers = [75        "Efficacy in A1C reduction",76        "Safety profile",77        "Tolerability",78        "Once-daily dosing",79        "Formulary status",80        "Patient cost",81        "Cardiovascular benefits",82        "Weight neutrality",83        "Renal considerations",84        "Low hypoglycemia risk"85    ]86    87    segments = ["PCP", "Endocrinologist", "Cardiologist"]88    89    data = []90    for driver in drivers:91        for segment in segments:92            data.append({93                "Driver": driver,94                "Segment": segment,95                "Importance": random.uniform(0.5, 0.95)96            })97    98    return pd.DataFrame(data)99 100def generate_regional_data():101    """Generate regional prescription data"""102    regions = ["Northeast", "Southeast", "Midwest", "Southwest", "West"]103    104    data = []105    for region in regions:106        data.append({107            "Region": region,108            "Market Share": random.uniform(0.05, 0.25),109            "Growth Rate": random.uniform(-0.05, 0.15),110            "Prescription Volume": random.randint(5000, 20000),111            "Physician Adoption": random.uniform(0.2, 0.6)112        })113    114    return pd.DataFrame(data)115 116def generate_formulary_scenario_data():117    """Generate formulary scenario impact data"""118    scenarios = [119        "Current (Tier 3, PA required)",120        "Tier 2, PA required",121        "Tier 3, No PA",122        "Tier 2, No PA",123        "Tier 1, No PA"124    ]125    126    impact_metrics = ["New Rx Growth", "Overall Share", "Switch from Competitors", "Adherence"]127    128    data = []129    baselines = {130        "New Rx Growth": 0.0,131        "Overall Share": 0.11,132        "Switch from Competitors": 0.0,133        "Adherence": 0.68134    }135    136    # Improvements for each scenario, relative to baseline137    improvements = {138        "Tier 2, PA required": {"New Rx Growth": 0.15, "Overall Share": 0.02, "Switch from Competitors": 0.08, "Adherence": 0.03},139        "Tier 3, No PA": {"New Rx Growth": 0.22, "Overall Share": 0.015, "Switch from Competitors": 0.12, "Adherence": 0.05},140        "Tier 2, No PA": {"New Rx Growth": 0.35, "Overall Share": 0.04, "Switch from Competitors": 0.25, "Adherence": 0.08},141        "Tier 1, No PA": {"New Rx Growth": 0.65, "Overall Share": 0.07, "Switch from Competitors": 0.38, "Adherence": 0.12}142    }143    144    for scenario in scenarios:145        for metric in impact_metrics:146            if scenario == "Current (Tier 3, PA required)":147                value = baselines[metric]148            else:149                value = baselines[metric] + improvements[scenario][metric]150                151            data.append({152                "Scenario": scenario,153                "Metric": metric,154                "Value": value155            })156    157    return pd.DataFrame(data)158 159def generate_message_testing_data():160    """Generate message testing data"""161    messages = [162        "Once-daily dosing for simplicity",163        "Proven efficacy in A1C reduction",164        "Established cardiovascular safety",165        "Minimal hypoglycemia risk",166        "Suitable for renal impairment patients",167        "Weight neutral option",168        "Extensive clinical experience"169    ]170    171    segments = ["High Volume PCPs", "Early Adopter Endocrinologists", "Conservative PCPs", "Academic Endocrinologists"]172    173    data = []174    for message in messages:175        for segment in segments:176            data.append({177                "Message": message,178                "Segment": segment,179                "Receptivity": random.uniform(0.3, 0.9),180                "Impact Score": random.uniform(2.5, 9.5)181            })182    183    return pd.DataFrame(data)184 185def generate_patient_profile_data():186    """Generate patient profile data"""187    # Patient profiles188    profiles = []189    190    # Age groups191    age_groups = ["30-45", "46-60", "61-75", "76+"]192    193    # Comorbidities194    comorbidities = ["Hypertension", "Obesity", "Dyslipidemia", "CKD", "CVD", "None"]195    196    # A1C ranges197    a1c_ranges = ["<7.0", "7.0-7.9", "8.0-8.9", "9.0+"]198    199    # Medications200    current_meds = ["Metformin only", "Met+SU", "Met+DPP4", "Met+SGLT2", "Met+GLP1", "Complex regimen"]201    202    # Generate 50 profiles203    for i in range(50):204        profile = {205            "ID": i + 1,206            "Age Group": random.choice(age_groups),207            "Gender": random.choice(["Male", "Female"]),208            "BMI Category": random.choice(["Normal", "Overweight", "Obese", "Severely Obese"]),209            "A1C Range": random.choice(a1c_ranges),210            "Primary Comorbidity": random.choice(comorbidities),211            "Secondary Comorbidity": random.choice(comorbidities),212            "Current Medication": random.choice(current_meds),213            "Insurance": random.choice(["Commercial", "Medicare", "Medicaid", "Uninsured"]),214            "Years with T2DM": random.randint(1, 20)215        }216        profiles.append(profile)217    218    return pd.DataFrame(profiles)219 220def generate_competitive_analysis_data():221    """Generate competitive analysis data"""222    products = [223        "XenoGlip (DPP-4)",224        "CompDPP4",225        "GLP1-A",226        "GLP1-B",227        "SGLT2-A",228        "SGLT2-B"229    ]230    231    attributes = [232        "A1C Reduction",233        "Weight Effect",234        "Hypoglycemia Risk",235        "Cardiovascular Benefit",236        "Renal Benefit",237        "GI Side Effects",238        "Injection Required",239        "Cost to Patient",240        "Formulary Status"241    ]242    243    # Values for each product-attribute combination244    values = {245        "XenoGlip (DPP-4)": {246            "A1C Reduction": 0.7,247            "Weight Effect": 0.0,248            "Hypoglycemia Risk": 0.05,249            "Cardiovascular Benefit": 0.0,250            "Renal Benefit": 0.1,251            "GI Side Effects": 0.1,252            "Injection Required": 0.0,253            "Cost to Patient": 0.5,254            "Formulary Status": 0.6255        },256        "CompDPP4": {257            "A1C Reduction": 0.65,258            "Weight Effect": 0.0,259            "Hypoglycemia Risk": 0.05,260            "Cardiovascular Benefit": 0.0,261            "Renal Benefit": 0.1,262            "GI Side Effects": 0.1,263            "Injection Required": 0.0,264            "Cost to Patient": 0.5,265            "Formulary Status": 0.7266        },267        "GLP1-A": {268            "A1C Reduction": 1.2,269            "Weight Effect": -0.8,270            "Hypoglycemia Risk": 0.1,271            "Cardiovascular Benefit": 0.8,272            "Renal Benefit": 0.5,273            "GI Side Effects": 0.7,274            "Injection Required": 1.0,275            "Cost to Patient": 0.85,276            "Formulary Status": 0.5277        },278        "GLP1-B": {279            "A1C Reduction": 1.4,280            "Weight Effect": -0.9,281            "Hypoglycemia Risk": 0.1,282            "Cardiovascular Benefit": 0.8,283            "Renal Benefit": 0.6,284            "GI Side Effects": 0.8,285            "Injection Required": 1.0,286            "Cost to Patient": 0.9,287            "Formulary Status": 0.4288        },289        "SGLT2-A": {290            "A1C Reduction": 0.8,291            "Weight Effect": -0.5,292            "Hypoglycemia Risk": 0.05,293            "Cardiovascular Benefit": 0.7,294            "Renal Benefit": 0.8,295            "GI Side Effects": 0.2,296            "Injection Required": 0.0,297            "Cost to Patient": 0.7,298            "Formulary Status": 0.6299        },300        "SGLT2-B": {301            "A1C Reduction": 0.7,302            "Weight Effect": -0.4,303            "Hypoglycemia Risk": 0.05,304            "Cardiovascular Benefit": 0.6,305            "Renal Benefit": 0.7,306            "GI Side Effects": 0.2,307            "Injection Required": 0.0,308            "Cost to Patient": 0.6,309            "Formulary Status": 0.5310        }311    }312    313    data = []314    for product in products:315        for attribute in attributes:316            data.append({317                "Product": product,318                "Attribute": attribute,319                "Value": values[product][attribute]320            })321    322    return pd.DataFrame(data)