[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-0cdee908eb39d657-stream-parse-tasktrove-dataset-for-ai-task-insight-summary":3,"summaries-facets-categories":186,"summary-related-0cdee908eb39d657-stream-parse-tasktrove-dataset-for-ai-task-insight-summary":3771},{"id":4,"title":5,"ai":6,"body":13,"categories":146,"created_at":148,"date_modified":148,"description":140,"extension":149,"faq":148,"featured":150,"kicker_label":148,"meta":151,"navigation":168,"path":169,"published_at":170,"question":148,"scraped_at":171,"seo":172,"sitemap":173,"source_id":174,"source_name":175,"source_type":176,"source_url":177,"stem":178,"tags":179,"thumbnail_url":148,"tldr":183,"tweet":148,"unknown_tags":184,"__hash__":185},"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":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",9713,1943,26130,0.0028916,{"type":14,"value":15,"toc":139},"minimark",[16,21,78,85,89,96,110,114,121],[17,18,20],"h2",{"id":19},"build-streaming-parser-for-compressed-task-binaries","Build Streaming Parser for Compressed Task Binaries",[22,23,24,25,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65,66,69,70,73,74,77],"p",{},"Handle TaskTrove's ",[26,27,28],"code",{},"task_binary"," fields—gzip-compressed blobs up to p95= some KB—without downloading the full dataset by using ",[26,31,32],{},"datasets.load_dataset(..., streaming=True)",". Convert blobs to bytes via ",[26,35,36],{},"to_bytes()"," which decodes base64 strings or lists. Decompress if gzip header (",[26,39,40],{},"b'\\x1f\\x8b'","), then auto-detect format in ",[26,43,44],{},"parse_task()",": prioritize ",[26,47,48],{},"tarfile.open()"," for archives (extract files as str\u002Fbytes), fall back to ",[26,51,52],{},"ZipFile",", then ",[26,55,56],{},"json.loads()"," (or JSONL line-by-line), plain text decode, or binary. This yields dicts with ",[26,59,60],{},"format",", ",[26,63,64],{},"files"," (for archives), ",[26,67,68],{},"content",", plus ",[26,71,72],{},"raw_size","\u002F",[26,75,76],{},"compressed_size",". Example: first sample decompresses from compressed bytes to raw, revealing tar with JSON metadata and .py code files.",[22,79,80,81,84],{},"Use ",[26,82,83],{},"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,86,88],{"id":87},"uncover-dataset-structure-via-counters-and-plots","Uncover Dataset Structure via Counters and Plots",[22,90,91,92,95],{},"Extract source from ",[26,93,94],{},"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,97,98,99,102,103,61,106,109],{},"Aggregate in ",[26,100,101],{},"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 ",[26,104,105],{},"source",[26,107,108],{},"is_verified",", sizes, instruction preview for downstream modeling.",[17,111,113],{"id":112},"detect-verifiers-and-export-rl-ready-tasks","Detect Verifiers and Export RL-Ready Tasks",[22,115,116,117,120],{},"Flag evaluation-ready tasks with ",[26,118,119],{},"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,122,123,126,127,130,131,134,135,138],{},[26,124,125],{},"TaskTroveExplorer"," class unifies: ",[26,128,129],{},"iter()"," filters sources, ",[26,132,133],{},"sample(n=5)"," parses + adds metadata, ",[26,136,137],{},"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":140,"searchDepth":141,"depth":141,"links":142},"",2,[143,144,145],{"id":19,"depth":141,"text":20},{"id":87,"depth":141,"text":88},{"id":112,"depth":141,"text":113},[147],"Data Science & Visualization",null,"md",false,{"content_references":152,"triage":163},[153,158],{"type":154,"title":155,"url":156,"context":157},"dataset","TaskTrove","https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fopen-thoughts\u002FTaskTrove","mentioned",{"type":159,"title":160,"url":161,"context":162},"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":164,"novelty":165,"quality":165,"actionability":165,"composite":166,"reasoning":167},5,4,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.",true,"\u002Fsummaries\u002F0cdee908eb39d657-stream-parse-tasktrove-dataset-for-ai-task-insight-summary","2026-05-03 21:26:42","2026-05-04 16:13:43",{"title":5,"description":140},{"loc":169},"0cdee908eb39d657","MarkTechPost","article","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",[180,181,182],"python","data-science","data-visualization","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",[187,190,193,196,199,202,204,206,208,210,212,214,217,219,221,223,225,227,229,231,233,235,238,240,242,244,247,249,251,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,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,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,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769],{"categories":188},[189],"Developer Productivity",{"categories":191},[192],"Business & SaaS",{"categories":194},[195],"AI & LLMs",{"categories":197},[198],"AI Automation",{"categories":200},[201],"Product Strategy",{"categories":203},[195],{"categories":205},[189],{"categories":207},[192],{"categories":209},[],{"categories":211},[195],{"categories":213},[],{"categories":215},[216],"AI News & Trends",{"categories":218},[198],{"categories":220},[216],{"categories":222},[198],{"categories":224},[198],{"categories":226},[195],{"categories":228},[195],{"categories":230},[216],{"categories":232},[195],{"categories":234},[],{"categories":236},[237],"Design & Frontend",{"categories":239},[147],{"categories":241},[216],{"categories":243},[],{"categories":245},[246],"Software Engineering",{"categories":248},[195],{"categories":250},[198],{"categories":252},[253],"Marketing & Growth",{"categories":255},[195],{"categories":257},[198],{"categories":259},[],{"categories":261},[],{"categories":263},[237],{"categories":265},[198],{"categories":267},[189],{"categories":269},[237],{"categories":271},[195],{"categories":273},[198],{"categories":275},[216],{"categories":277},[],{"categories":279},[],{"categories":281},[198],{"categories":283},[246],{"categories":285},[],{"categories":287},[192],{"categories":289},[],{"categories":291},[],{"categories":293},[198],{"categories":295},[198],{"categories":297},[195],{"categories":299},[],{"categories":301},[246],{"categories":303},[],{"categories":305},[],{"categories":307},[],{"categories":309},[195],{"categories":311},[253],{"categories":313},[237],{"categories":315},[237],{"categories":317},[195],{"categories":319},[198],{"categories":321},[195],{"categories":323},[195],{"categories":325},[198],{"categories":327},[198],{"categories":329},[147],{"categories":331},[216],{"categories":333},[198],{"categories":335},[253],{"categories":337},[198],{"categories":339},[201],{"categories":341},[],{"categories":343},[198],{"categories":345},[],{"categories":347},[198],{"categories":349},[246],{"categories":351},[237],{"categories":353},[195],{"categories":355},[],{"categories":357},[],{"categories":359},[198],{"categories":361},[],{"categories":363},[195],{"categories":365},[],{"categories":367},[189],{"categories":369},[246],{"categories":371},[192],{"categories":373},[216],{"categories":375},[195],{"categories":377},[],{"categories":379},[195],{"categories":381},[],{"categories":383},[246],{"categories":385},[147],{"categories":387},[],{"categories":389},[195],{"categories":391},[237],{"categories":393},[],{"categories":395},[237],{"categories":397},[198],{"categories":399},[],{"categories":401},[198],{"categories":403},[216],{"categories":405},[192],{"categories":407},[195],{"categories":409},[],{"categories":411},[198],{"categories":413},[195],{"categories":415},[201],{"categories":417},[],{"categories":419},[195],{"categories":421},[198],{"categories":423},[198],{"categories":425},[],{"categories":427},[147],{"categories":429},[195],{"categories":431},[],{"categories":433},[189],{"categories":435},[192],{"categories":437},[195],{"categories":439},[198],{"categories":441},[246],{"categories":443},[195],{"categories":445},[],{"categories":447},[],{"categories":449},[195],{"categories":451},[],{"categories":453},[237],{"categories":455},[],{"categories":457},[195],{"categories":459},[],{"categories":461},[198],{"categories":463},[195],{"categories":465},[237],{"categories":467},[],{"categories":469},[195],{"categories":471},[195],{"categories":473},[192],{"categories":475},[198],{"categories":477},[195],{"categories":479},[237],{"categories":481},[198],{"categories":483},[],{"categories":485},[],{"categories":487},[216],{"categories":489},[],{"categories":491},[195],{"categories":493},[192,253],{"categories":495},[],{"categories":497},[195],{"categories":499},[],{"categories":501},[],{"categories":503},[195],{"categories":505},[],{"categories":507},[195],{"categories":509},[510],"DevOps & Cloud",{"categories":512},[],{"categories":514},[216],{"categories":516},[237],{"categories":518},[],{"categories":520},[216],{"categories":522},[216],{"categories":524},[195],{"categories":526},[253],{"categories":528},[],{"categories":530},[192],{"categories":532},[],{"categories":534},[195,510],{"categories":536},[195],{"categories":538},[195],{"categories":540},[198],{"categories":542},[195,246],{"categories":544},[147],{"categories":546},[195],{"categories":548},[253],{"categories":550},[198],{"categories":552},[198],{"categories":554},[],{"categories":556},[198],{"categories":558},[195,192],{"categories":560},[],{"categories":562},[237],{"categories":564},[237],{"categories":566},[],{"categories":568},[],{"categories":570},[216],{"categories":572},[],{"categories":574},[189],{"categories":576},[246],{"categories":578},[195],{"categories":580},[237],{"categories":582},[198],{"categories":584},[246],{"categories":586},[216],{"categories":588},[237],{"categories":590},[],{"categories":592},[195],{"categories":594},[195],{"categories":596},[195],{"categories":598},[216],{"categories":600},[189],{"categories":602},[195],{"categories":604},[198],{"categories":606},[510],{"categories":608},[237],{"categories":610},[198],{"categories":612},[],{"categories":614},[],{"categories":616},[237],{"categories":618},[216],{"categories":620},[147],{"categories":622},[],{"categories":624},[195],{"categories":626},[195],{"categories":628},[192],{"categories":630},[195],{"categories":632},[195],{"categories":634},[216],{"categories":636},[],{"categories":638},[198],{"categories":640},[246],{"categories":642},[],{"categories":644},[195],{"categories":646},[195],{"categories":648},[198],{"categories":650},[],{"categories":652},[],{"categories":654},[195],{"categories":656},[],{"categories":658},[192],{"categories":660},[198],{"categories":662},[],{"categories":664},[189],{"categories":666},[195],{"categories":668},[192],{"categories":670},[216],{"categories":672},[],{"categories":674},[],{"categories":676},[],{"categories":678},[216],{"categories":680},[216],{"categories":682},[],{"categories":684},[],{"categories":686},[192],{"categories":688},[],{"categories":690},[],{"categories":692},[189],{"categories":694},[],{"categories":696},[253],{"categories":698},[198],{"categories":700},[192],{"categories":702},[198],{"categories":704},[246],{"categories":706},[],{"categories":708},[201],{"categories":710},[237],{"categories":712},[246],{"categories":714},[195],{"categories":716},[198],{"categories":718},[192],{"categories":720},[195],{"categories":722},[],{"categories":724},[],{"categories":726},[246],{"categories":728},[147],{"categories":730},[201],{"categories":732},[198],{"categories":734},[195],{"categories":736},[],{"categories":738},[510],{"categories":740},[],{"categories":742},[198],{"categories":744},[],{"categories":746},[],{"categories":748},[195],{"categories":750},[237],{"categories":752},[253],{"categories":754},[198],{"categories":756},[],{"categories":758},[189],{"categories":760},[],{"categories":762},[216],{"categories":764},[195,510],{"categories":766},[216],{"categories":768},[195],{"categories":770},[192],{"categories":772},[195],{"categories":774},[],{"categories":776},[192],{"categories":778},[],{"categories":780},[246],{"categories":782},[237],{"categories":784},[216],{"categories":786},[147],{"categories":788},[189],{"categories":790},[195],{"categories":792},[246],{"categories":794},[],{"categories":796},[],{"categories":798},[201],{"categories":800},[],{"categories":802},[195],{"categories":804},[],{"categories":806},[237],{"categories":808},[237],{"categories":810},[237],{"categories":812},[],{"categories":814},[],{"categories":816},[216],{"categories":818},[198],{"categories":820},[195],{"categories":822},[195],{"categories":824},[195],{"categories":826},[192],{"categories":828},[195],{"categories":830},[],{"categories":832},[246],{"categories":834},[246],{"categories":836},[192],{"categories":838},[],{"categories":840},[195],{"categories":842},[195],{"categories":844},[192],{"categories":846},[216],{"categories":848},[253],{"categories":850},[198],{"categories":852},[],{"categories":854},[237],{"categories":856},[],{"categories":858},[195],{"categories":860},[],{"categories":862},[192],{"categories":864},[198],{"categories":866},[],{"categories":868},[510],{"categories":870},[147],{"categories":872},[246],{"categories":874},[253],{"categories":876},[246],{"categories":878},[198],{"categories":880},[],{"categories":882},[],{"categories":884},[198],{"categories":886},[189],{"categories":888},[198],{"categories":890},[201],{"categories":892},[192],{"categories":894},[],{"categories":896},[195],{"categories":898},[201],{"categories":900},[195],{"categories":902},[195],{"categories":904},[253],{"categories":906},[237],{"categories":908},[198],{"categories":910},[],{"categories":912},[],{"categories":914},[510],{"categories":916},[246],{"categories":918},[],{"categories":920},[198],{"categories":922},[195],{"categories":924},[237,195],{"categories":926},[189],{"categories":928},[],{"categories":930},[195],{"categories":932},[189],{"categories":934},[237],{"categories":936},[198],{"categories":938},[246],{"categories":940},[],{"categories":942},[195],{"categories":944},[],{"categories":946},[189],{"categories":948},[],{"categories":950},[198],{"categories":952},[201],{"categories":954},[195],{"categories":956},[195],{"categories":958},[237],{"categories":960},[198],{"categories":962},[510],{"categories":964},[237],{"categories":966},[198],{"categories":968},[195],{"categories":970},[195],{"categories":972},[195],{"categories":974},[216],{"categories":976},[],{"categories":978},[201],{"categories":980},[198],{"categories":982},[237],{"categories":984},[198],{"categories":986},[246],{"categories":988},[237],{"categories":990},[198],{"categories":992},[216],{"categories":994},[],{"categories":996},[195],{"categories":998},[237],{"categories":1000},[195],{"categories":1002},[189],{"categories":1004},[216],{"categories":1006},[195],{"categories":1008},[253],{"categories":1010},[195],{"categories":1012},[195],{"categories":1014},[198],{"categories":1016},[198],{"categories":1018},[195],{"categories":1020},[198],{"categories":1022},[237],{"categories":1024},[195],{"categories":1026},[],{"categories":1028},[],{"categories":1030},[246],{"categories":1032},[],{"categories":1034},[189],{"categories":1036},[510],{"categories":1038},[],{"categories":1040},[189],{"categories":1042},[192],{"categories":1044},[253],{"categories":1046},[],{"categories":1048},[192],{"categories":1050},[],{"categories":1052},[],{"categories":1054},[],{"categories":1056},[],{"categories":1058},[],{"categories":1060},[195],{"categories":1062},[198],{"categories":1064},[510],{"categories":1066},[189],{"categories":1068},[195],{"categories":1070},[246],{"categories":1072},[201],{"categories":1074},[195],{"categories":1076},[253],{"categories":1078},[195],{"categories":1080},[195],{"categories":1082},[195],{"categories":1084},[195,189],{"categories":1086},[246],{"categories":1088},[246],{"categories":1090},[237],{"categories":1092},[195],{"categories":1094},[],{"categories":1096},[],{"categories":1098},[],{"categories":1100},[246],{"categories":1102},[147],{"categories":1104},[216],{"categories":1106},[237],{"categories":1108},[],{"categories":1110},[195],{"categories":1112},[195],{"categories":1114},[],{"categories":1116},[],{"categories":1118},[198],{"categories":1120},[195],{"categories":1122},[192],{"categories":1124},[],{"categories":1126},[189],{"categories":1128},[195],{"categories":1130},[189],{"categories":1132},[195],{"categories":1134},[246],{"categories":1136},[253],{"categories":1138},[195,237],{"categories":1140},[216],{"categories":1142},[237],{"categories":1144},[],{"categories":1146},[510],{"categories":1148},[237],{"categories":1150},[198],{"categories":1152},[],{"categories":1154},[],{"categories":1156},[],{"categories":1158},[],{"categories":1160},[246],{"categories":1162},[198],{"categories":1164},[198],{"categories":1166},[510],{"categories":1168},[195],{"categories":1170},[195],{"categories":1172},[195],{"categories":1174},[],{"categories":1176},[237],{"categories":1178},[],{"categories":1180},[],{"categories":1182},[198],{"categories":1184},[],{"categories":1186},[],{"categories":1188},[253],{"categories":1190},[253],{"categories":1192},[198],{"categories":1194},[],{"categories":1196},[195],{"categories":1198},[195],{"categories":1200},[246],{"categories":1202},[237],{"categories":1204},[237],{"categories":1206},[198],{"categories":1208},[189],{"categories":1210},[195],{"categories":1212},[237],{"categories":1214},[237],{"categories":1216},[198],{"categories":1218},[198],{"categories":1220},[195],{"categories":1222},[],{"categories":1224},[],{"categories":1226},[195],{"categories":1228},[198],{"categories":1230},[216],{"categories":1232},[246],{"categories":1234},[189],{"categories":1236},[195],{"categories":1238},[],{"categories":1240},[198],{"categories":1242},[198],{"categories":1244},[],{"categories":1246},[189],{"categories":1248},[195],{"categories":1250},[189],{"categories":1252},[189],{"categories":1254},[],{"categories":1256},[],{"categories":1258},[198],{"categories":1260},[198],{"categories":1262},[195],{"categories":1264},[195],{"categories":1266},[216],{"categories":1268},[147],{"categories":1270},[201],{"categories":1272},[216],{"categories":1274},[237],{"categories":1276},[],{"categories":1278},[216],{"categories":1280},[],{"categories":1282},[],{"categories":1284},[],{"categories":1286},[],{"categories":1288},[246],{"categories":1290},[147],{"categories":1292},[],{"categories":1294},[195],{"categories":1296},[195],{"categories":1298},[147],{"categories":1300},[246],{"categories":1302},[],{"categories":1304},[],{"categories":1306},[198],{"categories":1308},[216],{"categories":1310},[216],{"categories":1312},[198],{"categories":1314},[189],{"categories":1316},[195,510],{"categories":1318},[],{"categories":1320},[237],{"categories":1322},[189],{"categories":1324},[198],{"categories":1326},[237],{"categories":1328},[],{"categories":1330},[198],{"categories":1332},[198],{"categories":1334},[195],{"categories":1336},[253],{"categories":1338},[246],{"categories":1340},[237],{"categories":1342},[],{"categories":1344},[198],{"categories":1346},[195],{"categories":1348},[198],{"categories":1350},[198],{"categories":1352},[198],{"categories":1354},[253],{"categories":1356},[198],{"categories":1358},[195],{"categories":1360},[],{"categories":1362},[253],{"categories":1364},[216],{"categories":1366},[198],{"categories":1368},[],{"categories":1370},[],{"categories":1372},[195],{"categories":1374},[198],{"categories":1376},[216],{"categories":1378},[198],{"categories":1380},[],{"categories":1382},[],{"categories":1384},[],{"categories":1386},[198],{"categories":1388},[],{"categories":1390},[],{"categories":1392},[147],{"categories":1394},[195],{"categories":1396},[147],{"categories":1398},[216],{"categories":1400},[195],{"categories":1402},[195],{"categories":1404},[198],{"categories":1406},[195],{"categories":1408},[],{"categories":1410},[],{"categories":1412},[510],{"categories":1414},[],{"categories":1416},[],{"categories":1418},[189],{"categories":1420},[],{"categories":1422},[],{"categories":1424},[],{"categories":1426},[],{"categories":1428},[246],{"categories":1430},[216],{"categories":1432},[253],{"categories":1434},[192],{"categories":1436},[195],{"categories":1438},[195],{"categories":1440},[192],{"categories":1442},[],{"categories":1444},[237],{"categories":1446},[198],{"categories":1448},[192],{"categories":1450},[195],{"categories":1452},[195],{"categories":1454},[189],{"categories":1456},[],{"categories":1458},[189],{"categories":1460},[195],{"categories":1462},[253],{"categories":1464},[198],{"categories":1466},[216],{"categories":1468},[192],{"categories":1470},[195],{"categories":1472},[198],{"categories":1474},[],{"categories":1476},[195],{"categories":1478},[189],{"categories":1480},[195],{"categories":1482},[],{"categories":1484},[216],{"categories":1486},[195],{"categories":1488},[],{"categories":1490},[192],{"categories":1492},[195],{"categories":1494},[],{"categories":1496},[],{"categories":1498},[],{"categories":1500},[195],{"categories":1502},[],{"categories":1504},[510],{"categories":1506},[195],{"categories":1508},[],{"categories":1510},[195],{"categories":1512},[195],{"categories":1514},[195],{"categories":1516},[195,510],{"categories":1518},[195],{"categories":1520},[195],{"categories":1522},[237],{"categories":1524},[198],{"categories":1526},[],{"categories":1528},[198],{"categories":1530},[195],{"categories":1532},[195],{"categories":1534},[195],{"categories":1536},[189],{"categories":1538},[189],{"categories":1540},[246],{"categories":1542},[237],{"categories":1544},[198],{"categories":1546},[],{"categories":1548},[195],{"categories":1550},[216],{"categories":1552},[195],{"categories":1554},[192],{"categories":1556},[],{"categories":1558},[510],{"categories":1560},[237],{"categories":1562},[237],{"categories":1564},[198],{"categories":1566},[216],{"categories":1568},[198],{"categories":1570},[195],{"categories":1572},[],{"categories":1574},[195],{"categories":1576},[],{"categories":1578},[],{"categories":1580},[195],{"categories":1582},[195],{"categories":1584},[195],{"categories":1586},[198],{"categories":1588},[195],{"categories":1590},[],{"categories":1592},[147],{"categories":1594},[198],{"categories":1596},[],{"categories":1598},[],{"categories":1600},[195],{"categories":1602},[216],{"categories":1604},[],{"categories":1606},[237],{"categories":1608},[510],{"categories":1610},[216],{"categories":1612},[246],{"categories":1614},[246],{"categories":1616},[216],{"categories":1618},[216],{"categories":1620},[510],{"categories":1622},[],{"categories":1624},[216],{"categories":1626},[195],{"categories":1628},[189],{"categories":1630},[216],{"categories":1632},[],{"categories":1634},[147],{"categories":1636},[216],{"categories":1638},[246],{"categories":1640},[216],{"categories":1642},[510],{"categories":1644},[195],{"categories":1646},[195],{"categories":1648},[],{"categories":1650},[192],{"categories":1652},[],{"categories":1654},[],{"categories":1656},[195],{"categories":1658},[195],{"categories":1660},[195],{"categories":1662},[195],{"categories":1664},[],{"categories":1666},[147],{"categories":1668},[189],{"categories":1670},[],{"categories":1672},[195],{"categories":1674},[195],{"categories":1676},[510],{"categories":1678},[510],{"categories":1680},[],{"categories":1682},[198],{"categories":1684},[216],{"categories":1686},[216],{"categories":1688},[195],{"categories":1690},[198],{"categories":1692},[],{"categories":1694},[237],{"categories":1696},[195],{"categories":1698},[195],{"categories":1700},[],{"categories":1702},[],{"categories":1704},[510],{"categories":1706},[195],{"categories":1708},[246],{"categories":1710},[192],{"categories":1712},[195],{"categories":1714},[],{"categories":1716},[198],{"categories":1718},[189],{"categories":1720},[189],{"categories":1722},[],{"categories":1724},[195],{"categories":1726},[237],{"categories":1728},[198],{"categories":1730},[],{"categories":1732},[195],{"categories":1734},[195],{"categories":1736},[198],{"categories":1738},[],{"categories":1740},[198],{"categories":1742},[246],{"categories":1744},[],{"categories":1746},[195],{"categories":1748},[],{"categories":1750},[195],{"categories":1752},[],{"categories":1754},[195],{"categories":1756},[195],{"categories":1758},[],{"categories":1760},[195],{"categories":1762},[216],{"categories":1764},[195],{"categories":1766},[195],{"categories":1768},[189],{"categories":1770},[195],{"categories":1772},[216],{"categories":1774},[198],{"categories":1776},[],{"categories":1778},[195],{"categories":1780},[253],{"categories":1782},[],{"categories":1784},[],{"categories":1786},[],{"categories":1788},[189],{"categories":1790},[216],{"categories":1792},[198],{"categories":1794},[195],{"categories":1796},[237],{"categories":1798},[198],{"categories":1800},[],{"categories":1802},[198],{"categories":1804},[],{"categories":1806},[195],{"categories":1808},[198],{"categories":1810},[195],{"categories":1812},[],{"categories":1814},[195],{"categories":1816},[195],{"categories":1818},[216],{"categories":1820},[237],{"categories":1822},[198],{"categories":1824},[237],{"categories":1826},[192],{"categories":1828},[],{"categories":1830},[],{"categories":1832},[195],{"categories":1834},[189],{"categories":1836},[216],{"categories":1838},[],{"categories":1840},[],{"categories":1842},[246],{"categories":1844},[237],{"categories":1846},[],{"categories":1848},[195],{"categories":1850},[],{"categories":1852},[253],{"categories":1854},[195],{"categories":1856},[510],{"categories":1858},[246],{"categories":1860},[],{"categories":1862},[198],{"categories":1864},[195],{"categories":1866},[198],{"categories":1868},[198],{"categories":1870},[195],{"categories":1872},[],{"categories":1874},[189],{"categories":1876},[195],{"categories":1878},[192],{"categories":1880},[246],{"categories":1882},[237],{"categories":1884},[],{"categories":1886},[],{"categories":1888},[],{"categories":1890},[198],{"categories":1892},[237],{"categories":1894},[216],{"categories":1896},[195],{"categories":1898},[216],{"categories":1900},[237],{"categories":1902},[],{"categories":1904},[237],{"categories":1906},[216],{"categories":1908},[192],{"categories":1910},[195],{"categories":1912},[216],{"categories":1914},[253],{"categories":1916},[],{"categories":1918},[],{"categories":1920},[147],{"categories":1922},[195,246],{"categories":1924},[216],{"categories":1926},[195],{"categories":1928},[198],{"categories":1930},[198],{"categories":1932},[195],{"categories":1934},[],{"categories":1936},[246],{"categories":1938},[195],{"categories":1940},[147],{"categories":1942},[198],{"categories":1944},[253],{"categories":1946},[510],{"categories":1948},[],{"categories":1950},[189],{"categories":1952},[198],{"categories":1954},[198],{"categories":1956},[246],{"categories":1958},[195],{"categories":1960},[195],{"categories":1962},[],{"categories":1964},[],{"categories":1966},[],{"categories":1968},[510],{"categories":1970},[216],{"categories":1972},[195],{"categories":1974},[195],{"categories":1976},[195],{"categories":1978},[],{"categories":1980},[147],{"categories":1982},[192],{"categories":1984},[],{"categories":1986},[198],{"categories":1988},[510],{"categories":1990},[],{"categories":1992},[237],{"categories":1994},[237],{"categories":1996},[],{"categories":1998},[246],{"categories":2000},[237],{"categories":2002},[195],{"categories":2004},[],{"categories":2006},[216],{"categories":2008},[195],{"categories":2010},[237],{"categories":2012},[198],{"categories":2014},[216],{"categories":2016},[],{"categories":2018},[198],{"categories":2020},[237],{"categories":2022},[195],{"categories":2024},[],{"categories":2026},[195],{"categories":2028},[195],{"categories":2030},[510],{"categories":2032},[216],{"categories":2034},[147],{"categories":2036},[147],{"categories":2038},[],{"categories":2040},[],{"categories":2042},[],{"categories":2044},[198],{"categories":2046},[246],{"categories":2048},[246],{"categories":2050},[],{"categories":2052},[],{"categories":2054},[195],{"categories":2056},[],{"categories":2058},[198],{"categories":2060},[195],{"categories":2062},[],{"categories":2064},[195],{"categories":2066},[192],{"categories":2068},[195],{"categories":2070},[253],{"categories":2072},[198],{"categories":2074},[195],{"categories":2076},[246],{"categories":2078},[216],{"categories":2080},[198],{"categories":2082},[],{"categories":2084},[216],{"categories":2086},[198],{"categories":2088},[198],{"categories":2090},[],{"categories":2092},[192],{"categories":2094},[198],{"categories":2096},[],{"categories":2098},[195],{"categories":2100},[189],{"categories":2102},[216],{"categories":2104},[510],{"categories":2106},[198],{"categories":2108},[198],{"categories":2110},[189],{"categories":2112},[195],{"categories":2114},[],{"categories":2116},[],{"categories":2118},[237],{"categories":2120},[195,192],{"categories":2122},[],{"categories":2124},[189],{"categories":2126},[147],{"categories":2128},[195],{"categories":2130},[246],{"categories":2132},[195],{"categories":2134},[198],{"categories":2136},[195],{"categories":2138},[195],{"categories":2140},[216],{"categories":2142},[198],{"categories":2144},[],{"categories":2146},[],{"categories":2148},[198],{"categories":2150},[195],{"categories":2152},[510],{"categories":2154},[],{"categories":2156},[195],{"categories":2158},[198],{"categories":2160},[],{"categories":2162},[195],{"categories":2164},[253],{"categories":2166},[147],{"categories":2168},[198],{"categories":2170},[195],{"categories":2172},[510],{"categories":2174},[],{"categories":2176},[195],{"categories":2178},[253],{"categories":2180},[237],{"categories":2182},[195],{"categories":2184},[],{"categories":2186},[253],{"categories":2188},[216],{"categories":2190},[195],{"categories":2192},[195],{"categories":2194},[189],{"categories":2196},[],{"categories":2198},[],{"categories":2200},[237],{"categories":2202},[195],{"categories":2204},[147],{"categories":2206},[253],{"categories":2208},[253],{"categories":2210},[216],{"categories":2212},[],{"categories":2214},[],{"categories":2216},[195],{"categories":2218},[],{"categories":2220},[195,246],{"categories":2222},[216],{"categories":2224},[198],{"categories":2226},[246],{"categories":2228},[195],{"categories":2230},[189],{"categories":2232},[],{"categories":2234},[],{"categories":2236},[189],{"categories":2238},[253],{"categories":2240},[195],{"categories":2242},[],{"categories":2244},[237,195],{"categories":2246},[510],{"categories":2248},[189],{"categories":2250},[],{"categories":2252},[192],{"categories":2254},[192],{"categories":2256},[195],{"categories":2258},[246],{"categories":2260},[198],{"categories":2262},[216],{"categories":2264},[253],{"categories":2266},[237],{"categories":2268},[195],{"categories":2270},[195],{"categories":2272},[195],{"categories":2274},[189],{"categories":2276},[195],{"categories":2278},[198],{"categories":2280},[216],{"categories":2282},[],{"categories":2284},[],{"categories":2286},[147],{"categories":2288},[246],{"categories":2290},[195],{"categories":2292},[237],{"categories":2294},[147],{"categories":2296},[195],{"categories":2298},[195],{"categories":2300},[198],{"categories":2302},[198],{"categories":2304},[195,192],{"categories":2306},[],{"categories":2308},[237],{"categories":2310},[],{"categories":2312},[195],{"categories":2314},[216],{"categories":2316},[189],{"categories":2318},[189],{"categories":2320},[198],{"categories":2322},[195],{"categories":2324},[192],{"categories":2326},[246],{"categories":2328},[253],{"categories":2330},[],{"categories":2332},[216],{"categories":2334},[195],{"categories":2336},[195],{"categories":2338},[216],{"categories":2340},[246],{"categories":2342},[195],{"categories":2344},[198],{"categories":2346},[216],{"categories":2348},[195],{"categories":2350},[237],{"categories":2352},[195],{"categories":2354},[195],{"categories":2356},[510],{"categories":2358},[201],{"categories":2360},[198],{"categories":2362},[195],{"categories":2364},[216],{"categories":2366},[198],{"categories":2368},[253],{"categories":2370},[195],{"categories":2372},[],{"categories":2374},[195],{"categories":2376},[],{"categories":2378},[],{"categories":2380},[],{"categories":2382},[192],{"categories":2384},[195],{"categories":2386},[198],{"categories":2388},[216],{"categories":2390},[216],{"categories":2392},[216],{"categories":2394},[216],{"categories":2396},[],{"categories":2398},[189],{"categories":2400},[198],{"categories":2402},[216],{"categories":2404},[189],{"categories":2406},[198],{"categories":2408},[195],{"categories":2410},[195,198],{"categories":2412},[198],{"categories":2414},[510],{"categories":2416},[216],{"categories":2418},[216],{"categories":2420},[198],{"categories":2422},[195],{"categories":2424},[],{"categories":2426},[216],{"categories":2428},[253],{"categories":2430},[189],{"categories":2432},[195],{"categories":2434},[195],{"categories":2436},[],{"categories":2438},[246],{"categories":2440},[],{"categories":2442},[189],{"categories":2444},[198],{"categories":2446},[216],{"categories":2448},[195],{"categories":2450},[216],{"categories":2452},[189],{"categories":2454},[216],{"categories":2456},[216],{"categories":2458},[],{"categories":2460},[192],{"categories":2462},[198],{"categories":2464},[216],{"categories":2466},[216],{"categories":2468},[216],{"categories":2470},[216],{"categories":2472},[216],{"categories":2474},[216],{"categories":2476},[216],{"categories":2478},[216],{"categories":2480},[216],{"categories":2482},[216],{"categories":2484},[147],{"categories":2486},[189],{"categories":2488},[195],{"categories":2490},[195],{"categories":2492},[],{"categories":2494},[195,189],{"categories":2496},[],{"categories":2498},[198],{"categories":2500},[216],{"categories":2502},[198],{"categories":2504},[195],{"categories":2506},[195],{"categories":2508},[195],{"categories":2510},[195],{"categories":2512},[195],{"categories":2514},[198],{"categories":2516},[192],{"categories":2518},[237],{"categories":2520},[216],{"categories":2522},[195],{"categories":2524},[],{"categories":2526},[],{"categories":2528},[198],{"categories":2530},[237],{"categories":2532},[195],{"categories":2534},[],{"categories":2536},[],{"categories":2538},[253],{"categories":2540},[195],{"categories":2542},[],{"categories":2544},[],{"categories":2546},[189],{"categories":2548},[192],{"categories":2550},[195],{"categories":2552},[192],{"categories":2554},[237],{"categories":2556},[],{"categories":2558},[216],{"categories":2560},[],{"categories":2562},[237],{"categories":2564},[195],{"categories":2566},[253],{"categories":2568},[],{"categories":2570},[253],{"categories":2572},[],{"categories":2574},[],{"categories":2576},[198],{"categories":2578},[],{"categories":2580},[192],{"categories":2582},[189],{"categories":2584},[237],{"categories":2586},[246],{"categories":2588},[],{"categories":2590},[],{"categories":2592},[195],{"categories":2594},[189],{"categories":2596},[253],{"categories":2598},[],{"categories":2600},[198],{"categories":2602},[198],{"categories":2604},[216],{"categories":2606},[195],{"categories":2608},[198],{"categories":2610},[195],{"categories":2612},[198],{"categories":2614},[195],{"categories":2616},[201],{"categories":2618},[216],{"categories":2620},[],{"categories":2622},[253],{"categories":2624},[246],{"categories":2626},[198],{"categories":2628},[],{"categories":2630},[195],{"categories":2632},[198],{"categories":2634},[192],{"categories":2636},[189],{"categories":2638},[195],{"categories":2640},[237],{"categories":2642},[246],{"categories":2644},[246],{"categories":2646},[195],{"categories":2648},[147],{"categories":2650},[195],{"categories":2652},[198],{"categories":2654},[192],{"categories":2656},[198],{"categories":2658},[195],{"categories":2660},[195],{"categories":2662},[198],{"categories":2664},[216],{"categories":2666},[],{"categories":2668},[189],{"categories":2670},[195],{"categories":2672},[198],{"categories":2674},[195],{"categories":2676},[195],{"categories":2678},[],{"categories":2680},[237],{"categories":2682},[192],{"categories":2684},[216],{"categories":2686},[195],{"categories":2688},[195],{"categories":2690},[237],{"categories":2692},[253],{"categories":2694},[147],{"categories":2696},[195],{"categories":2698},[216],{"categories":2700},[195],{"categories":2702},[198],{"categories":2704},[510],{"categories":2706},[195],{"categories":2708},[198],{"categories":2710},[147],{"categories":2712},[],{"categories":2714},[198],{"categories":2716},[246],{"categories":2718},[237],{"categories":2720},[195],{"categories":2722},[189],{"categories":2724},[192],{"categories":2726},[246],{"categories":2728},[],{"categories":2730},[198],{"categories":2732},[195],{"categories":2734},[],{"categories":2736},[216],{"categories":2738},[],{"categories":2740},[216],{"categories":2742},[195],{"categories":2744},[198],{"categories":2746},[198],{"categories":2748},[198],{"categories":2750},[],{"categories":2752},[],{"categories":2754},[195],{"categories":2756},[195],{"categories":2758},[],{"categories":2760},[237],{"categories":2762},[198],{"categories":2764},[253],{"categories":2766},[189],{"categories":2768},[],{"categories":2770},[],{"categories":2772},[216],{"categories":2774},[246],{"categories":2776},[195],{"categories":2778},[195],{"categories":2780},[195],{"categories":2782},[246],{"categories":2784},[216],{"categories":2786},[237],{"categories":2788},[195],{"categories":2790},[195],{"categories":2792},[195],{"categories":2794},[216],{"categories":2796},[195],{"categories":2798},[216],{"categories":2800},[198],{"categories":2802},[198],{"categories":2804},[246],{"categories":2806},[198],{"categories":2808},[195],{"categories":2810},[246],{"categories":2812},[237],{"categories":2814},[],{"categories":2816},[198],{"categories":2818},[],{"categories":2820},[],{"categories":2822},[],{"categories":2824},[192],{"categories":2826},[195],{"categories":2828},[198],{"categories":2830},[189],{"categories":2832},[198],{"categories":2834},[253],{"categories":2836},[],{"categories":2838},[198],{"categories":2840},[],{"categories":2842},[189],{"categories":2844},[198],{"categories":2846},[],{"categories":2848},[198],{"categories":2850},[195],{"categories":2852},[216],{"categories":2854},[195],{"categories":2856},[198],{"categories":2858},[216],{"categories":2860},[198],{"categories":2862},[246],{"categories":2864},[237],{"categories":2866},[189],{"categories":2868},[],{"categories":2870},[198],{"categories":2872},[237],{"categories":2874},[510],{"categories":2876},[216],{"categories":2878},[195],{"categories":2880},[237],{"categories":2882},[189],{"categories":2884},[],{"categories":2886},[198],{"categories":2888},[198],{"categories":2890},[195],{"categories":2892},[],{"categories":2894},[198],{"categories":2896},[201],{"categories":2898},[216],{"categories":2900},[198],{"categories":2902},[192],{"categories":2904},[],{"categories":2906},[195],{"categories":2908},[201],{"categories":2910},[195],{"categories":2912},[198],{"categories":2914},[216],{"categories":2916},[189],{"categories":2918},[510],{"categories":2920},[195],{"categories":2922},[195],{"categories":2924},[195],{"categories":2926},[216],{"categories":2928},[192],{"categories":2930},[195],{"categories":2932},[237],{"categories":2934},[216],{"categories":2936},[510],{"categories":2938},[195],{"categories":2940},[],{"categories":2942},[],{"categories":2944},[510],{"categories":2946},[147],{"categories":2948},[198],{"categories":2950},[198],{"categories":2952},[216],{"categories":2954},[195],{"categories":2956},[189],{"categories":2958},[237],{"categories":2960},[198],{"categories":2962},[195],{"categories":2964},[253],{"categories":2966},[195],{"categories":2968},[198],{"categories":2970},[],{"categories":2972},[195],{"categories":2974},[195],{"categories":2976},[216],{"categories":2978},[189],{"categories":2980},[],{"categories":2982},[195],{"categories":2984},[195],{"categories":2986},[246],{"categories":2988},[237],{"categories":2990},[195,198],{"categories":2992},[253,192],{"categories":2994},[195],{"categories":2996},[],{"categories":2998},[198],{"categories":3000},[],{"categories":3002},[246],{"categories":3004},[195],{"categories":3006},[216],{"categories":3008},[],{"categories":3010},[198],{"categories":3012},[],{"categories":3014},[237],{"categories":3016},[198],{"categories":3018},[189],{"categories":3020},[198],{"categories":3022},[195],{"categories":3024},[510],{"categories":3026},[253],{"categories":3028},[192],{"categories":3030},[192],{"categories":3032},[189],{"categories":3034},[189],{"categories":3036},[195],{"categories":3038},[198],{"categories":3040},[195],{"categories":3042},[195],{"categories":3044},[189],{"categories":3046},[195],{"categories":3048},[253],{"categories":3050},[216],{"categories":3052},[195],{"categories":3054},[198],{"categories":3056},[195],{"categories":3058},[],{"categories":3060},[246],{"categories":3062},[],{"categories":3064},[198],{"categories":3066},[189],{"categories":3068},[],{"categories":3070},[510],{"categories":3072},[195],{"categories":3074},[],{"categories":3076},[216],{"categories":3078},[198],{"categories":3080},[246],{"categories":3082},[195],{"categories":3084},[198],{"categories":3086},[246],{"categories":3088},[198],{"categories":3090},[216],{"categories":3092},[189],{"categories":3094},[216],{"categories":3096},[246],{"categories":3098},[195],{"categories":3100},[237],{"categories":3102},[195],{"categories":3104},[195],{"categories":3106},[195],{"categories":3108},[195],{"categories":3110},[198],{"categories":3112},[195],{"categories":3114},[198],{"categories":3116},[195],{"categories":3118},[189],{"categories":3120},[195],{"categories":3122},[198],{"categories":3124},[237],{"categories":3126},[189],{"categories":3128},[198],{"categories":3130},[237],{"categories":3132},[],{"categories":3134},[195],{"categories":3136},[195],{"categories":3138},[246],{"categories":3140},[],{"categories":3142},[198],{"categories":3144},[253],{"categories":3146},[195],{"categories":3148},[216],{"categories":3150},[253],{"categories":3152},[198],{"categories":3154},[192],{"categories":3156},[192],{"categories":3158},[195],{"categories":3160},[189],{"categories":3162},[],{"categories":3164},[195],{"categories":3166},[],{"categories":3168},[189],{"categories":3170},[195],{"categories":3172},[198],{"categories":3174},[198],{"categories":3176},[],{"categories":3178},[246],{"categories":3180},[246],{"categories":3182},[253],{"categories":3184},[237],{"categories":3186},[],{"categories":3188},[195],{"categories":3190},[189],{"categories":3192},[195],{"categories":3194},[246],{"categories":3196},[189],{"categories":3198},[216],{"categories":3200},[216],{"categories":3202},[],{"categories":3204},[216],{"categories":3206},[198],{"categories":3208},[237],{"categories":3210},[147],{"categories":3212},[195],{"categories":3214},[],{"categories":3216},[216],{"categories":3218},[246],{"categories":3220},[192],{"categories":3222},[195],{"categories":3224},[189],{"categories":3226},[510],{"categories":3228},[189],{"categories":3230},[],{"categories":3232},[],{"categories":3234},[216],{"categories":3236},[],{"categories":3238},[198],{"categories":3240},[198],{"categories":3242},[198],{"categories":3244},[],{"categories":3246},[195],{"categories":3248},[],{"categories":3250},[216],{"categories":3252},[189],{"categories":3254},[237],{"categories":3256},[195],{"categories":3258},[216],{"categories":3260},[216],{"categories":3262},[],{"categories":3264},[216],{"categories":3266},[189],{"categories":3268},[195],{"categories":3270},[],{"categories":3272},[198],{"categories":3274},[198],{"categories":3276},[189],{"categories":3278},[],{"categories":3280},[],{"categories":3282},[],{"categories":3284},[237],{"categories":3286},[198],{"categories":3288},[195],{"categories":3290},[],{"categories":3292},[],{"categories":3294},[],{"categories":3296},[237],{"categories":3298},[],{"categories":3300},[189],{"categories":3302},[],{"categories":3304},[],{"categories":3306},[237],{"categories":3308},[195],{"categories":3310},[216],{"categories":3312},[],{"categories":3314},[253],{"categories":3316},[216],{"categories":3318},[253],{"categories":3320},[195],{"categories":3322},[],{"categories":3324},[],{"categories":3326},[198],{"categories":3328},[],{"categories":3330},[],{"categories":3332},[198],{"categories":3334},[195],{"categories":3336},[],{"categories":3338},[198],{"categories":3340},[216],{"categories":3342},[253],{"categories":3344},[147],{"categories":3346},[198],{"categories":3348},[198],{"categories":3350},[],{"categories":3352},[],{"categories":3354},[],{"categories":3356},[216],{"categories":3358},[],{"categories":3360},[],{"categories":3362},[237],{"categories":3364},[189],{"categories":3366},[],{"categories":3368},[192],{"categories":3370},[253],{"categories":3372},[195],{"categories":3374},[246],{"categories":3376},[189],{"categories":3378},[147],{"categories":3380},[192],{"categories":3382},[246],{"categories":3384},[],{"categories":3386},[],{"categories":3388},[198],{"categories":3390},[189],{"categories":3392},[237],{"categories":3394},[189],{"categories":3396},[198],{"categories":3398},[510],{"categories":3400},[198],{"categories":3402},[],{"categories":3404},[195],{"categories":3406},[216],{"categories":3408},[246],{"categories":3410},[],{"categories":3412},[237],{"categories":3414},[216],{"categories":3416},[189],{"categories":3418},[198],{"categories":3420},[195],{"categories":3422},[192],{"categories":3424},[198,510],{"categories":3426},[198],{"categories":3428},[246],{"categories":3430},[195],{"categories":3432},[147],{"categories":3434},[253],{"categories":3436},[198],{"categories":3438},[],{"categories":3440},[198],{"categories":3442},[195],{"categories":3444},[192],{"categories":3446},[],{"categories":3448},[],{"categories":3450},[195],{"categories":3452},[147],{"categories":3454},[195],{"categories":3456},[],{"categories":3458},[216],{"categories":3460},[],{"categories":3462},[216],{"categories":3464},[246],{"categories":3466},[198],{"categories":3468},[195],{"categories":3470},[253],{"categories":3472},[246],{"categories":3474},[],{"categories":3476},[216],{"categories":3478},[195],{"categories":3480},[],{"categories":3482},[195],{"categories":3484},[198],{"categories":3486},[195],{"categories":3488},[198],{"categories":3490},[195],{"categories":3492},[195],{"categories":3494},[195],{"categories":3496},[195],{"categories":3498},[192],{"categories":3500},[],{"categories":3502},[201],{"categories":3504},[216],{"categories":3506},[195],{"categories":3508},[],{"categories":3510},[246],{"categories":3512},[195],{"categories":3514},[195],{"categories":3516},[198],{"categories":3518},[216],{"categories":3520},[195],{"categories":3522},[195],{"categories":3524},[192],{"categories":3526},[198],{"categories":3528},[237],{"categories":3530},[],{"categories":3532},[147],{"categories":3534},[195],{"categories":3536},[],{"categories":3538},[216],{"categories":3540},[253],{"categories":3542},[],{"categories":3544},[],{"categories":3546},[216],{"categories":3548},[216],{"categories":3550},[253],{"categories":3552},[189],{"categories":3554},[198],{"categories":3556},[198],{"categories":3558},[195],{"categories":3560},[192],{"categories":3562},[],{"categories":3564},[],{"categories":3566},[216],{"categories":3568},[147],{"categories":3570},[246],{"categories":3572},[198],{"categories":3574},[237],{"categories":3576},[147],{"categories":3578},[147],{"categories":3580},[],{"categories":3582},[216],{"categories":3584},[195],{"categories":3586},[195],{"categories":3588},[246],{"categories":3590},[],{"categories":3592},[216],{"categories":3594},[216],{"categories":3596},[216],{"categories":3598},[],{"categories":3600},[198],{"categories":3602},[195],{"categories":3604},[],{"categories":3606},[189],{"categories":3608},[192],{"categories":3610},[],{"categories":3612},[195],{"categories":3614},[195],{"categories":3616},[],{"categories":3618},[246],{"categories":3620},[],{"categories":3622},[],{"categories":3624},[],{"categories":3626},[],{"categories":3628},[195],{"categories":3630},[216],{"categories":3632},[],{"categories":3634},[],{"categories":3636},[195],{"categories":3638},[195],{"categories":3640},[195],{"categories":3642},[147],{"categories":3644},[195],{"categories":3646},[147],{"categories":3648},[],{"categories":3650},[147],{"categories":3652},[147],{"categories":3654},[510],{"categories":3656},[198],{"categories":3658},[246],{"categories":3660},[],{"categories":3662},[],{"categories":3664},[147],{"categories":3666},[246],{"categories":3668},[246],{"categories":3670},[246],{"categories":3672},[],{"categories":3674},[189],{"categories":3676},[246],{"categories":3678},[246],{"categories":3680},[189],{"categories":3682},[246],{"categories":3684},[192],{"categories":3686},[246],{"categories":3688},[246],{"categories":3690},[246],{"categories":3692},[147],{"categories":3694},[216],{"categories":3696},[216],{"categories":3698},[195],{"categories":3700},[246],{"categories":3702},[147],{"categories":3704},[510],{"categories":3706},[147],{"categories":3708},[147],{"categories":3710},[147],{"categories":3712},[],{"categories":3714},[192],{"categories":3716},[],{"categories":3718},[510],{"categories":3720},[246],{"categories":3722},[246],{"categories":3724},[246],{"categories":3726},[198],{"categories":3728},[216,192],{"categories":3730},[147],{"categories":3732},[],{"categories":3734},[],{"categories":3736},[147],{"categories":3738},[],{"categories":3740},[147],{"categories":3742},[216],{"categories":3744},[198],{"categories":3746},[],{"categories":3748},[246],{"categories":3750},[195],{"categories":3752},[237],{"categories":3754},[],{"categories":3756},[195],{"categories":3758},[],{"categories":3760},[216],{"categories":3762},[189],{"categories":3764},[147],{"categories":3766},[],{"categories":3768},[246],{"categories":3770},[216],[3772,3845,4132,4370],{"id":3773,"title":3774,"ai":3775,"body":3780,"categories":3816,"created_at":148,"date_modified":148,"description":140,"extension":149,"faq":148,"featured":150,"kicker_label":148,"meta":3817,"navigation":168,"path":3831,"published_at":3832,"question":148,"scraped_at":3833,"seo":3834,"sitemap":3835,"source_id":3836,"source_name":3837,"source_type":176,"source_url":3838,"stem":3839,"tags":3840,"thumbnail_url":148,"tldr":3842,"tweet":148,"unknown_tags":3843,"__hash__":3844},"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":3776,"output_tokens":3777,"processing_time_ms":3778,"cost_usd":3779},7468,1638,25555,0.0022901,{"type":14,"value":3781,"toc":3810},[3782,3786,3789,3793,3796,3800,3803,3807],[17,3783,3785],{"id":3784},"restructure-flat-data-into-star-schema-for-efficient-analysis","Restructure Flat Data into Star Schema for Efficient Analysis",[22,3787,3788],{},"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,3790,3792],{"id":3791},"clean-and-engineer-features-robustly-from-unreliable-raw-data","Clean and Engineer Features Robustly from Unreliable Raw Data",[22,3794,3795],{},"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,3797,3799],{"id":3798},"extract-actionable-hr-insights-post-transformation","Extract Actionable HR Insights Post-Transformation",[22,3801,3802],{},"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,3804,3806],{"id":3805},"predict-attrition-at-71-accuracy-with-key-drivers-identified","Predict Attrition at 71% Accuracy with Key Drivers Identified",[22,3808,3809],{},"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":140,"searchDepth":141,"depth":141,"links":3811},[3812,3813,3814,3815],{"id":3784,"depth":141,"text":3785},{"id":3791,"depth":141,"text":3792},{"id":3798,"depth":141,"text":3799},{"id":3805,"depth":141,"text":3806},[147],{"content_references":3818,"triage":3827},[3819,3823],{"type":154,"title":3820,"author":3821,"url":3822,"context":157},"Human Resources Data Set","rhuebner","https:\u002F\u002Fwww.kaggle.com\u002Fdatasets\u002Frhuebner\u002Fhuman-resources-data-set",{"type":159,"title":3824,"author":3825,"url":3826,"context":157},"ETL-HR-Analytics-Project","jihanKamilah","https:\u002F\u002Fgithub.com\u002FjihanKamilah\u002FETL-HR-Analytics-Project",{"relevance":164,"novelty":3828,"quality":165,"actionability":165,"composite":3829,"reasoning":3830},3,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":3774,"description":140},{"loc":3831},"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",[181,3841,182,180],"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":3846,"title":3847,"ai":3848,"body":3853,"categories":4107,"created_at":148,"date_modified":148,"description":140,"extension":149,"faq":148,"featured":150,"kicker_label":148,"meta":4108,"navigation":168,"path":4119,"published_at":4120,"question":148,"scraped_at":4121,"seo":4122,"sitemap":4123,"source_id":4124,"source_name":3837,"source_type":176,"source_url":4125,"stem":4126,"tags":4127,"thumbnail_url":148,"tldr":4129,"tweet":148,"unknown_tags":4130,"__hash__":4131},"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":3849,"output_tokens":3850,"processing_time_ms":3851,"cost_usd":3852},8933,2254,17256,0.00289095,{"type":14,"value":3854,"toc":4102},[3855,3859,3862,3921,3936,3952,3962,3965,3969,3972,4017,4020,4023,4026,4030,4033,4036,4092,4095,4098],[17,3856,3858],{"id":3857},"merge-raw-datasets-into-actionable-business-data","Merge Raw Datasets into Actionable Business Data",[22,3860,3861],{},"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:",[3863,3864,3867],"pre",{"className":3865,"code":3866,"language":180,"meta":140,"style":140},"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",[26,3868,3869,3877,3882,3887,3892,3897,3903,3909,3915],{"__ignoreMap":140},[3870,3871,3874],"span",{"class":3872,"line":3873},"line",1,[3870,3875,3876],{},"def load_data():\n",[3870,3878,3879],{"class":3872,"line":141},[3870,3880,3881],{},"    return {\n",[3870,3883,3884],{"class":3872,"line":3828},[3870,3885,3886],{},"        \"orders\": pd.read_csv(\"data\u002Folist_orders_dataset.csv\"),\n",[3870,3888,3889],{"class":3872,"line":165},[3870,3890,3891],{},"        # ... other datasets\n",[3870,3893,3894],{"class":3872,"line":164},[3870,3895,3896],{},"    }\n",[3870,3898,3900],{"class":3872,"line":3899},6,[3870,3901,3902],{"emptyLinePlaceholder":168},"\n",[3870,3904,3906],{"class":3872,"line":3905},7,[3870,3907,3908],{},"df = data[\"orders\"].merge(data[\"customers\"], on=\"customer_id\", how=\"left\") \\\n",[3870,3910,3912],{"class":3872,"line":3911},8,[3870,3913,3914],{},"    .merge(data[\"items\"], on=\"order_id\", how=\"left\") \\\n",[3870,3916,3918],{"class":3872,"line":3917},9,[3870,3919,3920],{},"    # ... other merges\n",[22,3922,3923,3924,3927,3928,3931,3932,3935],{},"Convert timestamps to datetime for time-based calcs: df",[3870,3925,3926],{},"\"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",[3870,3929,3930],{},"\"revenue\"",".sum(), orders_current = df",[3870,3933,3934],{},"\"order_id\"",".nunique(), AOV = revenue \u002F orders.",[22,3937,3938,3939,3942,3943,3945,3946,3942,3949,3951],{},"Group by month for trends: monthly = df.groupby(\"month\").agg({\"revenue\": \"sum\", \"order_id\": \"nunique\"}); monthly",[3870,3940,3941],{},"\"growth\""," = monthly",[3870,3944,3930],{},".pct_change() * 100; monthly",[3870,3947,3948],{},"\"moving_avg\"",[3870,3950,3930],{},".rolling(3).mean().",[22,3953,3954,3955,3961],{},"Simulate weekly reporting with cutoff: df_sim = df",[3870,3956,3957,3958,3960],{},"df",[3870,3959,3926],{}," \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,3963,3964],{},"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,3966,3968],{"id":3967},"add-rule-based-insights-and-build-pdf-reports","Add Rule-Based Insights and Build PDF Reports",[22,3970,3971],{},"Metrics alone fail without context—use simple if-conditions to interpret:",[3863,3973,3975],{"className":3865,"code":3974,"language":180,"meta":140,"style":140},"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",[26,3976,3977,3982,3987,3992,3997,4002,4007,4012],{"__ignoreMap":140},[3870,3978,3979],{"class":3872,"line":3873},[3870,3980,3981],{},"def generate_insights(metrics):\n",[3870,3983,3984],{"class":3872,"line":141},[3870,3985,3986],{},"    insights = []\n",[3870,3988,3989],{"class":3872,"line":3828},[3870,3990,3991],{},"    if metrics[\"profit_current\"] \u003C metrics[\"revenue_current\"]:\n",[3870,3993,3994],{"class":3872,"line":165},[3870,3995,3996],{},"        insights.append(\"Revenue growing but profit margin thin, high logistics costs.\")\n",[3870,3998,3999],{"class":3872,"line":164},[3870,4000,4001],{},"    growth_volatility = metrics[\"monthly\"][\"growth\"].std()\n",[3870,4003,4004],{"class":3872,"line":3899},[3870,4005,4006],{},"    if growth_volatility > 50:\n",[3870,4008,4009],{"class":3872,"line":3905},[3870,4010,4011],{},"        insights.append(\"Revenue growth highly volatile, unstable performance.\")\n",[3870,4013,4014],{"class":3872,"line":3911},[3870,4015,4016],{},"    # ...\n",[22,4018,4019],{},"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,4021,4022],{},"Key patterns: thin margins from costs; volatile growth; new-customer reliance; delays hurt scores; SP top region; credit users spend more.",[22,4024,4025],{},"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,4027,4029],{"id":4028},"schedule-email-delivery-with-github-actions","Schedule Email Delivery with GitHub Actions",[22,4031,4032],{},"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,4034,4035],{},"Deploy via .github\u002Fworkflows\u002Fauto-report.yml:",[3863,4037,4041],{"className":4038,"code":4039,"language":4040,"meta":140,"style":140},"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",[26,4042,4043,4053,4061,4080,4087],{"__ignoreMap":140},[3870,4044,4045,4049],{"class":3872,"line":3873},[3870,4046,4048],{"class":4047},"sj4cs","on",[3870,4050,4052],{"class":4051},"sVt8B",":\n",[3870,4054,4055,4059],{"class":3872,"line":141},[3870,4056,4058],{"class":4057},"s9eBZ","  schedule",[3870,4060,4052],{"class":4051},[3870,4062,4063,4066,4069,4072,4076],{"class":3872,"line":3828},[3870,4064,4065],{"class":4051},"    - ",[3870,4067,4068],{"class":4057},"cron",[3870,4070,4071],{"class":4051},": ",[3870,4073,4075],{"class":4074},"sZZnC","'0 1 * * 1'",[3870,4077,4079],{"class":4078},"sJ8bj","  # Mondays 1AM UTC\n",[3870,4081,4082,4085],{"class":3872,"line":165},[3870,4083,4084],{"class":4057},"jobs",[3870,4086,4052],{"class":4051},[3870,4088,4089],{"class":3872,"line":164},[3870,4090,4091],{"class":4078},"  # setup env, pip install, run main.py\n",[22,4093,4094],{},"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,4096,4097],{},"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.",[4099,4100,4101],"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":140,"searchDepth":141,"depth":141,"links":4103},[4104,4105,4106],{"id":3857,"depth":141,"text":3858},{"id":3967,"depth":141,"text":3968},{"id":4028,"depth":141,"text":4029},[147],{"content_references":4109,"triage":4117},[4110,4114],{"type":154,"title":4111,"author":4112,"url":4113,"context":157},"Brazilian Ecommerce Public Dataset by Olist","Olist","https:\u002F\u002Fwww.kaggle.com\u002Fdatasets\u002Folistbr\u002Fbrazilian-ecommerce",{"type":159,"title":4115,"author":3825,"url":4116,"context":162},"Weekly-Business-Report-Automation","https:\u002F\u002Fgithub.com\u002FjihanKamilah\u002FWeekly-Business-Report-Automation\u002F",{"relevance":164,"novelty":3828,"quality":165,"actionability":164,"composite":166,"reasoning":4118},"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":3847,"description":140},{"loc":4119},"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",[180,4128,181,182],"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":4133,"title":4134,"ai":4135,"body":4140,"categories":4330,"created_at":148,"date_modified":148,"description":140,"extension":149,"faq":148,"featured":150,"kicker_label":148,"meta":4331,"navigation":168,"path":4356,"published_at":4357,"question":148,"scraped_at":4358,"seo":4359,"sitemap":4360,"source_id":4361,"source_name":4362,"source_type":176,"source_url":4363,"stem":4364,"tags":4365,"thumbnail_url":148,"tldr":4367,"tweet":148,"unknown_tags":4368,"__hash__":4369},"summaries\u002Fsummaries\u002F4436e5e687a42c9f-cohort-analysis-exposes-donor-retention-risks-summary.md","Cohort Analysis Exposes Donor Retention Risks",{"provider":7,"model":8,"input_tokens":4136,"output_tokens":4137,"processing_time_ms":4138,"cost_usd":4139},9176,2970,20956,0.00281335,{"type":14,"value":4141,"toc":4324},[4142,4146,4149,4194,4197,4201,4204,4239,4242,4246,4249,4294,4297,4301,4321],[17,4143,4145],{"id":4144},"aggregate-retention-masks-leaky-bathtub-dynamics","Aggregate Retention Masks Leaky Bathtub Dynamics",[22,4147,4148],{},"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:",[3863,4150,4152],{"className":3865,"code":4151,"language":180,"meta":140,"style":140},"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",[26,4153,4154,4159,4164,4169,4174,4179,4184,4189],{"__ignoreMap":140},[3870,4155,4156],{"class":3872,"line":3873},[3870,4157,4158],{},"import pandas as pd\n",[3870,4160,4161],{"class":3872,"line":141},[3870,4162,4163],{},"df_opps_filtered = df_opps[df_opps['campaign'] != 'Regular Giving'].copy()\n",[3870,4165,4166],{"class":3872,"line":3828},[3870,4167,4168],{},"df_years = df_opps_filtered[['contact_id', 'year']].drop_duplicates()\n",[3870,4170,4171],{"class":3872,"line":165},[3870,4172,4173],{},"df_years['prev_year'] = df_years.groupby('contact_id')['year'].shift(1)\n",[3870,4175,4176],{"class":3872,"line":164},[3870,4177,4178],{},"df_years['is_retained'] = (df_years['year'] == df_years['prev_year'] + 1)\n",[3870,4180,4181],{"class":3872,"line":3899},[3870,4182,4183],{},"results = df_years.groupby('year').agg(total_donors=('contact_id', 'count'), retained_donors=('is_retained', 'sum')).reset_index()\n",[3870,4185,4186],{"class":3872,"line":3905},[3870,4187,4188],{},"results['donors_last_year'] = results['total_donors'].shift(1)\n",[3870,4190,4191],{"class":3872,"line":3911},[3870,4192,4193],{},"results['retention_rate'] = results['retained_donors'] \u002F results['donors_last_year']\n",[22,4195,4196],{},"This yields healthy-looking trends but ignores cohort composition.",[17,4198,4200],{"id":4199},"second-gift-rate-flags-early-conversion-failures","Second-Gift Rate Flags Early Conversion Failures",[22,4202,4203],{},"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:",[3863,4205,4207],{"className":3865,"code":4206,"language":180,"meta":140,"style":140},"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",[26,4208,4209,4214,4219,4224,4229,4234],{"__ignoreMap":140},[3870,4210,4211],{"class":3872,"line":3873},[3870,4212,4213],{},"df_sorted = df_opps_filtered.sort_values(['contact_id', 'close_date'])\n",[3870,4215,4216],{"class":3872,"line":141},[3870,4217,4218],{},"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",[3870,4220,4221],{"class":3872,"line":3828},[3870,4222,4223],{},"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",[3870,4225,4226],{"class":3872,"line":165},[3870,4227,4228],{},"first_and_second_gifts['is_converted'] = first_and_second_gifts['months_lapsed'] \u003C= 12\n",[3870,4230,4231],{"class":3872,"line":164},[3870,4232,4233],{},"grouped = first_and_second_gifts.groupby('first_gift_year').agg(total_new_donors=('is_converted', 'count'), second_gift_conversions=('is_converted', 'sum'))\n",[3870,4235,4236],{"class":3872,"line":3899},[3870,4237,4238],{},"grouped['conversion_rate'] = (grouped['second_gift_conversions'] \u002F grouped['total_new_donors']) * 100\n",[22,4240,4241],{},"Stable rates suggest no immediate alarm, but don't reveal multi-year trajectories.",[17,4243,4245],{"id":4244},"cohort-heatmaps-reveal-declining-longevity","Cohort Heatmaps Reveal Declining Longevity",[22,4247,4248],{},"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:",[3863,4250,4252],{"className":3865,"code":4251,"language":180,"meta":140,"style":140},"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",[26,4253,4254,4259,4264,4269,4274,4279,4284,4289],{"__ignoreMap":140},[3870,4255,4256],{"class":3872,"line":3873},[3870,4257,4258],{},"cohort_map = first_and_second_gifts['first_gift_year'].to_dict()\n",[3870,4260,4261],{"class":3872,"line":141},[3870,4262,4263],{},"df_opps_filtered_summary = df_opps_filtered.groupby(['year', 'contact_id']).agg(total_amount=('amount', 'sum')).reset_index()\n",[3870,4265,4266],{"class":3872,"line":3828},[3870,4267,4268],{},"df_opps_filtered_summary['cohort_year'] = df_opps_filtered_summary['contact_id'].map(cohort_map)\n",[3870,4270,4271],{"class":3872,"line":165},[3870,4272,4273],{},"df_opps_filtered_summary['year_number'] = df_opps_filtered_summary['year'] - df_opps_filtered_summary['cohort_year']\n",[3870,4275,4276],{"class":3872,"line":164},[3870,4277,4278],{},"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",[3870,4280,4281],{"class":3872,"line":3899},[3870,4282,4283],{},"cohort_sizes = cohort_counts[cohort_counts['year_number']==0][['cohort_year', 'retained_donors']].rename(columns={'retained_donors': 'original_cohort_size'})\n",[3870,4285,4286],{"class":3872,"line":3905},[3870,4287,4288],{},"df_cohorts = cohort_counts.merge(cohort_sizes, on='cohort_year')\n",[3870,4290,4291],{"class":3872,"line":3911},[3870,4292,4293],{},"df_cohorts['retention_rate'] = df_cohorts['retained_donors'] \u002F df_cohorts['original_cohort_size']\n",[22,4295,4296],{},"Visualize with seaborn heatmap (cohort_year rows, year_number columns, retention_rate values) to compare trajectories.",[17,4298,4300],{"id":4299},"revenue-mix-exposes-over-reliance-on-new-cohorts","Revenue Mix Exposes Over-Reliance on New Cohorts",[22,4302,4303,4304,4308,4309,4312,4313,4316,4317,4320],{},"In 2025, 75% revenue from 2024-2025 cohorts (each ",[4305,4306,4307],"del",{},"37-38%), while 2016-2019 cohorts contribute \u003C2% each despite loyalty. No major gift skew: average gifts similar across cohorts (","$500-700). Filter ",[26,4310,4311],{},"df_cohorts[cohort_year + year_number == 2025]",", compute ",[26,4314,4315],{},"pct_of_total = (total_amount \u002F total_2025_amt) * 100"," and ",[26,4318,4319],{},"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.",[4099,4322,4323],{},"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":140,"searchDepth":141,"depth":141,"links":4325},[4326,4327,4328,4329],{"id":4144,"depth":141,"text":4145},{"id":4199,"depth":141,"text":4200},{"id":4244,"depth":141,"text":4245},{"id":4299,"depth":141,"text":4300},[147],{"content_references":4332,"triage":4353},[4333,4337,4340,4343,4346,4350],{"type":159,"title":4334,"url":4335,"context":4336},"Benchmarking Project","https:\u002F\u002Fwww.benchmarkingproject.org\u002F","cited",{"type":159,"title":4338,"url":4339,"context":4336},"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":159,"title":4341,"url":4342,"context":4336},"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":159,"title":4344,"url":4345,"context":157},"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":159,"title":4347,"author":4348,"url":4349,"context":157},"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":159,"title":4351,"author":4348,"url":4352,"context":157},"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":3828,"novelty":3828,"quality":165,"actionability":3828,"composite":4354,"reasoning":4355},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":4134,"description":140},{"loc":4356},"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",[181,182,180,4366],"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.",[4366],"GWJ4aTtuthac1xT3_2cS9UIMEViCl6fM9BgIdvnsVcQ",{"id":4371,"title":4372,"ai":4373,"body":4378,"categories":4563,"created_at":148,"date_modified":148,"description":140,"extension":149,"faq":148,"featured":150,"kicker_label":148,"meta":4564,"navigation":168,"path":4565,"published_at":4566,"question":148,"scraped_at":148,"seo":4567,"sitemap":4568,"source_id":4569,"source_name":3837,"source_type":176,"source_url":4570,"stem":4571,"tags":4572,"thumbnail_url":148,"tldr":4573,"tweet":148,"unknown_tags":4574,"__hash__":4575},"summaries\u002Fsummaries\u002Fstreamlit-dashboard-prophet-vs-arima-stock-forecas-summary.md","Streamlit Dashboard: Prophet vs ARIMA Stock Forecasts",{"provider":7,"model":8,"input_tokens":4374,"output_tokens":4375,"processing_time_ms":4376,"cost_usd":4377},6934,1754,14065,0.0022413,{"type":14,"value":4379,"toc":4557},[4380,4384,4406,4421,4449,4456,4460,4467,4474,4495,4499,4513,4527,4537,4540,4544],[17,4381,4383],{"id":4382},"interactive-dashboard-setup-speeds-exploration","Interactive Dashboard Setup Speeds Exploration",[22,4385,4386,4387,4316,4390,4393,4394,4397,4398,4401,4402,4405],{},"Start with ",[26,4388,4389],{},"st.set_page_config(layout=\"wide\")",[26,4391,4392],{},"st.title(\"📊 Stock Forecast Dashboard\")"," for a clean interface. Use sidebar controls for dynamic input: ",[26,4395,4396],{},"st.sidebar.date_input"," sets start_date (default 2020-01-01) and end_date (default 2021-01-01); ",[26,4399,4400],{},"st.sidebar.selectbox"," from a CSV-loaded ticker_list (e.g., index to \"AA\"); ",[26,4403,4404],{},"st.sidebar.slider(\"Forecast Days\", 1, 60, 7)"," for n_day periods.",[22,4407,4408,4409,4412,4413,4416,4417,4420],{},"Cache data fetches with ",[26,4410,4411],{},"@st.cache_data def load_data(ticker): data = yf.download(ticker, start=start_date, end=end_date); data.reset_index(inplace=True)"," to avoid slow API repeats. Handle MultiIndex columns via ",[26,4414,4415],{},"if isinstance(data.columns, pd.MultiIndex): data.columns = data.columns.get_level_values(0)",". Guard against empty data or \u003C10 rows with ",[26,4418,4419],{},"if data.empty or df.shape[0] \u003C 10: st.stop()",".",[22,4422,4423,4424,4427,4428,4431,4432,4427,4434,4437,4438,4441,4442,4316,4445,4448],{},"Add KPI cards in columns: compute last_price = data",[3870,4425,4426],{},"'Close'",".iloc",[3870,4429,4430],{},"-1",", first_price = data",[3870,4433,4426],{},[3870,4435,4436],{},"0",", change = last_price - first_price, pct_change = (change \u002F first_price) * 100; display via ",[26,4439,4440],{},"col1.metric(\"Last Price\", f\"{last_price:.2f}\")",", etc. For raw data, use ",[26,4443,4444],{},"st.number_input(\"Rows\", min_value=5, max_value=len(data), value=20)",[26,4446,4447],{},"st.dataframe(data.tail(int(show_last)), use_container_width=True)"," to inspect latest rows interactively.",[22,4450,4451,4452,4455],{},"Prep for models: ",[26,4453,4454],{},"df = data[['Date','Close']].copy(); df.columns = ['ds','y']; df.dropna()"," ensures Prophet format—missing 'ds'\u002F'y' causes failures.",[17,4457,4459],{"id":4458},"prophet-and-arima-deliver-complementary-forecasts","Prophet and ARIMA Deliver Complementary Forecasts",[22,4461,4462,4463,4466],{},"Prophet auto-detects trends and seasonality (weekly\u002Fyearly): ",[26,4464,4465],{},"prophet_model = Prophet(); prophet_model.fit(df); future = prophet_model.make_future_dataframe(periods=n_day); forecast_prophet = prophet_model.predict(future)",". Ideal for patterned time series without manual tuning.",[22,4468,4469,4470,4473],{},"ARIMA uses autoregression, differencing (d=1), moving averages (order=(5,1,0)): ",[26,4471,4472],{},"model = ARIMA(df['y'], order=(5,1,0)); model_fit = model.fit()",". Suited for stable, consistent data needing statistical rigor—requires more data insight than Prophet.",[22,4475,4476,4477,4480,4481,4484,4485,61,4488,61,4491,4494],{},"Visualize in one Plotly ",[26,4478,4479],{},"go.Figure()",": add actuals ",[26,4482,4483],{},"go.Scatter(x=df['ds'], y=df['y'], name='Actual')",", overlay Prophet\u002FARIMA forecasts. Add toggles: ",[26,4486,4487],{},"st.selectbox(\"Select Model\", [\"All\", \"Prophet Only\", \"ARIMA Only\"])",[26,4489,4490],{},"show_ci = st.checkbox(\"Show Confidence Interval\")",[26,4492,4493],{},"highlight_forecast = st.checkbox(\"Highlight Forecast Area\")"," for interactive exploration.",[17,4496,4498],{"id":4497},"metrics-and-rules-pinpoint-better-model-per-stock","Metrics and Rules Pinpoint Better Model Per Stock",[22,4500,4501,4502,4505,4506,4509,4510,4512],{},"Split 80\u002F20: ",[26,4503,4504],{},"split = int(len(df) * 0.8); train = df.iloc[:split]; test = df.iloc[split:]",". Compute MAE = mean_absolute_error(test",[3870,4507,4508],{},"'y'",", pred), RMSE = sqrt(mean_squared_error(test",[3870,4511,4508],{},", pred)), MAPE similarly.",[22,4514,4515,4516,4519,4520,4523,4524,4420],{},"Display side-by-side in columns: ",[26,4517,4518],{},"with col1: st.markdown(\"### Prophet\"); st.metric(\"MAE\", f\"{mae_prophet:.4f}\")"," etc. for both models. Pick winner by RMSE (penalizes large errors): ",[26,4521,4522],{},"if rmse_prophet \u003C rmse_arima: winner = \"Prophet\"",". Show ",[26,4525,4526],{},"st.success(f\"{winner} performs better based on RMSE\")",[22,4528,4529,4530,4533,4534,4536],{},"Interpret MAPE: ",[26,4531,4532],{},"def interpret_mape(mape): if mape \u003C 10: \"✅ Good Model\"; elif mape \u003C 20: \"⚠️ Acceptable Model\"; else: \"❌ Poor Model\"",". Normalize error: avg_price = test",[3870,4535,4508],{},".mean(); relative_rmse = (best_rmse \u002F avg_price) * 100 to contextualize against price scale.",[22,4538,4539],{},"Performance varies—Prophet better for \"AA\", ARIMA for \"GOOGL\" with smaller RMSE. No universal winner; evaluate per stock across metrics.",[17,4541,4543],{"id":4542},"deploy-fast-streamlit-cloud-over-ngrok","Deploy Fast: Streamlit Cloud Over Ngrok",[22,4545,4546,4547,4550,4551,4420],{},"Push to GitHub for Streamlit Cloud deployment—generates stable public link. For local testing, ",[26,4548,4549],{},"from pyngrok import ngrok; ngrok.connect(8501)"," provides temp URL, but unstable long-term. Full code at ",[4552,4553,4554],"a",{"href":4554,"rel":4555},"https:\u002F\u002Fgithub.com\u002FjihanKamilah\u002FMarketPulse-Stock-Forecast-App",[4556],"nofollow",{"title":140,"searchDepth":141,"depth":141,"links":4558},[4559,4560,4561,4562],{"id":4382,"depth":141,"text":4383},{"id":4458,"depth":141,"text":4459},{"id":4497,"depth":141,"text":4498},{"id":4542,"depth":141,"text":4543},[147],{},"\u002Fsummaries\u002Fstreamlit-dashboard-prophet-vs-arima-stock-forecas-summary","2026-04-08 21:21:17",{"title":4372,"description":140},{"loc":4565},"3e2aa6c9cf742867","https:\u002F\u002Funknown","summaries\u002Fstreamlit-dashboard-prophet-vs-arima-stock-forecas-summary",[181,182,180,3841],"Build an interactive Streamlit app to load stock data, forecast with Prophet (auto-trend\u002Fseasonality) and ARIMA (order=5,1,0), compare via side-by-side MAE\u002FRMSE\u002FMAPE metrics, declare RMSE winner, and interpret MAPE (\u003C10% good, \u003C20% acceptable). Use caching to speed up yf.download, 80\u002F20 train\u002Ftest split.",[],"wtTd2VwQ5rOZn_VWzzoJM55_nwR7HPP6D3iNrnS1KBU"]