-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtpgvd.py
110 lines (75 loc) · 3.37 KB
/
tpgvd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# -*- coding: utf-8 -*-
"""tpgvd.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1WBygMFt007HD_oSavQSj5B8cOZfQy_gF
"""
#Importo la librería
import pandas as pd
#Tomo la base de datos a partir de la url
url = 'https://cdn.buenosaires.gob.ar/datosabiertos/datasets/direccion-general-de-estadisticas-y-censos/encuesta-anual-hogares/encuesta-anual-hogares-2019.csv'
#Leo el conjunto de datos que voy a utilizar y lo convierto a DataFrame
df_encuesta = pd.read_csv(url, encoding='latin-1')
#Veo la estructura del conjunto de datos
df_encuesta.shape
#Puedo observar que los datos contienen 14319 filas y 31 columnas. Entonces procedo a ver qué columnas posee.
#Veo las columnas del conjunto de datos
df_encuesta.columns.tolist()
#Luego de observar las columnas, quiero observar un ejemplo de este conjunto de datos. Voy a seleccionar las 5 primeras filas.
df_encuesta.head(5)
#Me quedo solamente con un subset de este conjunto.
df_encuesta[['edad','comuna','sexo','ingreso_per_capita_familiar','nivel_actual', 'lugar_nacimiento', 'sector_educativo']]
#Voy a guardar este df en un nuevo df que contenga el subset
df_encuesta_reducida = df_encuesta[['edad','comuna','sexo','ingreso_per_capita_familiar','nivel_actual', 'lugar_nacimiento', 'sector_educativo']]
#Ahora lo quiero guardar en mi base de datos.
#Para eso, importo la libreria.
import sqlite3
#Genero mi objeto conexion, que va a crear automaticamente la base de datos.
conexion = sqlite3.connect('datoencuesta.db')
#Una vez que me conecto, puedo pasarlo como parámetro a la función de Pandas que genera la conexión.
df_encuesta_reducida.to_sql('encuesta',con=conexion,if_exists='replace')
#Actualizo la ejecución
conexion.commit()
#Cierro la conexión
conexion.close()
#Vuelvo a escribir la conexión
conexion = sqlite3.connect('datoencuesta.db')
cursor = conexion.cursor()
# Consulta SQL para obtener información sobre las columnas de la tabla
consulta = f"PRAGMA table_info(encuesta);"
cursor.execute(consulta)
resultados = cursor.fetchall()
# Chequeamos el tipo de datos que contiene cada columna
for columna in resultados:
nombre_columna = columna[1]
tipo_columna = columna[2]
print(f"Columna: {nombre_columna}, Tipo: {tipo_columna}")
#Query de consulta
query_consulta = 'SELECT * FROM encuesta;'
#Ahora voy a generar un cursor para poder navegar la base
cursor = conexion.cursor()
#Ejecuto la query
cursor.execute(query_consulta)
#Veo el resultado y guardo el resultado
resultado = cursor.fetchall()
#Este resultado, lo puedo pasar a un dataframe
df_resultado = pd.DataFrame(resultado,columns=['id', 'edad','comuna','sexo','ingreso_per_capita_familiar','nivel_actual', 'lugar_nacimiento', 'sector_educativo'])
#Veo el resultado
df_resultado
#Vamos a realizar una primera consulta que nos permita explorar los datos y vamos a ordenarlo según columnas
query_consulta_2 = '''SELECT * FROM encuesta ORDER BY comuna LIMIT 10;'''
#Ejecuto la query
cursor.execute(query_consulta_2)
#Le consulto el resultado
resultado = cursor.fetchall()
#Veo el resultado
pd.DataFrame(resultado)
#Como es un loop, puedo escribirlo como tal
for fila in resultado:
print(fila)
query_consulta_3 = '''SELECT * FROM encuesta WHERE edad>60 ORDER BY edad ASC LIMIT 10;'''
cursor.execute(query_consulta_3)
resultado = cursor.fetchall()
pd.DataFrame(resultado)
#Cierro la conexión
conexion.close()