├── README.md ├── LICENSE ├── .gitignore └── spotify_youtube.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Spotify_YouTube_Analysis 2 | 3 | ## Dataset URL : https://www.kaggle.com/datasets/salvatorerastelli/spotify-and-youtube 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Jalpa Patel Desai 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | #.idea/ 161 | -------------------------------------------------------------------------------- /spotify_youtube.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "1c428379", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import numpy as np\n", 11 | "import pandas as pd\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "import seaborn as sns\n", 14 | "%matplotlib inline" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "id": "df64e1be", 21 | "metadata": {}, 22 | "outputs": [], 23 | "source": [ 24 | "df = pd.read_csv(\"Spotify_Youtube.csv\")" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 3, 30 | "id": "77f0b23e", 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "data": { 35 | "text/html": [ 36 | "
\n", 37 | "\n", 50 | "\n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | "
Unnamed: 0ArtistUrl_spotifyTrackAlbumAlbum_typeUriDanceabilityEnergyKey...Url_youtubeTitleChannelViewsLikesCommentsDescriptionLicensedofficial_videoStream
00Gorillazhttps://open.spotify.com/artist/3AA28KZvwAUcZu...Feel Good Inc.Demon Daysalbumspotify:track:0d28khcov6AiegSCpG5TuT0.8180.7056.0...https://www.youtube.com/watch?v=HyHNuVaZJ-kGorillaz - Feel Good Inc. (Official Video)Gorillaz693555221.06220896.0169907.0Official HD Video for Gorillaz' fantastic trac...TrueTrue1.040235e+09
11Gorillazhttps://open.spotify.com/artist/3AA28KZvwAUcZu...Rhinestone EyesPlastic Beachalbumspotify:track:1foMv2HQwfQ2vntFf9HFeG0.6760.7038.0...https://www.youtube.com/watch?v=yYDmaexVHicGorillaz - Rhinestone Eyes [Storyboard Film] (...Gorillaz72011645.01079128.031003.0The official video for Gorillaz - Rhinestone E...TrueTrue3.100837e+08
22Gorillazhttps://open.spotify.com/artist/3AA28KZvwAUcZu...New Gold (feat. Tame Impala and Bootie Brown)New Gold (feat. Tame Impala and Bootie Brown)singlespotify:track:64dLd6rVqDLtkXFYrEUHIU0.6950.9231.0...https://www.youtube.com/watch?v=qJa-VFwPpYAGorillaz - New Gold ft. Tame Impala & Bootie B...Gorillaz8435055.0282142.07399.0Gorillaz - New Gold ft. Tame Impala & Bootie B...TrueTrue6.306347e+07
33Gorillazhttps://open.spotify.com/artist/3AA28KZvwAUcZu...On Melancholy HillPlastic Beachalbumspotify:track:0q6LuUqGLUiCPP1cbdwFs30.6890.7392.0...https://www.youtube.com/watch?v=04mfKJWDSzIGorillaz - On Melancholy Hill (Official Video)Gorillaz211754952.01788577.055229.0Follow Gorillaz online:\\nhttp://gorillaz.com \\...TrueTrue4.346636e+08
44Gorillazhttps://open.spotify.com/artist/3AA28KZvwAUcZu...Clint EastwoodGorillazalbumspotify:track:7yMiX7n9SBvadzox8T5jzT0.6630.69410.0...https://www.youtube.com/watch?v=1V_xRb0x9awGorillaz - Clint Eastwood (Official Video)Gorillaz618480958.06197318.0155930.0The official music video for Gorillaz - Clint ...TrueTrue6.172597e+08
\n", 200 | "

5 rows × 28 columns

\n", 201 | "
" 202 | ], 203 | "text/plain": [ 204 | " Unnamed: 0 Artist Url_spotify \\\n", 205 | "0 0 Gorillaz https://open.spotify.com/artist/3AA28KZvwAUcZu... \n", 206 | "1 1 Gorillaz https://open.spotify.com/artist/3AA28KZvwAUcZu... \n", 207 | "2 2 Gorillaz https://open.spotify.com/artist/3AA28KZvwAUcZu... \n", 208 | "3 3 Gorillaz https://open.spotify.com/artist/3AA28KZvwAUcZu... \n", 209 | "4 4 Gorillaz https://open.spotify.com/artist/3AA28KZvwAUcZu... \n", 210 | "\n", 211 | " Track \\\n", 212 | "0 Feel Good Inc. \n", 213 | "1 Rhinestone Eyes \n", 214 | "2 New Gold (feat. Tame Impala and Bootie Brown) \n", 215 | "3 On Melancholy Hill \n", 216 | "4 Clint Eastwood \n", 217 | "\n", 218 | " Album Album_type \\\n", 219 | "0 Demon Days album \n", 220 | "1 Plastic Beach album \n", 221 | "2 New Gold (feat. Tame Impala and Bootie Brown) single \n", 222 | "3 Plastic Beach album \n", 223 | "4 Gorillaz album \n", 224 | "\n", 225 | " Uri Danceability Energy Key ... \\\n", 226 | "0 spotify:track:0d28khcov6AiegSCpG5TuT 0.818 0.705 6.0 ... \n", 227 | "1 spotify:track:1foMv2HQwfQ2vntFf9HFeG 0.676 0.703 8.0 ... \n", 228 | "2 spotify:track:64dLd6rVqDLtkXFYrEUHIU 0.695 0.923 1.0 ... \n", 229 | "3 spotify:track:0q6LuUqGLUiCPP1cbdwFs3 0.689 0.739 2.0 ... \n", 230 | "4 spotify:track:7yMiX7n9SBvadzox8T5jzT 0.663 0.694 10.0 ... \n", 231 | "\n", 232 | " Url_youtube \\\n", 233 | "0 https://www.youtube.com/watch?v=HyHNuVaZJ-k \n", 234 | "1 https://www.youtube.com/watch?v=yYDmaexVHic \n", 235 | "2 https://www.youtube.com/watch?v=qJa-VFwPpYA \n", 236 | "3 https://www.youtube.com/watch?v=04mfKJWDSzI \n", 237 | "4 https://www.youtube.com/watch?v=1V_xRb0x9aw \n", 238 | "\n", 239 | " Title Channel Views \\\n", 240 | "0 Gorillaz - Feel Good Inc. (Official Video) Gorillaz 693555221.0 \n", 241 | "1 Gorillaz - Rhinestone Eyes [Storyboard Film] (... Gorillaz 72011645.0 \n", 242 | "2 Gorillaz - New Gold ft. Tame Impala & Bootie B... Gorillaz 8435055.0 \n", 243 | "3 Gorillaz - On Melancholy Hill (Official Video) Gorillaz 211754952.0 \n", 244 | "4 Gorillaz - Clint Eastwood (Official Video) Gorillaz 618480958.0 \n", 245 | "\n", 246 | " Likes Comments Description \\\n", 247 | "0 6220896.0 169907.0 Official HD Video for Gorillaz' fantastic trac... \n", 248 | "1 1079128.0 31003.0 The official video for Gorillaz - Rhinestone E... \n", 249 | "2 282142.0 7399.0 Gorillaz - New Gold ft. Tame Impala & Bootie B... \n", 250 | "3 1788577.0 55229.0 Follow Gorillaz online:\\nhttp://gorillaz.com \\... \n", 251 | "4 6197318.0 155930.0 The official music video for Gorillaz - Clint ... \n", 252 | "\n", 253 | " Licensed official_video Stream \n", 254 | "0 True True 1.040235e+09 \n", 255 | "1 True True 3.100837e+08 \n", 256 | "2 True True 6.306347e+07 \n", 257 | "3 True True 4.346636e+08 \n", 258 | "4 True True 6.172597e+08 \n", 259 | "\n", 260 | "[5 rows x 28 columns]" 261 | ] 262 | }, 263 | "execution_count": 3, 264 | "metadata": {}, 265 | "output_type": "execute_result" 266 | } 267 | ], 268 | "source": [ 269 | "df.head()" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": 4, 275 | "id": "06aaf7e9", 276 | "metadata": {}, 277 | "outputs": [ 278 | { 279 | "data": { 280 | "text/plain": [ 281 | "Unnamed: 0 int64\n", 282 | "Artist object\n", 283 | "Url_spotify object\n", 284 | "Track object\n", 285 | "Album object\n", 286 | "Album_type object\n", 287 | "Uri object\n", 288 | "Danceability float64\n", 289 | "Energy float64\n", 290 | "Key float64\n", 291 | "Loudness float64\n", 292 | "Speechiness float64\n", 293 | "Acousticness float64\n", 294 | "Instrumentalness float64\n", 295 | "Liveness float64\n", 296 | "Valence float64\n", 297 | "Tempo float64\n", 298 | "Duration_ms float64\n", 299 | "Url_youtube object\n", 300 | "Title object\n", 301 | "Channel object\n", 302 | "Views float64\n", 303 | "Likes float64\n", 304 | "Comments float64\n", 305 | "Description object\n", 306 | "Licensed object\n", 307 | "official_video object\n", 308 | "Stream float64\n", 309 | "dtype: object" 310 | ] 311 | }, 312 | "execution_count": 4, 313 | "metadata": {}, 314 | "output_type": "execute_result" 315 | } 316 | ], 317 | "source": [ 318 | "df.dtypes" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 5, 324 | "id": "6b8b8977", 325 | "metadata": {}, 326 | "outputs": [ 327 | { 328 | "data": { 329 | "text/plain": [ 330 | "580104" 331 | ] 332 | }, 333 | "execution_count": 5, 334 | "metadata": {}, 335 | "output_type": "execute_result" 336 | } 337 | ], 338 | "source": [ 339 | "df.size" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": 6, 345 | "id": "1ad95c62", 346 | "metadata": {}, 347 | "outputs": [ 348 | { 349 | "data": { 350 | "text/plain": [ 351 | "(20718, 28)" 352 | ] 353 | }, 354 | "execution_count": 6, 355 | "metadata": {}, 356 | "output_type": "execute_result" 357 | } 358 | ], 359 | "source": [ 360 | "df.shape" 361 | ] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "execution_count": 7, 366 | "id": "de78c176", 367 | "metadata": {}, 368 | "outputs": [ 369 | { 370 | "data": { 371 | "text/plain": [ 372 | "Unnamed: 0 0\n", 373 | "Artist 0\n", 374 | "Url_spotify 0\n", 375 | "Track 0\n", 376 | "Album 0\n", 377 | "Album_type 0\n", 378 | "Uri 0\n", 379 | "Danceability 2\n", 380 | "Energy 2\n", 381 | "Key 2\n", 382 | "Loudness 2\n", 383 | "Speechiness 2\n", 384 | "Acousticness 2\n", 385 | "Instrumentalness 2\n", 386 | "Liveness 2\n", 387 | "Valence 2\n", 388 | "Tempo 2\n", 389 | "Duration_ms 2\n", 390 | "Url_youtube 470\n", 391 | "Title 470\n", 392 | "Channel 470\n", 393 | "Views 470\n", 394 | "Likes 541\n", 395 | "Comments 569\n", 396 | "Description 876\n", 397 | "Licensed 470\n", 398 | "official_video 470\n", 399 | "Stream 576\n", 400 | "dtype: int64" 401 | ] 402 | }, 403 | "execution_count": 7, 404 | "metadata": {}, 405 | "output_type": "execute_result" 406 | } 407 | ], 408 | "source": [ 409 | "df.isnull().sum()" 410 | ] 411 | }, 412 | { 413 | "cell_type": "code", 414 | "execution_count": 8, 415 | "id": "17386d72", 416 | "metadata": {}, 417 | "outputs": [ 418 | { 419 | "data": { 420 | "text/plain": [ 421 | "Index(['Unnamed: 0', 'Artist', 'Url_spotify', 'Track', 'Album', 'Album_type',\n", 422 | " 'Uri', 'Danceability', 'Energy', 'Key', 'Loudness', 'Speechiness',\n", 423 | " 'Acousticness', 'Instrumentalness', 'Liveness', 'Valence', 'Tempo',\n", 424 | " 'Duration_ms', 'Url_youtube', 'Title', 'Channel', 'Views', 'Likes',\n", 425 | " 'Comments', 'Description', 'Licensed', 'official_video', 'Stream'],\n", 426 | " dtype='object')" 427 | ] 428 | }, 429 | "execution_count": 8, 430 | "metadata": {}, 431 | "output_type": "execute_result" 432 | } 433 | ], 434 | "source": [ 435 | "#viewing the columns\n", 436 | "df.columns\n" 437 | ] 438 | }, 439 | { 440 | "cell_type": "code", 441 | "execution_count": 9, 442 | "id": "09aebc29", 443 | "metadata": {}, 444 | "outputs": [], 445 | "source": [ 446 | "extra_cols=['Unnamed: 0','Title','Url_spotify','Uri','Url_youtube']\n", 447 | "df.drop(extra_cols,axis=1,inplace=True)" 448 | ] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "execution_count": 10, 453 | "id": "4ff57451", 454 | "metadata": {}, 455 | "outputs": [ 456 | { 457 | "data": { 458 | "text/plain": [ 459 | "(20718, 23)" 460 | ] 461 | }, 462 | "execution_count": 10, 463 | "metadata": {}, 464 | "output_type": "execute_result" 465 | } 466 | ], 467 | "source": [ 468 | "df.shape" 469 | ] 470 | }, 471 | { 472 | "cell_type": "code", 473 | "execution_count": 11, 474 | "id": "09f18acb", 475 | "metadata": {}, 476 | "outputs": [ 477 | { 478 | "data": { 479 | "text/plain": [ 480 | "Artist 2079\n", 481 | "Track 17841\n", 482 | "Album 11937\n", 483 | "Album_type 3\n", 484 | "Danceability 898\n", 485 | "Energy 1268\n", 486 | "Key 12\n", 487 | "Loudness 9417\n", 488 | "Speechiness 1303\n", 489 | "Acousticness 3138\n", 490 | "Instrumentalness 4012\n", 491 | "Liveness 1536\n", 492 | "Valence 1293\n", 493 | "Tempo 15024\n", 494 | "Duration_ms 14690\n", 495 | "Channel 6714\n", 496 | "Views 19245\n", 497 | "Likes 17939\n", 498 | "Comments 10485\n", 499 | "Description 17395\n", 500 | "Licensed 2\n", 501 | "official_video 2\n", 502 | "Stream 18461\n", 503 | "dtype: int64" 504 | ] 505 | }, 506 | "execution_count": 11, 507 | "metadata": {}, 508 | "output_type": "execute_result" 509 | } 510 | ], 511 | "source": [ 512 | "df.nunique() " 513 | ] 514 | }, 515 | { 516 | "cell_type": "code", 517 | "execution_count": 12, 518 | "id": "302b0565", 519 | "metadata": {}, 520 | "outputs": [], 521 | "source": [ 522 | "df.dropna(inplace=True)" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 13, 528 | "id": "95d89821", 529 | "metadata": {}, 530 | "outputs": [ 531 | { 532 | "data": { 533 | "text/plain": [ 534 | "Artist 0\n", 535 | "Track 0\n", 536 | "Album 0\n", 537 | "Album_type 0\n", 538 | "Danceability 0\n", 539 | "Energy 0\n", 540 | "Key 0\n", 541 | "Loudness 0\n", 542 | "Speechiness 0\n", 543 | "Acousticness 0\n", 544 | "Instrumentalness 0\n", 545 | "Liveness 0\n", 546 | "Valence 0\n", 547 | "Tempo 0\n", 548 | "Duration_ms 0\n", 549 | "Channel 0\n", 550 | "Views 0\n", 551 | "Likes 0\n", 552 | "Comments 0\n", 553 | "Description 0\n", 554 | "Licensed 0\n", 555 | "official_video 0\n", 556 | "Stream 0\n", 557 | "dtype: int64" 558 | ] 559 | }, 560 | "execution_count": 13, 561 | "metadata": {}, 562 | "output_type": "execute_result" 563 | } 564 | ], 565 | "source": [ 566 | "df.isnull().sum()" 567 | ] 568 | }, 569 | { 570 | "cell_type": "code", 571 | "execution_count": 14, 572 | "id": "b7c28bec", 573 | "metadata": {}, 574 | "outputs": [], 575 | "source": [ 576 | "df['Views']=df['Views'].astype('int')\n", 577 | "df['Likes']=df['Likes'].astype('int')\n", 578 | "df['Comments']=df['Comments'].astype('int')" 579 | ] 580 | }, 581 | { 582 | "cell_type": "code", 583 | "execution_count": 15, 584 | "id": "ecb57764", 585 | "metadata": {}, 586 | "outputs": [ 587 | { 588 | "data": { 589 | "text/html": [ 590 | "
\n", 591 | "\n", 604 | "\n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | "
ArtistTrackAlbumAlbum_typeDanceabilityEnergyKeyLoudnessSpeechinessAcousticness...TempoDuration_msChannelViewsLikesCommentsDescriptionLicensedofficial_videoStream
0GorillazFeel Good Inc.Demon Daysalbum0.8180.7056.0-6.6790.17700.008360...138.559222640.0Gorillaz6935552216220896169907Official HD Video for Gorillaz' fantastic trac...TrueTrue1.040235e+09
1GorillazRhinestone EyesPlastic Beachalbum0.6760.7038.0-5.8150.03020.086900...92.761200173.0Gorillaz72011645107912831003The official video for Gorillaz - Rhinestone E...TrueTrue3.100837e+08
2GorillazNew Gold (feat. Tame Impala and Bootie Brown)New Gold (feat. Tame Impala and Bootie Brown)single0.6950.9231.0-3.9300.05220.042500...108.014215150.0Gorillaz84350552821427399Gorillaz - New Gold ft. Tame Impala & Bootie B...TrueTrue6.306347e+07
3GorillazOn Melancholy HillPlastic Beachalbum0.6890.7392.0-5.8100.02600.000015...120.423233867.0Gorillaz211754952178857755229Follow Gorillaz online:\\nhttp://gorillaz.com \\...TrueTrue4.346636e+08
4GorillazClint EastwoodGorillazalbum0.6630.69410.0-8.6270.17100.025300...167.953340920.0Gorillaz6184809586197318155930The official music video for Gorillaz - Clint ...TrueTrue6.172597e+08
\n", 754 | "

5 rows × 23 columns

\n", 755 | "
" 756 | ], 757 | "text/plain": [ 758 | " Artist Track \\\n", 759 | "0 Gorillaz Feel Good Inc. \n", 760 | "1 Gorillaz Rhinestone Eyes \n", 761 | "2 Gorillaz New Gold (feat. Tame Impala and Bootie Brown) \n", 762 | "3 Gorillaz On Melancholy Hill \n", 763 | "4 Gorillaz Clint Eastwood \n", 764 | "\n", 765 | " Album Album_type Danceability \\\n", 766 | "0 Demon Days album 0.818 \n", 767 | "1 Plastic Beach album 0.676 \n", 768 | "2 New Gold (feat. Tame Impala and Bootie Brown) single 0.695 \n", 769 | "3 Plastic Beach album 0.689 \n", 770 | "4 Gorillaz album 0.663 \n", 771 | "\n", 772 | " Energy Key Loudness Speechiness Acousticness ... Tempo \\\n", 773 | "0 0.705 6.0 -6.679 0.1770 0.008360 ... 138.559 \n", 774 | "1 0.703 8.0 -5.815 0.0302 0.086900 ... 92.761 \n", 775 | "2 0.923 1.0 -3.930 0.0522 0.042500 ... 108.014 \n", 776 | "3 0.739 2.0 -5.810 0.0260 0.000015 ... 120.423 \n", 777 | "4 0.694 10.0 -8.627 0.1710 0.025300 ... 167.953 \n", 778 | "\n", 779 | " Duration_ms Channel Views Likes Comments \\\n", 780 | "0 222640.0 Gorillaz 693555221 6220896 169907 \n", 781 | "1 200173.0 Gorillaz 72011645 1079128 31003 \n", 782 | "2 215150.0 Gorillaz 8435055 282142 7399 \n", 783 | "3 233867.0 Gorillaz 211754952 1788577 55229 \n", 784 | "4 340920.0 Gorillaz 618480958 6197318 155930 \n", 785 | "\n", 786 | " Description Licensed \\\n", 787 | "0 Official HD Video for Gorillaz' fantastic trac... True \n", 788 | "1 The official video for Gorillaz - Rhinestone E... True \n", 789 | "2 Gorillaz - New Gold ft. Tame Impala & Bootie B... True \n", 790 | "3 Follow Gorillaz online:\\nhttp://gorillaz.com \\... True \n", 791 | "4 The official music video for Gorillaz - Clint ... True \n", 792 | "\n", 793 | " official_video Stream \n", 794 | "0 True 1.040235e+09 \n", 795 | "1 True 3.100837e+08 \n", 796 | "2 True 6.306347e+07 \n", 797 | "3 True 4.346636e+08 \n", 798 | "4 True 6.172597e+08 \n", 799 | "\n", 800 | "[5 rows x 23 columns]" 801 | ] 802 | }, 803 | "execution_count": 15, 804 | "metadata": {}, 805 | "output_type": "execute_result" 806 | } 807 | ], 808 | "source": [ 809 | "df.head()" 810 | ] 811 | }, 812 | { 813 | "cell_type": "code", 814 | "execution_count": 16, 815 | "id": "a007899b", 816 | "metadata": {}, 817 | "outputs": [ 818 | { 819 | "data": { 820 | "text/html": [ 821 | "
\n", 822 | "\n", 835 | "\n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | "
ArtistViews
263Bruno Mars10231841530
1163Macklemore & Ryan Lewis10122055560
375Coldplay9997277884
149BLACKPINK9392961989
780J Balvin8464877693
1347Nicki Minaj8017064073
512Earth, Wind & Fire6414076580
1470Post Malone6394420209
1390One Direction6337601549
1349Nicky Jam6321868119
\n", 896 | "
" 897 | ], 898 | "text/plain": [ 899 | " Artist Views\n", 900 | "263 Bruno Mars 10231841530\n", 901 | "1163 Macklemore & Ryan Lewis 10122055560\n", 902 | "375 Coldplay 9997277884\n", 903 | "149 BLACKPINK 9392961989\n", 904 | "780 J Balvin 8464877693\n", 905 | "1347 Nicki Minaj 8017064073\n", 906 | "512 Earth, Wind & Fire 6414076580\n", 907 | "1470 Post Malone 6394420209\n", 908 | "1390 One Direction 6337601549\n", 909 | "1349 Nicky Jam 6321868119" 910 | ] 911 | }, 912 | "execution_count": 16, 913 | "metadata": {}, 914 | "output_type": "execute_result" 915 | } 916 | ], 917 | "source": [ 918 | "view=df.groupby('Artist')['Views'].agg('sum').reset_index().sort_values('Views',ascending=False).head(10)\n", 919 | "view" 920 | ] 921 | }, 922 | { 923 | "cell_type": "code", 924 | "execution_count": 17, 925 | "id": "2b87d533", 926 | "metadata": {}, 927 | "outputs": [ 928 | { 929 | "data": { 930 | "text/html": [ 931 | "
\n", 932 | "\n", 945 | "\n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | "
ArtistTrackAlbumAlbum_typeDanceabilityEnergyKeyLoudnessSpeechinessAcousticness...TempoDuration_msChannelViewsLikesCommentsDescriptionLicensedofficial_videoStream
0GorillazFeel Good Inc.Demon Daysalbum0.8180.7056.0-6.6790.17700.008360...138.559222640.0Gorillaz6935552216220896169907Official HD Video for Gorillaz' fantastic trac...TrueTrue1.040235e+09
1GorillazRhinestone EyesPlastic Beachalbum0.6760.7038.0-5.8150.03020.086900...92.761200173.0Gorillaz72011645107912831003The official video for Gorillaz - Rhinestone E...TrueTrue3.100837e+08
2GorillazNew Gold (feat. Tame Impala and Bootie Brown)New Gold (feat. Tame Impala and Bootie Brown)single0.6950.9231.0-3.9300.05220.042500...108.014215150.0Gorillaz84350552821427399Gorillaz - New Gold ft. Tame Impala & Bootie B...TrueTrue6.306347e+07
3GorillazOn Melancholy HillPlastic Beachalbum0.6890.7392.0-5.8100.02600.000015...120.423233867.0Gorillaz211754952178857755229Follow Gorillaz online:\\nhttp://gorillaz.com \\...TrueTrue4.346636e+08
4GorillazClint EastwoodGorillazalbum0.6630.69410.0-8.6270.17100.025300...167.953340920.0Gorillaz6184809586197318155930The official music video for Gorillaz - Clint ...TrueTrue6.172597e+08
\n", 1095 | "

5 rows × 23 columns

\n", 1096 | "
" 1097 | ], 1098 | "text/plain": [ 1099 | " Artist Track \\\n", 1100 | "0 Gorillaz Feel Good Inc. \n", 1101 | "1 Gorillaz Rhinestone Eyes \n", 1102 | "2 Gorillaz New Gold (feat. Tame Impala and Bootie Brown) \n", 1103 | "3 Gorillaz On Melancholy Hill \n", 1104 | "4 Gorillaz Clint Eastwood \n", 1105 | "\n", 1106 | " Album Album_type Danceability \\\n", 1107 | "0 Demon Days album 0.818 \n", 1108 | "1 Plastic Beach album 0.676 \n", 1109 | "2 New Gold (feat. Tame Impala and Bootie Brown) single 0.695 \n", 1110 | "3 Plastic Beach album 0.689 \n", 1111 | "4 Gorillaz album 0.663 \n", 1112 | "\n", 1113 | " Energy Key Loudness Speechiness Acousticness ... Tempo \\\n", 1114 | "0 0.705 6.0 -6.679 0.1770 0.008360 ... 138.559 \n", 1115 | "1 0.703 8.0 -5.815 0.0302 0.086900 ... 92.761 \n", 1116 | "2 0.923 1.0 -3.930 0.0522 0.042500 ... 108.014 \n", 1117 | "3 0.739 2.0 -5.810 0.0260 0.000015 ... 120.423 \n", 1118 | "4 0.694 10.0 -8.627 0.1710 0.025300 ... 167.953 \n", 1119 | "\n", 1120 | " Duration_ms Channel Views Likes Comments \\\n", 1121 | "0 222640.0 Gorillaz 693555221 6220896 169907 \n", 1122 | "1 200173.0 Gorillaz 72011645 1079128 31003 \n", 1123 | "2 215150.0 Gorillaz 8435055 282142 7399 \n", 1124 | "3 233867.0 Gorillaz 211754952 1788577 55229 \n", 1125 | "4 340920.0 Gorillaz 618480958 6197318 155930 \n", 1126 | "\n", 1127 | " Description Licensed \\\n", 1128 | "0 Official HD Video for Gorillaz' fantastic trac... True \n", 1129 | "1 The official video for Gorillaz - Rhinestone E... True \n", 1130 | "2 Gorillaz - New Gold ft. Tame Impala & Bootie B... True \n", 1131 | "3 Follow Gorillaz online:\\nhttp://gorillaz.com \\... True \n", 1132 | "4 The official music video for Gorillaz - Clint ... True \n", 1133 | "\n", 1134 | " official_video Stream \n", 1135 | "0 True 1.040235e+09 \n", 1136 | "1 True 3.100837e+08 \n", 1137 | "2 True 6.306347e+07 \n", 1138 | "3 True 4.346636e+08 \n", 1139 | "4 True 6.172597e+08 \n", 1140 | "\n", 1141 | "[5 rows x 23 columns]" 1142 | ] 1143 | }, 1144 | "execution_count": 17, 1145 | "metadata": {}, 1146 | "output_type": "execute_result" 1147 | } 1148 | ], 1149 | "source": [ 1150 | "df.head()" 1151 | ] 1152 | }, 1153 | { 1154 | "cell_type": "code", 1155 | "execution_count": 18, 1156 | "id": "bb71614d", 1157 | "metadata": {}, 1158 | "outputs": [ 1159 | { 1160 | "ename": "KeyboardInterrupt", 1161 | "evalue": "", 1162 | "output_type": "error", 1163 | "traceback": [ 1164 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 1165 | "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", 1166 | "Cell \u001b[1;32mIn[18], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m df\u001b[38;5;241m.\u001b[39mset_index(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mArtist\u001b[39m\u001b[38;5;124m'\u001b[39m,inplace\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m----> 2\u001b[0m \u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mbar\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mcolor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mg\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3\u001b[0m plt\u001b[38;5;241m.\u001b[39mxlabel(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mArtist\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 4\u001b[0m plt\u001b[38;5;241m.\u001b[39mylabel(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mViews\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", 1167 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\plotting\\_core.py:1000\u001b[0m, in \u001b[0;36mPlotAccessor.__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 997\u001b[0m label_name \u001b[38;5;241m=\u001b[39m label_kw \u001b[38;5;129;01mor\u001b[39;00m data\u001b[38;5;241m.\u001b[39mcolumns\n\u001b[0;32m 998\u001b[0m data\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m=\u001b[39m label_name\n\u001b[1;32m-> 1000\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m plot_backend\u001b[38;5;241m.\u001b[39mplot(data, kind\u001b[38;5;241m=\u001b[39mkind, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", 1168 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\__init__.py:71\u001b[0m, in \u001b[0;36mplot\u001b[1;34m(data, kind, **kwargs)\u001b[0m\n\u001b[0;32m 69\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124max\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(ax, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft_ax\u001b[39m\u001b[38;5;124m\"\u001b[39m, ax)\n\u001b[0;32m 70\u001b[0m plot_obj \u001b[38;5;241m=\u001b[39m PLOT_CLASSES[kind](data, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m---> 71\u001b[0m \u001b[43mplot_obj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 72\u001b[0m plot_obj\u001b[38;5;241m.\u001b[39mdraw()\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m plot_obj\u001b[38;5;241m.\u001b[39mresult\n", 1169 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py:452\u001b[0m, in \u001b[0;36mMPLPlot.generate\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 450\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compute_plot_data()\n\u001b[0;32m 451\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_setup_subplots()\n\u001b[1;32m--> 452\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_plot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 453\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_add_table()\n\u001b[0;32m 454\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_legend()\n", 1170 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py:1721\u001b[0m, in \u001b[0;36mBarPlot._make_plot\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1719\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1720\u001b[0m w \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbar_width \u001b[38;5;241m/\u001b[39m K\n\u001b[1;32m-> 1721\u001b[0m rect \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_plot(\n\u001b[0;32m 1722\u001b[0m ax,\n\u001b[0;32m 1723\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39max_pos \u001b[38;5;241m+\u001b[39m (i \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m0.5\u001b[39m) \u001b[38;5;241m*\u001b[39m w,\n\u001b[0;32m 1724\u001b[0m y,\n\u001b[0;32m 1725\u001b[0m w,\n\u001b[0;32m 1726\u001b[0m start\u001b[38;5;241m=\u001b[39mstart,\n\u001b[0;32m 1727\u001b[0m label\u001b[38;5;241m=\u001b[39mlabel,\n\u001b[0;32m 1728\u001b[0m log\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlog,\n\u001b[0;32m 1729\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds,\n\u001b[0;32m 1730\u001b[0m )\n\u001b[0;32m 1731\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_append_legend_handles_labels(rect, label)\n", 1171 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py:1651\u001b[0m, in \u001b[0;36mBarPlot._plot\u001b[1;34m(cls, ax, x, y, w, start, log, **kwds)\u001b[0m\n\u001b[0;32m 1647\u001b[0m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[0;32m 1648\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_plot\u001b[39m( \u001b[38;5;66;03m# type: ignore[override]\u001b[39;00m\n\u001b[0;32m 1649\u001b[0m \u001b[38;5;28mcls\u001b[39m, ax: Axes, x, y, w, start\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, log\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds\n\u001b[0;32m 1650\u001b[0m ):\n\u001b[1;32m-> 1651\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ax\u001b[38;5;241m.\u001b[39mbar(x, y, w, bottom\u001b[38;5;241m=\u001b[39mstart, log\u001b[38;5;241m=\u001b[39mlog, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds)\n", 1172 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\__init__.py:1442\u001b[0m, in \u001b[0;36m_preprocess_data..inner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1439\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[0;32m 1440\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minner\u001b[39m(ax, \u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 1441\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 1442\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(ax, \u001b[38;5;241m*\u001b[39m\u001b[38;5;28mmap\u001b[39m(sanitize_sequence, args), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1444\u001b[0m bound \u001b[38;5;241m=\u001b[39m new_sig\u001b[38;5;241m.\u001b[39mbind(ax, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1445\u001b[0m auto_label \u001b[38;5;241m=\u001b[39m (bound\u001b[38;5;241m.\u001b[39marguments\u001b[38;5;241m.\u001b[39mget(label_namer)\n\u001b[0;32m 1446\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m bound\u001b[38;5;241m.\u001b[39mkwargs\u001b[38;5;241m.\u001b[39mget(label_namer))\n", 1173 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:2494\u001b[0m, in \u001b[0;36mAxes.bar\u001b[1;34m(self, x, height, width, bottom, align, **kwargs)\u001b[0m\n\u001b[0;32m 2492\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# horizontal\u001b[39;00m\n\u001b[0;32m 2493\u001b[0m r\u001b[38;5;241m.\u001b[39msticky_edges\u001b[38;5;241m.\u001b[39mx\u001b[38;5;241m.\u001b[39mappend(l)\n\u001b[1;32m-> 2494\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madd_patch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2495\u001b[0m patches\u001b[38;5;241m.\u001b[39mappend(r)\n\u001b[0;32m 2497\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m xerr \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m yerr \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", 1174 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py:2379\u001b[0m, in \u001b[0;36m_AxesBase.add_patch\u001b[1;34m(self, p)\u001b[0m\n\u001b[0;32m 2377\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m p\u001b[38;5;241m.\u001b[39mget_clip_path() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 2378\u001b[0m p\u001b[38;5;241m.\u001b[39mset_clip_path(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpatch)\n\u001b[1;32m-> 2379\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_update_patch_limits\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2380\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_children\u001b[38;5;241m.\u001b[39mappend(p)\n\u001b[0;32m 2381\u001b[0m p\u001b[38;5;241m.\u001b[39m_remove_method \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_children\u001b[38;5;241m.\u001b[39mremove\n", 1175 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py:2401\u001b[0m, in \u001b[0;36m_AxesBase._update_patch_limits\u001b[1;34m(self, patch)\u001b[0m\n\u001b[0;32m 2398\u001b[0m \u001b[38;5;66;03m# Get all vertices on the path\u001b[39;00m\n\u001b[0;32m 2399\u001b[0m \u001b[38;5;66;03m# Loop through each segment to get extrema for Bezier curve sections\u001b[39;00m\n\u001b[0;32m 2400\u001b[0m vertices \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m-> 2401\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m curve, code \u001b[38;5;129;01min\u001b[39;00m p\u001b[38;5;241m.\u001b[39miter_bezier(simplify\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m 2402\u001b[0m \u001b[38;5;66;03m# Get distance along the curve of any extrema\u001b[39;00m\n\u001b[0;32m 2403\u001b[0m _, dzeros \u001b[38;5;241m=\u001b[39m curve\u001b[38;5;241m.\u001b[39maxis_aligned_extrema()\n\u001b[0;32m 2404\u001b[0m \u001b[38;5;66;03m# Calculate vertices of start, end and any extrema in between\u001b[39;00m\n", 1176 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\path.py:443\u001b[0m, in \u001b[0;36mPath.iter_bezier\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 441\u001b[0m first_vert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 442\u001b[0m prev_vert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m--> 443\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m verts, code \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39miter_segments(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 444\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m first_vert \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 445\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m code \u001b[38;5;241m!=\u001b[39m Path\u001b[38;5;241m.\u001b[39mMOVETO:\n", 1177 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\path.py:397\u001b[0m, in \u001b[0;36mPath.iter_segments\u001b[1;34m(self, transform, remove_nans, clip, snap, stroke_width, simplify, curves, sketch)\u001b[0m\n\u001b[0;32m 394\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m 395\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m--> 397\u001b[0m cleaned \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcleaned\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtransform\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtransform\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 398\u001b[0m \u001b[43m \u001b[49m\u001b[43mremove_nans\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mremove_nans\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mclip\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclip\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 399\u001b[0m \u001b[43m \u001b[49m\u001b[43msnap\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msnap\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstroke_width\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstroke_width\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 400\u001b[0m \u001b[43m \u001b[49m\u001b[43msimplify\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msimplify\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurves\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcurves\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 401\u001b[0m \u001b[43m \u001b[49m\u001b[43msketch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msketch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 403\u001b[0m \u001b[38;5;66;03m# Cache these object lookups for performance in the loop.\u001b[39;00m\n\u001b[0;32m 404\u001b[0m NUM_VERTICES_FOR_CODE \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mNUM_VERTICES_FOR_CODE\n", 1178 | "File \u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\path.py:477\u001b[0m, in \u001b[0;36mPath.cleaned\u001b[1;34m(self, transform, remove_nans, clip, simplify, curves, stroke_width, snap, sketch)\u001b[0m\n\u001b[0;32m 466\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcleaned\u001b[39m(\u001b[38;5;28mself\u001b[39m, transform\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, remove_nans\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, clip\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 467\u001b[0m \u001b[38;5;241m*\u001b[39m, simplify\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, curves\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 468\u001b[0m stroke_width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.0\u001b[39m, snap\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, sketch\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 469\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 470\u001b[0m \u001b[38;5;124;03m Return a new Path with vertices and codes cleaned according to the\u001b[39;00m\n\u001b[0;32m 471\u001b[0m \u001b[38;5;124;03m parameters.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 475\u001b[0m \u001b[38;5;124;03m Path.iter_segments : for details of the keyword arguments.\u001b[39;00m\n\u001b[0;32m 476\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 477\u001b[0m vertices, codes \u001b[38;5;241m=\u001b[39m \u001b[43m_path\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcleanup_path\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 478\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtransform\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mremove_nans\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mclip\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msnap\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstroke_width\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msimplify\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 479\u001b[0m \u001b[43m \u001b[49m\u001b[43mcurves\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msketch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 480\u001b[0m pth \u001b[38;5;241m=\u001b[39m Path\u001b[38;5;241m.\u001b[39m_fast_from_codes_and_verts(vertices, codes, \u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m 481\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m simplify:\n", 1179 | "\u001b[1;31mKeyboardInterrupt\u001b[0m: " 1180 | ] 1181 | }, 1182 | { 1183 | "data": { 1184 | "image/png": "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\n", 1185 | "text/plain": [ 1186 | "
" 1187 | ] 1188 | }, 1189 | "metadata": {}, 1190 | "output_type": "display_data" 1191 | } 1192 | ], 1193 | "source": [ 1194 | "df.set_index('Artist',inplace=True)\n", 1195 | "df.plot(kind='bar',color='g')\n", 1196 | "plt.xlabel('Artist')\n", 1197 | "plt.ylabel('Views')\n", 1198 | "plt.title('Top 10 Artist with higher views')\n", 1199 | "plt.xticks(rotation=70)\n", 1200 | "plt.show()\n" 1201 | ] 1202 | }, 1203 | { 1204 | "cell_type": "code", 1205 | "execution_count": null, 1206 | "id": "b4b952be", 1207 | "metadata": {}, 1208 | "outputs": [], 1209 | "source": [ 1210 | "df.groupby('Artist')['Likes'].agg('sum').sort_values(ascending=False).head(10)" 1211 | ] 1212 | }, 1213 | { 1214 | "cell_type": "code", 1215 | "execution_count": null, 1216 | "id": "015f0024", 1217 | "metadata": {}, 1218 | "outputs": [], 1219 | "source": [ 1220 | "#make graph of the top 10 most liked artists in Youtube, bar chart\n", 1221 | "ax=df.groupby('Artist').agg({'Likes':'sum','Stream':'sum'}).reset_index()\n", 1222 | "bx=ax.sort_values('Likes',ascending=False).head(10)\n", 1223 | "sns.barplot(data=bx,x='Likes',y='Artist')\n", 1224 | "plt.title('Top 10 most Liked Artist ')\n", 1225 | "plt.show()" 1226 | ] 1227 | }, 1228 | { 1229 | "cell_type": "markdown", 1230 | "id": "aa429715", 1231 | "metadata": {}, 1232 | "source": [ 1233 | "# Determine the top 10 Streamers on spotify" 1234 | ] 1235 | }, 1236 | { 1237 | "cell_type": "code", 1238 | "execution_count": null, 1239 | "id": "425fc3e0", 1240 | "metadata": {}, 1241 | "outputs": [], 1242 | "source": [ 1243 | "cx=ax.sort_values('Stream',ascending=False).head(10)" 1244 | ] 1245 | }, 1246 | { 1247 | "cell_type": "code", 1248 | "execution_count": null, 1249 | "id": "e767d53d", 1250 | "metadata": {}, 1251 | "outputs": [], 1252 | "source": [ 1253 | "cx=ax.sort_values('Stream',ascending=False).head(10)" 1254 | ] 1255 | }, 1256 | { 1257 | "cell_type": "code", 1258 | "execution_count": null, 1259 | "id": "e94afb99", 1260 | "metadata": {}, 1261 | "outputs": [], 1262 | "source": [ 1263 | "df.groupby('Artist')['Stream'].agg('sum').head(10)" 1264 | ] 1265 | }, 1266 | { 1267 | "cell_type": "code", 1268 | "execution_count": null, 1269 | "id": "e28fc3ca", 1270 | "metadata": {}, 1271 | "outputs": [], 1272 | "source": [ 1273 | "sns.barplot(data=cx,y='Stream',x='Artist')\n", 1274 | "plt.xticks(rotation=80)\n", 1275 | "plt.title('Top 10 streamers')\n", 1276 | "plt.show()" 1277 | ] 1278 | }, 1279 | { 1280 | "cell_type": "markdown", 1281 | "id": "32a094cd", 1282 | "metadata": {}, 1283 | "source": [ 1284 | "# who is the most commented artist on youtube" 1285 | ] 1286 | }, 1287 | { 1288 | "cell_type": "code", 1289 | "execution_count": null, 1290 | "id": "838f0ed1", 1291 | "metadata": {}, 1292 | "outputs": [], 1293 | "source": [ 1294 | "ax=df.groupby('Artist')['Comments'].sum().reset_index().sort_values(by='Comments',ascending=False).head(10)\n", 1295 | "ax" 1296 | ] 1297 | }, 1298 | { 1299 | "cell_type": "code", 1300 | "execution_count": null, 1301 | "id": "4b56106e", 1302 | "metadata": {}, 1303 | "outputs": [], 1304 | "source": [ 1305 | "tc=df.groupby('Track').agg({'Views':'sum','Comments':'sum','Likes':'sum'}).reset_index()\n", 1306 | "bv=tc.sort_values('Views',ascending=False).head(10)\n", 1307 | "bv" 1308 | ] 1309 | }, 1310 | { 1311 | "cell_type": "code", 1312 | "execution_count": null, 1313 | "id": "9e6eded9", 1314 | "metadata": {}, 1315 | "outputs": [], 1316 | "source": [ 1317 | "plt.barh(bv['Track'],bv['Views'],color='b')\n", 1318 | "plt.title('Top 10 most Viewed tracks')\n", 1319 | "plt.show()" 1320 | ] 1321 | }, 1322 | { 1323 | "cell_type": "markdown", 1324 | "id": "5e29d360", 1325 | "metadata": {}, 1326 | "source": [ 1327 | "# determine most commented song on youtube" 1328 | ] 1329 | }, 1330 | { 1331 | "cell_type": "code", 1332 | "execution_count": null, 1333 | "id": "503adcb2", 1334 | "metadata": {}, 1335 | "outputs": [], 1336 | "source": [ 1337 | "av=tc.sort_values('Comments',ascending=False).head(10)\n", 1338 | "av" 1339 | ] 1340 | }, 1341 | { 1342 | "cell_type": "code", 1343 | "execution_count": null, 1344 | "id": "acc0d51c", 1345 | "metadata": {}, 1346 | "outputs": [], 1347 | "source": [ 1348 | "plt.barh(av['Track'],av['Comments'])\n", 1349 | "plt.title('Top 10 most commented Tracks')\n", 1350 | "plt.show()\n" 1351 | ] 1352 | }, 1353 | { 1354 | "cell_type": "markdown", 1355 | "id": "f0e974fd", 1356 | "metadata": {}, 1357 | "source": [ 1358 | "# most liked song on youtube or spotify" 1359 | ] 1360 | }, 1361 | { 1362 | "cell_type": "code", 1363 | "execution_count": null, 1364 | "id": "ff33fdff", 1365 | "metadata": {}, 1366 | "outputs": [], 1367 | "source": [ 1368 | "sn=tc.sort_values('Likes',ascending=False).head(10)\n", 1369 | "sn" 1370 | ] 1371 | }, 1372 | { 1373 | "cell_type": "code", 1374 | "execution_count": null, 1375 | "id": "e4bd6887", 1376 | "metadata": {}, 1377 | "outputs": [], 1378 | "source": [ 1379 | "plt.barh(sn['Track'],sn['Likes'],color='r')\n", 1380 | "plt.title('Top 10 most Liked tracks')\n", 1381 | "plt.show()" 1382 | ] 1383 | }, 1384 | { 1385 | "cell_type": "markdown", 1386 | "id": "197558cf", 1387 | "metadata": {}, 1388 | "source": [ 1389 | "# most viewed song relatiship with stream" 1390 | ] 1391 | }, 1392 | { 1393 | "cell_type": "code", 1394 | "execution_count": null, 1395 | "id": "fe3a6b35", 1396 | "metadata": {}, 1397 | "outputs": [], 1398 | "source": [ 1399 | "df.groupby('Track').agg({'Views':'sum','Stream':'sum'}).reset_index().sort_values(by='Views' ,ascending=False).head(10)\n" 1400 | ] 1401 | }, 1402 | { 1403 | "cell_type": "markdown", 1404 | "id": "864ecaea", 1405 | "metadata": {}, 1406 | "source": [ 1407 | "# which is the most viewed album type on youtube" 1408 | ] 1409 | }, 1410 | { 1411 | "cell_type": "code", 1412 | "execution_count": null, 1413 | "id": "2d9b6b49", 1414 | "metadata": {}, 1415 | "outputs": [], 1416 | "source": [ 1417 | "ac=df.groupby(['Album_type'])['Views'].sum().head()\n", 1418 | "ac" 1419 | ] 1420 | }, 1421 | { 1422 | "cell_type": "markdown", 1423 | "id": "f56d74d0", 1424 | "metadata": {}, 1425 | "source": [ 1426 | "# which album type is getting more views" 1427 | ] 1428 | }, 1429 | { 1430 | "cell_type": "code", 1431 | "execution_count": null, 1432 | "id": "9cf30f88", 1433 | "metadata": {}, 1434 | "outputs": [], 1435 | "source": [ 1436 | "gp=df.groupby('Album_type')['Views'].sum().reset_index()\n", 1437 | "sns.set(style=\"whitegrid\")\n", 1438 | "plt.pie(data=gp,x='Views',labels='Album_type',autopct='%1.0f%%')\n", 1439 | "plt.title('Album Views by Types')\n", 1440 | "plt.show()" 1441 | ] 1442 | }, 1443 | { 1444 | "cell_type": "markdown", 1445 | "id": "163c2fe8", 1446 | "metadata": {}, 1447 | "source": [ 1448 | "# Top 10 licensed album on youtube & spotify\n" 1449 | ] 1450 | }, 1451 | { 1452 | "cell_type": "code", 1453 | "execution_count": null, 1454 | "id": "916b5dfa", 1455 | "metadata": {}, 1456 | "outputs": [], 1457 | "source": [ 1458 | "al=df[df['Licensed']==1]\n", 1459 | "la=al['Album'].value_counts()[:10]\n", 1460 | "plt.pie(la,autopct='%.2f%%',labels=la.index)\n", 1461 | "plt.show()" 1462 | ] 1463 | }, 1464 | { 1465 | "cell_type": "code", 1466 | "execution_count": null, 1467 | "id": "32e7ed62", 1468 | "metadata": {}, 1469 | "outputs": [], 1470 | "source": [] 1471 | } 1472 | ], 1473 | "metadata": { 1474 | "kernelspec": { 1475 | "display_name": "Python 3 (ipykernel)", 1476 | "language": "python", 1477 | "name": "python3" 1478 | }, 1479 | "language_info": { 1480 | "codemirror_mode": { 1481 | "name": "ipython", 1482 | "version": 3 1483 | }, 1484 | "file_extension": ".py", 1485 | "mimetype": "text/x-python", 1486 | "name": "python", 1487 | "nbconvert_exporter": "python", 1488 | "pygments_lexer": "ipython3", 1489 | "version": "3.10.9" 1490 | } 1491 | }, 1492 | "nbformat": 4, 1493 | "nbformat_minor": 5 1494 | } 1495 | --------------------------------------------------------------------------------