MS_2







Azi continuam sa exploram raportul de achizitii al Ministerului Sanatatii din primul semestru al anului 2017.
Data trecuta am facut cunostinta cu baza de date, am identificat firmele “norocoase” si am constatat disfunctii atat in procesul de constructie a bazei de date, cat si in denumirile-cod ale produselor achizitionate.
Plus alte cateva chestii – puteti citi AICI <a href = “http://musetoiu.ro/hai-sa-scobim-prin-achizitiile-ministerului-sanatatii/"></a> prima parte.
Azi continuam analiza, sa vedem ce mai gasim!
Am inceput un nou document jupyter, asa ca trebuie sa reiau primii pasi: citirea bazei de date, eliminarea inregistrarii gresite (identificata data trecuta).

In [1]:
import pandas as pd
path = '/Users/dan/Downloads/'
raport = 'raportms0106.2017.xlsx'
df = pd.read_excel(path + raport)
df.drop(df.index[23714], inplace = True)
df.reset_index(inplace = True)
df.head()
Out[1]:
index Denumire OF castigator CUI Of castigator LocalitateOfCastigator Adresa Of castigator Tara Of castigator Obiect Contract Tip Procedura Denumire AC CUI AC Nr anunt atribuire Data anunt atrib Contract Nr Data contract Valoare contract RON Cod CPV are contracte subsecvente valoare contracte subsecvente
0 0 A&A PRO DIAGNOSTIC S.R.L. RO 23068692 Bucuresti STR. GRAULUI, NR. 19, SECTOR 4 Romania Contract de Furnizare de react Cerere de oferta / Procedura simplificata Spitalul de Boli infectioase si Psihiatrie Bai… 3627501 205395 2017-01-17 12:52:41.637 257 2017-01-16 510 Reactivi de laborator (Rev.2) Nu 0.0
1 1 A&A PRO DIAGNOSTIC S.R.L. RO 23068692 Bucuresti STR. GRAULUI, NR. 19, SECTOR 4 Romania Contract de Furnizare de react Cerere de oferta / Procedura simplificata Spitalul de Boli infectioase si Psihiatrie Bai… 3627501 205395 2017-01-17 12:52:41.637 257 2017-01-16 922.5 Reactivi de laborator (Rev.2) Nu 0.0
2 2 A&A PRO DIAGNOSTIC S.R.L. RO 23068692 Bucuresti STR. GRAULUI, NR. 19, SECTOR 4 Romania Contract de Furnizare de react Cerere de oferta / Procedura simplificata Spitalul de Boli infectioase si Psihiatrie Bai… 3627501 205395 2017-01-17 12:52:41.637 257 2017-01-16 5500 Reactivi de laborator (Rev.2) Nu 0.0
3 3 A&A PRO DIAGNOSTIC S.R.L. RO 23068692 Bucuresti STR. GRAULUI, NR. 19, SECTOR 4 Romania Contract de Furnizare de react Cerere de oferta / Procedura simplificata Spitalul de Boli infectioase si Psihiatrie Bai… 3627501 205395 2017-01-17 12:52:41.637 260 2017-01-16 4650 Reactivi de laborator (Rev.2) Nu 0.0
4 4 A&A PRO DIAGNOSTIC S.R.L. RO 23068692 Bucuresti STR. GRAULUI, NR. 19, SECTOR 4 Romania Contract de Furnizare de react Cerere de oferta / Procedura simplificata Spitalul de Boli infectioase si Psihiatrie Bai… 3627501 205395 2017-01-17 12:52:41.637 262 2017-01-16 1782 Reactivi de laborator (Rev.2) Nu 0.0
In [2]:
# Sa vedem si denumirile coloanelor:
df.axes
Out[2]:
[RangeIndex(start=0, stop=29249, step=1),
 Index(['index', 'Denumire OF castigator', 'CUI Of castigator',
        'LocalitateOfCastigator', 'Adresa Of castigator', 'Tara Of castigator',
        'Obiect Contract', 'Tip Procedura', 'Denumire AC', 'CUI AC',
        'Nr anunt atribuire', 'Data anunt atrib', 'Contract Nr',
        'Data contract', 'Valoare contract RON', 'Cod CPV',
        'are contracte subsecvente', 'valoare contracte subsecvente'],
       dtype='object')]

Bun!
Azi, hai sa ne concentram pe unitatile din subordinea MS care au facut achizitii.
In primul rand, sa vedem cate sunt!

In [3]:
print('Un numar de {0} unitati din subordinea MS au facut achizitii'.format(len(df['Denumire AC'].unique())))
Un numar de 196 unitati din subordinea MS au facut achizitii

Sa vedem si topul dupa numarul de contracte de achizitie

In [4]:
df['Denumire AC'].value_counts()
Out[4]:
Spitalul Clinic de Urgenta Bucuresti                                            1598
SPITALUL CLINIC JUDETEAN MURES                                                  1351
SPITALUL CLINIC JUDETEAN DE URGENTA CLUJ                                        1229
SPITALUL CLINIC JUDETEAN DE URGENTA SF.SPIRIDON IASI                            1133
Institutul Oncologic Prof. Dr. I. Chiricuta Cluj-Napoca                          991
Institutul de Boli Infectioase "Prof. Dr. Matei Bals"                            949
SPITALUL CLINIC JUDETEAN DE URGENTA BRASOV                                       899
SPITALUL UNIVERSITAR DE URGENTA ELIAS                                            673
Spitalul Clinic Municipal de Urgenta Timisoara                                   611
SPITAL CLINIC JUDETEAN DE URGENTA ORADEA                                         584
SPITALUL JUDETEAN DE URGENTA VALCEA                                              582
SPITALUL JUDETEAN DE URGENTA TARGOVISTE                                          535
SPITALUL CLINIC DE URGENTA SF.IOAN                                               527
INSTITUTUL DE URGENTA PENTRU BOLI CARDIOVASCULARE SI TRANSPLANT TARGU MURES      523
Spitalul Judetean de Urgenta Tulcea                                              499
SPITALUL CLINIC DE RECUPERARE IASI                                               497
SPITALUL JUDETEAN DE URGENTA PLOIESTI                                            483
Spitalul Clinic C.F. nr. 2 Bucuresti                                             482
SPITALUL JUDETEAN SATU MARE                                                      470
SPITAL CLINIC DE BOLI INFECTIOASE IASI                                           458
SPITALUL CLINIC JUDETEAN DE URGENTA SIBIU                                        454
Spitalul Judetan de Urgenta "Mavromati" Botosani                                 423
Spitalul Clinic Judetean de Urgenta Craiova                                      413
SPITALUL ORASENESC MIZIL                                                         409
Spitalul Clinic Judetean de Urgenta"Sfantul Apostol Andrei"                      394
INSTITUTUL INIMII "Niculae Stancioiu" Cluj-Napoca                                350
SPITALUL CLINIC COLTEA                                                           349
SPITALUL JUDETEAN RESITA                                                         342
SPITALUL JUDETEAN TG-JIU                                                         330
Spital Pneumoftiziologie Izvoru                                                  313
                                                                                ... 
Spitalul de Pneumoftiziologie Calarasi                                             2
Spitalul Judetean de Urgenta Miercurea Ciuc                                        2
Institutul de Boli Cardiovasculare Prof. Dr. I. M. Georgescu                       2
SANATORIUL PNEUMOFTIZIOLOGIE BRAD                                                  2
SPITALUL JUDETEAN DE URGENTA ALEXANDRIA                                            2
Institutul de Diabet, Nutritie si Boli Metabolice "Prof. dr. N. C. Paulescu"       2
Spitalul Judetean de Urgenta Slobozia                                              2
SPITALUL CLINIC DR. C. I. PARHON                                                   2
SPITALUL DE PSIHIATRIE SI PENTRU MASURI DE SIGURANTA JEBEL                         1
SPITALUL DE PSIHIATRIE CRONICI DUMBRAVENI                                          1
SPITALUL ORASENESC BUMBESTI-JIU                                                    1
SPITALUL ORASENESC ABRUD                                                           1
SPITALUL ORASENESC HUEDIN                                                          1
SPITALUL ORASENESC INEU                                                            1
SPITALUL MUNICIPAL ONESTI                                                          1
SPITALUL DE PSIHIATRIE TITAN DR.CONSTANTIN GORGOS                                  1
SPITAL DE PNEUMOFTIZIOLOGIE Dr. Nicolae Rusdea Baia Mare                           1
SPITALUL MUNICIPAL LUPENI                                                          1
SPITALUL MUNICIPAL GHERLA                                                          1
SANATORIUL BALNEOCLIMATERIC DE COPII BUSTENI                                       1
Spitalul orasenesc Buhusi                                                          1
SPITAL GENERAL C.F. SIMERIA                                                        1
SPITALUL MUNICIPAL SIGHISOARA                                                      1
SPITALUL MUNICIPAL URZICENI                                                        1
Spital Dr.C.T.Sparchez                                                             1
SPITALUL DE PSIHIATRIE "DR. GH. PREDA" SIBIU                                       1
SPITALUL MUNICIPAL DE URGENTA MOINESTI                                             1
Spitalul Municipal "Dr. Teodor Andrei" Lugoj                                       1
Spitalul de Boli Cronice Calinesti                                                 1
Spitalul Municipal de Urgenta Pascani                                              1
Name: Denumire AC, Length: 196, dtype: int64

Cum era de asteptat, cele mai multe achizitii au fost facute de unitatile medicale din orasele mari.
Hai sa vedem ce tipuri de achizitii au facut!

In [5]:
d = {}
for i in range(0, len(df)):
    d.setdefault(df['Denumire AC'][i], []).append(df['Tip Procedura'][i])
spitale = pd.DataFrame()
spitale['nume'] = d.keys()
spitale['achizitie'] = d.values()
spitale.head()
Out[5]:
nume achizitie
0 Spitalul de Boli infectioase si Psihiatrie Bai… [Cerere de oferta / Procedura simplificata, Ce…
1 INSTITUTUL INIMII “Niculae Stancioiu” Cluj-Napoca [Cerere de oferta / Procedura simplificata, Ce…
2 Spitalul de REcuperare Cardiovasculara ” Dr. B… [Cerere de oferta / Procedura simplificata, Ce…
3 SPITALUL MUNICIPAL OLTENITA [Cerere de oferta / Procedura simplificata, Ce…
4 SPITALUL JUDETEAN DE URGENTA BISTRITA [Cerere de oferta / Procedura simplificata, Ce…
In [6]:
tip_achizitie = []
for i in range(0, len(spitale)):
    a = set(spitale['achizitie'][i])
    b = list(a)
    tip_achizitie.append(b)
spitale['tip_achizitie'] = tip_achizitie
spitale.head()
Out[6]:
nume achizitie tip_achizitie
0 Spitalul de Boli infectioase si Psihiatrie Bai… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata]
1 INSTITUTUL INIMII “Niculae Stancioiu” Cluj-Napoca [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li…
2 Spitalul de REcuperare Cardiovasculara ” Dr. B… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li…
3 SPITALUL MUNICIPAL OLTENITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata]
4 SPITALUL JUDETEAN DE URGENTA BISTRITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata]
In [7]:
simplu = [x for x in spitale['tip_achizitie'] if x == ['Cerere de oferta / Procedura simplificata']]
len(simplu)
Out[7]:
94

Asadar, 94 din cele 196 de unitati medicale au facut DOAR (ca sa nu zic DECAT) achizitii prin procedura simplificata.
Aka fara licitatie!

Oare exista si unitati medicale care au facut achizitii DOAR (ca sa nu zic DECAT) prin licitatie?

In [8]:
complicat = [x for x in spitale['tip_achizitie'] if x == ['Licitatie deschisa']]
len(complicat)
Out[8]:
31

Uite, dom’ne, ca exista!
Hai sa facem si un grafic ca sa se vada mai bine!
Presupunem ca celelalte unitati (pana la 196) au facut si de-alea, si de-alea

In [10]:
import matplotlib.pyplot as plt

labels_1 = 'Doar fara licitatie', 'Doar cu licitatie', 'Si de-alea, si de-alea'
sizes_1 = [len(simplu), len(complicat), len(df['Denumire AC'].unique()) - len(simplu) - len(complicat)]
explode = (0.1, 0.1, 0.1)

fig1, ax1 = plt.subplots()

ax1.pie(sizes_1, explode=explode, labels=labels_1, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal') 

plt.title('Numar de clinici in functie de modul in care au facut achizitiile')
plt.show()

Mdap, se vede mai bine!
Se vede ca aproape jumatate dintre unitatile medicale care au cumparat chestii, au facut-o fara licitatie.
Unitatile care au achizitionat chestii doar prin licitate sunt nici 16 la suta.
Interesant!

Oare despre cati bani vorbim in cazul fiecaruit tip de achizitie?
Hmmm… sa vedem cum facem!

In [11]:
D = {}
for i in range(0, len(df)):
    D.setdefault(df['Denumire AC'][i], []).append(df['Valoare contract RON'][i])
spitale['bani'] = D.values()
spitale.head()
Out[11]:
nume achizitie tip_achizitie bani
0 Spitalul de Boli infectioase si Psihiatrie Bai… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [510, 922.5, 5500, 4650, 1782, 425, 665, 2997,…
1 INSTITUTUL INIMII “Niculae Stancioiu” Cluj-Napoca [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li… [23965, 22200, 7195, 116700, 468369, 2300, 487…
2 Spitalul de REcuperare Cardiovasculara ” Dr. B… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li… [1393, 2716, 51703.2, 12621.2, 22594.81, 34608…
3 SPITALUL MUNICIPAL OLTENITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [2560, 12460, 24224.2, 5141.55, 37671.9, 2175,…
4 SPITALUL JUDETEAN DE URGENTA BISTRITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [6350, 1560, 2400, 297.6, 547725, 44635.78, 80…

Kilu’ meu, iar am uitat sa adun sumele…

In [12]:
total_bani = []
for i in range (0, len(spitale)):
    a = sum(spitale['bani'][i])
    total_bani.append(a)
spitale['suma_totala'] = total_bani
spitale.head()
Out[12]:
nume achizitie tip_achizitie bani suma_totala
0 Spitalul de Boli infectioase si Psihiatrie Bai… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [510, 922.5, 5500, 4650, 1782, 425, 665, 2997,… 608364.67
1 INSTITUTUL INIMII “Niculae Stancioiu” Cluj-Napoca [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li… [23965, 22200, 7195, 116700, 468369, 2300, 487… 20262080.95
2 Spitalul de REcuperare Cardiovasculara ” Dr. B… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li… [1393, 2716, 51703.2, 12621.2, 22594.81, 34608… 4953690.07
3 SPITALUL MUNICIPAL OLTENITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [2560, 12460, 24224.2, 5141.55, 37671.9, 2175,… 796910.37
4 SPITALUL JUDETEAN DE URGENTA BISTRITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [6350, 1560, 2400, 297.6, 547725, 44635.78, 80… 2283274.97
In [13]:
bani_simplu = []
bani_complicat = []
bani_mixt = []

for i in range (0, len(spitale)):
    if spitale['tip_achizitie'][i] == ['Cerere de oferta / Procedura simplificata']:
        bani_simplu.append(spitale['suma_totala'][i])
    elif spitale['tip_achizitie'][i] == ['Licitatie deschisa']:
        bani_complicat.append(spitale['suma_totala'][i])
    else:
        bani_mixt.append(spitale['suma_totala'][i])
print(len(bani_simplu))
print(len(bani_complicat))
print(len(bani_mixt))
94
31
71
In [14]:
labels_2 = 'Cheltuieli doar fara licitatie', 'Cheltuieli doar cu licitatie', 'Cheltuieli mixte'
sizes_2 = [sum(bani_simplu), sum(bani_complicat), sum(bani_mixt)]
explode = (0.1, 0.1, 0.1)

fig1, ax1 = plt.subplots()

ax1.pie(sizes_2, explode=explode, labels=labels_2, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal') 
plt.title('Bani cheltuiti de unitatile sanitare')
plt.show()

Mai tineti minte de data trecuta, cand va avertizam cat de usor se spun minciuni cu ajutorul statisticilor adevarate?
Graficul de mai sus are ca baza de calcul suma TOTALA cheltuita de unitatile medicale, cu sau fara licitatie, sau mixt.
Ideea e ca fiecare cheltuiala este fie FARA licitatie, fie CU licitatie.
Pur si simplu, nu se poate si CU si FARA.
Semnificatia cheltuielilor “mixte” din graficul de mai sus este urmatoarea: vorbim de cheltuielile “globale” ale fiecarei unitati.
Faptul ca aproape 70 dintre unitati au cheltuit banii in ambele feluri, cu si fara licitatie, are sens.
Daca insa vrem sa aflam ce procent din totalul ala de un miliard s-au cheltuit fara licitatie, trebuie sa procedam altfel.
Daca inca nu v-ati prins, keep your eyes wide open!

In [15]:
fara_licitatie = []
cu_licitatie = []
combinate = []
for i in range (0, len(df)): # adica ne ducem direct la sursa
    if df['Tip Procedura'][i] == 'Cerere de oferta / Procedura simplificata':
        fara_licitatie.append(df['Valoare contract RON'][i])
    elif df['Tip Procedura'][i] == 'Licitatie deschisa':
        cu_licitatie.append(df['Valoare contract RON'][i])
    else:
        combinate.append(df['Valoare contract RON'][i])
print(len(fara_licitatie))
print(len(cu_licitatie))
print(len(combinate))
5803
23446
0

Cum era de asteptat, cheltuielile “mixte” sunt zero!
Acum putem sa ne holbam linistiti la sumele cheltuite CU si FARA licitatie!

In [16]:
labels_3 = 'Fara licitatie', 'Cu licitatie', 'Combinat'
sizes_3 = [sum(fara_licitatie), sum(cu_licitatie), sum(combinate)]
explode = (0.1, 0.1, 0.1)

fig1, ax1 = plt.subplots()

ax1.pie(sizes_3, explode=explode, labels=labels_3, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal') 
plt.title('Cum s-a cheltuit miliardul')
plt.show()

Cam asa arata adevarul statistic: o cincime din bugetul de achizitii de un miliard a fost cheltuit fara licitatie.
Nu-mi dau cu parerea daca e mult, putin sau normal – asta e treaba altora!

Hai sa vedem primul si ultimul grafic, unul langa altul, ca oricum aveam nevoie de o poza pentru postarea de pe blog.

In [17]:
labels_3 = 'Fara licitatie', 'Cu licitatie', 'Combinat'
sizes_3 = [sum(fara_licitatie), sum(cu_licitatie), sum(combinate)]

labels_1 = 'Doar fara licitatie', 'Doar cu licitatie', 'Si de-alea, si de-alea'
sizes_1 = [len(simplu), len(complicat), len(df['Denumire AC'].unique()) - len(simplu) - len(complicat)]

explode = (0.1, 0.1, 0.1)

fig, (ax1, ax2) = plt.subplots(1, 2)

ax1.pie(sizes_3, explode=explode, labels=labels_3, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal')
ax1.set_title('Cheltuieli')

ax2.pie(sizes_1, explode=explode, labels=labels_1, autopct='%1.1f%%', shadow=True, startangle=90)
ax2.axis('equal')
ax2.set_title('Clinici')

plt.show()

Daca vreodata vreti sa faceti prezentari mai bune ca asta, incercati cu seaborn.
Hai sa va arat diferenta, pe acelasi cod!

In [18]:
import seaborn as sns
sns.set_palette('Reds')

# Si de aici codul este acelasi

labels_3 = 'Fara licitatie', 'Cu licitatie', 'Combinat'
sizes_3 = [sum(fara_licitatie), sum(cu_licitatie), sum(combinate)]

labels_1 = 'Doar fara licitatie', 'Doar cu licitatie', 'Si de-alea, si de-alea'
sizes_1 = [len(simplu), len(complicat), len(df['Denumire AC'].unique()) - len(simplu) - len(complicat)]

explode = (0.1, 0.1, 0.1)

fig, (ax1, ax2) = plt.subplots(1, 2)

ax1.pie(sizes_3, explode=explode, labels=labels_3, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal')
ax1.set_title('Cheltuieli')

ax2.pie(sizes_1, explode=explode, labels=labels_1, autopct='%1.1f%%', shadow=True, startangle=90)
ax2.axis('equal')
ax2.set_title('Clinici')

plt.show()

Oricum le-ati plota, cifrele raman aceleasi: vreo 200 de milioane de lei (noi) s-au dus in juma’ de an, fara licitatie, deci cu dedicatie
… iar cel putin o unitate medicala din 10 (mai exact 1,5 din 10) face achizitii exclusiv prin metoda “simplificata”, aka exact, fara licitatie!
Inainte sa ma duc sa beau o bere, hai sa va mai arat ceva:

In [19]:
spitale.head()
Out[19]:
nume achizitie tip_achizitie bani suma_totala
0 Spitalul de Boli infectioase si Psihiatrie Bai… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [510, 922.5, 5500, 4650, 1782, 425, 665, 2997,… 608364.67
1 INSTITUTUL INIMII “Niculae Stancioiu” Cluj-Napoca [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li… [23965, 22200, 7195, 116700, 468369, 2300, 487… 20262080.95
2 Spitalul de REcuperare Cardiovasculara ” Dr. B… [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata, Li… [1393, 2716, 51703.2, 12621.2, 22594.81, 34608… 4953690.07
3 SPITALUL MUNICIPAL OLTENITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [2560, 12460, 24224.2, 5141.55, 37671.9, 2175,… 796910.37
4 SPITALUL JUDETEAN DE URGENTA BISTRITA [Cerere de oferta / Procedura simplificata, Ce… [Cerere de oferta / Procedura simplificata] [6350, 1560, 2400, 297.6, 547725, 44635.78, 80… 2283274.97
In [20]:
def perechi (oras, procedura):
    return (str(oras), str(procedura))
perechi(df['LocalitateOfCastigator'][1], df['Tip Procedura'][1])
Out[20]:
('Bucuresti', 'Cerere de oferta / Procedura simplificata')
In [21]:
margini = []
for i in range (0, len(df)):
    a = perechi(df['LocalitateOfCastigator'][i], df['Tip Procedura'][i])
    margini.append(a)

O sa folosesc un modul care se cheama networkx care functioneaza cam asa:

In [22]:
import networkx as nx

G = nx.Graph()
G.add_nodes_from(df['Tip Procedura'])
G.add_edges_from(margini)
d = nx.degree(G)
In [23]:
nx.draw(G, with_labels = True, node_size=[x[1]*10 for x in d])

Stati asa sa scot scrisu’!
Pana la urma, sunt peste 1000 de unitati medicale, nu incape scrisul pe formatul asta mic!

In [24]:
nx.draw(G, node_size=[x[1]*10 for x in d])

Asaaaaa….
Bulina rosie din stanga sunt achizitiile fara licitatie.
Aia din dreapta, achizitiile cu licitatie.
Iar bulinele mici – fiecare este o unitate medicala.
Alea din stanga extrema – unitati care au facut achizitii doar fara licitatie.
Alea din extrema dreapta – unitati care au achizitionat doar prin licitatie.
Iar alea conectate din mijloc – unitati care au achizitionat si cu, si fara licitatie.
Daca le printam pe un format mai mare, li se pot citi si numele.

Hai ca sunt pe malul Dunarii la Cazane si am chef de-o tarie 😀
Sa fiti cuminti!

dan musetoiuMLachizitii,ministerul sanatatii,python
MS_2 /*! * * Twitter Bootstrap * */ /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } audio, canvas, progress, video { ...