[{"data":1,"prerenderedAt":9733},["ShallowReactive",2],{"navigation_docs":3,"-ai-python-numpy-pandas":3497,"-ai-python-numpy-pandas-surround":9728},[4,1707,1912,2366,2547,2673,2880,3002,3052,3109,3143,3269,3346,3360,3423,3440,3493],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"Робота з файлами: C-стиль (stdio.h)","\u002Fcpp\u002Fc-style-files","02.cpp\u002F47.c-style-files",{"title":1905,"path":1906,"stem":1907},"Робота з файлами: C++-стиль (fstream)","\u002Fcpp\u002Fcpp-style-files","02.cpp\u002F48.cpp-style-files",{"title":1909,"path":1910,"stem":1911},"План навчання: Курс C++ — Продовження (Статті 29–60+)","\u002Fcpp\u002Fcurriculum-plan","02.cpp\u002Fcurriculum-plan",{"title":1913,"icon":1914,"path":1915,"stem":1916,"children":1917,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[1918,1944,1998,2020,2324,2362],{"title":1919,"icon":1920,"path":1921,"stem":1922,"children":1923,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[1924,1928,1932,1936,1940],{"title":1925,"path":1926,"stem":1927},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":1929,"path":1930,"stem":1931},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":1933,"path":1934,"stem":1935},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":1937,"path":1938,"stem":1939},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":1941,"path":1942,"stem":1943},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":1945,"icon":1946,"path":1947,"stem":1948,"children":1949,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[1950,1954,1958,1962,1966,1970,1974,1978,1982,1986,1990,1994],{"title":1951,"path":1952,"stem":1953},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":1955,"path":1956,"stem":1957},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":1959,"path":1960,"stem":1961},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":1963,"path":1964,"stem":1965},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":1967,"path":1968,"stem":1969},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":1971,"path":1972,"stem":1973},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":1975,"path":1976,"stem":1977},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":1979,"path":1980,"stem":1981},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":1983,"path":1984,"stem":1985},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":1987,"path":1988,"stem":1989},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":1991,"path":1992,"stem":1993},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":1995,"path":1996,"stem":1997},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":1999,"icon":2000,"path":2001,"stem":2002,"children":2003,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[2004,2008,2012,2016],{"title":2005,"path":2006,"stem":2007},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2009,"path":2010,"stem":2011},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2013,"path":2014,"stem":2015},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2017,"path":2018,"stem":2019},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2021,"icon":2022,"path":2023,"stem":2024,"children":2025},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2026,2027,2031,2035,2039,2043,2106,2141,2293],{"title":2021,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2032,"path":2033,"stem":2034},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2036,"path":2037,"stem":2038},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2040,"path":2041,"stem":2042},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2044,"icon":132,"path":2045,"stem":2046,"children":2047},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2048,2050,2054,2058,2062,2066,2070,2074,2078,2082,2086,2090,2094,2098,2102],{"title":2049,"path":2045,"stem":2046},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2051,"path":2052,"stem":2053},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2055,"path":2056,"stem":2057},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2059,"path":2060,"stem":2061},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2063,"path":2064,"stem":2065},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2067,"path":2068,"stem":2069},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2071,"path":2072,"stem":2073},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2075,"path":2076,"stem":2077},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2079,"path":2080,"stem":2081},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2083,"path":2084,"stem":2085},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2087,"path":2088,"stem":2089},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2091,"path":2092,"stem":2093},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2095,"path":2096,"stem":2097},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2099,"path":2100,"stem":2101},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2103,"path":2104,"stem":2105},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2107,"icon":2022,"path":2108,"stem":2109,"children":2110},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2111,2113,2117,2121,2125,2129,2133,2137],{"title":2112,"path":2108,"stem":2109},"React Router: Навігаційна система сучасного вебу",{"title":2114,"path":2115,"stem":2116},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2118,"path":2119,"stem":2120},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2122,"path":2123,"stem":2124},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2126,"path":2127,"stem":2128},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2130,"path":2131,"stem":2132},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2134,"path":2135,"stem":2136},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2138,"path":2139,"stem":2140},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2142,"icon":132,"path":2143,"stem":2144,"children":2145},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2146,2148,2164,2193,2202,2223,2239,2268],{"title":2147,"path":2143,"stem":2144},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2149,"stem":2150,"children":2151,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2152,2156,2160],{"title":2153,"path":2154,"stem":2155},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2157,"path":2158,"stem":2159},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2161,"path":2162,"stem":2163},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2165,"icon":132,"path":2166,"stem":2167,"children":2168,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2169,2173,2177,2181,2185,2189],{"title":2170,"path":2171,"stem":2172},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2174,"path":2175,"stem":2176},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2178,"path":2179,"stem":2180},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2182,"path":2183,"stem":2184},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2186,"path":2187,"stem":2188},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2190,"path":2191,"stem":2192},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2194,"icon":132,"path":2195,"stem":2196,"children":2197,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2198],{"title":2199,"path":2200,"stem":2201},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2203,"icon":132,"path":2204,"stem":2205,"children":2206,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2207,2211,2215,2219],{"title":2208,"path":2209,"stem":2210},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2212,"path":2213,"stem":2214},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2216,"path":2217,"stem":2218},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2220,"path":2221,"stem":2222},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2224,"icon":92,"path":2225,"stem":2226,"children":2227,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2228,2232,2236],{"title":2229,"path":2230,"stem":2231},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2233,"path":2234,"stem":2235},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2083,"path":2237,"stem":2238},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2240,"icon":132,"path":2241,"stem":2242,"children":2243,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2244,2248,2252,2256,2260,2264],{"title":2245,"path":2246,"stem":2247},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2249,"path":2250,"stem":2251},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2253,"path":2254,"stem":2255},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2257,"path":2258,"stem":2259},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2261,"path":2262,"stem":2263},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2265,"path":2266,"stem":2267},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2269,"icon":132,"path":2270,"stem":2271,"children":2272,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2273,2277,2281,2285,2289],{"title":2274,"path":2275,"stem":2276},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2278,"path":2279,"stem":2280},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2282,"path":2283,"stem":2284},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2286,"path":2287,"stem":2288},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2290,"path":2291,"stem":2292},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2294,"icon":132,"path":2295,"stem":2296,"children":2297},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2298,2300,2304,2308,2312,2316,2320],{"title":2299,"path":2295,"stem":2296},"UI Бібліотеки в React",{"title":2301,"path":2302,"stem":2303},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2305,"path":2306,"stem":2307},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2309,"path":2310,"stem":2311},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2313,"path":2314,"stem":2315},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2317,"path":2318,"stem":2319},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2321,"path":2322,"stem":2323},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2325,"icon":2326,"path":2327,"stem":2328,"children":2329,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2330,2334,2338,2342,2346,2350,2354,2358],{"title":2331,"path":2332,"stem":2333},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2335,"path":2336,"stem":2337},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2339,"path":2340,"stem":2341},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2343,"path":2344,"stem":2345},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2347,"path":2348,"stem":2349},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2351,"path":2352,"stem":2353},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2355,"path":2356,"stem":2357},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2359,"path":2360,"stem":2361},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2363,"path":2364,"stem":2365},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2367,"icon":2368,"path":2369,"stem":2370,"children":2371,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2372,2375,2378,2382,2386,2390,2394],{"title":162,"path":2373,"stem":2374},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2376,"stem":2377},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2379,"path":2380,"stem":2381},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2383,"path":2384,"stem":2385},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2387,"path":2388,"stem":2389},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2391,"path":2392,"stem":2393},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2395,"path":2396,"stem":2397,"children":2398,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2399,2403,2407,2411,2415,2419,2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503,2507,2511,2515,2519,2523,2527,2531,2535,2539,2543],{"title":2400,"path":2401,"stem":2402},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2404,"path":2405,"stem":2406},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2408,"path":2409,"stem":2410},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2412,"path":2413,"stem":2414},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2416,"path":2417,"stem":2418},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2420,"path":2421,"stem":2422},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2424,"path":2425,"stem":2426},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2428,"path":2429,"stem":2430},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2432,"path":2433,"stem":2434},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2436,"path":2437,"stem":2438},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2440,"path":2441,"stem":2442},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2444,"path":2445,"stem":2446},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2448,"path":2449,"stem":2450},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2452,"path":2453,"stem":2454},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2456,"path":2457,"stem":2458},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2460,"path":2461,"stem":2462},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2464,"path":2465,"stem":2466},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2468,"path":2469,"stem":2470},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2472,"path":2473,"stem":2474},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2476,"path":2477,"stem":2478},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2480,"path":2481,"stem":2482},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2484,"path":2485,"stem":2486},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2488,"path":2489,"stem":2490},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2492,"path":2493,"stem":2494},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2496,"path":2497,"stem":2498},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2500,"path":2501,"stem":2502},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2504,"path":2505,"stem":2506},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2508,"path":2509,"stem":2510},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2512,"path":2513,"stem":2514},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2516,"path":2517,"stem":2518},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2520,"path":2521,"stem":2522},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2524,"path":2525,"stem":2526},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2528,"path":2529,"stem":2530},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2532,"path":2533,"stem":2534},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2536,"path":2537,"stem":2538},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2540,"path":2541,"stem":2542},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2544,"path":2545,"stem":2546},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2548,"icon":2549,"path":2550,"stem":2551,"children":2552,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2553,2557,2560,2564,2568,2572,2576,2580,2584,2588,2592,2596,2600,2604,2608,2669],{"title":2554,"path":2555,"stem":2556},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2558,"stem":2559},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2561,"path":2562,"stem":2563},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2565,"path":2566,"stem":2567},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2569,"path":2570,"stem":2571},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2573,"path":2574,"stem":2575},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2577,"path":2578,"stem":2579},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2581,"path":2582,"stem":2583},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2585,"path":2586,"stem":2587},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2589,"path":2590,"stem":2591},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2593,"path":2594,"stem":2595},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2597,"path":2598,"stem":2599},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2601,"path":2602,"stem":2603},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2605,"path":2606,"stem":2607},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2609,"icon":92,"path":2610,"stem":2611,"children":2612,"page":59},"FastAPI","\u002Fpython\u002Ffastapi","05.python\u002Ffastapi",[2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665],{"title":2614,"path":2615,"stem":2616},"Глибокий Typing та Pydantic v2 — від анотацій до валідації","\u002Fpython\u002Ffastapi\u002Ftyping-pydantic","05.python\u002Ffastapi\u002F15.typing-pydantic",{"title":2618,"path":2619,"stem":2620},"WSGI, ASGI та Python Web-екосистема","\u002Fpython\u002Ffastapi\u002Fwsgi-asgi-ecosystem","05.python\u002Ffastapi\u002F16.wsgi-asgi-ecosystem",{"title":2622,"path":2623,"stem":2624},"FastAPI: Перший додаток, Uvicorn та OpenAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-intro","05.python\u002Ffastapi\u002F17.fastapi-intro",{"title":2626,"path":2627,"stem":2628},"Маршрутизація, параметри запитів та APIRouter","\u002Fpython\u002Ffastapi\u002Ffastapi-routing-params","05.python\u002Ffastapi\u002F18.fastapi-routing-params",{"title":2630,"path":2631,"stem":2632},"Pydantic v2 у FastAPI — схеми, валідація та серіалізація","\u002Fpython\u002Ffastapi\u002Ffastapi-pydantic-schemas","05.python\u002Ffastapi\u002F19.fastapi-pydantic-schemas",{"title":2634,"path":2635,"stem":2636},"Dependency Injection — серце архітектури FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-dependency-injection","05.python\u002Ffastapi\u002F20.fastapi-dependency-injection",{"title":2638,"path":2639,"stem":2640},"Обробка помилок, Middleware та CORS у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-errors-middleware","05.python\u002Ffastapi\u002F21.fastapi-errors-middleware",{"title":2642,"path":2643,"stem":2644},"SQLAlchemy 2.0 — ORM, Core та Async Engine","\u002Fpython\u002Ffastapi\u002Fsqlalchemy-orm","05.python\u002Ffastapi\u002F22.sqlalchemy-orm",{"title":2646,"path":2647,"stem":2648},"Alembic — міграції бази даних","\u002Fpython\u002Ffastapi\u002Falembic-migrations","05.python\u002Ffastapi\u002F23.alembic-migrations",{"title":2650,"path":2651,"stem":2652},"Repository Pattern та Clean Architecture у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-repository-clean-arch","05.python\u002Ffastapi\u002F24.fastapi-repository-clean-arch",{"title":2654,"path":2655,"stem":2656},"Автентифікація та авторизація — JWT, OAuth2, RBAC","\u002Fpython\u002Ffastapi\u002Ffastapi-auth-security","05.python\u002Ffastapi\u002F25.fastapi-auth-security",{"title":2658,"path":2659,"stem":2660},"Тестування FastAPI — pytest, httpx, fixtures","\u002Fpython\u002Ffastapi\u002Ffastapi-testing","05.python\u002Ffastapi\u002F26.fastapi-testing",{"title":2662,"path":2663,"stem":2664},"Async на повну — Background Tasks, WebSockets, SSE та Celery","\u002Fpython\u002Ffastapi\u002Ffastapi-async-advanced","05.python\u002Ffastapi\u002F27.fastapi-async-advanced",{"title":2666,"path":2667,"stem":2668},"Deployment — Docker, CI\u002FCD, Monitoring","\u002Fpython\u002Ffastapi\u002Ffastapi-deployment","05.python\u002Ffastapi\u002F28.fastapi-deployment",{"title":2670,"path":2671,"stem":2672},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2674,"icon":2675,"path":2676,"stem":2677,"children":2678,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2679,2709,2732,2769,2798,2816,2850,2862,2871],{"title":2680,"icon":2681,"path":2682,"stem":2683,"children":2684,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2685,2689,2693,2697,2701,2705],{"title":2686,"path":2687,"stem":2688},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2690,"path":2691,"stem":2692},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2694,"path":2695,"stem":2696},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2698,"path":2699,"stem":2700},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2702,"path":2703,"stem":2704},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2706,"path":2707,"stem":2708},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2710,"icon":2675,"path":2711,"stem":2712,"children":2713,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2714,2718,2724,2728],{"title":2715,"path":2716,"stem":2717},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2719,"path":2720,"stem":2721,"children":2722},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2723],{"title":2719,"path":2720,"stem":2721},{"title":2725,"path":2726,"stem":2727},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2729,"path":2730,"stem":2731},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2733,"icon":2675,"path":2734,"stem":2735,"children":2736,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2737,2741,2745,2749,2753,2757,2761,2765],{"title":2738,"path":2739,"stem":2740},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2742,"path":2743,"stem":2744},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2746,"path":2747,"stem":2748},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2750,"path":2751,"stem":2752},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2754,"path":2755,"stem":2756},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2758,"path":2759,"stem":2760},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2762,"path":2763,"stem":2764},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2766,"path":2767,"stem":2768},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2770,"icon":2675,"path":2771,"stem":2772,"children":2773,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2774,2778,2782,2786,2790,2794],{"title":2775,"path":2776,"stem":2777},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2779,"path":2780,"stem":2781},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2783,"path":2784,"stem":2785},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2787,"path":2788,"stem":2789},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2791,"path":2792,"stem":2793},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2795,"path":2796,"stem":2797},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2799,"icon":2800,"path":2801,"stem":2802,"children":2803,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2804,2808,2812],{"title":2805,"path":2806,"stem":2807},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2809,"path":2810,"stem":2811},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":2813,"path":2814,"stem":2815},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":2817,"icon":2818,"path":2819,"stem":2820,"children":2821,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[2822,2826,2830,2834,2838,2842,2846],{"title":2823,"path":2824,"stem":2825},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":2827,"path":2828,"stem":2829},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":2831,"path":2832,"stem":2833},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":2835,"path":2836,"stem":2837},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":2839,"path":2840,"stem":2841},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":2843,"path":2844,"stem":2845},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":2847,"path":2848,"stem":2849},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":2847,"icon":793,"path":2851,"stem":2852,"children":2853,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[2854,2858],{"title":2855,"path":2856,"stem":2857},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":2859,"path":2860,"stem":2861},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":2863,"icon":2864,"path":2865,"stem":2866,"children":2867,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[2868],{"title":2863,"path":2869,"stem":2870},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":2872,"icon":2873,"path":2874,"stem":2875,"children":2876,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[2877],{"title":2872,"path":2878,"stem":2879},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":2881,"icon":2882,"path":2883,"stem":2884,"children":2885,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[2886,2962],{"title":2887,"icon":2888,"path":2889,"stem":2890,"children":2891},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[2892,2894,2898,2902,2906,2910,2914,2918,2922,2926,2930,2934,2938,2942,2946,2950,2954,2958],{"title":2893,"path":2889,"stem":2890},"Docker: від нуля до production",{"title":2895,"path":2896,"stem":2897},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":2899,"path":2900,"stem":2901},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":2903,"path":2904,"stem":2905},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":2907,"path":2908,"stem":2909},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":2911,"path":2912,"stem":2913},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":2915,"path":2916,"stem":2917},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":2919,"path":2920,"stem":2921},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":2923,"path":2924,"stem":2925},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":2927,"path":2928,"stem":2929},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":2931,"path":2932,"stem":2933},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":2935,"path":2936,"stem":2937},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":2939,"path":2940,"stem":2941},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":2943,"path":2944,"stem":2945},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":2947,"path":2948,"stem":2949},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":2951,"path":2952,"stem":2953},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":2955,"path":2956,"stem":2957},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":2959,"path":2960,"stem":2961},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":2963,"icon":2964,"path":2965,"stem":2966,"children":2967},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[2968,2970,2974,2978,2982,2986,2990,2994,2998],{"title":2969,"path":2965,"stem":2966},"Kubernetes: від розробки до production",{"title":2971,"path":2972,"stem":2973},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":2975,"path":2976,"stem":2977},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":2979,"path":2980,"stem":2981},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":2983,"path":2984,"stem":2985},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":2987,"path":2988,"stem":2989},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":2991,"path":2992,"stem":2993},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":2995,"path":2996,"stem":2997},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":2999,"path":3000,"stem":3001},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":3003,"icon":3004,"path":3005,"stem":3006,"children":3007,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[3008,3012,3016,3020,3024,3028,3032,3036,3040,3044,3048],{"title":3009,"path":3010,"stem":3011},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":3013,"path":3014,"stem":3015},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":3017,"path":3018,"stem":3019},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":3021,"path":3022,"stem":3023},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":3025,"path":3026,"stem":3027},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":3029,"path":3030,"stem":3031},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":3033,"path":3034,"stem":3035},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":3037,"path":3038,"stem":3039},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":3041,"path":3042,"stem":3043},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":3045,"path":3046,"stem":3047},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":3049,"path":3050,"stem":3051},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":3053,"icon":943,"path":3054,"stem":3055,"children":3056,"page":59},"DDD","\u002Fddd","10.ddd",[3057,3061,3065,3069,3073,3077,3081,3085,3089,3093,3097,3101,3105],{"title":3058,"path":3059,"stem":3060},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":3062,"path":3063,"stem":3064},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3066,"path":3067,"stem":3068},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3070,"path":3071,"stem":3072},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3074,"path":3075,"stem":3076},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3078,"path":3079,"stem":3080},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3082,"path":3083,"stem":3084},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3086,"path":3087,"stem":3088},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3090,"path":3091,"stem":3092},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3094,"path":3095,"stem":3096},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3098,"path":3099,"stem":3100},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3102,"path":3103,"stem":3104},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3106,"path":3107,"stem":3108},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3110,"icon":3111,"path":3112,"stem":3113,"children":3114,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3115,3119,3123,3127,3131,3135,3139],{"title":3116,"path":3117,"stem":3118},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3120,"path":3121,"stem":3122},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3124,"path":3125,"stem":3126},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3128,"path":3129,"stem":3130},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3132,"path":3133,"stem":3134},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3136,"path":3137,"stem":3138},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3140,"path":3141,"stem":3142},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3144,"icon":3145,"path":3146,"stem":3147,"children":3148,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3149,3153,3157,3161,3165,3169,3173,3177,3181,3185,3189,3193,3197,3201,3205,3209,3213,3217,3221,3225,3229,3233,3237,3241,3245,3249,3253,3257,3261,3265],{"title":3150,"path":3151,"stem":3152},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3154,"path":3155,"stem":3156},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3158,"path":3159,"stem":3160},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3162,"path":3163,"stem":3164},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3166,"path":3167,"stem":3168},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3170,"path":3171,"stem":3172},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3174,"path":3175,"stem":3176},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3178,"path":3179,"stem":3180},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3182,"path":3183,"stem":3184},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3186,"path":3187,"stem":3188},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3190,"path":3191,"stem":3192},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3194,"path":3195,"stem":3196},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3198,"path":3199,"stem":3200},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3202,"path":3203,"stem":3204},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3206,"path":3207,"stem":3208},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3210,"path":3211,"stem":3212},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3214,"path":3215,"stem":3216},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3218,"path":3219,"stem":3220},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3222,"path":3223,"stem":3224},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3226,"path":3227,"stem":3228},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3230,"path":3231,"stem":3232},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3234,"path":3235,"stem":3236},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3238,"path":3239,"stem":3240},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3242,"path":3243,"stem":3244},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3246,"path":3247,"stem":3248},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3250,"path":3251,"stem":3252},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3254,"path":3255,"stem":3256},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3258,"path":3259,"stem":3260},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3262,"path":3263,"stem":3264},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3266,"path":3267,"stem":3268},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3270,"path":3271,"stem":3272,"children":3273,"page":59},"AWS","\u002Faws","13.aws",[3274,3278,3282,3286,3290,3294,3298,3302,3306,3310,3314,3318,3322,3326,3330,3334,3338,3342],{"title":3275,"path":3276,"stem":3277},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3279,"path":3280,"stem":3281},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3283,"path":3284,"stem":3285},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3287,"path":3288,"stem":3289},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3291,"path":3292,"stem":3293},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3295,"path":3296,"stem":3297},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3299,"path":3300,"stem":3301},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3303,"path":3304,"stem":3305},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3307,"path":3308,"stem":3309},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3311,"path":3312,"stem":3313},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3315,"path":3316,"stem":3317},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3319,"path":3320,"stem":3321},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3323,"path":3324,"stem":3325},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3327,"path":3328,"stem":3329},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3331,"path":3332,"stem":3333},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3335,"path":3336,"stem":3337},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3339,"path":3340,"stem":3341},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3343,"path":3344,"stem":3345},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3347,"path":3348,"stem":3349,"children":3350,"page":59},"Ai Development","\u002Fai-development","14.ai-development",[3351],{"title":3352,"path":3353,"stem":3354,"children":3355,"page":59},"Foundations","\u002Fai-development\u002Ffoundations","14.ai-development\u002F00.foundations",[3356],{"title":3357,"path":3358,"stem":3359},"Модуль 0.1. Що таке Large Language Model (LLM)","\u002Fai-development\u002Ffoundations\u002Fwhat-is-llm","14.ai-development\u002F00.foundations\u002F01.what-is-llm",{"title":3361,"path":3362,"stem":3363,"children":3364},"React Native","\u002Freact-native","15.react-native",[3365,3367,3371,3375,3379,3383,3387,3391,3395,3399,3403,3407,3411,3415,3419],{"title":3361,"path":3362,"stem":3366},"15.react-native\u002Findex",{"title":3368,"path":3369,"stem":3370},"React Native — навіщо він потрібен","\u002Freact-native\u002Fwhy-react-native","15.react-native\u002F01.why-react-native",{"title":3372,"path":3373,"stem":3374},"Як влаштований React Native «під капотом»","\u002Freact-native\u002Freact-native-architecture","15.react-native\u002F02.react-native-architecture",{"title":3376,"path":3377,"stem":3378},"Expo і класичний React Native — два шляхи одного фреймворку","\u002Freact-native\u002Fexpo-vs-cli-landscape","15.react-native\u002F03.expo-vs-cli-landscape",{"title":3380,"path":3381,"stem":3382},"Середовище Expo — перший запуск","\u002Freact-native\u002Fexpo-setup-and-tooling","15.react-native\u002F04.expo-setup-and-tooling",{"title":3384,"path":3385,"stem":3386},"Структура проєкту та перші UI-примітиви","\u002Freact-native\u002Fproject-structure-and-conventions","15.react-native\u002F05.project-structure-and-conventions",{"title":3388,"path":3389,"stem":3390},"Базові компоненти React Native","\u002Freact-native\u002Fcore-components","15.react-native\u002F06.core-components",{"title":3392,"path":3393,"stem":3394},"Flexbox і layout у React Native","\u002Freact-native\u002Fflexbox-and-layout","15.react-native\u002F07.flexbox-and-layout",{"title":3396,"path":3397,"stem":3398},"StyleSheet і теми (light \u002F dark)","\u002Freact-native\u002Fstylesheet-and-theming","15.react-native\u002F08.stylesheet-and-theming",{"title":3400,"path":3401,"stem":3402},"Списки та віртуалізація","\u002Freact-native\u002Flists-and-virtualization","15.react-native\u002F09.lists-and-virtualization",{"title":3404,"path":3405,"stem":3406},"Форми, ввід і валідація","\u002Freact-native\u002Fforms-input-validation","15.react-native\u002F10.forms-input-validation",{"title":3408,"path":3409,"stem":3410},"Основи Expo Router","\u002Freact-native\u002Fexpo-router-basics","15.react-native\u002F11.expo-router-basics",{"title":3412,"path":3413,"stem":3414},"Вкладені навігатори та модалки","\u002Freact-native\u002Fnested-navigators-and-modals","15.react-native\u002F12.nested-navigators-and-modals",{"title":3416,"path":3417,"stem":3418},"Deep linking і параметри маршрутів","\u002Freact-native\u002Fdeep-linking-and-params","15.react-native\u002F13.deep-linking-and-params",{"title":3420,"path":3421,"stem":3422},"Робота з мережею та життєвий цикл застосунку","\u002Freact-native\u002Fnetworking-and-app-lifecycle","15.react-native\u002F14.networking-and-app-lifecycle",{"title":3424,"path":3425,"stem":3426,"children":3427,"page":59},"Ai Python","\u002Fai-python","16.ai-python",[3428,3432,3436],{"title":3429,"path":3430,"stem":3431},"Вступ до штучного інтелекту та машинного навчання","\u002Fai-python\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai",{"title":3433,"path":3434,"stem":3435},"Знайомство з Jupyter Notebook та JupyterLab","\u002Fai-python\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook",{"title":3437,"path":3438,"stem":3439},"Робота з даними з використанням NumPy і pandas","\u002Fai-python\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas",{"title":3441,"path":3442,"stem":3443,"children":3444,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[3445,3449,3453,3457,3461,3465,3469,3473,3477,3481,3485,3489],{"title":3446,"path":3447,"stem":3448},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":3450,"path":3451,"stem":3452},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":3454,"path":3455,"stem":3456},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":3458,"path":3459,"stem":3460},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":3462,"path":3463,"stem":3464},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":3466,"path":3467,"stem":3468},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":3470,"path":3471,"stem":3472},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":3474,"path":3475,"stem":3476},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":3478,"path":3479,"stem":3480},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":3482,"path":3483,"stem":3484},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":3486,"path":3487,"stem":3488},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":3490,"path":3491,"stem":3492},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":3494,"path":3495,"stem":3496},"Тестування компонентів діаграм","\u002Ftest-components","98.test-components",{"id":3498,"title":3437,"body":3499,"description":9722,"extension":9723,"links":9724,"meta":9725,"navigation":3562,"path":3438,"seo":9726,"stem":3439,"__hash__":9727},"docs\u002F16.ai-python\u002F03.numpy-pandas.md",{"type":3500,"value":3501,"toc":9681},"minimark",[3502,3506,3511,3515,3518,3531,3534,3968,3976,3994,4001,4173,4178,4184,4187,4190,4194,4199,4202,4270,4276,4284,4291,4302,4305,4313,4352,4355,4359,4369,4375,4381,4392,4397,4401,4461,4481,4505,4509,4738,4742,4745,4831,4845,4849,4852,5014,5017,5156,5200,5204,5207,5450,5454,5457,5611,5616,5620,5859,5866,5953,5957,6021,6035,6039,6159,6161,6165,6169,6174,6181,6231,6250,6252,6256,6266,6360,6363,6482,6487,6492,6584,6589,6771,6776,6887,6889,6893,6907,6916,6921,7079,7112,7117,7137,7141,7144,7149,7245,7254,7332,7341,7402,7442,7447,7558,7563,7649,7654,7720,7722,7726,7729,7733,7736,7749,7756,7917,7935,7940,8023,8027,8128,8151,8155,8296,8303,8305,8309,8316,8319,8352,8362,8372,8409,8438,8451,8462,8469,8524,8539,8546,8549,8558,8657,8665,8713,8721,8728,8737,8785,8793,8836,8841,8876,8923,8927,8933,9016,9019,9023,9028,9121,9123,9127,9568,9570,9574,9664,9677],[3503,3504,3437],"h1",{"id":3505},"робота-з-даними-з-використанням-numpy-і-pandas",[3507,3508,3510],"h2",{"id":3509},"завдання-яке-розкриє-правду-про-чистий-python","Завдання, яке розкриє правду про чистий Python",[3512,3513,3514],"p",{},"Уявіть: вам надіслали CSV-файл із 10 000 рядків — дані про продажі магазину за рік. Кожен рядок — одна транзакція: дата, категорія товару, ціна, кількість.",[3512,3516,3517],{},"Ваш менеджер хоче знати:",[3519,3520,3521,3525,3528],"ol",{},[3522,3523,3524],"li",{},"Яка середня ціна товарів у категорії «Електроніка»?",[3522,3526,3527],{},"Який товар продали найбільше разів?",[3522,3529,3530],{},"Скільки продажів було у грудні?",[3512,3532,3533],{},"Здається, нічого складного. Спробуємо зробити це «чистим Python» — тобто тільки вбудованими засобами мови без жодних бібліотек:",[3535,3536,3541],"pre",{"className":3537,"code":3538,"language":3539,"meta":3540,"style":3540},"language-python shiki shiki-themes light-plus dark-plus dark-plus","import csv\n\n# Читаємо CSV вручну\ndata = []\nwith open(\"sales.csv\", encoding=\"utf-8\") as f:\n    reader = csv.DictReader(f)\n    for row in reader:\n        data.append(row)\n\n# Завдання 1: середня ціна в категорії \"Електроніка\"\ntotal = 0\ncount = 0\nfor row in data:\n    if row[\"category\"] == \"Електроніка\":\n        total += float(row[\"price\"])\n        count += 1\naverage = total \u002F count if count > 0 else 0\nprint(f\"Середня ціна: {average:.2f}\")\n\n# Завдання 2: найпопулярніший товар\nproduct_counts = {}\nfor row in data:\n    name = row[\"product\"]\n    product_counts[name] = product_counts.get(name, 0) + int(row[\"quantity\"])\nbest_product = max(product_counts, key=product_counts.get)\nprint(f\"Лідер продажів: {best_product}\")\n\n# Завдання 3: продажі у грудні\ndecember_sales = 0\nfor row in data:\n    if row[\"date\"].startswith(\"2024-12\"):\n        december_sales += 1\nprint(f\"Продажів у грудні: {december_sales}\")\n","python","",[3542,3543,3544,3557,3564,3571,3577,3616,3622,3637,3643,3648,3654,3664,3672,3685,3706,3725,3734,3755,3785,3790,3796,3802,3813,3825,3846,3864,3888,3893,3899,3907,3918,3937,3945],"code",{"__ignoreMap":3540},[3545,3546,3549,3553],"span",{"class":3547,"line":3548},"line",1,[3545,3550,3552],{"class":3551},"s8xlr","import",[3545,3554,3556],{"class":3555},"sHH4Y"," csv\n",[3545,3558,3560],{"class":3547,"line":3559},2,[3545,3561,3563],{"emptyLinePlaceholder":3562},true,"\n",[3545,3565,3567],{"class":3547,"line":3566},3,[3545,3568,3570],{"class":3569},"spJ8K","# Читаємо CSV вручну\n",[3545,3572,3574],{"class":3547,"line":3573},4,[3545,3575,3576],{"class":3555},"data = []\n",[3545,3578,3580,3583,3587,3590,3594,3597,3601,3604,3607,3610,3613],{"class":3547,"line":3579},5,[3545,3581,3582],{"class":3551},"with",[3545,3584,3586],{"class":3585},"s8Opu"," open",[3545,3588,3589],{"class":3555},"(",[3545,3591,3593],{"class":3592},"sbdoH","\"sales.csv\"",[3545,3595,3596],{"class":3555},", ",[3545,3598,3600],{"class":3599},"siwwj","encoding",[3545,3602,3603],{"class":3555},"=",[3545,3605,3606],{"class":3592},"\"utf-8\"",[3545,3608,3609],{"class":3555},") ",[3545,3611,3612],{"class":3551},"as",[3545,3614,3615],{"class":3555}," f:\n",[3545,3617,3619],{"class":3547,"line":3618},6,[3545,3620,3621],{"class":3555},"    reader = csv.DictReader(f)\n",[3545,3623,3625,3628,3631,3634],{"class":3547,"line":3624},7,[3545,3626,3627],{"class":3551},"    for",[3545,3629,3630],{"class":3555}," row ",[3545,3632,3633],{"class":3551},"in",[3545,3635,3636],{"class":3555}," reader:\n",[3545,3638,3640],{"class":3547,"line":3639},8,[3545,3641,3642],{"class":3555},"        data.append(row)\n",[3545,3644,3646],{"class":3547,"line":3645},9,[3545,3647,3563],{"emptyLinePlaceholder":3562},[3545,3649,3651],{"class":3547,"line":3650},10,[3545,3652,3653],{"class":3569},"# Завдання 1: середня ціна в категорії \"Електроніка\"\n",[3545,3655,3657,3660],{"class":3547,"line":3656},11,[3545,3658,3659],{"class":3555},"total = ",[3545,3661,3663],{"class":3662},"sJj4R","0\n",[3545,3665,3667,3670],{"class":3547,"line":3666},12,[3545,3668,3669],{"class":3555},"count = ",[3545,3671,3663],{"class":3662},[3545,3673,3675,3678,3680,3682],{"class":3547,"line":3674},13,[3545,3676,3677],{"class":3551},"for",[3545,3679,3630],{"class":3555},[3545,3681,3633],{"class":3551},[3545,3683,3684],{"class":3555}," data:\n",[3545,3686,3688,3691,3694,3697,3700,3703],{"class":3547,"line":3687},14,[3545,3689,3690],{"class":3551},"    if",[3545,3692,3693],{"class":3555}," row[",[3545,3695,3696],{"class":3592},"\"category\"",[3545,3698,3699],{"class":3555},"] == ",[3545,3701,3702],{"class":3592},"\"Електроніка\"",[3545,3704,3705],{"class":3555},":\n",[3545,3707,3709,3712,3716,3719,3722],{"class":3547,"line":3708},15,[3545,3710,3711],{"class":3555},"        total += ",[3545,3713,3715],{"class":3714},"sN1BT","float",[3545,3717,3718],{"class":3555},"(row[",[3545,3720,3721],{"class":3592},"\"price\"",[3545,3723,3724],{"class":3555},"])\n",[3545,3726,3728,3731],{"class":3547,"line":3727},16,[3545,3729,3730],{"class":3555},"        count += ",[3545,3732,3733],{"class":3662},"1\n",[3545,3735,3737,3740,3743,3746,3749,3752],{"class":3547,"line":3736},17,[3545,3738,3739],{"class":3555},"average = total \u002F count ",[3545,3741,3742],{"class":3551},"if",[3545,3744,3745],{"class":3555}," count > ",[3545,3747,3748],{"class":3662},"0",[3545,3750,3751],{"class":3551}," else",[3545,3753,3754],{"class":3662}," 0\n",[3545,3756,3758,3761,3763,3767,3770,3773,3776,3779,3782],{"class":3547,"line":3757},18,[3545,3759,3760],{"class":3585},"print",[3545,3762,3589],{"class":3555},[3545,3764,3766],{"class":3765},"su1O8","f",[3545,3768,3769],{"class":3592},"\"Середня ціна: ",[3545,3771,3772],{"class":3765},"{",[3545,3774,3775],{"class":3555},"average",[3545,3777,3778],{"class":3765},":.2f}",[3545,3780,3781],{"class":3592},"\"",[3545,3783,3784],{"class":3555},")\n",[3545,3786,3788],{"class":3547,"line":3787},19,[3545,3789,3563],{"emptyLinePlaceholder":3562},[3545,3791,3793],{"class":3547,"line":3792},20,[3545,3794,3795],{"class":3569},"# Завдання 2: найпопулярніший товар\n",[3545,3797,3799],{"class":3547,"line":3798},21,[3545,3800,3801],{"class":3555},"product_counts = {}\n",[3545,3803,3805,3807,3809,3811],{"class":3547,"line":3804},22,[3545,3806,3677],{"class":3551},[3545,3808,3630],{"class":3555},[3545,3810,3633],{"class":3551},[3545,3812,3684],{"class":3555},[3545,3814,3816,3819,3822],{"class":3547,"line":3815},23,[3545,3817,3818],{"class":3555},"    name = row[",[3545,3820,3821],{"class":3592},"\"product\"",[3545,3823,3824],{"class":3555},"]\n",[3545,3826,3828,3831,3833,3836,3839,3841,3844],{"class":3547,"line":3827},24,[3545,3829,3830],{"class":3555},"    product_counts[name] = product_counts.get(name, ",[3545,3832,3748],{"class":3662},[3545,3834,3835],{"class":3555},") + ",[3545,3837,3838],{"class":3714},"int",[3545,3840,3718],{"class":3555},[3545,3842,3843],{"class":3592},"\"quantity\"",[3545,3845,3724],{"class":3555},[3545,3847,3849,3852,3855,3858,3861],{"class":3547,"line":3848},25,[3545,3850,3851],{"class":3555},"best_product = ",[3545,3853,3854],{"class":3585},"max",[3545,3856,3857],{"class":3555},"(product_counts, ",[3545,3859,3860],{"class":3599},"key",[3545,3862,3863],{"class":3555},"=product_counts.get)\n",[3545,3865,3867,3869,3871,3873,3876,3878,3881,3884,3886],{"class":3547,"line":3866},26,[3545,3868,3760],{"class":3585},[3545,3870,3589],{"class":3555},[3545,3872,3766],{"class":3765},[3545,3874,3875],{"class":3592},"\"Лідер продажів: ",[3545,3877,3772],{"class":3765},[3545,3879,3880],{"class":3555},"best_product",[3545,3882,3883],{"class":3765},"}",[3545,3885,3781],{"class":3592},[3545,3887,3784],{"class":3555},[3545,3889,3891],{"class":3547,"line":3890},27,[3545,3892,3563],{"emptyLinePlaceholder":3562},[3545,3894,3896],{"class":3547,"line":3895},28,[3545,3897,3898],{"class":3569},"# Завдання 3: продажі у грудні\n",[3545,3900,3902,3905],{"class":3547,"line":3901},29,[3545,3903,3904],{"class":3555},"december_sales = ",[3545,3906,3663],{"class":3662},[3545,3908,3910,3912,3914,3916],{"class":3547,"line":3909},30,[3545,3911,3677],{"class":3551},[3545,3913,3630],{"class":3555},[3545,3915,3633],{"class":3551},[3545,3917,3684],{"class":3555},[3545,3919,3921,3923,3925,3928,3931,3934],{"class":3547,"line":3920},31,[3545,3922,3690],{"class":3551},[3545,3924,3693],{"class":3555},[3545,3926,3927],{"class":3592},"\"date\"",[3545,3929,3930],{"class":3555},"].startswith(",[3545,3932,3933],{"class":3592},"\"2024-12\"",[3545,3935,3936],{"class":3555},"):\n",[3545,3938,3940,3943],{"class":3547,"line":3939},32,[3545,3941,3942],{"class":3555},"        december_sales += ",[3545,3944,3733],{"class":3662},[3545,3946,3948,3950,3952,3954,3957,3959,3962,3964,3966],{"class":3547,"line":3947},33,[3545,3949,3760],{"class":3585},[3545,3951,3589],{"class":3555},[3545,3953,3766],{"class":3765},[3545,3955,3956],{"class":3592},"\"Продажів у грудні: ",[3545,3958,3772],{"class":3765},[3545,3960,3961],{"class":3555},"december_sales",[3545,3963,3883],{"class":3765},[3545,3965,3781],{"class":3592},[3545,3967,3784],{"class":3555},[3512,3969,3970,3971,3975],{},"Ось правда: цей код ",[3972,3973,3974],"strong",{},"працює",", але він:",[3977,3978,3979,3982,3988,3991],"ul",{},[3522,3980,3981],{},"займає ~25 рядків для трьох простих запитань",[3522,3983,3984,3985,3987],{},"виконується повільно (цикл ",[3542,3986,3677],{}," по 10 000 рядків — три рази!)",[3522,3989,3990],{},"важко читати і підтримувати",[3522,3992,3993],{},"не масштабується — для 1 000 000 рядків буде ще гірше",[3512,3995,3996,3997,4000],{},"А тепер подивіться на те саме з ",[3972,3998,3999],{},"pandas",":",[3535,4002,4004],{"className":3537,"code":4003,"language":3539,"meta":3540,"style":3540},"import pandas as pd\n\ndf = pd.read_csv(\"sales.csv\")\n\n# Завдання 1: середня ціна в \"Електроніці\"\naverage = df[df[\"category\"] == \"Електроніка\"][\"price\"].mean()\n\n# Завдання 2: найпопулярніший товар\nbest_product = df.groupby(\"product\")[\"quantity\"].sum().idxmax()\n\n# Завдання 3: продажі у грудні\ndecember_sales = df[df[\"date\"].str.startswith(\"2024-12\")].shape[0]\n\nprint(f\"Середня ціна: {average:.2f}\")\nprint(f\"Лідер продажів: {best_product}\")\nprint(f\"Продажів у грудні: {december_sales}\")\n",[3542,4005,4006,4018,4022,4031,4035,4040,4059,4063,4067,4082,4086,4090,4109,4113,4133,4153],{"__ignoreMap":3540},[3545,4007,4008,4010,4013,4015],{"class":3547,"line":3548},[3545,4009,3552],{"class":3551},[3545,4011,4012],{"class":3555}," pandas ",[3545,4014,3612],{"class":3551},[3545,4016,4017],{"class":3555}," pd\n",[3545,4019,4020],{"class":3547,"line":3559},[3545,4021,3563],{"emptyLinePlaceholder":3562},[3545,4023,4024,4027,4029],{"class":3547,"line":3566},[3545,4025,4026],{"class":3555},"df = pd.read_csv(",[3545,4028,3593],{"class":3592},[3545,4030,3784],{"class":3555},[3545,4032,4033],{"class":3547,"line":3573},[3545,4034,3563],{"emptyLinePlaceholder":3562},[3545,4036,4037],{"class":3547,"line":3579},[3545,4038,4039],{"class":3569},"# Завдання 1: середня ціна в \"Електроніці\"\n",[3545,4041,4042,4045,4047,4049,4051,4054,4056],{"class":3547,"line":3618},[3545,4043,4044],{"class":3555},"average = df[df[",[3545,4046,3696],{"class":3592},[3545,4048,3699],{"class":3555},[3545,4050,3702],{"class":3592},[3545,4052,4053],{"class":3555},"][",[3545,4055,3721],{"class":3592},[3545,4057,4058],{"class":3555},"].mean()\n",[3545,4060,4061],{"class":3547,"line":3624},[3545,4062,3563],{"emptyLinePlaceholder":3562},[3545,4064,4065],{"class":3547,"line":3639},[3545,4066,3795],{"class":3569},[3545,4068,4069,4072,4074,4077,4079],{"class":3547,"line":3645},[3545,4070,4071],{"class":3555},"best_product = df.groupby(",[3545,4073,3821],{"class":3592},[3545,4075,4076],{"class":3555},")[",[3545,4078,3843],{"class":3592},[3545,4080,4081],{"class":3555},"].sum().idxmax()\n",[3545,4083,4084],{"class":3547,"line":3650},[3545,4085,3563],{"emptyLinePlaceholder":3562},[3545,4087,4088],{"class":3547,"line":3656},[3545,4089,3898],{"class":3569},[3545,4091,4092,4095,4097,4100,4102,4105,4107],{"class":3547,"line":3666},[3545,4093,4094],{"class":3555},"december_sales = df[df[",[3545,4096,3927],{"class":3592},[3545,4098,4099],{"class":3555},"].str.startswith(",[3545,4101,3933],{"class":3592},[3545,4103,4104],{"class":3555},")].shape[",[3545,4106,3748],{"class":3662},[3545,4108,3824],{"class":3555},[3545,4110,4111],{"class":3547,"line":3674},[3545,4112,3563],{"emptyLinePlaceholder":3562},[3545,4114,4115,4117,4119,4121,4123,4125,4127,4129,4131],{"class":3547,"line":3687},[3545,4116,3760],{"class":3585},[3545,4118,3589],{"class":3555},[3545,4120,3766],{"class":3765},[3545,4122,3769],{"class":3592},[3545,4124,3772],{"class":3765},[3545,4126,3775],{"class":3555},[3545,4128,3778],{"class":3765},[3545,4130,3781],{"class":3592},[3545,4132,3784],{"class":3555},[3545,4134,4135,4137,4139,4141,4143,4145,4147,4149,4151],{"class":3547,"line":3708},[3545,4136,3760],{"class":3585},[3545,4138,3589],{"class":3555},[3545,4140,3766],{"class":3765},[3545,4142,3875],{"class":3592},[3545,4144,3772],{"class":3765},[3545,4146,3880],{"class":3555},[3545,4148,3883],{"class":3765},[3545,4150,3781],{"class":3592},[3545,4152,3784],{"class":3555},[3545,4154,4155,4157,4159,4161,4163,4165,4167,4169,4171],{"class":3547,"line":3727},[3545,4156,3760],{"class":3585},[3545,4158,3589],{"class":3555},[3545,4160,3766],{"class":3765},[3545,4162,3956],{"class":3592},[3545,4164,3772],{"class":3765},[3545,4166,3961],{"class":3555},[3545,4168,3883],{"class":3765},[3545,4170,3781],{"class":3592},[3545,4172,3784],{"class":3555},[3512,4174,4175],{},[3972,4176,4177],{},"Три рядки замість 25. Швидше у 10–100 разів. Читається як англійська мова.",[4179,4180,4181],"blockquote",{},[3512,4182,4183],{},"Аналогія: чистий Python для роботи з даними — це як рахувати тисячі транзакцій на звичайному калькуляторі. NumPy та pandas — це як Excel із формулами, але на стероїдах: не тільки швидше та потужніше, а й у тисячу разів зручніше для складних запитань.",[3512,4185,4186],{},"У цій статті ми побудуємо розуміння обох бібліотек з нуля: спочатку NumPy — бо саме він є «двигуном» усіх обчислень, а потім pandas — інструмент для роботи з таблицями.",[4188,4189],"hr",{},[3507,4191,4193],{"id":4192},"частина-1-numpy-фундамент-числових-обчислень","Частина 1. NumPy — фундамент числових обчислень",[4195,4196,4198],"h3",{"id":4197},"чому-стандартного-списку-python-недостатньо","Чому стандартного списку Python недостатньо",[3512,4200,4201],{},"Ви вже знаєте списки Python — це один із найбільш гнучких типів даних:",[3535,4203,4205],{"className":3537,"code":4204,"language":3539,"meta":3540,"style":3540},"numbers = [1, 2, 3, 4, 5]\nmixed   = [1, \"два\", 3.0, True, None]  # Список може містити будь-що\n",[3542,4206,4207,4237],{"__ignoreMap":3540},[3545,4208,4209,4212,4215,4217,4220,4222,4225,4227,4230,4232,4235],{"class":3547,"line":3548},[3545,4210,4211],{"class":3555},"numbers = [",[3545,4213,4214],{"class":3662},"1",[3545,4216,3596],{"class":3555},[3545,4218,4219],{"class":3662},"2",[3545,4221,3596],{"class":3555},[3545,4223,4224],{"class":3662},"3",[3545,4226,3596],{"class":3555},[3545,4228,4229],{"class":3662},"4",[3545,4231,3596],{"class":3555},[3545,4233,4234],{"class":3662},"5",[3545,4236,3824],{"class":3555},[3545,4238,4239,4242,4244,4246,4249,4251,4254,4256,4259,4261,4264,4267],{"class":3547,"line":3559},[3545,4240,4241],{"class":3555},"mixed   = [",[3545,4243,4214],{"class":3662},[3545,4245,3596],{"class":3555},[3545,4247,4248],{"class":3592},"\"два\"",[3545,4250,3596],{"class":3555},[3545,4252,4253],{"class":3662},"3.0",[3545,4255,3596],{"class":3555},[3545,4257,4258],{"class":3765},"True",[3545,4260,3596],{"class":3555},[3545,4262,4263],{"class":3765},"None",[3545,4265,4266],{"class":3555},"]  ",[3545,4268,4269],{"class":3569},"# Список може містити будь-що\n",[3512,4271,4272,4273,4000],{},"Саме ця гнучкість і є проблемою. Розберемо, що відбувається в пам'яті комп'ютера, коли ви створюєте список ",[3542,4274,4275],{},"[1, 2, 3, 4, 5]",[3535,4277,4282],{"className":4278,"code":4280,"language":4281},[4279],"language-text","Список Python в пам'яті:\n┌─────────────────────────────────────────────────────┐\n│ Список (list object)                                │\n│  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐     │\n│  │ ptr │  │ ptr │  │ ptr │  │ ptr │  │ ptr │ ...  │\n│  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘     │\n│     │        │        │        │        │          │\n│     ▼        ▼        ▼        ▼        ▼          │\n│ ┌───────┐ ┌───────┐ ┌───────┐ ...                 │\n│ │ тип   │ │ тип   │ │ тип   │                     │\n│ │ лічил.│ │ лічил.│ │ лічил.│                     │\n│ │ знач=1│ │ знач=2│ │ знач=3│                     │\n│ └───────┘ └───────┘ └───────┘                     │\n└─────────────────────────────────────────────────────┘\n","text",[3542,4283,4280],{"__ignoreMap":3540},[3512,4285,4286,4287,4290],{},"Кожен елемент списку — це ",[3972,4288,4289],{},"вказівник"," (pointer) на окремий об'єкт у пам'яті. Кожен об'єкт містить:",[3977,4292,4293,4296,4299],{},[3522,4294,4295],{},"тип даних (int? str? float?)",[3522,4297,4298],{},"лічильник посилань (скільки змінних вказують на цей об'єкт)",[3522,4300,4301],{},"саме значення",[3512,4303,4304],{},"Це надає гнучкість (можна мати елементи різних типів), але коштує дорого — і пам'яттю, і часом.",[3512,4306,4307],{},[3972,4308,4309,4310,4312],{},"Що відбувається при ",[3542,4311,3677],{}," циклі по списку?",[3535,4314,4316],{"className":3537,"code":4315,"language":3539,"meta":3540,"style":3540},"total = 0\nfor x in numbers:  # Python: знайти вказівник → зайти в пам'ять →\n    total += x     # прочитати тип → прочитати значення → виконати операцію\n                   # → повернути вказівник → перейти до наступного...\n",[3542,4317,4318,4324,4339,4347],{"__ignoreMap":3540},[3545,4319,4320,4322],{"class":3547,"line":3548},[3545,4321,3659],{"class":3555},[3545,4323,3663],{"class":3662},[3545,4325,4326,4328,4331,4333,4336],{"class":3547,"line":3559},[3545,4327,3677],{"class":3551},[3545,4329,4330],{"class":3555}," x ",[3545,4332,3633],{"class":3551},[3545,4334,4335],{"class":3555}," numbers:  ",[3545,4337,4338],{"class":3569},"# Python: знайти вказівник → зайти в пам'ять →\n",[3545,4340,4341,4344],{"class":3547,"line":3566},[3545,4342,4343],{"class":3555},"    total += x     ",[3545,4345,4346],{"class":3569},"# прочитати тип → прочитати значення → виконати операцію\n",[3545,4348,4349],{"class":3547,"line":3573},[3545,4350,4351],{"class":3569},"                   # → повернути вказівник → перейти до наступного...\n",[3512,4353,4354],{},"Для кожного елемента — серія окремих операцій із перевіркою типу. На 10 000 елементів це помітно. На 10 мільйонах — катастрофа.",[4195,4356,4358],{"id":4357},"numpy-ndarray-однорідний-масив-у-памяті","NumPy ndarray: однорідний масив у пам'яті",[3512,4360,4361,4364,4365,4368],{},[3972,4362,4363],{},"NumPy"," (Numerical Python) — бібліотека для ефективних математичних обчислень. Її основний тип — ",[3542,4366,4367],{},"ndarray"," (N-dimensional array, N-вимірний масив).",[3512,4370,4371,4372,4374],{},"Ось як той самий масив ",[3542,4373,4275],{}," виглядає в NumPy:",[3535,4376,4379],{"className":4377,"code":4378,"language":4281},[4279],"NumPy масив в пам'яті:\n┌─────────────────────────────┐\n│ ndarray (масив об'єкт)      │\n│ dtype: int64                │\n│ shape: (5,)                 │\n│ ┌────┬────┬────┬────┬────┐  │\n│ │ 1  │ 2  │ 3  │ 4  │ 5  │  │\n│ └────┴────┴────┴────┴────┘  │\n│  Суцільний блок пам'яті!    │\n└─────────────────────────────┘\n",[3542,4380,4378],{"__ignoreMap":3540},[3512,4382,4383,4384,4387,4388,4391],{},"Всі елементи одного типу (",[3542,4385,4386],{},"int64","), лежать ",[3972,4389,4390],{},"впритул"," у пам'яті. Не потрібні вказівники, не потрібна перевірка типів для кожного елемента.",[4179,4393,4394],{},[3512,4395,4396],{},"Аналогія: список Python — це шафа, де кожна річ загорнута в окрему коробку з підписом (що це, кому належить, скільки місця займає). NumPy масив — це монолітна полиця, де однакові предмети лежать рівно, один біля одного. Дістати будь-який — миттєво, бо ви знаєте точну відстань від початку.",[4195,4398,4400],{"id":4399},"встановлення-та-перший-запуск","Встановлення та перший запуск",[4402,4403,4404,4425,4444],"tabs",{},[4405,4406,4408],"tabs-item",{"label":4407},"pip",[3535,4409,4413],{"className":4410,"code":4411,"language":4412,"meta":3540,"style":3540},"language-bash shiki shiki-themes light-plus dark-plus dark-plus","pip install numpy\n","bash",[3542,4414,4415],{"__ignoreMap":3540},[3545,4416,4417,4419,4422],{"class":3547,"line":3548},[3545,4418,4407],{"class":3585},[3545,4420,4421],{"class":3592}," install",[3545,4423,4424],{"class":3592}," numpy\n",[4405,4426,4428],{"label":4427},"uv",[3535,4429,4431],{"className":4410,"code":4430,"language":4412,"meta":3540,"style":3540},"uv pip install numpy\n",[3542,4432,4433],{"__ignoreMap":3540},[3545,4434,4435,4437,4440,4442],{"class":3547,"line":3548},[3545,4436,4427],{"class":3585},[3545,4438,4439],{"class":3592}," pip",[3545,4441,4421],{"class":3592},[3545,4443,4424],{"class":3592},[4405,4445,4447],{"label":4446},"poetry",[3535,4448,4450],{"className":4410,"code":4449,"language":4412,"meta":3540,"style":3540},"poetry add numpy\n",[3542,4451,4452],{"__ignoreMap":3540},[3545,4453,4454,4456,4459],{"class":3547,"line":3548},[3545,4455,4446],{"class":3585},[3545,4457,4458],{"class":3592}," add",[3545,4460,4424],{"class":3592},[3535,4462,4464],{"className":3537,"code":4463,"language":3539,"meta":3540,"style":3540},"import numpy as np  # np — загальноприйнятий псевдонім\n",[3542,4465,4466],{"__ignoreMap":3540},[3545,4467,4468,4470,4473,4475,4478],{"class":3547,"line":3548},[3545,4469,3552],{"class":3551},[3545,4471,4472],{"class":3555}," numpy ",[3545,4474,3612],{"class":3551},[3545,4476,4477],{"class":3555}," np  ",[3545,4479,4480],{"class":3569},"# np — загальноприйнятий псевдонім\n",[4482,4483,4484,4485,4488,4489,4492,4493,4496,4497,4500,4501,4504],"note",{},"Чому ",[3542,4486,4487],{},"import numpy as np",", а не просто ",[3542,4490,4491],{},"import numpy","? Суто зручність — ",[3542,4494,4495],{},"np.array(...)"," коротше, ніж ",[3542,4498,4499],{},"numpy.array(...)",". Це загальноприйнятий стандарт — весь світ пише ",[3542,4502,4503],{},"np",".",[4195,4506,4508],{"id":4507},"створення-масивів","Створення масивів",[3535,4510,4512],{"className":3537,"code":4511,"language":3539,"meta":3540,"style":3540},"import numpy as np\n\n# 1. З Python-списку\narr1 = np.array([1, 2, 3, 4, 5])\nprint(arr1)        # [1 2 3 4 5]\nprint(type(arr1))  # \u003Cclass 'numpy.ndarray'>\n\n# 2. Масив нулів\nzeros = np.zeros(5)          # [0. 0. 0. 0. 0.]\nzeros_2d = np.zeros((3, 4))  # Матриця 3×4 з нулів\n\n# 3. Масив одиниць\nones = np.ones(5)          # [1. 1. 1. 1. 1.]\n\n# 4. Послідовність чисел (аналог range())\nseq = np.arange(0, 10, 2)  # [0 2 4 6 8]\n\n# 5. Рівномірно розподілені числа в діапазоні\nlin = np.linspace(0, 1, 5)  # [0.   0.25 0.5  0.75 1.  ]\n\n# 6. Випадкові числа\nrand = np.random.rand(5)    # 5 випадкових числа від 0 до 1\nrandn = np.random.randn(5)  # 5 чисел з нормального розподілу\n",[3542,4513,4514,4525,4529,4534,4559,4569,4584,4588,4593,4606,4623,4627,4632,4644,4648,4653,4675,4679,4684,4704,4708,4713,4726],{"__ignoreMap":3540},[3545,4515,4516,4518,4520,4522],{"class":3547,"line":3548},[3545,4517,3552],{"class":3551},[3545,4519,4472],{"class":3555},[3545,4521,3612],{"class":3551},[3545,4523,4524],{"class":3555}," np\n",[3545,4526,4527],{"class":3547,"line":3559},[3545,4528,3563],{"emptyLinePlaceholder":3562},[3545,4530,4531],{"class":3547,"line":3566},[3545,4532,4533],{"class":3569},"# 1. З Python-списку\n",[3545,4535,4536,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557],{"class":3547,"line":3573},[3545,4537,4538],{"class":3555},"arr1 = np.array([",[3545,4540,4214],{"class":3662},[3545,4542,3596],{"class":3555},[3545,4544,4219],{"class":3662},[3545,4546,3596],{"class":3555},[3545,4548,4224],{"class":3662},[3545,4550,3596],{"class":3555},[3545,4552,4229],{"class":3662},[3545,4554,3596],{"class":3555},[3545,4556,4234],{"class":3662},[3545,4558,3724],{"class":3555},[3545,4560,4561,4563,4566],{"class":3547,"line":3579},[3545,4562,3760],{"class":3585},[3545,4564,4565],{"class":3555},"(arr1)        ",[3545,4567,4568],{"class":3569},"# [1 2 3 4 5]\n",[3545,4570,4571,4573,4575,4578,4581],{"class":3547,"line":3618},[3545,4572,3760],{"class":3585},[3545,4574,3589],{"class":3555},[3545,4576,4577],{"class":3714},"type",[3545,4579,4580],{"class":3555},"(arr1))  ",[3545,4582,4583],{"class":3569},"# \u003Cclass 'numpy.ndarray'>\n",[3545,4585,4586],{"class":3547,"line":3624},[3545,4587,3563],{"emptyLinePlaceholder":3562},[3545,4589,4590],{"class":3547,"line":3639},[3545,4591,4592],{"class":3569},"# 2. Масив нулів\n",[3545,4594,4595,4598,4600,4603],{"class":3547,"line":3645},[3545,4596,4597],{"class":3555},"zeros = np.zeros(",[3545,4599,4234],{"class":3662},[3545,4601,4602],{"class":3555},")          ",[3545,4604,4605],{"class":3569},"# [0. 0. 0. 0. 0.]\n",[3545,4607,4608,4611,4613,4615,4617,4620],{"class":3547,"line":3650},[3545,4609,4610],{"class":3555},"zeros_2d = np.zeros((",[3545,4612,4224],{"class":3662},[3545,4614,3596],{"class":3555},[3545,4616,4229],{"class":3662},[3545,4618,4619],{"class":3555},"))  ",[3545,4621,4622],{"class":3569},"# Матриця 3×4 з нулів\n",[3545,4624,4625],{"class":3547,"line":3656},[3545,4626,3563],{"emptyLinePlaceholder":3562},[3545,4628,4629],{"class":3547,"line":3666},[3545,4630,4631],{"class":3569},"# 3. Масив одиниць\n",[3545,4633,4634,4637,4639,4641],{"class":3547,"line":3674},[3545,4635,4636],{"class":3555},"ones = np.ones(",[3545,4638,4234],{"class":3662},[3545,4640,4602],{"class":3555},[3545,4642,4643],{"class":3569},"# [1. 1. 1. 1. 1.]\n",[3545,4645,4646],{"class":3547,"line":3687},[3545,4647,3563],{"emptyLinePlaceholder":3562},[3545,4649,4650],{"class":3547,"line":3708},[3545,4651,4652],{"class":3569},"# 4. Послідовність чисел (аналог range())\n",[3545,4654,4655,4658,4660,4662,4665,4667,4669,4672],{"class":3547,"line":3727},[3545,4656,4657],{"class":3555},"seq = np.arange(",[3545,4659,3748],{"class":3662},[3545,4661,3596],{"class":3555},[3545,4663,4664],{"class":3662},"10",[3545,4666,3596],{"class":3555},[3545,4668,4219],{"class":3662},[3545,4670,4671],{"class":3555},")  ",[3545,4673,4674],{"class":3569},"# [0 2 4 6 8]\n",[3545,4676,4677],{"class":3547,"line":3736},[3545,4678,3563],{"emptyLinePlaceholder":3562},[3545,4680,4681],{"class":3547,"line":3757},[3545,4682,4683],{"class":3569},"# 5. Рівномірно розподілені числа в діапазоні\n",[3545,4685,4686,4689,4691,4693,4695,4697,4699,4701],{"class":3547,"line":3787},[3545,4687,4688],{"class":3555},"lin = np.linspace(",[3545,4690,3748],{"class":3662},[3545,4692,3596],{"class":3555},[3545,4694,4214],{"class":3662},[3545,4696,3596],{"class":3555},[3545,4698,4234],{"class":3662},[3545,4700,4671],{"class":3555},[3545,4702,4703],{"class":3569},"# [0.   0.25 0.5  0.75 1.  ]\n",[3545,4705,4706],{"class":3547,"line":3792},[3545,4707,3563],{"emptyLinePlaceholder":3562},[3545,4709,4710],{"class":3547,"line":3798},[3545,4711,4712],{"class":3569},"# 6. Випадкові числа\n",[3545,4714,4715,4718,4720,4723],{"class":3547,"line":3804},[3545,4716,4717],{"class":3555},"rand = np.random.rand(",[3545,4719,4234],{"class":3662},[3545,4721,4722],{"class":3555},")    ",[3545,4724,4725],{"class":3569},"# 5 випадкових числа від 0 до 1\n",[3545,4727,4728,4731,4733,4735],{"class":3547,"line":3815},[3545,4729,4730],{"class":3555},"randn = np.random.randn(",[3545,4732,4234],{"class":3662},[3545,4734,4671],{"class":3555},[3545,4736,4737],{"class":3569},"# 5 чисел з нормального розподілу\n",[4195,4739,4741],{"id":4740},"атрибути-масиву","Атрибути масиву",[3512,4743,4744],{},"Кожен ndarray «знає» про себе важливу інформацію:",[3535,4746,4748],{"className":3537,"code":4747,"language":3539,"meta":3540,"style":3540},"arr = np.array([[1, 2, 3],\n                [4, 5, 6]])\n\nprint(arr.shape)   # (2, 3)  — 2 рядки, 3 стовпці\nprint(arr.ndim)    # 2       — кількість вимірів\nprint(arr.size)    # 6       — загальна кількість елементів\nprint(arr.dtype)   # int64   — тип елементів\n",[3542,4749,4750,4768,4787,4791,4801,4811,4821],{"__ignoreMap":3540},[3545,4751,4752,4755,4757,4759,4761,4763,4765],{"class":3547,"line":3548},[3545,4753,4754],{"class":3555},"arr = np.array([[",[3545,4756,4214],{"class":3662},[3545,4758,3596],{"class":3555},[3545,4760,4219],{"class":3662},[3545,4762,3596],{"class":3555},[3545,4764,4224],{"class":3662},[3545,4766,4767],{"class":3555},"],\n",[3545,4769,4770,4773,4775,4777,4779,4781,4784],{"class":3547,"line":3559},[3545,4771,4772],{"class":3555},"                [",[3545,4774,4229],{"class":3662},[3545,4776,3596],{"class":3555},[3545,4778,4234],{"class":3662},[3545,4780,3596],{"class":3555},[3545,4782,4783],{"class":3662},"6",[3545,4785,4786],{"class":3555},"]])\n",[3545,4788,4789],{"class":3547,"line":3566},[3545,4790,3563],{"emptyLinePlaceholder":3562},[3545,4792,4793,4795,4798],{"class":3547,"line":3573},[3545,4794,3760],{"class":3585},[3545,4796,4797],{"class":3555},"(arr.shape)   ",[3545,4799,4800],{"class":3569},"# (2, 3)  — 2 рядки, 3 стовпці\n",[3545,4802,4803,4805,4808],{"class":3547,"line":3579},[3545,4804,3760],{"class":3585},[3545,4806,4807],{"class":3555},"(arr.ndim)    ",[3545,4809,4810],{"class":3569},"# 2       — кількість вимірів\n",[3545,4812,4813,4815,4818],{"class":3547,"line":3618},[3545,4814,3760],{"class":3585},[3545,4816,4817],{"class":3555},"(arr.size)    ",[3545,4819,4820],{"class":3569},"# 6       — загальна кількість елементів\n",[3545,4822,4823,4825,4828],{"class":3547,"line":3624},[3545,4824,3760],{"class":3585},[3545,4826,4827],{"class":3555},"(arr.dtype)   ",[3545,4829,4830],{"class":3569},"# int64   — тип елементів\n",[4482,4832,4833,4836,4837,4840,4841,4844],{},[3542,4834,4835],{},"shape"," — один із найважливіших атрибутів у ML. Форма масиву (наприклад, ",[3542,4838,4839],{},"(1000, 28, 28)",") говорить вам: 1000 зображень розміром 28×28 пікселів. Ви будете бачити ",[3542,4842,4843],{},"arr.shape"," у кожному ML-проєкті.",[4195,4846,4848],{"id":4847},"векторизовані-операції-головна-сила-numpy","Векторизовані операції — головна сила NumPy",[3512,4850,4851],{},"Ось де починається магія. Замість циклів — прямі математичні операції над усім масивом:",[3535,4853,4855],{"className":3537,"code":4854,"language":3539,"meta":3540,"style":3540},"arr = np.array([1, 2, 3, 4, 5])\n\n# Операції зі скалярами — застосовуються до КОЖНОГО елемента\nprint(arr + 10)     # [11 12 13 14 15]\nprint(arr * 2)      # [ 2  4  6  8 10]\nprint(arr ** 2)     # [ 1  4  9 16 25]\nprint(arr > 3)      # [False False False  True  True]\n\n# Операції між масивами — поелементно\na = np.array([1, 2, 3])\nb = np.array([10, 20, 30])\nprint(a + b)   # [11 22 33]\nprint(a * b)   # [10 40 90]\n",[3542,4856,4857,4882,4886,4891,4906,4921,4935,4949,4953,4958,4975,4994,5004],{"__ignoreMap":3540},[3545,4858,4859,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880],{"class":3547,"line":3548},[3545,4860,4861],{"class":3555},"arr = np.array([",[3545,4863,4214],{"class":3662},[3545,4865,3596],{"class":3555},[3545,4867,4219],{"class":3662},[3545,4869,3596],{"class":3555},[3545,4871,4224],{"class":3662},[3545,4873,3596],{"class":3555},[3545,4875,4229],{"class":3662},[3545,4877,3596],{"class":3555},[3545,4879,4234],{"class":3662},[3545,4881,3724],{"class":3555},[3545,4883,4884],{"class":3547,"line":3559},[3545,4885,3563],{"emptyLinePlaceholder":3562},[3545,4887,4888],{"class":3547,"line":3566},[3545,4889,4890],{"class":3569},"# Операції зі скалярами — застосовуються до КОЖНОГО елемента\n",[3545,4892,4893,4895,4898,4900,4903],{"class":3547,"line":3573},[3545,4894,3760],{"class":3585},[3545,4896,4897],{"class":3555},"(arr + ",[3545,4899,4664],{"class":3662},[3545,4901,4902],{"class":3555},")     ",[3545,4904,4905],{"class":3569},"# [11 12 13 14 15]\n",[3545,4907,4908,4910,4913,4915,4918],{"class":3547,"line":3579},[3545,4909,3760],{"class":3585},[3545,4911,4912],{"class":3555},"(arr * ",[3545,4914,4219],{"class":3662},[3545,4916,4917],{"class":3555},")      ",[3545,4919,4920],{"class":3569},"# [ 2  4  6  8 10]\n",[3545,4922,4923,4925,4928,4930,4932],{"class":3547,"line":3618},[3545,4924,3760],{"class":3585},[3545,4926,4927],{"class":3555},"(arr ** ",[3545,4929,4219],{"class":3662},[3545,4931,4902],{"class":3555},[3545,4933,4934],{"class":3569},"# [ 1  4  9 16 25]\n",[3545,4936,4937,4939,4942,4944,4946],{"class":3547,"line":3624},[3545,4938,3760],{"class":3585},[3545,4940,4941],{"class":3555},"(arr > ",[3545,4943,4224],{"class":3662},[3545,4945,4917],{"class":3555},[3545,4947,4948],{"class":3569},"# [False False False  True  True]\n",[3545,4950,4951],{"class":3547,"line":3639},[3545,4952,3563],{"emptyLinePlaceholder":3562},[3545,4954,4955],{"class":3547,"line":3645},[3545,4956,4957],{"class":3569},"# Операції між масивами — поелементно\n",[3545,4959,4960,4963,4965,4967,4969,4971,4973],{"class":3547,"line":3650},[3545,4961,4962],{"class":3555},"a = np.array([",[3545,4964,4214],{"class":3662},[3545,4966,3596],{"class":3555},[3545,4968,4219],{"class":3662},[3545,4970,3596],{"class":3555},[3545,4972,4224],{"class":3662},[3545,4974,3724],{"class":3555},[3545,4976,4977,4980,4982,4984,4987,4989,4992],{"class":3547,"line":3656},[3545,4978,4979],{"class":3555},"b = np.array([",[3545,4981,4664],{"class":3662},[3545,4983,3596],{"class":3555},[3545,4985,4986],{"class":3662},"20",[3545,4988,3596],{"class":3555},[3545,4990,4991],{"class":3662},"30",[3545,4993,3724],{"class":3555},[3545,4995,4996,4998,5001],{"class":3547,"line":3666},[3545,4997,3760],{"class":3585},[3545,4999,5000],{"class":3555},"(a + b)   ",[3545,5002,5003],{"class":3569},"# [11 22 33]\n",[3545,5005,5006,5008,5011],{"class":3547,"line":3674},[3545,5007,3760],{"class":3585},[3545,5009,5010],{"class":3555},"(a * b)   ",[3545,5012,5013],{"class":3569},"# [10 40 90]\n",[3512,5015,5016],{},"Порівняємо швидкість — наочний тест:",[3535,5018,5020],{"className":3537,"code":5019,"language":3539,"meta":3540,"style":3540},"import time\n\n# Зі списком Python\npython_list = list(range(1_000_000))\nstart = time.time()\npython_result = [x * 2 for x in python_list]\nprint(f\"Python: {time.time() - start:.3f}с\")\n\n# З NumPy масивом\nnumpy_arr = np.arange(1_000_000)\nstart = time.time()\nnumpy_result = numpy_arr * 2\nprint(f\"NumPy:  {time.time() - start:.3f}с\")\n",[3542,5021,5022,5029,5033,5038,5059,5064,5081,5105,5109,5114,5123,5127,5135],{"__ignoreMap":3540},[3545,5023,5024,5026],{"class":3547,"line":3548},[3545,5025,3552],{"class":3551},[3545,5027,5028],{"class":3555}," time\n",[3545,5030,5031],{"class":3547,"line":3559},[3545,5032,3563],{"emptyLinePlaceholder":3562},[3545,5034,5035],{"class":3547,"line":3566},[3545,5036,5037],{"class":3569},"# Зі списком Python\n",[3545,5039,5040,5043,5046,5048,5051,5053,5056],{"class":3547,"line":3573},[3545,5041,5042],{"class":3555},"python_list = ",[3545,5044,5045],{"class":3714},"list",[3545,5047,3589],{"class":3555},[3545,5049,5050],{"class":3585},"range",[3545,5052,3589],{"class":3555},[3545,5054,5055],{"class":3662},"1_000_000",[3545,5057,5058],{"class":3555},"))\n",[3545,5060,5061],{"class":3547,"line":3579},[3545,5062,5063],{"class":3555},"start = time.time()\n",[3545,5065,5066,5069,5071,5074,5076,5078],{"class":3547,"line":3618},[3545,5067,5068],{"class":3555},"python_result = [x * ",[3545,5070,4219],{"class":3662},[3545,5072,5073],{"class":3551}," for",[3545,5075,4330],{"class":3555},[3545,5077,3633],{"class":3551},[3545,5079,5080],{"class":3555}," python_list]\n",[3545,5082,5083,5085,5087,5089,5092,5094,5097,5100,5103],{"class":3547,"line":3624},[3545,5084,3760],{"class":3585},[3545,5086,3589],{"class":3555},[3545,5088,3766],{"class":3765},[3545,5090,5091],{"class":3592},"\"Python: ",[3545,5093,3772],{"class":3765},[3545,5095,5096],{"class":3555},"time.time() - start",[3545,5098,5099],{"class":3765},":.3f}",[3545,5101,5102],{"class":3592},"с\"",[3545,5104,3784],{"class":3555},[3545,5106,5107],{"class":3547,"line":3639},[3545,5108,3563],{"emptyLinePlaceholder":3562},[3545,5110,5111],{"class":3547,"line":3645},[3545,5112,5113],{"class":3569},"# З NumPy масивом\n",[3545,5115,5116,5119,5121],{"class":3547,"line":3650},[3545,5117,5118],{"class":3555},"numpy_arr = np.arange(",[3545,5120,5055],{"class":3662},[3545,5122,3784],{"class":3555},[3545,5124,5125],{"class":3547,"line":3656},[3545,5126,5063],{"class":3555},[3545,5128,5129,5132],{"class":3547,"line":3666},[3545,5130,5131],{"class":3555},"numpy_result = numpy_arr * ",[3545,5133,5134],{"class":3662},"2\n",[3545,5136,5137,5139,5141,5143,5146,5148,5150,5152,5154],{"class":3547,"line":3674},[3545,5138,3760],{"class":3585},[3545,5140,3589],{"class":3555},[3545,5142,3766],{"class":3765},[3545,5144,5145],{"class":3592},"\"NumPy:  ",[3545,5147,3772],{"class":3765},[3545,5149,5096],{"class":3555},[3545,5151,5099],{"class":3765},[3545,5153,5102],{"class":3592},[3545,5155,3784],{"class":3555},[5157,5158,5160,5175,5184,5193],"terminal-preview",{"title":5159},"Порівняння швидкості",[5161,5162,5164,5169,5170],"div",{"className":5163},[3547],[3545,5165,5168],{"className":5166},[5167],"opacity-40","In [1]:"," ",[3545,5171,5174],{"className":5172},[5173],"text-blue-400","Запуск тесту...",[5161,5176,5178,5179],{"className":5177},[3547],"Python: ",[3545,5180,5183],{"className":5181},[5182],"text-yellow-400","0.124с",[5161,5185,5187,5188],{"className":5186},[3547],"NumPy:  ",[3545,5189,5192],{"className":5190},[5191],"text-green-400","0.002с",[5161,5194,5196],{"className":5195},[3547],[3545,5197,5199],{"className":5198},[5167],"NumPy швидше у ~62 рази",[4195,5201,5203],{"id":5202},"індексація-та-зрізи","Індексація та зрізи",[3512,5205,5206],{},"Синтаксис схожий на списки Python, але потужніший:",[3535,5208,5210],{"className":3537,"code":5209,"language":3539,"meta":3540,"style":3540},"arr = np.array([10, 20, 30, 40, 50])\n\n# Індексація (як у списках)\nprint(arr[0])    # 10  — перший елемент\nprint(arr[-1])   # 50  — останній елемент\n\n# Зрізи [start:stop:step]\nprint(arr[1:4])  # [20 30 40]\nprint(arr[::2])  # [10 30 50]  — кожен другий\n\n# 2D масив (матриця)\nmatrix = np.array([[1, 2, 3],\n                   [4, 5, 6],\n                   [7, 8, 9]])\n\nprint(matrix[1, 2])      # 6   — рядок 1, стовпець 2\nprint(matrix[:, 1])      # [2 5 8]  — весь стовпець 1\nprint(matrix[0, :])      # [1 2 3]  — весь рядок 0\nprint(matrix[1:, 1:])    # [[5 6] [8 9]]  — підматриця\n",[3542,5211,5212,5238,5242,5247,5262,5277,5281,5286,5304,5318,5322,5327,5344,5361,5380,5384,5403,5417,5431],{"__ignoreMap":3540},[3545,5213,5214,5216,5218,5220,5222,5224,5226,5228,5231,5233,5236],{"class":3547,"line":3548},[3545,5215,4861],{"class":3555},[3545,5217,4664],{"class":3662},[3545,5219,3596],{"class":3555},[3545,5221,4986],{"class":3662},[3545,5223,3596],{"class":3555},[3545,5225,4991],{"class":3662},[3545,5227,3596],{"class":3555},[3545,5229,5230],{"class":3662},"40",[3545,5232,3596],{"class":3555},[3545,5234,5235],{"class":3662},"50",[3545,5237,3724],{"class":3555},[3545,5239,5240],{"class":3547,"line":3559},[3545,5241,3563],{"emptyLinePlaceholder":3562},[3545,5243,5244],{"class":3547,"line":3566},[3545,5245,5246],{"class":3569},"# Індексація (як у списках)\n",[3545,5248,5249,5251,5254,5256,5259],{"class":3547,"line":3573},[3545,5250,3760],{"class":3585},[3545,5252,5253],{"class":3555},"(arr[",[3545,5255,3748],{"class":3662},[3545,5257,5258],{"class":3555},"])    ",[3545,5260,5261],{"class":3569},"# 10  — перший елемент\n",[3545,5263,5264,5266,5269,5271,5274],{"class":3547,"line":3579},[3545,5265,3760],{"class":3585},[3545,5267,5268],{"class":3555},"(arr[-",[3545,5270,4214],{"class":3662},[3545,5272,5273],{"class":3555},"])   ",[3545,5275,5276],{"class":3569},"# 50  — останній елемент\n",[3545,5278,5279],{"class":3547,"line":3618},[3545,5280,3563],{"emptyLinePlaceholder":3562},[3545,5282,5283],{"class":3547,"line":3624},[3545,5284,5285],{"class":3569},"# Зрізи [start:stop:step]\n",[3545,5287,5288,5290,5292,5294,5296,5298,5301],{"class":3547,"line":3639},[3545,5289,3760],{"class":3585},[3545,5291,5253],{"class":3555},[3545,5293,4214],{"class":3662},[3545,5295,4000],{"class":3555},[3545,5297,4229],{"class":3662},[3545,5299,5300],{"class":3555},"])  ",[3545,5302,5303],{"class":3569},"# [20 30 40]\n",[3545,5305,5306,5308,5311,5313,5315],{"class":3547,"line":3645},[3545,5307,3760],{"class":3585},[3545,5309,5310],{"class":3555},"(arr[::",[3545,5312,4219],{"class":3662},[3545,5314,5300],{"class":3555},[3545,5316,5317],{"class":3569},"# [10 30 50]  — кожен другий\n",[3545,5319,5320],{"class":3547,"line":3650},[3545,5321,3563],{"emptyLinePlaceholder":3562},[3545,5323,5324],{"class":3547,"line":3656},[3545,5325,5326],{"class":3569},"# 2D масив (матриця)\n",[3545,5328,5329,5332,5334,5336,5338,5340,5342],{"class":3547,"line":3666},[3545,5330,5331],{"class":3555},"matrix = np.array([[",[3545,5333,4214],{"class":3662},[3545,5335,3596],{"class":3555},[3545,5337,4219],{"class":3662},[3545,5339,3596],{"class":3555},[3545,5341,4224],{"class":3662},[3545,5343,4767],{"class":3555},[3545,5345,5346,5349,5351,5353,5355,5357,5359],{"class":3547,"line":3674},[3545,5347,5348],{"class":3555},"                   [",[3545,5350,4229],{"class":3662},[3545,5352,3596],{"class":3555},[3545,5354,4234],{"class":3662},[3545,5356,3596],{"class":3555},[3545,5358,4783],{"class":3662},[3545,5360,4767],{"class":3555},[3545,5362,5363,5365,5368,5370,5373,5375,5378],{"class":3547,"line":3687},[3545,5364,5348],{"class":3555},[3545,5366,5367],{"class":3662},"7",[3545,5369,3596],{"class":3555},[3545,5371,5372],{"class":3662},"8",[3545,5374,3596],{"class":3555},[3545,5376,5377],{"class":3662},"9",[3545,5379,4786],{"class":3555},[3545,5381,5382],{"class":3547,"line":3708},[3545,5383,3563],{"emptyLinePlaceholder":3562},[3545,5385,5386,5388,5391,5393,5395,5397,5400],{"class":3547,"line":3727},[3545,5387,3760],{"class":3585},[3545,5389,5390],{"class":3555},"(matrix[",[3545,5392,4214],{"class":3662},[3545,5394,3596],{"class":3555},[3545,5396,4219],{"class":3662},[3545,5398,5399],{"class":3555},"])      ",[3545,5401,5402],{"class":3569},"# 6   — рядок 1, стовпець 2\n",[3545,5404,5405,5407,5410,5412,5414],{"class":3547,"line":3736},[3545,5406,3760],{"class":3585},[3545,5408,5409],{"class":3555},"(matrix[:, ",[3545,5411,4214],{"class":3662},[3545,5413,5399],{"class":3555},[3545,5415,5416],{"class":3569},"# [2 5 8]  — весь стовпець 1\n",[3545,5418,5419,5421,5423,5425,5428],{"class":3547,"line":3757},[3545,5420,3760],{"class":3585},[3545,5422,5390],{"class":3555},[3545,5424,3748],{"class":3662},[3545,5426,5427],{"class":3555},", :])      ",[3545,5429,5430],{"class":3569},"# [1 2 3]  — весь рядок 0\n",[3545,5432,5433,5435,5437,5439,5442,5444,5447],{"class":3547,"line":3787},[3545,5434,3760],{"class":3585},[3545,5436,5390],{"class":3555},[3545,5438,4214],{"class":3662},[3545,5440,5441],{"class":3555},":, ",[3545,5443,4214],{"class":3662},[3545,5445,5446],{"class":3555},":])    ",[3545,5448,5449],{"class":3569},"# [[5 6] [8 9]]  — підматриця\n",[4195,5451,5453],{"id":5452},"булева-індексація-фільтрація-без-циклів","Булева індексація — фільтрація без циклів",[3512,5455,5456],{},"Одна з найпотужніших можливостей NumPy:",[3535,5458,5460],{"className":3537,"code":5459,"language":3539,"meta":3540,"style":3540},"scores = np.array([85, 42, 91, 67, 78, 55, 96, 33])\n\n# Знайти всі оцінки вище 70\nmask = scores > 70           # [True False True False True False True False]\ngood_scores = scores[mask]   # [85 91 78 96]\n\n# Або коротше — в одну дію\ngood_scores = scores[scores > 70]\n\nprint(f\"Хороших оцінок: {len(good_scores)}\")  # 4\nprint(f\"Середня серед хороших: {good_scores.mean():.1f}\")  # 87.5\n",[3542,5461,5462,5507,5511,5516,5527,5535,5539,5544,5553,5557,5585],{"__ignoreMap":3540},[3545,5463,5464,5467,5470,5472,5475,5477,5480,5482,5485,5487,5490,5492,5495,5497,5500,5502,5505],{"class":3547,"line":3548},[3545,5465,5466],{"class":3555},"scores = np.array([",[3545,5468,5469],{"class":3662},"85",[3545,5471,3596],{"class":3555},[3545,5473,5474],{"class":3662},"42",[3545,5476,3596],{"class":3555},[3545,5478,5479],{"class":3662},"91",[3545,5481,3596],{"class":3555},[3545,5483,5484],{"class":3662},"67",[3545,5486,3596],{"class":3555},[3545,5488,5489],{"class":3662},"78",[3545,5491,3596],{"class":3555},[3545,5493,5494],{"class":3662},"55",[3545,5496,3596],{"class":3555},[3545,5498,5499],{"class":3662},"96",[3545,5501,3596],{"class":3555},[3545,5503,5504],{"class":3662},"33",[3545,5506,3724],{"class":3555},[3545,5508,5509],{"class":3547,"line":3559},[3545,5510,3563],{"emptyLinePlaceholder":3562},[3545,5512,5513],{"class":3547,"line":3566},[3545,5514,5515],{"class":3569},"# Знайти всі оцінки вище 70\n",[3545,5517,5518,5521,5524],{"class":3547,"line":3573},[3545,5519,5520],{"class":3555},"mask = scores > ",[3545,5522,5523],{"class":3662},"70",[3545,5525,5526],{"class":3569},"           # [True False True False True False True False]\n",[3545,5528,5529,5532],{"class":3547,"line":3579},[3545,5530,5531],{"class":3555},"good_scores = scores[mask]   ",[3545,5533,5534],{"class":3569},"# [85 91 78 96]\n",[3545,5536,5537],{"class":3547,"line":3618},[3545,5538,3563],{"emptyLinePlaceholder":3562},[3545,5540,5541],{"class":3547,"line":3624},[3545,5542,5543],{"class":3569},"# Або коротше — в одну дію\n",[3545,5545,5546,5549,5551],{"class":3547,"line":3639},[3545,5547,5548],{"class":3555},"good_scores = scores[scores > ",[3545,5550,5523],{"class":3662},[3545,5552,3824],{"class":3555},[3545,5554,5555],{"class":3547,"line":3645},[3545,5556,3563],{"emptyLinePlaceholder":3562},[3545,5558,5559,5561,5563,5565,5568,5570,5573,5576,5578,5580,5582],{"class":3547,"line":3650},[3545,5560,3760],{"class":3585},[3545,5562,3589],{"class":3555},[3545,5564,3766],{"class":3765},[3545,5566,5567],{"class":3592},"\"Хороших оцінок: ",[3545,5569,3772],{"class":3765},[3545,5571,5572],{"class":3585},"len",[3545,5574,5575],{"class":3555},"(good_scores)",[3545,5577,3883],{"class":3765},[3545,5579,3781],{"class":3592},[3545,5581,4671],{"class":3555},[3545,5583,5584],{"class":3569},"# 4\n",[3545,5586,5587,5589,5591,5593,5596,5598,5601,5604,5606,5608],{"class":3547,"line":3656},[3545,5588,3760],{"class":3585},[3545,5590,3589],{"class":3555},[3545,5592,3766],{"class":3765},[3545,5594,5595],{"class":3592},"\"Середня серед хороших: ",[3545,5597,3772],{"class":3765},[3545,5599,5600],{"class":3555},"good_scores.mean()",[3545,5602,5603],{"class":3765},":.1f}",[3545,5605,3781],{"class":3592},[3545,5607,4671],{"class":3555},[3545,5609,5610],{"class":3569},"# 87.5\n",[4179,5612,5613],{},[3512,5614,5615],{},"Аналогія: булева індексація — це як фільтр у Excel. Ви задаєте умову («ціна > 1000»), і Excel автоматично показує лише відповідні рядки. Тільки NumPy робить це для масивів з мільйонами елементів — миттєво.",[4195,5617,5619],{"id":5618},"агрегатні-функції","Агрегатні функції",[3535,5621,5623],{"className":3537,"code":5622,"language":3539,"meta":3540,"style":3540},"data = np.array([23, 45, 12, 67, 89, 34, 56, 78, 90, 11])\n\nprint(f\"Сума:             {data.sum()}\")        # 505\nprint(f\"Середнє:          {data.mean():.1f}\")   # 50.5\nprint(f\"Мінімум:          {data.min()}\")        # 11\nprint(f\"Максимум:         {data.max()}\")        # 90\nprint(f\"Стд. відхилення:  {data.std():.1f}\")    # 27.7\nprint(f\"Індекс мінімуму:  {data.argmin()}\")     # 9\nprint(f\"Індекс максимуму: {data.argmax()}\")     # 8\n",[3542,5624,5625,5678,5682,5708,5734,5759,5784,5809,5834],{"__ignoreMap":3540},[3545,5626,5627,5630,5633,5635,5638,5640,5643,5645,5647,5649,5652,5654,5657,5659,5662,5664,5666,5668,5671,5673,5676],{"class":3547,"line":3548},[3545,5628,5629],{"class":3555},"data = np.array([",[3545,5631,5632],{"class":3662},"23",[3545,5634,3596],{"class":3555},[3545,5636,5637],{"class":3662},"45",[3545,5639,3596],{"class":3555},[3545,5641,5642],{"class":3662},"12",[3545,5644,3596],{"class":3555},[3545,5646,5484],{"class":3662},[3545,5648,3596],{"class":3555},[3545,5650,5651],{"class":3662},"89",[3545,5653,3596],{"class":3555},[3545,5655,5656],{"class":3662},"34",[3545,5658,3596],{"class":3555},[3545,5660,5661],{"class":3662},"56",[3545,5663,3596],{"class":3555},[3545,5665,5489],{"class":3662},[3545,5667,3596],{"class":3555},[3545,5669,5670],{"class":3662},"90",[3545,5672,3596],{"class":3555},[3545,5674,5675],{"class":3662},"11",[3545,5677,3724],{"class":3555},[3545,5679,5680],{"class":3547,"line":3559},[3545,5681,3563],{"emptyLinePlaceholder":3562},[3545,5683,5684,5686,5688,5690,5693,5695,5698,5700,5702,5705],{"class":3547,"line":3566},[3545,5685,3760],{"class":3585},[3545,5687,3589],{"class":3555},[3545,5689,3766],{"class":3765},[3545,5691,5692],{"class":3592},"\"Сума:             ",[3545,5694,3772],{"class":3765},[3545,5696,5697],{"class":3555},"data.sum()",[3545,5699,3883],{"class":3765},[3545,5701,3781],{"class":3592},[3545,5703,5704],{"class":3555},")        ",[3545,5706,5707],{"class":3569},"# 505\n",[3545,5709,5710,5712,5714,5716,5719,5721,5724,5726,5728,5731],{"class":3547,"line":3573},[3545,5711,3760],{"class":3585},[3545,5713,3589],{"class":3555},[3545,5715,3766],{"class":3765},[3545,5717,5718],{"class":3592},"\"Середнє:          ",[3545,5720,3772],{"class":3765},[3545,5722,5723],{"class":3555},"data.mean()",[3545,5725,5603],{"class":3765},[3545,5727,3781],{"class":3592},[3545,5729,5730],{"class":3555},")   ",[3545,5732,5733],{"class":3569},"# 50.5\n",[3545,5735,5736,5738,5740,5742,5745,5747,5750,5752,5754,5756],{"class":3547,"line":3579},[3545,5737,3760],{"class":3585},[3545,5739,3589],{"class":3555},[3545,5741,3766],{"class":3765},[3545,5743,5744],{"class":3592},"\"Мінімум:          ",[3545,5746,3772],{"class":3765},[3545,5748,5749],{"class":3555},"data.min()",[3545,5751,3883],{"class":3765},[3545,5753,3781],{"class":3592},[3545,5755,5704],{"class":3555},[3545,5757,5758],{"class":3569},"# 11\n",[3545,5760,5761,5763,5765,5767,5770,5772,5775,5777,5779,5781],{"class":3547,"line":3618},[3545,5762,3760],{"class":3585},[3545,5764,3589],{"class":3555},[3545,5766,3766],{"class":3765},[3545,5768,5769],{"class":3592},"\"Максимум:         ",[3545,5771,3772],{"class":3765},[3545,5773,5774],{"class":3555},"data.max()",[3545,5776,3883],{"class":3765},[3545,5778,3781],{"class":3592},[3545,5780,5704],{"class":3555},[3545,5782,5783],{"class":3569},"# 90\n",[3545,5785,5786,5788,5790,5792,5795,5797,5800,5802,5804,5806],{"class":3547,"line":3624},[3545,5787,3760],{"class":3585},[3545,5789,3589],{"class":3555},[3545,5791,3766],{"class":3765},[3545,5793,5794],{"class":3592},"\"Стд. відхилення:  ",[3545,5796,3772],{"class":3765},[3545,5798,5799],{"class":3555},"data.std()",[3545,5801,5603],{"class":3765},[3545,5803,3781],{"class":3592},[3545,5805,4722],{"class":3555},[3545,5807,5808],{"class":3569},"# 27.7\n",[3545,5810,5811,5813,5815,5817,5820,5822,5825,5827,5829,5831],{"class":3547,"line":3639},[3545,5812,3760],{"class":3585},[3545,5814,3589],{"class":3555},[3545,5816,3766],{"class":3765},[3545,5818,5819],{"class":3592},"\"Індекс мінімуму:  ",[3545,5821,3772],{"class":3765},[3545,5823,5824],{"class":3555},"data.argmin()",[3545,5826,3883],{"class":3765},[3545,5828,3781],{"class":3592},[3545,5830,4902],{"class":3555},[3545,5832,5833],{"class":3569},"# 9\n",[3545,5835,5836,5838,5840,5842,5845,5847,5850,5852,5854,5856],{"class":3547,"line":3645},[3545,5837,3760],{"class":3585},[3545,5839,3589],{"class":3555},[3545,5841,3766],{"class":3765},[3545,5843,5844],{"class":3592},"\"Індекс максимуму: ",[3545,5846,3772],{"class":3765},[3545,5848,5849],{"class":3555},"data.argmax()",[3545,5851,3883],{"class":3765},[3545,5853,3781],{"class":3592},[3545,5855,4902],{"class":3555},[3545,5857,5858],{"class":3569},"# 8\n",[3512,5860,5861,5862,5865],{},"Для 2D масивів можна вказати вісь (",[3542,5863,5864],{},"axis","):",[3535,5867,5869],{"className":3537,"code":5868,"language":3539,"meta":3540,"style":3540},"matrix = np.array([[1, 2, 3],\n                   [4, 5, 6]])\n\nprint(matrix.sum())           # 21  — сума всіх елементів\nprint(matrix.sum(axis=0))     # [5 7 9]  — сума по стовпцях\nprint(matrix.sum(axis=1))     # [6 15]   — сума по рядках\n",[3542,5870,5871,5887,5903,5907,5917,5936],{"__ignoreMap":3540},[3545,5872,5873,5875,5877,5879,5881,5883,5885],{"class":3547,"line":3548},[3545,5874,5331],{"class":3555},[3545,5876,4214],{"class":3662},[3545,5878,3596],{"class":3555},[3545,5880,4219],{"class":3662},[3545,5882,3596],{"class":3555},[3545,5884,4224],{"class":3662},[3545,5886,4767],{"class":3555},[3545,5888,5889,5891,5893,5895,5897,5899,5901],{"class":3547,"line":3559},[3545,5890,5348],{"class":3555},[3545,5892,4229],{"class":3662},[3545,5894,3596],{"class":3555},[3545,5896,4234],{"class":3662},[3545,5898,3596],{"class":3555},[3545,5900,4783],{"class":3662},[3545,5902,4786],{"class":3555},[3545,5904,5905],{"class":3547,"line":3566},[3545,5906,3563],{"emptyLinePlaceholder":3562},[3545,5908,5909,5911,5914],{"class":3547,"line":3573},[3545,5910,3760],{"class":3585},[3545,5912,5913],{"class":3555},"(matrix.sum())           ",[3545,5915,5916],{"class":3569},"# 21  — сума всіх елементів\n",[3545,5918,5919,5921,5924,5926,5928,5930,5933],{"class":3547,"line":3579},[3545,5920,3760],{"class":3585},[3545,5922,5923],{"class":3555},"(matrix.sum(",[3545,5925,5864],{"class":3599},[3545,5927,3603],{"class":3555},[3545,5929,3748],{"class":3662},[3545,5931,5932],{"class":3555},"))     ",[3545,5934,5935],{"class":3569},"# [5 7 9]  — сума по стовпцях\n",[3545,5937,5938,5940,5942,5944,5946,5948,5950],{"class":3547,"line":3618},[3545,5939,3760],{"class":3585},[3545,5941,5923],{"class":3555},[3545,5943,5864],{"class":3599},[3545,5945,3603],{"class":3555},[3545,5947,4214],{"class":3662},[3545,5949,5932],{"class":3555},[3545,5951,5952],{"class":3569},"# [6 15]   — сума по рядках\n",[4195,5954,5956],{"id":5955},"зміна-форми-reshape","Зміна форми: reshape",[3535,5958,5960],{"className":3537,"code":5959,"language":3539,"meta":3540,"style":3540},"arr = np.arange(12)          # [ 0  1  2  3  4  5  6  7  8  9 10 11]\nmatrix = arr.reshape(3, 4)   # Перетворити у матрицю 3×4\n\n# [[0  1  2  3]\n#  [4  5  6  7]\n#  [8  9 10 11]]\n\nflat = matrix.flatten()      # Знову в 1D: [0 1 2 3 4 5 6 7 8 9 10 11]\n",[3542,5961,5962,5974,5990,5994,5999,6004,6009,6013],{"__ignoreMap":3540},[3545,5963,5964,5967,5969,5971],{"class":3547,"line":3548},[3545,5965,5966],{"class":3555},"arr = np.arange(",[3545,5968,5642],{"class":3662},[3545,5970,4602],{"class":3555},[3545,5972,5973],{"class":3569},"# [ 0  1  2  3  4  5  6  7  8  9 10 11]\n",[3545,5975,5976,5979,5981,5983,5985,5987],{"class":3547,"line":3559},[3545,5977,5978],{"class":3555},"matrix = arr.reshape(",[3545,5980,4224],{"class":3662},[3545,5982,3596],{"class":3555},[3545,5984,4229],{"class":3662},[3545,5986,5730],{"class":3555},[3545,5988,5989],{"class":3569},"# Перетворити у матрицю 3×4\n",[3545,5991,5992],{"class":3547,"line":3566},[3545,5993,3563],{"emptyLinePlaceholder":3562},[3545,5995,5996],{"class":3547,"line":3573},[3545,5997,5998],{"class":3569},"# [[0  1  2  3]\n",[3545,6000,6001],{"class":3547,"line":3579},[3545,6002,6003],{"class":3569},"#  [4  5  6  7]\n",[3545,6005,6006],{"class":3547,"line":3618},[3545,6007,6008],{"class":3569},"#  [8  9 10 11]]\n",[3545,6010,6011],{"class":3547,"line":3624},[3545,6012,3563],{"emptyLinePlaceholder":3562},[3545,6014,6015,6018],{"class":3547,"line":3639},[3545,6016,6017],{"class":3555},"flat = matrix.flatten()      ",[3545,6019,6020],{"class":3569},"# Знову в 1D: [0 1 2 3 4 5 6 7 8 9 10 11]\n",[4482,6022,6023,6026,6027,6030,6031,6034],{},[3542,6024,6025],{},"reshape"," — фундаментальна операція в ML. Зображення 28×28 пікселів потрібно перетворити у вектор із 784 елементів для подачі в нейронну мережу? ",[3542,6028,6029],{},"image.reshape(784)",". Або навпаки — вектор у 2D зображення? ",[3542,6032,6033],{},"flat.reshape(28, 28)",". Ви будете використовувати це постійно.",[4195,6036,6038],{"id":6037},"порівняльна-таблиця-список-python-vs-numpy","Порівняльна таблиця: список Python vs NumPy",[6040,6041,6042,6059],"table",{},[6043,6044,6045],"thead",{},[6046,6047,6048,6053,6056],"tr",{},[6049,6050,6052],"th",{"align":6051},"left","Операція",[6049,6054,6055],{"align":6051},"Список Python",[6049,6057,6058],{"align":6051},"NumPy ndarray",[6060,6061,6062,6074,6085,6099,6109,6120,6131,6148],"tbody",{},[6046,6063,6064,6068,6071],{},[6065,6066,6067],"td",{"align":6051},"Тип елементів",[6065,6069,6070],{"align":6051},"Будь-які (гнучко, повільно)",[6065,6072,6073],{"align":6051},"Однаковий (компактно, швидко)",[6046,6075,6076,6079,6082],{},[6065,6077,6078],{"align":6051},"Пам'ять",[6065,6080,6081],{"align":6051},"Вказівники + обгортки об'єктів",[6065,6083,6084],{"align":6051},"Суцільний блок пам'яті",[6046,6086,6087,6093,6096],{},[6065,6088,6089,6090],{"align":6051},"Швидкість ",[3542,6091,6092],{},"+",[6065,6094,6095],{"align":6051},"Конкатенація списків",[6065,6097,6098],{"align":6051},"Поелементне додавання",[6046,6100,6101,6103,6106],{},[6065,6102,1742],{"align":6051},[6065,6104,6105],{"align":6051},"Потрібні для кожної операції",[6065,6107,6108],{"align":6051},"Не потрібні — векторизація",[6046,6110,6111,6114,6117],{},[6065,6112,6113],{"align":6051},"Багатовимірність",[6065,6115,6116],{"align":6051},"Список списків (незручно)",[6065,6118,6119],{"align":6051},"Вбудована підтримка (ndarray)",[6046,6121,6122,6125,6128],{},[6065,6123,6124],{"align":6051},"Булева індексація",[6065,6126,6127],{"align":6051},"Немає",[6065,6129,6130],{"align":6051},"Є — фільтрація без циклів",[6046,6132,6133,6136,6139],{},[6065,6134,6135],{"align":6051},"Математичні функції",[6065,6137,6138],{"align":6051},"Потрібні цикли",[6065,6140,6141,3596,6144,6147],{"align":6051},[3542,6142,6143],{},"np.sin()",[3542,6145,6146],{},"np.exp()"," і т.д.",[6046,6149,6150,6153,6156],{},[6065,6151,6152],{"align":6051},"Відносна швидкість",[6065,6154,6155],{"align":6051},"1×",[6065,6157,6158],{"align":6051},"10–100×",[4188,6160],{},[3507,6162,6164],{"id":6163},"частина-2-pandas-робота-з-таблицями-даних","Частина 2. pandas — робота з таблицями даних",[4195,6166,6168],{"id":6167},"що-таке-pandas-і-чому-він-скрізь","Що таке pandas і чому він скрізь",[3512,6170,6171,6173],{},[3972,6172,3999],{}," — бібліотека для роботи з табличними даними. Назва походить від \"Panel Data\" (панельні дані) — термін з економетрики. Саме pandas перетворив Python на мову №1 для Data Science.",[3512,6175,6176,6177,6180],{},"Pandas побудований ",[3972,6178,6179],{},"поверх NumPy"," — усередині кожного pandas-об'єкту лежить NumPy-масив. Тому pandas поєднує зручність роботи з таблицями (індекси, назви стовпців, перемішані типи) зі швидкістю NumPy.",[4402,6182,6183,6199,6216],{},[4405,6184,6185],{"label":4407},[3535,6186,6188],{"className":4410,"code":6187,"language":4412,"meta":3540,"style":3540},"pip install pandas\n",[3542,6189,6190],{"__ignoreMap":3540},[3545,6191,6192,6194,6196],{"class":3547,"line":3548},[3545,6193,4407],{"class":3585},[3545,6195,4421],{"class":3592},[3545,6197,6198],{"class":3592}," pandas\n",[4405,6200,6201],{"label":4427},[3535,6202,6204],{"className":4410,"code":6203,"language":4412,"meta":3540,"style":3540},"uv pip install pandas\n",[3542,6205,6206],{"__ignoreMap":3540},[3545,6207,6208,6210,6212,6214],{"class":3547,"line":3548},[3545,6209,4427],{"class":3585},[3545,6211,4439],{"class":3592},[3545,6213,4421],{"class":3592},[3545,6215,6198],{"class":3592},[4405,6217,6218],{"label":4446},[3535,6219,6221],{"className":4410,"code":6220,"language":4412,"meta":3540,"style":3540},"poetry add pandas\n",[3542,6222,6223],{"__ignoreMap":3540},[3545,6224,6225,6227,6229],{"class":3547,"line":3548},[3545,6226,4446],{"class":3585},[3545,6228,4458],{"class":3592},[3545,6230,6198],{"class":3592},[3535,6232,6234],{"className":3537,"code":6233,"language":3539,"meta":3540,"style":3540},"import pandas as pd  # pd — загальноприйнятий псевдонім\n",[3542,6235,6236],{"__ignoreMap":3540},[3545,6237,6238,6240,6242,6244,6247],{"class":3547,"line":3548},[3545,6239,3552],{"class":3551},[3545,6241,4012],{"class":3555},[3545,6243,3612],{"class":3551},[3545,6245,6246],{"class":3555}," pd  ",[3545,6248,6249],{"class":3569},"# pd — загальноприйнятий псевдонім\n",[4188,6251],{},[4195,6253,6255],{"id":6254},"series-одновимірна-структура-даних","Series: одновимірна структура даних",[3512,6257,6258,6261,6262,6265],{},[3972,6259,6260],{},"Series"," — це одновимірна структура даних pandas. Уявіть її як ",[3972,6263,6264],{},"один стовпець Excel-таблиці",": зліва — мітка рядка (індекс), справа — значення.",[3535,6267,6269],{"className":3537,"code":6268,"language":3539,"meta":3540,"style":3540},"import pandas as pd\n\n# Найпростіший Series: зі списку Python\ntemperatures = pd.Series([22, 25, 19, 27, 23])\n\nprint(temperatures)\n# 0    22\n# 1    25\n# 2    19\n# 3    27\n# 4    23\n# dtype: int64\n",[3542,6270,6271,6281,6285,6290,6319,6323,6330,6335,6340,6345,6350,6355],{"__ignoreMap":3540},[3545,6272,6273,6275,6277,6279],{"class":3547,"line":3548},[3545,6274,3552],{"class":3551},[3545,6276,4012],{"class":3555},[3545,6278,3612],{"class":3551},[3545,6280,4017],{"class":3555},[3545,6282,6283],{"class":3547,"line":3559},[3545,6284,3563],{"emptyLinePlaceholder":3562},[3545,6286,6287],{"class":3547,"line":3566},[3545,6288,6289],{"class":3569},"# Найпростіший Series: зі списку Python\n",[3545,6291,6292,6295,6298,6300,6303,6305,6308,6310,6313,6315,6317],{"class":3547,"line":3573},[3545,6293,6294],{"class":3555},"temperatures = pd.Series([",[3545,6296,6297],{"class":3662},"22",[3545,6299,3596],{"class":3555},[3545,6301,6302],{"class":3662},"25",[3545,6304,3596],{"class":3555},[3545,6306,6307],{"class":3662},"19",[3545,6309,3596],{"class":3555},[3545,6311,6312],{"class":3662},"27",[3545,6314,3596],{"class":3555},[3545,6316,5632],{"class":3662},[3545,6318,3724],{"class":3555},[3545,6320,6321],{"class":3547,"line":3579},[3545,6322,3563],{"emptyLinePlaceholder":3562},[3545,6324,6325,6327],{"class":3547,"line":3618},[3545,6326,3760],{"class":3585},[3545,6328,6329],{"class":3555},"(temperatures)\n",[3545,6331,6332],{"class":3547,"line":3624},[3545,6333,6334],{"class":3569},"# 0    22\n",[3545,6336,6337],{"class":3547,"line":3639},[3545,6338,6339],{"class":3569},"# 1    25\n",[3545,6341,6342],{"class":3547,"line":3645},[3545,6343,6344],{"class":3569},"# 2    19\n",[3545,6346,6347],{"class":3547,"line":3650},[3545,6348,6349],{"class":3569},"# 3    27\n",[3545,6351,6352],{"class":3547,"line":3656},[3545,6353,6354],{"class":3569},"# 4    23\n",[3545,6356,6357],{"class":3547,"line":3666},[3545,6358,6359],{"class":3569},"# dtype: int64\n",[3512,6361,6362],{},"За замовчуванням індекс — це числа 0, 1, 2... Але можна задати власний:",[3535,6364,6366],{"className":3537,"code":6365,"language":3539,"meta":3540,"style":3540},"# Series з іменованим індексом\ngrades = pd.Series(\n    [85, 92, 78, 96, 71],\n    index=[\"Іван\", \"Олена\", \"Петро\", \"Марія\", \"Андрій\"]\n)\n\nprint(grades)\n# Іван      85\n# Олена     92\n# Петро     78\n# Марія     96\n# Андрій    71\n# dtype: int64\n",[3542,6367,6368,6373,6378,6405,6438,6442,6446,6453,6458,6463,6468,6473,6478],{"__ignoreMap":3540},[3545,6369,6370],{"class":3547,"line":3548},[3545,6371,6372],{"class":3569},"# Series з іменованим індексом\n",[3545,6374,6375],{"class":3547,"line":3559},[3545,6376,6377],{"class":3555},"grades = pd.Series(\n",[3545,6379,6380,6383,6385,6387,6390,6392,6394,6396,6398,6400,6403],{"class":3547,"line":3566},[3545,6381,6382],{"class":3555},"    [",[3545,6384,5469],{"class":3662},[3545,6386,3596],{"class":3555},[3545,6388,6389],{"class":3662},"92",[3545,6391,3596],{"class":3555},[3545,6393,5489],{"class":3662},[3545,6395,3596],{"class":3555},[3545,6397,5499],{"class":3662},[3545,6399,3596],{"class":3555},[3545,6401,6402],{"class":3662},"71",[3545,6404,4767],{"class":3555},[3545,6406,6407,6410,6413,6416,6418,6421,6423,6426,6428,6431,6433,6436],{"class":3547,"line":3573},[3545,6408,6409],{"class":3599},"    index",[3545,6411,6412],{"class":3555},"=[",[3545,6414,6415],{"class":3592},"\"Іван\"",[3545,6417,3596],{"class":3555},[3545,6419,6420],{"class":3592},"\"Олена\"",[3545,6422,3596],{"class":3555},[3545,6424,6425],{"class":3592},"\"Петро\"",[3545,6427,3596],{"class":3555},[3545,6429,6430],{"class":3592},"\"Марія\"",[3545,6432,3596],{"class":3555},[3545,6434,6435],{"class":3592},"\"Андрій\"",[3545,6437,3824],{"class":3555},[3545,6439,6440],{"class":3547,"line":3579},[3545,6441,3784],{"class":3555},[3545,6443,6444],{"class":3547,"line":3618},[3545,6445,3563],{"emptyLinePlaceholder":3562},[3545,6447,6448,6450],{"class":3547,"line":3624},[3545,6449,3760],{"class":3585},[3545,6451,6452],{"class":3555},"(grades)\n",[3545,6454,6455],{"class":3547,"line":3639},[3545,6456,6457],{"class":3569},"# Іван      85\n",[3545,6459,6460],{"class":3547,"line":3645},[3545,6461,6462],{"class":3569},"# Олена     92\n",[3545,6464,6465],{"class":3547,"line":3650},[3545,6466,6467],{"class":3569},"# Петро     78\n",[3545,6469,6470],{"class":3547,"line":3656},[3545,6471,6472],{"class":3569},"# Марія     96\n",[3545,6474,6475],{"class":3547,"line":3666},[3545,6476,6477],{"class":3569},"# Андрій    71\n",[3545,6479,6480],{"class":3547,"line":3674},[3545,6481,6359],{"class":3569},[4179,6483,6484],{},[3512,6485,6486],{},"Аналогія: Series — це як стовпець «Оцінки» у класному журналі. Зліва — прізвища учнів (індекс), справа — їхні бали (значення). Кожен рядок — пара «ім'я: оцінка».",[3512,6488,6489],{},[3972,6490,6491],{},"Доступ до елементів Series:",[3535,6493,6495],{"className":3537,"code":6494,"language":3539,"meta":3540,"style":3540},"print(grades[\"Олена\"])    # 92  — за ім'ям індексу\nprint(grades.iloc[1])     # 92  — за числовою позицією (iloc = integer location)\nprint(grades[1])          # 92  — теж за позицією (якщо індекс числовий)\n\n# Зрізи\nprint(grades[\"Іван\":\"Петро\"])  # Іван, Олена, Петро\nprint(grades.iloc[0:3])        # Перші три елементи\n",[3542,6496,6497,6511,6526,6540,6544,6549,6566],{"__ignoreMap":3540},[3545,6498,6499,6501,6504,6506,6508],{"class":3547,"line":3548},[3545,6500,3760],{"class":3585},[3545,6502,6503],{"class":3555},"(grades[",[3545,6505,6420],{"class":3592},[3545,6507,5258],{"class":3555},[3545,6509,6510],{"class":3569},"# 92  — за ім'ям індексу\n",[3545,6512,6513,6515,6518,6520,6523],{"class":3547,"line":3559},[3545,6514,3760],{"class":3585},[3545,6516,6517],{"class":3555},"(grades.iloc[",[3545,6519,4214],{"class":3662},[3545,6521,6522],{"class":3555},"])     ",[3545,6524,6525],{"class":3569},"# 92  — за числовою позицією (iloc = integer location)\n",[3545,6527,6528,6530,6532,6534,6537],{"class":3547,"line":3566},[3545,6529,3760],{"class":3585},[3545,6531,6503],{"class":3555},[3545,6533,4214],{"class":3662},[3545,6535,6536],{"class":3555},"])          ",[3545,6538,6539],{"class":3569},"# 92  — теж за позицією (якщо індекс числовий)\n",[3545,6541,6542],{"class":3547,"line":3573},[3545,6543,3563],{"emptyLinePlaceholder":3562},[3545,6545,6546],{"class":3547,"line":3579},[3545,6547,6548],{"class":3569},"# Зрізи\n",[3545,6550,6551,6553,6555,6557,6559,6561,6563],{"class":3547,"line":3618},[3545,6552,3760],{"class":3585},[3545,6554,6503],{"class":3555},[3545,6556,6415],{"class":3592},[3545,6558,4000],{"class":3555},[3545,6560,6425],{"class":3592},[3545,6562,5300],{"class":3555},[3545,6564,6565],{"class":3569},"# Іван, Олена, Петро\n",[3545,6567,6568,6570,6572,6574,6576,6578,6581],{"class":3547,"line":3624},[3545,6569,3760],{"class":3585},[3545,6571,6517],{"class":3555},[3545,6573,3748],{"class":3662},[3545,6575,4000],{"class":3555},[3545,6577,4224],{"class":3662},[3545,6579,6580],{"class":3555},"])        ",[3545,6582,6583],{"class":3569},"# Перші три елементи\n",[3512,6585,6586],{},[3972,6587,6588],{},"Векторизовані операції над Series:",[3535,6590,6592],{"className":3537,"code":6591,"language":3539,"meta":3540,"style":3540},"# Операції зі скалярами — застосовуються до кожного елемента\nprint(grades + 5)      # Додати 5 балів усім\nprint(grades * 1.1)    # Підвищити всі оцінки на 10%\nprint(grades > 80)     # Хто пройшов поріг у 80 балів?\n\n# Відбір лише тих, хто має оцінку > 80\nexcellent = grades[grades > 80]\nprint(excellent)\n# Іван     85\n# Олена    92\n# Марія    96\n# dtype: int64\n\n# Агрегатні функції\nprint(f\"Середня оцінка: {grades.mean():.1f}\")   # 84.4\nprint(f\"Найвища:        {grades.max()}\")          # 96\nprint(f\"Найнижча:       {grades.min()}\")          # 71\n",[3542,6593,6594,6599,6613,6628,6643,6647,6652,6661,6668,6673,6678,6683,6687,6691,6696,6721,6746],{"__ignoreMap":3540},[3545,6595,6596],{"class":3547,"line":3548},[3545,6597,6598],{"class":3569},"# Операції зі скалярами — застосовуються до кожного елемента\n",[3545,6600,6601,6603,6606,6608,6610],{"class":3547,"line":3559},[3545,6602,3760],{"class":3585},[3545,6604,6605],{"class":3555},"(grades + ",[3545,6607,4234],{"class":3662},[3545,6609,4917],{"class":3555},[3545,6611,6612],{"class":3569},"# Додати 5 балів усім\n",[3545,6614,6615,6617,6620,6623,6625],{"class":3547,"line":3566},[3545,6616,3760],{"class":3585},[3545,6618,6619],{"class":3555},"(grades * ",[3545,6621,6622],{"class":3662},"1.1",[3545,6624,4722],{"class":3555},[3545,6626,6627],{"class":3569},"# Підвищити всі оцінки на 10%\n",[3545,6629,6630,6632,6635,6638,6640],{"class":3547,"line":3573},[3545,6631,3760],{"class":3585},[3545,6633,6634],{"class":3555},"(grades > ",[3545,6636,6637],{"class":3662},"80",[3545,6639,4902],{"class":3555},[3545,6641,6642],{"class":3569},"# Хто пройшов поріг у 80 балів?\n",[3545,6644,6645],{"class":3547,"line":3579},[3545,6646,3563],{"emptyLinePlaceholder":3562},[3545,6648,6649],{"class":3547,"line":3618},[3545,6650,6651],{"class":3569},"# Відбір лише тих, хто має оцінку > 80\n",[3545,6653,6654,6657,6659],{"class":3547,"line":3624},[3545,6655,6656],{"class":3555},"excellent = grades[grades > ",[3545,6658,6637],{"class":3662},[3545,6660,3824],{"class":3555},[3545,6662,6663,6665],{"class":3547,"line":3639},[3545,6664,3760],{"class":3585},[3545,6666,6667],{"class":3555},"(excellent)\n",[3545,6669,6670],{"class":3547,"line":3645},[3545,6671,6672],{"class":3569},"# Іван     85\n",[3545,6674,6675],{"class":3547,"line":3650},[3545,6676,6677],{"class":3569},"# Олена    92\n",[3545,6679,6680],{"class":3547,"line":3656},[3545,6681,6682],{"class":3569},"# Марія    96\n",[3545,6684,6685],{"class":3547,"line":3666},[3545,6686,6359],{"class":3569},[3545,6688,6689],{"class":3547,"line":3674},[3545,6690,3563],{"emptyLinePlaceholder":3562},[3545,6692,6693],{"class":3547,"line":3687},[3545,6694,6695],{"class":3569},"# Агрегатні функції\n",[3545,6697,6698,6700,6702,6704,6707,6709,6712,6714,6716,6718],{"class":3547,"line":3708},[3545,6699,3760],{"class":3585},[3545,6701,3589],{"class":3555},[3545,6703,3766],{"class":3765},[3545,6705,6706],{"class":3592},"\"Середня оцінка: ",[3545,6708,3772],{"class":3765},[3545,6710,6711],{"class":3555},"grades.mean()",[3545,6713,5603],{"class":3765},[3545,6715,3781],{"class":3592},[3545,6717,5730],{"class":3555},[3545,6719,6720],{"class":3569},"# 84.4\n",[3545,6722,6723,6725,6727,6729,6732,6734,6737,6739,6741,6743],{"class":3547,"line":3727},[3545,6724,3760],{"class":3585},[3545,6726,3589],{"class":3555},[3545,6728,3766],{"class":3765},[3545,6730,6731],{"class":3592},"\"Найвища:        ",[3545,6733,3772],{"class":3765},[3545,6735,6736],{"class":3555},"grades.max()",[3545,6738,3883],{"class":3765},[3545,6740,3781],{"class":3592},[3545,6742,4602],{"class":3555},[3545,6744,6745],{"class":3569},"# 96\n",[3545,6747,6748,6750,6752,6754,6757,6759,6762,6764,6766,6768],{"class":3547,"line":3736},[3545,6749,3760],{"class":3585},[3545,6751,3589],{"class":3555},[3545,6753,3766],{"class":3765},[3545,6755,6756],{"class":3592},"\"Найнижча:       ",[3545,6758,3772],{"class":3765},[3545,6760,6761],{"class":3555},"grades.min()",[3545,6763,3883],{"class":3765},[3545,6765,3781],{"class":3592},[3545,6767,4602],{"class":3555},[3545,6769,6770],{"class":3569},"# 71\n",[3512,6772,6773],{},[3972,6774,6775],{},"Series зі словника Python:",[3535,6777,6779],{"className":3537,"code":6778,"language":3539,"meta":3540,"style":3540},"# Словник автоматично перетворюється на Series\ncity_populations = pd.Series({\n    \"Київ\":    2952301,\n    \"Харків\":  1421125,\n    \"Одеса\":   1015826,\n    \"Дніпро\":   980775\n})\n\nprint(city_populations.sort_values(ascending=False))\n# Київ      2952301\n# Харків    1421125\n# Одеса     1015826\n# Дніпро     980775\n",[3542,6780,6781,6786,6791,6805,6818,6831,6841,6846,6850,6867,6872,6877,6882],{"__ignoreMap":3540},[3545,6782,6783],{"class":3547,"line":3548},[3545,6784,6785],{"class":3569},"# Словник автоматично перетворюється на Series\n",[3545,6787,6788],{"class":3547,"line":3559},[3545,6789,6790],{"class":3555},"city_populations = pd.Series({\n",[3545,6792,6793,6796,6799,6802],{"class":3547,"line":3566},[3545,6794,6795],{"class":3592},"    \"Київ\"",[3545,6797,6798],{"class":3555},":    ",[3545,6800,6801],{"class":3662},"2952301",[3545,6803,6804],{"class":3555},",\n",[3545,6806,6807,6810,6813,6816],{"class":3547,"line":3573},[3545,6808,6809],{"class":3592},"    \"Харків\"",[3545,6811,6812],{"class":3555},":  ",[3545,6814,6815],{"class":3662},"1421125",[3545,6817,6804],{"class":3555},[3545,6819,6820,6823,6826,6829],{"class":3547,"line":3579},[3545,6821,6822],{"class":3592},"    \"Одеса\"",[3545,6824,6825],{"class":3555},":   ",[3545,6827,6828],{"class":3662},"1015826",[3545,6830,6804],{"class":3555},[3545,6832,6833,6836,6838],{"class":3547,"line":3618},[3545,6834,6835],{"class":3592},"    \"Дніпро\"",[3545,6837,6825],{"class":3555},[3545,6839,6840],{"class":3662},"980775\n",[3545,6842,6843],{"class":3547,"line":3624},[3545,6844,6845],{"class":3555},"})\n",[3545,6847,6848],{"class":3547,"line":3639},[3545,6849,3563],{"emptyLinePlaceholder":3562},[3545,6851,6852,6854,6857,6860,6862,6865],{"class":3547,"line":3645},[3545,6853,3760],{"class":3585},[3545,6855,6856],{"class":3555},"(city_populations.sort_values(",[3545,6858,6859],{"class":3599},"ascending",[3545,6861,3603],{"class":3555},[3545,6863,6864],{"class":3765},"False",[3545,6866,5058],{"class":3555},[3545,6868,6869],{"class":3547,"line":3650},[3545,6870,6871],{"class":3569},"# Київ      2952301\n",[3545,6873,6874],{"class":3547,"line":3656},[3545,6875,6876],{"class":3569},"# Харків    1421125\n",[3545,6878,6879],{"class":3547,"line":3666},[3545,6880,6881],{"class":3569},"# Одеса     1015826\n",[3545,6883,6884],{"class":3547,"line":3674},[3545,6885,6886],{"class":3569},"# Дніпро     980775\n",[4188,6888],{},[4195,6890,6892],{"id":6891},"dataframe-двовимірна-таблиця-даних","DataFrame: двовимірна таблиця даних",[3512,6894,6895,6898,6899,6902,6903,6906],{},[3972,6896,6897],{},"DataFrame"," — це двовимірна структура даних pandas, аналог Excel-таблиці або SQL-таблиці бази даних. Складається зі ",[3972,6900,6901],{},"стовпців"," (кожен стовпець — це Series) та ",[3972,6904,6905],{},"рядків"," (кожен рядок — одне спостереження).",[4179,6908,6909],{},[3512,6910,6911,6912,6915],{},"Аналогія: якщо Series — це один стовпець класного журналу (скажімо, оцінки з математики), то DataFrame — це ",[3972,6913,6914],{},"весь журнал"," з усіма предметами. У кожному рядку — один учень, у кожному стовпці — один предмет.",[3512,6917,6918],{},[3972,6919,6920],{},"Створення DataFrame зі словника:",[3535,6922,6924],{"className":3537,"code":6923,"language":3539,"meta":3540,"style":3540},"data = {\n    \"Ім'я\":     [\"Іван\",  \"Олена\", \"Петро\", \"Марія\"],\n    \"Вік\":      [20,      22,      21,      23],\n    \"Математика\":[85,     92,      78,      96],\n    \"Фізика\":   [78,      88,      82,      91],\n    \"Python\":   [91,      95,      73,      89]\n}\n\ndf = pd.DataFrame(data)\nprint(df)\n",[3542,6925,6926,6931,6956,6982,7007,7033,7058,7063,7067,7072],{"__ignoreMap":3540},[3545,6927,6928],{"class":3547,"line":3548},[3545,6929,6930],{"class":3555},"data = {\n",[3545,6932,6933,6936,6939,6941,6944,6946,6948,6950,6952,6954],{"class":3547,"line":3559},[3545,6934,6935],{"class":3592},"    \"Ім'я\"",[3545,6937,6938],{"class":3555},":     [",[3545,6940,6415],{"class":3592},[3545,6942,6943],{"class":3555},",  ",[3545,6945,6420],{"class":3592},[3545,6947,3596],{"class":3555},[3545,6949,6425],{"class":3592},[3545,6951,3596],{"class":3555},[3545,6953,6430],{"class":3592},[3545,6955,4767],{"class":3555},[3545,6957,6958,6961,6964,6966,6969,6971,6973,6976,6978,6980],{"class":3547,"line":3566},[3545,6959,6960],{"class":3592},"    \"Вік\"",[3545,6962,6963],{"class":3555},":      [",[3545,6965,4986],{"class":3662},[3545,6967,6968],{"class":3555},",      ",[3545,6970,6297],{"class":3662},[3545,6972,6968],{"class":3555},[3545,6974,6975],{"class":3662},"21",[3545,6977,6968],{"class":3555},[3545,6979,5632],{"class":3662},[3545,6981,4767],{"class":3555},[3545,6983,6984,6987,6990,6992,6995,6997,6999,7001,7003,7005],{"class":3547,"line":3573},[3545,6985,6986],{"class":3592},"    \"Математика\"",[3545,6988,6989],{"class":3555},":[",[3545,6991,5469],{"class":3662},[3545,6993,6994],{"class":3555},",     ",[3545,6996,6389],{"class":3662},[3545,6998,6968],{"class":3555},[3545,7000,5489],{"class":3662},[3545,7002,6968],{"class":3555},[3545,7004,5499],{"class":3662},[3545,7006,4767],{"class":3555},[3545,7008,7009,7012,7015,7017,7019,7022,7024,7027,7029,7031],{"class":3547,"line":3579},[3545,7010,7011],{"class":3592},"    \"Фізика\"",[3545,7013,7014],{"class":3555},":   [",[3545,7016,5489],{"class":3662},[3545,7018,6968],{"class":3555},[3545,7020,7021],{"class":3662},"88",[3545,7023,6968],{"class":3555},[3545,7025,7026],{"class":3662},"82",[3545,7028,6968],{"class":3555},[3545,7030,5479],{"class":3662},[3545,7032,4767],{"class":3555},[3545,7034,7035,7038,7040,7042,7044,7047,7049,7052,7054,7056],{"class":3547,"line":3618},[3545,7036,7037],{"class":3592},"    \"Python\"",[3545,7039,7014],{"class":3555},[3545,7041,5479],{"class":3662},[3545,7043,6968],{"class":3555},[3545,7045,7046],{"class":3662},"95",[3545,7048,6968],{"class":3555},[3545,7050,7051],{"class":3662},"73",[3545,7053,6968],{"class":3555},[3545,7055,5651],{"class":3662},[3545,7057,3824],{"class":3555},[3545,7059,7060],{"class":3547,"line":3624},[3545,7061,7062],{"class":3555},"}\n",[3545,7064,7065],{"class":3547,"line":3639},[3545,7066,3563],{"emptyLinePlaceholder":3562},[3545,7068,7069],{"class":3547,"line":3645},[3545,7070,7071],{"class":3555},"df = pd.DataFrame(data)\n",[3545,7073,7074,7076],{"class":3547,"line":3650},[3545,7075,3760],{"class":3585},[3545,7077,7078],{"class":3555},"(df)\n",[5157,7080,7082,7092,7096,7100,7104,7108],{"title":7081},"DataFrame вивід",[5161,7083,7085,5169,7088],{"className":7084},[3547],[3545,7086,5168],{"className":7087},[5167],[3545,7089,7091],{"className":7090},[5173],"print(df)",[5161,7093,7095],{"className":7094},[3547],"   Ім'я  Вік  Математика  Фізика  Python",[5161,7097,7099],{"className":7098},[3547],"0  Іван   20          85      78      91",[5161,7101,7103],{"className":7102},[3547],"1  Олена  22          92      88      95",[5161,7105,7107],{"className":7106},[3547],"2  Петро  21          78      82      73",[5161,7109,7111],{"className":7110},[3547],"3  Марія  23          96      91      89",[3512,7113,7114],{},[3972,7115,7116],{},"Структура DataFrame:",[3977,7118,7119,7125,7131],{},[3522,7120,7121,7124],{},[3972,7122,7123],{},"Рядки"," (rows): кожен рядок — один студент (спостереження)",[3522,7126,7127,7130],{},[3972,7128,7129],{},"Стовпці"," (columns): кожен стовпець — одна характеристика (ознака)",[3522,7132,7133,7136],{},[3972,7134,7135],{},"Індекс"," (index): автоматичний (0, 1, 2...) або кастомний — мітки рядків",[4195,7138,7140],{"id":7139},"доступ-до-даних-у-dataframe","Доступ до даних у DataFrame",[3512,7142,7143],{},"Це одна з найважливіших тем — є кілька різних способів, і кожен для свого випадку:",[3512,7145,7146],{},[3972,7147,7148],{},"1. Доступ до стовпця — як до ключа словника:",[3535,7150,7152],{"className":3537,"code":7151,"language":3539,"meta":3540,"style":3540},"# Один стовпець → Series\nages = df[\"Вік\"]\nprint(type(ages))   # \u003Cclass 'pandas.core.series.Series'>\nprint(ages)\n# 0    20\n# 1    22\n# 2    21\n# 3    23\n# Name: Вік, dtype: int64\n\n# Кілька стовпців → DataFrame (передайте список)\nsubjects = df[[\"Математика\", \"Фізика\", \"Python\"]]\n",[3542,7153,7154,7159,7169,7183,7190,7195,7200,7205,7210,7215,7219,7224],{"__ignoreMap":3540},[3545,7155,7156],{"class":3547,"line":3548},[3545,7157,7158],{"class":3569},"# Один стовпець → Series\n",[3545,7160,7161,7164,7167],{"class":3547,"line":3559},[3545,7162,7163],{"class":3555},"ages = df[",[3545,7165,7166],{"class":3592},"\"Вік\"",[3545,7168,3824],{"class":3555},[3545,7170,7171,7173,7175,7177,7180],{"class":3547,"line":3566},[3545,7172,3760],{"class":3585},[3545,7174,3589],{"class":3555},[3545,7176,4577],{"class":3714},[3545,7178,7179],{"class":3555},"(ages))   ",[3545,7181,7182],{"class":3569},"# \u003Cclass 'pandas.core.series.Series'>\n",[3545,7184,7185,7187],{"class":3547,"line":3573},[3545,7186,3760],{"class":3585},[3545,7188,7189],{"class":3555},"(ages)\n",[3545,7191,7192],{"class":3547,"line":3579},[3545,7193,7194],{"class":3569},"# 0    20\n",[3545,7196,7197],{"class":3547,"line":3618},[3545,7198,7199],{"class":3569},"# 1    22\n",[3545,7201,7202],{"class":3547,"line":3624},[3545,7203,7204],{"class":3569},"# 2    21\n",[3545,7206,7207],{"class":3547,"line":3639},[3545,7208,7209],{"class":3569},"# 3    23\n",[3545,7211,7212],{"class":3547,"line":3645},[3545,7213,7214],{"class":3569},"# Name: Вік, dtype: int64\n",[3545,7216,7217],{"class":3547,"line":3650},[3545,7218,3563],{"emptyLinePlaceholder":3562},[3545,7220,7221],{"class":3547,"line":3656},[3545,7222,7223],{"class":3569},"# Кілька стовпців → DataFrame (передайте список)\n",[3545,7225,7226,7229,7232,7234,7237,7239,7242],{"class":3547,"line":3666},[3545,7227,7228],{"class":3555},"subjects = df[[",[3545,7230,7231],{"class":3592},"\"Математика\"",[3545,7233,3596],{"class":3555},[3545,7235,7236],{"class":3592},"\"Фізика\"",[3545,7238,3596],{"class":3555},[3545,7240,7241],{"class":3592},"\"Python\"",[3545,7243,7244],{"class":3555},"]]\n",[3512,7246,7247],{},[3972,7248,7249,7250,7253],{},"2. Доступ до рядків через ",[3542,7251,7252],{},".iloc"," — за числовою позицією:",[3535,7255,7257],{"className":3537,"code":7256,"language":3539,"meta":3540,"style":3540},"# iloc = integer location (позиція, як у списку)\nfirst_row = df.iloc[0]     # Перший рядок (Іван)\nlast_row  = df.iloc[-1]    # Останній рядок (Марія)\nslice_df  = df.iloc[1:3]   # Рядки 1 та 2 (Олена і Петро)\n\n# Конкретна комірка: рядок 1, стовпець 2\nvalue = df.iloc[1, 2]  # 92 — оцінка Олени з математики\n",[3542,7258,7259,7264,7277,7290,7307,7311,7316],{"__ignoreMap":3540},[3545,7260,7261],{"class":3547,"line":3548},[3545,7262,7263],{"class":3569},"# iloc = integer location (позиція, як у списку)\n",[3545,7265,7266,7269,7271,7274],{"class":3547,"line":3559},[3545,7267,7268],{"class":3555},"first_row = df.iloc[",[3545,7270,3748],{"class":3662},[3545,7272,7273],{"class":3555},"]     ",[3545,7275,7276],{"class":3569},"# Перший рядок (Іван)\n",[3545,7278,7279,7282,7284,7287],{"class":3547,"line":3566},[3545,7280,7281],{"class":3555},"last_row  = df.iloc[-",[3545,7283,4214],{"class":3662},[3545,7285,7286],{"class":3555},"]    ",[3545,7288,7289],{"class":3569},"# Останній рядок (Марія)\n",[3545,7291,7292,7295,7297,7299,7301,7304],{"class":3547,"line":3573},[3545,7293,7294],{"class":3555},"slice_df  = df.iloc[",[3545,7296,4214],{"class":3662},[3545,7298,4000],{"class":3555},[3545,7300,4224],{"class":3662},[3545,7302,7303],{"class":3555},"]   ",[3545,7305,7306],{"class":3569},"# Рядки 1 та 2 (Олена і Петро)\n",[3545,7308,7309],{"class":3547,"line":3579},[3545,7310,3563],{"emptyLinePlaceholder":3562},[3545,7312,7313],{"class":3547,"line":3618},[3545,7314,7315],{"class":3569},"# Конкретна комірка: рядок 1, стовпець 2\n",[3545,7317,7318,7321,7323,7325,7327,7329],{"class":3547,"line":3624},[3545,7319,7320],{"class":3555},"value = df.iloc[",[3545,7322,4214],{"class":3662},[3545,7324,3596],{"class":3555},[3545,7326,4219],{"class":3662},[3545,7328,4266],{"class":3555},[3545,7330,7331],{"class":3569},"# 92 — оцінка Олени з математики\n",[3512,7333,7334],{},[3972,7335,7336,7337,7340],{},"3. Доступ до рядків через ",[3542,7338,7339],{},".loc"," — за міткою індексу:",[3535,7342,7344],{"className":3537,"code":7343,"language":3539,"meta":3540,"style":3540},"# loc = label-based location (за міткою)\n# Якщо індекс числовий, він збігається з iloc:\nrow = df.loc[0]    # Рядок з індексом 0 (Іван)\n\n# Але якщо задати кастомний індекс:\ndf_named = df.set_index(\"Ім'я\")  # Тепер індекс — імена студентів\nivan_data = df_named.loc[\"Іван\"]  # Доступ за ім'ям\n",[3542,7345,7346,7351,7356,7368,7372,7377,7390],{"__ignoreMap":3540},[3545,7347,7348],{"class":3547,"line":3548},[3545,7349,7350],{"class":3569},"# loc = label-based location (за міткою)\n",[3545,7352,7353],{"class":3547,"line":3559},[3545,7354,7355],{"class":3569},"# Якщо індекс числовий, він збігається з iloc:\n",[3545,7357,7358,7361,7363,7365],{"class":3547,"line":3566},[3545,7359,7360],{"class":3555},"row = df.loc[",[3545,7362,3748],{"class":3662},[3545,7364,7286],{"class":3555},[3545,7366,7367],{"class":3569},"# Рядок з індексом 0 (Іван)\n",[3545,7369,7370],{"class":3547,"line":3573},[3545,7371,3563],{"emptyLinePlaceholder":3562},[3545,7373,7374],{"class":3547,"line":3579},[3545,7375,7376],{"class":3569},"# Але якщо задати кастомний індекс:\n",[3545,7378,7379,7382,7385,7387],{"class":3547,"line":3618},[3545,7380,7381],{"class":3555},"df_named = df.set_index(",[3545,7383,7384],{"class":3592},"\"Ім'я\"",[3545,7386,4671],{"class":3555},[3545,7388,7389],{"class":3569},"# Тепер індекс — імена студентів\n",[3545,7391,7392,7395,7397,7399],{"class":3547,"line":3624},[3545,7393,7394],{"class":3555},"ivan_data = df_named.loc[",[3545,7396,6415],{"class":3592},[3545,7398,4266],{"class":3555},[3545,7400,7401],{"class":3569},"# Доступ за ім'ям\n",[4482,7403,7404,7416,7434],{},[3512,7405,7406],{},[3972,7407,7408,7409,7412,7413,4000],{},"Різниця між ",[3542,7410,7411],{},"iloc"," та ",[3542,7414,7415],{},"loc",[3977,7417,7418,7424],{},[3522,7419,7420,7423],{},[3542,7421,7422],{},"df.iloc[0]"," — завжди перший рядок (за позицією)",[3522,7425,7426,7429,7430,7433],{},[3542,7427,7428],{},"df.loc[0]"," — рядок з ",[3972,7431,7432],{},"міткою"," 0 (якщо індекс числовий, збігається; якщо ні — інша поведінка)",[3512,7435,7436,7437,7439,7440,4504],{},"Правило: якщо ви думаєте «мені потрібен перший\u002Fдругий\u002FN-й рядок» — використовуйте ",[3542,7438,7411],{},". Якщо «мені потрібен рядок з конкретним ім'ям або ID» — ",[3542,7441,7415],{},[3512,7443,7444],{},[3972,7445,7446],{},"4. Фільтрація рядків за умовою:",[3535,7448,7450],{"className":3537,"code":7449,"language":3539,"meta":3540,"style":3540},"# Студенти, яким більше 21 року\nolder = df[df[\"Вік\"] > 21]\n\n# Студенти з оцінкою з Python вище 85\npython_good = df[df[\"Python\"] > 85]\n\n# Кілька умов (& = AND, | = OR)\ntop_students = df[(df[\"Математика\"] > 85) & (df[\"Python\"] > 85)]\n\nprint(top_students[[\"Ім'я\", \"Математика\", \"Python\"]])\n#    Ім'я  Математика  Python\n# 1  Олена          92      95\n",[3542,7451,7452,7457,7471,7475,7480,7493,7497,7502,7525,7529,7548,7553],{"__ignoreMap":3540},[3545,7453,7454],{"class":3547,"line":3548},[3545,7455,7456],{"class":3569},"# Студенти, яким більше 21 року\n",[3545,7458,7459,7462,7464,7467,7469],{"class":3547,"line":3559},[3545,7460,7461],{"class":3555},"older = df[df[",[3545,7463,7166],{"class":3592},[3545,7465,7466],{"class":3555},"] > ",[3545,7468,6975],{"class":3662},[3545,7470,3824],{"class":3555},[3545,7472,7473],{"class":3547,"line":3566},[3545,7474,3563],{"emptyLinePlaceholder":3562},[3545,7476,7477],{"class":3547,"line":3573},[3545,7478,7479],{"class":3569},"# Студенти з оцінкою з Python вище 85\n",[3545,7481,7482,7485,7487,7489,7491],{"class":3547,"line":3579},[3545,7483,7484],{"class":3555},"python_good = df[df[",[3545,7486,7241],{"class":3592},[3545,7488,7466],{"class":3555},[3545,7490,5469],{"class":3662},[3545,7492,3824],{"class":3555},[3545,7494,7495],{"class":3547,"line":3618},[3545,7496,3563],{"emptyLinePlaceholder":3562},[3545,7498,7499],{"class":3547,"line":3624},[3545,7500,7501],{"class":3569},"# Кілька умов (& = AND, | = OR)\n",[3545,7503,7504,7507,7509,7511,7513,7516,7518,7520,7522],{"class":3547,"line":3639},[3545,7505,7506],{"class":3555},"top_students = df[(df[",[3545,7508,7231],{"class":3592},[3545,7510,7466],{"class":3555},[3545,7512,5469],{"class":3662},[3545,7514,7515],{"class":3555},") & (df[",[3545,7517,7241],{"class":3592},[3545,7519,7466],{"class":3555},[3545,7521,5469],{"class":3662},[3545,7523,7524],{"class":3555},")]\n",[3545,7526,7527],{"class":3547,"line":3645},[3545,7528,3563],{"emptyLinePlaceholder":3562},[3545,7530,7531,7533,7536,7538,7540,7542,7544,7546],{"class":3547,"line":3650},[3545,7532,3760],{"class":3585},[3545,7534,7535],{"class":3555},"(top_students[[",[3545,7537,7384],{"class":3592},[3545,7539,3596],{"class":3555},[3545,7541,7231],{"class":3592},[3545,7543,3596],{"class":3555},[3545,7545,7241],{"class":3592},[3545,7547,4786],{"class":3555},[3545,7549,7550],{"class":3547,"line":3656},[3545,7551,7552],{"class":3569},"#    Ім'я  Математика  Python\n",[3545,7554,7555],{"class":3547,"line":3666},[3545,7556,7557],{"class":3569},"# 1  Олена          92      95\n",[3512,7559,7560],{},[3972,7561,7562],{},"5. Додавання нових стовпців:",[3535,7564,7566],{"className":3537,"code":7565,"language":3539,"meta":3540,"style":3540},"# Обчислити середню оцінку кожного студента\ndf[\"Середня\"] = df[[\"Математика\", \"Фізика\", \"Python\"]].mean(axis=1)\n\nprint(df[[\"Ім'я\", \"Середня\"]])\n#    Ім'я     Середня\n# 0  Іван   84.666667\n# 1  Олена  91.666667\n# 2  Петро  77.666667\n# 3  Марія  92.000000\n",[3542,7567,7568,7573,7605,7609,7624,7629,7634,7639,7644],{"__ignoreMap":3540},[3545,7569,7570],{"class":3547,"line":3548},[3545,7571,7572],{"class":3569},"# Обчислити середню оцінку кожного студента\n",[3545,7574,7575,7578,7581,7584,7586,7588,7590,7592,7594,7597,7599,7601,7603],{"class":3547,"line":3559},[3545,7576,7577],{"class":3555},"df[",[3545,7579,7580],{"class":3592},"\"Середня\"",[3545,7582,7583],{"class":3555},"] = df[[",[3545,7585,7231],{"class":3592},[3545,7587,3596],{"class":3555},[3545,7589,7236],{"class":3592},[3545,7591,3596],{"class":3555},[3545,7593,7241],{"class":3592},[3545,7595,7596],{"class":3555},"]].mean(",[3545,7598,5864],{"class":3599},[3545,7600,3603],{"class":3555},[3545,7602,4214],{"class":3662},[3545,7604,3784],{"class":3555},[3545,7606,7607],{"class":3547,"line":3566},[3545,7608,3563],{"emptyLinePlaceholder":3562},[3545,7610,7611,7613,7616,7618,7620,7622],{"class":3547,"line":3573},[3545,7612,3760],{"class":3585},[3545,7614,7615],{"class":3555},"(df[[",[3545,7617,7384],{"class":3592},[3545,7619,3596],{"class":3555},[3545,7621,7580],{"class":3592},[3545,7623,4786],{"class":3555},[3545,7625,7626],{"class":3547,"line":3579},[3545,7627,7628],{"class":3569},"#    Ім'я     Середня\n",[3545,7630,7631],{"class":3547,"line":3618},[3545,7632,7633],{"class":3569},"# 0  Іван   84.666667\n",[3545,7635,7636],{"class":3547,"line":3624},[3545,7637,7638],{"class":3569},"# 1  Олена  91.666667\n",[3545,7640,7641],{"class":3547,"line":3639},[3545,7642,7643],{"class":3569},"# 2  Петро  77.666667\n",[3545,7645,7646],{"class":3547,"line":3645},[3545,7647,7648],{"class":3569},"# 3  Марія  92.000000\n",[3512,7650,7651],{},[3972,7652,7653],{},"6. Сортування:",[3535,7655,7657],{"className":3537,"code":7656,"language":3539,"meta":3540,"style":3540},"# Відсортувати за середньою оцінкою (від найвищої)\ndf_sorted = df.sort_values(\"Середня\", ascending=False)\n\nprint(df_sorted[[\"Ім'я\", \"Середня\"]])\n#    Ім'я     Середня\n# 3  Марія  92.000000\n# 1  Олена  91.666667\n# 0  Іван   84.666667\n# 2  Петро  77.666667\n",[3542,7658,7659,7664,7681,7685,7700,7704,7708,7712,7716],{"__ignoreMap":3540},[3545,7660,7661],{"class":3547,"line":3548},[3545,7662,7663],{"class":3569},"# Відсортувати за середньою оцінкою (від найвищої)\n",[3545,7665,7666,7669,7671,7673,7675,7677,7679],{"class":3547,"line":3559},[3545,7667,7668],{"class":3555},"df_sorted = df.sort_values(",[3545,7670,7580],{"class":3592},[3545,7672,3596],{"class":3555},[3545,7674,6859],{"class":3599},[3545,7676,3603],{"class":3555},[3545,7678,6864],{"class":3765},[3545,7680,3784],{"class":3555},[3545,7682,7683],{"class":3547,"line":3566},[3545,7684,3563],{"emptyLinePlaceholder":3562},[3545,7686,7687,7689,7692,7694,7696,7698],{"class":3547,"line":3573},[3545,7688,3760],{"class":3585},[3545,7690,7691],{"class":3555},"(df_sorted[[",[3545,7693,7384],{"class":3592},[3545,7695,3596],{"class":3555},[3545,7697,7580],{"class":3592},[3545,7699,4786],{"class":3555},[3545,7701,7702],{"class":3547,"line":3579},[3545,7703,7628],{"class":3569},[3545,7705,7706],{"class":3547,"line":3618},[3545,7707,7648],{"class":3569},[3545,7709,7710],{"class":3547,"line":3624},[3545,7711,7638],{"class":3569},[3545,7713,7714],{"class":3547,"line":3639},[3545,7715,7633],{"class":3569},[3545,7717,7718],{"class":3547,"line":3645},[3545,7719,7643],{"class":3569},[4188,7721],{},[3507,7723,7725],{"id":7724},"частина-3-читання-та-запис-даних","Частина 3. Читання та запис даних",[3512,7727,7728],{},"У реальному житті дані рідко вводять вручну. Зазвичай це CSV-файли з бази даних, Excel-звіти від відділу продажів, або JSON із API сервісу.",[4195,7730,7732],{"id":7731},"читання-csv-файлів","Читання CSV файлів",[3512,7734,7735],{},"CSV (Comma-Separated Values) — найпоширеніший формат обміну табличними даними:",[3535,7737,7739],{"className":3537,"code":7738,"language":3539,"meta":3540,"style":3540},"df = pd.read_csv(\"sales.csv\")\n",[3542,7740,7741],{"__ignoreMap":3540},[3545,7742,7743,7745,7747],{"class":3547,"line":3548},[3545,7744,4026],{"class":3555},[3545,7746,3593],{"class":3592},[3545,7748,3784],{"class":3555},[3512,7750,7751,7752,7755],{},"Але в реальних файлах часто є нюанси. ",[3542,7753,7754],{},"read_csv"," має десятки параметрів — ось найважливіші:",[3535,7757,7759],{"className":3537,"code":7758,"language":3539,"meta":3540,"style":3540},"# Основні параметри read_csv\ndf = pd.read_csv(\n    \"sales.csv\",\n    sep=\";\",                   # Роздільник (за замовчуванням \",\")\n    header=0,                  # Рядок із заголовками (0 = перший)\n    encoding=\"utf-8\",          # Кодування файлу\n    na_values=[\"N\u002FA\", \"-\"],    # Значення, які трактувати як NaN (пропуск)\n    usecols=[\"date\", \"price\"], # Читати лише певні стовпці\n    dtype={\"price\": float},    # Примусово задати тип стовпця\n    parse_dates=[\"date\"],      # Автоматично розпарсити дати\n    nrows=1000                 # Читати лише перші 1000 рядків\n)\n",[3542,7760,7761,7766,7771,7778,7794,7809,7824,7845,7864,7885,7900,7913],{"__ignoreMap":3540},[3545,7762,7763],{"class":3547,"line":3548},[3545,7764,7765],{"class":3569},"# Основні параметри read_csv\n",[3545,7767,7768],{"class":3547,"line":3559},[3545,7769,7770],{"class":3555},"df = pd.read_csv(\n",[3545,7772,7773,7776],{"class":3547,"line":3566},[3545,7774,7775],{"class":3592},"    \"sales.csv\"",[3545,7777,6804],{"class":3555},[3545,7779,7780,7783,7785,7788,7791],{"class":3547,"line":3573},[3545,7781,7782],{"class":3599},"    sep",[3545,7784,3603],{"class":3555},[3545,7786,7787],{"class":3592},"\";\"",[3545,7789,7790],{"class":3555},",                   ",[3545,7792,7793],{"class":3569},"# Роздільник (за замовчуванням \",\")\n",[3545,7795,7796,7799,7801,7803,7806],{"class":3547,"line":3579},[3545,7797,7798],{"class":3599},"    header",[3545,7800,3603],{"class":3555},[3545,7802,3748],{"class":3662},[3545,7804,7805],{"class":3555},",                  ",[3545,7807,7808],{"class":3569},"# Рядок із заголовками (0 = перший)\n",[3545,7810,7811,7814,7816,7818,7821],{"class":3547,"line":3618},[3545,7812,7813],{"class":3599},"    encoding",[3545,7815,3603],{"class":3555},[3545,7817,3606],{"class":3592},[3545,7819,7820],{"class":3555},",          ",[3545,7822,7823],{"class":3569},"# Кодування файлу\n",[3545,7825,7826,7829,7831,7834,7836,7839,7842],{"class":3547,"line":3624},[3545,7827,7828],{"class":3599},"    na_values",[3545,7830,6412],{"class":3555},[3545,7832,7833],{"class":3592},"\"N\u002FA\"",[3545,7835,3596],{"class":3555},[3545,7837,7838],{"class":3592},"\"-\"",[3545,7840,7841],{"class":3555},"],    ",[3545,7843,7844],{"class":3569},"# Значення, які трактувати як NaN (пропуск)\n",[3545,7846,7847,7850,7852,7854,7856,7858,7861],{"class":3547,"line":3639},[3545,7848,7849],{"class":3599},"    usecols",[3545,7851,6412],{"class":3555},[3545,7853,3927],{"class":3592},[3545,7855,3596],{"class":3555},[3545,7857,3721],{"class":3592},[3545,7859,7860],{"class":3555},"], ",[3545,7862,7863],{"class":3569},"# Читати лише певні стовпці\n",[3545,7865,7866,7869,7872,7874,7877,7879,7882],{"class":3547,"line":3645},[3545,7867,7868],{"class":3599},"    dtype",[3545,7870,7871],{"class":3555},"={",[3545,7873,3721],{"class":3592},[3545,7875,7876],{"class":3555},": ",[3545,7878,3715],{"class":3714},[3545,7880,7881],{"class":3555},"},    ",[3545,7883,7884],{"class":3569},"# Примусово задати тип стовпця\n",[3545,7886,7887,7890,7892,7894,7897],{"class":3547,"line":3650},[3545,7888,7889],{"class":3599},"    parse_dates",[3545,7891,6412],{"class":3555},[3545,7893,3927],{"class":3592},[3545,7895,7896],{"class":3555},"],      ",[3545,7898,7899],{"class":3569},"# Автоматично розпарсити дати\n",[3545,7901,7902,7905,7907,7910],{"class":3547,"line":3656},[3545,7903,7904],{"class":3599},"    nrows",[3545,7906,3603],{"class":3555},[3545,7908,7909],{"class":3662},"1000",[3545,7911,7912],{"class":3569},"                 # Читати лише перші 1000 рядків\n",[3545,7914,7915],{"class":3547,"line":3666},[3545,7916,3784],{"class":3555},[4482,7918,7919,7922,7923,7926,7927,7930,7931,7934],{},[3972,7920,7921],{},"Проблема кодування"," — дуже поширена. Якщо у файлі є кирилиця і Python видає ",[3542,7924,7925],{},"UnicodeDecodeError",", спробуйте ",[3542,7928,7929],{},"encoding=\"utf-8-sig\""," (Excel часто додає BOM-маркер), або ",[3542,7932,7933],{},"encoding=\"cp1251\""," (Windows-кодування для кирилиці).",[3512,7936,7937],{},[3972,7938,7939],{},"Приклад реального читання:",[3535,7941,7943],{"className":3537,"code":7942,"language":3539,"meta":3540,"style":3540},"# Уявіть файл sales.csv:\n# date,product,category,price,quantity\n# 2024-01-15,Телефон,Електроніка,12000,3\n# 2024-01-16,Ноутбук,Електроніка,28000,1\n# 2024-01-17,Футболка,Одяг,450,10\n\ndf = pd.read_csv(\"sales.csv\", parse_dates=[\"date\"])\nprint(df.dtypes)\n# date        datetime64[ns]  ← автоматично розпарсена дата!\n# product     object          ← рядки\n# category    object\n# price       int64\n# quantity    int64\n",[3542,7944,7945,7950,7955,7960,7965,7970,7974,7991,7998,8003,8008,8013,8018],{"__ignoreMap":3540},[3545,7946,7947],{"class":3547,"line":3548},[3545,7948,7949],{"class":3569},"# Уявіть файл sales.csv:\n",[3545,7951,7952],{"class":3547,"line":3559},[3545,7953,7954],{"class":3569},"# date,product,category,price,quantity\n",[3545,7956,7957],{"class":3547,"line":3566},[3545,7958,7959],{"class":3569},"# 2024-01-15,Телефон,Електроніка,12000,3\n",[3545,7961,7962],{"class":3547,"line":3573},[3545,7963,7964],{"class":3569},"# 2024-01-16,Ноутбук,Електроніка,28000,1\n",[3545,7966,7967],{"class":3547,"line":3579},[3545,7968,7969],{"class":3569},"# 2024-01-17,Футболка,Одяг,450,10\n",[3545,7971,7972],{"class":3547,"line":3618},[3545,7973,3563],{"emptyLinePlaceholder":3562},[3545,7975,7976,7978,7980,7982,7985,7987,7989],{"class":3547,"line":3624},[3545,7977,4026],{"class":3555},[3545,7979,3593],{"class":3592},[3545,7981,3596],{"class":3555},[3545,7983,7984],{"class":3599},"parse_dates",[3545,7986,6412],{"class":3555},[3545,7988,3927],{"class":3592},[3545,7990,3724],{"class":3555},[3545,7992,7993,7995],{"class":3547,"line":3639},[3545,7994,3760],{"class":3585},[3545,7996,7997],{"class":3555},"(df.dtypes)\n",[3545,7999,8000],{"class":3547,"line":3645},[3545,8001,8002],{"class":3569},"# date        datetime64[ns]  ← автоматично розпарсена дата!\n",[3545,8004,8005],{"class":3547,"line":3650},[3545,8006,8007],{"class":3569},"# product     object          ← рядки\n",[3545,8009,8010],{"class":3547,"line":3656},[3545,8011,8012],{"class":3569},"# category    object\n",[3545,8014,8015],{"class":3547,"line":3666},[3545,8016,8017],{"class":3569},"# price       int64\n",[3545,8019,8020],{"class":3547,"line":3674},[3545,8021,8022],{"class":3569},"# quantity    int64\n",[4195,8024,8026],{"id":8025},"читання-excel-файлів","Читання Excel файлів",[3535,8028,8030],{"className":3537,"code":8029,"language":3539,"meta":3540,"style":3540},"# Один аркуш (перший за замовчуванням)\ndf = pd.read_excel(\"report.xlsx\")\n\n# Конкретний аркуш за ім'ям або номером\ndf_sheet2 = pd.read_excel(\"report.xlsx\", sheet_name=\"Продажі\")\ndf_third   = pd.read_excel(\"report.xlsx\", sheet_name=2)\n\n# Усі аркуші — отримаємо словник\nall_sheets = pd.read_excel(\"report.xlsx\", sheet_name=None)\n# all_sheets[\"Продажі\"] → DataFrame\n# all_sheets[\"Витрати\"] → DataFrame\n",[3542,8031,8032,8037,8047,8051,8056,8075,8092,8096,8101,8118,8123],{"__ignoreMap":3540},[3545,8033,8034],{"class":3547,"line":3548},[3545,8035,8036],{"class":3569},"# Один аркуш (перший за замовчуванням)\n",[3545,8038,8039,8042,8045],{"class":3547,"line":3559},[3545,8040,8041],{"class":3555},"df = pd.read_excel(",[3545,8043,8044],{"class":3592},"\"report.xlsx\"",[3545,8046,3784],{"class":3555},[3545,8048,8049],{"class":3547,"line":3566},[3545,8050,3563],{"emptyLinePlaceholder":3562},[3545,8052,8053],{"class":3547,"line":3573},[3545,8054,8055],{"class":3569},"# Конкретний аркуш за ім'ям або номером\n",[3545,8057,8058,8061,8063,8065,8068,8070,8073],{"class":3547,"line":3579},[3545,8059,8060],{"class":3555},"df_sheet2 = pd.read_excel(",[3545,8062,8044],{"class":3592},[3545,8064,3596],{"class":3555},[3545,8066,8067],{"class":3599},"sheet_name",[3545,8069,3603],{"class":3555},[3545,8071,8072],{"class":3592},"\"Продажі\"",[3545,8074,3784],{"class":3555},[3545,8076,8077,8080,8082,8084,8086,8088,8090],{"class":3547,"line":3618},[3545,8078,8079],{"class":3555},"df_third   = pd.read_excel(",[3545,8081,8044],{"class":3592},[3545,8083,3596],{"class":3555},[3545,8085,8067],{"class":3599},[3545,8087,3603],{"class":3555},[3545,8089,4219],{"class":3662},[3545,8091,3784],{"class":3555},[3545,8093,8094],{"class":3547,"line":3624},[3545,8095,3563],{"emptyLinePlaceholder":3562},[3545,8097,8098],{"class":3547,"line":3639},[3545,8099,8100],{"class":3569},"# Усі аркуші — отримаємо словник\n",[3545,8102,8103,8106,8108,8110,8112,8114,8116],{"class":3547,"line":3645},[3545,8104,8105],{"class":3555},"all_sheets = pd.read_excel(",[3545,8107,8044],{"class":3592},[3545,8109,3596],{"class":3555},[3545,8111,8067],{"class":3599},[3545,8113,3603],{"class":3555},[3545,8115,4263],{"class":3765},[3545,8117,3784],{"class":3555},[3545,8119,8120],{"class":3547,"line":3650},[3545,8121,8122],{"class":3569},"# all_sheets[\"Продажі\"] → DataFrame\n",[3545,8124,8125],{"class":3547,"line":3656},[3545,8126,8127],{"class":3569},"# all_sheets[\"Витрати\"] → DataFrame\n",[8129,8130,8131,8132,8135,8136,8139,8140,8143,8144,8147,8148,4504],"warning",{},"Для читання ",[3542,8133,8134],{},".xlsx"," файлів pandas потребує додаткової бібліотеки — ",[3542,8137,8138],{},"openpyxl",". Встановіть її: ",[3542,8141,8142],{},"pip install openpyxl",". Для старого формату ",[3542,8145,8146],{},".xls"," — ",[3542,8149,8150],{},"xlrd",[4195,8152,8154],{"id":8153},"запис-даних-у-файли","Запис даних у файли",[3535,8156,8158],{"className":3537,"code":8157,"language":3539,"meta":3540,"style":3540},"# Запис у CSV\ndf.to_csv(\"output.csv\", index=False)  # index=False — не писати стовпець індексу\n\n# Запис у CSV із іншим роздільником\ndf.to_csv(\"output_semicolon.csv\", sep=\";\", index=False)\n\n# Запис у Excel\ndf.to_excel(\"output.xlsx\", sheet_name=\"Результати\", index=False)\n\n# Запис у JSON\ndf.to_json(\"output.json\", orient=\"records\", force_ascii=False)\n",[3542,8159,8160,8165,8187,8191,8196,8222,8226,8231,8258,8262,8267],{"__ignoreMap":3540},[3545,8161,8162],{"class":3547,"line":3548},[3545,8163,8164],{"class":3569},"# Запис у CSV\n",[3545,8166,8167,8170,8173,8175,8178,8180,8182,8184],{"class":3547,"line":3559},[3545,8168,8169],{"class":3555},"df.to_csv(",[3545,8171,8172],{"class":3592},"\"output.csv\"",[3545,8174,3596],{"class":3555},[3545,8176,8177],{"class":3599},"index",[3545,8179,3603],{"class":3555},[3545,8181,6864],{"class":3765},[3545,8183,4671],{"class":3555},[3545,8185,8186],{"class":3569},"# index=False — не писати стовпець індексу\n",[3545,8188,8189],{"class":3547,"line":3566},[3545,8190,3563],{"emptyLinePlaceholder":3562},[3545,8192,8193],{"class":3547,"line":3573},[3545,8194,8195],{"class":3569},"# Запис у CSV із іншим роздільником\n",[3545,8197,8198,8200,8203,8205,8208,8210,8212,8214,8216,8218,8220],{"class":3547,"line":3579},[3545,8199,8169],{"class":3555},[3545,8201,8202],{"class":3592},"\"output_semicolon.csv\"",[3545,8204,3596],{"class":3555},[3545,8206,8207],{"class":3599},"sep",[3545,8209,3603],{"class":3555},[3545,8211,7787],{"class":3592},[3545,8213,3596],{"class":3555},[3545,8215,8177],{"class":3599},[3545,8217,3603],{"class":3555},[3545,8219,6864],{"class":3765},[3545,8221,3784],{"class":3555},[3545,8223,8224],{"class":3547,"line":3618},[3545,8225,3563],{"emptyLinePlaceholder":3562},[3545,8227,8228],{"class":3547,"line":3624},[3545,8229,8230],{"class":3569},"# Запис у Excel\n",[3545,8232,8233,8236,8239,8241,8243,8245,8248,8250,8252,8254,8256],{"class":3547,"line":3639},[3545,8234,8235],{"class":3555},"df.to_excel(",[3545,8237,8238],{"class":3592},"\"output.xlsx\"",[3545,8240,3596],{"class":3555},[3545,8242,8067],{"class":3599},[3545,8244,3603],{"class":3555},[3545,8246,8247],{"class":3592},"\"Результати\"",[3545,8249,3596],{"class":3555},[3545,8251,8177],{"class":3599},[3545,8253,3603],{"class":3555},[3545,8255,6864],{"class":3765},[3545,8257,3784],{"class":3555},[3545,8259,8260],{"class":3547,"line":3645},[3545,8261,3563],{"emptyLinePlaceholder":3562},[3545,8263,8264],{"class":3547,"line":3650},[3545,8265,8266],{"class":3569},"# Запис у JSON\n",[3545,8268,8269,8272,8275,8277,8280,8282,8285,8287,8290,8292,8294],{"class":3547,"line":3656},[3545,8270,8271],{"class":3555},"df.to_json(",[3545,8273,8274],{"class":3592},"\"output.json\"",[3545,8276,3596],{"class":3555},[3545,8278,8279],{"class":3599},"orient",[3545,8281,3603],{"class":3555},[3545,8283,8284],{"class":3592},"\"records\"",[3545,8286,3596],{"class":3555},[3545,8288,8289],{"class":3599},"force_ascii",[3545,8291,3603],{"class":3555},[3545,8293,6864],{"class":3765},[3545,8295,3784],{"class":3555},[8297,8298,8299,8302],"tip",{},[3542,8300,8301],{},"index=False"," при записі в CSV — майже завжди потрібний параметр. Без нього pandas додає зайвий стовпець із числами 0, 1, 2... ліворуч від даних, що робить файл «незрозумілим» для інших програм.",[4188,8304],{},[3507,8306,8308],{"id":8307},"частина-4-інформаційні-методи-перше-знайомство-з-датасетом","Частина 4. Інформаційні методи — перше знайомство з датасетом",[3512,8310,8311,8312,8315],{},"Щоразу коли ви отримуєте новий датасет — перший крок однаковий: ",[3972,8313,8314],{},"дізнатися, що взагалі в цьому файлі",". Для цього є кілька незамінних методів.",[3512,8317,8318],{},"Будемо працювати з одним прикладом — уявний датасет продажів інтернет-магазину:",[3535,8320,8322],{"className":3537,"code":8321,"language":3539,"meta":3540,"style":3540},"import pandas as pd\n\n# Завантажуємо датасет\ndf = pd.read_csv(\"sales_data.csv\")\n",[3542,8323,8324,8334,8338,8343],{"__ignoreMap":3540},[3545,8325,8326,8328,8330,8332],{"class":3547,"line":3548},[3545,8327,3552],{"class":3551},[3545,8329,4012],{"class":3555},[3545,8331,3612],{"class":3551},[3545,8333,4017],{"class":3555},[3545,8335,8336],{"class":3547,"line":3559},[3545,8337,3563],{"emptyLinePlaceholder":3562},[3545,8339,8340],{"class":3547,"line":3566},[3545,8341,8342],{"class":3569},"# Завантажуємо датасет\n",[3545,8344,8345,8347,8350],{"class":3547,"line":3573},[3545,8346,4026],{"class":3555},[3545,8348,8349],{"class":3592},"\"sales_data.csv\"",[3545,8351,3784],{"class":3555},[4195,8353,8355,7412,8358,8361],{"id":8354},"dfheadn-та-dftailn-погляд-на-дані",[3542,8356,8357],{},"df.head(n)",[3542,8359,8360],{},"df.tail(n)"," — погляд на дані",[3512,8363,8364,8367,8368,8371],{},[3542,8365,8366],{},"head()"," показує перші рядки (за замовчуванням — 5), ",[3542,8369,8370],{},"tail()"," — останні:",[3535,8373,8375],{"className":3537,"code":8374,"language":3539,"meta":3540,"style":3540},"df.head()    # Перші 5 рядків\ndf.head(10)  # Перші 10 рядків\ndf.tail(3)   # Останні 3 рядки\n",[3542,8376,8377,8385,8397],{"__ignoreMap":3540},[3545,8378,8379,8382],{"class":3547,"line":3548},[3545,8380,8381],{"class":3555},"df.head()    ",[3545,8383,8384],{"class":3569},"# Перші 5 рядків\n",[3545,8386,8387,8390,8392,8394],{"class":3547,"line":3559},[3545,8388,8389],{"class":3555},"df.head(",[3545,8391,4664],{"class":3662},[3545,8393,4671],{"class":3555},[3545,8395,8396],{"class":3569},"# Перші 10 рядків\n",[3545,8398,8399,8402,8404,8406],{"class":3547,"line":3566},[3545,8400,8401],{"class":3555},"df.tail(",[3545,8403,4224],{"class":3662},[3545,8405,5730],{"class":3555},[3545,8407,8408],{"class":3569},"# Останні 3 рядки\n",[5157,8410,8412,8422,8426,8430,8434],{"title":8411},"df.head(3)",[5161,8413,8415,5169,8419],{"className":8414},[3547],[3545,8416,8418],{"className":8417},[5167],"In [2]:",[3545,8420,8411],{"className":8421},[5173],[5161,8423,8425],{"className":8424},[3547],"   order_id        date     product    category   price  quantity",[5161,8427,8429],{"className":8428},[3547],"0      1001  2024-01-05     Телефон  Електроніка   12000         2",[5161,8431,8433],{"className":8432},[3547],"1      1002  2024-01-06     Ноутбук  Електроніка   28000         1",[5161,8435,8437],{"className":8436},[3547],"2      1003  2024-01-07    Футболка         Одяг     450        10",[3512,8439,8440,8443,8444,8447,8448,8450],{},[3972,8441,8442],{},"Навіщо:"," одразу після ",[3542,8445,8446],{},"pd.read_csv()"," ви ще не знаєте, що у файлі. ",[3542,8449,8366],{}," дає перший «погляд» — чи ті стовпці? Чи правильно розпарсилися дати? Чи немає зайвих символів?",[3512,8452,8453,8458,8459,8461],{},[3972,8454,8455,8457],{},[3542,8456,8370],{}," перевіряє кінець файлу"," — іноді в Excel-файлах є рядки «Разом:» або «Примітки:» в кінці, які не є даними. ",[3542,8460,8370],{}," це виявить.",[4195,8463,8465,8468],{"id":8464},"dfsamplen-випадкова-вибірка",[3542,8466,8467],{},"df.sample(n)"," — випадкова вибірка",[3535,8470,8472],{"className":3537,"code":8471,"language":3539,"meta":3540,"style":3540},"df.sample(5)              # 5 випадкових рядків\ndf.sample(frac=0.01)     # 1% випадкових рядків від усього датасету\ndf.sample(5, random_state=42)  # Фіксований seed для відтворюваності\n",[3542,8473,8474,8487,8504],{"__ignoreMap":3540},[3545,8475,8476,8479,8481,8484],{"class":3547,"line":3548},[3545,8477,8478],{"class":3555},"df.sample(",[3545,8480,4234],{"class":3662},[3545,8482,8483],{"class":3555},")              ",[3545,8485,8486],{"class":3569},"# 5 випадкових рядків\n",[3545,8488,8489,8491,8494,8496,8499,8501],{"class":3547,"line":3559},[3545,8490,8478],{"class":3555},[3545,8492,8493],{"class":3599},"frac",[3545,8495,3603],{"class":3555},[3545,8497,8498],{"class":3662},"0.01",[3545,8500,4902],{"class":3555},[3545,8502,8503],{"class":3569},"# 1% випадкових рядків від усього датасету\n",[3545,8505,8506,8508,8510,8512,8515,8517,8519,8521],{"class":3547,"line":3566},[3545,8507,8478],{"class":3555},[3545,8509,4234],{"class":3662},[3545,8511,3596],{"class":3555},[3545,8513,8514],{"class":3599},"random_state",[3545,8516,3603],{"class":3555},[3545,8518,5474],{"class":3662},[3545,8520,4671],{"class":3555},[3545,8522,8523],{"class":3569},"# Фіксований seed для відтворюваності\n",[3512,8525,8526,5169,8528,8530,8531,8534,8535,8538],{},[3972,8527,8442],{},[3542,8529,8366],{}," показує лише початок — а раптом перші 1000 рядків усі з однієї категорії? ",[3542,8532,8533],{},"sample()"," дає ",[3972,8536,8537],{},"репрезентативний"," погляд на різноманітність даних.",[4195,8540,8542,8545],{"id":8541},"dfinfo-технічна-довідка-про-датасет",[3542,8543,8544],{},"df.info()"," — технічна довідка про датасет",[3512,8547,8548],{},"Це один із найважливіших методів для першого знайомства:",[3535,8550,8552],{"className":3537,"code":8551,"language":3539,"meta":3540,"style":3540},"df.info()\n",[3542,8553,8554],{"__ignoreMap":3540},[3545,8555,8556],{"class":3547,"line":3548},[3545,8557,8551],{"class":3555},[5157,8559,8560,8570,8574,8583,8587,8591,8595,8604,8612,8619,8628,8636,8645,8649],{"title":8544},[5161,8561,8563,5169,8567],{"className":8562},[3547],[3545,8564,8566],{"className":8565},[5167],"In [3]:",[3545,8568,8544],{"className":8569},[5173],[5161,8571,8573],{"className":8572},[3547],"\u003Cclass 'pandas.core.frame.DataFrame'>",[5161,8575,8577,8578,8582],{"className":8576},[3547],"RangeIndex: ",[3545,8579,8581],{"className":8580},[5191],"10000 entries",", 0 to 9999",[5161,8584,8586],{"className":8585},[3547],"Data columns (total 6 columns):",[5161,8588,8590],{"className":8589},[3547]," #   Column     Non-Null Count   Dtype",[5161,8592,8594],{"className":8593},[3547],"---  ------     --------------   -----",[5161,8596,8598,8599,8603],{"className":8597},[3547]," 0   order_id   ",[3545,8600,8602],{"className":8601},[5191],"10000 non-null","   int64",[5161,8605,8607,8608,8611],{"className":8606},[3547]," 1   date       ",[3545,8609,8602],{"className":8610},[5191],"   object",[5161,8613,8615,8616,8611],{"className":8614},[3547]," 2   product    ",[3545,8617,8602],{"className":8618},[5191],[5161,8620,8622,8623,8627],{"className":8621},[3547]," 3   category   ",[3545,8624,8626],{"className":8625},[5182]," 9850 non-null","   object  ← 150 пропусків!",[5161,8629,8631,8632,8635],{"className":8630},[3547]," 4   price      ",[3545,8633,8602],{"className":8634},[5191],"   float64",[5161,8637,8639,8640,8644],{"className":8638},[3547]," 5   quantity   ",[3545,8641,8643],{"className":8642},[5182]," 9920 non-null","   int64   ← 80 пропусків!",[5161,8646,8648],{"className":8647},[3547],"dtypes: float64(1), int64(2), object(3)",[5161,8650,8652,8653],{"className":8651},[3547],"memory usage: ",[3545,8654,8656],{"className":8655},[5173],"468.8 KB",[3512,8658,8659,8661,8662,4000],{},[3542,8660,8544],{}," розповідає вам ",[3972,8663,8664],{},"відразу",[3977,8666,8667,8673,8679,8693,8707],{},[3522,8668,8669,8672],{},[3972,8670,8671],{},"Скільки рядків"," у датасеті (10 000)",[3522,8674,8675,8678],{},[3972,8676,8677],{},"Скільки стовпців"," (6)",[3522,8680,8681,8147,8684,3596,8686,3596,8689,8692],{},[3972,8682,8683],{},"Тип кожного стовпця",[3542,8685,4386],{},[3542,8687,8688],{},"float64",[3542,8690,8691],{},"object"," (рядки)",[3522,8694,8695,8698,8699,8702,8703,8706],{},[3972,8696,8697],{},"Кількість не-пустих значень"," — якщо ",[3542,8700,8701],{},"Non-Null Count"," менше загальної кількості рядків, є ",[3972,8704,8705],{},"пропуски","!",[3522,8708,8709,8712],{},[3972,8710,8711],{},"Скільки пам'яті"," займає датасет",[4179,8714,8715],{},[3512,8716,8717,8718,8720],{},"Аналогія: ",[3542,8719,8544],{}," — це як технічний паспорт товару. Не розгортаючи упаковку, ви вже знаєте: що всередині, скільки важить, які матеріали. У випадку датасету — що за стовпці, якого типу, де є «діри».",[4195,8722,8724,8727],{"id":8723},"dfdescribe-статистичний-портрет-даних",[3542,8725,8726],{},"df.describe()"," — статистичний портрет даних",[3535,8729,8731],{"className":3537,"code":8730,"language":3539,"meta":3540,"style":3540},"df.describe()\n",[3542,8732,8733],{"__ignoreMap":3540},[3545,8734,8735],{"class":3547,"line":3548},[3545,8736,8730],{"class":3555},[5157,8738,8739,8749,8753,8757,8761,8765,8769,8773,8777,8781],{"title":8726},[5161,8740,8742,5169,8746],{"className":8741},[3547],[3545,8743,8745],{"className":8744},[5167],"In [4]:",[3545,8747,8726],{"className":8748},[5173],[5161,8750,8752],{"className":8751},[3547],"         price      quantity",[5161,8754,8756],{"className":8755},[3547],"count  10000.000   9920.000  ← кількість непустих значень",[5161,8758,8760],{"className":8759},[3547],"mean    5234.120      4.832  ← середнє",[5161,8762,8764],{"className":8763},[3547],"std     8901.445      3.217  ← стандартне відхилення",[5161,8766,8768],{"className":8767},[3547],"min       99.000      1.000  ← мінімум",[5161,8770,8772],{"className":8771},[3547],"25%      450.000      2.000  ← перший квартиль",[5161,8774,8776],{"className":8775},[3547],"50%     1200.000      4.000  ← медіана",[5161,8778,8780],{"className":8779},[3547],"75%     5500.000      7.000  ← третій квартиль",[5161,8782,8784],{"className":8783},[3547],"max   120000.000     50.000  ← максимум",[3512,8786,8787,8789,8790,4000],{},[3542,8788,8726],{}," обчислює статистику для ",[3972,8791,8792],{},"числових стовпців",[3977,8794,8795,8801,8807,8813,8821],{},[3522,8796,8797,8800],{},[3542,8798,8799],{},"count"," — кількість непустих значень",[3522,8802,8803,8806],{},[3542,8804,8805],{},"mean"," — середнє",[3522,8808,8809,8812],{},[3542,8810,8811],{},"std"," — стандартне відхилення (наскільки «розкидані» дані)",[3522,8814,8815,3596,8818,8820],{},[3542,8816,8817],{},"min",[3542,8819,3854],{}," — екстремальні значення",[3522,8822,8823,3596,8826,3596,8829,8832,8833,8835],{},[3542,8824,8825],{},"25%",[3542,8827,8828],{},"50%",[3542,8830,8831],{},"75%"," — квартилі (медіана = ",[3542,8834,8828],{},")",[3512,8837,8838],{},[3972,8839,8840],{},"Що можна дізнатися з одного погляду:",[3977,8842,8843,8853,8867],{},[3522,8844,8845,8848,8849,8852],{},[3542,8846,8847],{},"max = 120 000"," при ",[3542,8850,8851],{},"mean = 5 234"," — є дуже дорогі товари (аутлайери!)",[3522,8854,8855,8858,8859,8862,8863,8866],{},[3542,8856,8857],{},"min = 1"," для ",[3542,8860,8861],{},"quantity"," — але ",[3542,8864,8865],{},"max = 50","? Реалістично для магазину",[3522,8868,8869,8858,8872,8875],{},[3542,8870,8871],{},"std > mean",[3542,8873,8874],{},"price"," — дані дуже «розкидані»",[3535,8877,8879],{"className":3537,"code":8878,"language":3539,"meta":3540,"style":3540},"# Для текстових стовпців — окремо:\ndf.describe(include=\"object\")\n\n# Або включити все:\ndf.describe(include=\"all\")\n",[3542,8880,8881,8886,8901,8905,8910],{"__ignoreMap":3540},[3545,8882,8883],{"class":3547,"line":3548},[3545,8884,8885],{"class":3569},"# Для текстових стовпців — окремо:\n",[3545,8887,8888,8891,8894,8896,8899],{"class":3547,"line":3559},[3545,8889,8890],{"class":3555},"df.describe(",[3545,8892,8893],{"class":3599},"include",[3545,8895,3603],{"class":3555},[3545,8897,8898],{"class":3592},"\"object\"",[3545,8900,3784],{"class":3555},[3545,8902,8903],{"class":3547,"line":3566},[3545,8904,3563],{"emptyLinePlaceholder":3562},[3545,8906,8907],{"class":3547,"line":3573},[3545,8908,8909],{"class":3569},"# Або включити все:\n",[3545,8911,8912,8914,8916,8918,8921],{"class":3547,"line":3579},[3545,8913,8890],{"class":3555},[3545,8915,8893],{"class":3599},[3545,8917,3603],{"class":3555},[3545,8919,8920],{"class":3592},"\"all\"",[3545,8922,3784],{"class":3555},[4195,8924,8926],{"id":8925},"швидка-перевірка-пропусків","Швидка перевірка пропусків",[3512,8928,8929,8930,8932],{},"Після ",[3542,8931,8544],{}," ми вже знаємо, де є пропуски. Але для детальної картини:",[3535,8934,8936],{"className":3537,"code":8935,"language":3539,"meta":3540,"style":3540},"# Кількість пропусків у кожному стовпці\nprint(df.isnull().sum())\n# order_id      0\n# date          0\n# product       0\n# category    150\n# price         0\n# quantity     80\n\n# Відсоток пропусків\nprint(df.isnull().sum() \u002F len(df) * 100)\n# category    1.5%\n# quantity    0.8%\n",[3542,8937,8938,8943,8950,8955,8960,8965,8970,8975,8980,8984,8989,9006,9011],{"__ignoreMap":3540},[3545,8939,8940],{"class":3547,"line":3548},[3545,8941,8942],{"class":3569},"# Кількість пропусків у кожному стовпці\n",[3545,8944,8945,8947],{"class":3547,"line":3559},[3545,8946,3760],{"class":3585},[3545,8948,8949],{"class":3555},"(df.isnull().sum())\n",[3545,8951,8952],{"class":3547,"line":3566},[3545,8953,8954],{"class":3569},"# order_id      0\n",[3545,8956,8957],{"class":3547,"line":3573},[3545,8958,8959],{"class":3569},"# date          0\n",[3545,8961,8962],{"class":3547,"line":3579},[3545,8963,8964],{"class":3569},"# product       0\n",[3545,8966,8967],{"class":3547,"line":3618},[3545,8968,8969],{"class":3569},"# category    150\n",[3545,8971,8972],{"class":3547,"line":3624},[3545,8973,8974],{"class":3569},"# price         0\n",[3545,8976,8977],{"class":3547,"line":3639},[3545,8978,8979],{"class":3569},"# quantity     80\n",[3545,8981,8982],{"class":3547,"line":3645},[3545,8983,3563],{"emptyLinePlaceholder":3562},[3545,8985,8986],{"class":3547,"line":3650},[3545,8987,8988],{"class":3569},"# Відсоток пропусків\n",[3545,8990,8991,8993,8996,8998,9001,9004],{"class":3547,"line":3656},[3545,8992,3760],{"class":3585},[3545,8994,8995],{"class":3555},"(df.isnull().sum() \u002F ",[3545,8997,5572],{"class":3585},[3545,8999,9000],{"class":3555},"(df) * ",[3545,9002,9003],{"class":3662},"100",[3545,9005,3784],{"class":3555},[3545,9007,9008],{"class":3547,"line":3666},[3545,9009,9010],{"class":3569},"# category    1.5%\n",[3545,9012,9013],{"class":3547,"line":3674},[3545,9014,9015],{"class":3569},"# quantity    0.8%\n",[4482,9017,9018],{},"Пропуски в даних (NaN — Not a Number) — одна з головних проблем реальних датасетів. Якщо у стовпці 5% пропусків — це нормально. Якщо 50% — такий стовпець майже непридатний для аналізу. В Модулі 3 ми вивчимо, як з ними боротися.",[4195,9020,9022],{"id":9021},"підсумкова-таблиця-методів","Підсумкова таблиця методів",[4179,9024,9025],{},[3512,9026,9027],{},"Аналогія: уявіть, що вам принесли товсту папку з незнайомими документами (датасет). Ось що ви робите в першу чергу:",[6040,9029,9030,9043],{},[6043,9031,9032],{},[6046,9033,9034,9037,9040],{},[6049,9035,9036],{"align":6051},"Метод",[6049,9038,9039],{"align":6051},"Аналогія",[6049,9041,9042],{"align":6051},"Що дізнаєтеся",[6060,9044,9045,9058,9071,9084,9096,9108],{},[6046,9046,9047,9052,9055],{},[6065,9048,9049],{"align":6051},[3542,9050,9051],{},"df.head()",[6065,9053,9054],{"align":6051},"Переглянути першу сторінку",[6065,9056,9057],{"align":6051},"Структура, назви стовпців, перші дані",[6046,9059,9060,9065,9068],{},[6065,9061,9062],{"align":6051},[3542,9063,9064],{},"df.tail()",[6065,9066,9067],{"align":6051},"Перегорнути до кінця",[6065,9069,9070],{"align":6051},"Чи немає зайвих рядків у кінці",[6046,9072,9073,9078,9081],{},[6065,9074,9075],{"align":6051},[3542,9076,9077],{},"df.sample()",[6065,9079,9080],{"align":6051},"Відкрити навмання",[6065,9082,9083],{"align":6051},"Різноманітність та типовість даних",[6046,9085,9086,9090,9093],{},[6065,9087,9088],{"align":6051},[3542,9089,8544],{},[6065,9091,9092],{"align":6051},"Прочитати зміст",[6065,9094,9095],{"align":6051},"Типи, розмір, де є пропуски",[6046,9097,9098,9102,9105],{},[6065,9099,9100],{"align":6051},[3542,9101,8726],{},[6065,9103,9104],{"align":6051},"Прочитати резюме",[6065,9106,9107],{"align":6051},"Статистичний портрет числових даних",[6046,9109,9110,9115,9118],{},[6065,9111,9112],{"align":6051},[3542,9113,9114],{},"df.isnull().sum()",[6065,9116,9117],{"align":6051},"Знайти порожні аркуші",[6065,9119,9120],{"align":6051},"Точна кількість пропусків",[4188,9122],{},[3507,9124,9126],{"id":9125},"практика","Практика",[9128,9129,9130,9242,9459],"accordion",{},[9131,9132,9134,9137,9205,9210],"accordion-item",{"icon":2681,"label":9133},"Рівень 1 — Перше знайомство з реальним датасетом",[3512,9135,9136],{},"Завантажте датасет Iris — класичний набір даних у Data Science (150 рядків, 4 числових ознаки + клас квітки):",[3535,9138,9140],{"className":3537,"code":9139,"language":3539,"meta":3540,"style":3540},"import pandas as pd\n\n# Варіант 1: завантажити через seaborn (якщо встановлено)\nimport seaborn as sns\ndf = sns.load_dataset(\"iris\")\n\n# Варіант 2: завантажити напряму по URL\nurl = \"https:\u002F\u002Fraw.githubusercontent.com\u002Fmwaskom\u002Fseaborn-data\u002Fmaster\u002Firis.csv\"\ndf = pd.read_csv(url)\n",[3542,9141,9142,9152,9156,9161,9173,9183,9187,9192,9200],{"__ignoreMap":3540},[3545,9143,9144,9146,9148,9150],{"class":3547,"line":3548},[3545,9145,3552],{"class":3551},[3545,9147,4012],{"class":3555},[3545,9149,3612],{"class":3551},[3545,9151,4017],{"class":3555},[3545,9153,9154],{"class":3547,"line":3559},[3545,9155,3563],{"emptyLinePlaceholder":3562},[3545,9157,9158],{"class":3547,"line":3566},[3545,9159,9160],{"class":3569},"# Варіант 1: завантажити через seaborn (якщо встановлено)\n",[3545,9162,9163,9165,9168,9170],{"class":3547,"line":3573},[3545,9164,3552],{"class":3551},[3545,9166,9167],{"class":3555}," seaborn ",[3545,9169,3612],{"class":3551},[3545,9171,9172],{"class":3555}," sns\n",[3545,9174,9175,9178,9181],{"class":3547,"line":3579},[3545,9176,9177],{"class":3555},"df = sns.load_dataset(",[3545,9179,9180],{"class":3592},"\"iris\"",[3545,9182,3784],{"class":3555},[3545,9184,9185],{"class":3547,"line":3618},[3545,9186,3563],{"emptyLinePlaceholder":3562},[3545,9188,9189],{"class":3547,"line":3624},[3545,9190,9191],{"class":3569},"# Варіант 2: завантажити напряму по URL\n",[3545,9193,9194,9197],{"class":3547,"line":3639},[3545,9195,9196],{"class":3555},"url = ",[3545,9198,9199],{"class":3592},"\"https:\u002F\u002Fraw.githubusercontent.com\u002Fmwaskom\u002Fseaborn-data\u002Fmaster\u002Firis.csv\"\n",[3545,9201,9202],{"class":3547,"line":3645},[3545,9203,9204],{"class":3555},"df = pd.read_csv(url)\n",[3512,9206,9207],{},[3972,9208,9209],{},"Завдання:",[3519,9211,9212,9218,9224,9233,9236],{},[3522,9213,9214,9215,8835],{},"Виведіть перші 10 рядків (",[3542,9216,9217],{},"head(10)",[3522,9219,9220,9221,9223],{},"Виведіть ",[3542,9222,8544],{}," і дайте відповідь: скільки стовпців, які типи, чи є пропуски?",[3522,9225,9220,9226,9228,9229,9232],{},[3542,9227,8726],{}," і дайте відповідь: яка середня довжина пелюстки (",[3542,9230,9231],{},"petal_length",")?",[3522,9234,9235],{},"Скільки пропусків у кожному стовпці?",[3522,9237,9238,9239,8835],{},"Скільки унікальних видів квіток? (",[3542,9240,9241],{},"df[\"species\"].unique()",[9131,9243,9246,9249,9431,9435],{"icon":9244,"label":9245},"i-lucide-bar-chart-2","Рівень 2 — Аналіз датасету студентів",[3512,9247,9248],{},"Створіть датасет вручну та проведіть аналіз:",[3535,9250,9252],{"className":3537,"code":9251,"language":3539,"meta":3540,"style":3540},"import pandas as pd\n\ndata = {\n    \"Ім'я\":         [\"Аліна\", \"Богдан\", \"Вікторія\", \"Григорій\", \"Дарина\"],\n    \"Курс\":         [2, 3, 2, 4, 1],\n    \"Математика\":   [88, 72, 95, 61, 84],\n    \"Програмування\":[91, 85, 98, 70, 79],\n    \"Статистика\":   [76, 68, 92, 74, 88]\n}\n\ndf = pd.DataFrame(data)\n",[3542,9253,9254,9264,9268,9272,9304,9331,9360,9389,9419,9423,9427],{"__ignoreMap":3540},[3545,9255,9256,9258,9260,9262],{"class":3547,"line":3548},[3545,9257,3552],{"class":3551},[3545,9259,4012],{"class":3555},[3545,9261,3612],{"class":3551},[3545,9263,4017],{"class":3555},[3545,9265,9266],{"class":3547,"line":3559},[3545,9267,3563],{"emptyLinePlaceholder":3562},[3545,9269,9270],{"class":3547,"line":3566},[3545,9271,6930],{"class":3555},[3545,9273,9274,9276,9279,9282,9284,9287,9289,9292,9294,9297,9299,9302],{"class":3547,"line":3573},[3545,9275,6935],{"class":3592},[3545,9277,9278],{"class":3555},":         [",[3545,9280,9281],{"class":3592},"\"Аліна\"",[3545,9283,3596],{"class":3555},[3545,9285,9286],{"class":3592},"\"Богдан\"",[3545,9288,3596],{"class":3555},[3545,9290,9291],{"class":3592},"\"Вікторія\"",[3545,9293,3596],{"class":3555},[3545,9295,9296],{"class":3592},"\"Григорій\"",[3545,9298,3596],{"class":3555},[3545,9300,9301],{"class":3592},"\"Дарина\"",[3545,9303,4767],{"class":3555},[3545,9305,9306,9309,9311,9313,9315,9317,9319,9321,9323,9325,9327,9329],{"class":3547,"line":3579},[3545,9307,9308],{"class":3592},"    \"Курс\"",[3545,9310,9278],{"class":3555},[3545,9312,4219],{"class":3662},[3545,9314,3596],{"class":3555},[3545,9316,4224],{"class":3662},[3545,9318,3596],{"class":3555},[3545,9320,4219],{"class":3662},[3545,9322,3596],{"class":3555},[3545,9324,4229],{"class":3662},[3545,9326,3596],{"class":3555},[3545,9328,4214],{"class":3662},[3545,9330,4767],{"class":3555},[3545,9332,9333,9335,9337,9339,9341,9344,9346,9348,9350,9353,9355,9358],{"class":3547,"line":3618},[3545,9334,6986],{"class":3592},[3545,9336,7014],{"class":3555},[3545,9338,7021],{"class":3662},[3545,9340,3596],{"class":3555},[3545,9342,9343],{"class":3662},"72",[3545,9345,3596],{"class":3555},[3545,9347,7046],{"class":3662},[3545,9349,3596],{"class":3555},[3545,9351,9352],{"class":3662},"61",[3545,9354,3596],{"class":3555},[3545,9356,9357],{"class":3662},"84",[3545,9359,4767],{"class":3555},[3545,9361,9362,9365,9367,9369,9371,9373,9375,9378,9380,9382,9384,9387],{"class":3547,"line":3624},[3545,9363,9364],{"class":3592},"    \"Програмування\"",[3545,9366,6989],{"class":3555},[3545,9368,5479],{"class":3662},[3545,9370,3596],{"class":3555},[3545,9372,5469],{"class":3662},[3545,9374,3596],{"class":3555},[3545,9376,9377],{"class":3662},"98",[3545,9379,3596],{"class":3555},[3545,9381,5523],{"class":3662},[3545,9383,3596],{"class":3555},[3545,9385,9386],{"class":3662},"79",[3545,9388,4767],{"class":3555},[3545,9390,9391,9394,9396,9399,9401,9404,9406,9408,9410,9413,9415,9417],{"class":3547,"line":3639},[3545,9392,9393],{"class":3592},"    \"Статистика\"",[3545,9395,7014],{"class":3555},[3545,9397,9398],{"class":3662},"76",[3545,9400,3596],{"class":3555},[3545,9402,9403],{"class":3662},"68",[3545,9405,3596],{"class":3555},[3545,9407,6389],{"class":3662},[3545,9409,3596],{"class":3555},[3545,9411,9412],{"class":3662},"74",[3545,9414,3596],{"class":3555},[3545,9416,7021],{"class":3662},[3545,9418,3824],{"class":3555},[3545,9420,9421],{"class":3547,"line":3645},[3545,9422,7062],{"class":3555},[3545,9424,9425],{"class":3547,"line":3650},[3545,9426,3563],{"emptyLinePlaceholder":3562},[3545,9428,9429],{"class":3547,"line":3656},[3545,9430,7071],{"class":3555},[3512,9432,9433],{},[3972,9434,9209],{},[3519,9436,9437,9444,9447,9450,9453],{},[3522,9438,9439,9440,9443],{},"Додайте стовпець ",[3542,9441,9442],{},"\"Середній бал\""," — середнє з трьох предметів для кожного студента",[3522,9445,9446],{},"Відфільтруйте студентів із середнім балом вище 80",[3522,9448,9449],{},"Знайдіть студента з найвищим балом з програмування",[3522,9451,9452],{},"Відсортуйте датасет за середнім балом від найвищого до найнижчого",[3522,9454,9455,9456,8835],{},"Запишіть результат у CSV файл (",[3542,9457,9458],{},"to_csv",[9131,9460,9463,9466,9496,9500],{"icon":9461,"label":9462},"i-lucide-ship","Рівень 3 — Дослідження Titanic",[3512,9464,9465],{},"Реальний датасет із даними про пасажирів Titanic:",[3535,9467,9469],{"className":3537,"code":9468,"language":3539,"meta":3540,"style":3540},"import pandas as pd\n\nurl = \"https:\u002F\u002Fraw.githubusercontent.com\u002Fdatasciencedojo\u002Fdatasets\u002Fmaster\u002Ftitanic.csv\"\ndf = pd.read_csv(url)\n",[3542,9470,9471,9481,9485,9492],{"__ignoreMap":3540},[3545,9472,9473,9475,9477,9479],{"class":3547,"line":3548},[3545,9474,3552],{"class":3551},[3545,9476,4012],{"class":3555},[3545,9478,3612],{"class":3551},[3545,9480,4017],{"class":3555},[3545,9482,9483],{"class":3547,"line":3559},[3545,9484,3563],{"emptyLinePlaceholder":3562},[3545,9486,9487,9489],{"class":3547,"line":3566},[3545,9488,9196],{"class":3555},[3545,9490,9491],{"class":3592},"\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdatasciencedojo\u002Fdatasets\u002Fmaster\u002Ftitanic.csv\"\n",[3545,9493,9494],{"class":3547,"line":3573},[3545,9495,9204],{"class":3555},[3512,9497,9498],{},[3972,9499,9209],{},[3519,9501,9502,9514,9520,9554,9561],{},[3522,9503,9504,9505,3596,9507,3596,9510,9513],{},"Вивчіть датасет: ",[3542,9506,8366],{},[3542,9508,9509],{},"info()",[3542,9511,9512],{},"describe()",". Які стовпці є? Де найбільше пропусків?",[3522,9515,9516,9517,8835],{},"Обчисліть загальний відсоток виживших (",[3542,9518,9519],{},"Survived",[3522,9521,9522,9523,9526,9527,3936,9530],{},"Обчисліть відсоток виживших ",[3972,9524,9525],{},"окремо"," для кожного класу каюти (",[3542,9528,9529],{},"Pclass",[3535,9531,9533],{"className":3537,"code":9532,"language":3539,"meta":3540,"style":3540},"df.groupby(\"Pclass\")[\"Survived\"].mean() * 100\n",[3542,9534,9535],{"__ignoreMap":3540},[3545,9536,9537,9540,9543,9545,9548,9551],{"class":3547,"line":3548},[3545,9538,9539],{"class":3555},"df.groupby(",[3545,9541,9542],{"class":3592},"\"Pclass\"",[3545,9544,4076],{"class":3555},[3545,9546,9547],{"class":3592},"\"Survived\"",[3545,9549,9550],{"class":3555},"].mean() * ",[3545,9552,9553],{"class":3662},"100\n",[3522,9555,9556,9557,9560],{},"Яка середня вартість квитка (",[3542,9558,9559],{},"Fare",") для виживших і тих, хто загинув?",[3522,9562,9563,9564,9567],{},"Скільки пропусків у стовпці ",[3542,9565,9566],{},"Age","? Який відсоток від усіх рядків?",[4188,9569],{},[3507,9571,9573],{"id":9572},"резюме","Резюме",[9575,9576,9577,9582,9597,9602,9607,9625,9649,9654],"card-group",{},[9578,9579,9581],"card",{"icon":9580,"title":6058},"i-lucide-grid-3x3","N-вимірний масив однорідного типу. Зберігається суцільним блоком у пам'яті. Операції виконуються векторизовано — без явних циклів Python. У 10–100 разів швидше за списки для числових обчислень.",[9578,9583,9585,9586,9588,9589,9592,9593,9596],{"icon":92,"title":9584},"Векторизація","Виконання операції відразу над усіма елементами масиву без циклу ",[3542,9587,3677],{},". ",[3542,9590,9591],{},"arr * 2"," замість ",[3542,9594,9595],{},"[x * 2 for x in arr]",". NumPy передає роботу оптимізованому C-коду всередині.",[9578,9598,9601],{"icon":9599,"title":9600},"i-lucide-list","pandas Series","Одновимірна структура: індекс + значення. Аналог одного стовпця таблиці. Підтримує іменовані мітки, векторизовані операції, булеву індексацію.",[9578,9603,9606],{"icon":9604,"title":9605},"i-lucide-table","pandas DataFrame","Двовимірна таблиця: рядки (спостереження) × стовпці (ознаки). Кожен стовпець — Series. Аналог Excel-таблиці або SQL-таблиці. Основна структура даних у Data Science.",[9578,9608,9611,9613,9614,9617,9618,9613,9621,9624],{"icon":9609,"title":9610},"i-lucide-mouse-pointer","iloc vs loc",[3542,9612,7422],{}," — рядок за ",[3972,9615,9616],{},"числовою позицією"," (0, 1, 2...). ",[3542,9619,9620],{},"df.loc[\"Іван\"]",[3972,9622,9623],{},"міткою індексу",". Якщо індекс числовий — збігаються. Якщо ні — поведінка різна.",[9578,9626,9629,9632,9633,3596,9635,3596,9637,3596,9639,9588,9642,9645,9646,9648],{"icon":9627,"title":9628},"i-lucide-file-text","read_csv \u002F to_csv",[3542,9630,9631],{},"pd.read_csv(\"file.csv\")"," — читання CSV. Ключові параметри: ",[3542,9634,8207],{},[3542,9636,3600],{},[3542,9638,7984],{},[3542,9640,9641],{},"na_values",[3542,9643,9644],{},"df.to_csv(\"out.csv\", index=False)"," — запис. ",[3542,9647,8301],{}," майже завжди потрібний.",[9578,9650,9653],{"icon":9651,"title":9652},"i-lucide-eye","head \u002F tail \u002F sample","Перші N рядків, останні N рядків, N випадкових рядків. Перший крок при роботі з будь-яким новим датасетом.",[9578,9655,9658,9660,9661,9663],{"icon":9656,"title":9657},"i-lucide-info","info \u002F describe",[3542,9659,8544],{}," — технічна довідка: типи, кількість non-null, пам'ять. ",[3542,9662,8726],{}," — статистичний портрет числових стовпців: mean, std, min, max, квартилі.",[4482,9665,9666,9669,9670,9673,9674,9676],{},[3972,9667,9668],{},"Наступна стаття"," — Основи статистики: середнє, медіана, мода, дисперсія, стандартне відхилення, розподіли та кореляція. Ці поняття пояснять, ",[3972,9671,9672],{},"чому"," цифри у ",[3542,9675,8726],{}," мають саме такі значення та що за ними стоїть.",[9678,9679,9680],"style",{},"html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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":3540,"searchDepth":3559,"depth":3559,"links":9682},[9683,9684,9697,9703,9708,9720,9721],{"id":3509,"depth":3559,"text":3510},{"id":4192,"depth":3559,"text":4193,"children":9685},[9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696],{"id":4197,"depth":3566,"text":4198},{"id":4357,"depth":3566,"text":4358},{"id":4399,"depth":3566,"text":4400},{"id":4507,"depth":3566,"text":4508},{"id":4740,"depth":3566,"text":4741},{"id":4847,"depth":3566,"text":4848},{"id":5202,"depth":3566,"text":5203},{"id":5452,"depth":3566,"text":5453},{"id":5618,"depth":3566,"text":5619},{"id":5955,"depth":3566,"text":5956},{"id":6037,"depth":3566,"text":6038},{"id":6163,"depth":3559,"text":6164,"children":9698},[9699,9700,9701,9702],{"id":6167,"depth":3566,"text":6168},{"id":6254,"depth":3566,"text":6255},{"id":6891,"depth":3566,"text":6892},{"id":7139,"depth":3566,"text":7140},{"id":7724,"depth":3559,"text":7725,"children":9704},[9705,9706,9707],{"id":7731,"depth":3566,"text":7732},{"id":8025,"depth":3566,"text":8026},{"id":8153,"depth":3566,"text":8154},{"id":8307,"depth":3559,"text":8308,"children":9709},[9710,9712,9714,9716,9718,9719],{"id":8354,"depth":3566,"text":9711},"df.head(n) та df.tail(n) — погляд на дані",{"id":8464,"depth":3566,"text":9713},"df.sample(n) — випадкова вибірка",{"id":8541,"depth":3566,"text":9715},"df.info() — технічна довідка про датасет",{"id":8723,"depth":3566,"text":9717},"df.describe() — статистичний портрет даних",{"id":8925,"depth":3566,"text":8926},{"id":9021,"depth":3566,"text":9022},{"id":9125,"depth":3559,"text":9126},{"id":9572,"depth":3559,"text":9573},"Чому стандартних списків Python недостатньо для Data Science, як NumPy прискорює обчислення у 100 разів, що таке Series і DataFrame у pandas, як читати CSV і Excel та які методи потрібні для першого знайомства з датасетом","md",null,{},{"title":3437,"description":9722},"ZAAZ1BAbuxLH8ePHbKtkkVd6tLeyZwb2LW-I8Z9IDe8",[9729,9731],{"title":3433,"path":3434,"stem":3435,"description":9730,"children":-1},"Чому Data Science використовує Jupyter замість .py файлів, як встановити та запустити JupyterLab, що таке комірки коду та Markdown, і як ефективно працювати з нотбуком",{"title":3446,"path":3447,"stem":3448,"description":9732,"children":-1},"Глибоке занурення у філософію utility-first CSS. Чому Tailwind вирішує реальні проблеми CSS у великих проєктах, як він працює під капотом і коли його варто, а коли не варто використовувати.",1785915168251]