├── 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 | " Unnamed: 0 | \n",
55 | " Artist | \n",
56 | " Url_spotify | \n",
57 | " Track | \n",
58 | " Album | \n",
59 | " Album_type | \n",
60 | " Uri | \n",
61 | " Danceability | \n",
62 | " Energy | \n",
63 | " Key | \n",
64 | " ... | \n",
65 | " Url_youtube | \n",
66 | " Title | \n",
67 | " Channel | \n",
68 | " Views | \n",
69 | " Likes | \n",
70 | " Comments | \n",
71 | " Description | \n",
72 | " Licensed | \n",
73 | " official_video | \n",
74 | " Stream | \n",
75 | "
\n",
76 | " \n",
77 | " \n",
78 | " \n",
79 | " | 0 | \n",
80 | " 0 | \n",
81 | " Gorillaz | \n",
82 | " https://open.spotify.com/artist/3AA28KZvwAUcZu... | \n",
83 | " Feel Good Inc. | \n",
84 | " Demon Days | \n",
85 | " album | \n",
86 | " spotify:track:0d28khcov6AiegSCpG5TuT | \n",
87 | " 0.818 | \n",
88 | " 0.705 | \n",
89 | " 6.0 | \n",
90 | " ... | \n",
91 | " https://www.youtube.com/watch?v=HyHNuVaZJ-k | \n",
92 | " Gorillaz - Feel Good Inc. (Official Video) | \n",
93 | " Gorillaz | \n",
94 | " 693555221.0 | \n",
95 | " 6220896.0 | \n",
96 | " 169907.0 | \n",
97 | " Official HD Video for Gorillaz' fantastic trac... | \n",
98 | " True | \n",
99 | " True | \n",
100 | " 1.040235e+09 | \n",
101 | "
\n",
102 | " \n",
103 | " | 1 | \n",
104 | " 1 | \n",
105 | " Gorillaz | \n",
106 | " https://open.spotify.com/artist/3AA28KZvwAUcZu... | \n",
107 | " Rhinestone Eyes | \n",
108 | " Plastic Beach | \n",
109 | " album | \n",
110 | " spotify:track:1foMv2HQwfQ2vntFf9HFeG | \n",
111 | " 0.676 | \n",
112 | " 0.703 | \n",
113 | " 8.0 | \n",
114 | " ... | \n",
115 | " https://www.youtube.com/watch?v=yYDmaexVHic | \n",
116 | " Gorillaz - Rhinestone Eyes [Storyboard Film] (... | \n",
117 | " Gorillaz | \n",
118 | " 72011645.0 | \n",
119 | " 1079128.0 | \n",
120 | " 31003.0 | \n",
121 | " The official video for Gorillaz - Rhinestone E... | \n",
122 | " True | \n",
123 | " True | \n",
124 | " 3.100837e+08 | \n",
125 | "
\n",
126 | " \n",
127 | " | 2 | \n",
128 | " 2 | \n",
129 | " Gorillaz | \n",
130 | " https://open.spotify.com/artist/3AA28KZvwAUcZu... | \n",
131 | " New Gold (feat. Tame Impala and Bootie Brown) | \n",
132 | " New Gold (feat. Tame Impala and Bootie Brown) | \n",
133 | " single | \n",
134 | " spotify:track:64dLd6rVqDLtkXFYrEUHIU | \n",
135 | " 0.695 | \n",
136 | " 0.923 | \n",
137 | " 1.0 | \n",
138 | " ... | \n",
139 | " https://www.youtube.com/watch?v=qJa-VFwPpYA | \n",
140 | " Gorillaz - New Gold ft. Tame Impala & Bootie B... | \n",
141 | " Gorillaz | \n",
142 | " 8435055.0 | \n",
143 | " 282142.0 | \n",
144 | " 7399.0 | \n",
145 | " Gorillaz - New Gold ft. Tame Impala & Bootie B... | \n",
146 | " True | \n",
147 | " True | \n",
148 | " 6.306347e+07 | \n",
149 | "
\n",
150 | " \n",
151 | " | 3 | \n",
152 | " 3 | \n",
153 | " Gorillaz | \n",
154 | " https://open.spotify.com/artist/3AA28KZvwAUcZu... | \n",
155 | " On Melancholy Hill | \n",
156 | " Plastic Beach | \n",
157 | " album | \n",
158 | " spotify:track:0q6LuUqGLUiCPP1cbdwFs3 | \n",
159 | " 0.689 | \n",
160 | " 0.739 | \n",
161 | " 2.0 | \n",
162 | " ... | \n",
163 | " https://www.youtube.com/watch?v=04mfKJWDSzI | \n",
164 | " Gorillaz - On Melancholy Hill (Official Video) | \n",
165 | " Gorillaz | \n",
166 | " 211754952.0 | \n",
167 | " 1788577.0 | \n",
168 | " 55229.0 | \n",
169 | " Follow Gorillaz online:\\nhttp://gorillaz.com \\... | \n",
170 | " True | \n",
171 | " True | \n",
172 | " 4.346636e+08 | \n",
173 | "
\n",
174 | " \n",
175 | " | 4 | \n",
176 | " 4 | \n",
177 | " Gorillaz | \n",
178 | " https://open.spotify.com/artist/3AA28KZvwAUcZu... | \n",
179 | " Clint Eastwood | \n",
180 | " Gorillaz | \n",
181 | " album | \n",
182 | " spotify:track:7yMiX7n9SBvadzox8T5jzT | \n",
183 | " 0.663 | \n",
184 | " 0.694 | \n",
185 | " 10.0 | \n",
186 | " ... | \n",
187 | " https://www.youtube.com/watch?v=1V_xRb0x9aw | \n",
188 | " Gorillaz - Clint Eastwood (Official Video) | \n",
189 | " Gorillaz | \n",
190 | " 618480958.0 | \n",
191 | " 6197318.0 | \n",
192 | " 155930.0 | \n",
193 | " The official music video for Gorillaz - Clint ... | \n",
194 | " True | \n",
195 | " True | \n",
196 | " 6.172597e+08 | \n",
197 | "
\n",
198 | " \n",
199 | "
\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 | " Artist | \n",
609 | " Track | \n",
610 | " Album | \n",
611 | " Album_type | \n",
612 | " Danceability | \n",
613 | " Energy | \n",
614 | " Key | \n",
615 | " Loudness | \n",
616 | " Speechiness | \n",
617 | " Acousticness | \n",
618 | " ... | \n",
619 | " Tempo | \n",
620 | " Duration_ms | \n",
621 | " Channel | \n",
622 | " Views | \n",
623 | " Likes | \n",
624 | " Comments | \n",
625 | " Description | \n",
626 | " Licensed | \n",
627 | " official_video | \n",
628 | " Stream | \n",
629 | "
\n",
630 | " \n",
631 | " \n",
632 | " \n",
633 | " | 0 | \n",
634 | " Gorillaz | \n",
635 | " Feel Good Inc. | \n",
636 | " Demon Days | \n",
637 | " album | \n",
638 | " 0.818 | \n",
639 | " 0.705 | \n",
640 | " 6.0 | \n",
641 | " -6.679 | \n",
642 | " 0.1770 | \n",
643 | " 0.008360 | \n",
644 | " ... | \n",
645 | " 138.559 | \n",
646 | " 222640.0 | \n",
647 | " Gorillaz | \n",
648 | " 693555221 | \n",
649 | " 6220896 | \n",
650 | " 169907 | \n",
651 | " Official HD Video for Gorillaz' fantastic trac... | \n",
652 | " True | \n",
653 | " True | \n",
654 | " 1.040235e+09 | \n",
655 | "
\n",
656 | " \n",
657 | " | 1 | \n",
658 | " Gorillaz | \n",
659 | " Rhinestone Eyes | \n",
660 | " Plastic Beach | \n",
661 | " album | \n",
662 | " 0.676 | \n",
663 | " 0.703 | \n",
664 | " 8.0 | \n",
665 | " -5.815 | \n",
666 | " 0.0302 | \n",
667 | " 0.086900 | \n",
668 | " ... | \n",
669 | " 92.761 | \n",
670 | " 200173.0 | \n",
671 | " Gorillaz | \n",
672 | " 72011645 | \n",
673 | " 1079128 | \n",
674 | " 31003 | \n",
675 | " The official video for Gorillaz - Rhinestone E... | \n",
676 | " True | \n",
677 | " True | \n",
678 | " 3.100837e+08 | \n",
679 | "
\n",
680 | " \n",
681 | " | 2 | \n",
682 | " Gorillaz | \n",
683 | " New Gold (feat. Tame Impala and Bootie Brown) | \n",
684 | " New Gold (feat. Tame Impala and Bootie Brown) | \n",
685 | " single | \n",
686 | " 0.695 | \n",
687 | " 0.923 | \n",
688 | " 1.0 | \n",
689 | " -3.930 | \n",
690 | " 0.0522 | \n",
691 | " 0.042500 | \n",
692 | " ... | \n",
693 | " 108.014 | \n",
694 | " 215150.0 | \n",
695 | " Gorillaz | \n",
696 | " 8435055 | \n",
697 | " 282142 | \n",
698 | " 7399 | \n",
699 | " Gorillaz - New Gold ft. Tame Impala & Bootie B... | \n",
700 | " True | \n",
701 | " True | \n",
702 | " 6.306347e+07 | \n",
703 | "
\n",
704 | " \n",
705 | " | 3 | \n",
706 | " Gorillaz | \n",
707 | " On Melancholy Hill | \n",
708 | " Plastic Beach | \n",
709 | " album | \n",
710 | " 0.689 | \n",
711 | " 0.739 | \n",
712 | " 2.0 | \n",
713 | " -5.810 | \n",
714 | " 0.0260 | \n",
715 | " 0.000015 | \n",
716 | " ... | \n",
717 | " 120.423 | \n",
718 | " 233867.0 | \n",
719 | " Gorillaz | \n",
720 | " 211754952 | \n",
721 | " 1788577 | \n",
722 | " 55229 | \n",
723 | " Follow Gorillaz online:\\nhttp://gorillaz.com \\... | \n",
724 | " True | \n",
725 | " True | \n",
726 | " 4.346636e+08 | \n",
727 | "
\n",
728 | " \n",
729 | " | 4 | \n",
730 | " Gorillaz | \n",
731 | " Clint Eastwood | \n",
732 | " Gorillaz | \n",
733 | " album | \n",
734 | " 0.663 | \n",
735 | " 0.694 | \n",
736 | " 10.0 | \n",
737 | " -8.627 | \n",
738 | " 0.1710 | \n",
739 | " 0.025300 | \n",
740 | " ... | \n",
741 | " 167.953 | \n",
742 | " 340920.0 | \n",
743 | " Gorillaz | \n",
744 | " 618480958 | \n",
745 | " 6197318 | \n",
746 | " 155930 | \n",
747 | " The official music video for Gorillaz - Clint ... | \n",
748 | " True | \n",
749 | " True | \n",
750 | " 6.172597e+08 | \n",
751 | "
\n",
752 | " \n",
753 | "
\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 | " Artist | \n",
840 | " Views | \n",
841 | "
\n",
842 | " \n",
843 | " \n",
844 | " \n",
845 | " | 263 | \n",
846 | " Bruno Mars | \n",
847 | " 10231841530 | \n",
848 | "
\n",
849 | " \n",
850 | " | 1163 | \n",
851 | " Macklemore & Ryan Lewis | \n",
852 | " 10122055560 | \n",
853 | "
\n",
854 | " \n",
855 | " | 375 | \n",
856 | " Coldplay | \n",
857 | " 9997277884 | \n",
858 | "
\n",
859 | " \n",
860 | " | 149 | \n",
861 | " BLACKPINK | \n",
862 | " 9392961989 | \n",
863 | "
\n",
864 | " \n",
865 | " | 780 | \n",
866 | " J Balvin | \n",
867 | " 8464877693 | \n",
868 | "
\n",
869 | " \n",
870 | " | 1347 | \n",
871 | " Nicki Minaj | \n",
872 | " 8017064073 | \n",
873 | "
\n",
874 | " \n",
875 | " | 512 | \n",
876 | " Earth, Wind & Fire | \n",
877 | " 6414076580 | \n",
878 | "
\n",
879 | " \n",
880 | " | 1470 | \n",
881 | " Post Malone | \n",
882 | " 6394420209 | \n",
883 | "
\n",
884 | " \n",
885 | " | 1390 | \n",
886 | " One Direction | \n",
887 | " 6337601549 | \n",
888 | "
\n",
889 | " \n",
890 | " | 1349 | \n",
891 | " Nicky Jam | \n",
892 | " 6321868119 | \n",
893 | "
\n",
894 | " \n",
895 | "
\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 | " Artist | \n",
950 | " Track | \n",
951 | " Album | \n",
952 | " Album_type | \n",
953 | " Danceability | \n",
954 | " Energy | \n",
955 | " Key | \n",
956 | " Loudness | \n",
957 | " Speechiness | \n",
958 | " Acousticness | \n",
959 | " ... | \n",
960 | " Tempo | \n",
961 | " Duration_ms | \n",
962 | " Channel | \n",
963 | " Views | \n",
964 | " Likes | \n",
965 | " Comments | \n",
966 | " Description | \n",
967 | " Licensed | \n",
968 | " official_video | \n",
969 | " Stream | \n",
970 | "
\n",
971 | " \n",
972 | " \n",
973 | " \n",
974 | " | 0 | \n",
975 | " Gorillaz | \n",
976 | " Feel Good Inc. | \n",
977 | " Demon Days | \n",
978 | " album | \n",
979 | " 0.818 | \n",
980 | " 0.705 | \n",
981 | " 6.0 | \n",
982 | " -6.679 | \n",
983 | " 0.1770 | \n",
984 | " 0.008360 | \n",
985 | " ... | \n",
986 | " 138.559 | \n",
987 | " 222640.0 | \n",
988 | " Gorillaz | \n",
989 | " 693555221 | \n",
990 | " 6220896 | \n",
991 | " 169907 | \n",
992 | " Official HD Video for Gorillaz' fantastic trac... | \n",
993 | " True | \n",
994 | " True | \n",
995 | " 1.040235e+09 | \n",
996 | "
\n",
997 | " \n",
998 | " | 1 | \n",
999 | " Gorillaz | \n",
1000 | " Rhinestone Eyes | \n",
1001 | " Plastic Beach | \n",
1002 | " album | \n",
1003 | " 0.676 | \n",
1004 | " 0.703 | \n",
1005 | " 8.0 | \n",
1006 | " -5.815 | \n",
1007 | " 0.0302 | \n",
1008 | " 0.086900 | \n",
1009 | " ... | \n",
1010 | " 92.761 | \n",
1011 | " 200173.0 | \n",
1012 | " Gorillaz | \n",
1013 | " 72011645 | \n",
1014 | " 1079128 | \n",
1015 | " 31003 | \n",
1016 | " The official video for Gorillaz - Rhinestone E... | \n",
1017 | " True | \n",
1018 | " True | \n",
1019 | " 3.100837e+08 | \n",
1020 | "
\n",
1021 | " \n",
1022 | " | 2 | \n",
1023 | " Gorillaz | \n",
1024 | " New Gold (feat. Tame Impala and Bootie Brown) | \n",
1025 | " New Gold (feat. Tame Impala and Bootie Brown) | \n",
1026 | " single | \n",
1027 | " 0.695 | \n",
1028 | " 0.923 | \n",
1029 | " 1.0 | \n",
1030 | " -3.930 | \n",
1031 | " 0.0522 | \n",
1032 | " 0.042500 | \n",
1033 | " ... | \n",
1034 | " 108.014 | \n",
1035 | " 215150.0 | \n",
1036 | " Gorillaz | \n",
1037 | " 8435055 | \n",
1038 | " 282142 | \n",
1039 | " 7399 | \n",
1040 | " Gorillaz - New Gold ft. Tame Impala & Bootie B... | \n",
1041 | " True | \n",
1042 | " True | \n",
1043 | " 6.306347e+07 | \n",
1044 | "
\n",
1045 | " \n",
1046 | " | 3 | \n",
1047 | " Gorillaz | \n",
1048 | " On Melancholy Hill | \n",
1049 | " Plastic Beach | \n",
1050 | " album | \n",
1051 | " 0.689 | \n",
1052 | " 0.739 | \n",
1053 | " 2.0 | \n",
1054 | " -5.810 | \n",
1055 | " 0.0260 | \n",
1056 | " 0.000015 | \n",
1057 | " ... | \n",
1058 | " 120.423 | \n",
1059 | " 233867.0 | \n",
1060 | " Gorillaz | \n",
1061 | " 211754952 | \n",
1062 | " 1788577 | \n",
1063 | " 55229 | \n",
1064 | " Follow Gorillaz online:\\nhttp://gorillaz.com \\... | \n",
1065 | " True | \n",
1066 | " True | \n",
1067 | " 4.346636e+08 | \n",
1068 | "
\n",
1069 | " \n",
1070 | " | 4 | \n",
1071 | " Gorillaz | \n",
1072 | " Clint Eastwood | \n",
1073 | " Gorillaz | \n",
1074 | " album | \n",
1075 | " 0.663 | \n",
1076 | " 0.694 | \n",
1077 | " 10.0 | \n",
1078 | " -8.627 | \n",
1079 | " 0.1710 | \n",
1080 | " 0.025300 | \n",
1081 | " ... | \n",
1082 | " 167.953 | \n",
1083 | " 340920.0 | \n",
1084 | " Gorillaz | \n",
1085 | " 618480958 | \n",
1086 | " 6197318 | \n",
1087 | " 155930 | \n",
1088 | " The official music video for Gorillaz - Clint ... | \n",
1089 | " True | \n",
1090 | " True | \n",
1091 | " 6.172597e+08 | \n",
1092 | "
\n",
1093 | " \n",
1094 | "
\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 |
--------------------------------------------------------------------------------