Visualisasi
Data Science Programming
May 23, 2025
LS0tDQp0aXRsZTogIlZpc3VhbGlzYXNpIg0Kc3VidGl0bGU6ICJEYXRhIFNjaWVuY2UgUHJvZ3JhbW1pbmciDQphdXRob3I6IA0KICAiSXNuYWluaSBOdXIgSGFzYW5haCAoNTIyNDAwMDUpIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6ZG93bmN1dGU6ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZSAoMSkuY3NzIg0KICAgIHBhcmFtczoNCiAgZWNobzogZmFsc2UNCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IDcyDQotLS0NCg0KPGltZyBpZD0iSXNuYSIgc3JjPSJDOlxVc2Vyc1xBU1VTXERlc2t0b3BcU3RhdGlzdGlrYSBEYXNhclxJc25hLnBuZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCg0KIyBEYXRhc2V0DQoNCmBgYHtyLCBlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHJlYWRyKQ0KDQojIEJhY2EgZGF0YQ0KZGF0YV9iaXNuaXMgPC0gcmVhZF9jc3YoInZpc3VhbGlzYXNpLmNzdiIpDQoNCiMgVGFtcGlsa2FuIHRhYmVsIGludGVyYWt0aWYNCmRhdGF0YWJsZShkYXRhX2Jpc25pcywgDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9XaWR0aCA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoaW5nID0gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxYID0gVFJVRSksDQogICAgICAgICAgY2FwdGlvbiA9ICdUYWJlbCBJbnRlcmFrdGlmIERhdGEnKQ0KYGBgDQoNCiMgSGVhdG1hcA0KDQpgYGB7ciwgZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzY2FsZXMpDQoNCiMgSGl0dW5nIHRvdGFsIHBlbmp1YWxhbiBwZXIga2F0ZWdvcmkgcHJvZHVrIGRhbiB3aWxheWFoDQpzYWxlc19tYXRyaXggPC0gZGF0YV9iaXNuaXMgJT4lDQogIGdyb3VwX2J5KFByb2R1Y3RfQ2F0ZWdvcnksIFJlZ2lvbikgJT4lDQogIHN1bW1hcmlzZShUb3RhbF9TYWxlcyA9IHN1bShUb3RhbF9QcmljZSwgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikNCg0KIyBCdWF0IEhlYXRtYXANCmdncGxvdChzYWxlc19tYXRyaXgsIGFlcyh4ID0gUmVnaW9uLCB5ID0gUHJvZHVjdF9DYXRlZ29yeSwgZmlsbCA9IFRvdGFsX1NhbGVzKSkgKw0KICBnZW9tX3RpbGUoY29sb3IgPSAid2hpdGUiKSArDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gImxpZ2h0Ymx1ZSIsIGhpZ2ggPSAiZGFya2JsdWUiLCBsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KHByZWZpeCA9ICJScCIsIGJpZy5tYXJrID0gIi4iLCBkZWNpbWFsLm1hcmsgPSAiLCIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiSGVhdG1hcCBvZiBUb3RhbCBTYWxlcyBieSBQcm9kdWN0IENhdGVnb3J5IGFuZCBSZWdpb24iLA0KICAgIHggPSAiUmVnaW9uIiwNCiAgICB5ID0gIlByb2R1Y3QgQ2F0ZWdvcnkiLA0KICAgIGZpbGwgPSAiVG90YWwgU2FsZXMiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLA0KICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCkNCiAgKQ0KYGBgDQoNCg0KIyBTY2F0dGVyIFBsb3QNCmBgYHtyLCBlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHNjYWxlcykNCg0KZGF0YV9iaXNuaXMgPC0gZGF0YV9iaXNuaXMgJT4lDQogIG11dGF0ZSgNCiAgICBRdWFudGl0eSAgICAgPSBhcy5udW1lcmljKFF1YW50aXR5KSwNCiAgICBUb3RhbF9QcmljZSAgPSBhcy5udW1lcmljKFRvdGFsX1ByaWNlKQ0KICApICU+JQ0KICBmaWx0ZXIoIWlzLm5hKFF1YW50aXR5KSwgIWlzLm5hKFRvdGFsX1ByaWNlKSkNCg0KDQojIFNjYXR0ZXIgUGxvdA0KZ2dwbG90KGRhdGFfYmlzbmlzLCBhZXMoeCA9IFF1YW50aXR5LCB5ID0gVG90YWxfUHJpY2UpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjYsIGNvbG9yID0gImRhcmtvcmFuZ2UiLCBzaXplID0gMikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZG9sbGFyX2Zvcm1hdChwcmVmaXggPSAiUnAiLCBiaWcubWFyayA9ICIuIiwgZGVjaW1hbC5tYXJrID0gIiwiKSkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlNjYXR0ZXIgUGxvdDogUXVhbnRpdHkgdnMgVG90YWwgUHJpY2UiLA0KICAgIHggPSAiUXVhbnRpdHkiLA0KICAgIHkgPSAiVG90YWwgUHJpY2UgKFJwKSINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksDQogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMikNCiAgKQ0KYGBgDQoNCiMgQnViYmxlIENoYXJ0DQoNCmBgYHtyLCBlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHNjYWxlcykNCg0KIyBQYXN0aWthbiBkYXRhIG51bWVyaWsNCmRhdGFfYmlzbmlzIDwtIGRhdGFfYmlzbmlzICU+JQ0KICBtdXRhdGUoDQogICAgUXVhbnRpdHkgPSBhcy5udW1lcmljKFF1YW50aXR5KSwNCiAgICBUb3RhbF9QcmljZSA9IGFzLm51bWVyaWMoVG90YWxfUHJpY2UpLA0KICAgIFByaWNlX3Blcl9Vbml0ID0gYXMubnVtZXJpYyhQcmljZV9wZXJfVW5pdCkNCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShRdWFudGl0eSksICFpcy5uYShUb3RhbF9QcmljZSksICFpcy5uYShQcmljZV9wZXJfVW5pdCkpDQoNCiMgQnViYmxlIENoYXJ0DQpnZ3Bsb3QoZGF0YV9iaXNuaXMsIGFlcyh4ID0gUXVhbnRpdHksIHkgPSBUb3RhbF9QcmljZSwgc2l6ZSA9IFByaWNlX3Blcl9Vbml0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC41LCBjb2xvciA9ICJzdGVlbGJsdWUiKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMSwgMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KHByZWZpeCA9ICJScCIsIGJpZy5tYXJrID0gIi4iLCBkZWNpbWFsLm1hcmsgPSAiLCIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQnViYmxlIENoYXJ0OiBRdWFudGl0eSB2cyBUb3RhbCBQcmljZSAoU2l6ZSA9IFByaWNlIHBlciBVbml0KSIsDQogICAgeCA9ICJRdWFudGl0eSIsDQogICAgeSA9ICJUb3RhbCBQcmljZSAoUnApIiwNCiAgICBzaXplID0gIlByaWNlIHBlciBVbml0Ig0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGZhY2UgPSAiYm9sZCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKQ0KICApDQpgYGANCg0KIyBDb3JyZWxhdGlvbiBNYXRyaXgNCg0KYGBge3IsIGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShzY2FsZXMpDQoNCiMgUGlsaWggaGFueWEga29sb20gbnVtZXJpaw0KbnVtZXJpY19kYXRhIDwtIGRhdGFfYmlzbmlzW3NhcHBseShkYXRhX2Jpc25pcywgaXMubnVtZXJpYyldDQoNCiMgQ29tcHV0ZSBDb3JyZWxhdGlvbiBNYXRyaXgNCmNvcl9tYXRyaXggPC0gY29yKG51bWVyaWNfZGF0YSwgdXNlID0gImNvbXBsZXRlLm9icyIpDQoNCiMgVWJhaCBrZSBmb3JtYXQgbG9uZyB1bnR1ayBnZ3Bsb3QNCm1lbHRlZF9jb3IgPC0gbWVsdChjb3JfbWF0cml4KQ0KDQojIFBsb3QgSGVhdG1hcA0KZ2dwbG90KG1lbHRlZF9jb3IsIGFlcyh4ID0gVmFyMiwgeSA9IFZhcjEsIGZpbGwgPSB2YWx1ZSkpICsNCiAgZ2VvbV90aWxlKGNvbG9yID0gIndoaXRlIikgKw0KICBzY2FsZV9maWxsX2dyYWRpZW50MigNCiAgICBsb3cgPSAicmVkIiwgbWlkID0gIndoaXRlIiwgaGlnaCA9ICJibHVlIiwgDQogICAgbWlkcG9pbnQgPSAwLCBsaW1pdCA9IGMoLTEsMSksIA0KICAgIG5hbWUgPSAiQ29ycmVsYXRpb24iDQogICkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQodmFsdWUsIDIpKSwgc2l6ZSA9IDEpICsNCiAgbGFicyh0aXRsZSA9ICJDb3JyZWxhdGlvbiBNYXRyaXgiLCB4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgaGp1c3QgPSAxKSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KQ0KICApDQpgYGANCg0KIyBMaW5lIENoYXJ0DQoNCmBgYHtyLCBlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCiMgTG9hZCBsaWJyYXJpZXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQpkYXRhIDwtIHJlYWQuY3N2KCJ2aXN1YWxpc2FzaS5jc3YiLCBoZWFkZXIgPSBUUlVFKQ0KZGF0YSRUcmFuc2FjdGlvbl9EYXRlIDwtIGFzLkRhdGUoZGF0YSRUcmFuc2FjdGlvbl9EYXRlKQ0KDQojIEFncmVnYXNpIFRvdGFsIFNhbGVzIHBlciBIYXJpDQpkYWlseV9zYWxlcyA8LSBkYXRhICU+JQ0KICBncm91cF9ieShUcmFuc2FjdGlvbl9EYXRlKSAlPiUNCiAgc3VtbWFyaXNlKFRvdGFsX1ByaWNlID0gc3VtKFRvdGFsX1ByaWNlLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgdW5ncm91cCgpDQoNCiMgTGluZSBDaGFydCBkZW5nYW4gZm9ybWF0IFJ1cGlhaA0KZm9ybWF0X3J1cGlhaCA8LSBmdW5jdGlvbih4KSB7DQogIHBhc3RlMCgiUnAiLCBmb3JtYXRDKHgsIGZvcm1hdCA9ICJmIiwgYmlnLm1hcmsgPSAiLiIsIGRpZ2l0cyA9IDApKQ0KfQ0KDQpnZ3Bsb3QoZGFpbHlfc2FsZXMsIGFlcyh4ID0gVHJhbnNhY3Rpb25fRGF0ZSwgeSA9IFRvdGFsX1ByaWNlKSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAic3RlZWxibHVlIiwgc2l6ZSA9IDEpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGZvcm1hdF9ydXBpYWgpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJEYWlseSBUb3RhbCBTYWxlcyBPdmVyIFRpbWUiLA0KICAgIHggPSAiVHJhbnNhY3Rpb24gRGF0ZSIsDQogICAgeSA9ICJUb3RhbCBTYWxlcyAoUnApIg0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGZhY2UgPSAiYm9sZCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpDQogICkNCmBgYA0KDQoNCiMgQXJlYSBDaGFydA0KDQpgYGB7ciwgZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzY2FsZXMpDQoNCiMgRnVuZ3NpIGZvcm1hdCBSdXBpYWgNCmZvcm1hdF9ydXBpYWggPC0gZnVuY3Rpb24oeCkgew0KICBwYXN0ZTAoIlJwIiwgZm9ybWF0Qyh4LCBmb3JtYXQgPSAiZiIsIGJpZy5tYXJrID0gIi4iLCBkaWdpdHMgPSAwKSkNCn0NCg0KIyBBcmVhIGNoYXJ0DQpnZ3Bsb3QoZGFpbHlfc2FsZXMsIGFlcyh4ID0gVHJhbnNhY3Rpb25fRGF0ZSwgeSA9IFRvdGFsX1ByaWNlKSkgKw0KICBnZW9tX2FyZWEoZmlsbCA9ICJzdGVlbGJsdWUiLCBhbHBoYSA9IDAuNSkgKyAgICAgICAjIEFyZWEgYmVyd2FybmEgYmlydSB0cmFuc3BhcmFuDQogIGdlb21fbGluZShjb2xvciA9ICJzdGVlbGJsdWUiLCBzaXplID0gMSkgKyAgICAgICAgICMgR2FyaXMgZGkgYXRhcyBhcmVhDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBmb3JtYXRfcnVwaWFoKSArICAgICAgICMgRm9ybWF0IHN1bWJ1IFkga2UgUnVwaWFoDQogIGxhYnMoDQogICAgdGl0bGUgPSAiRGFpbHkgVG90YWwgU2FsZXMgT3ZlciBUaW1lIChBcmVhIENoYXJ0KSIsDQogICAgeCA9ICJUcmFuc2FjdGlvbiBEYXRlIiwNCiAgICB5ID0gIlRvdGFsIFNhbGVzIChScCkiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkNCiAgKQ0KYGBg