{"id":19883451,"url":"https://github.com/steffo99/unimore-bda-3-steffo","last_synced_at":"2026-04-16T18:03:07.971Z","repository":{"id":178006698,"uuid":"570451220","full_name":"Steffo99/unimore-bda-3-steffo","owner":"Steffo99","description":"Terza attività di Big Data Analytics ","archived":false,"fork":false,"pushed_at":"2024-05-15T02:06:13.000Z","size":3711,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-14T08:06:19.441Z","etag":null,"topics":["data-science","jupyter","matplotlib","pandas","unimore-informatica"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Steffo99.png","metadata":{"files":{"readme":"README.ipynb","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"steffo"}},"created_at":"2022-11-25T08:17:01.000Z","updated_at":"2024-05-16T22:56:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"7265ce16-1211-4c3a-9d5a-b81d2871f5d1","html_url":"https://github.com/Steffo99/unimore-bda-3-steffo","commit_stats":null,"previous_names":["steffo99/unimore-bda-3","steffo99/unimore-bda-3-steffo"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Steffo99/unimore-bda-3-steffo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Steffo99%2Funimore-bda-3-steffo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Steffo99%2Funimore-bda-3-steffo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Steffo99%2Funimore-bda-3-steffo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Steffo99%2Funimore-bda-3-steffo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Steffo99","download_url":"https://codeload.github.com/Steffo99/unimore-bda-3-steffo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Steffo99%2Funimore-bda-3-steffo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018303,"owners_count":26086333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","jupyter","matplotlib","pandas","unimore-informatica"],"created_at":"2024-11-12T17:20:20.496Z","updated_at":"2025-10-14T08:06:29.933Z","avatar_url":"https://github.com/Steffo99.png","language":"Python","funding_links":["https://ko-fi.com/steffo"],"categories":[],"sub_categories":[],"readme":"{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"\\\\[ Stefano Pigozzi | Tema Data Analytics | Big Data Analytics | A.A. 2022/2023 | Unimore \\\\]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.635561319Z\",\n     \"start_time\": \"2023-07-02T06:47:39.216048338Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Ricerca di correlazioni nell'attività online relativa a videogiochi pubblicati sulla piattaforma Steam\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"\u003e ### Data processing e exploratory data analytics su dataset provenienti da più sorgenti\\n\",\n    \"\u003e\\n\",\n    \"\u003e L’attività da svolgere consiste nel:\\n\",\n    \"\u003e\\n\",\n    \"\u003e 1. Scegliere due o più dataset provenienti da due o più sorgenti.\\n\",\n    \"\u003e     * Il dataset finale deve essere costituito almeno da due file.\\n\",\n    \"\u003e 2. Usando [pandas](https://pandas.pydata.org/) implementare le operazioni di data processing necessarie (principalmente join e selezioni) per mettere in collegamento i dataset e per preparare i dati al passo successivo\\n\",\n    \"\u003e 3. Usando pacchetti Python quali [pandas](https://pandas.pydata.org/), [scipy](https://scipy.org/), [matplotlib](https://matplotlib.org/) e [seaborn](https://seaborn.pydata.org/) implementare attività di data cleaning, exploratory data analysis estraendo dati statistici e di visualizzazione dei risultati attraverso il quale sia possibile \\\"raccontare qualcosa sui dati\\\" (storytelling), eventualmente partendo da dei quesiti di ricerca.\\n\",\n    \"\u003e    L'uso dei pacchetti non deve necessariamente essere limitato alle istruzioni viste a lezione. Le documentazioni dei pacchetti stessi e i volumi messi a disposizione su Dolly fornisco spunti d’uso interessanti!\\n\",\n    \"\u003e 4. Produrre un notebook [Jupyter](https://jupyter.org/) che contenga:\\n\",\n    \"\u003e     * una introduzione all’argomento scelto, alle sorgenti dati e agli obiettivi del progetto specificando eventualmente i quesiti di ricerca\\n\",\n    \"\u003e     * una sezione per ogni fase del progetto di data analytics\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Sinossi\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In questa relazione si ricercano correlazioni tra vari parametri relativi all'attività online riguardante vari videogiochi per PC pubblicati sulla piattaforma di distribuzione [Steam](https://store.steampowered.com/), recuperando dati da varie fonti, quali la web API di [Steam](https://store.steampowered.com/) stesso, il progetto [SteamDB](https://steamdb.info/), il catalogo prezzi [IsThereAnyDeal](https://isthereanydeal.com/), e [Google Trends](https://trends.google.com/trends/), costruendo infine un funzione con discreta correlazione con il numero di giocatori attivi in un determinato giorno.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Introduzione\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"[Steam](https://store.steampowered.com/) è una piattaforma di vendita e distribuzione videogiochi per PC creata da [Valve Corporation](https://www.valvesoftware.com/en/).\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"[Valve Corporation](https://www.valvesoftware.com/en/) pubblica quotidianamente [dati sul numero massimo di giocatori concorrenti](https://store.steampowered.com/charts/) di ciascun videogioco; questi dati vengono raccolti dal progetto indipendente [SteamDB](https://steamdb.info/), che li utilizza per mostrare la popolarità storica di ciascun prodotto.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Periodicamente, i videogiochi disponibili su [Steam](https://store.steampowered.com/) vengono scontati temporaneamente per incentivare gli utenti della piattaforma ad acquistarli; ciò in genere avviene tra le due e le cinque volte all'anno, principalmente nel periodo natalizio e attorno al solstizio di estate.\\n\",\n    \"\\n\",\n    \"Il progetto [SteamDB](https://steamdb.info/) monitora quotidianamente i prezzi di ciascun prodotto, aggregandoli per creare uno storico complessivo dei prezzi.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"I videogiochi presenti su [Steam](https://store.steampowered.com/) possono essere anche acquistati attraverso siti di terze parti, che possono offrire prezzi o offerte diversi da quelli della piattaforma, pur sempre condividendone i servizi, come ad esempio [Humble Bundle](https://www.humblebundle.com/); il catalogo prezzi [IsThereAnyDeal](https://isthereanydeal.com/) si occupa di controllare periodicamente i prezzi su ciascun rivenditore e di aggregarli in un sito unico, creando poi uno storico globale dei prezzi migliori.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Gli sviluppatori dei videogiochi su [Steam](https://store.steampowered.com/) possono pubblicare periodicamente sulla piattaforma degli annunci relativi al proprio videogioco, tipicamente per informare i clienti della disponibilità di una nuova release.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Gli annunci pubblicati da ciascun prodotto sono recuperabili attraverso chiamate ad una [web API](https://developer.valvesoftware.com/wiki/Steam_Web_API#GetNewsForApp_.28v0002.29) pubblica.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Obiettivo dell'indagine\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"La popolarità di un videogioco è una metrica sociale, alimentata da tanti diversi fattori, che possono variare anche significativamente in base al genere in questione.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si ipotizza che uno di questi fattori sia la presenza di sconti, in quanto si è empiricamente notato che il numero di giocatori sembra aumentare in presenza di essi.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si ipotizza inoltre che il rilascio di nuovi contenuti porti a un picco improvviso seguito da una lenta diminuzione nel numero di giocatori concorrenti, circa corrispondente al tempo necessario per vedere le novità.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In questa indagine, si vuole provare a modellare una funzione che, utilizzando solo parametri esterni, ottenga una discreta correlazione con il numero di giocatori concorrenti di ciascun videogioco (senza ricorrere a tecniche di machine learning).\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Oggetto dell'indagine\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Recuperare grandi quantità di dati relative a un vasto numero di prodotti diversi è difficoltoso, in quanto tutte le fonti che si desidera utilizzare implementano misure per prevenire lo scraping automatizzato.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Inoltre, la moltitudine di generi di videogiochi esistenti e di stili di comunicazione adottati dagli sviluppatori può introdurre notevole rumore e rendere questo studio impossibile. \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si decide pertanto di concentrarsi esclusivamente sui prodotti con le seguenti caratteristiche:\\n\",\n    \"\\n\",\n    \"- ne è stata rilasciata la versione 1.0\\n\",\n    \"- non hanno fattori fortemente sociali come origine della loro popolarità\\n\",\n    \"    - la loro componente principale non è il multigiocatore competitivo\\n\",\n    \"- vengono scontati regolarmente\\n\",\n    \"- non abusano della funzionalità di annunci per pubblicare informazioni non riguardanti il prodotto\\n\",\n    \"- hanno venduto un numero significativo di copie\\n\",\n    \"    - hanno almeno 10000 recensioni pubblicate dai clienti\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si recupera quindi manualmente un piccolo sottoinsieme di dataset relativi a diversi prodotti con le caratteristiche indicate nella sezione precedente, descrivendo però accuratamente il metodo utilizzato per recuperare i dati in modo da poter estendere riproducibilmente la ricerca a qualsiasi altro prodotto.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"I prodotti selezionati sono:\\n\",\n    \"\\n\",\n    \"- [Deep Rock Galactic](https://steamdb.info/app/548430/)\\n\",\n    \"- [OMORI](https://steamdb.info/app/1150690/)\\n\",\n    \"- [Potion Craft: Alchemist Simulator](https://steamdb.info/app/1210320/)\\n\",\n    \"- [Untitled Goose Game](https://steamdb.info/app/837470/)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In più, al fine di mostrare quanta differenza può esserci tra un prodotto e l'altro, si recuperano anche dati relativi a questo videogioco, che non presenta le caratteristiche sopraelencate:\\n\",\n    \"\\n\",\n    \"- [Factorio](https://steamdb.info/app/427520/)\\n\",\n    \"    - non è mai stato scontato\\n\",\n    \"    - ha pubblicato per anni nella sezione annunci un diario settimanale dello sviluppo\\n\",\n    \"    - viene aggiornato regolarmente, ma solo per correzione di bug, e non per l'aggiunta di nuovi contenuti\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Struttura del progetto\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il progetto è diviso in tre parti:\\n\",\n    \"\\n\",\n    \"- la directory `data` con i dati grezzi recuperati dalla rete, con a sua volta tante sottodirectory con i dati specifici di ciascun prodotto studiato;\\n\",\n    \"- il package Python `unimore_bda_3`, contenente primitive specifiche all'elaborazione dei dati;\\n\",\n    \"- questo notebook Jupyter, contenente celle per la rappresentazione dei dati elaborati.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il package contiene un modulo particolare, `unimore_bda_3.prelude`, che importa tutte le dipendenze necessarie allo svolgimento dell'analisi e le ri-esporta con degli alias semplici e intuitivi.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il package è compatibile con PEP518; per installarlo, è necessario eseguire i seguenti comandi dalla directory del progetto:\\n\",\n    \"\\n\",\n    \"```bash\\n\",\n    \"python3 -v venv .venv\\n\",\n    \"source venv/bin/activate  # Assumendo l'utilizzo di Bash\\n\",\n    \"pip install .\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si importa il modulo all'interno del notebook, in modo da avere tutti gli alias disponibili:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.693759958Z\",\n     \"start_time\": \"2023-07-02T06:47:39.216569683Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"from unimore_bda_3.prelude import *\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Recupero manuale dei dati\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In questa sezione si recuperano manuale dati machine-readable da diverse fonti indipendenti fra loro, evitando di incappare in protezioni automatizzate insuperabili come CAPTCHA.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### [Google Trends](https://trends.google.com/trends/)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si cercano su Google Trends i prodotti oggetto di questa ricerca, facendo attenzione a selezionare l'*argomento \\\"Videogioco\\\"* e non il *termine di ricerca* con lo stesso nome per minimizzare i falsi positivi.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come effettuare una ricerca su Google Trends attraverso interfaccia grafica.](media/google-trends-query.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si configura poi la ricerca perchè sia relativa a *Tutto il mondo* e nell'arco di tempo *2004 - Presente*, in modo da avere dati generali relative alle tendenze globali, e poi si utilizza il pulsante *Download* per scaricare il file CSV relativo all'*Interesse nel tempo*.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come configurare i parametri di una ricerca su Google Trends attraverso interfaccia grafica, e di come scaricarne i risultati.](media/google-trends-parameters.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"I file CSV così recuperati sono inseriti al percorso `data/{nome}/gtrends-worldwide.csv`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### [SteamDB](https://steamdb.info/)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si cercano su SteamDB i prodotti oggetto della ricerca.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come effettuare una ricerca su SteamDB attraverso interfaccia grafica.](media/steamdb-search.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Dalla pagina di ciascun prodotto si recupera l'App ID, un codice univoco utilizzato da Steam per identificare il software, e lo si salva all'interno del file `data/{nome}/steam_appid.txt`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come recuperare l'App ID di un prodotto dalla relativa pagina SteamDB.](media/steamdb-appid.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si accede poi alla scheda *Price History*.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come accedere alla scheda Price History.](media/steamdb-tab-price-history.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In fondo ad essa, nella omonima sezione, è presente un grafico dello storico prezzi, con a destra un bottone per il download del dataset.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come scaricare il dataset dello storico prezzi.](media/steamdb-chart-price-history.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il file recuperato viene salvato con il nome `data/{nome}/steamdb-price.csv`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si accede poi alla scheda *Charts*.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come accedere alla scheda Charts.](media/steamdb-tab-charts.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Poco sotto la selezione, si trova la sezione *Lifetime player count history*, contenente un grafico dello storico del numero di giocatori concorrenti dalla comparsa del prodotto su Steam, con a destra un bottone per il download del dataset.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come scaricare il dataset dello storico prezzi.](media/steamdb-chart-player-history.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il file recuperato viene salvato con il nome `data/{nome}/steamdb-players.csv`.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### [IsThereAnyDeal](https://isthereanydeal.com/)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si cercano sul sito `https://new.isthereanydeal.com` i cinque prodotti relativi a questa ricerca.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come cercare prodotti su IsThereAnyDeal.](media/itad-search.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si accede alla scheda *History*, e si utilizza il tool *Ispeziona Elemento* del browser Firefox per accedere al sorgente HTML della pagina dopo che essa ha eseguito il codice JavaScript necessario per la visualizzazione dei grafici.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione di come ispezionare il grafico nei Firefox Developer Tools.](media/itad-inspect-element.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Dal grafico, si risale la gerarchia degli elementi fino ad arrivare a un `\u003cdiv\u003e` con la classe `.js-chart-container`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione del .js-chart-container nei Firefox Developer Tools.](media/itad-jschartcontainer.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Immediatamente dopo, è presente uno `\u003cscript\u003e`.\\n\",\n    \"Ne si selezionano i contenuti, e li si salvano all'interno del file `data/{nome}/itad-price.js`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![Visualizzazione del tag script.](media/itad-script-scraping.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Importazione dei dati\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In questa sezione si descrive come caricare nel notebook i dati ottenuti manualmente, recuperandone automaticamente altri, convertendoli in `pd.DataFrame`, uniformandoli e rendendoli human-friendly.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Per ciascun dataset grezzo si è creato un modulo `unimore_bda_3.loaders.*` in grado di convertirlo in un `pd.DataFrame`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si importano tutti i loader all'interno di questo notebook Jupyter, raccolti all'interno della variabile `loaders`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.694207576Z\",\n     \"start_time\": \"2023-07-02T06:47:40.298982419Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"from unimore_bda_3 import loaders\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Importazione dati di Google Trends - `unimore_bda_3.loaders.gtrends`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il *loader* dei dati di Google Trends utilizza la funzione `pd.read_csv` per trasformare il file comma-separated values direttamente in un `pd.DataFrame`.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe = pd.read_csv(fd, sep=\\\",\\\", header=1)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Utilizzando il kwarg `header`, Pandas è in grado di ignorare la riga di prefazione che Google Trends inserisce nei file scaricati:\\n\",\n    \"\\n\",\n    \"```csv\\n\",\n    \"Categoria: Tutte le categorie\\n\",\n    \"\\n\",\n    \"Mese,Deep Rock Galactic: (Tutto il mondo)\\n\",\n    \"2004-01,0\\n\",\n    \"2004-02,0\\n\",\n    \"2004-03,0\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Inoltre, il loader pulisce il dataset, effettuando i seguenti passi:\\n\",\n    \"\\n\",\n    \"1. rinomina le colonne, assegnando loro un titolo più human-friendly:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    dataframe.rename(inplace=True, columns={\\n\",\n    \"        \\\"Mese\\\": \\\"Date\\\",\\n\",\n    \"        f\\\"{query_name}: (Tutto il mondo)\\\": \\\"Google Trends · Score\\\",\\n\",\n    \"    })\\n\",\n    \"    ```\\n\",\n    \"\\n\",\n    \"2. converte in date le stringhe presenti nella colonna dell'indice:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    dataframe[\\\"Date\\\"] = pd.to_datetime(dataframe[\\\"Date\\\"])\\n\",\n    \"    ```\\n\",\n    \"\\n\",\n    \"3. converte in interi i numeri presenti nella colonna dei valori, trasformando in `0` i valori `\\\"\u003c 1\\\"`, e scalando i valori da 0-100 a 0-1:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    dataframe[\\\"Google Trends · Score\\\"] = dataframe[\\\"Google Trends · Score\\\"].map(lambda x: int(x) if x != \\\"\u003c 1\\\" else 0) / 100\\n\",\n    \"    ```\\n\",\n    \"\\n\",\n    \"4. imposta la colonna delle date come indice del dataframe:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    dataframe.set_index(\\\"Date\\\", inplace=True)\\n\",\n    \"    ```\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si verifica il corretto funzionamento del loader con questa chiamata ad esso:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.701305721Z\",\n     \"start_time\": \"2023-07-02T06:47:40.377967865Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            Google Trends · Score\\nDate                             \\n2004-01-01                   0.00\\n2004-02-01                   0.00\\n2004-03-01                   0.00\\n2004-04-01                   0.00\\n2004-05-01                   0.01\\n...                           ...\\n2023-02-01                   0.40\\n2023-03-01                   0.56\\n2023-04-01                   0.41\\n2023-05-01                   0.37\\n2023-06-01                   0.43\\n\\n[234 rows x 1 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eGoogle Trends · Score\u003c/th\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003eDate\u003c/th\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2004-01-01\u003c/th\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2004-02-01\u003c/th\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2004-03-01\u003c/th\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2004-04-01\u003c/th\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2004-05-01\u003c/th\u003e\\n      \u003ctd\u003e0.01\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-02-01\u003c/th\u003e\\n      \u003ctd\u003e0.40\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-03-01\u003c/th\u003e\\n      \u003ctd\u003e0.56\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-04-01\u003c/th\u003e\\n      \u003ctd\u003e0.41\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-05-01\u003c/th\u003e\\n      \u003ctd\u003e0.37\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-01\u003c/th\u003e\\n      \u003ctd\u003e0.43\u003c/td\u003e\\n    \u003c/tr\u003e\\n  \u003c/tbody\u003e\\n\u003c/table\u003e\\n\u003cp\u003e234 rows × 1 columns\u003c/p\u003e\\n\u003c/div\u003e\"\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with open(\\\"./data/deeprockgalactic/gtrends-worldwide.csv\\\") as fd:\\n\",\n    \"    df = loaders.gtrends.load(fd, \\\"Deep Rock Galactic\\\")\\n\",\n    \"df\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Importazione dati da SteamDB - `unimore_bda_3.loaders.steamdb`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"I due *loader* dei dati da SteamDB funzionano in modo molto simile a quello di Google Trends, in quanto anch'esso usa `pd.read_csv`.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe = pd.read_csv(fd, sep=\\\",\\\")\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Allo stesso modo, puliscono il dataset in un modo molto simile:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe.rename(inplace=True, columns={\\n\",\n    \"    \\\"DateTime\\\": \\\"Date\\\",\\n\",\n    \"    \\\"Players\\\": \\\"SteamDB · Peak concurrent players\\\",\\n\",\n    \"    \\\"Average Players\\\": \\\"SteamDB · Day average of concurrent players\\\",\\n\",\n    \"    \\\"Flags\\\": \\\"SteamDB · Player count flags\\\",\\n\",\n    \"})\\n\",\n    \"\\n\",\n    \"dataframe[\\\"Date\\\"] = pd.to_datetime(dataframe[\\\"Date\\\"])\\n\",\n    \"\\n\",\n    \"dataframe.set_index(\\\"Date\\\", inplace=True)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe.rename(inplace=True, columns={\\n\",\n    \"    \\\"DateTime\\\": \\\"Date\\\",\\n\",\n    \"    \\\"Final price\\\": \\\"SteamDB · Steam\\\",\\n\",\n    \"    \\\"Flags\\\": \\\"SteamDB · Price flags\\\",\\n\",\n    \"})\\n\",\n    \"\\n\",\n    \"dataframe[\\\"Date\\\"] = pd.to_datetime(dataframe[\\\"Date\\\"])\\n\",\n    \"\\n\",\n    \"dataframe.set_index(\\\"Date\\\", inplace=True)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Si ha però una differenza significativa, che consiste nel raccoglimento dei valori per data, in quanto i dataset contengono anche gli orari di registrazione dei dati, che ai fini di questa ricerca possono essere ignorati.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe = dataframe.groupby(dataframe.index.date).max()\\n\",\n    \"dataframe.index = pd.to_datetime(dataframe.index)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe = dataframe.groupby(dataframe.index.date).min()\\n\",\n    \"dataframe.index = pd.to_datetime(dataframe.index)\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si verifica il corretto funzionamento dei loader con queste chiamate ad essi:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.704705835Z\",\n     \"start_time\": \"2023-07-02T06:47:40.406769392Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            SteamDB · Peak concurrent players  \\\\\\n2016-12-01                               11.0   \\n2016-12-02                                NaN   \\n2016-12-03                                NaN   \\n2016-12-04                                NaN   \\n2016-12-05                                NaN   \\n...                                       ...   \\n2023-06-25                            35016.0   \\n2023-06-26                            30017.0   \\n2023-06-27                            29568.0   \\n2023-06-28                            28539.0   \\n2023-06-29                            28042.0   \\n\\n            SteamDB · Day average of concurrent players  \\\\\\n2016-12-01                                          NaN   \\n2016-12-02                                          NaN   \\n2016-12-03                                          NaN   \\n2016-12-04                                          NaN   \\n2016-12-05                                          NaN   \\n...                                                 ...   \\n2023-06-25                                      26276.0   \\n2023-06-26                                      22421.0   \\n2023-06-27                                      21949.0   \\n2023-06-28                                      21347.0   \\n2023-06-29                                      21347.0   \\n\\n            SteamDB · Player count flags  \\n2016-12-01                           NaN  \\n2016-12-02                           NaN  \\n2016-12-03                           NaN  \\n2016-12-04                           NaN  \\n2016-12-05                           NaN  \\n...                                  ...  \\n2023-06-25                           NaN  \\n2023-06-26                           NaN  \\n2023-06-27                           NaN  \\n2023-06-28                           NaN  \\n2023-06-29                           NaN  \\n\\n[2402 rows x 3 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Peak concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Day average of concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Player count flags\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-01\u003c/th\u003e\\n      \u003ctd\u003e11.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-02\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-03\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-04\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-05\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-25\u003c/th\u003e\\n      \u003ctd\u003e35016.0\u003c/td\u003e\\n      \u003ctd\u003e26276.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-26\u003c/th\u003e\\n      \u003ctd\u003e30017.0\u003c/td\u003e\\n      \u003ctd\u003e22421.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-27\u003c/th\u003e\\n      \u003ctd\u003e29568.0\u003c/td\u003e\\n      \u003ctd\u003e21949.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-28\u003c/th\u003e\\n      \u003ctd\u003e28539.0\u003c/td\u003e\\n      \u003ctd\u003e21347.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-29\u003c/th\u003e\\n      \u003ctd\u003e28042.0\u003c/td\u003e\\n      \u003ctd\u003e21347.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n  \u003c/tbody\u003e\\n\u003c/table\u003e\\n\u003cp\u003e2402 rows × 3 columns\u003c/p\u003e\\n\u003c/div\u003e\"\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with open(\\\"./data/deeprockgalactic/steamdb-players.csv\\\") as fd:\\n\",\n    \"    df = loaders.steamdb.load_players(fd)\\n\",\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.709769142Z\",\n     \"start_time\": \"2023-07-02T06:47:40.448248117Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            SteamDB · Steam  SteamDB · Price flags\\n2018-02-28            22.99                    NaN\\n2018-04-24            20.69                    NaN\\n2018-04-27            22.99                    NaN\\n2018-05-10            17.24                    NaN\\n2018-05-14            22.99                    NaN\\n...                     ...                    ...\\n2023-03-23            29.99                    NaN\\n2023-04-20             9.89                    NaN\\n2023-05-04            29.99                    NaN\\n2023-06-15             9.89                    NaN\\n2023-06-29             9.89                    NaN\\n\\n[96 rows x 2 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Steam\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Price flags\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-02-28\u003c/th\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-04-24\u003c/th\u003e\\n      \u003ctd\u003e20.69\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-04-27\u003c/th\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-05-10\u003c/th\u003e\\n      \u003ctd\u003e17.24\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-05-14\u003c/th\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-03-23\u003c/th\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-04-20\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-05-04\u003c/th\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-15\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-29\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n  \u003c/tbody\u003e\\n\u003c/table\u003e\\n\u003cp\u003e96 rows × 2 columns\u003c/p\u003e\\n\u003c/div\u003e\"\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with open(\\\"./data/deeprockgalactic/steamdb-price.csv\\\") as fd:\\n\",\n    \"    df = loaders.steamdb.load_price(fd)\\n\",\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Importazione dati da IsThereAnyDeal - `unimore_bda_3.loaders.itad`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il *loader* dei dati da IsThereAnyDeal ricerca i dataset JSON contenuti all'interno del codice JavaScript del sito web, utilizzati per generare dinamicamente i grafici che esso mostra.\\n\",\n    \"\\n\",\n    \"La regular expression utilizzata è la seguente:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"PRICE_REGEX = re.compile(r\\\"\\\"\\\"Charts[.]Builder[(]setup, (.+?)[)]\\\"\\\"\\\")\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Per ciascun dataset trovato, il loader chiama un'altra funzione, adibita a convertirlo in un `pd.DataFrame`:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"matches: list[str] = PRICE_REGEX.findall(data)\\n\",\n    \"\\n\",\n    \"return [_load_price_dataframe(match) for match in matches]\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"La funzione di conversione a `pd.DataFrame` carica il dataset JSON con la funzione `json.loads`, poi per ciascuna serie presente all'interno di esso chiama un'ulteriore funzione che si occupa di convertirla in una `pd.Series`.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"srcs: list = json.loads(match)\\n\",\n    \"\\n\",\n    \"dataframe = pd.DataFrame(\\n\",\n    \"    data=[_load_price_series(src) for src in srcs]\\n\",\n    \").T\\n\",\n    \"\\n\",\n    \"dataframe.index = pd.to_datetime(dataframe.index)\\n\",\n    \"\\n\",\n    \"return dataframe\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"La funzione di conversione a `pd.Series` converte le tuple `(indice, valore)` in due liste contenente tutti gli indici e tutti i valori, il formato richiesto da Pandas.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"index = [pd.Timestamp(item[0], unit=\\\"ms\\\", tz=\\\"utc\\\") for item in src[\\\"data\\\"]]\\n\",\n    \"data = [item[1] for item in src[\\\"data\\\"]]\\n\",\n    \"\\n\",\n    \"series = pd.Series(\\n\",\n    \"    data=data,\\n\",\n    \"    index=index,\\n\",\n    \"    name=f\\\"\\\"\\\"ITAD · {src[\\\"name\\\"]}\\\"\\\"\\\"\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"return series\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Inoltre, effettua lo stesso raggruppamento già visto nel loader di SteamDB per selezionare solo la data e non l'ora di ciascun valore:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"if \\\"Worst\\\" in series.name or \\\"High\\\" in series.name:\\n\",\n    \"    series = series.groupby(series.index.date).max()\\n\",\n    \"else:\\n\",\n    \"    series = series.groupby(series.index.date).min()\\n\",\n    \"```\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si verifica il corretto funzionamento del loader con questa chiamata ad esso:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:40.711484212Z\",\n     \"start_time\": \"2023-07-02T06:47:40.485670340Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            ITAD · Best Price  ITAD · Best Regular Price  \\\\\\n2018-02-28              22.99                      22.99   \\n2018-04-24              20.69                      22.99   \\n2018-04-27              20.69                      22.99   \\n2018-05-10              17.24                      22.99   \\n2018-05-14              17.24                      22.99   \\n...                       ...                        ...   \\n2023-05-04               9.89                      29.99   \\n2023-05-05               9.89                      29.99   \\n2023-05-23               9.89                      29.99   \\n2023-06-15               9.89                      29.99   \\n2023-06-29               9.89                      29.99   \\n\\n            ITAD · Worst Regular Price  ITAD · Historical Low  \\n2018-02-28                       22.99                  22.99  \\n2018-04-24                       22.99                  20.69  \\n2018-04-27                       22.99                    NaN  \\n2018-05-10                       22.99                  17.24  \\n2018-05-14                       22.99                    NaN  \\n...                                ...                    ...  \\n2023-05-04                       29.99                    NaN  \\n2023-05-05                       29.99                    NaN  \\n2023-05-23                       29.99                    NaN  \\n2023-06-15                       29.99                    NaN  \\n2023-06-29                       29.99                   0.00  \\n\\n[151 rows x 4 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eITAD · Best Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Best Regular Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Worst Regular Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Historical Low\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-02-28\u003c/th\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-04-24\u003c/th\u003e\\n      \u003ctd\u003e20.69\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e20.69\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-04-27\u003c/th\u003e\\n      \u003ctd\u003e20.69\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-05-10\u003c/th\u003e\\n      \u003ctd\u003e17.24\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e17.24\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2018-05-14\u003c/th\u003e\\n      \u003ctd\u003e17.24\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003e22.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-05-04\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-05-05\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-05-23\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-15\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-29\u003c/th\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003e29.99\u003c/td\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n    \u003c/tr\u003e\\n  \u003c/tbody\u003e\\n\u003c/table\u003e\\n\u003cp\u003e151 rows × 4 columns\u003c/p\u003e\\n\u003c/div\u003e\"\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with open(\\\"./data/deeprockgalactic/itad-price.js\\\") as fd:\\n\",\n    \"    df = loaders.itad.load(fd)\\n\",\n    \"df[0]\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Recupero e importazione dei dati degli annunci dalla web API di Steam - `unimore_bda_3.loaders.steam`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Il *loader* di dati da Steam non si basa su un dataset locale archiviato su file, bensì effettua dinamicamente richieste alla web API di Steam al fine di recuperare i dati più aggiornati disponibili relativi agli annunci di un prodotto con un dato app id.\\n\",\n    \"\\n\",\n    \"A tale scopo, fa uso del package `httpx` per richieste HTTP:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"import httpx\\n\",\n    \"\\n\",\n    \"steam_api = httpx.Client(base_url=\\\"https://api.steampowered.com\\\")\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Il loader legge dal relativo file l'app id del prodotto di cui caricare i dati, e procede a effettuare richieste HTTP per esso:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"appid = int(fd.read().strip())\\n\",\n    \"data = fetch(appid=appid)\\n\",\n    \"\\n\",\n    \"return data\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Il recupero dei dati avviene in quattro fasi:\\n\",\n    \"\\n\",\n    \"1. Vengono effettuate ripetute richieste all'API fino a quando non sono stati recuperati tutti gli annunci esistenti:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    count = 100\\n\",\n    \"    enddate = {}\\n\",\n    \"    newsitems = []\\n\",\n    \"\\n\",\n    \"    while count == 100:\\n\",\n    \"        request = steam_api.get(\\n\",\n    \"            \\\"/ISteamNews/GetNewsForApp/v0002/\\\",\\n\",\n    \"            params={\\n\",\n    \"                \\\"appid\\\": appid,\\n\",\n    \"                \\\"count\\\": 100,\\n\",\n    \"                \\\"format\\\": \\\"json\\\",\\n\",\n    \"                **enddate,\\n\",\n    \"            }\\n\",\n    \"        )\\n\",\n    \"        request.raise_for_status()\\n\",\n    \"        data = request.json()[\\\"appnews\\\"]\\n\",\n    \"        count = len(data[\\\"newsitems\\\"])\\n\",\n    \"        newsitems.extend(data[\\\"newsitems\\\"])\\n\",\n    \"        enddate = {\\\"enddate\\\": newsitems[-1][\\\"date\\\"]}\\n\",\n    \"\\n\",\n    \"    return newsitems\\n\",\n    \"    ```\\n\",\n    \"\\n\",\n    \"2. Gli annunci recuperati vengono categorizzati in base al tag ad essi associato dalla web API:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    result = collections.defaultdict(list)\\n\",\n    \"\\n\",\n    \"    for item in news:\\n\",\n    \"        tags = item.get(\\\"tags\\\", [])\\n\",\n    \"        if tags:\\n\",\n    \"            for tag in set(item.get(\\\"tags\\\", [])):\\n\",\n    \"                result[tag].append(item)\\n\",\n    \"        else:\\n\",\n    \"            result[\\\"no_tags\\\"].append(item)\\n\",\n    \"\\n\",\n    \"    return result\\n\",\n    \"    ```\\n\",\n    \"\\n\",\n    \"3. Il numero di annunci per ciascun tag in ciascun giorno viene raccolto in una `pd.Series`:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    index = pd.to_datetime([datetime.fromtimestamp(item[\\\"date\\\"]) for item in news])\\n\",\n    \"\\n\",\n    \"    return pd.Series(\\n\",\n    \"        data=[1 for _ in index],\\n\",\n    \"        index=index,\\n\",\n    \"        name=f\\\"\\\"\\\"Steam · Count of News tagged {name}\\\"\\\"\\\",\\n\",\n    \"        dtype=np.uint8,\\n\",\n    \"    )\\n\",\n    \"    ```\\n\",\n    \"\\n\",\n    \"4. Le `pd.Series` vengono unite in un dataframe unico, con i valori nulli riempiti a zero e i conteggi di annunci in una sola giornata ancora una volta raggruppati e sommati:\\n\",\n    \"\\n\",\n    \"    ```python\\n\",\n    \"    raw_news = _load_news(appid=appid)\\n\",\n    \"    categorized_news = _categorize_news(news=raw_news)\\n\",\n    \"    serialized_news = [_serialize_news(name=name, news=news).to_frame() for name, news in categorized_news.items()]\\n\",\n    \"\\n\",\n    \"    dataframe = utils.join_frames(*serialized_news).fillna(0)\\n\",\n    \"    dataframe = dataframe.groupby(dataframe.index.date).sum()\\n\",\n    \"    dataframe.index = pd.to_datetime(dataframe.index)\\n\",\n    \"\\n\",\n    \"    return dataframe\\n\",\n    \"    ```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si verifica il corretto funzionamento del loader con questa chiamata ad esso:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:43.612325961Z\",\n     \"start_time\": \"2023-07-02T06:47:40.550738777Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            Steam · Count of News tagged no_tags  \\\\\\n2016-12-15                                     1   \\n2017-02-17                                     1   \\n2017-02-23                                     1   \\n2017-03-23                                     5   \\n2017-04-01                                     1   \\n...                                          ...   \\n2023-06-01                                     2   \\n2023-06-09                                     1   \\n2023-06-14                                     1   \\n2023-06-15                                     1   \\n2023-06-29                                     1   \\n\\n            Steam · Count of News tagged patchnotes  \\\\\\n2016-12-15                                      0.0   \\n2017-02-17                                      1.0   \\n2017-02-23                                      1.0   \\n2017-03-23                                      0.0   \\n2017-04-01                                      0.0   \\n...                                             ...   \\n2023-06-01                                      0.0   \\n2023-06-09                                      0.0   \\n2023-06-14                                      0.0   \\n2023-06-15                                      0.0   \\n2023-06-29                                      0.0   \\n\\n            Steam · Count of News tagged hide_store  \\\\\\n2016-12-15                                      0.0   \\n2017-02-17                                      0.0   \\n2017-02-23                                      0.0   \\n2017-03-23                                      0.0   \\n2017-04-01                                      0.0   \\n...                                             ...   \\n2023-06-01                                      0.0   \\n2023-06-09                                      0.0   \\n2023-06-14                                      0.0   \\n2023-06-15                                      0.0   \\n2023-06-29                                      0.0   \\n\\n            Steam · Count of News tagged ModAct_1401078964_1677758714_0  \\\\\\n2016-12-15                                                0.0             \\n2017-02-17                                                0.0             \\n2017-02-23                                                0.0             \\n2017-03-23                                                0.0             \\n2017-04-01                                                0.0             \\n...                                                       ...             \\n2023-06-01                                                0.0             \\n2023-06-09                                                0.0             \\n2023-06-14                                                0.0             \\n2023-06-15                                                0.0             \\n2023-06-29                                                0.0             \\n\\n            Steam · Count of News tagged mod_require_rereview  \\\\\\n2016-12-15                                                0.0   \\n2017-02-17                                                0.0   \\n2017-02-23                                                0.0   \\n2017-03-23                                                0.0   \\n2017-04-01                                                0.0   \\n...                                                       ...   \\n2023-06-01                                                0.0   \\n2023-06-09                                                0.0   \\n2023-06-14                                                0.0   \\n2023-06-15                                                0.0   \\n2023-06-29                                                0.0   \\n\\n            Steam · Count of News tagged mod_reviewed  \\\\\\n2016-12-15                                        0.0   \\n2017-02-17                                        0.0   \\n2017-02-23                                        0.0   \\n2017-03-23                                        0.0   \\n2017-04-01                                        0.0   \\n...                                               ...   \\n2023-06-01                                        0.0   \\n2023-06-09                                        0.0   \\n2023-06-14                                        0.0   \\n2023-06-15                                        0.0   \\n2023-06-29                                        0.0   \\n\\n            Steam · Count of News tagged steam_award_vote_request  \\\\\\n2016-12-15                                                0.0       \\n2017-02-17                                                0.0       \\n2017-02-23                                                0.0       \\n2017-03-23                                                0.0       \\n2017-04-01                                                0.0       \\n...                                                       ...       \\n2023-06-01                                                0.0       \\n2023-06-09                                                0.0       \\n2023-06-14                                                0.0       \\n2023-06-15                                                0.0       \\n2023-06-29                                                0.0       \\n\\n            Steam · Count of News tagged mod_hide_library_overview  \\\\\\n2016-12-15                                                0.0        \\n2017-02-17                                                0.0        \\n2017-02-23                                                0.0        \\n2017-03-23                                                0.0        \\n2017-04-01                                                0.0        \\n...                                                       ...        \\n2023-06-01                                                0.0        \\n2023-06-09                                                0.0        \\n2023-06-14                                                0.0        \\n2023-06-15                                                0.0        \\n2023-06-29                                                0.0        \\n\\n            Steam · Count of News tagged steam_award_nomination_request  \\\\\\n2016-12-15                                                0.0             \\n2017-02-17                                                0.0             \\n2017-02-23                                                0.0             \\n2017-03-23                                                0.0             \\n2017-04-01                                                0.0             \\n...                                                       ...             \\n2023-06-01                                                0.0             \\n2023-06-09                                                0.0             \\n2023-06-14                                                0.0             \\n2023-06-15                                                0.0             \\n2023-06-29                                                0.0             \\n\\n            Steam · Count of News tagged halloween  \\\\\\n2016-12-15                                     0.0   \\n2017-02-17                                     0.0   \\n2017-02-23                                     0.0   \\n2017-03-23                                     0.0   \\n2017-04-01                                     0.0   \\n...                                            ...   \\n2023-06-01                                     0.0   \\n2023-06-09                                     0.0   \\n2023-06-14                                     0.0   \\n2023-06-15                                     0.0   \\n2023-06-29                                     0.0   \\n\\n            Steam · Count of News tagged hide_library_overview  \\\\\\n2016-12-15                                                1.0    \\n2017-02-17                                                1.0    \\n2017-02-23                                                1.0    \\n2017-03-23                                                5.0    \\n2017-04-01                                                1.0    \\n...                                                       ...    \\n2023-06-01                                                0.0    \\n2023-06-09                                                0.0    \\n2023-06-14                                                0.0    \\n2023-06-15                                                0.0    \\n2023-06-29                                                0.0    \\n\\n            Steam · Count of News tagged hide_library_detail  \\\\\\n2016-12-15                                               1.0   \\n2017-02-17                                               1.0   \\n2017-02-23                                               1.0   \\n2017-03-23                                               5.0   \\n2017-04-01                                               1.0   \\n...                                                      ...   \\n2023-06-01                                               0.0   \\n2023-06-09                                               0.0   \\n2023-06-14                                               0.0   \\n2023-06-15                                               0.0   \\n2023-06-29                                               0.0   \\n\\n            Steam · Count of News tagged halloween2019candidate  \\\\\\n2016-12-15                                                0.0     \\n2017-02-17                                                0.0     \\n2017-02-23                                                0.0     \\n2017-03-23                                                0.0     \\n2017-04-01                                                0.0     \\n...                                                       ...     \\n2023-06-01                                                0.0     \\n2023-06-09                                                0.0     \\n2023-06-14                                                0.0     \\n2023-06-15                                                0.0     \\n2023-06-29                                                0.0     \\n\\n            Steam · Count of News tagged auto_migrated  \\n2016-12-15                                         1.0  \\n2017-02-17                                         1.0  \\n2017-02-23                                         1.0  \\n2017-03-23                                         5.0  \\n2017-04-01                                         1.0  \\n...                                                ...  \\n2023-06-01                                         0.0  \\n2023-06-09                                         0.0  \\n2023-06-14                                         0.0  \\n2023-06-15                                         0.0  \\n2023-06-29                                         0.0  \\n\\n[204 rows x 14 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged no_tags\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged patchnotes\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged hide_store\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged ModAct_1401078964_1677758714_0\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged mod_require_rereview\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged mod_reviewed\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged steam_award_vote_request\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged mod_hide_library_overview\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged steam_award_nomination_request\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged halloween\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged hide_library_overview\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged hide_library_detail\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged halloween2019candidate\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged auto_migrated\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-15\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2017-02-17\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2017-02-23\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2017-03-23\u003c/th\u003e\\n      \u003ctd\u003e5\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e5.0\u003c/td\u003e\\n      \u003ctd\u003e5.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e5.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2017-04-01\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-01\u003c/th\u003e\\n      \u003ctd\u003e2\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-09\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-14\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-15\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-29\u003c/th\u003e\\n      \u003ctd\u003e1\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n    \u003c/tr\u003e\\n  \u003c/tbody\u003e\\n\u003c/table\u003e\\n\u003cp\u003e204 rows × 14 columns\u003c/p\u003e\\n\u003c/div\u003e\"\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with open(\\\"./data/deeprockgalactic/steam_appid.txt\\\") as fd:\\n\",\n    \"    df = loaders.steam.load(fd)\\n\",\n    \"df\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"-----\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:43.626658327Z\",\n     \"start_time\": \"2023-07-02T06:47:43.611434833Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# Pulizia ambiente\\n\",\n    \"\\n\",\n    \"try:\\n\",\n    \"    del fd\\n\",\n    \"except NameError:\\n\",\n    \"    pass\\n\",\n    \"\\n\",\n    \"try:\\n\",\n    \"    del df\\n\",\n    \"except NameError:\\n\",\n    \"    pass\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Elaborazione dei dati - `unimore_bda_3.processing`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In questa sezione si descrive come elaborare i `pd.DataFrame` caricati per unificarli in uno unico molto più grande, più facile da visualizzare e manipolare.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si crea un modulo Python chiamato `unimore_bda_3.processing` con tale scopo.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Lo si importa all'interno di questo notebook:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:43.717295300Z\",\n     \"start_time\": \"2023-07-02T06:47:43.629417962Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"from unimore_bda_3 import processing\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Elaborazione dei dati di un singolo prodotto - `process_game`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si definisce la funzione `process_game`, per raccogliere tutti i dati relativi a uno specifico videogioco in un unico `pd.DataFrame`, dato il suo titolo e il percorso alla cartella dei file contenenti i dataset.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"def process_game(name: str, path: Path) -\u003e pd.DataFrame:\\n\",\n    \"    ...\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Come prima cosa, essa determina il percorso di ciascun singolo file da processare:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"steam_appid_path = path.joinpath(\\\"steam_appid.txt\\\")\\n\",\n    \"gtrends_worldwide_path = path.joinpath(\\\"gtrends-worldwide.csv\\\")\\n\",\n    \"steamdb_players_path = path.joinpath(\\\"steamdb-players.csv\\\")\\n\",\n    \"steamdb_price_path = path.joinpath(\\\"steamdb-price.csv\\\")\\n\",\n    \"itad_price_path = path.joinpath(\\\"itad-price.js\\\")\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"In seguito, per ciascun percorso, utilizza il relativo *loader* per ottenere un `pd.DataFrame`:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"with open(steam_appid_path) as fd:\\n\",\n    \"    steam_news: pd.DataFrame = loaders.steam.load(fd=fd)\\n\",\n    \"\\n\",\n    \"with open(gtrends_worldwide_path) as fd:\\n\",\n    \"    google_trends: pd.DataFrame = loaders.gtrends.load(fd=fd, query_name=name)\\n\",\n    \"\\n\",\n    \"with open(steamdb_players_path) as fd:\\n\",\n    \"    steamdb_players: pd.DataFrame = loaders.steamdb.load_players(fd=fd)\\n\",\n    \"\\n\",\n    \"with open(steamdb_price_path) as fd:\\n\",\n    \"    steamdb_price: pd.DataFrame = loaders.steamdb.load_price(fd=fd)\\n\",\n    \"\\n\",\n    \"with open(itad_price_path) as fd:\\n\",\n    \"    itad_prices: list[pd.DataFrame] = loaders.itad.load(fd=fd)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Poi, utilizzando la seguente funzione di utility, effettua un outer join di tutti i `pd.DataFrame` recuperati:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"def join_frames(*dfs: pd.DataFrame, **kwargs) -\u003e pd.DataFrame:\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    Join multiple :class:`pandas.DataFrame`s in a single expression.\\n\",\n    \"\\n\",\n    \"    :param dfs: The :class:`pandas.DataFrame`s to join.\\n\",\n    \"    :param kwargs: Keyword arguments to pass to :meth:`pandas.DataFrame.join`.\\n\",\n    \"    :return: The resulting :class:`pandas.DataFrame`.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    if len(dfs) == 0:\\n\",\n    \"        return pd.DataFrame()\\n\",\n    \"    elif len(dfs) == 1:\\n\",\n    \"        return dfs[0]\\n\",\n    \"    else:\\n\",\n    \"        return dfs[0].join(dfs[1:], **kwargs)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe: pd.DataFrame = utils.join_frames(steamdb_players, steamdb_price, google_trends, steam_news, *itad_prices)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Successivamente, viene effettuato *forward fill* su diverse colonne, in quanto molti dei precedenti dataframe hanno valori solo in corrispondenza delle date in cui i valori sono cambiati:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe[\\\"SteamDB · Steam\\\"].fillna(method=\\\"ffill\\\", inplace=True)\\n\",\n    \"dataframe[\\\"Google Trends · Score\\\"].fillna(method=\\\"ffill\\\", inplace=True)\\n\",\n    \"dataframe[\\\"ITAD · Best Price\\\"].fillna(method=\\\"ffill\\\", inplace=True)\\n\",\n    \"dataframe[\\\"ITAD · Best Regular Price\\\"].fillna(method=\\\"ffill\\\", inplace=True)\\n\",\n    \"dataframe[\\\"ITAD · Worst Regular Price\\\"].fillna(method=\\\"ffill\\\", inplace=True)\\n\",\n    \"dataframe[\\\"ITAD · Historical Low\\\"].fillna(method=\\\"ffill\\\", inplace=True)\\n\",\n    \"news_columns = list(filter(lambda c: c.startswith(\\\"Steam · Count of News tagged\\\"), dataframe.columns))\\n\",\n    \"for news_col_name in news_columns:\\n\",\n    \"    dataframe[news_col_name].fillna(0, inplace=True)\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Si aggiungono poi alcuni dati derivati.\\n\",\n    \"\\n\",\n    \"Il primo di essi è una colonna booleana chiamata `Steam · Is there News?`, contenente `True` se in quel giorno è stato pubblicato un annuncio di qualsiasi tipo, e `False` altrimenti.\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe[\\\"Steam · Is there News?\\\"] = pd.Series(data=False, dtype=bool)\\n\",\n    \"dataframe[\\\"Steam · Is there News?\\\"] = (dataframe[news_columns] \u003e 0).any()\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Secondo, terzo, quarto, e quinto sono un gruppo di colonne contenente alcune metriche relative al loro massimo mai raggiunto:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe[\\\"SteamDB · Relative concurrent players\\\"] = dataframe[\\\"SteamDB · Peak concurrent players\\\"] / dataframe[\\\"SteamDB · Peak concurrent players\\\"].max()\\n\",\n    \"dataframe[\\\"SteamDB · Relative Steam price\\\"] = dataframe[\\\"SteamDB · Steam\\\"] / dataframe[\\\"SteamDB · Steam\\\"].max()\\n\",\n    \"dataframe[\\\"ITAD · Relative Best Price\\\"] = dataframe[\\\"ITAD · Best Price\\\"] / dataframe[\\\"ITAD · Best Price\\\"].max()\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Come sesta e settima colonna, si calcola la differenza giornaliera di prezzo, rispettivamente con i dati di SteamDB (solo Steam) e IsThereAnyDeal (tutti i rivenditori):\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe[\\\"ITAD · Best price change from previous day\\\"] = dataframe[\\\"ITAD · Best Price\\\"].diff()\\n\",\n    \"dataframe[\\\"SteamDB · Steam price change from previous day\\\"] = - dataframe[\\\"SteamDB · Steam\\\"].diff()\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Come fatto per gli annunci, come settima e ottava colonna si crea una colonna booleana che denota la presenza o l'assenza di uno sconto in un determinato giorno:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe[\\\"SteamDB · Is there a discount?\\\"] = dataframe[\\\"SteamDB · Steam price change from previous day\\\"] \u003c 0\\n\",\n    \"dataframe[\\\"ITAD · Is there a discount?\\\"] = dataframe[\\\"ITAD · Best price change from previous day\\\"] \u003c 0\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"Infine, si combinano le colonne booleane per crearne altre due che combinano le precedenti per indicare la presenza di sconti *o* di un annuncio in un determinato giorno:\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"dataframe[\\\"Cumulative · Is something happening on Steam?\\\"] = dataframe[\\\"Steam · Is there News?\\\"] + dataframe[\\\"SteamDB · Is there a discount?\\\"]\\n\",\n    \"dataframe[\\\"Cumulative · Is something happening?\\\"] = dataframe[\\\"Steam · Is there News?\\\"] + dataframe[\\\"SteamDB · Is there a discount?\\\"] + dataframe[\\\"ITAD · Is there a discount?\\\"]\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Si esegue la funzione `process_game` sui dataset dei cinque videogiochi considerati:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:44.016906766Z\",\n     \"start_time\": \"2023-07-02T06:47:43.671112671Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            SteamDB · Peak concurrent players  \\\\\\n2016-12-01                               11.0   \\n2016-12-02                                NaN   \\n2016-12-03                                NaN   \\n2016-12-04                                NaN   \\n2016-12-05                                NaN   \\n...                                       ...   \\n2023-06-25                            35016.0   \\n2023-06-26                            30017.0   \\n2023-06-27                            29568.0   \\n2023-06-28                            28539.0   \\n2023-06-29                            28042.0   \\n\\n            SteamDB · Day average of concurrent players  \\\\\\n2016-12-01                                          NaN   \\n2016-12-02                                          NaN   \\n2016-12-03                                          NaN   \\n2016-12-04                                          NaN   \\n2016-12-05                                          NaN   \\n...                                                 ...   \\n2023-06-25                                      26276.0   \\n2023-06-26                                      22421.0   \\n2023-06-27                                      21949.0   \\n2023-06-28                                      21347.0   \\n2023-06-29                                      21347.0   \\n\\n            SteamDB · Player count flags  SteamDB · Steam  \\\\\\n2016-12-01                           NaN              NaN   \\n2016-12-02                           NaN              NaN   \\n2016-12-03                           NaN              NaN   \\n2016-12-04                           NaN              NaN   \\n2016-12-05                           NaN              NaN   \\n...                                  ...              ...   \\n2023-06-25                           NaN             9.89   \\n2023-06-26                           NaN             9.89   \\n2023-06-27                           NaN             9.89   \\n2023-06-28                           NaN             9.89   \\n2023-06-29                           NaN             9.89   \\n\\n            SteamDB · Price flags  Google Trends · Score  \\\\\\n2016-12-01                    NaN                   0.00   \\n2016-12-02                    NaN                   0.00   \\n2016-12-03                    NaN                   0.00   \\n2016-12-04                    NaN                   0.00   \\n2016-12-05                    NaN                   0.00   \\n...                           ...                    ...   \\n2023-06-25                    NaN                   0.43   \\n2023-06-26                    NaN                   0.43   \\n2023-06-27                    NaN                   0.43   \\n2023-06-28                    NaN                   0.43   \\n2023-06-29                    NaN                   0.43   \\n\\n            Steam · Count of News tagged no_tags  \\\\\\n2016-12-01                                   0.0   \\n2016-12-02                                   0.0   \\n2016-12-03                                   0.0   \\n2016-12-04                                   0.0   \\n2016-12-05                                   0.0   \\n...                                          ...   \\n2023-06-25                                   0.0   \\n2023-06-26                                   0.0   \\n2023-06-27                                   0.0   \\n2023-06-28                                   0.0   \\n2023-06-29                                   1.0   \\n\\n            Steam · Count of News tagged patchnotes  \\\\\\n2016-12-01                                      0.0   \\n2016-12-02                                      0.0   \\n2016-12-03                                      0.0   \\n2016-12-04                                      0.0   \\n2016-12-05                                      0.0   \\n...                                             ...   \\n2023-06-25                                      0.0   \\n2023-06-26                                      0.0   \\n2023-06-27                                      0.0   \\n2023-06-28                                      0.0   \\n2023-06-29                                      0.0   \\n\\n            Steam · Count of News tagged hide_store  \\\\\\n2016-12-01                                      0.0   \\n2016-12-02                                      0.0   \\n2016-12-03                                      0.0   \\n2016-12-04                                      0.0   \\n2016-12-05                                      0.0   \\n...                                             ...   \\n2023-06-25                                      0.0   \\n2023-06-26                                      0.0   \\n2023-06-27                                      0.0   \\n2023-06-28                                      0.0   \\n2023-06-29                                      0.0   \\n\\n            Steam · Count of News tagged ModAct_1401078964_1677758714_0  ...  \\\\\\n2016-12-01                                                0.0            ...   \\n2016-12-02                                                0.0            ...   \\n2016-12-03                                                0.0            ...   \\n2016-12-04                                                0.0            ...   \\n2016-12-05                                                0.0            ...   \\n...                                                       ...            ...   \\n2023-06-25                                                0.0            ...   \\n2023-06-26                                                0.0            ...   \\n2023-06-27                                                0.0            ...   \\n2023-06-28                                                0.0            ...   \\n2023-06-29                                                0.0            ...   \\n\\n            Steam · Is there News?  SteamDB · Relative concurrent players  \\\\\\n2016-12-01                   False                               0.000236   \\n2016-12-02                   False                                    NaN   \\n2016-12-03                   False                                    NaN   \\n2016-12-04                   False                                    NaN   \\n2016-12-05                   False                                    NaN   \\n...                            ...                                    ...   \\n2023-06-25                   False                               0.750016   \\n2023-06-26                   False                               0.642941   \\n2023-06-27                   False                               0.633324   \\n2023-06-28                   False                               0.611284   \\n2023-06-29                    True                               0.600638   \\n\\n            SteamDB · Relative Steam price  ITAD · Relative Best Price  \\\\\\n2016-12-01                             NaN                         NaN   \\n2016-12-02                             NaN                         NaN   \\n2016-12-03                             NaN                         NaN   \\n2016-12-04                             NaN                         NaN   \\n2016-12-05                             NaN                         NaN   \\n...                                    ...                         ...   \\n2023-06-25                        0.329777                    0.329777   \\n2023-06-26                        0.329777                    0.329777   \\n2023-06-27                        0.329777                    0.329777   \\n2023-06-28                        0.329777                    0.329777   \\n2023-06-29                        0.329777                    0.329777   \\n\\n            ITAD · Best price change from previous day  \\\\\\n2016-12-01                                         NaN   \\n2016-12-02                                         NaN   \\n2016-12-03                                         NaN   \\n2016-12-04                                         NaN   \\n2016-12-05                                         NaN   \\n...                                                ...   \\n2023-06-25                                         0.0   \\n2023-06-26                                         0.0   \\n2023-06-27                                         0.0   \\n2023-06-28                                         0.0   \\n2023-06-29                                         0.0   \\n\\n            SteamDB · Steam price change from previous day  \\\\\\n2016-12-01                                             NaN   \\n2016-12-02                                             NaN   \\n2016-12-03                                             NaN   \\n2016-12-04                                             NaN   \\n2016-12-05                                             NaN   \\n...                                                    ...   \\n2023-06-25                                            -0.0   \\n2023-06-26                                            -0.0   \\n2023-06-27                                            -0.0   \\n2023-06-28                                            -0.0   \\n2023-06-29                                            -0.0   \\n\\n            SteamDB · Is there a discount?  ITAD · Is there a discount?  \\\\\\n2016-12-01                           False                        False   \\n2016-12-02                           False                        False   \\n2016-12-03                           False                        False   \\n2016-12-04                           False                        False   \\n2016-12-05                           False                        False   \\n...                                    ...                          ...   \\n2023-06-25                           False                        False   \\n2023-06-26                           False                        False   \\n2023-06-27                           False                        False   \\n2023-06-28                           False                        False   \\n2023-06-29                           False                        False   \\n\\n            Cumulative · Is something happening on Steam?  \\\\\\n2016-12-01                                          False   \\n2016-12-02                                          False   \\n2016-12-03                                          False   \\n2016-12-04                                          False   \\n2016-12-05                                          False   \\n...                                                   ...   \\n2023-06-25                                          False   \\n2023-06-26                                          False   \\n2023-06-27                                          False   \\n2023-06-28                                          False   \\n2023-06-29                                           True   \\n\\n            Cumulative · Is something happening?  \\n2016-12-01                                 False  \\n2016-12-02                                 False  \\n2016-12-03                                 False  \\n2016-12-04                                 False  \\n2016-12-05                                 False  \\n...                                          ...  \\n2023-06-25                                 False  \\n2023-06-26                                 False  \\n2023-06-27                                 False  \\n2023-06-28                                 False  \\n2023-06-29                                  True  \\n\\n[2402 rows x 36 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Peak concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Day average of concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Player count flags\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Steam\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Price flags\u003c/th\u003e\\n      \u003cth\u003eGoogle Trends · Score\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged no_tags\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged patchnotes\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged hide_store\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged ModAct_1401078964_1677758714_0\u003c/th\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003cth\u003eSteam · Is there News?\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Relative concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Relative Steam price\u003c/th\u003e\\n      \u003cth\u003eITAD · Relative Best Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Best price change from previous day\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Steam price change from previous day\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Is there a discount?\u003c/th\u003e\\n      \u003cth\u003eITAD · Is there a discount?\u003c/th\u003e\\n      \u003cth\u003eCumulative · Is something happening on Steam?\u003c/th\u003e\\n      \u003cth\u003eCumulative · Is something happening?\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-01\u003c/th\u003e\\n      \u003ctd\u003e11.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.000236\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-02\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-03\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-04\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2016-12-05\u003c/th\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.00\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-25\u003c/th\u003e\\n      \u003ctd\u003e35016.0\u003c/td\u003e\\n      \u003ctd\u003e26276.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.43\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.750016\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-26\u003c/th\u003e\\n      \u003ctd\u003e30017.0\u003c/td\u003e\\n      \u003ctd\u003e22421.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.43\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.642941\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-27\u003c/th\u003e\\n      \u003ctd\u003e29568.0\u003c/td\u003e\\n      \u003ctd\u003e21949.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.43\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.633324\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-28\u003c/th\u003e\\n      \u003ctd\u003e28539.0\u003c/td\u003e\\n      \u003ctd\u003e21347.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.43\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.611284\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2023-06-29\u003c/th\u003e\\n      \u003ctd\u003e28042.0\u003c/td\u003e\\n      \u003ctd\u003e21347.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e9.89\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.43\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eTrue\u003c/td\u003e\\n      \u003ctd\u003e0.600638\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.329777\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eTrue\u003c/td\u003e\\n      \u003ctd\u003eTrue\u003c/td\u003e\\n    \u003c/tr\u003e\\n  \u003c/tbody\u003e\\n\u003c/table\u003e\\n\u003cp\u003e2402 rows × 36 columns\u003c/p\u003e\\n\u003c/div\u003e\"\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df_deeprockgalactic = processing.process_game(\\\"Deep Rock Galactic\\\", Path(\\\"data/deeprockgalactic\\\"))\\n\",\n    \"df_deeprockgalactic\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2023-07-02T06:47:44.333257903Z\",\n     \"start_time\": \"2023-07-02T06:47:44.017726541Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": \"            SteamDB · Peak concurrent players  \\\\\\n2020-12-25                             2354.0   \\n2020-12-26                             2867.0   \\n2020-12-27                             2931.0   \\n2020-12-28                             2921.0   \\n2020-12-29                             2757.0   \\n...                                       ...   \\n2023-06-25                              786.0   \\n2023-06-26                              780.0   \\n2023-06-27                              718.0   \\n2023-06-28                              696.0   \\n2023-06-29                              651.0   \\n\\n            SteamDB · Day average of concurrent players  \\\\\\n2020-12-25                                          NaN   \\n2020-12-26                                          NaN   \\n2020-12-27                                          NaN   \\n2020-12-28                                          NaN   \\n2020-12-29                                          NaN   \\n...                                                 ...   \\n2023-06-25                                        613.0   \\n2023-06-26                                        584.0   \\n2023-06-27                                        580.0   \\n2023-06-28                                        566.0   \\n2023-06-29                                        566.0   \\n\\n            SteamDB · Player count flags  SteamDB · Steam  \\\\\\n2020-12-25                           NaN            16.79   \\n2020-12-26                           NaN            16.79   \\n2020-12-27                           NaN            16.79   \\n2020-12-28                           NaN            16.79   \\n2020-12-29                           NaN            16.79   \\n...                                  ...              ...   \\n2023-06-25                           NaN            16.79   \\n2023-06-26                           NaN            16.79   \\n2023-06-27                           NaN            16.79   \\n2023-06-28                           NaN            16.79   \\n2023-06-29                           NaN            16.79   \\n\\n            SteamDB · Price flags  Google Trends · Score  \\\\\\n2020-12-25                    NaN                    NaN   \\n2020-12-26                    NaN                    NaN   \\n2020-12-27                    NaN                    NaN   \\n2020-12-28                    NaN                    NaN   \\n2020-12-29                    NaN                    NaN   \\n...                           ...                    ...   \\n2023-06-25                    NaN                   0.57   \\n2023-06-26                    NaN                   0.57   \\n2023-06-27                    NaN                   0.57   \\n2023-06-28                    NaN                   0.57   \\n2023-06-29                    NaN                   0.57   \\n\\n            Steam · Count of News tagged no_tags  ITAD · Best Price  \\\\\\n2020-12-25                                   0.0              16.79   \\n2020-12-26                                   0.0              16.79   \\n2020-12-27                                   0.0              16.79   \\n2020-12-28                                   0.0              16.79   \\n2020-12-29                                   0.0              16.79   \\n...                                          ...                ...   \\n2023-06-25                                   0.0              12.59   \\n2023-06-26                                   0.0              12.59   \\n2023-06-27                                   0.0              12.59   \\n2023-06-28                                   0.0              12.59   \\n2023-06-29                                   0.0              16.79   \\n\\n            ITAD · Best Regular Price  ITAD · Worst Regular Price  ...  \\\\\\n2020-12-25                      16.79                       16.79  ...   \\n2020-12-26                      16.79                       16.79  ...   \\n2020-12-27                      16.79                       16.79  ...   \\n2020-12-28                      16.79                       16.79  ...   \\n2020-12-29                      16.79                       16.79  ...   \\n...                               ...                         ...  ...   \\n2023-06-25                      16.79                       29.99  ...   \\n2023-06-26                      16.79                       29.99  ...   \\n2023-06-27                      16.79                       29.99  ...   \\n2023-06-28                      16.79                       29.99  ...   \\n2023-06-29                      16.79                       29.99  ...   \\n\\n            Steam · Is there News?  SteamDB · Relative concurrent players  \\\\\\n2020-12-25                   False                               0.743525   \\n2020-12-26                   False                               0.905559   \\n2020-12-27                   False                               0.925774   \\n2020-12-28                   False                               0.922615   \\n2020-12-29                   False                               0.870815   \\n...                            ...                                    ...   \\n2023-06-25                   False                               0.248263   \\n2023-06-26                   False                               0.246368   \\n2023-06-27                   False                               0.226785   \\n2023-06-28                   False                               0.219836   \\n2023-06-29                   False                               0.205622   \\n\\n            SteamDB · Relative Steam price  ITAD · Relative Best Price  \\\\\\n2020-12-25                             1.0                    1.000000   \\n2020-12-26                             1.0                    1.000000   \\n2020-12-27                             1.0                    1.000000   \\n2020-12-28                             1.0                    1.000000   \\n2020-12-29                             1.0                    1.000000   \\n...                                    ...                         ...   \\n2023-06-25                             1.0                    0.749851   \\n2023-06-26                             1.0                    0.749851   \\n2023-06-27                             1.0                    0.749851   \\n2023-06-28                             1.0                    0.749851   \\n2023-06-29                             1.0                    1.000000   \\n\\n            ITAD · Best price change from previous day  \\\\\\n2020-12-25                                         NaN   \\n2020-12-26                                         0.0   \\n2020-12-27                                         0.0   \\n2020-12-28                                         0.0   \\n2020-12-29                                         0.0   \\n...                                                ...   \\n2023-06-25                                         0.0   \\n2023-06-26                                         0.0   \\n2023-06-27                                         0.0   \\n2023-06-28                                         0.0   \\n2023-06-29                                         4.2   \\n\\n            SteamDB · Steam price change from previous day  \\\\\\n2020-12-25                                             NaN   \\n2020-12-26                                            -0.0   \\n2020-12-27                                            -0.0   \\n2020-12-28                                            -0.0   \\n2020-12-29                                            -0.0   \\n...                                                    ...   \\n2023-06-25                                            -0.0   \\n2023-06-26                                            -0.0   \\n2023-06-27                                            -0.0   \\n2023-06-28                                            -0.0   \\n2023-06-29                                            -0.0   \\n\\n            SteamDB · Is there a discount?  ITAD · Is there a discount?  \\\\\\n2020-12-25                           False                        False   \\n2020-12-26                           False                        False   \\n2020-12-27                           False                        False   \\n2020-12-28                           False                        False   \\n2020-12-29                           False                        False   \\n...                                    ...                          ...   \\n2023-06-25                           False                        False   \\n2023-06-26                           False                        False   \\n2023-06-27                           False                        False   \\n2023-06-28                           False                        False   \\n2023-06-29                           False                        False   \\n\\n            Cumulative · Is something happening on Steam?  \\\\\\n2020-12-25                                          False   \\n2020-12-26                                          False   \\n2020-12-27                                          False   \\n2020-12-28                                          False   \\n2020-12-29                                          False   \\n...                                                   ...   \\n2023-06-25                                          False   \\n2023-06-26                                          False   \\n2023-06-27                                          False   \\n2023-06-28                                          False   \\n2023-06-29                                          False   \\n\\n            Cumulative · Is something happening?  \\n2020-12-25                                 False  \\n2020-12-26                                 False  \\n2020-12-27                                 False  \\n2020-12-28                                 False  \\n2020-12-29                                 False  \\n...                                          ...  \\n2023-06-25                                 False  \\n2023-06-26                                 False  \\n2023-06-27                                 False  \\n2023-06-28                                 False  \\n2023-06-29                                 False  \\n\\n[917 rows x 23 columns]\",\n      \"text/html\": \"\u003cdiv\u003e\\n\u003cstyle scoped\u003e\\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\u003c/style\u003e\\n\u003ctable border=\\\"1\\\" class=\\\"dataframe\\\"\u003e\\n  \u003cthead\u003e\\n    \u003ctr style=\\\"text-align: right;\\\"\u003e\\n      \u003cth\u003e\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Peak concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Day average of concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Player count flags\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Steam\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Price flags\u003c/th\u003e\\n      \u003cth\u003eGoogle Trends · Score\u003c/th\u003e\\n      \u003cth\u003eSteam · Count of News tagged no_tags\u003c/th\u003e\\n      \u003cth\u003eITAD · Best Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Best Regular Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Worst Regular Price\u003c/th\u003e\\n      \u003cth\u003e...\u003c/th\u003e\\n      \u003cth\u003eSteam · Is there News?\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Relative concurrent players\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Relative Steam price\u003c/th\u003e\\n      \u003cth\u003eITAD · Relative Best Price\u003c/th\u003e\\n      \u003cth\u003eITAD · Best price change from previous day\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Steam price change from previous day\u003c/th\u003e\\n      \u003cth\u003eSteamDB · Is there a discount?\u003c/th\u003e\\n      \u003cth\u003eITAD · Is there a discount?\u003c/th\u003e\\n      \u003cth\u003eCumulative · Is something happening on Steam?\u003c/th\u003e\\n      \u003cth\u003eCumulative · Is something happening?\u003c/th\u003e\\n    \u003c/tr\u003e\\n  \u003c/thead\u003e\\n  \u003ctbody\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2020-12-25\u003c/th\u003e\\n      \u003ctd\u003e2354.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.743525\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.000000\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2020-12-26\u003c/th\u003e\\n      \u003ctd\u003e2867.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.905559\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.000000\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2020-12-27\u003c/th\u003e\\n      \u003ctd\u003e2931.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003e...\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003e0.925774\u003c/td\u003e\\n      \u003ctd\u003e1.0\u003c/td\u003e\\n      \u003ctd\u003e1.000000\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e-0.0\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n      \u003ctd\u003eFalse\u003c/td\u003e\\n    \u003c/tr\u003e\\n    \u003ctr\u003e\\n      \u003cth\u003e2020-12-28\u003c/th\u003e\\n      \u003ctd\u003e2921.0\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003eNaN\u003c/td\u003e\\n      \u003ctd\u003e0.0\u003c/td\u003e\\n      \u003ctd\u003e16.79\u003c/td\u003e\\n  ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteffo99%2Funimore-bda-3-steffo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteffo99%2Funimore-bda-3-steffo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteffo99%2Funimore-bda-3-steffo/lists"}