[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-bb218028fbecee75-data-first-charting-tools-and-techniques-that-work-summary":3,"summaries-facets-categories":76,"summary-related-bb218028fbecee75-data-first-charting-tools-and-techniques-that-work-summary":3645},{"id":4,"title":5,"ai":6,"body":13,"categories":46,"created_at":48,"date_modified":48,"description":40,"extension":49,"faq":48,"featured":50,"kicker_label":48,"meta":51,"navigation":58,"path":59,"published_at":48,"question":48,"scraped_at":60,"seo":61,"sitemap":62,"source_id":63,"source_name":64,"source_type":65,"source_url":66,"stem":67,"tags":68,"thumbnail_url":48,"tldr":73,"tweet":48,"unknown_tags":74,"__hash__":75},"summaries\u002Fsummaries\u002Fbb218028fbecee75-data-first-charting-tools-and-techniques-that-work-summary.md","Data-First Charting: Tools and Techniques That Work",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",4365,899,6988,0.0013,{"type":14,"value":15,"toc":39},"minimark",[16,21,25,29,32,36],[17,18,20],"h2",{"id":19},"reject-templates-begin-with-data-exploration","Reject Templates: Begin with Data Exploration",[22,23,24],"p",{},"Mechanical chart templates fail because datasets rarely reveal insights automatically—you often don't know what to look for upfront. Instead, ask questions about the data and learn its structure first. This purpose-driven approach, shaped by audience needs, ensures charts communicate effectively rather than just displaying numbers. Nathan Yau's process turns raw datasets into graphics by prioritizing exploration over plug-and-play software.",[17,26,28],{"id":27},"build-a-flexible-toolset-for-any-dataset","Build a Flexible Toolset for Any Dataset",[22,30,31],{},"No single tool dominates; select based on your situation, potentially mixing R for stats, Python for scripting, Illustrator for polish, and web tools for interactivity. Yau's examples demonstrate step-by-step workflows across these, letting you test and choose what fits your projects. This avoids tool obsession, focusing on outcomes like finished, publication-ready visuals from real-world data.",[17,33,35],{"id":34},"master-visualization-by-data-type-and-purpose","Master Visualization by Data Type and Purpose",[22,37,38],{},"Follow a structured progression: handle data cleaning, then visualize time series (trends over periods), categories (group comparisons), relationships (correlations via scatterplots or heatmaps), and space (geographic mappings). Analyze visually for patterns, and design with intent—considering layout, color, and form to tell stories. Updated for 2024 with new tools, datasets, and methods since the 2011 first edition, this covers nine chapters from storytelling basics to purposeful design, using Yau's FlowingData projects as concrete examples.",{"title":40,"searchDepth":41,"depth":41,"links":42},"",2,[43,44,45],{"id":19,"depth":41,"text":20},{"id":27,"depth":41,"text":28},{"id":34,"depth":41,"text":35},[47],"Data Science & Visualization",null,"md",false,{"content_references":52,"triage":53},[],{"relevance":54,"novelty":55,"quality":54,"actionability":54,"composite":56,"reasoning":57},4,3,3.8,"Category: Data Science & Visualization. The article provides a structured approach to data visualization that addresses the audience's need for practical techniques in creating effective charts. It emphasizes the importance of data exploration and flexible tool selection, which are actionable insights for product builders.",true,"\u002Fsummaries\u002Fbb218028fbecee75-data-first-charting-tools-and-techniques-that-work-summary","2026-04-15 15:35:49",{"title":5,"description":40},{"loc":59},"bb218028fbecee75","__oneoff__","article","https:\u002F\u002Fbook.flowingdata.com\u002F","summaries\u002Fbb218028fbecee75-data-first-charting-tools-and-techniques-that-work-summary",[69,70,71,72],"data-visualization","python","data-science","r","Start with data questions to drive purposeful charts, using flexible tools like R and Python over rigid templates, covering time, categories, relationships, space, and design.",[72],"b5z_NKPTNkNWWflIF57VEUby26AsZ6-mfoDqeG0xmJU",[77,80,83,86,89,92,94,96,98,100,102,104,107,109,111,113,115,117,119,121,123,125,128,130,132,134,137,139,141,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,399,401,403,405,407,409,411,413,415,417,419,421,423,425,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459,461,463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,705,707,709,711,713,715,717,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837,839,841,843,845,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943,945,947,949,951,953,955,957,959,961,963,965,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643],{"categories":78},[79],"Developer Productivity",{"categories":81},[82],"Business & SaaS",{"categories":84},[85],"AI & LLMs",{"categories":87},[88],"AI Automation",{"categories":90},[91],"Product Strategy",{"categories":93},[85],{"categories":95},[79],{"categories":97},[82],{"categories":99},[],{"categories":101},[85],{"categories":103},[],{"categories":105},[106],"AI News & Trends",{"categories":108},[88],{"categories":110},[106],{"categories":112},[88],{"categories":114},[88],{"categories":116},[85],{"categories":118},[85],{"categories":120},[106],{"categories":122},[85],{"categories":124},[],{"categories":126},[127],"Design & Frontend",{"categories":129},[47],{"categories":131},[106],{"categories":133},[],{"categories":135},[136],"Software Engineering",{"categories":138},[85],{"categories":140},[88],{"categories":142},[143],"Marketing & Growth",{"categories":145},[85],{"categories":147},[88],{"categories":149},[],{"categories":151},[],{"categories":153},[127],{"categories":155},[88],{"categories":157},[79],{"categories":159},[127],{"categories":161},[85],{"categories":163},[88],{"categories":165},[106],{"categories":167},[],{"categories":169},[],{"categories":171},[88],{"categories":173},[136],{"categories":175},[],{"categories":177},[82],{"categories":179},[],{"categories":181},[],{"categories":183},[88],{"categories":185},[88],{"categories":187},[85],{"categories":189},[],{"categories":191},[136],{"categories":193},[],{"categories":195},[],{"categories":197},[],{"categories":199},[85],{"categories":201},[143],{"categories":203},[127],{"categories":205},[127],{"categories":207},[85],{"categories":209},[88],{"categories":211},[85],{"categories":213},[85],{"categories":215},[88],{"categories":217},[88],{"categories":219},[47],{"categories":221},[106],{"categories":223},[88],{"categories":225},[143],{"categories":227},[88],{"categories":229},[91],{"categories":231},[],{"categories":233},[88],{"categories":235},[],{"categories":237},[88],{"categories":239},[136],{"categories":241},[127],{"categories":243},[85],{"categories":245},[],{"categories":247},[],{"categories":249},[88],{"categories":251},[],{"categories":253},[85],{"categories":255},[],{"categories":257},[79],{"categories":259},[136],{"categories":261},[82],{"categories":263},[106],{"categories":265},[85],{"categories":267},[],{"categories":269},[85],{"categories":271},[],{"categories":273},[136],{"categories":275},[47],{"categories":277},[],{"categories":279},[85],{"categories":281},[127],{"categories":283},[],{"categories":285},[127],{"categories":287},[88],{"categories":289},[],{"categories":291},[88],{"categories":293},[106],{"categories":295},[85],{"categories":297},[],{"categories":299},[88],{"categories":301},[85],{"categories":303},[91],{"categories":305},[],{"categories":307},[85],{"categories":309},[88],{"categories":311},[88],{"categories":313},[],{"categories":315},[47],{"categories":317},[85],{"categories":319},[],{"categories":321},[79],{"categories":323},[82],{"categories":325},[85],{"categories":327},[88],{"categories":329},[136],{"categories":331},[85],{"categories":333},[],{"categories":335},[],{"categories":337},[85],{"categories":339},[],{"categories":341},[127],{"categories":343},[],{"categories":345},[85],{"categories":347},[],{"categories":349},[88],{"categories":351},[85],{"categories":353},[127],{"categories":355},[],{"categories":357},[85],{"categories":359},[85],{"categories":361},[82],{"categories":363},[88],{"categories":365},[85],{"categories":367},[127],{"categories":369},[88],{"categories":371},[],{"categories":373},[],{"categories":375},[106],{"categories":377},[],{"categories":379},[85],{"categories":381},[82,143],{"categories":383},[],{"categories":385},[85],{"categories":387},[],{"categories":389},[],{"categories":391},[85],{"categories":393},[],{"categories":395},[85],{"categories":397},[398],"DevOps & Cloud",{"categories":400},[],{"categories":402},[106],{"categories":404},[127],{"categories":406},[],{"categories":408},[106],{"categories":410},[106],{"categories":412},[85],{"categories":414},[143],{"categories":416},[],{"categories":418},[82],{"categories":420},[],{"categories":422},[85,398],{"categories":424},[85],{"categories":426},[85],{"categories":428},[88],{"categories":430},[85,136],{"categories":432},[47],{"categories":434},[85],{"categories":436},[143],{"categories":438},[88],{"categories":440},[88],{"categories":442},[],{"categories":444},[88],{"categories":446},[85,82],{"categories":448},[],{"categories":450},[127],{"categories":452},[127],{"categories":454},[],{"categories":456},[],{"categories":458},[106],{"categories":460},[],{"categories":462},[79],{"categories":464},[136],{"categories":466},[85],{"categories":468},[127],{"categories":470},[88],{"categories":472},[136],{"categories":474},[106],{"categories":476},[127],{"categories":478},[],{"categories":480},[85],{"categories":482},[85],{"categories":484},[85],{"categories":486},[106],{"categories":488},[79],{"categories":490},[85],{"categories":492},[88],{"categories":494},[398],{"categories":496},[127],{"categories":498},[88],{"categories":500},[],{"categories":502},[],{"categories":504},[127],{"categories":506},[106],{"categories":508},[47],{"categories":510},[],{"categories":512},[85],{"categories":514},[85],{"categories":516},[82],{"categories":518},[85],{"categories":520},[85],{"categories":522},[106],{"categories":524},[],{"categories":526},[88],{"categories":528},[136],{"categories":530},[],{"categories":532},[85],{"categories":534},[85],{"categories":536},[88],{"categories":538},[],{"categories":540},[],{"categories":542},[85],{"categories":544},[],{"categories":546},[82],{"categories":548},[88],{"categories":550},[],{"categories":552},[79],{"categories":554},[85],{"categories":556},[82],{"categories":558},[106],{"categories":560},[],{"categories":562},[],{"categories":564},[],{"categories":566},[106],{"categories":568},[106],{"categories":570},[],{"categories":572},[],{"categories":574},[82],{"categories":576},[],{"categories":578},[],{"categories":580},[79],{"categories":582},[],{"categories":584},[143],{"categories":586},[88],{"categories":588},[82],{"categories":590},[88],{"categories":592},[],{"categories":594},[91],{"categories":596},[127],{"categories":598},[136],{"categories":600},[85],{"categories":602},[88],{"categories":604},[82],{"categories":606},[85],{"categories":608},[],{"categories":610},[],{"categories":612},[136],{"categories":614},[47],{"categories":616},[91],{"categories":618},[88],{"categories":620},[85],{"categories":622},[],{"categories":624},[398],{"categories":626},[],{"categories":628},[88],{"categories":630},[],{"categories":632},[],{"categories":634},[85],{"categories":636},[127],{"categories":638},[143],{"categories":640},[88],{"categories":642},[],{"categories":644},[79],{"categories":646},[],{"categories":648},[106],{"categories":650},[85,398],{"categories":652},[106],{"categories":654},[85],{"categories":656},[82],{"categories":658},[85],{"categories":660},[],{"categories":662},[82],{"categories":664},[],{"categories":666},[136],{"categories":668},[127],{"categories":670},[106],{"categories":672},[47],{"categories":674},[79],{"categories":676},[85],{"categories":678},[136],{"categories":680},[],{"categories":682},[],{"categories":684},[91],{"categories":686},[],{"categories":688},[85],{"categories":690},[],{"categories":692},[127],{"categories":694},[127],{"categories":696},[127],{"categories":698},[],{"categories":700},[],{"categories":702},[106],{"categories":704},[88],{"categories":706},[85],{"categories":708},[85],{"categories":710},[85],{"categories":712},[82],{"categories":714},[85],{"categories":716},[],{"categories":718},[136],{"categories":720},[136],{"categories":722},[82],{"categories":724},[],{"categories":726},[85],{"categories":728},[85],{"categories":730},[82],{"categories":732},[106],{"categories":734},[143],{"categories":736},[88],{"categories":738},[],{"categories":740},[127],{"categories":742},[],{"categories":744},[85],{"categories":746},[],{"categories":748},[82],{"categories":750},[88],{"categories":752},[],{"categories":754},[398],{"categories":756},[47],{"categories":758},[136],{"categories":760},[143],{"categories":762},[136],{"categories":764},[88],{"categories":766},[],{"categories":768},[],{"categories":770},[88],{"categories":772},[79],{"categories":774},[88],{"categories":776},[91],{"categories":778},[82],{"categories":780},[],{"categories":782},[85],{"categories":784},[91],{"categories":786},[85],{"categories":788},[85],{"categories":790},[143],{"categories":792},[127],{"categories":794},[88],{"categories":796},[],{"categories":798},[],{"categories":800},[398],{"categories":802},[136],{"categories":804},[],{"categories":806},[88],{"categories":808},[85],{"categories":810},[127,85],{"categories":812},[79],{"categories":814},[],{"categories":816},[85],{"categories":818},[79],{"categories":820},[127],{"categories":822},[88],{"categories":824},[136],{"categories":826},[],{"categories":828},[85],{"categories":830},[],{"categories":832},[79],{"categories":834},[],{"categories":836},[88],{"categories":838},[91],{"categories":840},[85],{"categories":842},[85],{"categories":844},[127],{"categories":846},[88],{"categories":848},[398],{"categories":850},[127],{"categories":852},[88],{"categories":854},[85],{"categories":856},[85],{"categories":858},[85],{"categories":860},[106],{"categories":862},[],{"categories":864},[91],{"categories":866},[88],{"categories":868},[127],{"categories":870},[88],{"categories":872},[136],{"categories":874},[127],{"categories":876},[88],{"categories":878},[106],{"categories":880},[],{"categories":882},[85],{"categories":884},[127],{"categories":886},[85],{"categories":888},[79],{"categories":890},[106],{"categories":892},[85],{"categories":894},[143],{"categories":896},[85],{"categories":898},[85],{"categories":900},[88],{"categories":902},[88],{"categories":904},[85],{"categories":906},[88],{"categories":908},[127],{"categories":910},[85],{"categories":912},[],{"categories":914},[],{"categories":916},[136],{"categories":918},[],{"categories":920},[79],{"categories":922},[398],{"categories":924},[],{"categories":926},[79],{"categories":928},[82],{"categories":930},[143],{"categories":932},[],{"categories":934},[82],{"categories":936},[],{"categories":938},[],{"categories":940},[],{"categories":942},[],{"categories":944},[],{"categories":946},[85],{"categories":948},[88],{"categories":950},[398],{"categories":952},[79],{"categories":954},[85],{"categories":956},[136],{"categories":958},[91],{"categories":960},[85],{"categories":962},[143],{"categories":964},[85],{"categories":966},[85],{"categories":968},[85],{"categories":970},[85,79],{"categories":972},[136],{"categories":974},[136],{"categories":976},[127],{"categories":978},[85],{"categories":980},[],{"categories":982},[],{"categories":984},[],{"categories":986},[136],{"categories":988},[47],{"categories":990},[106],{"categories":992},[127],{"categories":994},[],{"categories":996},[85],{"categories":998},[85],{"categories":1000},[],{"categories":1002},[],{"categories":1004},[88],{"categories":1006},[85],{"categories":1008},[82],{"categories":1010},[],{"categories":1012},[79],{"categories":1014},[85],{"categories":1016},[79],{"categories":1018},[85],{"categories":1020},[136],{"categories":1022},[143],{"categories":1024},[85,127],{"categories":1026},[106],{"categories":1028},[127],{"categories":1030},[],{"categories":1032},[398],{"categories":1034},[127],{"categories":1036},[88],{"categories":1038},[],{"categories":1040},[],{"categories":1042},[],{"categories":1044},[],{"categories":1046},[136],{"categories":1048},[88],{"categories":1050},[88],{"categories":1052},[85],{"categories":1054},[85],{"categories":1056},[],{"categories":1058},[127],{"categories":1060},[],{"categories":1062},[],{"categories":1064},[88],{"categories":1066},[],{"categories":1068},[],{"categories":1070},[143],{"categories":1072},[143],{"categories":1074},[88],{"categories":1076},[],{"categories":1078},[85],{"categories":1080},[85],{"categories":1082},[136],{"categories":1084},[127],{"categories":1086},[127],{"categories":1088},[88],{"categories":1090},[79],{"categories":1092},[85],{"categories":1094},[127],{"categories":1096},[127],{"categories":1098},[88],{"categories":1100},[88],{"categories":1102},[85],{"categories":1104},[],{"categories":1106},[],{"categories":1108},[85],{"categories":1110},[88],{"categories":1112},[106],{"categories":1114},[136],{"categories":1116},[79],{"categories":1118},[85],{"categories":1120},[],{"categories":1122},[88],{"categories":1124},[88],{"categories":1126},[],{"categories":1128},[79],{"categories":1130},[85],{"categories":1132},[79],{"categories":1134},[79],{"categories":1136},[],{"categories":1138},[],{"categories":1140},[88],{"categories":1142},[88],{"categories":1144},[85],{"categories":1146},[85],{"categories":1148},[106],{"categories":1150},[47],{"categories":1152},[91],{"categories":1154},[106],{"categories":1156},[127],{"categories":1158},[],{"categories":1160},[106],{"categories":1162},[],{"categories":1164},[],{"categories":1166},[],{"categories":1168},[],{"categories":1170},[136],{"categories":1172},[47],{"categories":1174},[],{"categories":1176},[85],{"categories":1178},[85],{"categories":1180},[47],{"categories":1182},[136],{"categories":1184},[],{"categories":1186},[],{"categories":1188},[88],{"categories":1190},[106],{"categories":1192},[106],{"categories":1194},[88],{"categories":1196},[79],{"categories":1198},[85,398],{"categories":1200},[],{"categories":1202},[127],{"categories":1204},[79],{"categories":1206},[88],{"categories":1208},[127],{"categories":1210},[],{"categories":1212},[88],{"categories":1214},[88],{"categories":1216},[85],{"categories":1218},[143],{"categories":1220},[136],{"categories":1222},[127],{"categories":1224},[],{"categories":1226},[88],{"categories":1228},[85],{"categories":1230},[88],{"categories":1232},[88],{"categories":1234},[88],{"categories":1236},[143],{"categories":1238},[88],{"categories":1240},[85],{"categories":1242},[],{"categories":1244},[143],{"categories":1246},[106],{"categories":1248},[88],{"categories":1250},[],{"categories":1252},[],{"categories":1254},[85],{"categories":1256},[88],{"categories":1258},[106],{"categories":1260},[88],{"categories":1262},[],{"categories":1264},[],{"categories":1266},[],{"categories":1268},[88],{"categories":1270},[],{"categories":1272},[],{"categories":1274},[47],{"categories":1276},[85],{"categories":1278},[47],{"categories":1280},[106],{"categories":1282},[85],{"categories":1284},[85],{"categories":1286},[88],{"categories":1288},[85],{"categories":1290},[],{"categories":1292},[],{"categories":1294},[398],{"categories":1296},[],{"categories":1298},[],{"categories":1300},[79],{"categories":1302},[],{"categories":1304},[],{"categories":1306},[],{"categories":1308},[],{"categories":1310},[136],{"categories":1312},[106],{"categories":1314},[143],{"categories":1316},[82],{"categories":1318},[85],{"categories":1320},[85],{"categories":1322},[82],{"categories":1324},[],{"categories":1326},[127],{"categories":1328},[88],{"categories":1330},[82],{"categories":1332},[85],{"categories":1334},[85],{"categories":1336},[79],{"categories":1338},[],{"categories":1340},[79],{"categories":1342},[85],{"categories":1344},[143],{"categories":1346},[88],{"categories":1348},[106],{"categories":1350},[82],{"categories":1352},[85],{"categories":1354},[88],{"categories":1356},[],{"categories":1358},[85],{"categories":1360},[79],{"categories":1362},[85],{"categories":1364},[],{"categories":1366},[106],{"categories":1368},[85],{"categories":1370},[],{"categories":1372},[82],{"categories":1374},[85],{"categories":1376},[],{"categories":1378},[],{"categories":1380},[],{"categories":1382},[85],{"categories":1384},[],{"categories":1386},[398],{"categories":1388},[85],{"categories":1390},[],{"categories":1392},[85],{"categories":1394},[85],{"categories":1396},[85],{"categories":1398},[85,398],{"categories":1400},[85],{"categories":1402},[85],{"categories":1404},[127],{"categories":1406},[88],{"categories":1408},[],{"categories":1410},[88],{"categories":1412},[85],{"categories":1414},[85],{"categories":1416},[85],{"categories":1418},[79],{"categories":1420},[79],{"categories":1422},[136],{"categories":1424},[127],{"categories":1426},[88],{"categories":1428},[],{"categories":1430},[85],{"categories":1432},[106],{"categories":1434},[85],{"categories":1436},[82],{"categories":1438},[],{"categories":1440},[398],{"categories":1442},[127],{"categories":1444},[127],{"categories":1446},[88],{"categories":1448},[106],{"categories":1450},[88],{"categories":1452},[85],{"categories":1454},[],{"categories":1456},[85],{"categories":1458},[],{"categories":1460},[],{"categories":1462},[85],{"categories":1464},[85],{"categories":1466},[85],{"categories":1468},[88],{"categories":1470},[85],{"categories":1472},[],{"categories":1474},[47],{"categories":1476},[88],{"categories":1478},[],{"categories":1480},[85],{"categories":1482},[106],{"categories":1484},[],{"categories":1486},[127],{"categories":1488},[398],{"categories":1490},[106],{"categories":1492},[136],{"categories":1494},[136],{"categories":1496},[106],{"categories":1498},[106],{"categories":1500},[398],{"categories":1502},[],{"categories":1504},[106],{"categories":1506},[85],{"categories":1508},[79],{"categories":1510},[106],{"categories":1512},[],{"categories":1514},[47],{"categories":1516},[106],{"categories":1518},[136],{"categories":1520},[106],{"categories":1522},[398],{"categories":1524},[85],{"categories":1526},[85],{"categories":1528},[],{"categories":1530},[82],{"categories":1532},[],{"categories":1534},[],{"categories":1536},[85],{"categories":1538},[85],{"categories":1540},[85],{"categories":1542},[85],{"categories":1544},[],{"categories":1546},[47],{"categories":1548},[79],{"categories":1550},[],{"categories":1552},[85],{"categories":1554},[85],{"categories":1556},[398],{"categories":1558},[398],{"categories":1560},[],{"categories":1562},[88],{"categories":1564},[106],{"categories":1566},[106],{"categories":1568},[85],{"categories":1570},[88],{"categories":1572},[],{"categories":1574},[127],{"categories":1576},[85],{"categories":1578},[85],{"categories":1580},[],{"categories":1582},[],{"categories":1584},[398],{"categories":1586},[85],{"categories":1588},[136],{"categories":1590},[82],{"categories":1592},[85],{"categories":1594},[],{"categories":1596},[88],{"categories":1598},[79],{"categories":1600},[79],{"categories":1602},[],{"categories":1604},[85],{"categories":1606},[127],{"categories":1608},[88],{"categories":1610},[],{"categories":1612},[85],{"categories":1614},[85],{"categories":1616},[88],{"categories":1618},[],{"categories":1620},[88],{"categories":1622},[136],{"categories":1624},[],{"categories":1626},[85],{"categories":1628},[],{"categories":1630},[85],{"categories":1632},[],{"categories":1634},[85],{"categories":1636},[85],{"categories":1638},[],{"categories":1640},[85],{"categories":1642},[106],{"categories":1644},[85],{"categories":1646},[85],{"categories":1648},[79],{"categories":1650},[85],{"categories":1652},[106],{"categories":1654},[88],{"categories":1656},[],{"categories":1658},[85],{"categories":1660},[143],{"categories":1662},[],{"categories":1664},[],{"categories":1666},[],{"categories":1668},[79],{"categories":1670},[106],{"categories":1672},[88],{"categories":1674},[85],{"categories":1676},[127],{"categories":1678},[88],{"categories":1680},[],{"categories":1682},[88],{"categories":1684},[],{"categories":1686},[85],{"categories":1688},[88],{"categories":1690},[85],{"categories":1692},[],{"categories":1694},[85],{"categories":1696},[85],{"categories":1698},[106],{"categories":1700},[127],{"categories":1702},[88],{"categories":1704},[127],{"categories":1706},[82],{"categories":1708},[],{"categories":1710},[],{"categories":1712},[85],{"categories":1714},[79],{"categories":1716},[106],{"categories":1718},[],{"categories":1720},[],{"categories":1722},[136],{"categories":1724},[127],{"categories":1726},[],{"categories":1728},[85],{"categories":1730},[],{"categories":1732},[143],{"categories":1734},[85],{"categories":1736},[398],{"categories":1738},[136],{"categories":1740},[],{"categories":1742},[88],{"categories":1744},[85],{"categories":1746},[88],{"categories":1748},[88],{"categories":1750},[85],{"categories":1752},[],{"categories":1754},[79],{"categories":1756},[85],{"categories":1758},[82],{"categories":1760},[136],{"categories":1762},[127],{"categories":1764},[],{"categories":1766},[],{"categories":1768},[],{"categories":1770},[88],{"categories":1772},[127],{"categories":1774},[106],{"categories":1776},[85],{"categories":1778},[106],{"categories":1780},[127],{"categories":1782},[],{"categories":1784},[127],{"categories":1786},[106],{"categories":1788},[82],{"categories":1790},[85],{"categories":1792},[106],{"categories":1794},[143],{"categories":1796},[],{"categories":1798},[],{"categories":1800},[47],{"categories":1802},[85,136],{"categories":1804},[106],{"categories":1806},[85],{"categories":1808},[88],{"categories":1810},[88],{"categories":1812},[85],{"categories":1814},[],{"categories":1816},[136],{"categories":1818},[85],{"categories":1820},[47],{"categories":1822},[88],{"categories":1824},[143],{"categories":1826},[398],{"categories":1828},[],{"categories":1830},[79],{"categories":1832},[88],{"categories":1834},[88],{"categories":1836},[136],{"categories":1838},[85],{"categories":1840},[85],{"categories":1842},[],{"categories":1844},[],{"categories":1846},[],{"categories":1848},[398],{"categories":1850},[106],{"categories":1852},[85],{"categories":1854},[85],{"categories":1856},[85],{"categories":1858},[],{"categories":1860},[47],{"categories":1862},[82],{"categories":1864},[],{"categories":1866},[88],{"categories":1868},[398],{"categories":1870},[],{"categories":1872},[127],{"categories":1874},[127],{"categories":1876},[],{"categories":1878},[136],{"categories":1880},[127],{"categories":1882},[85],{"categories":1884},[],{"categories":1886},[106],{"categories":1888},[85],{"categories":1890},[127],{"categories":1892},[88],{"categories":1894},[106],{"categories":1896},[],{"categories":1898},[88],{"categories":1900},[127],{"categories":1902},[85],{"categories":1904},[],{"categories":1906},[85],{"categories":1908},[85],{"categories":1910},[398],{"categories":1912},[106],{"categories":1914},[47],{"categories":1916},[47],{"categories":1918},[],{"categories":1920},[],{"categories":1922},[],{"categories":1924},[88],{"categories":1926},[136],{"categories":1928},[136],{"categories":1930},[],{"categories":1932},[],{"categories":1934},[85],{"categories":1936},[],{"categories":1938},[88],{"categories":1940},[85],{"categories":1942},[],{"categories":1944},[85],{"categories":1946},[82],{"categories":1948},[85],{"categories":1950},[143],{"categories":1952},[88],{"categories":1954},[85],{"categories":1956},[136],{"categories":1958},[106],{"categories":1960},[88],{"categories":1962},[],{"categories":1964},[106],{"categories":1966},[88],{"categories":1968},[88],{"categories":1970},[],{"categories":1972},[82],{"categories":1974},[88],{"categories":1976},[],{"categories":1978},[85],{"categories":1980},[79],{"categories":1982},[106],{"categories":1984},[398],{"categories":1986},[88],{"categories":1988},[88],{"categories":1990},[79],{"categories":1992},[85],{"categories":1994},[],{"categories":1996},[],{"categories":1998},[127],{"categories":2000},[85,82],{"categories":2002},[],{"categories":2004},[79],{"categories":2006},[47],{"categories":2008},[85],{"categories":2010},[136],{"categories":2012},[85],{"categories":2014},[88],{"categories":2016},[85],{"categories":2018},[85],{"categories":2020},[106],{"categories":2022},[88],{"categories":2024},[],{"categories":2026},[],{"categories":2028},[88],{"categories":2030},[85],{"categories":2032},[398],{"categories":2034},[],{"categories":2036},[85],{"categories":2038},[88],{"categories":2040},[],{"categories":2042},[85],{"categories":2044},[143],{"categories":2046},[47],{"categories":2048},[88],{"categories":2050},[85],{"categories":2052},[398],{"categories":2054},[],{"categories":2056},[85],{"categories":2058},[143],{"categories":2060},[127],{"categories":2062},[85],{"categories":2064},[],{"categories":2066},[143],{"categories":2068},[106],{"categories":2070},[85],{"categories":2072},[85],{"categories":2074},[79],{"categories":2076},[],{"categories":2078},[],{"categories":2080},[127],{"categories":2082},[85],{"categories":2084},[47],{"categories":2086},[143],{"categories":2088},[143],{"categories":2090},[106],{"categories":2092},[],{"categories":2094},[],{"categories":2096},[85],{"categories":2098},[],{"categories":2100},[85,136],{"categories":2102},[106],{"categories":2104},[88],{"categories":2106},[136],{"categories":2108},[85],{"categories":2110},[79],{"categories":2112},[],{"categories":2114},[],{"categories":2116},[79],{"categories":2118},[143],{"categories":2120},[85],{"categories":2122},[],{"categories":2124},[127,85],{"categories":2126},[398],{"categories":2128},[79],{"categories":2130},[],{"categories":2132},[82],{"categories":2134},[82],{"categories":2136},[85],{"categories":2138},[136],{"categories":2140},[88],{"categories":2142},[106],{"categories":2144},[143],{"categories":2146},[127],{"categories":2148},[85],{"categories":2150},[85],{"categories":2152},[85],{"categories":2154},[79],{"categories":2156},[85],{"categories":2158},[88],{"categories":2160},[106],{"categories":2162},[],{"categories":2164},[],{"categories":2166},[47],{"categories":2168},[136],{"categories":2170},[85],{"categories":2172},[127],{"categories":2174},[47],{"categories":2176},[85],{"categories":2178},[85],{"categories":2180},[88],{"categories":2182},[88],{"categories":2184},[85,82],{"categories":2186},[],{"categories":2188},[127],{"categories":2190},[],{"categories":2192},[85],{"categories":2194},[106],{"categories":2196},[79],{"categories":2198},[79],{"categories":2200},[88],{"categories":2202},[85],{"categories":2204},[82],{"categories":2206},[136],{"categories":2208},[143],{"categories":2210},[],{"categories":2212},[106],{"categories":2214},[85],{"categories":2216},[85],{"categories":2218},[106],{"categories":2220},[136],{"categories":2222},[85],{"categories":2224},[88],{"categories":2226},[106],{"categories":2228},[85],{"categories":2230},[127],{"categories":2232},[85],{"categories":2234},[85],{"categories":2236},[398],{"categories":2238},[91],{"categories":2240},[88],{"categories":2242},[85],{"categories":2244},[106],{"categories":2246},[88],{"categories":2248},[143],{"categories":2250},[85],{"categories":2252},[],{"categories":2254},[85],{"categories":2256},[],{"categories":2258},[],{"categories":2260},[],{"categories":2262},[82],{"categories":2264},[85],{"categories":2266},[88],{"categories":2268},[106],{"categories":2270},[106],{"categories":2272},[106],{"categories":2274},[106],{"categories":2276},[],{"categories":2278},[79],{"categories":2280},[88],{"categories":2282},[106],{"categories":2284},[79],{"categories":2286},[88],{"categories":2288},[85],{"categories":2290},[85,88],{"categories":2292},[88],{"categories":2294},[398],{"categories":2296},[106],{"categories":2298},[106],{"categories":2300},[88],{"categories":2302},[85],{"categories":2304},[],{"categories":2306},[106],{"categories":2308},[143],{"categories":2310},[79],{"categories":2312},[85],{"categories":2314},[85],{"categories":2316},[],{"categories":2318},[136],{"categories":2320},[],{"categories":2322},[79],{"categories":2324},[88],{"categories":2326},[106],{"categories":2328},[85],{"categories":2330},[106],{"categories":2332},[79],{"categories":2334},[106],{"categories":2336},[106],{"categories":2338},[],{"categories":2340},[82],{"categories":2342},[88],{"categories":2344},[106],{"categories":2346},[106],{"categories":2348},[106],{"categories":2350},[106],{"categories":2352},[106],{"categories":2354},[106],{"categories":2356},[106],{"categories":2358},[106],{"categories":2360},[106],{"categories":2362},[106],{"categories":2364},[47],{"categories":2366},[79],{"categories":2368},[85],{"categories":2370},[85],{"categories":2372},[],{"categories":2374},[85,79],{"categories":2376},[],{"categories":2378},[88],{"categories":2380},[106],{"categories":2382},[88],{"categories":2384},[85],{"categories":2386},[85],{"categories":2388},[85],{"categories":2390},[85],{"categories":2392},[85],{"categories":2394},[88],{"categories":2396},[82],{"categories":2398},[127],{"categories":2400},[106],{"categories":2402},[85],{"categories":2404},[],{"categories":2406},[],{"categories":2408},[88],{"categories":2410},[127],{"categories":2412},[85],{"categories":2414},[],{"categories":2416},[],{"categories":2418},[143],{"categories":2420},[85],{"categories":2422},[],{"categories":2424},[],{"categories":2426},[79],{"categories":2428},[82],{"categories":2430},[85],{"categories":2432},[82],{"categories":2434},[127],{"categories":2436},[],{"categories":2438},[106],{"categories":2440},[],{"categories":2442},[127],{"categories":2444},[85],{"categories":2446},[143],{"categories":2448},[],{"categories":2450},[143],{"categories":2452},[],{"categories":2454},[],{"categories":2456},[88],{"categories":2458},[],{"categories":2460},[82],{"categories":2462},[79],{"categories":2464},[127],{"categories":2466},[136],{"categories":2468},[],{"categories":2470},[],{"categories":2472},[85],{"categories":2474},[79],{"categories":2476},[143],{"categories":2478},[],{"categories":2480},[88],{"categories":2482},[88],{"categories":2484},[106],{"categories":2486},[85],{"categories":2488},[88],{"categories":2490},[85],{"categories":2492},[88],{"categories":2494},[85],{"categories":2496},[91],{"categories":2498},[106],{"categories":2500},[],{"categories":2502},[143],{"categories":2504},[136],{"categories":2506},[88],{"categories":2508},[],{"categories":2510},[85],{"categories":2512},[88],{"categories":2514},[82],{"categories":2516},[79],{"categories":2518},[85],{"categories":2520},[127],{"categories":2522},[136],{"categories":2524},[136],{"categories":2526},[85],{"categories":2528},[47],{"categories":2530},[85],{"categories":2532},[88],{"categories":2534},[82],{"categories":2536},[88],{"categories":2538},[85],{"categories":2540},[85],{"categories":2542},[88],{"categories":2544},[106],{"categories":2546},[],{"categories":2548},[79],{"categories":2550},[85],{"categories":2552},[88],{"categories":2554},[85],{"categories":2556},[85],{"categories":2558},[],{"categories":2560},[127],{"categories":2562},[82],{"categories":2564},[106],{"categories":2566},[85],{"categories":2568},[85],{"categories":2570},[127],{"categories":2572},[143],{"categories":2574},[47],{"categories":2576},[85],{"categories":2578},[106],{"categories":2580},[85],{"categories":2582},[88],{"categories":2584},[398],{"categories":2586},[85],{"categories":2588},[88],{"categories":2590},[47],{"categories":2592},[],{"categories":2594},[88],{"categories":2596},[136],{"categories":2598},[127],{"categories":2600},[85],{"categories":2602},[79],{"categories":2604},[82],{"categories":2606},[136],{"categories":2608},[],{"categories":2610},[88],{"categories":2612},[85],{"categories":2614},[],{"categories":2616},[106],{"categories":2618},[],{"categories":2620},[106],{"categories":2622},[85],{"categories":2624},[88],{"categories":2626},[88],{"categories":2628},[88],{"categories":2630},[],{"categories":2632},[],{"categories":2634},[85],{"categories":2636},[85],{"categories":2638},[],{"categories":2640},[127],{"categories":2642},[88],{"categories":2644},[143],{"categories":2646},[79],{"categories":2648},[],{"categories":2650},[],{"categories":2652},[106],{"categories":2654},[136],{"categories":2656},[85],{"categories":2658},[85],{"categories":2660},[85],{"categories":2662},[136],{"categories":2664},[106],{"categories":2666},[127],{"categories":2668},[85],{"categories":2670},[85],{"categories":2672},[85],{"categories":2674},[106],{"categories":2676},[85],{"categories":2678},[106],{"categories":2680},[88],{"categories":2682},[88],{"categories":2684},[136],{"categories":2686},[88],{"categories":2688},[85],{"categories":2690},[136],{"categories":2692},[127],{"categories":2694},[],{"categories":2696},[88],{"categories":2698},[],{"categories":2700},[],{"categories":2702},[82],{"categories":2704},[85],{"categories":2706},[88],{"categories":2708},[79],{"categories":2710},[88],{"categories":2712},[143],{"categories":2714},[],{"categories":2716},[88],{"categories":2718},[],{"categories":2720},[79],{"categories":2722},[88],{"categories":2724},[],{"categories":2726},[88],{"categories":2728},[85],{"categories":2730},[106],{"categories":2732},[85],{"categories":2734},[88],{"categories":2736},[106],{"categories":2738},[88],{"categories":2740},[136],{"categories":2742},[127],{"categories":2744},[79],{"categories":2746},[],{"categories":2748},[88],{"categories":2750},[127],{"categories":2752},[106],{"categories":2754},[85],{"categories":2756},[127],{"categories":2758},[79],{"categories":2760},[],{"categories":2762},[88],{"categories":2764},[88],{"categories":2766},[85],{"categories":2768},[],{"categories":2770},[88],{"categories":2772},[91],{"categories":2774},[106],{"categories":2776},[88],{"categories":2778},[82],{"categories":2780},[],{"categories":2782},[85],{"categories":2784},[91],{"categories":2786},[85],{"categories":2788},[88],{"categories":2790},[106],{"categories":2792},[79],{"categories":2794},[398],{"categories":2796},[85],{"categories":2798},[85],{"categories":2800},[85],{"categories":2802},[106],{"categories":2804},[82],{"categories":2806},[85],{"categories":2808},[127],{"categories":2810},[106],{"categories":2812},[398],{"categories":2814},[85],{"categories":2816},[],{"categories":2818},[],{"categories":2820},[398],{"categories":2822},[47],{"categories":2824},[88],{"categories":2826},[88],{"categories":2828},[106],{"categories":2830},[85],{"categories":2832},[79],{"categories":2834},[127],{"categories":2836},[88],{"categories":2838},[85],{"categories":2840},[143],{"categories":2842},[85],{"categories":2844},[88],{"categories":2846},[],{"categories":2848},[85],{"categories":2850},[85],{"categories":2852},[106],{"categories":2854},[79],{"categories":2856},[],{"categories":2858},[85],{"categories":2860},[85],{"categories":2862},[136],{"categories":2864},[127],{"categories":2866},[85,88],{"categories":2868},[143,82],{"categories":2870},[85],{"categories":2872},[],{"categories":2874},[88],{"categories":2876},[],{"categories":2878},[136],{"categories":2880},[85],{"categories":2882},[106],{"categories":2884},[],{"categories":2886},[88],{"categories":2888},[],{"categories":2890},[88],{"categories":2892},[79],{"categories":2894},[88],{"categories":2896},[85],{"categories":2898},[398],{"categories":2900},[143],{"categories":2902},[82],{"categories":2904},[82],{"categories":2906},[79],{"categories":2908},[79],{"categories":2910},[85],{"categories":2912},[88],{"categories":2914},[85],{"categories":2916},[85],{"categories":2918},[79],{"categories":2920},[85],{"categories":2922},[143],{"categories":2924},[106],{"categories":2926},[85],{"categories":2928},[88],{"categories":2930},[85],{"categories":2932},[],{"categories":2934},[136],{"categories":2936},[],{"categories":2938},[88],{"categories":2940},[79],{"categories":2942},[],{"categories":2944},[398],{"categories":2946},[85],{"categories":2948},[],{"categories":2950},[106],{"categories":2952},[88],{"categories":2954},[136],{"categories":2956},[85],{"categories":2958},[88],{"categories":2960},[136],{"categories":2962},[88],{"categories":2964},[106],{"categories":2966},[79],{"categories":2968},[106],{"categories":2970},[136],{"categories":2972},[85],{"categories":2974},[127],{"categories":2976},[85],{"categories":2978},[85],{"categories":2980},[85],{"categories":2982},[85],{"categories":2984},[88],{"categories":2986},[85],{"categories":2988},[88],{"categories":2990},[85],{"categories":2992},[79],{"categories":2994},[85],{"categories":2996},[88],{"categories":2998},[127],{"categories":3000},[79],{"categories":3002},[88],{"categories":3004},[127],{"categories":3006},[],{"categories":3008},[85],{"categories":3010},[85],{"categories":3012},[136],{"categories":3014},[],{"categories":3016},[88],{"categories":3018},[143],{"categories":3020},[85],{"categories":3022},[106],{"categories":3024},[143],{"categories":3026},[88],{"categories":3028},[82],{"categories":3030},[82],{"categories":3032},[85],{"categories":3034},[79],{"categories":3036},[],{"categories":3038},[85],{"categories":3040},[],{"categories":3042},[79],{"categories":3044},[85],{"categories":3046},[88],{"categories":3048},[88],{"categories":3050},[],{"categories":3052},[136],{"categories":3054},[136],{"categories":3056},[143],{"categories":3058},[127],{"categories":3060},[],{"categories":3062},[85],{"categories":3064},[79],{"categories":3066},[85],{"categories":3068},[136],{"categories":3070},[79],{"categories":3072},[106],{"categories":3074},[106],{"categories":3076},[],{"categories":3078},[106],{"categories":3080},[88],{"categories":3082},[127],{"categories":3084},[47],{"categories":3086},[85],{"categories":3088},[],{"categories":3090},[106],{"categories":3092},[136],{"categories":3094},[82],{"categories":3096},[85],{"categories":3098},[79],{"categories":3100},[398],{"categories":3102},[79],{"categories":3104},[],{"categories":3106},[],{"categories":3108},[106],{"categories":3110},[],{"categories":3112},[88],{"categories":3114},[88],{"categories":3116},[88],{"categories":3118},[],{"categories":3120},[85],{"categories":3122},[],{"categories":3124},[106],{"categories":3126},[79],{"categories":3128},[127],{"categories":3130},[85],{"categories":3132},[106],{"categories":3134},[106],{"categories":3136},[],{"categories":3138},[106],{"categories":3140},[79],{"categories":3142},[85],{"categories":3144},[],{"categories":3146},[88],{"categories":3148},[88],{"categories":3150},[79],{"categories":3152},[],{"categories":3154},[],{"categories":3156},[],{"categories":3158},[127],{"categories":3160},[88],{"categories":3162},[85],{"categories":3164},[],{"categories":3166},[],{"categories":3168},[],{"categories":3170},[127],{"categories":3172},[],{"categories":3174},[79],{"categories":3176},[],{"categories":3178},[],{"categories":3180},[127],{"categories":3182},[85],{"categories":3184},[106],{"categories":3186},[],{"categories":3188},[143],{"categories":3190},[106],{"categories":3192},[143],{"categories":3194},[85],{"categories":3196},[],{"categories":3198},[],{"categories":3200},[88],{"categories":3202},[],{"categories":3204},[],{"categories":3206},[88],{"categories":3208},[85],{"categories":3210},[],{"categories":3212},[88],{"categories":3214},[106],{"categories":3216},[143],{"categories":3218},[47],{"categories":3220},[88],{"categories":3222},[88],{"categories":3224},[],{"categories":3226},[],{"categories":3228},[],{"categories":3230},[106],{"categories":3232},[],{"categories":3234},[],{"categories":3236},[127],{"categories":3238},[79],{"categories":3240},[],{"categories":3242},[82],{"categories":3244},[143],{"categories":3246},[85],{"categories":3248},[136],{"categories":3250},[79],{"categories":3252},[47],{"categories":3254},[82],{"categories":3256},[136],{"categories":3258},[],{"categories":3260},[],{"categories":3262},[88],{"categories":3264},[79],{"categories":3266},[127],{"categories":3268},[79],{"categories":3270},[88],{"categories":3272},[398],{"categories":3274},[88],{"categories":3276},[],{"categories":3278},[85],{"categories":3280},[106],{"categories":3282},[136],{"categories":3284},[],{"categories":3286},[127],{"categories":3288},[106],{"categories":3290},[79],{"categories":3292},[88],{"categories":3294},[85],{"categories":3296},[82],{"categories":3298},[88,398],{"categories":3300},[88],{"categories":3302},[136],{"categories":3304},[85],{"categories":3306},[47],{"categories":3308},[143],{"categories":3310},[88],{"categories":3312},[],{"categories":3314},[88],{"categories":3316},[85],{"categories":3318},[82],{"categories":3320},[],{"categories":3322},[],{"categories":3324},[85],{"categories":3326},[47],{"categories":3328},[85],{"categories":3330},[],{"categories":3332},[106],{"categories":3334},[],{"categories":3336},[106],{"categories":3338},[136],{"categories":3340},[88],{"categories":3342},[85],{"categories":3344},[143],{"categories":3346},[136],{"categories":3348},[],{"categories":3350},[106],{"categories":3352},[85],{"categories":3354},[],{"categories":3356},[85],{"categories":3358},[88],{"categories":3360},[85],{"categories":3362},[88],{"categories":3364},[85],{"categories":3366},[85],{"categories":3368},[85],{"categories":3370},[85],{"categories":3372},[82],{"categories":3374},[],{"categories":3376},[91],{"categories":3378},[106],{"categories":3380},[85],{"categories":3382},[],{"categories":3384},[136],{"categories":3386},[85],{"categories":3388},[85],{"categories":3390},[88],{"categories":3392},[106],{"categories":3394},[85],{"categories":3396},[85],{"categories":3398},[82],{"categories":3400},[88],{"categories":3402},[127],{"categories":3404},[],{"categories":3406},[47],{"categories":3408},[85],{"categories":3410},[],{"categories":3412},[106],{"categories":3414},[143],{"categories":3416},[],{"categories":3418},[],{"categories":3420},[106],{"categories":3422},[106],{"categories":3424},[143],{"categories":3426},[79],{"categories":3428},[88],{"categories":3430},[88],{"categories":3432},[85],{"categories":3434},[82],{"categories":3436},[],{"categories":3438},[],{"categories":3440},[106],{"categories":3442},[47],{"categories":3444},[136],{"categories":3446},[88],{"categories":3448},[127],{"categories":3450},[47],{"categories":3452},[47],{"categories":3454},[],{"categories":3456},[106],{"categories":3458},[85],{"categories":3460},[85],{"categories":3462},[136],{"categories":3464},[],{"categories":3466},[106],{"categories":3468},[106],{"categories":3470},[106],{"categories":3472},[],{"categories":3474},[88],{"categories":3476},[85],{"categories":3478},[],{"categories":3480},[79],{"categories":3482},[82],{"categories":3484},[],{"categories":3486},[85],{"categories":3488},[85],{"categories":3490},[],{"categories":3492},[136],{"categories":3494},[],{"categories":3496},[],{"categories":3498},[],{"categories":3500},[],{"categories":3502},[85],{"categories":3504},[106],{"categories":3506},[],{"categories":3508},[],{"categories":3510},[85],{"categories":3512},[85],{"categories":3514},[85],{"categories":3516},[47],{"categories":3518},[85],{"categories":3520},[47],{"categories":3522},[],{"categories":3524},[47],{"categories":3526},[47],{"categories":3528},[398],{"categories":3530},[88],{"categories":3532},[136],{"categories":3534},[],{"categories":3536},[],{"categories":3538},[47],{"categories":3540},[136],{"categories":3542},[136],{"categories":3544},[136],{"categories":3546},[],{"categories":3548},[79],{"categories":3550},[136],{"categories":3552},[136],{"categories":3554},[79],{"categories":3556},[136],{"categories":3558},[82],{"categories":3560},[136],{"categories":3562},[136],{"categories":3564},[136],{"categories":3566},[47],{"categories":3568},[106],{"categories":3570},[106],{"categories":3572},[85],{"categories":3574},[136],{"categories":3576},[47],{"categories":3578},[398],{"categories":3580},[47],{"categories":3582},[47],{"categories":3584},[47],{"categories":3586},[],{"categories":3588},[82],{"categories":3590},[],{"categories":3592},[398],{"categories":3594},[136],{"categories":3596},[136],{"categories":3598},[136],{"categories":3600},[88],{"categories":3602},[106,82],{"categories":3604},[47],{"categories":3606},[],{"categories":3608},[],{"categories":3610},[47],{"categories":3612},[],{"categories":3614},[47],{"categories":3616},[106],{"categories":3618},[88],{"categories":3620},[],{"categories":3622},[136],{"categories":3624},[85],{"categories":3626},[127],{"categories":3628},[],{"categories":3630},[85],{"categories":3632},[],{"categories":3634},[106],{"categories":3636},[79],{"categories":3638},[47],{"categories":3640},[],{"categories":3642},[136],{"categories":3644},[106],[3646,3812,3884,4171],{"id":3647,"title":3648,"ai":3649,"body":3654,"categories":3782,"created_at":48,"date_modified":48,"description":40,"extension":49,"faq":48,"featured":50,"kicker_label":48,"meta":3783,"navigation":58,"path":3799,"published_at":3800,"question":48,"scraped_at":3801,"seo":3802,"sitemap":3803,"source_id":3804,"source_name":3805,"source_type":65,"source_url":3806,"stem":3807,"tags":3808,"thumbnail_url":48,"tldr":3809,"tweet":48,"unknown_tags":3810,"__hash__":3811},"summaries\u002Fsummaries\u002F0cdee908eb39d657-stream-parse-tasktrove-dataset-for-ai-task-insight-summary.md","Stream Parse TaskTrove Dataset for AI Task Insights",{"provider":7,"model":8,"input_tokens":3650,"output_tokens":3651,"processing_time_ms":3652,"cost_usd":3653},9713,1943,26130,0.0028916,{"type":14,"value":3655,"toc":3777},[3656,3660,3716,3723,3727,3734,3748,3752,3759],[17,3657,3659],{"id":3658},"build-streaming-parser-for-compressed-task-binaries","Build Streaming Parser for Compressed Task Binaries",[22,3661,3662,3663,3667,3668,3671,3672,3675,3676,3679,3680,3683,3684,3687,3688,3691,3692,3695,3696,3699,3700,3703,3704,3707,3708,3711,3712,3715],{},"Handle TaskTrove's ",[3664,3665,3666],"code",{},"task_binary"," fields—gzip-compressed blobs up to p95= some KB—without downloading the full dataset by using ",[3664,3669,3670],{},"datasets.load_dataset(..., streaming=True)",". Convert blobs to bytes via ",[3664,3673,3674],{},"to_bytes()"," which decodes base64 strings or lists. Decompress if gzip header (",[3664,3677,3678],{},"b'\\x1f\\x8b'","), then auto-detect format in ",[3664,3681,3682],{},"parse_task()",": prioritize ",[3664,3685,3686],{},"tarfile.open()"," for archives (extract files as str\u002Fbytes), fall back to ",[3664,3689,3690],{},"ZipFile",", then ",[3664,3693,3694],{},"json.loads()"," (or JSONL line-by-line), plain text decode, or binary. This yields dicts with ",[3664,3697,3698],{},"format",", ",[3664,3701,3702],{},"files"," (for archives), ",[3664,3705,3706],{},"content",", plus ",[3664,3709,3710],{},"raw_size","\u002F",[3664,3713,3714],{},"compressed_size",". Example: first sample decompresses from compressed bytes to raw, revealing tar with JSON metadata and .py code files.",[22,3717,3718,3719,3722],{},"Use ",[3664,3720,3721],{},"show_task()"," to preview: breakdown by extension (e.g., .json, .py), truncate JSON to 1500 chars, code to 600. Trade-off: Streaming processes samples in real-time but requires robust error handling for malformed blobs (e.g., UnicodeDecodeError keeps as bytes).",[17,3724,3726],{"id":3725},"uncover-dataset-structure-via-counters-and-plots","Uncover Dataset Structure via Counters and Plots",[22,3728,3729,3730,3733],{},"Extract source from ",[3664,3731,3732],{},"path"," prefix (split on last '-'): top 15 sources dominate test split (e.g., count thousands each). Track compressed sizes: log-scale histogram shows median p50 KB, p95 ~higher KB—most tasks compact, outliers bulkier. Inspect 200 samples: common filenames (e.g., task.json, README.md top counts), JSON keys (e.g., instruction, tests frequent). Full listings reveal 5-10 files per tar\u002Fzip typically.",[22,3735,3736,3737,3740,3741,3699,3744,3747],{},"Aggregate in ",[3664,3738,3739],{},"TaskTroveExplorer.summary(limit=1000)",": group by source for n tasks, mean compressed\u002Fraw KB (log y-scale bar chart top 12), mean files. Enables quick profiling—e.g., some sources average 10+ KB raw, others leaner. Polars DataFrame slice of 500 tasks captures ",[3664,3742,3743],{},"source",[3664,3745,3746],{},"is_verified",", sizes, instruction preview for downstream modeling.",[17,3749,3751],{"id":3750},"detect-verifiers-and-export-rl-ready-tasks","Detect Verifiers and Export RL-Ready Tasks",[22,3753,3754,3755,3758],{},"Flag evaluation-ready tasks with ",[3664,3756,3757],{},"has_verifier()",": scan filenames for 'verifier'\u002F'judge'\u002F'grader', JSON keys like 'verifier_config'\u002F'rubric'\u002F'test_patch', or content strings. Multi-signal boosts recall—e.g., verified tasks have dedicated verifier.py or JSON. Per-source rates vary (bar chart: green high % usable for RL); hunt first verified sample to inspect (e.g., grader JSON with tests).",[22,3760,3761,3764,3765,3768,3769,3772,3773,3776],{},[3664,3762,3763],{},"TaskTroveExplorer"," class unifies: ",[3664,3766,3767],{},"iter()"," filters sources, ",[3664,3770,3771],{},"sample(n=5)"," parses + adds metadata, ",[3664,3774,3775],{},"export()"," writes dirs with files\u002FJSON. Saves Parquet slice (500 rows, ~KB): boosts workflows by filtering verified tasks (sum across sources). Full pipeline scales to validation split; lists HF repo subdirs for all sources (~dozens).",{"title":40,"searchDepth":41,"depth":41,"links":3778},[3779,3780,3781],{"id":3658,"depth":41,"text":3659},{"id":3725,"depth":41,"text":3726},{"id":3750,"depth":41,"text":3751},[47],{"content_references":3784,"triage":3795},[3785,3790],{"type":3786,"title":3787,"url":3788,"context":3789},"dataset","TaskTrove","https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fopen-thoughts\u002FTaskTrove","mentioned",{"type":3791,"title":3792,"url":3793,"context":3794},"other","Full Codes with Notebook","https:\u002F\u002Fgithub.com\u002FMarktechpost\u002FAI-Agents-Projects-Tutorials\u002Fblob\u002Fmain\u002FLLM%20Projects\u002Ftasktrove_exploration_pipeline_marktechpost.py","recommended",{"relevance":3796,"novelty":54,"quality":54,"actionability":54,"composite":3797,"reasoning":3798},5,4.35,"Category: Data Science & Visualization. The article provides a detailed guide on streaming and parsing a specific dataset, which is highly relevant for developers looking to integrate AI features using real-world data. It includes practical code examples and techniques for handling large datasets, making it actionable for the target audience.","\u002Fsummaries\u002F0cdee908eb39d657-stream-parse-tasktrove-dataset-for-ai-task-insight-summary","2026-05-03 21:26:42","2026-05-04 16:13:43",{"title":3648,"description":40},{"loc":3799},"0cdee908eb39d657","MarkTechPost","https:\u002F\u002Fwww.marktechpost.com\u002F2026\u002F05\u002F03\u002Fa-coding-implementation-to-explore-and-analyze-the-tasktrove-dataset-with-streaming-parsing-visualization-and-verifier-detection\u002F","summaries\u002F0cdee908eb39d657-stream-parse-tasktrove-dataset-for-ai-task-insight-summary",[70,71,69],"Stream multi-GB TaskTrove dataset without full download; parse gzip-compressed tar\u002Fzip\u002FJSON binaries to analyze sources, sizes (median  p50 KB compressed), filenames, and detect verifiers for RL-ready tasks via multi-signal heuristics.",[],"vJBe85PNXCRjjCrLU1WGvZnO0Dhqgjb6ThGkJ-rMnRQ",{"id":3813,"title":3814,"ai":3815,"body":3820,"categories":3856,"created_at":48,"date_modified":48,"description":40,"extension":49,"faq":48,"featured":50,"kicker_label":48,"meta":3857,"navigation":58,"path":3870,"published_at":3871,"question":48,"scraped_at":3872,"seo":3873,"sitemap":3874,"source_id":3875,"source_name":3876,"source_type":65,"source_url":3877,"stem":3878,"tags":3879,"thumbnail_url":48,"tldr":3881,"tweet":48,"unknown_tags":3882,"__hash__":3883},"summaries\u002Fsummaries\u002F6e4b4d5944c58d66-etl-pipeline-turns-messy-hr-data-into-star-schema--summary.md","ETL Pipeline Turns Messy HR Data into Star Schema Insights",{"provider":7,"model":8,"input_tokens":3816,"output_tokens":3817,"processing_time_ms":3818,"cost_usd":3819},7468,1638,25555,0.0022901,{"type":14,"value":3821,"toc":3850},[3822,3826,3829,3833,3836,3840,3843,3847],[17,3823,3825],{"id":3824},"restructure-flat-data-into-star-schema-for-efficient-analysis","Restructure Flat Data into Star Schema for Efficient Analysis",[22,3827,3828],{},"Raw HR datasets arrive as wide, redundant tables that slow queries and complicate scaling. Transform them into a star schema: one central fact table for employee records (EmpID, Age, tenure_years, is_attrition, foreign keys like department_id) surrounded by dimension tables (department, position, salary with qcut-segmented levels: Low\u002FMedium\u002FHigh for equal distribution groups). This reduces redundancy, speeds queries, and adds business meaning—e.g., salary_level enables quick counts of high-salary employees. Use pd.read_csv for extraction, then merge unique values back with surrogate keys (index + 1) to link facts to dimensions, creating maintainable analytical workloads over monolithic tables.",[17,3830,3832],{"id":3831},"clean-and-engineer-features-robustly-from-unreliable-raw-data","Clean and Engineer Features Robustly from Unreliable Raw Data",[22,3834,3835],{},"Don't trust provided fields—derive them. Strip column whitespace to prevent code breaks. Convert strings to datetime with errors='coerce' for DateofHire, DateofTermination, DOB (format='%m\u002F%d\u002F%y'). Compute Age as (today - DOB).days \u002F\u002F 365, tenure_years as (today - DateofHire).days \u002F 365, is_attrition as DateofTermination.notna(), is_active as opposite. Fill missing Salary and Age with medians (outlier-resistant over means). These steps turn inconsistent inputs into reliable features for downstream analysis and ML, emphasizing derivation over assumption.",[17,3837,3839],{"id":3838},"extract-actionable-hr-insights-post-transformation","Extract Actionable HR Insights Post-Transformation",[22,3841,3842],{},"Query structured data reveals: Managers show no strong performance impact—most employees rate 'Fully Meets' across leaders, with minor 'Exceeds' variations (e.g., Ketsia Liebig, Brandon Miller) and rare 'PIP\u002FNeeds Improvement'. Diversity: 60% White, 26% Black\u002FAfrican American, 9% Asian; gender balanced at 56.6% female vs. 43.4% male. Recruitment: Diversity Job Fair yields 100% Black hires; Indeed\u002FLinkedIn balanced; Google Search varied but White-dominant; avoid Online Web Application\u002FOther (100% White). Stacked crosstabs and countplots highlight channels driving diversity, prioritizing targeted sources over uniform ones.",[17,3844,3846],{"id":3845},"predict-attrition-at-71-accuracy-with-key-drivers-identified","Predict Attrition at 71% Accuracy with Key Drivers Identified",[22,3848,3849],{},"Leverage cleaned fact table merges (absences, salary dims) for RandomForestClassifier on age, tenure_years, absences, Salary (filled medians). Train\u002Ftest split (80\u002F20) yields 71% accuracy, 59% precision\u002Frecall for attrition (confusion: 32 true stay, 13 true leave, 9 misses each). Feature importances: tenure (47%), Salary (23%), absences moderate, age lowest—focus retention on long-tenured, low-salary employees with absences to cut churn.",{"title":40,"searchDepth":41,"depth":41,"links":3851},[3852,3853,3854,3855],{"id":3824,"depth":41,"text":3825},{"id":3831,"depth":41,"text":3832},{"id":3838,"depth":41,"text":3839},{"id":3845,"depth":41,"text":3846},[47],{"content_references":3858,"triage":3867},[3859,3863],{"type":3786,"title":3860,"author":3861,"url":3862,"context":3789},"Human Resources Data Set","rhuebner","https:\u002F\u002Fwww.kaggle.com\u002Fdatasets\u002Frhuebner\u002Fhuman-resources-data-set",{"type":3791,"title":3864,"author":3865,"url":3866,"context":3789},"ETL-HR-Analytics-Project","jihanKamilah","https:\u002F\u002Fgithub.com\u002FjihanKamilah\u002FETL-HR-Analytics-Project",{"relevance":3796,"novelty":55,"quality":54,"actionability":54,"composite":3868,"reasoning":3869},4.15,"Category: Data Science & Visualization. The article provides a detailed guide on building an ETL pipeline to transform messy HR data into a star schema, addressing practical applications for data analysis, which is highly relevant for product builders. It includes specific techniques for data cleaning and feature engineering, making it actionable for the audience.","\u002Fsummaries\u002F6e4b4d5944c58d66-etl-pipeline-turns-messy-hr-data-into-star-schema-summary","2026-04-29 17:03:37","2026-05-03 17:01:04",{"title":3814,"description":40},{"loc":3870},"6e4b4d5944c58d66","Learning Data","https:\u002F\u002Fmedium.com\u002Flearning-data\u002Fthis-is-what-real-data-looks-like-and-how-i-turned-it-into-insights-3d520e7da561?source=rss----eec44e936bf1---4","summaries\u002F6e4b4d5944c58d66-etl-pipeline-turns-messy-hr-data-into-star-schema--summary",[71,3880,69,70],"machine-learning","Build a scalable ETL pipeline to restructure flat HR data into a star schema fact\u002Fdimension tables, enabling analysis of manager performance, diversity (60% White, 56.6% female), recruitment channels, and 71% accurate attrition prediction where tenure drives 47% of decisions.",[],"rPkakR-BHVER_oBhsIaiuBEJmjCsAOdztx4oKVnyBwY",{"id":3885,"title":3886,"ai":3887,"body":3892,"categories":4146,"created_at":48,"date_modified":48,"description":40,"extension":49,"faq":48,"featured":50,"kicker_label":48,"meta":4147,"navigation":58,"path":4158,"published_at":4159,"question":48,"scraped_at":4160,"seo":4161,"sitemap":4162,"source_id":4163,"source_name":3876,"source_type":65,"source_url":4164,"stem":4165,"tags":4166,"thumbnail_url":48,"tldr":4168,"tweet":48,"unknown_tags":4169,"__hash__":4170},"summaries\u002Fsummaries\u002F90a024f8fc9fd261-automate-weekly-pdf-reports-with-python-etl-pipeli-summary.md","Automate Weekly PDF Reports with Python ETL Pipeline",{"provider":7,"model":8,"input_tokens":3888,"output_tokens":3889,"processing_time_ms":3890,"cost_usd":3891},8933,2254,17256,0.00289095,{"type":14,"value":3893,"toc":4141},[3894,3898,3901,3960,3975,3991,4001,4004,4008,4011,4056,4059,4062,4065,4069,4072,4075,4131,4134,4137],[17,3895,3897],{"id":3896},"merge-raw-datasets-into-actionable-business-data","Merge Raw Datasets into Actionable Business Data",[22,3899,3900],{},"Start by loading six Olist e-commerce CSVs (orders, customers, items, payments, products, reviews) with pandas.read_csv, then merge on keys like customer_id, order_id, product_id:",[3902,3903,3906],"pre",{"className":3904,"code":3905,"language":70,"meta":40,"style":40},"language-python shiki shiki-themes github-light github-dark","def load_data():\n    return {\n        \"orders\": pd.read_csv(\"data\u002Folist_orders_dataset.csv\"),\n        # ... other datasets\n    }\n\ndf = data[\"orders\"].merge(data[\"customers\"], on=\"customer_id\", how=\"left\") \\\n    .merge(data[\"items\"], on=\"order_id\", how=\"left\") \\\n    # ... other merges\n",[3664,3907,3908,3916,3921,3926,3931,3936,3942,3948,3954],{"__ignoreMap":40},[3909,3910,3913],"span",{"class":3911,"line":3912},"line",1,[3909,3914,3915],{},"def load_data():\n",[3909,3917,3918],{"class":3911,"line":41},[3909,3919,3920],{},"    return {\n",[3909,3922,3923],{"class":3911,"line":55},[3909,3924,3925],{},"        \"orders\": pd.read_csv(\"data\u002Folist_orders_dataset.csv\"),\n",[3909,3927,3928],{"class":3911,"line":54},[3909,3929,3930],{},"        # ... other datasets\n",[3909,3932,3933],{"class":3911,"line":3796},[3909,3934,3935],{},"    }\n",[3909,3937,3939],{"class":3911,"line":3938},6,[3909,3940,3941],{"emptyLinePlaceholder":58},"\n",[3909,3943,3945],{"class":3911,"line":3944},7,[3909,3946,3947],{},"df = data[\"orders\"].merge(data[\"customers\"], on=\"customer_id\", how=\"left\") \\\n",[3909,3949,3951],{"class":3911,"line":3950},8,[3909,3952,3953],{},"    .merge(data[\"items\"], on=\"order_id\", how=\"left\") \\\n",[3909,3955,3957],{"class":3911,"line":3956},9,[3909,3958,3959],{},"    # ... other merges\n",[22,3961,3962,3963,3966,3967,3970,3971,3974],{},"Convert timestamps to datetime for time-based calcs: df",[3909,3964,3965],{},"\"order_purchase_timestamp\""," = pd.to_datetime(...). Compute delivery delays as (delivered - estimated).dt.days > 0 for is_delayed. Derive revenue = price + freight_value, profit = price - freight_value. Aggregate metrics like revenue_current = df",[3909,3968,3969],{},"\"revenue\"",".sum(), orders_current = df",[3909,3972,3973],{},"\"order_id\"",".nunique(), AOV = revenue \u002F orders.",[22,3976,3977,3978,3981,3982,3984,3985,3981,3988,3990],{},"Group by month for trends: monthly = df.groupby(\"month\").agg({\"revenue\": \"sum\", \"order_id\": \"nunique\"}); monthly",[3909,3979,3980],{},"\"growth\""," = monthly",[3909,3983,3969],{},".pct_change() * 100; monthly",[3909,3986,3987],{},"\"moving_avg\"",[3909,3989,3969],{},".rolling(3).mean().",[22,3992,3993,3994,4000],{},"Simulate weekly reporting with cutoff: df_sim = df",[3909,3995,3996,3997,3999],{},"df",[3909,3998,3965],{}," \u003C= cutoff_date",", advancing cutoff_date = start_date + pd.Timedelta(days=7 * run_count) via state.txt to mimic live cycles without reprocessing all history.",[22,4002,4003],{},"This standardization ensures consistent metric definitions across runs, turning scattered CSVs into a unified view of who bought what, payment amounts, delivery times, and satisfaction.",[17,4005,4007],{"id":4006},"add-rule-based-insights-and-build-pdf-reports","Add Rule-Based Insights and Build PDF Reports",[22,4009,4010],{},"Metrics alone fail without context—use simple if-conditions to interpret:",[3902,4012,4014],{"className":3904,"code":4013,"language":70,"meta":40,"style":40},"def generate_insights(metrics):\n    insights = []\n    if metrics[\"profit_current\"] \u003C metrics[\"revenue_current\"]:\n        insights.append(\"Revenue growing but profit margin thin, high logistics costs.\")\n    growth_volatility = metrics[\"monthly\"][\"growth\"].std()\n    if growth_volatility > 50:\n        insights.append(\"Revenue growth highly volatile, unstable performance.\")\n    # ...\n",[3664,4015,4016,4021,4026,4031,4036,4041,4046,4051],{"__ignoreMap":40},[3909,4017,4018],{"class":3911,"line":3912},[3909,4019,4020],{},"def generate_insights(metrics):\n",[3909,4022,4023],{"class":3911,"line":41},[3909,4024,4025],{},"    insights = []\n",[3909,4027,4028],{"class":3911,"line":55},[3909,4029,4030],{},"    if metrics[\"profit_current\"] \u003C metrics[\"revenue_current\"]:\n",[3909,4032,4033],{"class":3911,"line":54},[3909,4034,4035],{},"        insights.append(\"Revenue growing but profit margin thin, high logistics costs.\")\n",[3909,4037,4038],{"class":3911,"line":3796},[3909,4039,4040],{},"    growth_volatility = metrics[\"monthly\"][\"growth\"].std()\n",[3909,4042,4043],{"class":3911,"line":3938},[3909,4044,4045],{},"    if growth_volatility > 50:\n",[3909,4047,4048],{"class":3911,"line":3944},[3909,4049,4050],{},"        insights.append(\"Revenue growth highly volatile, unstable performance.\")\n",[3909,4052,4053],{"class":3911,"line":3950},[3909,4054,4055],{},"    # ...\n",[22,4057,4058],{},"Generate PDF with ReportLab: create executive summary (e.g., 2018 revenue \u003C 2017, orders down, AOV stable, 9.36% delay rate, 3.91 avg review score), KPI trends (Jan 2018 revenue\u002Fprofit >600% over 2017 but slowing; AOV 2-14% lower, driven by transaction volume), top products (relogios_presentes\u002Fbeleza_saude ~510K revenue each), delivery (SE state 33% delays, casa_conforto_2 60%; overall -10.76 avg delay days = early deliveries), payments (credit card 75%, boleto 19.1%), reviews (5-stars dominant, avg 3.91).",[22,4060,4061],{},"Key patterns: thin margins from costs; volatile growth; new-customer reliance; delays hurt scores; SP top region; credit users spend more.",[22,4063,4064],{},"Code charts with matplotlib (plt.savefig(\"revenue_chart.png\")), insert via Image(width=450,height=220), tables via Table(table_data). Central pipeline: data → transform → metrics → insights → generate_report().",[17,4066,4068],{"id":4067},"schedule-email-delivery-with-github-actions","Schedule Email Delivery with GitHub Actions",[22,4070,4071],{},"Automate email: use smtplib.SMTP_SSL('smtp.gmail.com',465), login via os.getenv(\"EMAIL_SENDER\u002FPASSWORD\"), attach PDF, dynamic subject. Secure creds in GitHub Secrets (EMAIL_SENDER, EMAIL_PASSWORD, EMAIL_RECEIVER).",[22,4073,4074],{},"Deploy via .github\u002Fworkflows\u002Fauto-report.yml:",[3902,4076,4080],{"className":4077,"code":4078,"language":4079,"meta":40,"style":40},"language-yaml shiki shiki-themes github-light github-dark","on:\n  schedule:\n    - cron: '0 1 * * 1'  # Mondays 1AM UTC\njobs:\n  # setup env, pip install, run main.py\n","yaml",[3664,4081,4082,4092,4100,4119,4126],{"__ignoreMap":40},[3909,4083,4084,4088],{"class":3911,"line":3912},[3909,4085,4087],{"class":4086},"sj4cs","on",[3909,4089,4091],{"class":4090},"sVt8B",":\n",[3909,4093,4094,4098],{"class":3911,"line":41},[3909,4095,4097],{"class":4096},"s9eBZ","  schedule",[3909,4099,4091],{"class":4090},[3909,4101,4102,4105,4108,4111,4115],{"class":3911,"line":55},[3909,4103,4104],{"class":4090},"    - ",[3909,4106,4107],{"class":4096},"cron",[3909,4109,4110],{"class":4090},": ",[3909,4112,4114],{"class":4113},"sZZnC","'0 1 * * 1'",[3909,4116,4118],{"class":4117},"sJ8bj","  # Mondays 1AM UTC\n",[3909,4120,4121,4124],{"class":3911,"line":54},[3909,4122,4123],{"class":4096},"jobs",[3909,4125,4091],{"class":4090},[3909,4127,4128],{"class":3911,"line":3796},[3909,4129,4130],{"class":4117},"  # setup env, pip install, run main.py\n",[22,4132,4133],{},"Triggers workflow: installs deps, executes pipeline (advances run_count), generates\u002Fsends report. No local runs—wake to delivered emails. Full loop: cron → ETL → PDF → email → state update for next cutoff.",[22,4135,4136],{},"Trade-offs: Relies on GitHub free tier (2k min\u002Fmonth); Gmail app passwords needed; rule-insights basic (extend with ML if needed). Scales to live data sources by swapping CSVs for APIs\u002FDBs.",[4138,4139,4140],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":40,"searchDepth":41,"depth":41,"links":4142},[4143,4144,4145],{"id":3896,"depth":41,"text":3897},{"id":4006,"depth":41,"text":4007},{"id":4067,"depth":41,"text":4068},[47],{"content_references":4148,"triage":4156},[4149,4153],{"type":3786,"title":4150,"author":4151,"url":4152,"context":3789},"Brazilian Ecommerce Public Dataset by Olist","Olist","https:\u002F\u002Fwww.kaggle.com\u002Fdatasets\u002Folistbr\u002Fbrazilian-ecommerce",{"type":3791,"title":4154,"author":3865,"url":4155,"context":3794},"Weekly-Business-Report-Automation","https:\u002F\u002Fgithub.com\u002FjihanKamilah\u002FWeekly-Business-Report-Automation\u002F",{"relevance":3796,"novelty":55,"quality":54,"actionability":3796,"composite":3797,"reasoning":4157},"Category: AI Automation. The article provides a detailed guide on automating weekly reports using a Python ETL pipeline, which directly addresses the audience's need for practical automation solutions. It includes specific code examples and actionable steps, making it highly relevant and immediately applicable for those building AI-powered products.","\u002Fsummaries\u002F90a024f8fc9fd261-automate-weekly-pdf-reports-with-python-etl-pipeli-summary","2026-04-21 13:31:02","2026-04-21 15:26:14",{"title":3886,"description":40},{"loc":4158},"90a024f8fc9fd261","https:\u002F\u002Fmedium.com\u002Flearning-data\u002Fi-was-tired-of-weekly-reports-so-i-automated-the-entire-thing-f63f88de59ce?source=rss----eec44e936bf1---4","summaries\u002F90a024f8fc9fd261-automate-weekly-pdf-reports-with-python-etl-pipeli-summary",[70,4167,71,69],"automation","Load\u002Fmerge e-commerce datasets, compute revenue\u002Fprofit\u002FAOV\u002Fgrowth metrics, generate PDF with matplotlib\u002FReportLab charts and rule-based insights, email via smtplib, schedule weekly via GitHub Actions cron.",[],"ui9FcZ6uGNS1FckDV1aa-U2QNtxJCoCeuihBdEY63jo",{"id":4172,"title":4173,"ai":4174,"body":4179,"categories":4369,"created_at":48,"date_modified":48,"description":40,"extension":49,"faq":48,"featured":50,"kicker_label":48,"meta":4370,"navigation":58,"path":4395,"published_at":4396,"question":48,"scraped_at":4397,"seo":4398,"sitemap":4399,"source_id":4400,"source_name":4401,"source_type":65,"source_url":4402,"stem":4403,"tags":4404,"thumbnail_url":48,"tldr":4406,"tweet":48,"unknown_tags":4407,"__hash__":4408},"summaries\u002Fsummaries\u002F4436e5e687a42c9f-cohort-analysis-exposes-donor-retention-risks-summary.md","Cohort Analysis Exposes Donor Retention Risks",{"provider":7,"model":8,"input_tokens":4175,"output_tokens":4176,"processing_time_ms":4177,"cost_usd":4178},9176,2970,20956,0.00281335,{"type":14,"value":4180,"toc":4363},[4181,4185,4188,4233,4236,4240,4243,4278,4281,4285,4288,4333,4336,4340,4360],[17,4182,4184],{"id":4183},"aggregate-retention-masks-leaky-bathtub-dynamics","Aggregate Retention Masks Leaky Bathtub Dynamics",[22,4186,4187],{},"Standard donor retention—proportion of last year's donors giving again—rises from 26.7% in 2017 to 42.2% in 2025, with total donors doubling from 646 to 1,261. But it's a lagging indicator, sustained by long-time supporters while new donor conversion thins, creating a 'leaky bathtub' where losses outpace retention despite stable water levels. Filter out regular giving first to avoid inflation:",[3902,4189,4191],{"className":3904,"code":4190,"language":70,"meta":40,"style":40},"import pandas as pd\ndf_opps_filtered = df_opps[df_opps['campaign'] != 'Regular Giving'].copy()\ndf_years = df_opps_filtered[['contact_id', 'year']].drop_duplicates()\ndf_years['prev_year'] = df_years.groupby('contact_id')['year'].shift(1)\ndf_years['is_retained'] = (df_years['year'] == df_years['prev_year'] + 1)\nresults = df_years.groupby('year').agg(total_donors=('contact_id', 'count'), retained_donors=('is_retained', 'sum')).reset_index()\nresults['donors_last_year'] = results['total_donors'].shift(1)\nresults['retention_rate'] = results['retained_donors'] \u002F results['donors_last_year']\n",[3664,4192,4193,4198,4203,4208,4213,4218,4223,4228],{"__ignoreMap":40},[3909,4194,4195],{"class":3911,"line":3912},[3909,4196,4197],{},"import pandas as pd\n",[3909,4199,4200],{"class":3911,"line":41},[3909,4201,4202],{},"df_opps_filtered = df_opps[df_opps['campaign'] != 'Regular Giving'].copy()\n",[3909,4204,4205],{"class":3911,"line":55},[3909,4206,4207],{},"df_years = df_opps_filtered[['contact_id', 'year']].drop_duplicates()\n",[3909,4209,4210],{"class":3911,"line":54},[3909,4211,4212],{},"df_years['prev_year'] = df_years.groupby('contact_id')['year'].shift(1)\n",[3909,4214,4215],{"class":3911,"line":3796},[3909,4216,4217],{},"df_years['is_retained'] = (df_years['year'] == df_years['prev_year'] + 1)\n",[3909,4219,4220],{"class":3911,"line":3938},[3909,4221,4222],{},"results = df_years.groupby('year').agg(total_donors=('contact_id', 'count'), retained_donors=('is_retained', 'sum')).reset_index()\n",[3909,4224,4225],{"class":3911,"line":3944},[3909,4226,4227],{},"results['donors_last_year'] = results['total_donors'].shift(1)\n",[3909,4229,4230],{"class":3911,"line":3950},[3909,4231,4232],{},"results['retention_rate'] = results['retained_donors'] \u002F results['donors_last_year']\n",[22,4234,4235],{},"This yields healthy-looking trends but ignores cohort composition.",[17,4237,4239],{"id":4238},"second-gift-rate-flags-early-conversion-failures","Second-Gift Rate Flags Early Conversion Failures",[22,4241,4242],{},"Track first-time donors making a second gift within 12 months: rates hover 29-35% (e.g., 31.2% for 2016 cohort, 33.0% for 2024), stable but below industry benchmarks. This threshold turns one-offs into supporters, predicting long-term loyalty. Compute via:",[3902,4244,4246],{"className":3904,"code":4245,"language":70,"meta":40,"style":40},"df_sorted = df_opps_filtered.sort_values(['contact_id', 'close_date'])\nfirst_and_second_gifts = df_sorted.groupby('contact_id')['close_date'].agg(['first', lambda x: x.iloc[1] if len(x)>1 else pd.NaT])\nfirst_and_second_gifts['months_lapsed'] = (first_and_second_gifts['second_gift_date'] - first_and_second_gifts['first_gift_date']).dt.days \u002F 30.4375\nfirst_and_second_gifts['is_converted'] = first_and_second_gifts['months_lapsed'] \u003C= 12\ngrouped = first_and_second_gifts.groupby('first_gift_year').agg(total_new_donors=('is_converted', 'count'), second_gift_conversions=('is_converted', 'sum'))\ngrouped['conversion_rate'] = (grouped['second_gift_conversions'] \u002F grouped['total_new_donors']) * 100\n",[3664,4247,4248,4253,4258,4263,4268,4273],{"__ignoreMap":40},[3909,4249,4250],{"class":3911,"line":3912},[3909,4251,4252],{},"df_sorted = df_opps_filtered.sort_values(['contact_id', 'close_date'])\n",[3909,4254,4255],{"class":3911,"line":41},[3909,4256,4257],{},"first_and_second_gifts = df_sorted.groupby('contact_id')['close_date'].agg(['first', lambda x: x.iloc[1] if len(x)>1 else pd.NaT])\n",[3909,4259,4260],{"class":3911,"line":55},[3909,4261,4262],{},"first_and_second_gifts['months_lapsed'] = (first_and_second_gifts['second_gift_date'] - first_and_second_gifts['first_gift_date']).dt.days \u002F 30.4375\n",[3909,4264,4265],{"class":3911,"line":54},[3909,4266,4267],{},"first_and_second_gifts['is_converted'] = first_and_second_gifts['months_lapsed'] \u003C= 12\n",[3909,4269,4270],{"class":3911,"line":3796},[3909,4271,4272],{},"grouped = first_and_second_gifts.groupby('first_gift_year').agg(total_new_donors=('is_converted', 'count'), second_gift_conversions=('is_converted', 'sum'))\n",[3909,4274,4275],{"class":3911,"line":3938},[3909,4276,4277],{},"grouped['conversion_rate'] = (grouped['second_gift_conversions'] \u002F grouped['total_new_donors']) * 100\n",[22,4279,4280],{},"Stable rates suggest no immediate alarm, but don't reveal multi-year trajectories.",[17,4282,4284],{"id":4283},"cohort-heatmaps-reveal-declining-longevity","Cohort Heatmaps Reveal Declining Longevity",[22,4286,4287],{},"Full cohort analysis groups by first-gift year (cohort_year), tracks retention as years elapsed (year_number) relative to original size. Year 1 retention improves from 27% (2016) to 34% (2023), but all cohorts drop sharply post-Year 1 (e.g., 2016: 27% → 15% → 10%), stabilizing low at 8-11%. Occasional upticks reflect lapsed-then-returning donors. Build via:",[3902,4289,4291],{"className":3904,"code":4290,"language":70,"meta":40,"style":40},"cohort_map = first_and_second_gifts['first_gift_year'].to_dict()\ndf_opps_filtered_summary = df_opps_filtered.groupby(['year', 'contact_id']).agg(total_amount=('amount', 'sum')).reset_index()\ndf_opps_filtered_summary['cohort_year'] = df_opps_filtered_summary['contact_id'].map(cohort_map)\ndf_opps_filtered_summary['year_number'] = df_opps_filtered_summary['year'] - df_opps_filtered_summary['cohort_year']\ncohort_counts = df_opps_filtered_summary.groupby(['cohort_year', 'year_number']).agg(retained_donors=('contact_id', 'count'), total_amount=('total_amount', 'sum')).reset_index()\ncohort_sizes = cohort_counts[cohort_counts['year_number']==0][['cohort_year', 'retained_donors']].rename(columns={'retained_donors': 'original_cohort_size'})\ndf_cohorts = cohort_counts.merge(cohort_sizes, on='cohort_year')\ndf_cohorts['retention_rate'] = df_cohorts['retained_donors'] \u002F df_cohorts['original_cohort_size']\n",[3664,4292,4293,4298,4303,4308,4313,4318,4323,4328],{"__ignoreMap":40},[3909,4294,4295],{"class":3911,"line":3912},[3909,4296,4297],{},"cohort_map = first_and_second_gifts['first_gift_year'].to_dict()\n",[3909,4299,4300],{"class":3911,"line":41},[3909,4301,4302],{},"df_opps_filtered_summary = df_opps_filtered.groupby(['year', 'contact_id']).agg(total_amount=('amount', 'sum')).reset_index()\n",[3909,4304,4305],{"class":3911,"line":55},[3909,4306,4307],{},"df_opps_filtered_summary['cohort_year'] = df_opps_filtered_summary['contact_id'].map(cohort_map)\n",[3909,4309,4310],{"class":3911,"line":54},[3909,4311,4312],{},"df_opps_filtered_summary['year_number'] = df_opps_filtered_summary['year'] - df_opps_filtered_summary['cohort_year']\n",[3909,4314,4315],{"class":3911,"line":3796},[3909,4316,4317],{},"cohort_counts = df_opps_filtered_summary.groupby(['cohort_year', 'year_number']).agg(retained_donors=('contact_id', 'count'), total_amount=('total_amount', 'sum')).reset_index()\n",[3909,4319,4320],{"class":3911,"line":3938},[3909,4321,4322],{},"cohort_sizes = cohort_counts[cohort_counts['year_number']==0][['cohort_year', 'retained_donors']].rename(columns={'retained_donors': 'original_cohort_size'})\n",[3909,4324,4325],{"class":3911,"line":3944},[3909,4326,4327],{},"df_cohorts = cohort_counts.merge(cohort_sizes, on='cohort_year')\n",[3909,4329,4330],{"class":3911,"line":3950},[3909,4331,4332],{},"df_cohorts['retention_rate'] = df_cohorts['retained_donors'] \u002F df_cohorts['original_cohort_size']\n",[22,4334,4335],{},"Visualize with seaborn heatmap (cohort_year rows, year_number columns, retention_rate values) to compare trajectories.",[17,4337,4339],{"id":4338},"revenue-mix-exposes-over-reliance-on-new-cohorts","Revenue Mix Exposes Over-Reliance on New Cohorts",[22,4341,4342,4343,4347,4348,4351,4352,4355,4356,4359],{},"In 2025, 75% revenue from 2024-2025 cohorts (each ",[4344,4345,4346],"del",{},"37-38%), while 2016-2019 cohorts contribute \u003C2% each despite loyalty. No major gift skew: average gifts similar across cohorts (","$500-700). Filter ",[3664,4349,4350],{},"df_cohorts[cohort_year + year_number == 2025]",", compute ",[3664,4353,4354],{},"pct_of_total = (total_amount \u002F total_2025_amt) * 100"," and ",[3664,4357,4358],{},"avg_gift = total_amount \u002F retained_donors",". This recency bias means no fallback depth—economic shocks could crater budgets, as older cohorts aren't scaling to stabilize base.",[4138,4361,4362],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":40,"searchDepth":41,"depth":41,"links":4364},[4365,4366,4367,4368],{"id":4183,"depth":41,"text":4184},{"id":4238,"depth":41,"text":4239},{"id":4283,"depth":41,"text":4284},{"id":4338,"depth":41,"text":4339},[47],{"content_references":4371,"triage":4392},[4372,4376,4379,4382,4385,4389],{"type":3791,"title":4373,"url":4374,"context":4375},"Benchmarking Project","https:\u002F\u002Fwww.benchmarkingproject.org\u002F","cited",{"type":3791,"title":4377,"url":4378,"context":4375},"Fundraisers face squeeze as donor pool shrinks","https:\u002F\u002Fwww.communitydirectors.com.au\u002Farticles\u002Ffundraisers-face-squeeze-as-donor-pool-shrinks#:~:text=While%20cautious%20about%20attributing%20donation,financial%20pressure%20on%20younger%20donors.",{"type":3791,"title":4380,"url":4381,"context":4375},"Donor retention first 90 days","https:\u002F\u002Ffandp.com.au\u002Fdonor-retention-first-90-days-406859\u002F#:~:text=metrics%20that%20matter:-,Second%20gift%20rate%20The%20most%20reliable%20predictor%20of%20long%2Dterm,of%20donor%20engagement%20and%20loyalty.",{"type":3791,"title":4383,"url":4384,"context":3789},"How to improve donor retention: data insights, trends & strategies for nonprofits","https:\u002F\u002Fdataro.io\u002Fblog\u002Fhow-to-improve-donor-retention-data-insights-trends-strategies-for-nonprofits",{"type":3791,"title":4386,"author":4387,"url":4388,"context":3789},"How I Built a Synthetic Charity Dataset That Behaves Like the Real Thing","Kay E.","https:\u002F\u002Fmedium.com\u002Fdata-and-beyond\u002Fhow-i-built-a-synthetic-charity-dataset-that-behaves-like-the-real-thing-f19af0cf548d",{"type":3791,"title":4390,"author":4387,"url":4391,"context":3789},"The Day My Synthetic Donors Didn’t Pass for Human","https:\u002F\u002Fmedium.com\u002Fdata-and-beyond\u002Fthe-day-my-synthetic-donors-didnt-pass-for-human-e67fb52f928f",{"relevance":55,"novelty":55,"quality":54,"actionability":55,"composite":4393,"reasoning":4394},3.25,"Category: Data Science & Visualization. The article discusses cohort analysis and donor retention, which is relevant to understanding data-driven decision-making in product strategy. It provides Python code snippets for analysis, but the focus is more on donor retention in a nonprofit context rather than directly applicable to building AI-powered products.","\u002Fsummaries\u002F4436e5e687a42c9f-cohort-analysis-exposes-donor-retention-risks-summary","2026-04-16 04:02:38","2026-04-19 01:22:24",{"title":4173,"description":40},{"loc":4395},"4436e5e687a42c9f","Data and Beyond","https:\u002F\u002Fmedium.com\u002Fdata-and-beyond\u002Fyour-retention-rate-is-lying-to-you-214ea371561f?source=rss----b680b860beb1---4","summaries\u002F4436e5e687a42c9f-cohort-analysis-exposes-donor-retention-risks-summary",[71,69,70,4405],"cohort-analysis","Rising aggregate retention (27% to 42%) hides leaky bathtub: 75% of 2025 revenue from 2024-2025 cohorts, with older cohorts contributing \u003C2% each, risking collapse without long-term base.",[4405],"GWJ4aTtuthac1xT3_2cS9UIMEViCl6fM9BgIdvnsVcQ"]