“Lo sai che la Tachiprina 500
Se ne prendi due diventa mille
Si vede che hai provato qualcosina parlano
Parlano le tue pupille
E adesso che mi prendi per la mano vacci piano
Che se mi stringi così”
-Calcutta
Il Ministero della Salute ha un set di open data sui farmaci più distribuiti, così questa mattina ho deciso di studiarlo (trovate qui il dataset)
Anticipo che dal punto di vista metodologico ho aggregato tutti i farmaci che avessero lo stessa parola iniziale.
Ad esempio la Tachipirina è stata aggregata in un’unica variabile sia che fosse da 500, sia da 1000, per via orale e supposte.
Per motivi di tempo ho potuto indagare quali di questi farmaci fossero anche sponsorizzati in TV. C’è una variabile categorica “Modalità” che può assumere o il valore “SOP” Senza Obbligo di Ricetta) o OTC (Over The Counter) farmaci da banco o di automedicazione per i quali è prevista pubblicità.
Nel prossimo post approfondirò la relazione tra il consumo di farmaci e la loro sponsorizzazione in TV.
I primi 5 farmaci con il più alto tasso di distribuzione in Italia nel primo semestre 2016 sono stati:
- Tachipirina(8+Mil di confezioni)
- Enterogermina(3+Mil di confezioni)
- Voltaren
- Rinazina
- Aspirina

Sempre per chiarezza metodologica “Glicerolo“, sono le supposte Carlo Erba.
80% del tempo è stato impiegato per la pulizia del dataset.
Nello specifico ho dovuto saltare le prime righe perché si presentavano come vedete in foto.
Inoltre la tabulazione non era codificata secondo ‘utf-8’ ma ho dovuto utilizzare la “ISO-8859-1” ed al posto della virgola il separatore utilizzato era ‘;‘
I valori numerici dei quantitativi distribuiti erano nel seguente formato “1.000.000” è stato necessario rimuovere con una funzione il punto per poter convertire la stringa in numero.
A questo link trovate una domanda di stack overflow che mi ha aiutato nel leggere con padas il csv perchè non avevo capito subito che c’era un problema nella lettura e codifica del file, questa (link) invece per l’estrazione della prima parola quando ci sono dei caratteri speciali iniziali.
Grazie per aver letto l’articolo!
Se ti è piaciuto ricondividilo, se pensi meriti delle correzioni scrivimi pure 🙂
Un abbraccio
Andrea
# Import pandas
import pandas as pd
import numpy as np
# Import plotting modules
import matplotlib.pyplot as plt
import re
file_name='C_17_dataset_15_download_itemDownload_0_upFile.csv'
csv=pd.read_csv(file_name,sep=';',encoding="ISO-8859-1",skiprows=1)
csv.info()
#Visualizzo il titolo dei farmaci
#Questo è necessario per il successivo
#processo di pulizia e aggregazione
print(csv['Denominazione della confezione'])
csv_mod=csv.dropna().copy()
csv_mod['Farmaco']=None
#Un prodotto Rinazina aveva ** ad inizio stringa perchè il ministero doveva confermare il dato
#per comodità ho rimosso **
csv_mod['Denominazione della confezione']=csv_mod['Denominazione della confezione'].str.replace('*','')
#Aggiungiamo la colonna Farmaco al nostro DataFrame
csv_mod['Farmaco']=None
def primaparola(colonna_di_testo):
pattern=r'\W*(\w[^,. !?"]*)'
return re.match(pattern,colonna_di_testo).group()
print(type(csv_mod['Denominazione della confezione']))
estratto=csv_mod['Denominazione della confezione'].apply(primaparola)
csv_mod['Farmaco']=estratto
csv_mod['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali']=pd.to_numeric(csv_mod['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'].str.replace('.',''))
grouped=csv_mod.groupby(by='Farmaco').sum()
print(csv_mod.info())
df_farmaco=grouped['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'].sort_values(ascending=False)
ln=np.arange(0,len(df_farmaco))
label=df_farmaco.index
label=df_farmaco.index
#Rappresentiamo in nostri dati attraverso uno scatter plot
plt.scatter(ln,df_farmaco)
plt.title('Medicinali senza obbligo di prescrizione più venduti primo semestre 2016 alle farmacie aperte al pubblico ed agli esercizi commerciali')
plt.ylabel('# di confezioni vendute')
plt.xticks(ln,(label) ,rotation=90)
plt.text(10, 4, 'Elaborazioni Ing. Andrea Ciufo',
fontsize=15, color='gray',
ha='center', va='top', alpha=0.5)
plt.rcParams["figure.figsize"] = (15,4)
plt.show()
[youtube https://www.youtube.com/watch?v=UW1DjnCBcSY]