{ "cells": [ { "cell_type": "markdown", "source": [ "## **ਨਾਈਜੀਰੀਆਈ ਮਿਊਜ਼ਿਕ Spotify ਤੋਂ ਇਕੱਠਾ ਕੀਤਾ - ਇੱਕ ਵਿਸ਼ਲੇਸ਼ਣ**\n", "\n", "ਕਲੱਸਟਰਿੰਗ [ਅਨਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ](https://wikipedia.org/wiki/Unsupervised_learning) ਦੀ ਇੱਕ ਕਿਸਮ ਹੈ ਜੋ ਇਹ ਮੰਨਦੀ ਹੈ ਕਿ ਡੇਟਾਸੈੱਟ ਅਨਲੈਬਲਡ ਹੈ ਜਾਂ ਇਸਦੇ ਇਨਪੁਟਸ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਪਰਿਭਾਸ਼ਿਤ ਆਉਟਪੁਟਸ ਨਾਲ ਨਹੀਂ ਜੋੜਿਆ ਗਿਆ। ਇਹ ਵੱਖ-ਵੱਖ ਐਲਗੋਰਿਥਮਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਅਨਲੈਬਲਡ ਡੇਟਾ ਨੂੰ ਵੱਖ ਕਰਨ ਲਈ ਅਤੇ ਡੇਟਾ ਵਿੱਚ ਪੈਟਰਨ ਦੇ ਅਧਾਰ 'ਤੇ ਸਮੂਹ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ।\n", "\n", "[**ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)\n", "\n", "### **ਪ੍ਰਸਤਾਵਨਾ**\n", "\n", "[ਕਲੱਸਟਰਿੰਗ](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ਡੇਟਾ ਦੀ ਖੋਜ ਲਈ ਬਹੁਤ ਹੀ ਲਾਭਦਾਇਕ ਹੈ। ਆਓ ਵੇਖੀਏ ਕਿ ਕੀ ਇਹ ਨਾਈਜੀਰੀਆਈ ਦਰਸ਼ਕਾਂ ਦੇ ਸੰਗੀਤ ਦੀ ਖਪਤ ਦੇ ਤਰੀਕਿਆਂ ਵਿੱਚ ਰੁਝਾਨ ਅਤੇ ਪੈਟਰਨ ਦੀ ਖੋਜ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦੀ ਹੈ।\n", "\n", "> ✅ ਇੱਕ ਮਿੰਟ ਲਓ ਅਤੇ ਕਲੱਸਟਰਿੰਗ ਦੇ ਉਪਯੋਗਾਂ ਬਾਰੇ ਸੋਚੋ। ਅਸਲ ਜ਼ਿੰਦਗੀ ਵਿੱਚ, ਕਲੱਸਟਰਿੰਗ ਉਸ ਸਮੇਂ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਕੱਪੜਿਆਂ ਦਾ ਢੇਰ ਹੁੰਦਾ ਹੈ ਅਤੇ ਤੁਹਾਨੂੰ ਆਪਣੇ ਪਰਿਵਾਰ ਦੇ ਮੈਂਬਰਾਂ ਦੇ ਕੱਪੜੇ ਵੱਖ ਕਰਨੇ ਪੈਂਦੇ ਹਨ 🧦👕👖🩲। ਡੇਟਾ ਸਾਇੰਸ ਵਿੱਚ, ਕਲੱਸਟਰਿੰਗ ਉਸ ਸਮੇਂ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਕਿਸੇ ਉਪਭੋਗਤਾ ਦੀ ਪਸੰਦ ਦਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਜਾਂ ਕਿਸੇ ਅਨਲੈਬਲਡ ਡੇਟਾਸੈੱਟ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਨਿਰਧਾਰਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਕਲੱਸਟਰਿੰਗ, ਇੱਕ ਤਰੀਕੇ ਨਾਲ, ਗੁੰਝਲ ਨੂੰ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਜੁਰਾਬਾਂ ਦੇ ਦਰਾਜ਼।\n", "\n", "ਪੇਸ਼ੇਵਰ ਸੈਟਿੰਗ ਵਿੱਚ, ਕਲੱਸਟਰਿੰਗ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਿਵੇਂ ਕਿ ਮਾਰਕੀਟ ਸੈਗਮੈਂਟੇਸ਼ਨ ਦਾ ਨਿਰਧਾਰਨ ਕਰਨਾ, ਜਿਵੇਂ ਕਿ ਕਿਹੜੀਆਂ ਉਮਰ ਦੇ ਸਮੂਹ ਕਿਹੜੀਆਂ ਚੀਜ਼ਾਂ ਖਰੀਦਦੇ ਹਨ। ਇੱਕ ਹੋਰ ਉਪਯੋਗਤਾ ਅਨੋਮਲੀ ਡਿਟੈਕਸ਼ਨ ਹੋ ਸਕਦੀ ਹੈ, ਸ਼ਾਇਦ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਲੈਣ-ਦੇਣ ਦੇ ਡੇਟਾਸੈੱਟ ਤੋਂ ਧੋਖਾਧੜੀ ਦਾ ਪਤਾ ਲਗਾਉਣ ਲਈ। ਜਾਂ ਤੁਸੀਂ ਮੈਡੀਕਲ ਸਕੈਨ ਦੇ ਬੈਚ ਵਿੱਚ ਟਿਊਮਰਾਂ ਦਾ ਨਿਰਧਾਰਨ ਕਰਨ ਲਈ ਕਲੱਸਟਰਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।\n", "\n", "✅ ਇੱਕ ਮਿੰਟ ਲਈ ਸੋਚੋ ਕਿ ਤੁਸੀਂ ਕਲੱਸਟਰਿੰਗ ਨੂੰ 'ਜੰਗਲੀ' ਵਿੱਚ ਕਿਵੇਂ ਮਿਲਿਆ ਹੋਵੇਗਾ, ਜਿਵੇਂ ਕਿ ਬੈਂਕਿੰਗ, ਈ-ਕਾਮਰਸ, ਜਾਂ ਕਾਰੋਬਾਰ ਸੈਟਿੰਗ ਵਿੱਚ।\n", "\n", "> 🎓 ਦਿਲਚਸਪ ਗੱਲ ਇਹ ਹੈ ਕਿ ਕਲੱਸਟਰ ਵਿਸ਼ਲੇਸ਼ਣ 1930 ਦੇ ਦਹਾਕੇ ਵਿੱਚ ਐਂਥਰੋਪੋਲੋਜੀ ਅਤੇ ਸਾਇਕੋਲੋਜੀ ਦੇ ਖੇਤਰਾਂ ਵਿੱਚ ਸ਼ੁਰੂ ਹੋਇਆ। ਕੀ ਤੁਸੀਂ ਕਲਪਨਾ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਇਹ ਕਿਵੇਂ ਵਰਤਿਆ ਗਿਆ ਹੋਵੇਗਾ?\n", "\n", "ਇਸਦੇ ਬਦਲੇ, ਤੁਸੀਂ ਇਸਦੀ ਵਰਤੋਂ ਖੋਜ ਦੇ ਨਤੀਜਿਆਂ ਨੂੰ ਸਮੂਹਬੱਧ ਕਰਨ ਲਈ ਕਰ ਸਕਦੇ ਹੋ - ਉਦਾਹਰਣ ਲਈ, ਖਰੀਦਦਾਰੀ ਲਿੰਕ, ਚਿੱਤਰ, ਜਾਂ ਸਮੀਖਾਵਾਂ ਦੁਆਰਾ। ਕਲੱਸਟਰਿੰਗ ਲਾਭਦਾਇਕ ਹੈ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਵੱਡਾ ਡੇਟਾਸੈੱਟ ਹੁੰਦਾ ਹੈ ਜਿਸਨੂੰ ਤੁਸੀਂ ਘਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ ਅਤੇ ਜਿਸ 'ਤੇ ਤੁਸੀਂ ਹੋਰ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਇਸ ਲਈ ਇਹ ਤਕਨੀਕ ਡੇਟਾ ਬਾਰੇ ਸਿੱਖਣ ਲਈ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਹੋਰ ਮਾਡਲ ਬਣਾਏ ਜਾਣ।\n", "\n", "✅ ਜਦੋਂ ਤੁਹਾਡਾ ਡੇਟਾ ਕਲੱਸਟਰਾਂ ਵਿੱਚ ਸੰਗਠਿਤ ਹੁੰਦਾ ਹੈ, ਤੁਸੀਂ ਇਸਨੂੰ ਇੱਕ ਕਲੱਸਟਰ ਆਈਡੀ ਸੌਂਪਦੇ ਹੋ, ਅਤੇ ਇਹ ਤਕਨੀਕ ਡੇਟਾਸੈੱਟ ਦੀ ਗੋਪਨੀਯਤਾ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਵਿੱਚ ਲਾਭਦਾਇਕ ਹੋ ਸਕਦੀ ਹੈ; ਤੁਸੀਂ ਇਸਦੀ ਬਜਾਏ ਕਲੱਸਟਰ ਆਈਡੀ ਦੁਆਰਾ ਡੇਟਾ ਪੌਇੰਟ ਦਾ ਹਵਾਲਾ ਦੇ ਸਕਦੇ ਹੋ, ਜੋ ਹੋਰ ਖੁਲਾਸਾ ਕਰਨ ਵਾਲੇ ਡੇਟਾ ਦੇ ਤੱਤਾਂ ਨਾਲੋਂ। ਕੀ ਤੁਸੀਂ ਹੋਰ ਕਾਰਨਾਂ ਬਾਰੇ ਸੋਚ ਸਕਦੇ ਹੋ ਕਿ ਤੁਸੀਂ ਕਲੱਸਟਰ ਆਈਡੀ ਨੂੰ ਕਲੱਸਟਰ ਦੇ ਹੋਰ ਤੱਤਾਂ ਦੇ ਬਜਾਏ ਇਸਨੂੰ ਪਛਾਣ ਕਰਨ ਲਈ ਕਿਉਂ ਵਰਤੋਂਗੇ?\n", "\n", "### ਕਲੱਸਟਰਿੰਗ ਨਾਲ ਸ਼ੁਰੂਆਤ\n", "\n", "> 🎓 ਕਲੱਸਟਰ ਕਿਵੇਂ ਬਣਾਏ ਜਾਂਦੇ ਹਨ ਇਹ ਬਹੁਤ ਹੱਦ ਤੱਕ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਅਸੀਂ ਡੇਟਾ ਪੌਇੰਟਸ ਨੂੰ ਸਮੂਹਾਂ ਵਿੱਚ ਕਿਵੇਂ ਇਕੱਠਾ ਕਰਦੇ ਹਾਂ। ਆਓ ਕੁਝ ਸ਼ਬਦਾਵਲੀ ਨੂੰ ਸਮਝੀਏ:\n", ">\n", "> 🎓 ['Transductive' vs. 'inductive'](https://wikipedia.org/wiki/Transduction_(machine_learning))\n", ">\n", "> ਟ੍ਰਾਂਸਡਕਟਿਵ ਇੰਫਰੈਂਸ ਉਹਨਾਂ ਟ੍ਰੇਨਿੰਗ ਕੇਸਾਂ ਤੋਂ ਲਿਆ ਜਾਂਦਾ ਹੈ ਜੋ ਖਾਸ ਟੈਸਟ ਕੇਸਾਂ ਨਾਲ ਜੁੜਦੇ ਹਨ। ਇੰਡਕਟਿਵ ਇੰਫਰੈਂਸ ਉਹਨਾਂ ਟ੍ਰੇਨਿੰਗ ਕੇਸਾਂ ਤੋਂ ਲਿਆ ਜਾਂਦਾ ਹੈ ਜੋ ਆਮ ਨਿਯਮਾਂ ਨਾਲ ਜੁੜਦੇ ਹਨ ਜੋ ਫਿਰ ਟੈਸਟ ਕੇਸਾਂ 'ਤੇ ਲਾਗੂ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।\n", ">\n", "> ਇੱਕ ਉਦਾਹਰਣ: ਕਲਪਨਾ ਕਰੋ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਡੇਟਾਸੈੱਟ ਹੈ ਜੋ ਸਿਰਫ਼ ਅੰਸ਼ਕ ਤੌਰ 'ਤੇ ਲੈਬਲਡ ਹੈ। ਕੁਝ ਚੀਜ਼ਾਂ 'ਰਿਕਾਰਡ' ਹਨ, ਕੁਝ 'ਸੀਡੀ' ਹਨ, ਅਤੇ ਕੁਝ ਖਾਲੀ ਹਨ। ਤੁਹਾਡਾ ਕੰਮ ਖਾਲੀਆਂ ਲਈ ਲੇਬਲ ਪ੍ਰਦਾਨ ਕਰਨਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇੱਕ ਇੰਡਕਟਿਵ ਪਹੁੰਚ ਚੁਣਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ 'ਰਿਕਾਰਡ' ਅਤੇ 'ਸੀਡੀ' ਦੀ ਭਾਲ ਕਰਨ ਲਈ ਇੱਕ ਮਾਡਲ ਟ੍ਰੇਨ ਕਰੋਗੇ, ਅਤੇ ਉਹਨਾਂ ਲੇਬਲਾਂ ਨੂੰ ਆਪਣੇ ਅਨਲੈਬਲਡ ਡੇਟਾ 'ਤੇ ਲਾਗੂ ਕਰੋਗੇ। ਇਹ ਪਹੁੰਚ ਉਹਨਾਂ ਚੀਜ਼ਾਂ ਨੂੰ ਵਰਗਬੱਧ ਕਰਨ ਵਿੱਚ ਮੁਸ਼ਕਲ ਹੋਵੇਗੀ ਜੋ ਅਸਲ ਵਿੱਚ 'ਕੈਸੇਟ' ਹਨ। ਟ੍ਰਾਂਸਡਕਟਿਵ ਪਹੁੰਚ, ਦੂਜੇ ਪਾਸੇ, ਇਸ ਅਣਜਾਣ ਡੇਟਾ ਨੂੰ ਹੋਰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਸੰਭਾਲਦੀ ਹੈ ਕਿਉਂਕਿ ਇਹ ਸਮਾਨ ਚੀਜ਼ਾਂ ਨੂੰ ਇਕੱਠਾ ਕਰਨ ਲਈ ਕੰਮ ਕਰਦੀ ਹੈ ਅਤੇ ਫਿਰ ਇੱਕ ਸਮੂਹ ਨੂੰ ਲੇਬਲ ਲਗਾਉਂਦੀ ਹੈ। ਇਸ ਮਾਮਲੇ ਵਿੱਚ, ਕਲੱਸਟਰ 'ਗੋਲ ਸੰਗੀਤਕ ਚੀਜ਼ਾਂ' ਅਤੇ 'ਚੌਰਸ ਸੰਗੀਤਕ ਚੀਜ਼ਾਂ' ਨੂੰ ਦਰਸਾ ਸਕਦੇ ਹਨ।\n", ">\n", "> 🎓 ['Non-flat' vs. 'flat' geometry](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\n", ">\n", "> ਗਣਿਤਕ ਸ਼ਬਦਾਵਲੀ ਤੋਂ ਲਿਆ ਗਿਆ, ਨਾਨ-ਫਲੈਟ ਵਸ. ਫਲੈਟ ਜਿਓਮੈਟਰੀ ਪੌਇੰਟਸ ਦੇ ਵਿਚਕਾਰ ਦੂਰੀਆਂ ਨੂੰ ਮਾਪਣ ਦੇ ਤਰੀਕੇ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ ਜਾਂ ਤਾਂ 'ਫਲੈਟ' ([ਯੂਕਲਿਡੀਅਨ](https://wikipedia.org/wiki/Euclidean_geometry)) ਜਾਂ 'ਨਾਨ-ਫਲੈਟ' (ਨਾਨ-ਯੂਕਲਿਡੀਅਨ) ਜਿਓਮੈਟਰੀਕਲ ਵਿਧੀਆਂ ਦੁਆਰਾ।\n", ">\n", "> 'ਫਲੈਟ' ਇਸ ਸੰਦਰਭ ਵਿੱਚ ਯੂਕਲਿਡੀਅਨ ਜਿਓਮੈਟਰੀ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ (ਜਿਸਦੇ ਕੁਝ ਹਿੱਸੇ 'ਪਲੇਨ' ਜਿਓਮੈਟਰੀ ਵਜੋਂ ਪੜ੍ਹਾਏ ਜਾਂਦੇ ਹਨ), ਅਤੇ ਨਾਨ-ਫਲੈਟ ਨਾਨ-ਯੂਕਲਿਡੀਅਨ ਜਿਓਮੈਟਰੀ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਜਿਓਮੈਟਰੀ ਦਾ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਨਾਲ ਕੀ ਸੰਬੰਧ ਹੈ? ਖੈਰ, ਦੋ ਖੇਤਰ ਜੋ ਗਣਿਤ ਵਿੱਚ ਜੜੇ ਹੋਏ ਹਨ, ਪੌਇੰਟਸ ਦੇ ਵਿਚਕਾਰ ਦੂਰੀਆਂ ਨੂੰ ਮਾਪਣ ਦਾ ਇੱਕ ਆਮ ਤਰੀਕਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਇਹ 'ਫਲੈਟ' ਜਾਂ 'ਨਾਨ-ਫਲੈਟ' ਤਰੀਕੇ ਨਾਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਡੇਟਾ ਦੀ ਪ੍ਰਕਿਰਤੀ ਦੇ ਅਨੁਸਾਰ। [ਯੂਕਲਿਡੀਅਨ ਦੂਰੀਆਂ](https://wikipedia.org/wiki/Euclidean_distance) ਨੂੰ ਦੋ ਪੌਇੰਟਸ ਦੇ ਵਿਚਕਾਰ ਲਾਈਨ ਸੈਗਮੈਂਟ ਦੀ ਲੰਬਾਈ ਵਜੋਂ ਮਾਪਿਆ ਜਾਂਦਾ ਹੈ। [ਨਾਨ-ਯੂਕਲਿਡੀਅਨ ਦੂਰੀਆਂ](https://wikipedia.org/wiki/Non-Euclidean_geometry) ਨੂੰ ਇੱਕ ਵਕਰ ਦੇ ਨਾਲ ਮਾਪਿਆ ਜਾਂਦਾ ਹੈ। ਜੇ ਤੁਹਾਡਾ ਡੇਟਾ, ਵਿਜੁਅਲਾਈਜ਼ ਕੀਤਾ ਗਿਆ, ਇੱਕ ਪਲੇਨ 'ਤੇ ਮੌਜੂਦ ਨਹੀਂ ਲੱਗਦਾ, ਤਾਂ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇੱਕ ਵਿਸ਼ੇਸ਼ ਐਲਗੋਰਿਥਮ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ।\n", "\n", "

\n", " \n", "

ਦਸਾਨੀ ਮਦਿਪੱਲੀ ਦੁਆਰਾ ਇਨਫੋਗ੍ਰਾਫਿਕ
\n", "\n", "\n", "\n", "> 🎓 ['Distances'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\n", ">\n", "> ਕਲੱਸਟਰਾਂ ਨੂੰ ਉਨ੍ਹਾਂ ਦੀ ਦੂਰੀ ਮੈਟ੍ਰਿਕਸ ਦੁਆਰਾ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਪੌਇੰਟਸ ਦੇ ਵਿਚਕਾਰ ਦੂਰੀਆਂ। ਇਹ ਦੂਰੀ ਕੁਝ ਤਰੀਕਿਆਂ ਨਾਲ ਮਾਪੀ ਜਾ ਸਕਦੀ ਹੈ। ਯੂਕਲਿਡੀਅਨ ਕਲੱਸਟਰਾਂ ਨੂੰ ਪੌਇੰਟ ਵੈਲਿਊਜ਼ ਦੇ ਔਸਤ ਦੁਆਰਾ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਇੱਕ 'ਸੈਂਟਰਾਇਡ' ਜਾਂ ਕੇਂਦਰੀ ਪੌਇੰਟ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ। ਦੂਰੀਆਂ ਇਸ ਤਰ੍ਹਾਂ ਉਸ ਸੈਂਟਰਾਇਡ ਤੋਂ ਦੂਰੀ ਦੁਆਰਾ ਮਾਪੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਨਾਨ-ਯੂਕਲਿਡੀਅਨ ਦੂਰੀਆਂ 'ਕਲੱਸਟਰਾਇਡ' ਨੂੰ ਦਰਸਾਉਂਦੀਆਂ ਹਨ, ਜੋ ਹੋਰ ਪੌਇੰਟਸ ਦੇ ਸਭ ਤੋਂ ਨੇੜੇ ਪੌਇੰਟ ਹੁੰਦੇ ਹਨ। ਕਲੱਸਟਰਾਇਡ ਨੂੰ ਵੱਖ-ਵੱਖ ਤਰੀਕਿਆਂ ਨਾਲ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।\n", ">\n", "> 🎓 ['Constrained'](https://wikipedia.org/wiki/Constrained_clustering)\n", ">\n", "> [ਕਨਸਟਰੈਂਡ ਕਲੱਸਟਰਿੰਗ](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ਇਸ ਅਨਸੁਪਰਵਾਈਜ਼ਡ ਵਿਧੀ ਵਿੱਚ 'ਸੈਮੀ-ਸੁਪਰਵਾਈਜ਼ਡ' ਲਰਨਿੰਗ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੀ ਹੈ। ਪੌਇੰਟਸ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧਾਂ ਨੂੰ 'cannot link' ਜਾਂ 'must-link' ਵਜੋਂ ਚਿੰਨ੍ਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਤਾਂ ਕਿ ਕੁਝ ਨਿਯਮ ਡੇਟਾਸੈੱਟ 'ਤੇ ਲਾਗੂ ਕੀਤੇ ਜਾ ਸਕਣ।\n", ">\n", "> ਇੱਕ ਉਦਾਹਰਣ: ਜੇਕਰ ਇੱਕ ਐਲਗੋਰਿਥਮ ਨੂੰ ਅਨਲੈਬਲਡ ਜਾਂ ਸੈਮੀ-ਲੈਬਲਡ ਡੇਟਾ ਦੇ ਬੈਚ 'ਤੇ ਖੁੱਲ੍ਹਾ ਛੱਡਿਆ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਉੱਚ ਗੁਣਵੱਤਾ ਵਾਲੇ ਕਲੱਸਟਰਾਂ ਦਾ ਉਤਪਾਦਨ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਉਪਰੋਕਤ ਉਦਾਹਰਣ ਵਿੱਚ, ਕਲੱਸਟਰ 'ਗੋਲ ਸੰਗੀਤਕ ਚੀਜ਼ਾਂ' ਅਤੇ 'ਚੌਰਸ ਸੰਗੀਤਕ ਚੀਜ਼ਾਂ' ਅਤੇ 'ਤਿਕੋਣੀ ਚੀਜ਼ਾਂ' ਅਤੇ 'ਕੂਕੀਜ਼' ਨੂੰ ਸਮੂਹਬੱਧ ਕਰ ਸਕਦੇ ਹਨ। ਜੇਕਰ ਕੁਝ ਕਨਸਟਰੈਂਟਸ, ਜਾਂ ਨਿਯਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰਨ ਲਈ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ (\"ਇਟਮ ਪਲਾਸਟਿਕ ਦਾ ਬਣਿਆ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ\", \"ਇਟਮ ਨੂੰ ਸੰਗੀਤ ਪੈਦਾ ਕਰਨ ਦੇ ਯੋਗ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ\") ਇਹ ਐਲਗੋਰਿਥਮ ਨੂੰ ਵਧੀਆ ਚੋਣਾਂ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।\n", ">\n", "> 🎓 'Density'\n", ">\n", "> ਡੇਟਾ ਜੋ 'ਸ਼ੋਰ' ਵਾਲਾ ਹੁੰਦਾ ਹੈ ਉਸਨੂੰ 'ਘਣ' ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ। ਇਸਦੇ ਕਲੱਸਟਰਾਂ ਵਿੱਚ ਪੌਇੰਟਸ ਦੇ ਵਿਚਕਾਰ ਦੂਰੀਆਂ, ਜਾਂ ਤਾਂ ਘਣ ਜਾਂ 'ਭੀੜ' ਹੋ ਸਕਦੀਆਂ ਹਨ, ਅਤੇ ਇਸ ਲਈ ਇਸ ਡੇਟਾ ਨੂੰ ਸਹੀ ਕਲੱਸਟਰਿੰਗ ਵਿਧੀ ਨਾਲ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। [ਇਹ ਲੇਖ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) noisy ਡੇਟਾਸੈੱਟ ਦੇ uneven cluster density ਦੀ ਖੋਜ ਕਰਨ ਲਈ K-Means ਕਲੱਸਟਰਿੰਗ ਵਸ. HDBSCAN ਐਲਗੋਰਿਥਮ ਦੀ ਵਰਤੋਂ ਦੇ ਫਰਕ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ।\n", "\n", "ਕਲੱਸਟਰਿੰਗ ਤਕਨੀਕਾਂ ਦੀ ਆਪਣੀ ਸਮਝ ਨੂੰ [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) ਵਿੱਚ ਡੂੰਘਾ ਕਰੋ।\n", "\n", "### **ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਥਮ**\n", "\n", "100 ਤੋਂ ਵੱਧ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਥਮ ਹਨ, ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਵਰਤੋਂ ਡੇਟਾ ਦੀ ਪ੍ਰਕਿਰਤੀ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ। ਆਓ ਕੁਝ ਮੁੱਖ ਐਲਗੋਰਿਥਮਾਂ ਬਾਰੇ ਚਰਚਾ ਕਰੀਏ:\n", "\n", "- **ਹਾਇਰਾਰਕੀਕਲ ਕਲੱਸਟਰਿੰਗ**। ਜੇਕਰ ਇੱਕ ਵਸਤੂ ਨੂੰ ਇਸਦੇ ਨੇੜੇ ਵਸਤੂ ਨਾਲ ਇਸਦੀ ਨਜ਼ਦੀਕੀ ਦੁਆਰਾ ਵਰਗਬੱਧ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਬਜਾਏ ਕਿ ਇੱਕ ਦੂਰ ਵਾਲੀ ਵਸਤੂ ਨਾਲ, ਕਲੱਸਟਰ ਉਸਦੇ ਮੈਂਬਰਾਂ ਦੀ ਦੂਰੀ ਤੋਂ ਅਤੇ ਹੋਰ ਵਸਤੂਆਂ ਤੋਂ ਬਣਾਏ ਜਾਂਦੇ ਹਨ। ਹਾਇਰਾਰਕੀਕਲ ਕਲੱਸਟਰਿੰਗ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ ਦੋ ਕਲੱਸਟਰਾਂ ਨੂੰ ਮੁੜ-ਮੁੜ ਮਿਲਾਉਣ ਦੀ ਹੁੰਦੀ ਹੈ।\n", "\n", "

\n", " \n", "

ਦਸਾਨੀ ਮਦਿਪੱਲੀ ਦੁਆਰਾ ਇਨਫੋਗ੍ਰਾਫਿਕ
\n", "\n", "\n", "\n", "- **ਸੈਂਟਰਾਇਡ ਕਲੱਸਟਰਿੰਗ**। ਇਹ ਲੋਕਪ੍ਰਿਯ ਐਲਗੋਰਿਥਮ 'k', ਜਾਂ ਬਣਾਏ ਜਾਣ ਵਾਲੇ ਕਲੱਸਟਰਾਂ ਦੀ ਗਿਣਤੀ ਦੀ ਚੋਣ ਦੀ ਲੋੜ ਕਰਦਾ ਹੈ, ਜਿਸ ਤੋਂ ਬਾਅਦ ਐਲਗੋਰਿਥਮ ਕਲੱਸਟਰ ਦੇ ਕੇਂਦਰੀ ਪੌਇੰਟ ਦਾ ਨਿਰਧਾਰਨ ਕਰਦਾ ਹੈ ਅਤੇ ਉਸ ਪੌਇੰਟ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਡੇਟਾ ਇਕੱਠਾ ਕਰਦਾ ਹੈ। [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) ਸੈਂਟਰਾਇਡ ਕਲੱਸਟਰਿੰਗ ਦਾ ਇੱਕ ਲੋਕਪ੍ਰਿਯ ਸੰਸਕਰਣ ਹੈ ਜੋ ਡੇਟਾਸੈੱਟ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਪਰਿਭਾਸ਼ਿਤ K ਸਮੂਹਾਂ ਵਿੱਚ ਵੱਖ ਕਰਦਾ ਹੈ। ਕੇਂਦਰ ਨੂੰ ਸਭ ਤੋਂ ਨੇੜੇ mean ਦੁਆਰਾ ਨਿਰਧਾਰਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇਸ ਲਈ ਨਾਮ। ਕਲੱਸਟਰ ਤੋਂ ਵਰਗ ਦੂਰੀ ਘਟਾਈ ਜਾਂਦੀ ਹੈ।\n", "\n", "

\n", " \n", "

ਦਸਾਨੀ ਮਦਿਪੱਲੀ ਦੁਆਰਾ ਇਨਫੋਗ੍ਰਾਫਿਕ
\n", "\n", "\n", "\n", "- **ਡਿਸਟ੍ਰਿਬਿਊਸ਼ਨ-ਅਧਾਰਤ ਕਲੱਸਟਰਿੰਗ**। ਸਾਂਖਿਕ ਮਾਡਲਿੰਗ 'ਤੇ ਅਧਾਰਿਤ, ਡਿਸਟ੍ਰਿਬਿਊਸ਼ਨ-ਅਧ\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\r\n", "\r\n", "pacman::p_load('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork')\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "## ਕਸਰਤ - ਆਪਣੇ ਡਾਟਾ ਨੂੰ ਕਲਸਟਰ ਕਰੋ\n", "\n", "ਕਲਸਟਰਿੰਗ ਇੱਕ ਤਕਨੀਕ ਵਜੋਂ ਸਹੀ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨ ਨਾਲ ਬਹੁਤ ਮਦਦਗਾਰ ਹੁੰਦੀ ਹੈ, ਇਸ ਲਈ ਆਓ ਆਪਣੇ ਮਿਊਜ਼ਿਕ ਡਾਟਾ ਨੂੰ ਵਿਜੁਅਲਾਈਜ਼ ਕਰਕੇ ਸ਼ੁਰੂ ਕਰੀਏ। ਇਹ ਕਸਰਤ ਸਾਨੂੰ ਇਹ ਫੈਸਲਾ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰੇਗੀ ਕਿ ਕਲਸਟਰਿੰਗ ਦੇ ਕਿਹੜੇ ਤਰੀਕੇ ਨੂੰ ਇਸ ਡਾਟਾ ਦੀ ਪ੍ਰਕਿਰਤੀ ਲਈ ਸਭ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕੇ ਨਾਲ ਵਰਤਣਾ ਚਾਹੀਦਾ ਹੈ।\n", "\n", "ਆਓ ਡਾਟਾ ਨੂੰ ਇੰਪੋਰਟ ਕਰਕੇ ਤੁਰੰਤ ਸ਼ੁਰੂ ਕਰੀਏ।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Load the core tidyverse and make it available in your current R session\r\n", "library(tidyverse)\r\n", "\r\n", "# Import the data into a tibble\r\n", "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\")\r\n", "\r\n", "# View the first 5 rows of the data set\r\n", "df %>% \r\n", " slice_head(n = 5)\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਕਈ ਵਾਰ, ਅਸੀਂ ਆਪਣੇ ਡਾਟਾ ਬਾਰੇ ਕੁਝ ਹੋਰ ਜਾਣਕਾਰੀ ਲੈਣਾ ਚਾਹੁੰਦੇ ਹਾਂ। ਅਸੀਂ `data` ਅਤੇ `ਇਸ ਦੀ ਬਣਤਰ` ਨੂੰ [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਦੇਖ ਸਕਦੇ ਹਾਂ:\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Glimpse into the data set\r\n", "df %>% \r\n", " glimpse()\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਸ਼ਾਨਦਾਰ ਕੰਮ!💪\n", "\n", "ਅਸੀਂ ਦੇਖ ਸਕਦੇ ਹਾਂ ਕਿ `glimpse()` ਤੁਹਾਨੂੰ ਕੁੱਲ ਕਤਾਰਾਂ (ਅਵਲੋਕਨ) ਅਤੇ ਕਾਲਮਾਂ (ਚਰ) ਦੀ ਗਿਣਤੀ ਦਿਖਾਏਗਾ, ਫਿਰ, ਹਰ ਚਰ ਦੇ ਨਾਮ ਦੇ ਬਾਅਦ ਇੱਕ ਕਤਾਰ ਵਿੱਚ ਹਰ ਚਰ ਦੇ ਕੁਝ ਪਹਿਲੇ ਐਂਟਰੀਜ਼। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਚਰ ਦਾ *ਡਾਟਾ ਟਾਈਪ* ਹਰ ਚਰ ਦੇ ਨਾਮ ਦੇ ਤੁਰੰਤ ਬਾਅਦ `< >` ਦੇ ਅੰਦਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ।\n", "\n", "`DataExplorer::introduce()` ਇਸ ਜਾਣਕਾਰੀ ਨੂੰ ਸੁਵਿਧਾਜਨਕ ਢੰਗ ਨਾਲ ਸੰਖੇਪ ਕਰ ਸਕਦਾ ਹੈ:\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Describe basic information for our data\r\n", "df %>% \r\n", " introduce()\r\n", "\r\n", "# A visual display of the same\r\n", "df %>% \r\n", " plot_intro()\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਵਧੀਆ! ਅਸੀਂ ਹੁਣੇ ਸਿੱਖਿਆ ਹੈ ਕਿ ਸਾਡੇ ਡਾਟਾ ਵਿੱਚ ਕੋਈ ਗੁੰਮ ਹੋਏ ਮੁੱਲ ਨਹੀਂ ਹਨ।\n", "\n", "ਜਦੋਂ ਅਸੀਂ ਇਸ 'ਤੇ ਕੰਮ ਕਰ ਰਹੇ ਹਾਂ, ਅਸੀਂ ਆਮ ਕੇਂਦਰੀ ਰੁਝਾਨ ਅੰਕੜੇ (ਜਿਵੇਂ [mean](https://en.wikipedia.org/wiki/Arithmetic_mean) ਅਤੇ [median](https://en.wikipedia.org/wiki/Median)) ਅਤੇ ਵਿਖਰਾਅ ਦੇ ਮਾਪ (ਜਿਵੇਂ [standard deviation](https://en.wikipedia.org/wiki/Standard_deviation)) ਨੂੰ `summarytools::descr()` ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਖੋਜ ਸਕਦੇ ਹਾਂ।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Describe common statistics\r\n", "df %>% \r\n", " descr(stats = \"common\")\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਆਓ ਡਾਟਾ ਦੇ ਆਮ ਮੁੱਲਾਂ ਨੂੰ ਵੇਖੀਏ। ਧਿਆਨ ਦਿਓ ਕਿ ਪ੍ਰਸਿੱਧਤਾ `0` ਹੋ ਸਕਦੀ ਹੈ, ਜੋ ਉਹ ਗੀਤ ਦਰਸਾਉਂਦੇ ਹਨ ਜਿਨ੍ਹਾਂ ਦੀ ਕੋਈ ਰੈਂਕਿੰਗ ਨਹੀਂ ਹੈ। ਅਸੀਂ ਇਹਨਾਂ ਨੂੰ ਜਲਦੀ ਹੀ ਹਟਾ ਦੇਵਾਂਗੇ।\n", "\n", "> 🤔 ਜੇਕਰ ਅਸੀਂ ਕਲੱਸਟਰਿੰਗ ਨਾਲ ਕੰਮ ਕਰ ਰਹੇ ਹਾਂ, ਜੋ ਇੱਕ ਅਨਸੁਪਰਵਾਈਜ਼ਡ ਵਿਧੀ ਹੈ ਜਿਸਨੂੰ ਲੇਬਲ ਕੀਤੇ ਡਾਟਾ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ, ਤਾਂ ਅਸੀਂ ਇਹ ਡਾਟਾ ਲੇਬਲਾਂ ਨਾਲ ਕਿਉਂ ਦਿਖਾ ਰਹੇ ਹਾਂ? ਡਾਟਾ ਦੀ ਖੋਜ ਦੇ ਦੌਰਾਨ ਇਹ ਸਹਾਇਕ ਹੁੰਦੇ ਹਨ, ਪਰ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਥਮ ਦੇ ਕੰਮ ਕਰਨ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਨਹੀਂ ਹਨ।\n", "\n", "### 1. ਪ੍ਰਸਿੱਧ ਜਾਨਰਾਂ ਦੀ ਖੋਜ ਕਰੋ\n", "\n", "ਆਓ ਅੱਗੇ ਵਧੀਏ ਅਤੇ 🎶 ਸਭ ਤੋਂ ਪ੍ਰਸਿੱਧ ਜਾਨਰਾਂ ਦਾ ਪਤਾ ਲਗਾਈਏ, ਇਸਦੇ ਪ੍ਰਸੰਗਾਂ ਦੀ ਗਿਣਤੀ ਕਰਕੇ।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Popular genres\r\n", "top_genres <- df %>% \r\n", " count(artist_top_genre, sort = TRUE) %>% \r\n", "# Encode to categorical and reorder the according to count\r\n", " mutate(artist_top_genre = factor(artist_top_genre) %>% fct_inorder())\r\n", "\r\n", "# Print the top genres\r\n", "top_genres\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਇਹ ਚੰਗਾ ਰਿਹਾ! ਕਹਿੰਦੇ ਹਨ ਕਿ ਇੱਕ ਤਸਵੀਰ ਹਜ਼ਾਰ ਡਾਟਾ ਫ੍ਰੇਮ ਦੀਆਂ ਕਤਾਰਾਂ ਦੇ ਬਰਾਬਰ ਹੁੰਦੀ ਹੈ (ਅਸਲ ਵਿੱਚ, ਕੋਈ ਵੀ ਕਦੇ ਇਹ ਨਹੀਂ ਕਹਿੰਦਾ 😅)। ਪਰ ਤੁਸੀਂ ਸਮਝ ਗਏ ਹੋ, ਹੈ ਨਾ?\n", "\n", "ਸ਼੍ਰੇਣੀਬੱਧ ਡਾਟਾ (ਕਿਰਦਾਰ ਜਾਂ ਫੈਕਟਰ ਵੈਰੀਏਬਲਜ਼) ਨੂੰ ਦਿਖਾਉਣ ਦਾ ਇੱਕ ਤਰੀਕਾ ਬਾਰਪਲਾਟਸ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਹੈ। ਆਓ ਸਿਖਰਲੇ 10 ਜਾਨਰਾਂ ਦਾ ਇੱਕ ਬਾਰਪਲਾਟ ਬਣਾਈਏ:\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Change the default gray theme\r\n", "theme_set(theme_light())\r\n", "\r\n", "# Visualize popular genres\r\n", "top_genres %>%\r\n", " slice(1:10) %>% \r\n", " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", " fill = artist_top_genre)) +\r\n", " geom_col(alpha = 0.8) +\r\n", " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n", " ggtitle(\"Top genres\") +\r\n", " theme(plot.title = element_text(hjust = 0.5),\r\n", " # Rotates the X markers (so we can read them)\r\n", " axis.text.x = element_text(angle = 90))\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਹੁਣ ਇਹ ਪਛਾਣ ਕਰਨਾ ਕਾਫ਼ੀ ਆਸਾਨ ਹੈ ਕਿ ਸਾਡੇ ਕੋਲ `missing` ਜ਼ਾਨਰ ਹਨ 🧐!\n", "\n", "> ਇੱਕ ਵਧੀਆ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨ ਤੁਹਾਨੂੰ ਉਹ ਚੀਜ਼ਾਂ ਦਿਖਾਏਗੀ ਜੋ ਤੁਸੀਂ ਉਮੀਦ ਨਹੀਂ ਕੀਤੀ ਸੀ, ਜਾਂ ਡਾਟਾ ਬਾਰੇ ਨਵੇਂ ਸਵਾਲ ਖੜ੍ਹੇ ਕਰੇਗੀ - Hadley Wickham ਅਤੇ Garrett Grolemund, [R For Data Science](https://r4ds.had.co.nz/introduction.html)\n", "\n", "ਨੋਟ ਕਰੋ, ਜਦੋਂ ਸਿਖਰਲੇ ਜ਼ਾਨਰ ਨੂੰ `Missing` ਵਜੋਂ ਦਰਸਾਇਆ ਜਾਂਦਾ ਹੈ, ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ Spotify ਨੇ ਇਸਨੂੰ ਵਰਗੀਕ੍ਰਿਤ ਨਹੀਂ ਕੀਤਾ, ਤਾਂ ਚਲੋ ਇਸਨੂੰ ਹਟਾ ਦਿੰਦੇ ਹਾਂ।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Visualize popular genres\r\n", "top_genres %>%\r\n", " filter(artist_top_genre != \"Missing\") %>% \r\n", " slice(1:10) %>% \r\n", " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", " fill = artist_top_genre)) +\r\n", " geom_col(alpha = 0.8) +\r\n", " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n", " ggtitle(\"Top genres\") +\r\n", " theme(plot.title = element_text(hjust = 0.5),\r\n", " # Rotates the X markers (so we can read them)\r\n", " axis.text.x = element_text(angle = 90))\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਥੋੜ੍ਹੀ ਡਾਟਾ ਐਕਸਪਲੋਰੇਸ਼ਨ ਤੋਂ ਸਾਨੂੰ ਪਤਾ ਲਗਦਾ ਹੈ ਕਿ ਸਿਖਰ ਦੇ ਤਿੰਨ ਜਾਨਰ ਇਸ ਡਾਟਾਸੈਟ 'ਤੇ ਹਾਵੀ ਹਨ। ਆਓ `afro dancehall`, `afropop`, ਅਤੇ `nigerian pop` 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰੀਏ, ਅਤੇ ਨਾਲ ਹੀ ਡਾਟਾਸੈਟ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਫਿਲਟਰ ਕਰੀਏ ਕਿ ਜਿਹੜੇ ਐਲਿਮੈਂਟ ਦੀ ਪਾਪੂਲਰਿਟੀ ਵੈਲਯੂ 0 ਹੈ (ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਉਹ ਡਾਟਾਸੈਟ ਵਿੱਚ ਪਾਪੂਲਰਿਟੀ ਨਾਲ ਵਰਗੀਕ੍ਰਿਤ ਨਹੀਂ ਕੀਤੇ ਗਏ ਸਨ ਅਤੇ ਸਾਡੇ ਮਕਸਦ ਲਈ ਇਹ ਸ਼ੋਰ ਮੰਨੇ ਜਾ ਸਕਦੇ ਹਨ) ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇ:\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "nigerian_songs <- df %>% \r\n", " # Concentrate on top 3 genres\r\n", " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \r\n", " # Remove unclassified observations\r\n", " filter(popularity != 0)\r\n", "\r\n", "\r\n", "\r\n", "# Visualize popular genres\r\n", "nigerian_songs %>%\r\n", " count(artist_top_genre) %>%\r\n", " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", " fill = artist_top_genre)) +\r\n", " geom_col(alpha = 0.8) +\r\n", " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\r\n", " ggtitle(\"Top genres\") +\r\n", " theme(plot.title = element_text(hjust = 0.5))\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਆਓ ਵੇਖੀਏ ਕਿ ਸਾਡੇ ਡਾਟਾ ਸੈੱਟ ਵਿੱਚ ਸੰਖਿਆਤਮਕ ਚਰਾਂ ਵਿੱਚ ਕੋਈ ਸਪਸ਼ਟ ਰੇਖੀ ਸੰਬੰਧ ਹੈ ਜਾਂ ਨਹੀਂ। ਇਸ ਸੰਬੰਧ ਨੂੰ ਗਣਿਤੀਕ ਤੌਰ 'ਤੇ [ਸੰਬੰਧ ਅੰਕੜਾ](https://en.wikipedia.org/wiki/Correlation) ਦੁਆਰਾ ਮਾਪਿਆ ਜਾਂਦਾ ਹੈ।\n", "\n", "ਸੰਬੰਧ ਅੰਕੜਾ -1 ਤੋਂ 1 ਦੇ ਵਿਚਕਾਰ ਇੱਕ ਮੁੱਲ ਹੁੰਦਾ ਹੈ ਜੋ ਸੰਬੰਧ ਦੀ ਮਜ਼ਬੂਤੀ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। 0 ਤੋਂ ਉੱਪਰ ਦੇ ਮੁੱਲ *ਸਕਾਰਾਤਮਕ* ਸੰਬੰਧ ਦਰਸਾਉਂਦੇ ਹਨ (ਇੱਕ ਚਰ ਦੇ ਉੱਚੇ ਮੁੱਲ ਦੂਜੇ ਚਰ ਦੇ ਉੱਚੇ ਮੁੱਲਾਂ ਨਾਲ ਮਿਲਦੇ ਹਨ), ਜਦਕਿ 0 ਤੋਂ ਹੇਠਾਂ ਦੇ ਮੁੱਲ *ਨਕਾਰਾਤਮਕ* ਸੰਬੰਧ ਦਰਸਾਉਂਦੇ ਹਨ (ਇੱਕ ਚਰ ਦੇ ਉੱਚੇ ਮੁੱਲ ਦੂਜੇ ਚਰ ਦੇ ਘੱਟ ਮੁੱਲਾਂ ਨਾਲ ਮਿਲਦੇ ਹਨ)।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Narrow down to numeric variables and fid correlation\r\n", "corr_mat <- nigerian_songs %>% \r\n", " select(where(is.numeric)) %>% \r\n", " cor()\r\n", "\r\n", "# Visualize correlation matrix\r\n", "corrplot(corr_mat, order = 'AOE', col = c('white', 'black'), bg = 'gold2') \r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਡਾਟਾ ਵਿੱਚ ਕੋਈ ਮਜ਼ਬੂਤ ਸੰਬੰਧ ਨਹੀਂ ਹੈ, ਸਿਵਾਏ `energy` ਅਤੇ `loudness` ਦੇ, ਜੋ ਸਮਝਣਯੋਗ ਹੈ, ਕਿਉਂਕਿ ਉੱਚੀ ਆਵਾਜ਼ ਵਾਲਾ ਸੰਗੀਤ ਆਮ ਤੌਰ 'ਤੇ ਕਾਫ਼ੀ ਉਰਜਾਵਾਨ ਹੁੰਦਾ ਹੈ। `Popularity` ਦਾ ਸੰਬੰਧ `release date` ਨਾਲ ਹੈ, ਜੋ ਵੀ ਸਮਝਣਯੋਗ ਹੈ, ਕਿਉਂਕਿ ਹਾਲ ਹੀ ਦੇ ਗੀਤ ਸ਼ਾਇਦ ਜ਼ਿਆਦਾ ਪ੍ਰਸਿੱਧ ਹੁੰਦੇ ਹਨ। ਲੰਬਾਈ ਅਤੇ energy ਵਿੱਚ ਵੀ ਇੱਕ ਸੰਬੰਧ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ।\n", "\n", "ਇਹ ਦੇਖਣਾ ਦਿਲਚਸਪ ਹੋਵੇਗਾ ਕਿ ਇੱਕ clustering algorithm ਇਸ ਡਾਟਾ ਤੋਂ ਕੀ ਨਤੀਜੇ ਕੱਢ ਸਕਦਾ ਹੈ!\n", "\n", "> 🎓 ਧਿਆਨ ਦਿਓ ਕਿ ਸੰਬੰਧ ਕਾਰਨ-ਪ੍ਰਭਾਵ ਨੂੰ ਦਰਸਾਉਂਦਾ ਨਹੀਂ ਹੈ! ਸਾਡੇ ਕੋਲ ਸੰਬੰਧ ਦਾ ਸਬੂਤ ਹੈ ਪਰ ਕਾਰਨ-ਪ੍ਰਭਾਵ ਦਾ ਕੋਈ ਸਬੂਤ ਨਹੀਂ। ਇੱਕ [ਮਜ਼ੇਦਾਰ ਵੈਬਸਾਈਟ](https://tylervigen.com/spurious-correlations) ਕੁਝ ਵਿਜੁਅਲ ਦਿਖਾਉਂਦੀ ਹੈ ਜੋ ਇਸ ਗੱਲ ਨੂੰ ਜ਼ੋਰ ਦੇ ਕੇ ਸਮਝਾਉਂਦੀ ਹੈ।\n", "\n", "### 2. ਡਾਟਾ ਵੰਡ ਦੀ ਪੜਚੋਲ ਕਰੋ\n", "\n", "ਆਓ ਕੁਝ ਹੋਰ ਸੁਖਮ ਸਵਾਲ ਪੁੱਛੀਏ। ਕੀ ਜ਼ਰਨਾਂ (genres) ਆਪਣੇ danceability ਦੇ ਧਾਰਨਾ ਵਿੱਚ, ਉਨ੍ਹਾਂ ਦੀ ਪ੍ਰਸਿੱਧੀ ਦੇ ਆਧਾਰ 'ਤੇ, ਮਹੱਤਵਪੂਰਨ ਤੌਰ 'ਤੇ ਵੱਖਰੇ ਹਨ? ਆਓ ਆਪਣੇ ਸਿਖਰਲੇ ਤਿੰਨ ਜ਼ਰਨਾਂ ਦੀ ਪ੍ਰਸਿੱਧੀ ਅਤੇ danceability ਲਈ ਡਾਟਾ ਵੰਡ ਦੀ ਜਾਂਚ ਕਰੀਏ, ਦਿੱਤੇ ਗਏ x ਅਤੇ y ਅਕਸਾਂ ਦੇ ਨਾਲ [density plots](https://www.khanacademy.org/math/ap-statistics/density-curves-normal-distribution-ap/density-curves/v/density-curves) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# Perform 2D kernel density estimation\r\n", "density_estimate_2d <- nigerian_songs %>% \r\n", " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre)) +\r\n", " geom_density_2d(bins = 5, size = 1) +\r\n", " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", " xlim(-20, 80) +\r\n", " ylim(0, 1.2)\r\n", "\r\n", "# Density plot based on the popularity\r\n", "density_estimate_pop <- nigerian_songs %>% \r\n", " ggplot(mapping = aes(x = popularity, fill = artist_top_genre, color = artist_top_genre)) +\r\n", " geom_density(size = 1, alpha = 0.5) +\r\n", " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", " theme(legend.position = \"none\")\r\n", "\r\n", "# Density plot based on the danceability\r\n", "density_estimate_dance <- nigerian_songs %>% \r\n", " ggplot(mapping = aes(x = danceability, fill = artist_top_genre, color = artist_top_genre)) +\r\n", " geom_density(size = 1, alpha = 0.5) +\r\n", " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\")\r\n", "\r\n", "\r\n", "# Patch everything together\r\n", "library(patchwork)\r\n", "density_estimate_2d / (density_estimate_pop + density_estimate_dance)\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਅਸੀਂ ਵੇਖਦੇ ਹਾਂ ਕਿ ਕੈਂਦਰੀ ਚੱਕਰ, ਜਿਨ੍ਹਾਂ ਦੀ ਲਾਈਨ ਬਣਦੀ ਹੈ, ਜਨਰ ਦੇ ਬਾਵਜੂਦ ਵੀ ਇੱਕੋ ਜਿਹੇ ਹਨ। ਕੀ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਨਾਈਜੀਰੀਆਈ ਪਸੰਦਾਂ ਇਸ ਜਨਰ ਲਈ ਇੱਕ ਨਿਰਧਾਰਿਤ ਡਾਂਸਬਿਲਿਟੀ ਪੱਧਰ 'ਤੇ ਮਿਲਦੀਆਂ ਹਨ?\n", "\n", "ਆਮ ਤੌਰ 'ਤੇ, ਤਿੰਨ ਜਨਰ ਆਪਣੀ ਲੋਕਪ੍ਰਿਯਤਾ ਅਤੇ ਡਾਂਸਬਿਲਿਟੀ ਦੇ ਹਿਸਾਬ ਨਾਲ ਇੱਕੋ ਜਿਹੇ ਹਨ। ਇਸ ਢਿੱਲੇ-ਢਾਲੇ ਡਾਟਾ ਵਿੱਚ ਕਲੱਸਟਰਾਂ ਦੀ ਪਛਾਣ ਕਰਨਾ ਇੱਕ ਚੁਣੌਤੀ ਹੋਵੇਗੀ। ਆਓ ਵੇਖੀਏ ਕਿ ਕੀ ਇੱਕ ਸਕੈਟਰ ਪਲਾਟ ਇਸ ਨੂੰ ਸਹਾਇਤਾ ਦੇ ਸਕਦਾ ਹੈ।\n" ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# A scatter plot of popularity and danceability\r\n", "scatter_plot <- nigerian_songs %>% \r\n", " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre, shape = artist_top_genre)) +\r\n", " geom_point(size = 2, alpha = 0.8) +\r\n", " paletteer::scale_color_paletteer_d(\"futurevisions::mars\")\r\n", "\r\n", "# Add a touch of interactivity\r\n", "ggplotly(scatter_plot)\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "ਇੱਕੋ ਹੀ ਅੱਖਾਂ ਦੇ ਸਕੈਟਰਪਲਾਟ ਵਿੱਚ ਮਿਲਦੇ ਜੁਲਦੇ ਢੰਗ ਨਾਲ ਕਨਵਰਜੈਂਸ ਦਾ ਪੈਟਰਨ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ।\n", "\n", "ਆਮ ਤੌਰ 'ਤੇ, ਕਲੱਸਟਰਿੰਗ ਲਈ, ਤੁਸੀਂ ਡਾਟਾ ਦੇ ਕਲੱਸਟਰ ਦਿਖਾਉਣ ਲਈ ਸਕੈਟਰਪਲਾਟ ਵਰਤ ਸਕਦੇ ਹੋ, ਇਸ ਤਰ੍ਹਾਂ ਦੀ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨ ਵਿੱਚ ਮਾਹਰ ਹੋਣਾ ਬਹੁਤ ਲਾਭਦਾਇਕ ਹੈ। ਅਗਲੇ ਪਾਠ ਵਿੱਚ, ਅਸੀਂ ਇਸ ਫਿਲਟਰ ਕੀਤੇ ਡਾਟਾ ਨੂੰ ਲਵਾਂਗੇ ਅਤੇ k-means ਕਲੱਸਟਰਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸ ਡਾਟਾ ਵਿੱਚ ਉਹ ਗਰੁੱਪ ਲੱਭਾਂਗੇ ਜੋ ਦਿਲਚਸਪ ਢੰਗ ਨਾਲ ਇੱਕ ਦੂਜੇ ਨਾਲ ਓਵਰਲੈਪ ਕਰਦੇ ਹਨ।\n", "\n", "## **🚀 ਚੁਣੌਤੀ**\n", "\n", "ਅਗਲੇ ਪਾਠ ਦੀ ਤਿਆਰੀ ਲਈ, ਵੱਖ-ਵੱਖ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮਾਂ ਬਾਰੇ ਇੱਕ ਚਾਰਟ ਬਣਾਓ ਜੋ ਤੁਸੀਂ ਪ੍ਰੋਡਕਸ਼ਨ ਵਾਤਾਵਰਣ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ ਅਤੇ ਵਰਤ ਸਕਦੇ ਹੋ। ਕਲੱਸਟਰਿੰਗ ਕਿਸ ਕਿਸਮ ਦੇ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੀ ਹੈ?\n", "\n", "## [**ਪਾਠ-ਪ੍ਰਸ਼ਨੋਤਰੀ**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/)\n", "\n", "## **ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ ਅਧਿਐਨ**\n", "\n", "ਜਿਵੇਂ ਅਸੀਂ ਸਿੱਖਿਆ ਹੈ, ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣੇ ਡਾਟਾਸੈੱਟ ਦੀ ਪ੍ਰਕਿਰਤੀ ਨੂੰ ਸਮਝਣਾ ਇੱਕ ਚੰਗਾ ਵਿਚਾਰ ਹੈ। ਇਸ ਵਿਸ਼ੇ 'ਤੇ ਹੋਰ ਪੜ੍ਹੋ [ਇੱਥੇ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)\n", "\n", "ਕਲੱਸਟਰਿੰਗ ਤਕਨੀਕਾਂ ਦੀ ਆਪਣੀ ਸਮਝ ਨੂੰ ਗਹਿਰਾ ਕਰੋ:\n", "\n", "- [Tidymodels ਅਤੇ ਦੋਸਤਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਲੱਸਟਰਿੰਗ ਮਾਡਲਾਂ ਨੂੰ ਟ੍ਰੇਨ ਅਤੇ ਮੁਲਾਂਕਣ ਕਰੋ](https://rpubs.com/eR_ic/clustering)\n", "\n", "- ਬ੍ਰੈਡਲੀ ਬੋਹਮਕੇ ਅਤੇ ਬ੍ਰੈਂਡਨ ਗ੍ਰੀਨਵੈਲ, [*Hands-On Machine Learning with R*](https://bradleyboehmke.github.io/HOML/)*.*\n", "\n", "## **ਅਸਾਈਨਮੈਂਟ**\n", "\n", "[ਕਲੱਸਟਰਿੰਗ ਲਈ ਹੋਰ ਵਿਜੁਅਲਾਈਜ਼ੇਸ਼ਨਜ਼ ਦੀ ਖੋਜ ਕਰੋ](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/assignment.md)\n", "\n", "## ਧੰਨਵਾਦ:\n", "\n", "[ਜੈਨ ਲੂਪਰ](https://www.twitter.com/jenlooper) ਨੇ ਇਸ ਮੋਡੀਊਲ ਦੇ ਮੂਲ Python ਸੰਸਕਰਣ ਨੂੰ ਬਣਾਉਣ ਲਈ ♥️\n", "\n", "[`ਦਸਾਨੀ ਮਦਿਪੱਲੀ`](https://twitter.com/dasani_decoded) ਨੇ ਸ਼ਾਨਦਾਰ ਇਲਸਟ੍ਰੇਸ਼ਨ ਬਣਾਉਣ ਲਈ ਜੋ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੇ ਸੰਕਲਪਾਂ ਨੂੰ ਹੋਰ ਵੱਧ ਸਮਝਣਯੋਗ ਅਤੇ ਆਸਾਨ ਬਣਾਉਂਦੇ ਹਨ।\n", "\n", "ਖੁਸ਼ ਰਹੋ ਸਿੱਖਦੇ ਹੋਏ,\n", "\n", "[ਐਰਿਕ](https://twitter.com/ericntay), ਗੋਲਡ ਮਾਈਕਰੋਸਾਫਟ ਲਰਨ ਸਟੂਡੈਂਟ ਐਮਬੈਸਡਰ।\n" ], "metadata": {} }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n---\n\n**ਅਸਵੀਕਾਰਨਾ**: \nਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਹਾਲਾਂਕਿ ਅਸੀਂ ਸਹੀਅਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼, ਜੋ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਹੈ, ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤ ਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।\n" ] } ], "metadata": { "anaconda-cloud": "", "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "3.4.1" }, "coopTranslator": { "original_hash": "99c36449cad3708a435f6798cfa39972", "translation_date": "2025-08-29T19:17:39+00:00", "source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb", "language_code": "pa" } }, "nbformat": 4, "nbformat_minor": 1 }