# importaciones de librerias para la recuperacion de los datos
import pandas as pd
from pmaw import PushshiftAPI
# instancia de PushshiftAPI para las peticiones a reddit
api = PushshiftAPI()
# Funcion a utilizar para obtener todos los posts de reddit
def get_data_reddit(subreddit, limit):
# hacemos la peticion o consulta con los parametros recibidos
# usamos el mem_safe por lo que son muchos datos, ayuda a que la memoria ram no se sature
# https://github.com/mattpodolak/pmaw#memory-safety-1
query = api.search_submissions(subreddit = subreddit, limit = limit, mem_safe=True)
# Llenamos una lista con lo que contiene la consulta
submissions = [post for post in query]
# Imprimimos esto, puramente estetico
print(f'{len(submissions)} publicaciones recuperadas de Pushshift de la subreddit {subreddit}')
# convertimos la lista a un dataframe de pandas
df_subr = pd.DataFrame(submissions)
# retornamos un dataframe con solo algunas de las columnas
return df_subr[['id', 'author', 'created_utc', 'domain','url', 'title',
'score', 'selftext', 'num_comments', 'num_crossposts', 'full_link']]
# Lista de subreddits a consultar los datos
subreddits = ['depression',
'Anxiety',
'suicidewatch',
'BPD',
'schizophrenia',
'socialanxiety'
]
# DF que contendra todos los datos
df_mental_health = pd.DataFrame()
# el limite de consulta para cada subreddir
limit = 50000
# Bucle para obtener los datos de la lista de subreddits utilizando la funcion ya declarada
for subreddit in subreddits:
# llenando un df con la funcion
df = get_data_reddit(subreddit, limit)
# concatenando el df con el DF que contendra todo
df_mental_health = pd.concat([df_mental_health, df])
# impresiones para info
print(f'La subreddit {subreddit} se a añadido correctamente')
print(df_mental_health.shape)
print('----------------------------------------------------------')
# hacer que se guarde cada vez que se acabe con la consulta de un subreddit (50K datos)
df_mental_health.to_csv('mental_health.csv', sep=';', header=True, index=False)
Response cache key: b158b9119310df8224a42877e0813e45
Total:: Success Rate: 73.76% - Requests: 686 - Batches: 69 - Items Remaining: 0
50000 publicaciones recuperadas de Pushshift de la subreddit depression
La subreddit depression se a añadido correctamente
(50000, 11)
----------------------------------------------------------
Response cache key: 6fd02990468b46eef2da3b89452a7205
Total:: Success Rate: 77.97% - Requests: 649 - Batches: 65 - Items Remaining: 0
50000 publicaciones recuperadas de Pushshift de la subreddit Anxiety
La subreddit Anxiety se a añadido correctamente
(100000, 11)
----------------------------------------------------------
Response cache key: 0af069d6f6d539d3c509793613b7198b
Total:: Success Rate: 77.69% - Requests: 650 - Batches: 65 - Items Remaining: 0
50000 publicaciones recuperadas de Pushshift de la subreddit suicidewatch
La subreddit suicidewatch se a añadido correctamente
(150000, 11)
----------------------------------------------------------
Response cache key: f350a4d97f8acc91ff0823af296d3627
Total:: Success Rate: 82.09% - Requests: 670 - Batches: 67 - Items Remaining: 0
50000 publicaciones recuperadas de Pushshift de la subreddit BPD
La subreddit BPD se a añadido correctamente
(200000, 11)
----------------------------------------------------------
Response cache key: 40933fda1e85573f401782ada56402ab
Total:: Success Rate: 83.59% - Requests: 256 - Batches: 27 - Items Remaining: 32144
Total:: Success Rate: 85.24% - Requests: 515 - Batches: 54 - Items Remaining: 14114
Total:: Success Rate: 84.45% - Requests: 701 - Batches: 73 - Items Remaining: 0
50000 publicaciones recuperadas de Pushshift de la subreddit schizophrenia
La subreddit schizophrenia se a añadido correctamente
(250000, 11)
----------------------------------------------------------
Response cache key: 6d641cfc8827980e6c0dec3c3df94429
Total:: Success Rate: 79.53% - Requests: 381 - Batches: 39 - Items Remaining: 23784
Total:: Success Rate: 81.26% - Requests: 683 - Batches: 70 - Items Remaining: 0
50000 publicaciones recuperadas de Pushshift de la subreddit socialanxiety
La subreddit socialanxiety se a añadido correctamente
(300000, 11)
----------------------------------------------------------
# observando el tamaño final del dataframe
df_mental_health.shape