Usuarios de Energía Eléctrica

Parámetros que se obtienen desde esta fuente

ID Descripción
P0609 Usuarios eléctricos

In [1]:
descripciones = {
    'P0609': 'Usuarios Electricos'
}

In [2]:
# Librerias utilizadas
import pandas as pd
import sys
import urllib
import os
import csv
import zipfile

In [3]:
# Configuracion del sistema
print('Python {} on {}'.format(sys.version, sys.platform))
print('Pandas version: {}'.format(pd.__version__))
import platform; print('Running on {} {}'.format(platform.system(), platform.release()))


Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Pandas version: 0.20.1
Running on Windows 8.1

2. Descarga de datos


In [4]:
url = r'http://datos.cfe.gob.mx/Datos/Usuariosyconsumodeelectricidadpormunicipio.csv'
archivo_local = r'D:\PCCS\00_RawData\01_CSV\CFE\UsuariosElec.csv'

if os.path.isfile(archivo_local):
        print('Ya existe el archivo: {}'.format(archivo_local))
else:
    print('Descargando {} ... ... ... ... ... '.format(archivo_local))
    urllib.request.urlretrieve(url, archivo_local)
    print('se descargó {}'.format(archivo_local))


Ya existe el archivo: D:\PCCS\00_RawData\01_CSV\CFE\UsuariosElec.csv

3. Estandarizacion de datos de Parámetros


In [5]:
dtypes = {                        # Los valores numericos del CSV estan guardados como " 000,000 " y requieren limpieza
    'Cve Mun':'str',
    '2010':'str', 
    '2011':'str', 
    '2012':'str', 
    '2013':'str', 
    '2014':'str', 
    '2015':'str', 
    '2016':'str', 
    'ene-17':'str', 
    'feb-17':'str', 
    'mar-17':'str', 
    'abr-17':'str', 
    'may-17':'str', 
    'jun-17':'str', 
    'jul-17':'str', 
    'ago-17':'str', 
    'sep-17':'str', 
    'oct-17':'str', 
    'nov-17':'str', 
    'dic-17':'str'}

# Lectura del Dataset
dataset = pd.read_csv(archivo_local, skiprows = 2, nrows = 82236, na_values = ' -   ',
                     dtype=dtypes)   # Lee el dataset
dataset['CVE_EDO'] = dataset['Cve Inegi'].apply(lambda x: '{0:0>2}'.format(x))               # CVE_EDO de 2 digitos
dataset['CVE_MUN'] = dataset['CVE_EDO'].map(str) + dataset['Cve Mun']
dataset.head()


Out[5]:
Cve Edo Cve Inegi Cve Mun Entidad Federativa Municipio Tarifa 2010 2011 2012 2013 ... jun-17 jul-17 ago-17 sep-17 oct-17 nov-17 dic-17 Unnamed: 25 CVE_EDO CVE_MUN
0 1 1 001 Aguascalientes ... Aguascalientes ... 01 231,727 236,475 244,474 251,805 ... 279,792 280,410 281,356 281,932 282,681 0 0 NaN 01 01001
1 1 1 001 Aguascalientes ... Aguascalientes ... 1A NaN NaN NaN NaN ... 2 3 3 3 3 0 0 NaN 01 01001
2 1 1 001 Aguascalientes ... Aguascalientes ... 1B NaN NaN NaN NaN ... 0 0 0 0 0 0 0 NaN 01 01001
3 1 1 001 Aguascalientes ... Aguascalientes ... 1C NaN NaN NaN NaN ... 2 2 2 0 0 0 0 NaN 01 01001
4 1 1 001 Aguascalientes ... Aguascalientes ... 1D NaN NaN NaN NaN ... 0 0 0 0 0 0 0 NaN 01 01001

5 rows × 28 columns


In [6]:
# Quitar espacios en blanco y comas de columnas que deberian ser numericas
columnums = ['2010', '2011', '2012', '2013', '2014', '2015', '2016', 'ene-17', 'feb-17', 'mar-17', 'abr-17', 'may-17', 'jun-17', 'jul-17', 'ago-17', 'sep-17', 'oct-17', 'nov-17', 'dic-17']
for columna in columnums:
    dataset[columna] = dataset[columna].str.replace(' ','')
    dataset[columna] = dataset[columna].str.replace(',','')
dataset.head()


Out[6]:
Cve Edo Cve Inegi Cve Mun Entidad Federativa Municipio Tarifa 2010 2011 2012 2013 ... jun-17 jul-17 ago-17 sep-17 oct-17 nov-17 dic-17 Unnamed: 25 CVE_EDO CVE_MUN
0 1 1 001 Aguascalientes ... Aguascalientes ... 01 231727 236475 244474 251805 ... 279792 280410 281356 281932 282681 0 0 NaN 01 01001
1 1 1 001 Aguascalientes ... Aguascalientes ... 1A NaN NaN NaN NaN ... 2 3 3 3 3 0 0 NaN 01 01001
2 1 1 001 Aguascalientes ... Aguascalientes ... 1B NaN NaN NaN NaN ... 0 0 0 0 0 0 0 NaN 01 01001
3 1 1 001 Aguascalientes ... Aguascalientes ... 1C NaN NaN NaN NaN ... 2 2 2 0 0 0 0 NaN 01 01001
4 1 1 001 Aguascalientes ... Aguascalientes ... 1D NaN NaN NaN NaN ... 0 0 0 0 0 0 0 NaN 01 01001

5 rows × 28 columns


In [7]:
# Convertir columnas a numericas 
columnasanios = ['2010', '2011', '2012', '2013', '2014', '2015', '2016', 'ene-17', 'feb-17',
 'mar-17', 'abr-17', 'may-17', 'jun-17', 'jul-17', 'ago-17', 'sep-17', 'oct-17', 'nov-17', 'dic-17']
for columna in columnasanios:
    dataset[columna] = pd.to_numeric(dataset[columna], errors='coerce', downcast = 'integer')
dataset.head()


Out[7]:
Cve Edo Cve Inegi Cve Mun Entidad Federativa Municipio Tarifa 2010 2011 2012 2013 ... jun-17 jul-17 ago-17 sep-17 oct-17 nov-17 dic-17 Unnamed: 25 CVE_EDO CVE_MUN
0 1 1 001 Aguascalientes ... Aguascalientes ... 01 231727.0 236475.0 244474.0 251805.0 ... 279792 280410 281356 281932 282681 0 0 NaN 01 01001
1 1 1 001 Aguascalientes ... Aguascalientes ... 1A NaN NaN NaN NaN ... 2 3 3 3 3 0 0 NaN 01 01001
2 1 1 001 Aguascalientes ... Aguascalientes ... 1B NaN NaN NaN NaN ... 0 0 0 0 0 0 0 NaN 01 01001
3 1 1 001 Aguascalientes ... Aguascalientes ... 1C NaN NaN NaN NaN ... 2 2 2 0 0 0 0 NaN 01 01001
4 1 1 001 Aguascalientes ... Aguascalientes ... 1D NaN NaN NaN NaN ... 0 0 0 0 0 0 0 NaN 01 01001

5 rows × 28 columns


In [8]:
# Quitar columnas que ya no se utilizarán
dropcols = ['Cve Edo', 'Cve Inegi', 'Cve Mun', 'Entidad Federativa', 'Municipio', 'Unnamed: 25', 'CVE_EDO']
dataset = dataset.drop(dropcols, axis = 1)
# Asignar CVE_EDO como indice
dataset = dataset.set_index('CVE_MUN')
dataset.head()


Out[8]:
Tarifa 2010 2011 2012 2013 2014 2015 2016 ene-17 feb-17 mar-17 abr-17 may-17 jun-17 jul-17 ago-17 sep-17 oct-17 nov-17 dic-17
CVE_MUN
01001 01 231727.0 236475.0 244474.0 251805.0 258658.0 266481.0 272727 274480 274960 276209 277409 278329 279792 280410 281356 281932 282681 0 0
01001 1A NaN NaN NaN NaN NaN NaN 5 0 0 1 1 1 2 3 3 3 3 0 0
01001 1B NaN NaN NaN NaN NaN NaN 65 64 64 64 64 0 0 0 0 0 0 0 0
01001 1C NaN NaN NaN NaN NaN NaN 0 0 0 0 0 1 2 2 2 0 0 0 0
01001 1D NaN NaN NaN NaN NaN NaN 0 0 0 0 0 0 0 0 0 0 0 0 0

In [9]:
# Sumar las columnas de 2017
columnas2017 = ['ene-17', 'feb-17', 'mar-17', 'abr-17', 'may-17', 'jun-17', 'jul-17', 'ago-17', 'sep-17', 'oct-17', 'nov-17', 'dic-17']
dataset['2017'] = dataset[columnas2017].sum(axis = 1)

# Eliminar columnas de 2017
dataset = dataset.drop(columnas2017, axis = 1)
dataset.head()


Out[9]:
Tarifa 2010 2011 2012 2013 2014 2015 2016 2017
CVE_MUN
01001 01 231727.0 236475.0 244474.0 251805.0 258658.0 266481.0 272727 2787558
01001 1A NaN NaN NaN NaN NaN NaN 5 17
01001 1B NaN NaN NaN NaN NaN NaN 65 256
01001 1C NaN NaN NaN NaN NaN NaN 0 7
01001 1D NaN NaN NaN NaN NaN NaN 0 0

Exportar Dataset

Antes de exportar el dataset voy a reducir su tamaño porque tiene 82,236 renglones divididos por tarifa. ÚNicamente voy a dejar los totales de todas las tarifas.


In [17]:
len(dataset)


Out[17]:
82236

In [16]:
dataset.head(40)


Out[16]:
Tarifa 2010 2011 2012 2013 2014 2015 2016 2017
CVE_MUN
01001 01 231727.0 236475.0 244474.0 251805.0 258658.0 266481.0 272727 2787558
01001 1A NaN NaN NaN NaN NaN NaN 5 17
01001 1B NaN NaN NaN NaN NaN NaN 65 256
01001 1C NaN NaN NaN NaN NaN NaN 0 7
01001 1D NaN NaN NaN NaN NaN NaN 0 0
01001 1E NaN NaN NaN NaN NaN NaN 0 0
01001 1F NaN NaN NaN NaN NaN NaN 0 0
01001 DAC 4251.0 3827.0 3231.0 3081.0 2720.0 2500.0 2788 27384
01001 02 31502.0 32093.0 32998.0 33564.0 34267.0 35421.0 36380 372160
01001 03 14.0 18.0 18.0 18.0 18.0 19.0 10 180
01001 05 NaN NaN NaN NaN NaN NaN 0 0
01001 5A 1956.0 1973.0 2004.0 2033.0 2073.0 2070.0 2101 21029
01001 06 90.0 205.0 216.0 225.0 224.0 182.0 130 1180
01001 07 45.0 54.0 40.0 38.0 29.0 28.0 9 71
01001 09 1.0 NaN NaN NaN NaN NaN 2 25
01001 9M 69.0 62.0 56.0 57.0 48.0 35.0 31 310
01001 9CU 44.0 39.0 40.0 39.0 31.0 20.0 8 64
01001 9N 455.0 472.0 500.0 516.0 515.0 522.0 471 4757
01001 OM 1868.0 1894.0 1979.0 2073.0 2175.0 2273.0 2324 23725
01001 HM 415.0 402.0 437.0 461.0 512.0 597.0 676 7061
01001 HMC NaN NaN NaN NaN NaN NaN 0 0
01001 OMF NaN NaN NaN NaN NaN NaN 0 0
01001 HMF NaN NaN NaN NaN NaN NaN 1 8
01001 HMCF NaN NaN NaN NaN NaN NaN 0 0
01001 HS NaN NaN NaN 1.0 1.0 1.0 1 10
01001 HSL 3.0 3.0 3.0 5.0 5.0 5.0 6 60
01001 HT NaN NaN NaN NaN NaN NaN 0 0
01001 HTL NaN NaN NaN NaN NaN NaN 0 0
01001 HSF NaN NaN NaN NaN NaN NaN 0 0
01001 HSLF NaN NaN NaN NaN NaN NaN 0 0
01001 HTF NaN NaN NaN NaN NaN NaN 0 0
01001 HTLF NaN NaN NaN NaN NaN NaN 0 0
01001 TOTAL 272440.0 277517.0 285996.0 293916.0 301276.0 310154.0 317735 3245862
01002 01 10536.0 10823.0 11147.0 11453.0 11699.0 12105.0 12538 127463
01002 1A NaN NaN NaN NaN NaN NaN 0 0
01002 1B NaN NaN NaN NaN NaN NaN 0 0
01002 1C NaN NaN NaN NaN NaN NaN 0 769
01002 1D NaN NaN NaN NaN NaN NaN 0 0
01002 1E NaN NaN NaN NaN NaN NaN 0 0
01002 1F NaN NaN NaN NaN NaN NaN 0 0

In [21]:
dataset_total = dataset[dataset['Tarifa'] == 'TOTAL']
dataset_total.head()


Out[21]:
Tarifa 2010 2011 2012 2013 2014 2015 2016 2017
CVE_MUN
01001 TOTAL 272440.0 277517.0 285996.0 293916.0 301276.0 310154.0 317735 3245862
01002 TOTAL 12321.0 12619.0 13017.0 13321.0 13576.0 14062.0 14546 148696
01003 TOTAL 18474.0 18961.0 19500.0 19851.0 20303.0 20803.0 21447 217851
01004 TOTAL 4027.0 4134.0 4206.0 4295.0 4391.0 4512.0 4525 45919
01005 TOTAL 29947.0 31838.0 33700.0 35056.0 36338.0 38424.0 39648 412552

In [22]:
len(dataset_total)


Out[22]:
2492

In [25]:
# Eliminamos la columna "Tarifa" porque este dataset solo tiene Totales
dataset_total = dataset_total.drop(['Tarifa'], axis = 1)
dataset_total.head()


Out[25]:
2010 2011 2012 2013 2014 2015 2016 2017
CVE_MUN
01001 272440.0 277517.0 285996.0 293916.0 301276.0 310154.0 317735 3245862
01002 12321.0 12619.0 13017.0 13321.0 13576.0 14062.0 14546 148696
01003 18474.0 18961.0 19500.0 19851.0 20303.0 20803.0 21447 217851
01004 4027.0 4134.0 4206.0 4295.0 4391.0 4512.0 4525 45919
01005 29947.0 31838.0 33700.0 35056.0 36338.0 38424.0 39648 412552

In [23]:
# Metadatos
metadatos = {
    'Nombre del Dataset': 'Usuarios de Energía eléctrica',
    'Descripcion del dataset': 'Numero de Usuarios de energia electrica sin importar Tarifa',
    'Disponibilidad Temporal': '2010 - 2017',
    'Periodo de actualizacion': 'Anual',
    'Nivel de Desagregacion': 'Municipal',
    'Notas': 'S/N',
    'Fuente': 'CFE',
    'URL_Fuente': 'https://datos.gob.mx/busca/dataset/usuarios-y-consumo-de-electricidad-por-municipio',
    'Dataset base': None
}

metadatos = pd.DataFrame.from_dict(metadatos, orient='index', dtype='str')
metadatos.columns = ['Descripcion']
metadatos= metadatos.rename_axis('Metadato')
metadatos


Out[23]:
Descripcion
Metadato
Nombre del Dataset Usuarios de Energía eléctrica
Descripcion del dataset None
Disponibilidad Temporal 2010 - 2017
Periodo de actualizacion Anual
Nivel de Desagregacion Municipal
Notas s/n
Fuente CFE
URL_Fuente https://datos.gob.mx/busca/dataset/usuarios-y-...
Dataset base None

In [26]:
# Guardar el dataset
file = r'D:\PCCS\01_Dmine\Datasets\CFE\Usuarios_Electricidad.xlsx'
writer = pd.ExcelWriter(file)
dataset_total.to_excel(writer, sheet_name = 'DATOS')
metadatos.to_excel(writer, sheet_name = 'METADATOS')
writer.save()
print('---------------TERMINADO---------------')


---------------TERMINADO---------------