Skip to content

Instantly share code, notes, and snippets.

@jjsantos01
Created December 8, 2018 23:42
Show Gist options
  • Save jjsantos01/6cf01aeaf392976874226b1254e00c40 to your computer and use it in GitHub Desktop.
Save jjsantos01/6cf01aeaf392976874226b1254e00c40 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 534,
"metadata": {
"init_cell": true
},
"outputs": [],
"source": [
"import monitoreo\n",
"import pandas as pd\n",
"import re\n",
"from bs4 import BeautifulSoup as BS\n",
"import requests\n",
"pd.options.display.max_columns: int=200\n",
"import monitoreo_corrupcion\n",
"from monitoreo import palabras_encontradas, plain, asigna_categorias\n",
"import json\n",
"import string\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.decomposition import PCA\n",
"puntuacion = string.punctuation+\"“©\\r\\n-\"\n",
"pd.options.display.max_colwidth = 300\n",
"def sin_acento(x):\n",
" output = x.replace('á', 'a').replace('é', 'e').replace('í', 'i').replace('ó', 'o').replace('ú', 'u')\\\n",
" .replace('Á', 'A').replace('É', 'E').replace('Í', 'I').replace('Ó', 'O').replace('Ú', 'U')\n",
" return output\n",
"\n",
"def remueve_pun(s):\n",
" table = str.maketrans({key: None for key in puntuacion})\n",
" return s.translate(table)\n",
"\n",
"\n",
"def normaliza_texto(s):\n",
" out = remueve_pun(sin_acento(s.lower())).strip()\n",
" return out"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Verifica nombres en las noticias"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [],
"source": [
"base_noticias = '../base_noticias/df_noticias.pkl'\n",
"datos = '../../datos/'\n",
"df = pd.read_pickle(base_noticias)\n",
"df['ner'] = df['ner'].apply(list)"
]
},
{
"cell_type": "code",
"execution_count": 252,
"metadata": {},
"outputs": [],
"source": [
"provsanc = pd.read_csv(datos+'proveedores_sancionados.csv', encoding='latin1')\n",
"texto_provsanc = normaliza_texto((provsanc['PROVEEDOR O CONTRATISTA']+' ; ').sum())"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [],
"source": [
"rupc = pd.read_csv(datos+'RUPC.csv', encoding='latin1')\n",
"texto_rupc = normaliza_texto((rupc['Nombre de la empresa']+' ; ').sum())"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"servsanc = pd.read_csv(datos+'ServPubSancionados.csv', encoding='latin1')\n",
"texto_serv = normaliza_texto((servsanc['Servidor Público']+' ; ').sum())"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [],
"source": [
"ner = '|'.join(sorted(list({x.strip() for x in df.ner.sum() if x!=''}), reverse=True))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Funcionarios públicos sancionados"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'jose luis alarcon ezeta', 'mario alberto avila lizarraga'}"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"func_sanc_not = {x for x in re.findall(ner, texto_serv) if len(x.split())==4}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Proveedores sancionados"
]
},
{
"cell_type": "code",
"execution_count": 552,
"metadata": {},
"outputs": [],
"source": [
"prov_sanc_not = {x for x in re.findall(ner, texto_provsanc) if len(x.split())>=3}\n",
"# televisión de hidalgo\n",
"# Meneses de Weyll"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## RUPC"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"ner_rupc = {x for x in re.findall(ner, texto_rupc)}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Creando variable de instituciones"
]
},
{
"cell_type": "code",
"execution_count": 231,
"metadata": {},
"outputs": [],
"source": [
"with open(f'dicc_inst.json', 'r', encoding='utf-8') as keywords_file:\n",
" diccionario_inst = json.load(keywords_file)\n",
"pat_inst = plain('|'.join(diccionario_inst.values()))"
]
},
{
"cell_type": "code",
"execution_count": 232,
"metadata": {},
"outputs": [],
"source": [
"df['ocurre_instituciones'] = df['texto'].apply(\n",
" lambda x: ','.join(list(set(palabras_encontradas(pat_inst, plain(x))))))\n",
"df['N_instituciones'] = df['texto'].apply(\n",
" lambda x: len(set(palabras_encontradas(pat_inst, plain(x)))))\n",
"df['instituciones_categoria'] = df['ocurre_instituciones']\\\n",
" .apply(lambda x:','.join(asigna_categorias(x,dicc=diccionario_inst)) ).replace({\"\":'Ninguno'})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Creación índice de riesgo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Número de noticias por institución"
]
},
{
"cell_type": "code",
"execution_count": 347,
"metadata": {},
"outputs": [],
"source": [
"noticias_inst = pd.Series([y for x in df['instituciones_categoria'].tolist() if isinstance(x, str) for y in x.split(',')],\n",
" name='noticias').value_counts().to_frame().sort_values('noticias', ascending=False)\\\n",
" .reset_index().rename(columns={'index': 'SIGLAS'})\n",
"noticias_inst.to_csv(datos+'noticias_dependencias.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Licitaciones vigentes"
]
},
{
"cell_type": "code",
"execution_count": 493,
"metadata": {},
"outputs": [],
"source": [
"uc = pd.read_excel(datos+'UC.xlsx').rename(columns=lambda x: plain(x).replace(' ', '_'))"
]
},
{
"cell_type": "code",
"execution_count": 547,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"lic_vig = pd.read_csv(datos+'licitaciones_vigentes_fechas.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Proveedores sancionados por entidad"
]
},
{
"cell_type": "code",
"execution_count": 337,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"provsanc['dependencia'] = provsanc[' \\tDEPENDENCIA'].apply(normaliza_texto)\n",
"#provsanc.groupby([' \\tDEPENDENCIA']).sum()\n",
"provsanc_g = provsanc.merge(dep[['dependencia', 'SIGLAS']], on='dependencia')\\\n",
" .groupby('SIGLAS')[[' \\tDEPENDENCIA']].count().reset_index()\\\n",
" .rename(columns={' \\tDEPENDENCIA': 'prov_sanc'})\n",
"provsanc_g.to_csv(datos+'prov_sanc_dependencia.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Funcionarios sancionados por depenencia"
]
},
{
"cell_type": "code",
"execution_count": 336,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"serv_g = servsanc.groupby('Dependencia')[[' Expediente']].count().reset_index()\\\n",
" .assign(dependencia=lambda x: x['Dependencia'].apply(plain))\\\n",
" .merge(dep[['dependencia', 'SIGLAS']], on='dependencia')\\\n",
" .rename(columns={' Expediente': 'serv_sanc'})[['SIGLAS', 'serv_sanc']]\n",
"serv_g.to_csv(datos+'serv_sanc_dependencia.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Índice de riesgo IMCO por dependencia"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"imco = pd.read_excel(datos+'riesgo_imco_uc.xlsx')\n",
"imco_g = imco.groupby(['dependencia']).mean()[['Riesgo_tipo_contratacion']].reset_index()\\\n",
" .merge(dep[['SIGLAS', 'DEPENDENCIA_ENTIDAD']], right_on='DEPENDENCIA_ENTIDAD', left_on='dependencia')\\\n",
" [['SIGLAS', 'Riesgo_tipo_contratacion']]\n",
"imco_g.to_csv(datos+'puntaje_imco_dependencia.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PCA"
]
},
{
"cell_type": "code",
"execution_count": 516,
"metadata": {},
"outputs": [],
"source": [
"df_pca = imco_g.merge(serv_g, how='left')\\\n",
" .merge(provsanc_g, how='left')\\\n",
" .merge(noticias_inst, how='left')\\\n",
" .fillna(0)\n",
"pca_std = StandardScaler().fit_transform(df_pca.iloc[:,1:])\n",
"pca = PCA(n_components=4)\n",
"principalComponents = pca.fit_transform(pca_std)\n",
"principalDf = pd.DataFrame(data = principalComponents\n",
" , columns = ['pca', 'pca2', 'pca3', 'pca4'])\n",
"df_pca['pca'] = (principalDf * pca.explained_variance_ratio_).sum(axis=1)\n",
"df_pca['alerta2'] = pd.qcut(df_pca['pca'], q=4, labels=[5, 4, 3, 2])\n",
"alerta2 = lic_vig.merge(df_pca[['SIGLAS', 'alerta2']], left_on='siglas_de_la_institucion', right_on='SIGLAS', how='left')[['link', 'alerta2']]\n",
"alerta2.to_csv(datos+'alerta2.csv', index=False)\n",
"df_pca.sort_values('pca', ascending=False).to_csv(datos+'riesgo_por_dependencia.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Varianza explicada\n",
"\n",
"Encontramos que la varianza explicada por cada componente es bastante similar, por tanto, decidimos usar los 4 componentes para construir el índice. Cada componente se multiplicó por el porcentaje de la varianza que explicaba y luego sumamos estos valores."
]
},
{
"cell_type": "code",
"execution_count": 549,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.29781402, 0.25878261, 0.23768743, 0.20571594])"
]
},
"execution_count": 549,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pca.explained_variance_ratio_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Relación del índice con las variables\n",
"\n",
"Encontramos que el índice se relaciona principlamente con el número de noticias en medios y el número de proveedores sancionados. Con el número de funcionarios sancionados caso no presenta relación y con el índice de riesgo de contratación la correlación es negativa con un nivel de asociación relativamente bajo."
]
},
{
"cell_type": "code",
"execution_count": 551,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Riesgo_tipo_contratacion -0.183778\n",
"serv_sanc 0.003731\n",
"prov_sanc 0.637192\n",
"noticias 0.782737\n",
"pca 1.000000\n",
"Name: pca, dtype: float64"
]
},
"execution_count": 551,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_pca.corr()['pca']"
]
},
{
"cell_type": "code",
"execution_count": 538,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001A95425A240>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A9542C1940>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A954298898>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A954293F98>],\n",
" [<matplotlib.axes._subplots.AxesSubplot object at 0x000001A9543042E8>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A954304978>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A95433D2B0>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A954383F60>],\n",
" [<matplotlib.axes._subplots.AxesSubplot object at 0x000001A9543AA080>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A9543C5080>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A954406400>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A954424E80>],\n",
" [<matplotlib.axes._subplots.AxesSubplot object at 0x000001A954446390>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A95445FF28>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A9544747B8>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x000001A9544AC9E8>]],\n",
" dtype=object)"
]
},
"execution_count": 538,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 16 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd.plotting.scatter_matrix(principalDf, alpha=0.2)#.plot.scatter(x='pca', y='pca2')"
]
},
{
"cell_type": "code",
"execution_count": 533,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a9550f8dd8>"
]
},
"execution_count": 533,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"principalDf.plot.scatter(x='pca2', y='pca3')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Crea diccionario de dependencias"
]
},
{
"cell_type": "code",
"execution_count": 230,
"metadata": {},
"outputs": [],
"source": [
"dep = pd.read_excel(datos+'directorio_UC.xlsx').drop_duplicates(['SIGLAS', 'DEPENDENCIA_ENTIDAD'])\n",
"dep['re'] = dep['DEPENDENCIA_ENTIDAD'].str.replace(', S.A. de C.V.|_', '') + '|' +dep['SIGLAS'].apply(lambda x: f'\\\\b{x}\\\\b')\n",
"dep['dependencia'] = dep['DEPENDENCIA_ENTIDAD'].apply(plain)\n",
"dep.drop_duplicates(subset=['SIGLAS'], inplace=True)\n",
"with open('dicc_inst.json', 'w') as jfile:\n",
" json.dump(dep.set_index('SIGLAS')['re'].to_dict(), jfile)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Verifica licitaciones que no tienen archivos adjuntos"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [],
"source": [
"anex = pd.read_csv(datos+'vigentes.csv')\\\n",
" .replace('(sin archivo adjunto)', pd.np.nan)\n",
"ind = (anex.convocatoria.isnull()) & (anex.anexos_convocatoria.isnull()) & (anex.proyecto_convocatoria.isnull()) & (anex.N_archivos_anexo_adicional==0)\n",
"anex.loc[ind, 'sin_adjuntos'] = 1\n",
"anex.loc[~ind, 'sin_adjuntos'] = 0"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [],
"source": [
"anex.to_csv(datos+'licitaciones_vigentes.csv', index=False)"
]
}
],
"metadata": {
"celltoolbar": "Initialization Cell",
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment