Rospel commited on
Commit
c5da326
1 Parent(s): fbd7e11

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +225 -0
app.py ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #%%importar librerias
2
+ import requests as re
3
+ import pandas as pd
4
+ import gradio as gr
5
+ #%%obtener datos de la API
6
+ limit=110000
7
+ def get_data(limit): #obtiene la data con el numero especificado de resultados variable limit
8
+ url = f"https://postdata.gov.co/api/action/datastore/search.json?resource_id=1895fbee-42f5-41b5-bba7-a2d03cb0f723&limit={limit}"
9
+ req = re.get(url) #obtiene informacion de la api
10
+ data = req.json()#recupera el json de la api
11
+ result_list = data["result"]["records"] #obtiene los records solicitados y elimina la informacion del principio
12
+ df=pd.DataFrame(result_list)#convierte en data frame de pandas los datos solicitados
13
+ return df,result_list#retorna el data frame
14
+ datos,result_list=get_data(limit)#crea un data frame con los datos de la api
15
+ #%%pre-procesamiento
16
+ datos = datos.astype({"id_empresa":"int32","anno":"int32","trimestre":"int32","trimestre":"int32"})#convierte los datos necesario en tipo entero
17
+ #%%funciones
18
+ #%%Funcion busqueda avanzada
19
+ def busqueda_avanzada(empresa=None, id_empresa=None, tipo_operador=None, anno=None, trimestre=None,
20
+ fecha=None, hora_inicio=None,duracion=None, programa=None,
21
+ clasificacion=None, genero=None, tipo=None, closed_caption=None, lengua_senas=None,
22
+ subtitulado=None, lenguas_nativas=None,limit_data=None):#Se crea la funcion con pametros todos los criterios de busqueda que se quieren
23
+ df=datos#se copia el df original para modificarlo dentro de la funcion
24
+ dicc={}#diccionario para guardar las inputs del usuario
25
+ if empresa:#si exite un campo para x parametro se guarda en el diccionario el valor que en este caso sera lo que ponga el usuario.
26
+ dicc["empresa"]=empresa.upper()#se pone upper porque en los datos todo esta en mayuscula y esto permitira mas flexibilidad
27
+ if id_empresa:
28
+ dicc["id_empresa"]=id_empresa
29
+ if tipo_operador:
30
+ dicc["tipo_operador"]=tipo_operador.upper()
31
+ if anno:
32
+ dicc["anno"]=anno
33
+ if trimestre:
34
+ dicc["trimestre"]=trimestre
35
+ if fecha:
36
+ dicc["fecha"]=fecha
37
+ if hora_inicio:
38
+ dicc["hora_inicio"]=hora_inicio
39
+ if duracion:
40
+ dicc["duracion"]=duracion
41
+ if programa:
42
+ dicc["programa"]=programa.upper()
43
+ if clasificacion:
44
+ dicc["clasificacion"]=clasificacion.upper()
45
+ if genero:
46
+ dicc["genero"]=genero.upper()
47
+ if tipo:
48
+ dicc["tipo"]=tipo.upper()
49
+ if closed_caption:
50
+ dicc["closed_caption"]=closed_caption.upper()
51
+ if lengua_senas:
52
+ dicc["lengua_senas"]=lengua_senas.upper()
53
+ if subtitulado:
54
+ dicc["subtitulado"]=subtitulado.upper()
55
+ if lenguas_nativas:
56
+ dicc["lenguas_nativas"]=lenguas_nativas.upper()
57
+ for x,y in dicc.items():#filtra los datos del data frame teniendo en ceunta cada uno de los parametros dados
58
+ df=df[df[x]==y]
59
+ df=df.iloc[:,[5,6,8,9,10,11,12]]#Selecciona los datos de interes para el ussuario
60
+ if limit_data:#condicional que permitira limitar los datos al numero deseado
61
+ if limit_data>len(df.index):#elimina errores si se el limit data es mayor al tamaño del df generado con los filtros
62
+ return df.loc[0:len(df.index)]#devuelve el data frame limitado
63
+ else:
64
+ return df.loc[0:limit_data]
65
+ else:
66
+ return df
67
+
68
+ #%%busqueda por nombre
69
+ def search_by_name(user_in, limite=None):
70
+ limite = int(limite)
71
+ user_in = user_in.upper()
72
+ Name = datos["programa"] == user_in
73
+ df_result = datos[Name]
74
+ if limite:
75
+ if limite > len(df_result):
76
+ return df_result[0:len(df_result.index)]
77
+ else:
78
+ return df_result[0:limite]
79
+ else:
80
+ return df_result.loc[0:1000]
81
+
82
+ #%%Busqueda general
83
+ def busqueda_clasificacion(clasif, limite=None): # retorna un dataframe segun la clasificacion del programa
84
+ limite = int(limite)
85
+ Religioso = []
86
+ Testimonial = []
87
+ Noticias = []
88
+ Musica = []
89
+ Pelis = []
90
+ Kids = []
91
+ learn =[]
92
+ for dict in result_list:
93
+ for val in dict.values():
94
+ if "EDUCATIVO" in dict.values():
95
+ learn.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
96
+ if "MUSICAL" in dict.values():
97
+ Musica.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
98
+ if "PREDICACIÓN" or "TESTIMONIAL" or "NOTICIERO" in dict.values():
99
+ Religioso.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
100
+ if "TESTIMONIAL" in dict.values():
101
+ Testimonial.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
102
+ if "NOTICIERO" in dict.values():
103
+ Noticias.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
104
+ if "PELÍCULA" in dict.values():
105
+ Pelis.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
106
+ if "INFANTIL" in dict.values():
107
+ Kids.append([dict["fecha"], dict["duracion"], dict["programa"], dict['clasificacion'], dict["genero"], dict["tipo_operador"]])
108
+
109
+ S_Religioso = set(tuple(i) for i in Religioso)
110
+ S_Test = set(tuple(i) for i in Testimonial)
111
+ S_Noticias = set(tuple(i) for i in Noticias)
112
+ S_Musica = set(tuple(i) for i in Musica)
113
+ S_Pelis = set(tuple(i) for i in Pelis)
114
+ S_Kids = set(tuple(i) for i in Kids)
115
+ S_Learn = set(tuple(i) for i in learn)
116
+
117
+ df_Religioso = pd.DataFrame(S_Religioso)
118
+ df_Test = pd.DataFrame(S_Test)
119
+ df_Noticias = pd.DataFrame(S_Noticias)
120
+ df_Musica = pd.DataFrame(S_Musica)
121
+ df_Pelis = pd.DataFrame(S_Pelis)
122
+ df_kids = pd.DataFrame(S_Kids)
123
+ df_Learn = pd.DataFrame(S_Learn)
124
+
125
+ if clasif == "Religioso":
126
+ if limite:
127
+ if limite > len(df_Religioso):
128
+ return df_Religioso[0:len(df_Religioso.index)]
129
+ else:
130
+ return df_Religioso[0:limite]
131
+ else:
132
+ return df_Religioso.loc[0:800]
133
+ elif clasif == "Testimonial":
134
+ if limite:
135
+ if limite > len(df_Test):
136
+ return df_Test.loc[0:len(df_Religioso.index)]
137
+ else:
138
+ return df_Test.loc[0: limite]
139
+ else:
140
+ return df_Test.loc[0:800]
141
+ elif clasif == "Noticias":
142
+ if limite:
143
+ if limite > len(df_Noticias):
144
+ return df_Noticias.loc[0: len(df_Noticias)]
145
+ else:
146
+ return df_Noticias[0: limite]
147
+ else:
148
+ return df_Noticias.loc[0:800]
149
+ elif clasif == "Musica":
150
+ if limite:
151
+ if limite > len(df_Musica):
152
+ return df_Musica.loc[0: len(df_Musica)]
153
+ else:
154
+ return df_Musica.loc[0: limite]
155
+ else:
156
+ return df_Musica.loc[0:800]
157
+ elif clasif == "Pelis":
158
+ if limite:
159
+ if limite > len(df_Pelis):
160
+ return df_kids.loc[0: len(df_Pelis)]
161
+ else:
162
+ return df_Pelis.loc[0: limite]
163
+ else:
164
+ return df_Pelis.loc[0:800]
165
+ elif clasif == "Kids":
166
+ if limite:
167
+ if limite > len(df_kids):
168
+ return df_kids.loc[0: len(df_Pelis)]
169
+ else:
170
+ return df_kids.loc[0: limite]
171
+ else:
172
+ return df_kids.loc[0:800]
173
+ elif clasif == "Educativo":
174
+ if limite:
175
+ if limite > len(df_Learn):
176
+ return df_Learn.loc[0: len(df_Learn)]
177
+ else:
178
+ return df_Learn.loc[0: limite]
179
+ else:
180
+ return df_Learn.loc[0:800]
181
+
182
+ #%% interfaz
183
+ interfaz=gr.Blocks(title="seeker", theme="Black")
184
+ with interfaz:
185
+ gr.Markdown("SEEKR")
186
+ gr.Markdown("Búsqueda por nombre o por cualquier parametro en busqueda avanzada. Si no sabes que ver, revisa busqueda general")
187
+ with gr.Tabs():
188
+ with gr.TabItem("Busqueda por nombre"):
189
+ Limite = gr.Number(label="Limitar el numero de datos que se quiere. Borra el 0 para quitar este parametro de la busqueda")
190
+ entrada=gr.Textbox(label="Nombre del programa")
191
+ salida=gr.DataFrame()
192
+ boton_buscar=gr.Button("Buscar")
193
+ with gr.TabItem("busqueda avanzada"):
194
+ in_empresa=gr.Textbox(label="empresa")
195
+ in_IDempresa=gr.Number(label="ID empresa. Borra el 0 para quitar este parametro de la busqueda")
196
+ in_tipooperador=gr.Textbox(label="tipo operador")
197
+ in_anno=gr.Number(label="Año. Borra el 0 para quitar este parametro de la busqueda")
198
+ in_trimestre=gr.Number(label="Trimestre. Borra el 0 para quitar este parametro de la busqueda")
199
+ in_fecha=gr.Textbox(label="Fecha. ejemplo: 2020-04-01")
200
+ in_horainicio=gr.Textbox(label="Hora De Inicio. ejemplo: 12:59:59")
201
+ in_duracion=gr.Textbox(label="Duracion. ejemplo: 00:28:55")
202
+ in_programa=gr.Textbox(label="programa")
203
+ in_clasificacion=gr.Radio(["FAMILIAR","INFANTIL","ADOLESCENTE","ND","ADULTO"],label="Clasificacion")
204
+ in_genero=gr.Radio(["NO FICCIÓN","FICCIÓN","INFANTIL","INFORMATIVO","ND"],label="Genero")
205
+ in_tipo=gr.Textbox(label="Tipo")
206
+ in_closedcaption=gr.Radio(["NINGUNO","ND","TRANSCRIPCIÓN MANUAL","TRANSCRIPCIÓN AUTOMÁTICA"],label="closed caption")
207
+ in_lenguasenas=gr.Radio(["SI","NO"],label="Lenguaje de señas")
208
+ in_subtitulado=gr.Radio(["SI","NO"],label="Subtitulado")
209
+ in_lenguasnativas=gr.Radio(["SI","NO"],label="Lenguas nativas")
210
+ in_limitdata=gr.Number(label="Limitar el numero de datos que se quiere. Borra el 0 para quitar este parametro de la busqueda")
211
+ inputs_ba=[in_empresa,in_IDempresa,in_tipooperador,in_anno,in_trimestre,in_fecha,
212
+ in_horainicio,in_duracion,in_programa,in_clasificacion,in_genero,in_tipo,
213
+ in_closedcaption,in_lenguasenas,in_subtitulado,in_lenguasnativas,in_limitdata]
214
+ salida_ba=gr.DataFrame()
215
+ boton_busquedavanzada=gr.Button("Buscar")
216
+ with gr.TabItem("Busqueda general"):
217
+ limit = gr.Number(label="Limitar el numero de datos que se quiere. Borra el 0 para quitar este parametro de la busqueda")
218
+ entrada_general=gr.Radio(["Noticias", "Religioso", "Pelis", "Testimonial", "Musica", "Kids", "Educativo"], label="Categorias")
219
+ salida_general=gr.DataFrame()
220
+ boton_busquedageneral=gr.Button("Buscar")
221
+ boton_buscar.click(search_by_name, inputs=[entrada, Limite], outputs=salida)
222
+ boton_busquedavanzada.click(busqueda_avanzada, inputs_ba,salida_ba)
223
+ boton_busquedageneral.click(busqueda_clasificacion, inputs=[entrada_general, limit],outputs=salida_general)
224
+
225
+ interfaz.launch(share=True)