CINXE.COM
Just a moment...
<!DOCTYPE html><html lang="en-US"><head><title>Just a moment...</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta name="robots" content="noindex,nofollow"><meta name="viewport" content="width=device-width,initial-scale=1"><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{display:flex;flex-direction:column;height:100vh;min-height:100vh}.main-content{margin:8rem auto;max-width:60rem;padding-left:1.5rem}@media (width <= 720px){.main-content{margin-top:4rem}}.h2{font-size:1.5rem;font-weight:500;line-height:2.25rem}@media (width <= 720px){.h2{font-size:1.25rem;line-height:1.5rem}}#challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+);background-repeat:no-repeat;background-size:contain;padding-left:34px}@media (prefers-color-scheme:dark){body{background-color:#222;color:#d9d9d9}}</style><meta http-equiv="refresh" content="390"></head><body class="no-js"><div class="main-wrapper" role="main"><div class="main-content"><noscript><div class="h2"><span id="challenge-error-text">Enable JavaScript and cookies to continue</span></div></noscript></div></div><script>(function(){window._cf_chl_opt={cvId: '3',cZone: "libraryhelp.ucsf.edu",cType: 'managed',cRay: '8e8dd872ae40ce42',cH: 'brZJY7qXg1Lp9ZwwQIkDbHgaE7n3Vtt1IaHjmTDOb14-1732665705-1.2.1.1-QOY2YJ97S_t0ymzef22iodMj4zOyx45gXc715TWmbieLkN77OleSyMqR4Qx6IJ3n',cUPMDTk: "\/hc\/en-us\/categories\/360001747934-Data-Science-and-Programming?__cf_chl_tk=coWSg.QtP66j47jYQWJNF2GnZUBR2PDZIPtwVM4BgSc-1732665705-1.0.1.1-99yXmdiTPzeDFgfINGYGMvWHDwMUyRtCnpStisHVttk",cFPWv: 'b',cITimeS: '1732665705',cTTimeMs: '1000',cMTimeMs: '390000',cTplC: 0,cTplV: 5,cTplB: 'cf',cK: "",fa: "\/hc\/en-us\/categories\/360001747934-Data-Science-and-Programming?__cf_chl_f_tk=coWSg.QtP66j47jYQWJNF2GnZUBR2PDZIPtwVM4BgSc-1732665705-1.0.1.1-99yXmdiTPzeDFgfINGYGMvWHDwMUyRtCnpStisHVttk",md: "GI5LXZoGscw0pe.9Xo.Bk7SZM8tcjxq2.2MAJW7R5So-1732665705-1.2.1.1-WGwQZeN9ZrNpd0HRYZ5_ieS.zX0t.2kwvlwSJ3BcaMUE_ylbsXJOAhfc8S6b9DPSZ53rx.GbVUb68Gm56pLUIngn7mS.vZnLFhmqgEeU091GBo4.xFVvGM1ap7RBLGVVwa2SXuqKEpnHh8Vfu9.SoJydQ4UV7GwcFKETvDU7f9g1xkrzpH7VKtazPEBIDMXTxz1gNdPn5fRQLr0be9eCbOdYfjE9qq1XMXeUxLUSORkOAJGCicDGxYFFys.iZLQ6o2Ce3cS5UhG5zaQLtrPsekHA_0odBTQ6eAmatPLNeEjQXx_2AjcyUegWfUFPqQfZ.2UgPBdSTfYAZBkpEbQTcTsr74XLdkfK056oY8s6whNQ3ffW5pKfjyQh4kuypbFs0PB6TXGAPgGtn5ePu06EcMJYcgd6A.tJNPlY.24pueCPZUTEMLp4P5cHYMgqiml6cZyTEbH3yoMJT83PGpiyToWtQLlqQ0hYjmqh0PtqzSTn7iCy.v7zsF3uole8qLzRZs6ZDdjmJ3xjakAYSHwxPtITEM._sRTSXE6D81K.lynCnPnRkiNYxUQpRIMZtq65z5BzUuqovxMoUak05wjU2Y2kp4.VYQM3k6vmZTw8zrmx2pEPzRarVUXAo6pO2jS8eySOF8ryFtM8SJc_qMGHblWpzYMW6S.PJSEq60B0I.FLVfqPTPHEFwqrGbXrdwMqWVkVEgf1i19h0BRAqzbobVSSz05W8yUmDSP4MP0IdG1iz_0Aa1nSmUEgTdW7f6sUiJWbdVrLeSCfyAQ7KTzGSYPXKU2BoQt6f97sUC4tJ.V2VSvG5fnNrsWdxiDKOdJkEDLjl8ADAPJmH0AVJ6mXwJORW26w.ZcT09nhYnRjYbHEICI1VBDWfgiQKBQTZpCmytwhtziQswNb8UGP1drp67BJrDm58Nyw1G80GYPhfFmSHgf0dZ4youbVJMe7diOjdLM8jzvvOiu4HRO1RcJS0CLzzfidosy0Oj.9bmn19KXFOcRE56Klg1dWgw9LW1Pt_G_O.RT5CmqdIKsV5l4vr.YZO.PUrHlEaFTsPM.zhn3NkKUCIXRQYYHLqxuZUZvKr3LwlrlgeUm9b_nMohqvqhjXJLQ7DMIB1RNRVuh2x6MZOZbgbU67cgaYJqCzOTKod5LAN03FPCPIoUTdI.QE460t.7ooFEwaHfAMF39KGVvMCe_sBHpMyFGJ32GclWSxXcsqKYizhhbjnVVX.MarTwpSUQSLOVlsAH2j0y7qBNqoQhXh4YAdrIyoJ1Ok.ceaubInv8EpEeaI41u7RmT6lNHD.DKxZ34Uq8gbe15yqsHxxqPPYgplYtFqtnZzuZWymGIYkQ.P901QAHCPwZ_JF1iHGOa81sLolQ5Skk8YloNCEJj1LCK3cNwpUPCNExMEsnmYkChv_k81Y4qIOsF4CXfwXbDwPZ4dwm3Mb7FFkR_Vy1ngphTAwWooLfhgEa4PCQvGPWaSwY6hLoAHayeIW0LOqTdY_243uTjXgICMkG3BtEXJoEOARswrJAqvPRnoF8QFemutKkIcHz1CFGySxjQ7tPRDy08_7SGlXq4w3ivOBMQsmxbUBFqkaLlKLWTOXnguvSgr7bLHz0ruVH3pDscx4SOszWmQEXiRvMKF9e_P9xhmz9Avc.h7hISDmcaA9V9OGd2.qxyUmRG6h2NfQC0odaX002L1EyxsOySNY7ARMwYVinmd069IokLvZSHMlaXl1O.PYnvjov8GBbPKYiy74gebExKJ0xG5XNZM7_yj.gbzj7xMCu9d3YhW06g0s0i_UI0GAw.ovfiWj.Qtrkx8uTJyNc4ZfLliTFoc.pMpOVGwi_AlP7Qm..H3n24ETA.7_PWO3kdzzUvCJ9TiMWTNdetvKscwX22CeJzIIgwUl_eU6K2BF5gsdaJzJN48DFDhNA2P1JNAouyKBRJQXHIMjy_HFJJcfIQXFKwbo3Q.nxan3IrpauIRJ8C3SHZkIfPiCS0US5HggllYgNvKHuRPn8thKOoQy1FPtOpdHNpkprAM9uDK2zW3maStMZTz4xsewmstJLW.2sQrrasue8vN7R6w_4_vKDK6Negu7A6huytQWft1T724ix0IxKU2xXIUBWvA.LnWN7DDuRiILsHSQlGTQnzPFh4j3zYyZDQZwgFEWIeoZYJdhtYcQVqF0thC7jwbU35f8M1N0z.xBwn3ko8V_6pe4whsLQD3UfBWqHHaBYeVfRVAQbRgmFoFceSk1Iwv2llMB52_6HMFn4jIydFcERUhyHnewjadHuSXn5wnwuIMHcs3FRbGUDzbOo5HMKH5FhiNPfm7D5RCYjxFG5Fl_od_o7jrA0mEY_laKMPGR.eyA3g5GbDLGn8CJ.v.24HZlNOrnzR8yg05WQwmgoCxKCKe9kmOvfxRWMOEKbyjLR01KHzlIuHgmji8HsXjeJglrCqO1yPN.F7C9L.0wM9mtoN7ilfvikmQ2omEFsD5qVcRLDGbDirzhtiyC7sqGOgVXsDU78NjK0G.L3NM4qRO_PJEnpm3PxlU1Av23.ZA6bHQyyrsKB0gN_e0Q9ul5GPRz.rbgl4rdKwK1RfJ9kPvKT93Ue4W7dqNyS7YtuzdVeZtngNNzE7_0sYjk1FZZ7LHw_cx4lRo6CWlHbDfef_Q1Rp0m.fXJPySHbo_FBajbbUYx8wk4WPMYXjc7UnlEGggrKdbbK6uKW9G5cNgNfGFjleNt8x9Xn2rWyVoPzb0S9AWwSYChpvhIumf3s8yxYqhHtoKvStcvrxtkj3mmYNf6oGUP400op7k3NeiiPzdUszzwLbi1fBJd8wC_dpR_nity23t4Ts9CyUDukKisRkPLhq2gFdxYLH3K4Z7as6F9OpBYLAerbcT.lYUJpR131YAsPYjxFlpi65pAEPqWko.Y6VO5m_n29oigYRBJ_vA2xhErxQZClsSulETn4GcGBpjsIAb_AtwJWFWF5JTB3rC0_uj.cZtyzjFcjthKa0fxiUQJZYSE_ANUyHFqUJvDmzKjFYWNrFsX5GOgeIfIZyaUfujguhRwB7ziMY",mdrd: "8.stswRHG4q82of2_uNyoh7yWXSu1jjlplxSDn7CJ_Y-1732665705-1.2.1.1-wL4DTg2iMOO9klmwxe_uboa7tI9ap.zjzkCs_TXNwBvgsl1zWooWTmrbDGumv2VoMSEoRZK3aITBPy7A0iGSHGkiVOWmiHFBxiN79wZoFd6BXk8TD4U_wd6NoVZvMIfOyBw02TgzSBbKVSECi1qRehPBM.EWiWdMpdC.zQn..oOfLP2eiVRQ5hCMpsqc3BMB6YuJu5wfpL_PuGHr_QeOLs1AYSRhTigExQ0y2jvlWBEXF7ONlyBZhGOosGHRHxmCZfRVOiKGqDuMUxOLKDGwgrsKaOYP51JPu.O5i0wZt8AeavNaWXDxc5BxAWia6zipfn9NdqQVl0WIOa7ArXfSvye0kk4DderdbLjKb0yBoxWjnqGId11DyjVMacSgMw4Q9GPn98uct46rL.UvBlEXOtXQfM.oizzE80wnamIM_nIhsqAl6bq9htxUD0ugqLs9gjdABFb_WaIqUWKEVqo1YXOiPqkK9Qj3mxM_BLp9.e6Np9Ixz2HIVo9WPQLQHeu7utI3Q8vKvXxIlya9Dmyzo9HCk7YjCgWOY34MEL5cxsroTJ0CEwo7dtSankybyDvbXJKlCpVXGw0crpMSDIpCLj4WM3RJ8ArVqJNr1QG40.7JZTeLpNSGW09EJ08EIfrrgBlmKeLMrZ95Ur7w6wdkuTnLvVns7KFRYHcPbV9OwztAjSD7nAeFisVV0GuO7Jub0EZ.GMuPrJkoaeJugbSB_bZsDR8vF4pa5k4yl.HhNqt9B8MytL2mHE68n5QI8Y2nvN2q4vyWMNKwnXc30Rz.1GW1GCyAneShN.l4dOcgaWDcYPLfqttm4e35OBlNfXvkDzIeUzxF2vljKd1kGH3Ce.VZ0dyJtPng9MKGvgQFtecyHUb26keiHV3T5Q5z1OG1Zhbjw0G5rcZv1BgRruZ0VYSEhMMnp8kaVvieBO3zOPZOy_umP7PSvfuFd0Rg8a9emvlmCSHrFcBKtaUqU_xnyCA8KNkOnQS_NP1yfkBn3Mh0YxUH0Ov3lIf4WSySAswhvGyzX3oJohEw_ymIEMsgz3i9G9mriVmSbRj_1z5euEK0YPC9Jl_a1tEGNcce15aj5gmeLqOYHGX_eGnX145DNxEYlRIg0icfXLhjBxRCDb0BQNxn.e9CMnnoi8ktwG2Oktu8TxAmMV14fahLxdMkGYIea3ibo3TI0bi1NxdaEZKpeWMUcp7kJLkhUegylfVm.MNM5gaR6OJfPWayCcQjSlxOx.JiiSsLaWRNq8Kz_lz_h6dn6BGX3L4jFC6YsxjJUf5O5JiEGEoCeB3CT0mzVMfLa8Y8IDvYFVXEpk1pusxp8HSKkT.CQFAXzUUpt.NhJ_rPn_dFdGFgPD6WX0ZKjXOrYLzC4YAiQaMYmqzBqGUUMfcqQxx7AWqFGoaOZsjdPsoLeX6.bUPwX3H7yaRzgT2VI2VoOxT_sivWj0lKU.eH32JLfRKsXCqQkKwjp2bgMGIrnuMNUH2c_W3pgALgAp4YrTpf9zuhZuWbI_zYEsy2E.u_AjFEeh9mxIWujj2blPHA3RSnmwzs7rpzHcrXRMXAiSK5wFpnz5XNGKHMuM9nEUuZG7afYGZTZ8JTFCuh3XAulGvT1r0pxbu4fmZiBIrmWC9MEp.0FRx9iHFYqMBi9CPw6u1ji7jZfyPsrwYsxfASP.uCnulOIZUG9AUxCdbIiqTy_gj2DqsDqbQWorUgb3BFY5iZB7pjyz3L3veqC56sPLdRE_WWmmqYL0ff_6_7XPzS5nKrMcpevpUyrnV5Uf2noNJMYJZ72kBSV9sqSdy3iticRKrUah0FrRCLAh_HTxDgvMpeluaLEgLB8WDM0qiQ.RM3eBD6OApYJTZaGszVsazm5.0NAeUd0xk7P71xyrEihphmqjXC3Rf8_hVnEsHuly7wVhWioX9VkwOJ2HrrschuQ.npcamBy0jtfwmzWm_cM8daKOg6gUjYGJQ"};var cpo = document.createElement('script');cpo.src = '/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=8e8dd872ae40ce42';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null, "\/hc\/en-us\/categories\/360001747934-Data-Science-and-Programming?__cf_chl_rt_tk=coWSg.QtP66j47jYQWJNF2GnZUBR2PDZIPtwVM4BgSc-1732665705-1.0.1.1-99yXmdiTPzeDFgfINGYGMvWHDwMUyRtCnpStisHVttk" + window._cf_chl_opt.cOgUHash);cpo.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].appendChild(cpo);}());</script></body></html>