<jupyter_start><jupyter_text>Definición de categorías<jupyter_code># Palabras más repetidas - check
# Número total de documentos - check
# Distribución por día de los tweet. - Check
# Promedio de palabras por documento -check
# Distribución del número de palabras por documento- Check
# 


vaccine_en ={
    "name": "vaccine", 
    "values":  [ "vaccine", "Pfizer","astrazeneca", "Janssen" , "moderna"," BioNTech", "Sputnik V", "<NAME>"," CoronaVac", "Sinovac"]}
vaccination_en = {
    "name": "vaccination", 
    "values": ["vaccination", "dose", "side-effect", "hospital", "injection", "immunity", "anti-bodies"]}
mentalHealth_en = {
    "name": "Mental Health", 
    "values": ["mental-health", "psychiatric","psycologist","depression", "stress", "claustrophobia", "suicide", "sadness", "loneliness"]}
vaccine_it = {
    "name":"vaccino", 
    "values": ["vaccino", "Pfizer", "AstraZeneca", "Janssen", "Moderna"," BioNTech", "Sputnik V", "<NAME>"," CoronaVac", "Sinovac"]}

vaccination_it ={
    "name":"vaccinazione", 
    "values": [ "vaccinazione", "dose", "effetto collaterale", "ospedale", "iniezione", "immunità", "anticorpi"]}

mentalHealth_it = {
    "name":"Salute mentale", 
    "values": ["salute mentale", "psichiatra", "psicologo", "depressione", "stress", "claustrofobia", "suicidio", "tristezza", "solitudine"]}

vaccine_es = {
    "name": "Vacuna", 
    "values": ["vacuna", "Pfizer", "astrazeneca", "Janssen", "moderna", "BioNTech", "Sputnik V", "Johnson & Johnson", "CoronaVac", "Sinovac"]}
vaccination_es = {
    "name": "Vacunación",
     "values": ["vacunación", "dosis", "efecto secundario", "hospital", "inyección", "inmunidad", "anticuerpos"]}
mentalHealth_es = {
    "name": "Salud mental", 
    "values": ["salud mental", "psiquiátrica", "psicólogo", "depresión", "estrés", "claustrofobia", "suicidio", "tristeza", "soledad"]}

def getCategories(languageName, *args):
    all_categories = []
    vecorizer = CountVectorizer(max_features=20000, stop_words=stopwords.words(languageName))
    for category in args:
        # print(category.items())
        # print(values)
        vectorizer_verdaderas.fit_transform(category["values"])
        all_categories.append({
            "name": category["name"],
             "values": list(vectorizer_verdaderas.vocabulary_.keys())
             })
    
    return all_categories


[vaccine_en, vaccination_en, mentalHealth_en] = getCategories("english", vaccine_en, vaccination_en, mentalHealth_en)
print(vaccine_en)
print(vaccination_en)
print(mentalHealth_en)<jupyter_output>{'name': 'vaccine', 'values': ['vaccine', 'pfizer', 'astrazeneca', 'janssen', 'moderna', 'biontech', 'sputnik', 'johnson', 'coronavac', 'sinovac']}
{'name': 'vaccination', 'values': ['vaccination', 'dose', 'side', 'effect', 'hospital', 'injection', 'immunity', 'anti', 'bodies']}
{'name': 'Mental Health', 'values': ['mental', 'health', 'psychiatric', 'psycologist', 'depression', 'stress', 'claustrophobia', 'suicide', 'sadness', 'loneliness']}<jupyter_text>Análisis de ocurrenciasItaliano<jupyter_code>def plotCategorias(frecuencias, *categorias):
    n = len(categorias)
    # plt.figure(figsize=(10,60)
    plt.rcParams["figure.figsize"] = (20,10)

    for categoria in categorias:
        plt.subplot(1, len(categorias), n)
        n -= 1
        name = categoria['name']
        values = categoria['values']
        freqs = [frecuencias[cat] if cat in frecuencias else 0 for cat in values ]
        plt.bar(values, freqs, width=0.8, color='blue')
        plt.title(f'{name}')
        plt.grid()
        plt.xticks(rotation=270)
    # plt.tight_layout()
    plt.show()

def frecuenciasPorLenguaje(dfLanguage, nombreIdioma, *categorias):

    vectorizer_verdaderas = CountVectorizer(max_features=20000, min_df=5, max_df=0.7, stop_words=stopwords.words(nombreIdioma))

    # Buscar occurencias
    freq_T = vectorizer_verdaderas.fit_transform(dfLanguage['text'].to_list())

    # sumar ocurrencias
    freq_T = np.asarray(freq_T.sum(axis=0)).reshape(20000)

    dict_T = vectorizer_verdaderas.vocabulary_

    #Se le asigna la frecuencia a cada palabra
    freqs = {key: freq_T[dict_T[key]] for key in dict_T.keys()}

    # #Ordenar
    dict_T = {f: v for f, v in sorted(freqs.items(), key=lambda item: item[1], reverse=True)}

    # #Obtener 20 palabras más frecuentes

    dict_T = {k: dict_T[k] for k in list(dict_T)[:20]}

    #Graficar
    plt.rcParams["figure.figsize"] = (20,10)
    plt.bar(dict_T.keys(), dict_T.values(), width=0.8, color='orange')
    plt.title(f'Ocurrencias de palabras en los datos en {nombreIdioma}')
    plt.xticks(rotation=270)
    plt.show()

    plotCategorias(freqs, *categorias)
frecuenciasPorLenguaje(raw_italian, 'italian', vaccine_it, vaccination_it, mentalHealth_it)
frecuenciasPorLenguaje(raw_spanish, 'spanish', vaccine_es, vaccination_es, mentalHealth_es)
frecuenciasPorLenguaje(raw_english, 'english', vaccine_en, vaccination_en, mentalHealth_en)<jupyter_output><empty_output><jupyter_text>Promedio de palabras por documento por idioma<jupyter_code>def getAverageNrWordsPerDoc(dfLanguage):
    return dfLanguage['text'].str.split().str.len().mean()
avg_nro_words_spanish = getAverageNrWordsPerDoc(raw_spanish)
avg_nro_words_italian = getAverageNrWordsPerDoc(raw_italian)
avg_nro_words_english = getAverageNrWordsPerDoc(raw_english)

print('Promedio de palabras por documento en Español:', avg_nro_words_spanish)

print('Promedio de palabras por documento en Italiano:', avg_nro_words_italian)

print('Promedio de palabras por documento en Inglés:', avg_nro_words_italian)
ax = raw_spanish['text'].str.split().str.len().plot.hist(bins=20, alpha=0.5)
ax.set_title('Distribución del número de palabras por documento en Español')
ax.set_xlabel('Número de palabras')
ax = raw_italian['text'].str.split().str.len().plot.hist(bins=20, alpha=0.5)
ax.set_title('Distribución del número de palabras por documento en Italiano')
ax.set_xlabel('Número de palabras')
ax = raw_english['text'].str.split().str.len().plot.hist(bins=20, alpha=0.5)
ax.set_title('Distribución del número de palabras por documento en Inglés')
ax.set_xlabel('Número de palabras')
from datetime import datetime
# import datetimed
# datetime.fromtimestamp(1485714600).strftime("%A, %B %d, %Y %I:%M:%S")
raw_italian['dates'] =  raw_italian['publication_date'].apply(lambda x:  datetime.fromtimestamp(x))
raw_spanish['dates'] =  raw_spanish['publication_date'].apply(lambda x:  datetime.fromtimestamp(x))
raw_english['dates'] =  raw_english['publication_date'].apply(lambda x:  datetime.fromtimestamp(x))
ax = raw_italian.groupby([raw_italian['dates'].dt.year, raw_italian['dates'].dt.month]).count()['id'].plot(kind="bar")
ax.set_title('Distribución de los documentos en Italiano por el mes de de publicación')
ax.set_xlabel('Mes y año de los tweets')
ax.set_ylabel('Número de tweets')

ax = raw_spanish.groupby([raw_spanish['dates'].dt.year, raw_spanish['dates'].dt.month]).count()['id'].plot(kind="bar")
ax.set_title('Distribución de los documentos en Español por el mes de de publicación')
ax.set_xlabel('Mes y año de los tweets')
ax.set_ylabel('Número de tweets')
ax = raw_english.groupby([raw_english['dates'].dt.year, raw_spanish['dates'].dt.month]).count()['id'].plot(kind="bar")
ax.set_title('Distribución de los documentos en Inglés por el mes de de publicación')
ax.set_xlabel('Mes y año de los tweets')
ax.set_ylabel('Número de tweets')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15899919289749798, 'fraction_numerical': 0.00955071294054345, 'mean_word_length': 5.72242314647378, 'pattern_counts': {'":': 20, '<': 14, '<?xml version=': 0, '>': 14, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, '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': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '392081', 'license': 'MIT', 'n_tokens_mistral': 2841, 'n_tokens_neox': 2720, 'n_words': 536, 'path': 'HW4/datasetsMetrics.ipynb', 'repo_name': 'diegommezp28/NLP_202110', 'size': '7456'}