<jupyter_start><jupyter_text>Ejercicio Python de K-meansRealizaremos un ejercicio de prueba para comprender como funciona este algoritmo Como ejemplo utilizaremos de entradas un conjunto de datos que [<NAME>](http://www.aprendemachinelearning.com/k-means-en-python-paso-a-paso/) obtuvo de un proyecto propio, en el que se analizaban rasgos de la personalidad de usuarios de Twitter. Filtró a 140 “famosos” del mundo en diferentes areas: deporte, cantantes, actores, etc. Basado en una metodología de psicología conocida como **“Ocean: The Big Five”** tendemos como características de entrada:- `usuario`: (el nombre en Twitter)- `op` = Openness to experience – grado de apertura mental a nuevas experiencias, curiosidad, arte- `co` =Conscientiousness – grado de orden, prolijidad, organización- `ex` = Extraversion – grado de timidez, solitario o participación ante el grupo social- `ag` = Agreeableness – grado de empatía con los demás, temperamento- `ne` = Neuroticism, – grado de neuroticismo, nervioso, irritabilidad, seguridad en sí mismo.- `Wordcount` – Cantidad promedio de palabras usadas en sus tweets- `Categoria` – Actividad laboral del usuario (actor, cantante, etc.)    - `1` - Actor/actriz    - `2` - Cantante    - `3` - Modelo    - `4` - Tv, series    - `5` - Radio    - `6` - Tecnología    - `7` - Deportes    - `8` - Politica    - `9` - Escritor<jupyter_code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin_min

%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['figure.figsize'] = (20, 12)
plt.style.use('ggplot')<jupyter_output><empty_output><jupyter_text>Cargamos los datos de entrada del archivo csv<jupyter_code>dataframe = pd.read_csv('../datasets/twitter.csv')
dataframe.head()<jupyter_output><empty_output><jupyter_text>Análisis exploratorio de los datos  Visualizamos los datos  Creamos el modelo<jupyter_code>#Para el ejercicio, sólo seleccionamos 3 dimensiones, para poder pintarlo
X = np.array(dataframe[["op","ex","ag"]])
y = np.array(dataframe['categoria'])
X.shape
fig = plt.figure()
ax = Axes3D(fig)
colores=['blue','red','green','blue','cyan','yellow','orange','black','pink','brown','purple']

#NOTA: asignamos la posición cero del array repetida pues las categorias comienzan en id 1. 
asignar=[]
for row in y:
    asignar.append(colores[row])
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=asignar,s=60)<jupyter_output><empty_output><jupyter_text>Buscamos el valor K<jupyter_code># pintamos los distintos valores de K - score<jupyter_output><empty_output><jupyter_text>Ejecutamos KMeans para el mejor K<jupyter_code># contamos cuantos usuarios hay en cada grupo
# Veamos cuantos usuarios en cada categoria hay en el grupo 0
#imprimimos en pantalla los usuarios con categoria 2 del grupo
#vemos el representante del grupo, el usuario cercano a su centroid
#miramos los usuarios del grupo 0<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10585885486018642, 'fraction_numerical': 0.009653794940079893, 'mean_word_length': 5.462365591397849, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '230569', 'license': 'MIT', 'n_tokens_mistral': 1076, 'n_tokens_neox': 1063, 'n_words': 332, 'path': 'ejercicios/twitter_kmeans.ipynb', 'repo_name': 'joseluisGA/videojuegos', 'size': '3018'}