I Farmaci più venduti in Italia sono i farmaci per i quali è prevista la pubblicità.
I Farmaci senza obbligo di ricetta sul sito del Ministero della Salute sono divisi in OCT e SOP:
- Senza Obbligo di Prescrizione
- Overt The Counter o farmaci da banco o farmaci di automedicazione per i quali è prevista la
pubblicità
Dati alla mano del Ministero della Salute se si puliscono un po’ è possibile realizzare un grafico dove in blu ho rappresentati i SOP ed in Rosso gli OTC.
Ad essere rigorosi si deve parlare di “distribuzione” dei farmaci perchè questo è il titolo riportato sulla descrizione del dataset, ma questo valore è strettamente correlato con la vendita.
Aggregando le due categorie e sommando per categoria le “Quantità confezioni fornite alle farmacie ed agli esercizi commerciali” si ottiene che, nel primo semestre 2016*:

Sono 30,3 Milioni le confezioni di farmaci OTC distribuite contro i 12,6 Milioni di confezioni SOP

Mi scuso se non ho formattato adeguatamente l’asse del y, è espresso come potenza di 10^7 (quindi 3*10^7= 30Milioni)
Sulla base di questi risultati mi sento di scrivere tre affermazioni:
- I medicinali equivalenti sono poco utilizzati, nonostante l’obbligo del farmacista nel momento dell’acquisto di evidenziare la possibilità di questa scelta
- Potrebbe esserci un consumo eccessivo di medicinali con ricadute sulla salute legato alla pubblicità e non ad un confronto corretto con il proprio medico di base, ma non sono un medico questa è un valutazione che va oltre le mie competenze
- E’ importante per permettere una analisi più corretta che vengano pubblicati
- I Dati più recenti relativi al 2017 e 2018
- I dati relativi ai farmaci equivalenti per valutare eventuali correlazioni e confronti, anche se non sono tra i 50 più venduti
Per onestà intellettuale ho scritto al Ministero, sia per chiedere un aggiornamento del dataset sia per avere informazioni sui farmaci equivalenti, se dovesse esserci una risposta vi aggiornerò.
Di seguito trovate invece tutto il lavoro svolto in Python per la selezione, analisi e visualizzazione dei dati a partire dal dataset originale.
In particolare successivamente all’aggregazione tramite metodo groupby in pandas del dataframe ho aggiunto una colonna che avesse come label la “Modalità e Prescrizione” del farmaco.
Questa colonna è stata aggiunta attraverso una unione (merge) con un dataframe contenente solo la lista unica dei Farmaci e la “Modalità di Prescrizone” che avevo estratto dal dataframe originario.
Grazie per aver letto l’articolo!
Se ti è piaciuto o lo trovi utile 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
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()
estratto=csv_mod['Denominazione della confezione'].apply(primaparola)
#Aggiungo la colonna Farmaco al mio dataframe per la successiva aggregazione
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('.',''))
#In questa sezione realiziamo un dataframe
#Contenente le categorie uniche di Farmaco
#Per fare questo
#Rimuoviamo i duplicati
selezione= csv_mod.drop_duplicates(subset=['Farmaco']).copy()
#Selezioniamo solo le colonne di interesse che andranno
#a costituire il nostro
#dataframe
selezione=selezione[['Modalità\nPrescrizione','Farmaco']]
#Iniziamo il nostro lavoro di Aggregazione
#e visualizzazione in ordine
#Decrescente per numero di confezioni
#fornite alle farmacie
grouped=csv_mod.groupby(by='Farmaco').sum()
grouped=grouped.sort_values(by='Quantità confezioni fornite alle farmacie ed agli esercizi commerciali',ascending=False)
print("Grouped Prima del reset dell'index")
print(grouped.head(2))
#Il reset dell'index serve per avere il farmaco come colonna e non come index
grouped=grouped.reset_index()
print("Grouped Dopo il reset dell' index")
print(grouped.head(2))
#Effettuiamo l'unione tra i due dataframe
#L'unione è fatta sfruttando la colonna Farmaco
df_farma=grouped.merge(selezione,on='Farmaco')
print(df_farma.head(3))
print(grouped.info())
#tu hai dei farmaci con lo stessa label in una colonna ma una diversa in un'altra come fare a conoscere se questa affermazione è vera?
#Puoi crare un dizionario che associ ->tachipirina a sop e rinazina a otc
#print(csv_mod.info())
##### Ora che abbiamo aggiunto la colonna che definisce
#quali farmaci sono SOP e quali OTC possiamo
#realizzare il nostro scatter plot con colori differenti
df_farma=df_farma.sort_values(by='Quantità confezioni fornite alle farmacie ed agli esercizi commerciali',ascending=False)
label=df_farma['Farmaco']
ln=np.arange(0,len(df_farma))
#Creaiamo due dataframe uno per OTC ed uno per i SOP
df_otc=df_farma[df_farma['Modalità\nPrescrizione']=='OTC']
df_sop=df_farma[df_farma['Modalità\nPrescrizione']=='SOP']
#L'index sarà necessario per la corretta
#disposizione sull'asse delle x delle corrispoondenti y
index_otc=df_otc.index
index_sop=df_sop.index
otc_plot=plt.scatter(index_otc,df_otc['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'], color='red')
sop_plot=plt.scatter(index_sop,df_sop['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'], color='blue')
plt.ylabel('# di confezioni distribuite')
plt.xticks(ln,(label) ,rotation=90)
plt.title('Medicinali senza obbligo di prescrizione più distribuiti primo semestre 2016 alle farmacie aperte al pubblico ed agli esercizi commerciali')
plt.text(10, 4, 'Elaborazioni Ing. Andrea Ciufo',
fontsize=15, color='gray',
ha='center', va='top', alpha=0.5)
plt.legend((sop_plot,otc_plot),('SOP= Senza Obbligo di Prescrizione','OTC= Over The Counter o farmaci da banco o farmaci di automedicazione per i quali è prevista la pubblicità'),loc='upper right')
plt.rcParams["figure.figsize"] = (15,4)
plt.show()
#In questa sezione invece Aggreghiamo
#Tutti i Farmaci SOP e tutti i farmaci OTC
#Per visualizzarli attraverso un Bar Plot
#Per motivi di tempo non sono riuscito a migliorare
#L'asse delle Y dove i valori sono espressi
#In termini di x*e7
sum_otc=df_otc.groupby(by='Modalità\nPrescrizione').sum()
sum_sop=df_sop.groupby(by='Modalità\nPrescrizione').sum()
print(sum_otc['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'])
print(sum_sop['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'])
sum_df_y=[sum_otc['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'].values, sum_sop['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'].values]
sum_df_x=['OTC','SOP']
sum_df = pd.DataFrame({'Modalità Prescrizione':sum_df_x, 'Quantità confezioni fornite alle farmacie ed agli esercizi commerciali':sum_df_y})
ind=np.arange(len(sum_df_y))
plt.bar(ind,sum_df['Quantità confezioni fornite alle farmacie ed agli esercizi commerciali'], width=0.2)
plt.rcParams["figure.figsize"] = (7,3)
plt.title('Medicinali senza obbligo di prescrizione più distribuiti primo semestre 2016')
plt.ylabel('# di confezioni distribuite')
plt.xticks(ind,(sum_df_x) ,rotation=90)
plt.text(0.5, 0.5, 'Elaborazioni Ing. Andrea Ciufo',
fontsize=15, color='gray',
ha='center', va='top', alpha=0.5)
plt.show()
*il dataset più recente disponibile al 25 Ottobre 2018 sul sito del Ministero