es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con el tamaño de tu conjunto de datos, ya que el código funciona correctamente con un dataframe más pequeño con solo 100 filas.

    Una forma de mejorar el rendimiento de tu código es utilizar matrices dispersas, lo cual te permitirá trabajar con conjuntos de datos grandes sin quedarte sin memoria. CountVectorizer de Scikit-learn ya retorna una matriz dispersa por defecto, pero puedes establecer explícitamente esta opción utilizando el parámetro sparse=True.

    Aquí tienes una versión actualizada de tu código que utiliza una matriz dispersa:

    import pandas as pd
    from sklearn.feature_extraction.text import CountVectorizer
    
    pd.set_option('display.max_colwidth', None)
    
    # Carga los datos en trozos utilizando pandas
    tamaño_trozo = 10000
    trozos = []
    for trozo in pd.read_pickle("tweet_post_stop.pkl", chunksize=tamaño_trozo):
        trozos.append(trozo)
    df = pd.concat(trozos, ignore_index=True)
    
    # Define el CountVectorizer con 'sparse=True'
    cv = CountVectorizer(sparse=True)
    
    # Ajusta y transforma los datos
    ajuste_cv = cv.fit_transform(df.Testo_token)
    
    # Obtiene los nombres de las características y sus conteos correspondientes
    lista_palabras = cv.get_feature_names()
    lista_conteos = ajuste_cv.toarray().sum(axis=0)
    
    # Crea un diccionario con los conteos de palabras
    conteo_palabras = dict(zip(lista_palabras, lista_conteos))
    
    # Ordena el diccionario por conteo descendente
    conteos_palabras_ordenados = sorted(conteo_palabras.items(), key=lambda x: x[1], reverse=True)
    
    # Imprime las 20 palabras más frecuentes y sus conteos
    top_20_palabras = conteos_palabras_ordenados[:20]
    for palabra, conteo in top_20_palabras:
        print(f"{palabra}: {conteo}")
    

    Este código debería permitirte procesar todo tu conjunto de datos sin quedarte sin memoria. Al utilizar la función de troceado de pandas, el código carga los datos en pedazos más pequeños y manejables.

    Ten en cuenta que la salida de ajuste_cv se devuelve como una matriz dispersa y necesitarás convertirla en una matriz densa utilizando el método toarray() para poder calcular la suma a lo largo de las filas utilizando sum(axis=0).

    Por último, he agregado código para ordenar los conteos de palabras en orden descendente e imprimir las 20 palabras más comunes. Si lo necesitas, siéntete libre de ajustarlo según tus necesidades específicas.

Comments are closed.