{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e94ddbe9-512a-4393-bb8e-2c645ceec583",
   "metadata": {},
   "outputs": [],
   "source": [
    "import spotify"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6af19f7-61f1-44a0-87aa-568799d430c9",
   "metadata": {},
   "source": [
    "# Hausarbeit DataScience\n",
    "\n",
    "Namen:\n",
    "\n",
    "  - Christian Bockermann, MatrikelNr: 123456"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f394cf90-3916-4574-9bc3-4c0bc704056d",
   "metadata": {},
   "source": [
    "# Aufgabe 1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ea032af-5a54-4f3f-bdb1-798a4d39e3a9",
   "metadata": {},
   "source": [
    "#### 1.1 Funktion musiker(xs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d96d78f7-cd4c-4207-a2eb-7a2027c50d00",
   "metadata": {},
   "outputs": [],
   "source": [
    "songs = spotify.songList()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0f813d1c-b810-431e-bc89-37083e99d161",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(\"I'm an Albatraoz\", \"I'm an Albatraoz\", 'AronChupa', 166848)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8fb9e3bb-d92d-4485-8d6a-d1be16664da9",
   "metadata": {},
   "outputs": [],
   "source": [
    "def musiker(xs):\n",
    "    ergebnis = []\n",
    "    for song in xs:\n",
    "        name = song[2]\n",
    "        ergebnis.append(name)\n",
    "    return set(ergebnis)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9f83f0c3-294a-4cb7-9de1-9f54e10c1807",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Alesso',\n",
       " 'American Authors',\n",
       " 'AronChupa',\n",
       " 'Fall Out Boy',\n",
       " 'Imagine Dragons',\n",
       " 'Lorde',\n",
       " 'The Script'}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "musiker(songs[:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4b8aa3f-930f-4ede-8f76-093d0b7c0b36",
   "metadata": {},
   "source": [
    "#### 1.2 Funktion songsVonMusiker(xs, musiker)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b37eef03-92d2-472a-b80d-236942b03b98",
   "metadata": {},
   "outputs": [],
   "source": [
    "def songsVonMusiker(xs, musiker):\n",
    "    ergebnis = []\n",
    "    for song in xs:\n",
    "        musiker_name = song[2]\n",
    "        if musiker_name == musiker:\n",
    "            ergebnis.append(song)\n",
    "    return ergebnis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "3c7f2173-047e-47a0-95f2-115e88455012",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('Black Hole Sun', 'Superunknown', 'Soundgarden', 318000),\n",
       " ('Blow Up The Outside World', 'Down On The Upside', 'Soundgarden', 345773),\n",
       " ('Fell On Black Days', 'Superunknown', 'Soundgarden', 281800),\n",
       " ('The Day I Tried To Live', 'Superunknown', 'Soundgarden', 319533),\n",
       " ('Outshined', 'Badmotorfinger', 'Soundgarden', 311000),\n",
       " ('Rusty Cage', 'Badmotorfinger', 'Soundgarden', 266200),\n",
       " ('Spoonman', 'Superunknown', 'Soundgarden', 246373),\n",
       " ('Burden In My Hand', 'Down On The Upside', 'Soundgarden', 290066),\n",
       " ('Live To Rise', 'Live To Rise', 'Soundgarden', 280653),\n",
       " ('Been Away Too Long', 'King Animal', 'Soundgarden', 216213)]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songsVonMusiker(songs, \"Soundgarden\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d960a998-3c0a-4686-a840-e28826a1fee2",
   "metadata": {},
   "source": [
    "#### Funktions anzahlNachMusiker\n",
    "\n",
    "Idee:\n",
    "   - für jeden Musiker:\n",
    "   - songs auswählen und anzahl berechnen"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "1d5f3e62-5893-4909-bea8-52a8440c4789",
   "metadata": {},
   "outputs": [],
   "source": [
    "def anzahlNachMusiker(xs):\n",
    "    ergebnis = []\n",
    "\n",
    "    for musikerName in musiker(xs):\n",
    "        songs = songsVonMusiker(xs, musikerName)\n",
    "        anzahl = len(songs)\n",
    "        tupel = (musikerName, anzahl)\n",
    "        ergebnis.append(tupel)\n",
    "    return ergebnis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "2da1bcb1-da9d-41ac-8eac-f92e0cf909b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('AronChupa', 2), ('Lorde', 3)]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "anzahlNachMusiker(songs[:5])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e8c89ac-09e2-451f-bcb4-9ce1ea43ef43",
   "metadata": {},
   "source": [
    "# Aufgabe 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ac24bf29-5cb3-4e1c-97a6-f2f2bd0bbdbc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "7057f6d6-86af-4cb6-99de-d5ddda616949",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('https://data.hsbo.de/music-streams.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2732e64b-77d5-4b4e-b17e-a4629b8d5979",
   "metadata": {},
   "source": [
    "#### Wie ist die Anzahl der User, Songs und Streams?\n",
    "\n",
    "Die Anzahl der User ist die anzahl der eindeutigen Werte in der User-Spalte, Anzahl der Songs entsprechend der SongID Spalte.\n",
    "\n",
    "In der Tabelle entspricht jede Zeile einem Stream."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "04e3f865-ce16-4435-81c2-10a496bb76dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User</th>\n",
       "      <th>SongID</th>\n",
       "      <th>Date</th>\n",
       "      <th>HourOfDay</th>\n",
       "      <th>Skip1</th>\n",
       "      <th>Skip2</th>\n",
       "      <th>Skip3</th>\n",
       "      <th>NotSkipped</th>\n",
       "      <th>ReasonEnd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0479f24c</td>\n",
       "      <td>2018-07-15</td>\n",
       "      <td>16</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>trackdone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>9099cd7b</td>\n",
       "      <td>2018-07-15</td>\n",
       "      <td>16</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>trackdone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>fc5df5ba</td>\n",
       "      <td>2018-07-15</td>\n",
       "      <td>16</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>trackdone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>23cff8d6</td>\n",
       "      <td>2018-07-15</td>\n",
       "      <td>16</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>trackdone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>64f3743c</td>\n",
       "      <td>2018-07-15</td>\n",
       "      <td>16</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>trackdone</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User    SongID        Date  HourOfDay  Skip1  Skip2  Skip3  NotSkipped  \\\n",
       "0     1  0479f24c  2018-07-15         16  False  False  False        True   \n",
       "1     1  9099cd7b  2018-07-15         16  False  False  False        True   \n",
       "2     1  fc5df5ba  2018-07-15         16  False  False  False        True   \n",
       "3     1  23cff8d6  2018-07-15         16  False  False  False        True   \n",
       "4     1  64f3743c  2018-07-15         16  False  False  False        True   \n",
       "\n",
       "   ReasonEnd  \n",
       "0  trackdone  \n",
       "1  trackdone  \n",
       "2  trackdone  \n",
       "3  trackdone  \n",
       "4  trackdone  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "c8e06b28-c903-4017-bbd7-5994a3e5e32d",
   "metadata": {},
   "outputs": [],
   "source": [
    "anzahlUser = len(set(df['User']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "d8ed23ca-f5ef-4d00-b465-7e1ad5f4cbae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000\n"
     ]
    }
   ],
   "source": [
    "print(anzahlUser)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63e0500e-13ec-48fa-8b4e-343431f98e62",
   "metadata": {},
   "source": [
    "Die Funktion nunique() habe ich über google gefunden, die gibt es unter\n",
    "https://pandas.pydata.org/docs/reference/api/pandas.Series.nunique.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "e6283f77-72d1-4382-9e29-20f9ebca6cd0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10000"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['User'].nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "4219dc55-3214-4cef-a1d4-dc49116548b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "anzahlSongs = df['SongID'].nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "378b0c47-a0ad-4dbd-bd01-22690d5f43e7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "50704\n"
     ]
    }
   ],
   "source": [
    "print(anzahlSongs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "730e771b-4c20-44d9-94e1-9b62f0cd5bb8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "167880\n"
     ]
    }
   ],
   "source": [
    "anzahlStreams = len(df)\n",
    "print(anzahlStreams)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4945be9d-da3d-4e56-8eb0-fafa24febc87",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
