Твиттер хештеги с сетьюx - PullRequest
1 голос
/ 27 июня 2019

Прежде всего, я хочу извиниться, потому что я новичок в анализе данных в Твиттере.

Я хочу создать пользовательскую сеть хэштегов, где я подключаю пользователей в зависимости от их хэштегов в твиттере.У меня уже есть твиты, хранящиеся в MongoDB, но я не могу извлечь все хэштеги из объекта расширенных сущностей, и, честно говоря, я немного растерялся, как это сделать, не могли бы вы, лучший из них, добиться этого?

Я пытался сохранить хэштеги в новом столбце в кадре данных, но я мог получить только один, который не работает, потому что мне нужно учитывать все хэштеги в твите, чтобы установить соединения.

У меня есть следующий код для получения хэштегов во втором фрейме данных

def get_tweet_data(df2):
    df2["user_id"] = df1["user"].apply(lambda x: x["id"])
    df2["screen_name"] = df1["user"].apply(lambda x: x["screen_name"])
    df2["hashtags"] = df1["entities"].apply(lambda x: x["hashtags"][0]["text"] if x["hashtags"] else np.nan)
    return df2

, который в результате дает мне:

Dataframe2

Где я ищу что-то вроде этого:

Expected result in dataframe2

Но тогда у меня возникает другая проблема, мне нужно подключить каждого пользователя твита согласнок своим хэштегам, чтобы пользователь мог подключаться к пользователям с #Puertos, пользователям с #Pemex и пользователям с #abierto.Что я не знаю, как это сделать.

Чтобы сделать график im, используя следующий код:

G = nx.from_pandas_edgelist(
df2,
source = "screen_name",
target = "hashtags",
create_using = nx.Graph())

Опять мои извинения, я только начинаю с этого.

1 Ответ

0 голосов
/ 28 июня 2019

Давайте сделаем это по одному шагу за раз.Сначала вы хотели бы извлечь хэштеги из каждого твита.Мне нравится второй ответ на этот вопрос для этой задачи.В вашем контексте это будет означать запуск чего-то вроде:

df['hashtags']=df['text'].map(lambda s: [i for i in s.split() if i.startswith("#") ])

Это добавит столбец, в котором каждая запись представляет собой список хэштегов.

Второй шаг -немного более сложным.Сначала я хотел бы создать двухстороннюю сеть пользователей и хэштегов.Края будут связывать пользователей с хэштегами, которые они используют.Затем вы можете использовать функции двунаправленной проекции NetworkX для создания сети пользователей с ребрами, указывающими на использование общего хэштега.Вот эскиз того, как это может работать:

user_to_hashtags_dict=dict(df[['user_id','hashtags']].values) #a more convenient data structure: a dictionary with users as keys and the list of hashtags they use as values.
    B=nx.Graph() #create an empty graph
    for user in user_to_hashtags: #loop over all the users
        for hashtag in user_to_hashtags[user]: #for each user loop over the hashtags they use
            B.add_edge(user,hashtag) #add the edge User<->hashtag
actual_users_with_hashtags = [x for x in list(set(df.user_id)) if x in B.nodes()] #create a list of users actually appearing in the network - perhaps some tweeting users never used a hashtag and we want to ignore them.
G = nx.bipartite.weighted_projected_graph(B,nodes =actual_users_with_hashtags) #project the bipartite network onto the the users.

G должна быть сетью, в которой вы заинтересованы, включая веса на границах между пользователями, считая количество используемых ими хештегов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...