Example #1
0
def update_graph(programa_name, output):
    #Valores del eje de abscisas
    arch_tertulianos = fc.switch_tertulianos(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    tertulianos = [i for i in arch_tertulianos['Usuario']
                   ]  #Se obtienen los tertulianos del archivo
    x_tertulianos = [x for x in tertulianos if str(x) != 'nan'
                     ]  #Se eliminan de la selección anterior los valores nulos

    #Valores del eje de ordenadas
    arch_tweets = fc.switch_tweets(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    tweets_fracc = []  #Lista para almacenar todas las palabras de los tweets
    y_tweets_tertuliano = []  #Lista del eje de ordenadas

    for i in arch_tweets[
            'Tweet']:  #Se obtienen las palabras de todos los tweets
        tweets_fracc += i.split()

    for i in x_tertulianos:  #Se calcula el número de tweets correspondiente a cada tertuliano y se añade a la lista que representa el eje de ordenadas
        y_tweets_tertuliano.append(tweets_fracc.count(i))

    #Generamos un pair con ambas listas
    pair = [[x, y] for x, y in zip(x_tertulianos, y_tweets_tertuliano)]

    #Se ordenan los elementos en función del segundo parametro del pair
    pair.sort(key=operator.itemgetter(1))
    pair.reverse()  #Se invierte el orden para que sea de mayor a menor

    #Se actualizan las listas que se muestran
    x_tertulianos = []
    y_tweets_tertuliano = []

    for a, b in pair:
        x_tertulianos.append(a)
        y_tweets_tertuliano.append(b)

    #Datos y estilo del gráfico
    return {
        'data': [
            dict(x=y_tweets_tertuliano,
                 y=x_tertulianos,
                 type='bar',
                 text='tweets',
                 marker=dict(color=colors),
                 hovertemplate='%{x} tweets <extra></extra>',
                 orientation='h')
        ],
        'layout':
        dict(yaxis=dict(
            autorange='reversed',
            linecolor='white',
            linewidth=3,
        ),
             xaxis=dict(title="Tweets", titlefont=dict(size=16)),
             margin=dict(l=135, r=20, t=70, b=65))
    }
Example #2
0
def set_tema_options(programa_name, output):
    arch_colaboradores = fc.switch_tertulianos(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    return [{
        'label': i,
        'value': i
    } for i in arch_colaboradores['Tertuliano']
            ]  #Se obtienen los colaboradores del archivo
Example #3
0
def update_details_table(query, programa_name, output):
    ##Extracción y transformación de las horas iniciales del archivo Emociones:
    #1. Transformación al formato en el que se encuentran la transcripción
    arch_emociones = fc.switch_emociones(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    inicio = [i for i in arch_emociones['Inicio']
              ]  #Se obtiene una lista con las horas iniciales
    inicio_format = []  #Lista con las horas iniciales en el formato correcto

    for i in inicio:  #Se trasforma el formato horario de un archivo en el formato del otro archivo
        inicio_format.append(
            datetime.strptime(i, "%Hh%Mm%S.%fs").strftime('%H:%M:%S'))

    #2. Transformación al formato datetime
    inicio_datetime = fc.obtener_datetime(inicio_format, programa_name)

    ##Extracción y transformación de las horas de la transcripción al formato datetime:
    arch_transcripcion = fc.switch_transcripcion(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    horas_format = fc.obtener_datetime(
        arch_transcripcion['Hora'], programa_name
    )  #Establece el formato datetime a cada una de las horas del archivo de Hashtag

    ##Obtención de las frases del programa:
    #1. Se extrae las frases
    sentences = fc.sentences(arch_transcripcion)

    #2. Se filtran las emociones
    arousal = fc.emotion_filter(arch_emociones['Emociones'], 'arousal')
    valencia = fc.emotion_filter(arch_emociones['Emociones'], 'valence')

    #3. Se añaden las emociones a cada frase
    sentences_e = fc.sentence_emotion(horas_format, list(sentences.values()),
                                      inicio_datetime, arousal, valencia,
                                      programa_name)

    #4. Transformar filtro en su codigo
    arch_colaborador = fc.switch_tertulianos(programa_name, output)
    code = fc.find_code(query, arch_colaborador)

    #5. Crear dataframe
    sent = []
    arol = []
    val = []
    col = []

    for i in list(sentences_e.keys()):
        for j in sentences_e[i]:
            sent.append(j[0])
            arol.append(j[1])
            val.append(j[2])
            col.append(i)

    data = {'Code': col, 'Sentencia': sent, 'Arousal': arol, 'Valencia': val}
    dataframe = pd.DataFrame(
        data, columns=['Code', 'Sentencia', 'Arousal', 'Valencia'])

    #6. Obtener los valores del dataframe
    filter = dataframe.loc[getattr(dataframe['Code'], 'eq')(code)]

    return filter.to_dict('records')
Example #4
0
def update_graph(programa_name, output):
    ##Extracción y transformación de las horas iniciales del archivo Emociones:
    #1. Transformación al formato en el que se encuentran la transcripción
    arch_emociones = fc.switch_emociones(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    inicio = [i for i in arch_emociones['Inicio']
              ]  #Se obtiene una lista con las horas iniciales
    inicio_format = []  #Lista con las horas iniciales en el formato correcto

    for i in inicio:  #Se trasforma el formato horario de un archivo en el formato del otro archivo
        inicio_format.append(
            datetime.strptime(i, "%Hh%Mm%S.%fs").strftime('%H:%M:%S'))

    #2. Transformación al formato datetime
    inicio_datetime = fc.obtener_datetime(inicio_format, programa_name)

    ##Extracción y transformación de las horas de la transcripción al formato datetime:
    arch_transcripcion = fc.switch_transcripcion(
        programa_name,
        output)  #Se selecciona el archivo correspondiente al programa
    horas_format = fc.obtener_datetime(
        arch_transcripcion['Hora'], programa_name
    )  #Establece el formato datetime a cada una de las horas del archivo de Hashtag

    ##Obtención de los speakers del programa:
    #1. Se extrae los speakers
    speakers = fc.speaker(arch_transcripcion)

    #2. Se filtran las emociones
    valence = fc.emotion_filter(arch_emociones['Emociones'], 'valence')

    #3. Se añaden las emociones a cada speaker
    emotions_valence = fc.speaker_emotion(horas_format,
                                          list(speakers.values()),
                                          inicio_datetime, valence,
                                          programa_name)

    #4. Se eliminan los speakers que no son tertulianos
    arch_tertulianos = fc.switch_tertulianos(programa_name, output)
    valence_tertulianos = fc.delete_speakers(emotions_valence,
                                             arch_tertulianos['Numero'])

    ##Obtención del porcentaje de emociones de los tertulianos
    #1. Se contabiliza cada valor
    count_valence = fc.count_emotion(valence_tertulianos)

    #2. Se calcula el porcentaje de cada valor
    total_valence = fc.calcular_total(count_valence)
    percent_valence = fc.emotion_percent(count_valence, total_valence)

    ##Se crea el diseño del gráfico
    #1. Se obtiene la serie x
    x = fc.obtener_tertuliano(count_valence, arch_tertulianos)

    #2. Se obtienen las series de y
    y1 = []
    y2 = []
    y3 = []
    y4 = []
    y5 = []

    #Para que el gráfico identifique bien los valores es necesario remarcar los valores ausentes de cada categoria
    for i in percent_valence:
        l = list(percent_valence[i].keys())

        if 'Negativo (desagradable / no colabora nada)' not in l:
            percent_valence[i][
                'Negativo (desagradable / no colabora nada)'] = 0
        if 'Ligeramente negativo' not in l:
            percent_valence[i]['Ligeramente negativo'] = 0
        if 'Neutral' not in l:
            percent_valence[i]['Neutral'] = 0
        if 'Ligeramente positivo' not in l:
            percent_valence[i]['Ligeramente positivo'] = 0
        if 'Positivo (agradable / constructivo)' not in l:
            percent_valence[i]['Positivo (agradable / constructivo)'] = 0

    #Se incorporan los valores a las diferentes trazas
    for i in percent_valence:
        for j in percent_valence[i]:
            if j == 'Negativo (desagradable / no colabora nada)':
                y1.append(percent_valence[i][j])
            elif j == 'Ligeramente negativo':
                y2.append(percent_valence[i][j])
            elif j == 'Neutral':
                y3.append(percent_valence[i][j])
            elif j == 'Ligeramente positivo':
                y4.append(percent_valence[i][j])
            elif j == 'Positivo (agradable / constructivo)':
                y5.append(percent_valence[i][j])

    #3. Se establecen los datos
    data = [
        go.Bar(name='Negativo',
               x=y1,
               y=x,
               orientation='h',
               marker=dict(color='rgb(33,56,33,22)'),
               hovertemplate='%{x:.2f}%'),
        go.Bar(name='Ligeramente negativo',
               x=y2,
               y=x,
               orientation='h',
               marker=dict(color='rgb(53,140,59,55)'),
               hovertemplate='%{x:.2f}%'),
        go.Bar(name='Neutral',
               x=y3,
               y=x,
               orientation='h',
               marker=dict(color='rgb(231,237,216,93)'),
               hovertemplate='%{x:.2f}%'),
        go.Bar(name='Ligeramente positivo',
               x=y4,
               y=x,
               orientation='h',
               marker=dict(color='rgb(227,255,154,100)'),
               hovertemplate='%{x:.2f}%'),
        go.Bar(name='Positivo',
               x=y5,
               y=x,
               orientation='h',
               marker=dict(color='rgb(170,255,0,100)'),
               hovertemplate='%{x:.2f}%')
    ]

    return {
        'data':
        data,
        'layout':
        go.Layout(barmode='stack',
                  margin=dict(l=160, r=20, t=75, b=65),
                  xaxis=dict(ticksuffix='%',
                             showgrid=False,
                             zeroline=False,
                             domain=[0.03, 1]),
                  yaxis=dict(
                      linecolor='white',
                      linewidth=3,
                  ),
                  hovermode="y")
    }