Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

2019 spotify top 50

Introductie

Gegeven is een dataset die als muziek in de oren zal klinken, de top 50 van Spotify van 2023 (top_50_2023.csv). In deze opdracht ga je leren om de data in te lezen. Vervolgens ga je bewerkingen maken met streams en lambda expressies.

Leerdoelen:

  • File I/O
  • ArrayList
  • Streams en lambda expressies
  • Unit testen schrijven
  • Maven gebruiken voor dependencies

Probleemstelling

Het csv bestand bestaat uit een 50 lijnen met telkens dezelfde opbouw, de eerste regel van het bestand bevat de kolomnamen:

 artist_name;track_name;is_explicit;album_release_date;genres;danceability;valence;energy;loudness;acousticness;instrumentalness;liveness;speechiness;key;tempo;mode;duration_ms;time_signature;popularity
FieldDescription
track_nameThe track name
artist_nameThe artist name
is_explicitIndicates whether the track contains explicit content
album_release_dateThe date when the track was released
genresA list of genres associated with the track's artist(s)
danceabilityA measure from 0.0 to 1.0 indicating how suitable a track is for dancing
valenceA measure from 0.0 to 1.0 describing the musical positiveness conveyed by a track
energyA measure from 0.0 to 1.0 that represents a perceptual measure of intensity and activity
loudnessThe overall loudness of a track in decibels (dB)
acousticnessA measure from 0.0 to 1.0 indicating the likelihood of the track being acoustic
instrumentalnessPredicts whether a track contains no vocals
livenessDetects the presence of an audience in the recording
speechinessDetects the presence of spoken words in a track
keyThe key the track is in
tempoThe overall estimated tempo of a track in beats per minute (BPM)
modeThe modality of the track
duration_msThe length of the track in milliseconds
time_signatureAn estimated overall time signature of a track
popularityA score between 0 and 100, with 100 being the most popular

Gegeven

De klasse SpotifyRecord.

Taak 1

Vervolledig de helper-klasse SpotifyRecordMapper met de static methode mapDataToSpotifyRecord om de data van één spotify record uit het bestand om te vormen naar een SpotifyRecord-object. Indien een fout optreedt tijdens het inlezen van een record, dan gooi je een unchecked InvalidSpotifyRecordException. Schrijf unit testen om te controleren of de methode correct werkt.

Taak 2

Vervolledig de klasse SpotifyReader. Implementeer de methode loadSpotifyRecords. Hou hierbij rekening met de volgende richtlijnen:

  • Gebruik de static methode mapDataToSpotifyRecord in de klasse SpotifyRecordMapper om de data van een spotify record uit het bestand om te vormen naar een SpotifyRecord-object.
  • Alle SpotifyRecord-objecten worden in een List opgeslagen die wordt teruggegeven als resultaat.
  • De inlees-methode van de SpotifyReader klasse heeft als argumenten het Path naar de te lezen file.
  • Als bij het aanroepen van de SpotifyRecordMapper een exception wordt opgegooid omdat een lijn niet ingelezen kan worden door ontbrekende data, dan zorg je dat de SpotifyReader de foutboodschap met System.err.println() afdrukt en je garandeert dat de SpotifyReader verder gaat met het inlezen van overige SpotifyRecords.

Taak 3

Vul nu in de klasse SpotifyApp de onderstaande methoden aan. In elke methode (behave getNumberOfSpotifyRecords) moet minstens één stream gebruikt worden om de oplossing te bekomen. Enkel oplossingen die door middel van een stream slagen in de unit testen worden goedgekeurd. Met behulp van de klasse SpotifyAppTest kan je je implementatie testen. Je mag geen wijzigingen aanbrengen in het bestand top50spotify2019.csv en de testklasse SpotifyAppTest. In de constructor van de klasse SpotifyApp gebruik je eerst de SpotifyReader om het bestand top_50_2023.csv in te lezen. De ingelezen SpotifyRecords worden toegekend aan een instantievariabele van de klasse SpotifyApp.

  1. int getNumberOfSpotifyRecords()

    Geef het aantal spotify records in de lijst. Hiervoor gebruik je geen stream!

  2. List getTop5ArtistsWithHighestPopularity()

    Geef een lijst terug met de namen van de artiesten van de 5 populairste spotify records. (Je mag ervan uitgaan dat het 5 verschillende namen zijn.)

  3. int getNumberOfUniqueArtists()

    Hoeveel unieke namen van artiesten zijn er in de lijst?

  4. List getSpotifyRecordsByArtist(String artistName)

    Geen voor de gegeven artiest alle SpotifyRecords uit de lijst.

  5. SpotifyRecord getMostDanceableSpotifyRecord()

    Welke SpotifyRecord heeft de hoogste waarde voor danceability?

  6. String getDanceableGenres()

    Geef de verschillende genres terug met een danceability groter of gelijk aan 0.8 in een String. De namen van de genres moeten gescheiden zijn door een komma en mogen geen dubbels bevatten.

  7. int getMaxDuration()

    Wat is de langste duur van een SpotifyRecord?

  8. int getAverageLength() Wat is de gemiddelde duur van een SpotifyRecord?

  9. Genre getMostPopularGenre() Geef het genre dat het meeste voorkomt. Met andere woorden, van welk genre zijn er het meeste SpotifyRecords?

  10. int getNumberOfReleases(Month month) Geef het aantal SpotifyRecords dat is uitgekomen in de opgegeven maand.

Je kan de verschillende implementaties testen met de testklasse SpotifyAppTest.

Taak 4

Tenslotte implementeer je een methode saveToFile in de klasse SpotifyApp. De methode saveToFile heeft 1 parameter: een lijst van SpotifyRecords.

In de klasse SpotifyAppRunner gebruik je de methode saveToFile om de SpotifyRecords van Taylor Swift (zie variabele records) weg te schrijven naar het bestand taylor.txt in de resources-folder.

Taak 5

Het hoofdprogramma is gegeven, maar het wegschrijven van de titels van de records van Taylor Swift ontbreekt nog in de code. Voeg deze functionaliteit nog toe.

Output

Wanneer je het hoofdprogramma in de klasse SpotifyAppRunner uitvoert zou je de onderstaande output moeten krijgen.

Error parsing spotify record [Tom Odell;Another Love;True;2013-06-24;['pop'];0.445;0.131;0.537;0.04;4;122.769;0;244360;4;72]
Error parsing spotify record [SZA;Snooze;True;2022-12-09;['pop', 'r&b', 'rap'];0.559;0.392;verkeerde;data;0.141;0.0;0.11;0.132;5;143.008;1;201800;4;93]
** Number of spotify records: 50
** Number of unique artists: 41
** Songs by Taylor Swift saved to file.
** Top 5 artists: Taylor Swift
Arctic Monkeys
Harry Styles
The Weeknd
Olivia Rodrigo
** Most popular genre: POP
** Danceable genres: REGGAETON,POP,HIP_HOP,DANCE_POP,K_POP
** Max duration: 272373
** Average duration: 200458.1
** Number of releases in April: 5
** Most danceable: SpotifyRecord{trackName='Me Porto Bonito', artistName='Bad Bunny', popularity=89}

About

mission-2-spotify-custersnele created by GitHub Classroom

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages