{ "cells": [ { "cell_type": "markdown", "source": [ "## **స్పాటిఫై నుండి సేకరించిన నైజీరియన్ సంగీతం - ఒక విశ్లేషణ**\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", "✅ ఒకసారి మీ డేటా క్లస్టర్లలో సక్రమంగా ఏర్పడిన తర్వాత, మీరు దానికి క్లస్టర్ ID కేటాయిస్తారు, మరియు ఈ సాంకేతికత డేటాసెట్ గోప్యతను కాపాడటంలో ఉపయోగపడుతుంది; మీరు ఒక డేటా పాయింట్‌ను మరింత వెల్లడించే గుర్తింపు డేటా ద్వారా కాకుండా దాని క్లస్టర్ ID ద్వారా సూచించవచ్చు. మీరు మరెన్ని కారణాలు గుర్తించగలరా, ఎందుకు మీరు క్లస్టర్ ID ద్వారా దాన్ని గుర్తించాలనుకుంటారు?\n", "\n", "### క్లస్టరింగ్ ప్రారంభించడం\n", "\n", "> 🎓 మేము క్లస్టర్లను ఎలా సృష్టిస్తామో అది డేటా పాయింట్లను సమూహాలుగా ఎలా సేకరిస్తామో చాలా సంబంధం కలిగి ఉంటుంది. కొన్ని పదజాలాలను వివరించుకుందాం:\n", ">\n", "> 🎓 ['ట్రాన్స్‌డక్టివ్' vs. 'ఇండక్టివ్'](https://wikipedia.org/wiki/Transduction_(machine_learning))\n", ">\n", "> ట్రాన్స్‌డక్టివ్ ఇన్ఫరెన్స్ అనేది నిర్దిష్ట పరీక్ష కేసులకు మ్యాప్ అయ్యే పరిశీలించిన శిక్షణ కేసుల నుండి ఉత్పన్నమవుతుంది. ఇండక్టివ్ ఇన్ఫరెన్స్ సాధారణ నియమాలకు మ్యాప్ అయ్యే శిక్షణ కేసుల నుండి ఉత్పన్నమవుతుంది, అవి తర్వాత మాత్రమే పరీక్ష కేసులకు వర్తింపజేయబడతాయి.\n", ">\n", "> ఉదాహరణ: మీరు ఒక డేటాసెట్‌ను కలిగి ఉన్నారు, అది భాగంగా మాత్రమే లేబుల్ చేయబడింది. కొన్ని 'రికార్డులు', కొన్ని 'సీడీలు', మరియు కొన్ని ఖాళీగా ఉన్నాయి. మీ పని ఖాళీలకు లేబుల్స్ ఇవ్వడం. మీరు ఇండక్టివ్ పద్ధతిని ఎంచుకుంటే, మీరు 'రికార్డులు' మరియు 'సీడీలు' కోసం ఒక మోడల్‌ను శిక్షణ ఇస్తారు, మరియు ఆ లేబుల్స్‌ను లేబుల్ చేయబడని డేటాకు వర్తింపజేస్తారు. ఈ పద్ధతి నిజంగా 'కాసెట్స్' అయిన వాటిని వర్గీకరించడంలో ఇబ్బంది పడుతుంది. మరోవైపు, ట్రాన్స్‌డక్టివ్ పద్ధతి ఈ తెలియని డేటాను మరింత సమర్థవంతంగా నిర్వహిస్తుంది, ఇది సమానమైన అంశాలను సమూహాలుగా కలిపి ఆ సమూహానికి లేబుల్‌ను వర్తింపజేస్తుంది. ఈ సందర్భంలో, క్లస్టర్లు 'వృత్తాకార సంగీత వస్తువులు' మరియు 'చతురస్ర సంగీత వస్తువులు'ని ప్రతిబింబించవచ్చు.\n", ">\n", "> 🎓 ['నాన్-ఫ్లాట్' vs. 'ఫ్లాట్' జ్యామితి](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\n", ">\n", "> గణిత శాస్త్ర పదజాలం నుండి ఉద్భవించిన, నాన్-ఫ్లాట్ vs. ఫ్లాట్ జ్యామితి అనేది పాయింట్ల మధ్య దూరాలను 'ఫ్లాట్' ([యూక్లిడియన్](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", "> 🎓 ['దూరాలు'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\n", ">\n", "> క్లస్టర్లు వాటి దూర మ్యాట్రిక్స్ ద్వారా నిర్వచించబడతాయి, ఉదా: పాయింట్ల మధ్య దూరాలు. ఈ దూరం కొలవడంలో కొన్ని మార్గాలు ఉన్నాయి. యూక్లిడియన్ క్లస్టర్లు పాయింట్ విలువల సగటు ద్వారా నిర్వచించబడతాయి, మరియు 'సెంట్రాయిడ్' లేదా కేంద్ర పాయింట్ కలిగి ఉంటాయి. దూరాలు ఆ సెంట్రాయిడ్ దూరం ద్వారా కొలవబడతాయి. నాన్-యూక్లిడియన్ దూరాలు 'క్లస్ట్రాయిడ్స్' కు సంబంధించినవి, అంటే ఇతర పాయింట్లకు అత్యంత సమీపమైన పాయింట్. క్లస్ట్రాయిడ్స్ వివిధ రకాలుగా నిర్వచించబడవచ్చు.\n", ">\n", "> 🎓 ['కన్స్ట్రెయిన్డ్'](https://wikipedia.org/wiki/Constrained_clustering)\n", ">\n", "> [కన్స్ట్రెయిన్డ్ క్లస్టరింగ్](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ఈ అనియంత్రిత పద్ధతిలో 'సెమీ-సూపర్వైజ్డ్' లెర్నింగ్‌ను పరిచయం చేస్తుంది. పాయింట్ల మధ్య సంబంధాలు 'లింక్ చేయకూడదు' లేదా 'లింక్ చేయాలి' అని గుర్తించబడతాయి, కాబట్టి కొన్ని నియమాలు డేటాసెట్‌పై అమలవుతాయి.\n", ">\n", "> ఉదాహరణ: ఒక అల్గోరిథం లేబుల్ చేయబడని లేదా సెమీ-లేబుల్ చేయబడిన డేటా బ్యాచ్‌పై స్వేచ్ఛగా అమలవుతే, అది ఉత్పత్తి చేసే క్లస్టర్లు తక్కువ నాణ్యత కలిగి ఉండవచ్చు. పై ఉదాహరణలో, క్లస్టర్లు 'వృత్తాకార సంగీత వస్తువులు', 'చతురస్ర సంగీత వస్తువులు', 'త్రిభుజాకార వస్తువులు' మరియు 'కుకీస్' గా వర్గీకరించవచ్చు. కొన్ని నియమాలు లేదా నియమాలను (\"వస్తువు ప్లాస్టిక్‌తో తయారవాలి\", \"వస్తువు సంగీతం ఉత్పత్తి చేయగలగాలి\") ఇవ్వడం ద్వారా అల్గోరిథం మెరుగైన ఎంపికలు చేయడానికి 'కన్స్ట్రెయిన్' చేయవచ్చు.\n", ">\n", "> 🎓 'డెన్సిటీ'\n", ">\n", "> 'నాయిసీ'గా పరిగణించబడే డేటా 'డెన్స్' గా పరిగణించబడుతుంది. దాని ప్రతి క్లస్టర్‌లో పాయింట్ల మధ్య దూరాలు పరిశీలనలో ఎక్కువ లేదా తక్కువగా ఉండవచ్చు, లేదా 'గొడవ'గా ఉండవచ్చు, కాబట్టి ఈ డేటాను సరైన క్లస్టరింగ్ పద్ధతితో విశ్లేషించాలి. [ఈ వ్యాసం](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) K-Means క్లస్టరింగ్ మరియు HDBSCAN అల్గోరిథమ్లను ఉపయోగించి అసమానమైన క్లస్టర్ డెన్సిటీ ఉన్న నాయిసీ డేటాసెట్‌ను అన్వేషించడంలో తేడాను చూపిస్తుంది.\n", "\n", "ఈ [లెర్న్ మాడ్యూల్](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", "\n", "- **సెంట్రాయిడ్ క్లస్టరింగ్**. ఈ ప్రాచుర్యం పొందిన అల్గోరిథం 'k' అనే క్లస్టర్ల సంఖ్యను ఎంచుకోవాలి, ఆ తర్వాత అల్గోరిథం ఒక క్లస్టర్ కేంద్ర పాయింట్‌ను నిర్ణయించి ఆ పాయింట్ చుట్టూ డేటాను సేకరిస్తుంది. [K-means క్లస్టరింగ్](https://wikipedia.org/wiki/K-means_clustering) సెంట్రాయిడ్ క్లస్టరింగ్ యొక్క ఒక ప్రాచుర్యం పొందిన వెర్షన్, ఇది డేటా సెట్‌ను ముందుగా నిర్వచించిన K గుంపులుగా విడగొడుతుంది. కేంద్రం సమీప సగటు ద్వారా నిర్ణయించబడుతుంది, అందుకే పేరు. క్లస్టర్ నుండి చతురస్ర దూరం తగ్గించబడుతుంది.\n", "\n", "

\n", " \n", "

ఇన్ఫోగ్రాఫిక్ - దాసాని మడిపల్లి
\n", "\n", "\n", "\n", "- **వితరణ ఆధారిత క్లస్టరింగ్**. గణాంక నమూనాలపై ఆధారపడి, వితరణ ఆధారిత క్లస్టరింగ్ ఒక డేటా పాయింట్ ఒక క్లస్టర్‌కు చెందే సంభావ్యతను నిర్ణయించి దానికి అనుగుణంగా కేటాయిస్తుంది. గౌసియన్ మిశ్రమ పద్ధతులు ఈ రకానికి చెందుతాయి.\n", "\n", "- **సాంద్రత ఆధారిత క్లస్టరింగ్**. డేటా పాయింట్లు వారి సాంద్రత లేదా ఒకరితో ఒకరు సమూహాలుగా ఉండటం ఆధారంగా క్లస్టర్లకు కేటాయించబడతాయి. సమూహం నుండి దూరంగా ఉన్న డేటా పాయింట్లు అవుట్లయర్స్ లేదా శబ్దంగా పరిగణించబడతాయి. DBSCAN, Mean-shift మరియు OPTICS ఈ రకమైన క్లస్టరింగ్‌కు చెందుతాయి.\n", "\n", "- **గ్రిడ్ ఆధారిత క్లస్టరింగ్**. బహుముఖ డేటాసెట్‌ల కోసం, ఒక గ్రిడ్ సృష్టించి డేటాను గ్రిడ్ సెల్స్ మధ్య విభజించి క్లస్టర్లు సృష్టిస్తారు.\n", "\n", "క్లస్టరింగ్ గురించి నేర్చుకోవడానికి ఉత్తమ మార్గం మీరు స్వయంగా ప్రయత్నించడం, కాబట్టి ఈ వ్యాయామంలో మీరు అదే చేస్తారు.\n", "\n", "ఈ మాడ్యూల్‌ను పూర్తి చేయడానికి కొన్ని ప్యాకేజీలను అవసరం. మీరు వాటిని ఇన్‌స్టాల్ చేయవచ్చు: `install.packages(c('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork'))`\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": [ "కొన్నిసార్లు, మన డేటా గురించి కొంచెం ఎక్కువ సమాచారం కావచ్చు. మనం [*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", "మనం ఇదే సమయంలో, సాధారణ కేంద్ర ధోరణి గణాంకాలు (ఉదా: [సగటు](https://en.wikipedia.org/wiki/Arithmetic_mean) మరియు [మధ్యమం](https://en.wikipedia.org/wiki/Median)) మరియు వ్యాప్తి కొలతలు (ఉదా: [స్టాండర్డ్ డివియేషన్](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", "> ఒక మంచి విజువలైజేషన్ మీరు ఆశించని విషయాలను చూపిస్తుంది, లేదా డేటా గురించి కొత్త ప్రశ్నలను రేకెత్తిస్తుంది - హాడ్లీ విక్హామ్ మరియు గారెట్ గ్రోలెమండ్, [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": [ "మన డేటా సెట్‌లో సంఖ్యాత్మక వేరియబుల్స్ మధ్య ఏదైనా స్పష్టమైన రేఖీయ సంబంధం ఉందో లేదో చూద్దాం. ఈ సంబంధాన్ని గణితంగా [correlation statistic](https://en.wikipedia.org/wiki/Correlation) ద్వారా కొలుస్తారు.\n", "\n", "correlation statistic అనేది -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` తో సంబంధం ఉంది, ఇది కూడా అర్థం చేసుకోవడానికి సులభం, ఎందుకంటే తాజా పాటలు ఎక్కువగా ప్రాచుర్యం పొందినవే కావచ్చు. Length మరియు energy కూడా సంబంధం ఉన్నట్లు కనిపిస్తున్నాయి.\n", "\n", "ఈ డేటాను క్లస్టరింగ్ అల్గోరిథం ఎలా విశ్లేషిస్తుందో చూడటం ఆసక్తికరం!\n", "\n", "> 🎓 గమనిక: సంబంధం కారణాన్ని సూచించదు! మనకు సంబంధం ఉన్నదని సాక్ష్యం ఉంది కానీ కారణం ఉన్నదని సాక్ష్యం లేదు. ఒక [వినోదాత్మక వెబ్ సైట్](https://tylervigen.com/spurious-correlations) ఈ విషయాన్ని హైలైట్ చేసే కొన్ని విజువల్స్ కలిగి ఉంది.\n", "\n", "### 2. డేటా పంపిణీని అన్వేషించండి\n", "\n", "మనం మరింత సున్నితమైన ప్రశ్నలు అడుద్దాం. వారి ప్రాచుర్యం ఆధారంగా జానర్ల డాన్స్ చేయగలిగే సామర్థ్యం గ్రహణలో గణనీయంగా భిన్నమా? మనం టాప్ మూడు జానర్ల డేటా పంపిణీని ప్రాచుర్యం మరియు డాన్స్ చేయగలిగే సామర్థ్యం కోసం ఇచ్చిన 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-మీన్ క్లస్టరింగ్‌ను ఉపయోగించి ఈ డేటాలో ఆసక్తికరమైన విధాలుగా ఓవర్లాప్ అయ్యే గ్రూపులను కనుగొంటాము.\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) ఈ మాడ్యూల్ యొక్క అసలు పైథాన్ వెర్షన్ సృష్టించినందుకు ♥️\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\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-12-19T16:59:31+00:00", "source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb", "language_code": "te" } }, "nbformat": 4, "nbformat_minor": 1 }