análisis – Escuela De Datos http://es.schoolofdata.org evidencia es poder Sun, 25 Mar 2018 16:09:52 +0000 es hourly 1 https://wordpress.org/?v=5.3.2 114974193 Tutorial: Geodatos con Python http://es.schoolofdata.org/2017/11/02/geodatos-con-python/ http://es.schoolofdata.org/2017/11/02/geodatos-con-python/#respond Thu, 02 Nov 2017 02:20:46 +0000 http://es.schoolofdata.org/?p=2341

 Desde Escuela de Datos, Sebastián Oliva, fellow 2017, enseña cómo usar Python para generar mapas a partir de datos georreferenciados.

Pues seguir el webinar del 31 de octubre paso a paso en el video que compartimos contigo y el cuaderno que publicamos abajo. También puedes consultar el cuaderno de trabajo de Sebastián aquí.

Mapas y Python

Es obvia la importancia de los mapas, para la visualizacion de datos. Las coordenadas, latitud y longitud, pueden describir un punto sobre la tierra. Utilizamos estandares como WGS-84 para atar esas coordenadas a un punto real.

Utilizando MatPlotlib, podemos aprovechar Basemap, una libreria que provee funcionalidad básica de mapa, con la cual podemos construir y componer. Agregar poligonos, puntos, areas, barras, colores, etc; se hace mediante estas librerias.

Librerias

La libreria mas utilizada en el ecosistema Jupyter-Matplotlib es Basemap. Tambien existen otras, entre ellas, Plotly, que son muy poderosas y convenientes pero tienen dependencias externas.

Para este webinar, vamos a indagar mas en Basemap, que es el mas accesible.

Basemap

Basemap es una extensión de la funcionalidad disponible

Existen varias formas de instalarlo, así que puede ser un poco confuso. Dependiendo de el método en el cual tengas instalado matplotlib hace variar la forma apropiada de instalarlo.

Ambiente de Trabajo

$ #ESTE_ENV = midevenviroment
$ source ~/miniconda3/envs/$ESTE_ENV/bin/activate

$ conda install jupyter-notebook
$ conda install gdal -c conda-forge
$ conda install basemap -c conda-forge
$ conda install pandas seaborn

## En caso hayan instalado basemap en algun directorio no standard: utiliza un link para la carpeta data.
$ ln -s /home/tian/miniconda3/pkgs/basemap-1.1.0-py36_2/lib/python3.6/site-packages/mpl_toolkits/basemap/data/ /usr/share/basemap

In [16]:

# Importamos lo ya usual.
import matplotlib.pyplot as plt
import matplotlib.cm
import pandas as pd
import numpy as np
import seaborn

# Algunas librerias extra que usaremos
from matplotlib.colors import Normalize
import matplotlib.colors as colors
from numpy import array
from numpy import max

# Aqui cargamos Basemap
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection


sns.set(style="white", color_codes=True)

%matplotlib inline

Mapeando los terremotos globales de la ultima semana

Vamos a usar la feed de datos del US Geological, ellas tienen disponibles datos referenciados de actividad geologica a nivel mundial, regional y de EEUU.

In [17]:

quakes = pd.read_csv("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_week.csv")

# Creamos la lista de latitudes y longitudes.
lats, lons = list(quakes['latitude']), list(quakes['longitude'])

In [60]:

mags = list(quakes['mag'])
quakes.head()

Out[60]:

time latitude longitude depth mag magType nst gap dmin rms updated place type horizontalError depthError magError magNst status locationSource magSource
0 2017-10-31T16:29:08.330Z 36.746834 -121.467163 9.00 2.78 md 56.0 61.0 0.02078 0.15 2017-10-31T16:32:56.802Z 11km SW of Ridgemark, California earthquake 0.24 0.45 0.16 66.0 automatic nc nc
1 2017-10-31T16:23:50.380Z 19.839001 -155.555664 23.85 2.06 md 44.0 110.0 0.08413 0.13 2017-10-31T16:27:14.110Z 23km SSE of Waimea, Hawaii earthquake 0.61 0.81 0.19 8.0 automatic hv hv
2 2017-10-31T16:15:45.210Z 37.603668 -118.955666 1.43 1.08 md 8.0 198.0 0.01381 0.02 2017-10-31T16:25:02.360Z 5km SSE of Mammoth Lakes, California earthquake 1.38 1.29 0.17 6.0 automatic nc nc
3 2017-10-31T16:14:54.100Z 37.598167 -118.954330 1.40 1.43 md 21.0 150.0 0.01940 0.03 2017-10-31T16:23:02.354Z 5km SSE of Mammoth Lakes, California earthquake 0.34 0.70 0.26 19.0 automatic nc nc
4 2017-10-31T15:54:17.460Z 19.265667 -155.392166 3.49 2.34 ml 47.0 106.0 0.02847 0.21 2017-10-31T16:00:00.580Z 11km NE of Pahala, Hawaii earthquake 0.37 1.25 0.32 8.0 automatic hv hv

5 rows × 22 columns

Iniciemos con el mapa

In [25]:

eq_map = Basemap(projection='robin', resolution = 'l', area_thresh = 1000.0,
              lat_0=0, lon_0=-130)
eq_map.drawcoastlines()
eq_map.drawcountries()
eq_map.fillcontinents(color = 'gray')
eq_map.drawmapboundary()
plt.show()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1631: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
  fill_color = ax.get_axis_bgcolor()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1775: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
  axisbgc = ax.get_axis_bgcolor()
 

In [64]:

figu, ax = plt.subplots(figsize=(20,10))
eq_map = Basemap(projection='robin', resolution = 'l', area_thresh = 1000.0,
              lat_0=0, lon_0=-130)
eq_map.drawcoastlines()
eq_map.drawcountries()
eq_map.fillcontinents(color = 'gray')
eq_map.drawmapboundary()
eq_map.drawmeridians(np.arange(0, 360, 30))
eq_map.drawparallels(np.arange(-90, 90, 30))

## Coordenadas a posiciones
x,y = eq_map(lons, lats)
eq_map.plot(x, y, '^', markersize=6)
 
plt.show()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1631: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
  fill_color = ax.get_axis_bgcolor()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1775: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
  axisbgc = ax.get_axis_bgcolor()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:3298: MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.
  b = ax.ishold()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:3307: MatplotlibDeprecationWarning: axes.hold is deprecated.
    See the API Changes document (http://matplotlib.org/api/api_changes.html)
    for more details.
  ax.hold(b)

In [33]:

x[0]

Out[33]:

17740352.000926033

Veamos esto mas a detalle.

In [28]:

df = pd.read_csv('hiv_cr_data.csv')
df.columns
df.shape # (71, 8)
df.describe()
df.columns
df.loc[df.coordenadas == df.coordenadas]
subset = df.loc[df.coordenadas == df.coordenadas] 
coordenadas = subset[['sitio','latitud', 'longitud', 'coordenadas']]
coordenadas.head()

Out[28]:

sitio latitud longitud coordenadas
0 Esquina Sureste de la Iglesia del Corazón de J… 10.018010 -84.216480 (10.01801 , -84.21648)
1 Parque Central de Alajuela 10.016787 -84.213914 (10.016787 , -84.213914)
2 Parque de las Palmas, costado sur del hospital… 10.020168 -84.214064 (10.020168 , -84.214064)
3 Mall Internacional 10.006020 -84.212740 (10.00602 , -84.21274)
4 Ojo de Agua 9.985120 -84.195540 (9.98512 , -84.19554)

In [66]:

coordenadas.count()

Out[66]:

sitio          67
latitud        67
longitud       67
coordenadas    67
dtype: int64

In [67]:

coordenadas.coordenadas.head()

Out[67]:

0      (10.01801 , -84.21648)
1    (10.016787 , -84.213914)
2    (10.020168 , -84.214064)
3      (10.00602 , -84.21274)
4       (9.98512 , -84.19554)
Name: coordenadas, dtype: object

In [35]:

 (10.01801 , -84.21648)

Out[35]:

(10.01801, -84.21648)

In [30]:

fig, ax = plt.subplots(figsize=(10,20))

mapa = Basemap(projection='merc', 
    lat_0 = 9.74, lon_0 = -83.5,
    resolution = 'i',
    llcrnrlon=-88.1, llcrnrlat=5.5,
    urcrnrlon=-80.1, urcrnrlat=11.8)

mapa.drawmapboundary(fill_color='#479EE0')
mapa.drawcoastlines()


from ast import literal_eval as make_tuple
def unpac(t):
    # haciendo trampa en la vida
    return pd.Series(make_tuple(t))

def plot_area(pos):
    ps = unpac(pos)
    x, y = mapa(ps[1], ps[0])
    mapa.plot(x, y, 'o', markersize=7, color='#444444', alpha=0.8)
    
    
coordenadas.coordenadas.apply(plot_area)


plt.show()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:3298: MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.
  b = ax.ishold()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:3307: MatplotlibDeprecationWarning: axes.hold is deprecated.
    See the API Changes document (http://matplotlib.org/api/api_changes.html)
    for more details.
  ax.hold(b)

In [12]:

clox = array(coordenadas['longitud'])
clay = array(coordenadas['latitud'])
clo = list(clox)
cla = list(clay)

In [51]:

clay.mean()
clay

Out[51]:

array([ 10.01801 ,  10.016787,  10.020168,  10.00602 ,   9.98512 ,
        10.001528,   9.998438,   9.99943 ,   9.998952,   9.996179,
         9.98495 ,   9.99961 ,   9.935734,   9.93335 ,   9.93284 ,
         9.93355 ,   9.9356  ,   9.9359  ,   9.93454 ,   9.927243,
         9.93387 ,   9.93191 ,   9.93378 ,   9.937275,   9.937206,
         9.93281 ,   9.868255,   9.864336,   9.864255,   9.86715 ,
         9.97685 ,   9.99725 ,   9.974695,   9.61626 ,   9.39646 ,
         9.42387 ,   9.43062 ,   9.930423,   9.930036,   9.934636,
         9.929361,   9.937733,   9.930169,   9.927714,   9.934579,
         9.927496,   9.93141 ,   9.938098,   9.927755,   9.933922,
         9.936659,   9.932065,   9.927739,   9.930635,   9.932147,
         9.93535 ,   9.93286 ,   9.927324,  10.018506,  10.018993,
        10.002973,   9.408455,   9.39838 ,   9.403425,   9.40677 ,
         9.866258,   9.865848])

In [58]:

plt.figure(2)
#fig.add_subplot(223)
fig2, ax2 = plt.subplots(figsize=(20,10))

mapa2 = Basemap(projection='merc', 
    lat_0 = 9.74, lon_0 = -83.5,
    resolution = 'i',
    llcrnrlon=-88.1, llcrnrlat=7.5,
    urcrnrlon=-80.1, urcrnrlat=11.8)
pos_x, pos_y = mapa2(clox, clay)
mapa2.drawmapboundary(fill_color='#A6CAE0', linewidth=0)
mapa2.fillcontinents(color='darkgrey', alpha=0.3)
mapa2.drawcoastlines(linewidth=0.1, color="white")

paleta = seaborn.diverging_palette(10, 220, sep=80, as_cmap=True)

#sns.cubehelix_palette(8, start=2, rot=0, dark=0, light=.95, reverse=True)

hb = plt.hexbin(pos_x, pos_y, gridsize=4, mincnt=1,
    edgecolor='none', cmap = paleta)

cb = fig2.colorbar(hb, ax=ax2)


plt.show()
/usr/lib64/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1775: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
  axisbgc = ax.get_axis_bgcolor()
<matplotlib.figure.Figure at 0x7f8646f5d7f0>

Cool links

 

Flattr this!

]]>
http://es.schoolofdata.org/2017/11/02/geodatos-con-python/feed/ 0 2341
Nuevas Dateras Latam http://es.schoolofdata.org/2016/06/01/nuevas-dateras-latam/ http://es.schoolofdata.org/2016/06/01/nuevas-dateras-latam/#respond Wed, 01 Jun 2016 20:43:39 +0000 http://es.schoolofdata.scoda.okfn.org/?p=1393 En estas semanas estaremos publicando cuatro perfiles de dateras latinoamericanas que con su capacidad en análisis de datos y visión de alto impacto social están inyectando frescura a lo que conocemos como periodismo de datos en la región.

 

fotoTM

Cómo saber si tus ideas son correctas: Tania Montalvo, México

 

 

 

19242158KatherinePennacchio

Venezuela. Katherine Pennacchio: Rebeldía colaborativa

Flattr this!

]]>
http://es.schoolofdata.org/2016/06/01/nuevas-dateras-latam/feed/ 0 1393
InfoEconómica – ejercicio datero en DF http://es.schoolofdata.org/2015/03/23/infoeconomica-ejercicio-datero-en-df/ http://es.schoolofdata.org/2015/03/23/infoeconomica-ejercicio-datero-en-df/#respond Mon, 23 Mar 2015 01:13:26 +0000 http://es.schoolofdata.scoda.okfn.org/?p=1078

Hoy les compartimos una experiencia de desarrollo datero en la Ciudad de México: InfoEconómica. ¡Queremos compartir más historias latinas y españolas! Anímate a contarnos la tuya (en Twitter, Facebook).


Screen Shot 2015-02-06 at 17.05.24

La Secretaría de Desarrollo Económico (SEDECO) en la Ciudad de México está obligada por ley a publicar un reporte económico cada tres meses. Para cumplir esta obligación, hace una labor titánica de compilación y análisis de datos complejos publicados por el INEGI, la CONEVAL… Pero no mantiene un archivo histórico de los datos y reportes pasados.

Es decir: cuando la SEDECO publica un reporte nuevo, se pierde la información antigua; lxs ciudadanxs pierden el acceso a esa información.

Emanuel Zámano, desarrollador de CódigoCDMX (iniciativa del Laboratorio para la Ciudad para promover desarrollos tecnológicos dentro de las dependencias de gobierno al estilo Code for America), se inspiró en esta pérdida de información para proponerse un reto: InfoEconómica.

InfoEconómica es una página que permite revisar indicadores usados en el pasado por SEDECO, incluyendo los de coyunturas específicas, en un formato descargable pero fácil de consumir para lxs ciudadanxs.

 

¿Qué distingue a InfoEconómica de otros portales de publicación de datos?

  • Su audiencia elegida son lxs ciudadanxs en general – no programadores o periodistas.
  • En vez de publicar conjuntos de datos para análisis, presentan información ya analizada.
  • Propone un acotamiento de la infinidad de indicadores que maneja SEDECO para enfocarse en los más importantes para lxs ciudadanxs.
  • Aprovecha y deja disponibles otros materiales elaborados por la dependencia, como infografías y estudios.
  • Para cada indicador, marca las fuentes utilizadas. No da link para acceder directamente a los datos.

 

Limitaciones reconocidas del proyecto:

  • Sólo puede publicar información dentro de las atribuciones de SEDECO. Y, por ejemplo, los datos sobre trabajo y educación son trabajados por otras dependencias. En ese sentido, a Emanuel le encantaría que el dashboard de InfoEconómica fuera adoptado por otra parte del gobierno –como la Agencia de Gestión Urbana o la Jefatura de Gobierno– para que no el desarrollo sirva para «ciudadanizar» no sólo datos económicos, sino también de transporte, salud; los datos que muestran la realidad de la ciudad. Cuántos baches han sido reparados, cuántos viajes han sido hechos en Ecobici.

 

Y, como parte de la ficha técnica, unos datos…

  • Los datos analizados son descargables en csv; en el futuro sería ideal escalar el proyecto para permitir conexión directa con Json.
  • Gran parte de la labor fue justamente en el procesamiento de los datos que ya tenían las dependencias. Primero fue ver cómo estaban almacenados (generalmente archivos de Excel con infinidad de hojas); luego, acomodar la información separando los datos en grupos temáticos; finalmente, automatizar el proceso mediante scripts que leen partes del Excel y las categorizan en una base de datos.
  • Cronograma en términos para desarrolladorxs: primero se eligió qué partes poner; usó un framework (Laravel – es importante no empezar desde cero en estos desarrollos); preparó bases de datos; preparó scripts automáticos para todas las actualizaciones con PHP; base de datos Postgresql; usó servidor de pruebas (Vagrant) que indica qué necesita el framework para funcionar, y los servicios adicionales (base de datos, analítica). Después de crear ambiente de desarrollo, preparó el repositorio en GitHub, trackeando cada cambio de código ahí y en ambiente de producción. Clonó el repositorio, ejecutó todo el provisioning… y, en todo el proceso, asegurarse de incluir todo cambio en GitHub y de regreso en servidor de pruebas.

 

La petición de Emanuel a otrxs desarrolladorxs: ¡Clonen los repos en GitHub! ¡Hagan issues!

 

Gracias a Emanuel por compartir su historia en Escuela. Ahora te toca a ti compartir la tuya! Recuerda que estamos en TwitterFacebook.

Flattr this!

]]>
http://es.schoolofdata.org/2015/03/23/infoeconomica-ejercicio-datero-en-df/feed/ 0 1078
Consejos prácticos para entender datos estadísticos http://es.schoolofdata.org/2014/03/18/consejos-practicos-para-entender-datos-estadisticos/ http://es.schoolofdata.org/2014/03/18/consejos-practicos-para-entender-datos-estadisticos/#respond Tue, 18 Mar 2014 11:12:43 +0000 http://es.schoolofdata.okfn.org/?p=793

Esta sesión se centrará en los portales estadísticos, en los que podemos hallar un montón de datos de los que extraer historias periodísticas. Pero, exactamente, ¿qué hay? ¿Hay datos de estadísticas locales en el Instituto Nacional de Estadística o debo acudir a un portal local? ¿Puedo encontrar datos hiperlocales como las paradas de autobús o las escuelas de un barrio? ¿Los encuentro en un único portal o tengo que pasearme por varios?

pdd_6.jpg

Figura 1: Posibilidades infográficas con Infogr.am

17-17.45 h // «Errores de periodismo de datos. El proyecto Colibrí», con Diego Pasqual (Programador Proyecto Colibrí)

El PROYECTO COLIBRÍ es una iniciativa ciudadana que pretende servir de puente entre la comunidad de programadores y periodistas y la web del Congreso del Gobierno de España, para así facilitar el acceso a la información que en dicha web se puede encontrar. A partir de la experiencia de programar Proyecto Colibrí, Diego Pasqual nos contará lo aprendido: «una gran lección sobre cómo no hacer las cosas, desde el análisis hasta el diseño e implementación de la arquitectura, y me gustaría compartir con vosotros cómo no hacer un proyecto opendata».

18.15-20 h // Cómo descifrar los datos de los portales estadísticos, con Xavier Badosa (Institut d’Estadística de Catalunya, Idescat).

Xavier Badosa imparte el taller con el objetivo de presentar las posibilidades de reutilización de datos de una oficina estadística oficial como el Idescat. Se explicará la organización de la información en el Idescat y se mostrarán ejemplos de descarga de datos, de incrustación de soluciones ya realizadas y de consumo de servicios. En el campo de la visualización de datos, se explicará la funcionalidad de Google Public Data Explorer, en que el Idescat ofrece un conjunto de datos municipales y comarcales, así como de la biblioteca Idescat Visual.

Información práctica

Las sesiones de trabajo de Periodismo de Datos quieren ser unos encuentros prácticos con dos objetivos: aprender y profundizar en el trabajo con datos mediante talleres, y dar a conocer proyectos locales.

  • Fecha: 20 marzo 2014
  • Horario: 17:00 h – 20:00 h
  • Precio de la entrada: 3 €
  • Espacio: Mirador
  • Organiza Centre de Cultura Contemporània de Barcelona y Escuela de Datos de Open Knowledge Foundation Spain

Flattr this!

]]>
http://es.schoolofdata.org/2014/03/18/consejos-practicos-para-entender-datos-estadisticos/feed/ 0 793