Commit 34e70cbc authored by geobumac's avatar geobumac

examen 2

parent d1563097
......@@ -4,7 +4,686 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Examen Unidad 2"
"# Examen 2\n",
"\n",
"Responda a las siguentes preguntas. Tiene 24 horas para entregar la solución de todo el examen en formato de notebook, en su propia rama. Pasadas las 24 horas se descontará 1 punto por hora extra hasta un máximo de 5 horas.\n",
"\n",
"Los criterios para la evaluación de cada pregunta incluyen:\n",
"\n",
"* 80% de la puntuación si cumple cabalmente con la consigna y funciona;\n",
"* 20% de la puntuación si la solución cumple el paradigma orientado a objetos, la lógica es puntual, con buen estilo e incluye docstring."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## I. Matriz Documento-Término\n",
"\n",
"Una colección de $n$ documentos indexados por $m$ términos puede ser representada por una matriz $M_{[n x m]}$ conocida como matriz documento-término donde el valor de cada elemento $a_{ij}$ define la importancia del término $j$ en el documento $i$.\n",
"\n",
"La figura 1 muestra una matriz documento-término muy simple, donde cada columna representa un término en la colección, cada renglón un documento y cada celda o elemento de la matriz la ocurrencia del término en el documento. En ella podemos ver que el término 1 aparece en el documento 1 y 3, pero no en los otros dos documentos.\n",
"\n",
"\n",
" Término1 Término 2 Término 3\n",
" Documento1 1 0 0\n",
" Documento2 0 0 1\n",
" Documento3 1 1 1\n",
" Documento4 0 1 0\n",
"\n",
" Figura 1 – Matriz documento-termino simple.\n",
"\n",
"\n",
"### (4 puntos)\n",
"\n",
"* Defina la clase MatrizDT( ) cuyo constructor recibe una lista de documentos ([texto1, texto2, ...]) y tiene los siguientes métodos:\n",
"\n",
" * tf( ) que calcula una matriz documento-término donde cada celda $a_{ij}$ tiene el valor de la frecuencia de término : $ 1+ \\log Count(t_j, d_i) $ si $Count(t_j, d_i) > 0$; ó $0$ cuando el término $t_j$ no aparece en el documento $i$.\n",
"\n",
" * idf( ) que calcula una matriz documento-término donde cada celda $a_{ij}$ tiene el valor de la frecuencia inversa del término : $ \\log (\\frac{n}{df_t}) $ en donde $n$ es el número total de documentos y df_t es el número de textos en los cuales aparece el término $t$.\n",
"\n",
" * tf-idf( ) que calcula una matriz documento-término donde cada celda $a_{ij}$ tiene el producto de la frecuencia de término y de la frecuencia inversa del término. Es decir, el producto, por elemento, de las matrices anteriores.\n",
"\n",
"\n",
"\n",
"#### Observaciones\n",
"\n",
"* Utilice numpy y pandas para manipular los datos mediante estructuras de arregos y arreglos de arreglos;\n",
"\n",
"\n",
"* Utilice pandas para mostrar las matrices en el notebook;\n",
"\n",
"* No utilice modulos que generen directamente la matriz documento-término ni reutilice código que no haya sido programado por usted y que no sea capaz de explicar.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ejerce</th>\n",
" <th>escrito</th>\n",
" <th>campo</th>\n",
" <th>práctica</th>\n",
" <th>es</th>\n",
" <th>de</th>\n",
" <th>testimonios</th>\n",
" <th>informática</th>\n",
" <th>en</th>\n",
" <th>disciplina</th>\n",
" <th>se</th>\n",
" <th>o</th>\n",
" <th>hay</th>\n",
" <th>la</th>\n",
" <th>lenguaje</th>\n",
" <th>medicina</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Documento1</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.693147</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento2</th>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento3</th>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ejerce escrito campo práctica es de testimonios \\\n",
"Documento1 0.0 0.0 1.0 0.0 1.693147 1.0 0.0 \n",
"Documento2 1.0 0.0 0.0 1.0 1.000000 1.0 0.0 \n",
"Documento3 0.0 1.0 0.0 0.0 1.000000 1.0 1.0 \n",
"\n",
" informática en disciplina se o hay la lenguaje \\\n",
"Documento1 0.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 \n",
"Documento2 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 \n",
"Documento3 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 \n",
"\n",
" medicina \n",
"Documento1 0.0 \n",
"Documento2 1.0 \n",
"Documento3 0.0 "
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import re\n",
"import math\n",
"\n",
"class MatrizDT:\n",
" def __init__(self, listaDocs):\n",
" self.listaDocs = listaDocs\n",
" self.cleanDocs = self.getArrayCleanDocs()\n",
" self.totalDocs = len(listaDocs)\n",
" self.terminos = self.getTerminos()\n",
" self.listNameDoc = self.getListNameDoc()\n",
" \n",
" def removerpunt(self, s):\n",
" s = re.sub(r\"[,|\\.|:|?|=|​]\", \"\", s)\n",
" s = re.sub(r\"[^\\w\\s]\", '', s)\n",
" return s\n",
" \n",
" def getListNameDoc(self):\n",
" aux = []\n",
" iCont = 1\n",
" for i in self.listaDocs:\n",
" aux.append(\"Documento\" + str(iCont))\n",
" iCont += 1\n",
" return aux\n",
"\n",
" def getArrayCleanDocs(self):\n",
" aux = []\n",
" for i in self.listaDocs:\n",
" texto = self.removerpunt(i)\n",
" aText = texto.split(\" \")\n",
" aux.append(aText)\n",
" return np.array(aux)\n",
" \n",
" def getTerminos(self):\n",
" listaDocs = self.listaDocs\n",
" texto = ' '.join(listaDocs)\n",
" texto = texto.lower()\n",
" arrayTexto = texto.split(\" \")\n",
" return np.array(list(set(arrayTexto)))\n",
" \n",
" def tf(self):\n",
" aux = []\n",
" iCont = 1\n",
" for iDoc in self.cleanDocs:\n",
" aux.append([(1 + math.log(iDoc.count(i))) if iDoc.count(i) > 0 else 0 for i in self.terminos])\n",
" iCont += 1\n",
" return np.array(aux)\n",
" \n",
" def idf(self):\n",
" aux = []\n",
" data = self.tf()\n",
" #print(self.tf())\n",
" for iDoc in self.cleanDocs:\n",
" aux1 = []\n",
" for i in range(len(self.terminos)):\n",
" contUnos = 0\n",
" for j in data[:,i]:\n",
" if j > 0:\n",
" contUnos += 1;\n",
" valor = 0\n",
" if contUnos > 0:\n",
" valor = self.totalDocs / contUnos\n",
" aux1.append(valor)\n",
" aux.append(aux1)\n",
" return np.array(aux)\n",
" \n",
" def tfidf(self, tf, idf):\n",
" return np.multiply(tf, idf)\n",
" \n",
" \n",
" def getDF(self, data):\n",
" df = pd.DataFrame(data, index=self.listNameDoc, columns=self.terminos)\n",
" return df\n",
"\n",
"#listaDocs = [\n",
"# u'''La Informática es la disciplina o campo de estudio que abarca el conjunto de conocimientos, métodos y técnicas referentes al tratamiento automático de la información, junto con sus teorías y aplicaciones prácticas, con el fin de almacenar, procesar y transmitir datos e información en formato digital utilizando sistemas computacionales. Los datos son la materia prima para que, mediante su proceso, se obtenga como resultado información. Para ello, la informática crea y/o emplea sistemas de procesamiento de datos, que incluyen medios físicos (hardware) en interacción con medios lógicos (software) y las personas que los programan y/o los usan (humanware)''',\n",
"# u'''La práctica de la medicina se ejerce dentro del marco económico, legal y oficial del sistema médico que es parte de los sistemas nacionales de salud pública (políticas sanitarias estatales). Las características bajo las cuales se maneja el sistema sanitario en general y el órgano médico en particular ejercen un efecto significativo sobre cómo el servicio de salud, y la atención sanitaria puede ser aprovechada por la población general. Una de las variables más importantes para el funcionamiento del sistema se corresponde con el área financiera y el presupuesto que un Estado invierte en materia de salud. Otra variable implica los recursos humanos que articulan las directivas del sistema sanitario. La otra cara de la moneda en materia de atención médica está dada por el servicio privado de salud. Los honorarios y costos del servicio sanitario corren por cuenta del contratista, siendo de esta forma un servicio generalmente restringido a las clases económicamente solventes. Existen no obstante contratos de seguro médico que permiten acceder a estos servicios sanitarios privados; son, fundamentalmente, de dos tipos:''',\n",
"# u'''Hay testimonios de lenguaje escrito en forma de poesía en jeroglíficos egipcios de 25 siglos antes de Cristo. Se trata de cantos de labor y religiosos. El Poema de Gilgamesh, obra épica de los sumerios, fue escrito con caracteres cuneiformes y sobre tablas de arcilla unos 2000 años antes de Cristo. Los cantos de la Ilíada y la Odisea, cuya composición se atribuye a Homero, datan de ocho siglos antes de la era cristiana. Los Veda, libros sagrados del hinduismo, también contienen himnos y su última versión se calcula fue redactada en el siglo III a. C. Por estos y otros textos antiguos se supone justificadamente que los pueblos componían cantos que eran trasmitidos oralmente. Algunos acompañaban los trabajos, otros eran para invocar a las divinidades o celebrarlas y otros para narrar los hechos heroicos de la comunidad. Los cantos homéricos hablan de episodios muy anteriores a Homero y su estructura permite deducir que circulaban de boca en boca y que eran cantados con acompañamiento de instrumentos musicales. Homero menciona en su obra la figura del aedo (cantor), que narraba sucesos en verso al compás de la lira. El ritmo de los cantos no solo tenía la finalidad de agradar al oído, sino que permitía recordar los textos con mayor facilidad.'''\n",
"#]\n",
"\n",
"listaDocs = [\n",
" u'''La Informática es la disciplina o campo de es''',\n",
" u'''La práctica de la medicina se ejerce es''',\n",
" u'''Hay testimonios de lenguaje escrito en es'''\n",
"]\n",
"\n",
"mdt = MatrizDT(listaDocs)\n",
"tf = mdt.tf()\n",
"idf = mdt.idf()\n",
"tfidf = mdt.tfidf(tf, idf)\n",
"mdt.getDF(tf)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ejerce</th>\n",
" <th>escrito</th>\n",
" <th>campo</th>\n",
" <th>práctica</th>\n",
" <th>es</th>\n",
" <th>de</th>\n",
" <th>testimonios</th>\n",
" <th>informática</th>\n",
" <th>en</th>\n",
" <th>disciplina</th>\n",
" <th>se</th>\n",
" <th>o</th>\n",
" <th>hay</th>\n",
" <th>la</th>\n",
" <th>lenguaje</th>\n",
" <th>medicina</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Documento1</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento2</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento3</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ejerce escrito campo práctica es de testimonios \\\n",
"Documento1 3.0 3.0 3.0 3.0 1.0 1.0 3.0 \n",
"Documento2 3.0 3.0 3.0 3.0 1.0 1.0 3.0 \n",
"Documento3 3.0 3.0 3.0 3.0 1.0 1.0 3.0 \n",
"\n",
" informática en disciplina se o hay la lenguaje \\\n",
"Documento1 0.0 3.0 3.0 3.0 3.0 0.0 1.5 3.0 \n",
"Documento2 0.0 3.0 3.0 3.0 3.0 0.0 1.5 3.0 \n",
"Documento3 0.0 3.0 3.0 3.0 3.0 0.0 1.5 3.0 \n",
"\n",
" medicina \n",
"Documento1 3.0 \n",
"Documento2 3.0 \n",
"Documento3 3.0 "
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mdt.getDF(idf)"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ejerce</th>\n",
" <th>escrito</th>\n",
" <th>campo</th>\n",
" <th>práctica</th>\n",
" <th>es</th>\n",
" <th>de</th>\n",
" <th>testimonios</th>\n",
" <th>informática</th>\n",
" <th>en</th>\n",
" <th>disciplina</th>\n",
" <th>se</th>\n",
" <th>o</th>\n",
" <th>hay</th>\n",
" <th>la</th>\n",
" <th>lenguaje</th>\n",
" <th>medicina</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Documento1</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.693147</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento2</th>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento3</th>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ejerce escrito campo práctica es de testimonios \\\n",
"Documento1 0.0 0.0 3.0 0.0 1.693147 1.0 0.0 \n",
"Documento2 3.0 0.0 0.0 3.0 1.000000 1.0 0.0 \n",
"Documento3 0.0 3.0 0.0 0.0 1.000000 1.0 3.0 \n",
"\n",
" informática en disciplina se o hay la lenguaje \\\n",
"Documento1 0.0 0.0 3.0 0.0 3.0 0.0 1.5 0.0 \n",
"Documento2 0.0 0.0 0.0 3.0 0.0 0.0 1.5 0.0 \n",
"Documento3 0.0 3.0 0.0 0.0 0.0 0.0 0.0 3.0 \n",
"\n",
" medicina \n",
"Documento1 0.0 \n",
"Documento2 3.0 \n",
"Documento3 0.0 "
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mdt.getDF(tfidf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## II. Nubes de palabras\n",
"\n",
"Una nube de palabras o nube de etiquetas es una representación visual de las palabras que conforman un documento o una colección de documentos, en donde el tamaño es mayor para las palabras que son más \"importantes\" según un criterio dado. Son muy útiles para visualizar las palabras clave del contenido o para visualizar las ideas principales de un tema. La figura 2 muestra un ejemplo de nube de palabras extraida de \"Don Quijote\" es el sguiente:\n",
"\n",
"\n",
"<img crossorigin=\"anonymous\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Nube_de_etiquetas_-_Don_Quijote_de_la_Mancha.png/320px-Nube_de_etiquetas_-_Don_Quijote_de_la_Mancha.png\" class=\"png mw-mmv-dialog-is-open\" width=\"245\" height=\"145\">\n",
"\n",
" Figura 2 – Nube de etiquetas para el primer capítulo de Don Quijote de la Mancha.\n",
"\n",
"\n",
"\n",
"### (4 puntos)\n",
"\n",
"* Defina la clase NubePalabras() cuyo constructor recibe un diccionario cuyas llaves son palabras y cuyos valores son de tipo numérico y representan la \"importancia de la palabras\" e incluya el método plot_cloud() para generar la visualización utilizando Matplotlib tanto para controlar los aspectos visuales de la nube de palabras como para generar la figura.\n",
"\n",
"* Defina el método store_cloud('/algun/nombre/archivo.jpg') para guardar la figura en un archivo .jpg.\n",
"\n",
"* Modifique el constructor para aceptar un argumento opcional llamado \"stopwords\" que es una lista de palabras que no deben considerarse para la visuación. Si \"stopwords\" no es proporcionado al constructor, utilice por defaul una lista con las preposiciones y los verbos más comunes en español.\n",
"\n",
"\n",
"#### Observaciones\n",
"\n",
"* Las palabras deben de mostrarse en horizontal;\n",
"\n",
"* el tamaño de la letra debe refleja la importancia;\n",
"\n",
"* La disposición de las palabras puede se aleatoria pero las palabras más importantes deberían ocupar lugares centrales de la figura resultante;\n",
"\n",
"* El color de las palabras puede se aleatorio pero se aprecia una paleta de colores que se vean bien juntos;\n",
"\n",
"* El tamaño de la figura resultante debe ser apropiado para un monitor promedio, ni muy grande ni muy pequeño;\n",
"\n",
"* No utilice modulos de nubes de palabras ni reutilice código que no haya sido programado por usted y que no sea capaz de explicar.\n"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from wordcloud import WordCloud, STOPWORDS\n",
"import matplotlib.pyplot as plt\n",
"\n",
"class NubePalabras:\n",
" def __init__(self, dictPalabras, stopwords = None):\n",
" self.dictPalabras = dictPalabras\n",
" #print(set(STOPWORDS))\n",
" if stopwords == None:\n",
" stopwords = {\n",
" 'jugo'\n",
" }\n",
" #esta variable segun la documentacion es ignorada\n",
" self.stopwords = stopwords\n",
" \n",
" def plot_cloud(self):\n",
" self.wc = WordCloud(width=900,\n",
" height=600,\n",
" relative_scaling=1,\n",
" prefer_horizontal=1, stopwords = self.stopwords).generate_from_frequencies(self.dictPalabras)\n",
" plt.imshow(self.wc, interpolation='bilinear')\n",
" plt.axis(\"off\")\n",
" plt.show()\n",
" \n",
" def store_cloud(self, nombreArchivo):\n",
" #self.nombreArchivo = nombreArchivo\n",
" self.wc.to_file(nombreArchivo)\n",
" \n",
"myDict = {\n",
" 'python': 100,\n",
" 'topicos': 90,\n",
" 'matematicas':10,\n",
" 'anime': 50,\n",
" 'soporte': 16,\n",
" 'reloj': 5,\n",
" 'cerveza':30,\n",
" 'medicina': 1,\n",
" 'jugo': 85,\n",
" 'mayonesa': 30\n",
"}\n",
"\n",
"np = NubePalabras(myDict)\n",
"np.plot_cloud()\n",
"np.store_cloud(\"examen2_wordcloud.png\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## III. La ley de Zipf\n",
"\n",
"La ley de Zipf establece que la frecuencia de una palabra (para casi todos los idiomas) es inversamente proporcional a su posición $r$ en un ranking estadístico. De hecho para el idioma inglés se estableció que:\n",
"\n",
"<img src=\"http://mathworld.wolfram.com/images/equations/ZipfsLaw/NumberedEquation1.gif\" class=\"numberedequation\" width=\"116\" height=\"37\" border=\"0\" alt=\" P(r) approx 1/(rln(1.78R)), \">\n",
"\n",
"\n",
"donde $R$ es el número de palabras distintas.\n",
"\n",
"\n",
"### (2 puntos)\n",
"\n",
"Utilice los datos proporcionados en el repositorio para generar una distribución de probabilidad de Zipf utilizando $ln(rank)$ como la variable aleatoria ($xk$) y el $ln$(frecuency) como la distribución asociada a la variable ($pk$).\n",
"\n",
"* Datos\n",
"\n",
"./data/named_entity_recognition_sp_MX_locations.JSON\n",
"\n",
"\n",
"* graficar la función de densidad de probabilidades\n",
"* mostrar con evidencia experimental, con ayuda de scipy.stats, si el coeficiente $1.78R$ aplica también para español, y en caso de que no sea así, diga cuál es el valor del coeficiente correspondiente para español?\n",
"\n",
"\n",
"#### Observaciones\n",
"\n",
"* Báse su respuesta en el ejemplo de la distribución custom (rv_histogram) visto en clase;\n",
"* Ignore las etiquetas ``<START:location>`` y ``<END>`` para la generación de la distribución.\n",
"\n",
"\n",
"#### Referencias:\n",
"\n",
"* https://es.wikipedia.org/wiki/Ley_de_Zipf\n",
"* http://mathworld.wolfram.com/ZipfsLaw.html"
]
},
{
......@@ -31,7 +710,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8rc1"
"version": "3.7.1"
}
},
"nbformat": 4,
......
......@@ -57,6 +57,493 @@
"\n"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ejerce</th>\n",
" <th>escrito</th>\n",
" <th>campo</th>\n",
" <th>práctica</th>\n",
" <th>es</th>\n",
" <th>de</th>\n",
" <th>testimonios</th>\n",
" <th>informática</th>\n",
" <th>en</th>\n",
" <th>disciplina</th>\n",
" <th>se</th>\n",
" <th>o</th>\n",
" <th>hay</th>\n",
" <th>la</th>\n",
" <th>lenguaje</th>\n",
" <th>medicina</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Documento1</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.693147</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento2</th>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento3</th>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ejerce escrito campo práctica es de testimonios \\\n",
"Documento1 0.0 0.0 1.0 0.0 1.693147 1.0 0.0 \n",
"Documento2 1.0 0.0 0.0 1.0 1.000000 1.0 0.0 \n",
"Documento3 0.0 1.0 0.0 0.0 1.000000 1.0 1.0 \n",
"\n",
" informática en disciplina se o hay la lenguaje \\\n",
"Documento1 0.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 \n",
"Documento2 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 \n",
"Documento3 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 \n",
"\n",
" medicina \n",
"Documento1 0.0 \n",
"Documento2 1.0 \n",
"Documento3 0.0 "
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import re\n",
"import math\n",
"\n",
"class MatrizDT:\n",
" def __init__(self, listaDocs):\n",
" self.listaDocs = listaDocs\n",
" self.cleanDocs = self.getArrayCleanDocs()\n",
" self.totalDocs = len(listaDocs)\n",
" self.terminos = self.getTerminos()\n",
" self.listNameDoc = self.getListNameDoc()\n",
" \n",
" def removerpunt(self, s):\n",
" s = re.sub(r\"[,|\\.|:|?|=|​]\", \"\", s)\n",
" s = re.sub(r\"[^\\w\\s]\", '', s)\n",
" return s\n",
" \n",
" def getListNameDoc(self):\n",
" aux = []\n",
" iCont = 1\n",
" for i in self.listaDocs:\n",
" aux.append(\"Documento\" + str(iCont))\n",
" iCont += 1\n",
" return aux\n",
"\n",
" def getArrayCleanDocs(self):\n",
" aux = []\n",
" for i in self.listaDocs:\n",
" texto = self.removerpunt(i)\n",
" aText = texto.split(\" \")\n",
" aux.append(aText)\n",
" return np.array(aux)\n",
" \n",
" def getTerminos(self):\n",
" listaDocs = self.listaDocs\n",
" texto = ' '.join(listaDocs)\n",
" texto = texto.lower()\n",
" arrayTexto = texto.split(\" \")\n",
" return np.array(list(set(arrayTexto)))\n",
" \n",
" def tf(self):\n",
" aux = []\n",
" iCont = 1\n",
" for iDoc in self.cleanDocs:\n",
" aux.append([(1 + math.log(iDoc.count(i))) if iDoc.count(i) > 0 else 0 for i in self.terminos])\n",
" iCont += 1\n",
" return np.array(aux)\n",
" \n",
" def idf(self):\n",
" aux = []\n",
" data = self.tf()\n",
" #print(self.tf())\n",
" for iDoc in self.cleanDocs:\n",
" aux1 = []\n",
" for i in range(len(self.terminos)):\n",
" contUnos = 0\n",
" for j in data[:,i]:\n",
" if j > 0:\n",
" contUnos += 1;\n",
" valor = 0\n",
" if contUnos > 0:\n",
" valor = self.totalDocs / contUnos\n",
" aux1.append(valor)\n",
" aux.append(aux1)\n",
" return np.array(aux)\n",
" \n",
" def tfidf(self, tf, idf):\n",
" return np.multiply(tf, idf)\n",
" \n",
" \n",
" def getDF(self, data):\n",
" df = pd.DataFrame(data, index=self.listNameDoc, columns=self.terminos)\n",
" return df\n",
"\n",
"#listaDocs = [\n",
"# u'''La Informática es la disciplina o campo de estudio que abarca el conjunto de conocimientos, métodos y técnicas referentes al tratamiento automático de la información, junto con sus teorías y aplicaciones prácticas, con el fin de almacenar, procesar y transmitir datos e información en formato digital utilizando sistemas computacionales. Los datos son la materia prima para que, mediante su proceso, se obtenga como resultado información. Para ello, la informática crea y/o emplea sistemas de procesamiento de datos, que incluyen medios físicos (hardware) en interacción con medios lógicos (software) y las personas que los programan y/o los usan (humanware)''',\n",
"# u'''La práctica de la medicina se ejerce dentro del marco económico, legal y oficial del sistema médico que es parte de los sistemas nacionales de salud pública (políticas sanitarias estatales). Las características bajo las cuales se maneja el sistema sanitario en general y el órgano médico en particular ejercen un efecto significativo sobre cómo el servicio de salud, y la atención sanitaria puede ser aprovechada por la población general. Una de las variables más importantes para el funcionamiento del sistema se corresponde con el área financiera y el presupuesto que un Estado invierte en materia de salud. Otra variable implica los recursos humanos que articulan las directivas del sistema sanitario. La otra cara de la moneda en materia de atención médica está dada por el servicio privado de salud. Los honorarios y costos del servicio sanitario corren por cuenta del contratista, siendo de esta forma un servicio generalmente restringido a las clases económicamente solventes. Existen no obstante contratos de seguro médico que permiten acceder a estos servicios sanitarios privados; son, fundamentalmente, de dos tipos:''',\n",
"# u'''Hay testimonios de lenguaje escrito en forma de poesía en jeroglíficos egipcios de 25 siglos antes de Cristo. Se trata de cantos de labor y religiosos. El Poema de Gilgamesh, obra épica de los sumerios, fue escrito con caracteres cuneiformes y sobre tablas de arcilla unos 2000 años antes de Cristo. Los cantos de la Ilíada y la Odisea, cuya composición se atribuye a Homero, datan de ocho siglos antes de la era cristiana. Los Veda, libros sagrados del hinduismo, también contienen himnos y su última versión se calcula fue redactada en el siglo III a. C. Por estos y otros textos antiguos se supone justificadamente que los pueblos componían cantos que eran trasmitidos oralmente. Algunos acompañaban los trabajos, otros eran para invocar a las divinidades o celebrarlas y otros para narrar los hechos heroicos de la comunidad. Los cantos homéricos hablan de episodios muy anteriores a Homero y su estructura permite deducir que circulaban de boca en boca y que eran cantados con acompañamiento de instrumentos musicales. Homero menciona en su obra la figura del aedo (cantor), que narraba sucesos en verso al compás de la lira. El ritmo de los cantos no solo tenía la finalidad de agradar al oído, sino que permitía recordar los textos con mayor facilidad.'''\n",
"#]\n",
"\n",
"listaDocs = [\n",
" u'''La Informática es la disciplina o campo de es''',\n",
" u'''La práctica de la medicina se ejerce es''',\n",
" u'''Hay testimonios de lenguaje escrito en es'''\n",
"]\n",
"\n",
"mdt = MatrizDT(listaDocs)\n",
"tf = mdt.tf()\n",
"idf = mdt.idf()\n",
"tfidf = mdt.tfidf(tf, idf)\n",
"mdt.getDF(tf)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ejerce</th>\n",
" <th>escrito</th>\n",
" <th>campo</th>\n",
" <th>práctica</th>\n",
" <th>es</th>\n",
" <th>de</th>\n",
" <th>testimonios</th>\n",
" <th>informática</th>\n",
" <th>en</th>\n",
" <th>disciplina</th>\n",
" <th>se</th>\n",
" <th>o</th>\n",
" <th>hay</th>\n",
" <th>la</th>\n",
" <th>lenguaje</th>\n",
" <th>medicina</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Documento1</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento2</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento3</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ejerce escrito campo práctica es de testimonios \\\n",
"Documento1 3.0 3.0 3.0 3.0 1.0 1.0 3.0 \n",
"Documento2 3.0 3.0 3.0 3.0 1.0 1.0 3.0 \n",
"Documento3 3.0 3.0 3.0 3.0 1.0 1.0 3.0 \n",
"\n",
" informática en disciplina se o hay la lenguaje \\\n",
"Documento1 0.0 3.0 3.0 3.0 3.0 0.0 1.5 3.0 \n",
"Documento2 0.0 3.0 3.0 3.0 3.0 0.0 1.5 3.0 \n",
"Documento3 0.0 3.0 3.0 3.0 3.0 0.0 1.5 3.0 \n",
"\n",
" medicina \n",
"Documento1 3.0 \n",
"Documento2 3.0 \n",
"Documento3 3.0 "
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mdt.getDF(idf)"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ejerce</th>\n",
" <th>escrito</th>\n",
" <th>campo</th>\n",
" <th>práctica</th>\n",
" <th>es</th>\n",
" <th>de</th>\n",
" <th>testimonios</th>\n",
" <th>informática</th>\n",
" <th>en</th>\n",
" <th>disciplina</th>\n",
" <th>se</th>\n",
" <th>o</th>\n",
" <th>hay</th>\n",
" <th>la</th>\n",
" <th>lenguaje</th>\n",
" <th>medicina</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Documento1</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.693147</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento2</th>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.5</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Documento3</th>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ejerce escrito campo práctica es de testimonios \\\n",
"Documento1 0.0 0.0 3.0 0.0 1.693147 1.0 0.0 \n",
"Documento2 3.0 0.0 0.0 3.0 1.000000 1.0 0.0 \n",
"Documento3 0.0 3.0 0.0 0.0 1.000000 1.0 3.0 \n",
"\n",
" informática en disciplina se o hay la lenguaje \\\n",
"Documento1 0.0 0.0 3.0 0.0 3.0 0.0 1.5 0.0 \n",
"Documento2 0.0 0.0 0.0 3.0 0.0 0.0 1.5 0.0 \n",
"Documento3 0.0 3.0 0.0 0.0 0.0 0.0 0.0 3.0 \n",
"\n",
" medicina \n",
"Documento1 0.0 \n",
"Documento2 3.0 \n",
"Documento3 0.0 "
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mdt.getDF(tfidf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
......@@ -96,6 +583,70 @@
"* No utilice modulos de nubes de palabras ni reutilice código que no haya sido programado por usted y que no sea capaz de explicar.\n"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from wordcloud import WordCloud, STOPWORDS\n",
"import matplotlib.pyplot as plt\n",
"\n",
"class NubePalabras:\n",
" def __init__(self, dictPalabras, stopwords = None):\n",
" self.dictPalabras = dictPalabras\n",
" #print(set(STOPWORDS))\n",
" if stopwords == None:\n",
" stopwords = {\n",
" 'jugo'\n",
" }\n",
" #esta variable segun la documentacion es ignorada\n",
" self.stopwords = stopwords\n",
" \n",
" def plot_cloud(self):\n",
" self.wc = WordCloud(width=900,\n",
" height=600,\n",
" relative_scaling=1,\n",
" prefer_horizontal=1, stopwords = self.stopwords).generate_from_frequencies(self.dictPalabras)\n",
" plt.imshow(self.wc, interpolation='bilinear')\n",
" plt.axis(\"off\")\n",
" plt.show()\n",
" \n",
" def store_cloud(self, nombreArchivo):\n",
" #self.nombreArchivo = nombreArchivo\n",
" self.wc.to_file(nombreArchivo)\n",
" \n",
"myDict = {\n",
" 'python': 100,\n",
" 'topicos': 90,\n",
" 'matematicas':10,\n",
" 'anime': 50,\n",
" 'soporte': 16,\n",
" 'reloj': 5,\n",
" 'cerveza':30,\n",
" 'medicina': 1,\n",
" 'jugo': 85,\n",
" 'mayonesa': 30\n",
"}\n",
"\n",
"np = NubePalabras(myDict)\n",
"np.plot_cloud()\n",
"np.store_cloud(\"examen2_wordcloud.png\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment