In [1]:
from getpass import getpass  

bd = getpass(prompt='Introduce la bd: ')
us = getpass(prompt='Introduce el usuario: ')
pw = getpass(prompt='Introduce la contraseña: ')


Introduce la bd: ········
Introduce el usuario: ········
Introduce la contraseña: ········

Directamente con pymysql


In [2]:
import pymysql

In [3]:
conn = pymysql.connect(host='localhost', port=3306, user=us, passwd=pw, db=bd)

cur = conn.cursor()

cur.execute("SELECT tipo_fecha, COUNT( * ) FROM  pce_fecha GROUP BY  tipo_fecha ")


Out[3]:
8

In [4]:
for row in cur:
    print(row)


('AdjDefinitiva', 720)
('AdjProvisional', 2)
('Adjudicación', 13716)
('Desistimiento', 106)
('Formalización', 12401)
('PresentOferta', 324)
('PresentSolicitud', 64)
('Renuncia', 65)

In [5]:
cur.execute("SELECT COUNT(DISTINCT id_licitacion) FROM  pce_fecha  ")


Out[5]:
1

In [6]:
for row in cur:
    print(row)


(15043,)

In [7]:
%load_ext sql


/home/jmartinz/00.py/anaconda3/lib/python3.5/site-packages/IPython/config.py:13: ShimWarning: The `IPython.config` package has been deprecated. You should import from traitlets.config instead.
  "You should import from traitlets.config instead.", ShimWarning)
/home/jmartinz/00.py/anaconda3/lib/python3.5/site-packages/IPython/utils/traitlets.py:5: UserWarning: IPython.utils.traitlets has moved to a top-level traitlets package.
  warn("IPython.utils.traitlets has moved to a top-level traitlets package.")

In [8]:
%sql mysql+pymysql://{us}:{pw}@localhost/{bd}


Out[8]:
'Connected: pce@pce'

In [9]:
%sql SELECT tipo_fecha, year(fecha) as y, COUNT( * ) as num_exp FROM  pce_fecha GROUP BY  tipo_fecha, y


39 rows affected.
Out[9]:
tipo_fecha y num_exp
AdjDefinitiva 2010 60
AdjDefinitiva 2011 517
AdjDefinitiva 2012 140
AdjDefinitiva 2013 1
AdjDefinitiva 2014 1
AdjDefinitiva 2016 1
AdjProvisional 2011 2
Adjudicación 2010 141
Adjudicación 2011 4896
Adjudicación 2012 5216
Adjudicación 2013 2404
Adjudicación 2014 463
Adjudicación 2015 389
Adjudicación 2016 207
Desistimiento 2011 32
Desistimiento 2012 47
Desistimiento 2013 16
Desistimiento 2014 6
Desistimiento 2015 5
Formalización 2011 4140
Formalización 2012 4723
Formalización 2013 2330
Formalización 2014 670
Formalización 2015 392
Formalización 2016 146
PresentOferta 2011 95
PresentOferta 2012 127
PresentOferta 2013 34
PresentOferta 2014 5
PresentOferta 2015 1
PresentOferta 2016 62
PresentSolicitud 2011 30
PresentSolicitud 2012 26
PresentSolicitud 2013 8
Renuncia 2011 19
Renuncia 2012 38
Renuncia 2013 5
Renuncia 2014 1
Renuncia 2016 2

In [10]:
%sql SELECT COUNT( DISTINCT  `id_licitacion` ) FROM  `pce_fecha`


1 rows affected.
Out[10]:
COUNT( DISTINCT `id_licitacion` )
15043

In [11]:
%sql SELECT count(*) from pce_expediente


1 rows affected.
Out[11]:
count(*)
15141

In [12]:
%sql SELECT tipo_documento, COUNT( * ) FROM  pce_documento GROUP BY  tipo_documento


23 rows affected.
Out[12]:
tipo_documento COUNT( * )
Adjudicación 6205
Adjudicación Definitiva 221
Adjudicación Provisional 138
Anulación Adjudicación 6
Anulación Anuncio de Licitación 8
Anulación Anuncio Previo 1
Anulación Formalización 2
Anulación Pliego 7
Anuncio de Licitación 2338
Anuncio Previo 159
Desistimiento 2
Formalización 5656
Modificación de Contrato 49
Pliego 2149
Rectificación de Adjudicación 239
Rectificación de Adjudicación Definitiva 6
Rectificación de Adjudicación Provisional 2
Rectificación de Anuncio de Licitación 446
Rectificación de Anuncio Previo 21
Rectificación de Desistimiento 1
Rectificación de Formalización 137
Rectificación de Modificación de Contrato 2
Rectificación de Pliego 328

In [13]:
%%sql SELECT ex.id_ministerio, year(fe.fecha) as year, count(*) as num_exp FROM  pce_expediente ex 
LEFT JOIN pce_fecha  fe ON (fe.id_licitacion=ex.id_licitacion) 
WHERE fe.tipo_fecha = 'Adjudicación'
GROUP BY ex.id_ministerio, year;


62 rows affected.
Out[13]:
id_ministerio year num_exp
6 2010 6
6 2011 691
6 2012 617
6 2013 674
6 2014 155
6 2015 4
6 2016 43
7 2010 5
7 2011 132
7 2012 92
7 2013 63
7 2014 2
8 2010 66
8 2011 2013
8 2012 1818
8 2013 123
8 2014 32
9 2010 33
9 2011 529
9 2012 536
9 2013 59
10 2011 348
10 2012 268
10 2013 32
11 2011 24
11 2012 311
11 2013 64
12 2010 3
12 2011 620
12 2012 388
12 2013 39
12 2015 1
13 2010 6
13 2011 22
13 2012 472
13 2013 49
13 2014 2
14 2010 6
14 2011 178
14 2012 135
14 2013 341
14 2014 62
15 2011 3
15 2012 7
15 2013 35
15 2014 23
15 2015 1
16 2010 16
16 2011 165
16 2012 109
16 2013 134
16 2014 8
17 2011 171
17 2012 437
17 2013 369
17 2014 119
17 2015 382
17 2016 164
18 2012 26
18 2013 422
18 2014 60
18 2015 1

In [14]:
%sql SELECT count(*) from pce_expediente


1 rows affected.
Out[14]:
count(*)
15141

In [15]:
result = %sql SELECT ex.id_ministerio, year(fe.fecha) as year, count(*) as num_exp FROM  pce_expediente ex LEFT JOIN pce_fecha  fe ON (fe.id_licitacion=ex.id_licitacion) WHERE fe.tipo_fecha = 'Adjudicación' GROUP BY ex.id_ministerio, year;


62 rows affected.

In [16]:
%matplotlib inline

In [17]:
result.bar()


Out[17]:
<Container object of 62 artists>

In [18]:
type(result)


Out[18]:
sql.run.ResultSet

In [21]:
result_min = %sql SELECT mini.nombre_corto,  count(*) as num_exp FROM  pce_expediente ex LEFT JOIN pce_ministerio  mini ON (mini.id_ministerio=ex.id_ministerio) GROUP BY mini.nombre_corto;


13 rows affected.

In [22]:
result_min.bar()


Out[22]:
<Container object of 13 artists>

In [26]:
%%sql SELECT ex.id_ministerio, year(fe.fecha) as year, sum(ex.importe_base)/count(*) as imp_adxexp FROM  pce_expediente ex 
LEFT JOIN pce_fecha  fe ON (fe.id_licitacion=ex.id_licitacion) 
WHERE fe.tipo_fecha = 'Adjudicación'
GROUP BY ex.id_ministerio, year;


62 rows affected.
Out[26]:
id_ministerio year imp_adxexp
6 2010 90301.06166667
6 2011 413676.95480463
6 2012 656034.48291734
6 2013 799314.14793769
6 2014 2330870.70051613
6 2015 1945014.82000000
6 2016 458774.67906977
7 2010 168453.36800000
7 2011 124528.43969697
7 2012 1278746.08934783
7 2013 393602.64825397
7 2014 190723.14000000
8 2010 193287.72272727
8 2011 459818.27336811
8 2012 334807.43785479
8 2013 1788376.29975610
8 2014 4661029.08187500
9 2010 266004.35090909
9 2011 265930.03780718
9 2012 234792.15246269
9 2013 396487.08949153
10 2011 206473.56316092
10 2012 189628.85014925
10 2013 319828.71031250
11 2011 448944.95291667
11 2012 558406.05025723
11 2013 678466.38109375
12 2010 4474031.01333333
12 2011 1475886.27953226
12 2012 5164077.84716495
12 2013 2410133.06564103
12 2015 491188.41000000
13 2010 48949.30000000
13 2011 1544093.29409091
13 2012 458579.30322034
13 2013 815684.87938776
13 2014 126853.70500000
14 2010 136030.66666667
14 2011 700102.29297753
14 2012 483988.03392593
14 2013 3497637.86985337
14 2014 7021189.86854839
15 2011 208266.72333333
15 2012 560533.68428571
15 2013 639929.05942857
15 2014 2130750.58043478
15 2015 668858.33000000
16 2010 115060.92375000
16 2011 425449.83715152
16 2012 539644.54192661
16 2013 434722.57037313
16 2014 5717721.24250000
17 2011 221388.47397661
17 2012 693695.28860412
17 2013 335192.04696477
17 2014 3710066.84067227
17 2015 2133580.01340314
17 2016 9016646.37079268
18 2012 1069271.40576923
18 2013 851214.92992891
18 2014 5153180.45583333
18 2015 1200000.00000000

In [28]:
importes = %%sql SELECT ex.id_ministerio, sum(ex.importe_base) as imp_lic FROM  pce_expediente ex GROUP BY ex.id_ministerio;


13 rows affected.

In [29]:
importes.bar()


Out[29]:
<Container object of 13 artists>

In [31]:
%sql select * from pce_ministerio


15 rows affected.
Out[31]:
id_ministerio Nombre Nombre_corto
6 agricultura MAGRAMA
7 Exteriores MAExCoop
8 Defensa MDEfensa
9 Economía MINECO
10 Educación MECD
11 Empleo MESS
12 Fomento MFOM
13 Hacienda y Adm. Pub. MINHAP
14 Exteriores MINET
15 Justicia MINJUS
16 Presidencia MINPRES
17 Sanidad MSSSI
18 Trabajo MinTraInm
19 Interior MinInt
20 Presidencia Presidencia Gobierno

In [ ]: