<jupyter_start><jupyter_text>Grafo de propagación de noticias  Este grafo sirve para ver la difusión de la noticia, es decir, ver las veces que ha sido retweeteado, para ello lo separamos en nivels: nivel 0: la noticia como origen. nivel 1: las personas que han tweeado sobre la noticia del nivel 1.nivel 2: aquellos que han hecho RT del tweet del nivel 1.nivel 3: todos que han hecho RT del RT del nivel 2. Asi sucesivamete hasta que nadie haga mas RT, ahi es cuando se habrá terminado la difusión.<jupyter_code># Usado solo para sacar dos noticis 

#Sacamos el nivel 0 = la noticia

df = pd.read_csv('./data/politifact_fake.csv',delimiter=",")
df4 = df.tail(2).copy()


#id_noticia = df['id'][0]
#id_noticia = df.loc[0:3,'id']


#list_nivel1 = df.loc[0,'tweet_ids'].split('\t')

#politic_news = get_tweets(4)
titulo = []
tweets = []
noticias= []
i = 0
for tweet in df4['tweet_ids']:
    array_tweets = str(tweet).split('\t')
    if(len(array_tweets) > 1 and len(array_tweets) < 2000): #Solo si tiene algun tweet lo añadimos, 1 elemento es NaN
                tweets.append(array_tweets)
                titulo.append(df['title'][i])
                i = i+1
    noticias = [titulo, tweets]
    
# ids de noticisa convertidos en una lista
ids = []

for i in range (0,4): 
    ids.append(noticias[1][1][i])
nodos
def get_ids_fromStatuses(statuses):
     '''
    Dado un objeto statuses de un tweet nos devuelve la lista de ids que han rtweeteado ese tweet(statuses)
    '''
    lis_ids = []
    
    for i in range (len(statuses)): 
        lis_ids.append(statuses[i].id)
    return lis_ids
def get_nodo(list_id):
    '''
    le pasamos una lista de ids de tweets y nos devuelve por cada ids los ids de los rts en un DataFrame
    '''
    nodos = pd.DataFrame(columns = ['padre', 'hijos'])
    
    for i in range (len(list_id)):
        t = api.retweets(list_id[i])
        if t != 'SuspendedAccount':
            l_rts = get_ids_fromStatuses(t)
            nodos = nodos.append({"padre": list_id[i], "hijos": l_rts}, ignore_index=True)
            
    return nodos
def get_propagacion_graph(ids0): #Es prueba solo para una lista de ids previamente convertidos
    grafo = pd.DataFrame(columns = ['padre', 'hijos'])
    grafo = grafo.append(get_nodo(ids0), ignore_index=True)
    grafo_aux = pd.DataFrame(columns = ['padre', 'hijos'])
    for i in range (grafo["padre"].count()):
        grafo_aux = grafo_aux.append(get_nodo(grafo["hijos"][i]),ignore_index=True)
    
    grafo = grafo.append(grafo_aux,ignore_index=True)
    return grafo
def get_propagacionGraph(): 
      '''
    nos saca el grafo de una noticia a partir de una lista de ids sacados del csv politicalfact.csv
    Para sacar mas grafos de mas noticias de golpe solo habria que pasar un argumento a la funcion con la lista de ids de
    cada noticia y hacer una estructura iterativa en otra funcion, fuera, que llame a esta funcion tantas veces como queramos 
    
    tambine se podria desde esta misma funcin leyendo el csv dentro e iterando tantas veces como noticias haya. 
    '''
    grafo = pd.DataFrame(columns = ['padre', 'hijos'])
    grafo = grafo.append(get_nodo(ids), ignore_index=True)
    
    etapa = get_next_level(grafo)
    
    #grafo = grafo.append(etapa,ignore_index=True)
        
    return etapa[0]
    
def get_next_level(df_ph): 
    '''
    esta funcion nos permite sacar los nodos del nivel anterios, devuelve una tupla de df [0] es el grafo resultante, 
    [1] es el nivel anterior y que vamos a sacar sus hijos se realiza de forma recursiva. 
    '''
    grafo_aux = pd.DataFrame(columns = ['padre', 'hijos'])
    grafo_aut = pd.DataFrame(columns = ['padre', 'hijos'])
    grafo_aut = df_ph.copy()
    for i in range (grafo_aut["padre"].count()):
        if bool(grafo_aut.iloc[:,1][i]) == True: #comprueba que la lisat de hijos no este vacia para llamar getNodo sino continua 
            grafo_aux = grafo_aux.append(get_nodo(grafo_aut["hijos"][i]),ignore_index=True)
    
    if grafo_aux["hijos"].count() > 0: #comprueba que no este vacio para hacer la llamada recursiva 
        get_next_level(grafo_aux)
    
    grafo_aut = grafo_aut.append(grafo_aux,ignore_index=True)
        
    return [grafo_aut,grafo_aux]
p = get_propagacionGraph()
p<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10565684899485742, 'fraction_numerical': 0.008415147265077139, 'mean_word_length': 3.3797338792221083, 'pattern_counts': {'":': 2, '<': 6, '<?xml version=': 0, '>': 7, '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': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '506842', 'license': 'MIT', 'n_tokens_mistral': 1580, 'n_tokens_neox': 1535, 'n_words': 460, 'path': 'FakeNews/PropagacionGraph.ipynb', 'repo_name': 'GuillermoOvejeroSanchez/Social-Network-Analysis', 'size': '4278'}