<jupyter_start><jupyter_text>Analisis preliminar: LINK. task-1.14  Analisis de las distintas longitudes de Link<jupyter_code>longitud_por_link = train
longitud_por_link['longitud link'] = longitud_por_link['text'].str.split('http').str.get(1)#me quedo con todo a partir de http
longitud_por_link['longitud link'] = longitud_por_link['longitud link'].str.split(' ').str.get(0).str.len()+4# desde http hasta un espacio
longitud_por_link['longitud link'] = longitud_por_link['longitud link'].fillna(0)
longitud_por_link['tiene link'] = longitud_por_link['text'].str.contains('http')
longitud_por_link
longitud_por_link['longitud link'] = ((longitud_por_link['longitud link']/10).round(0).astype('int64'))*10
longitudes_de_links = longitud_por_link.groupby('longitud link').agg({'tiene link':'count'})

longitudes_de_links = longitudes_de_links[longitudes_de_links.index>0]
longitudes_de_links
# Variables a graficar
x = longitudes_de_links.index
y = longitudes_de_links['tiene link']


ax = longitudes_de_links.plot.bar(y='tiene link', rot=0, color = 'black',figsize=(8,6))
plt.title("Cantidad de tweets por longitud de link", fontsize = 25)
plt.xlabel("Longitud link", fontsize = 15);
plt.ylabel("Cantidad", fontsize = 15);
ax.get_legend().remove()<jupyter_output><empty_output><jupyter_text>promedio de link segun longitud del tweet (sin considerar la longitud de la link)<jupyter_code>longitud_por_link['longitud tweet'] = longitud_por_link['text'].str.len() - longitud_por_link['longitud link']
longitud_por_link['longitud tweet'] = ((longitud_por_link['longitud tweet']/10).round(0).astype('int64'))*10
longitud_por_link['tiene link'] = (longitud_por_link['text'].str.contains('http') | longitud_por_link['text'].str.contains('www'))
longitud_por_link.head()
longitud_tweet_link = longitud_por_link.groupby('longitud tweet').agg({'tiene link':['mean','count']})
longitud_tweet_link.columns = ['promedio','cantidad']
longitud_tweet_link
f, (ax_viol, ax_bar) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.2, .8)})
#colores
color_bar = ["#0aec48", "firebrick"]
color_violin = "navy"
#título
ax_viol.set_title("Probabilidad que un tweet tenga link segun su longitud", size = 20, pad=20)
# asigno gráficos
sns.violinplot(longitud_por_link["longitud tweet"], ax=ax_viol, color = "firebrick",pad=8.0)
longitud_tweet_link.plot.bar(y='promedio', rot=0,ax=ax_bar ,color = color_violin,edgecolor='black',figsize=(8,6))
#Label del stackplot
ax_bar.get_legend().remove()
#ajustes
#plt.legend(loc=1, przop={'size': 12})
ax_bar.set_xticklabels(ax_bar.get_xticklabels(), rotation=45)
#rango de valores
ax_viol.set_xticks(range(0,165))
# Labels
ax_viol.set_ylabel("Cantidad",fontsize=14)
ax_bar.set_ylabel("Probabilidad",fontsize=14)
ax_bar.set_xlabel("Longitud tweet",fontsize=14)
#distancia nula entre los dos graficos
f.tight_layout(pad=0)
total = longitud_tweet_link['cantidad'].sum()
longitud_tweet_link['cantidad']=longitud_tweet_link['cantidad']/total
longitud_tweet_link.columns = ['promedio','distribucion']
ax = longitud_tweet_link.plot.bar( rot=0,figsize=(8,6))
plt.title("Probabilidad que un tweet tenga link segun su longitud", fontsize = 25)
plt.xlabel("Longitud tweet", fontsize = 15);
plt.ylabel("proporcion", fontsize = 15);<jupyter_output><empty_output><jupyter_text>cantidad_total Proporcion:cuantos tweets tienen 0 links, cuantos 1, cuantos 2,etc...<jupyter_code>longitud_por_link['cantidad de links'] = longitud_por_link['text'].str.count('http')
longitud_por_link['cantidad de links'] = longitud_por_link['cantidad de links'].map(lambda x:"3/4" if x>2 else x)
longitudes_agrupadas = longitud_por_link.groupby('cantidad de links').agg({'target':'count'})
longitudes_agrupadas
color_bar = ["firebrick","blue","#0aec48", "yellow","grey"]

plt.pie(x='target',colors=color_bar,autopct='%.2f',labels = longitudes_agrupadas.index,pctdistance=.6, data=longitudes_agrupadas)
plt.rcParams['patch.edgecolor'] = 'black' 
plt.rcParams['lines.linewidth'] = 2
plt.title("Proporcion de cantidad de links por tweet", fontsize = 25)
plt.show()<jupyter_output><empty_output><jupyter_text>Proporcion de cantidad de links segun longitud de tweet<jupyter_code>longitud_por_link['cantidad de links'] = longitud_por_link['text'].str.count('http')
aaa_2 = longitud_por_link.groupby(['cantidad de links','longitud tweet']).agg({'target':'count'})
aaa_3 = aaa_2.unstack().fillna(0)
aaa_3.columns = aaa_3.columns.droplevel()
aaa_3 = aaa_3.stack().unstack(0)
aaa_3.head()
color_bar = ["firebrick","blue","#0aec48", "yellow","grey"]
aaa_3.plot(kind="bar", stacked=True, color=color_bar, edgecolor = "black",figsize=(8,6))
plt.xlabel("Longitud tweet", fontsize = 15);
plt.ylabel("Cantidad de tweets", fontsize = 15);
plt.title("Cantidad de links por tweet segun su longitud", fontsize = 25)
plt.xticks(rotation = 55)<jupyter_output><empty_output><jupyter_text>Analisis preliminar: repeticiones. Task-1.12<jupyter_code>grouped_tweets = train.groupby('text').target.count().to_frame()
grouped_tweets
grouped_tweets.columns = ['repeticiones']
grouped_tweets['cantidad']=1
grouped_tweets = grouped_tweets.groupby('repeticiones')['cantidad'].count()
grouped_tweets = grouped_tweets.to_frame()
grouped_tweets
contador_repetidos = grouped_tweets[grouped_tweets.index>1].reset_index()
contador_repetidos['total']=contador_repetidos['repeticiones']*contador_repetidos['cantidad']
contador_repetidos.total.sum()
ax = grouped_tweets[grouped_tweets.index>1].plot.bar(y='cantidad', rot=0, color = 'black',figsize=(8,6))
plt.title("Cantidad de veces que se repite un tweet", fontsize = 25)
plt.xlabel("Número de repeticiones", fontsize = 15);
plt.ylabel("Cantidad de tweets", fontsize = 15);
ax.get_legend().remove()
grouped = train
grouped['text'] = grouped['text'].replace(r'http\S+', '', regex=True)

grouped = grouped.groupby('text').target.count().to_frame()
grouped
grouped.columns = ['repeticiones']
grouped['cantidad']=1
grouped = grouped.groupby('repeticiones')['cantidad'].count().to_frame()
grouped
contador_repetidos = grouped[grouped.index>1].reset_index()
contador_repetidos['total']=contador_repetidos['repeticiones']*contador_repetidos['cantidad']
contador_repetidos.total.sum()
ax = grouped[grouped.index>1].plot.bar(y='cantidad', rot=0, color = 'black',figsize=(8,6))
plt.title("Cantidad de veces que se repite un tweet sin links", fontsize = 25)
plt.xlabel("Número de repeticiones", fontsize = 15);
plt.ylabel("Cantidad de tweets", fontsize = 15);
plt.ylim(0,175)
ax.get_legend().remove()<jupyter_output><empty_output><jupyter_text>Obviando los distintos links, hay mas de 900 tweets repetidos, por lo que para los demas análisis los elimino  Analisis por id. Task-1.13<jupyter_code>analisis_id = train_limpio
def custom_round(x, base=500):
    return int(base * round(float(x)/base))
analisis_id['id']=analisis_id['id'].apply(lambda x: custom_round(x, base=1000))
analisis_id = analisis_id.groupby('id').target.mean().to_frame()
analisis_id
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

plt.plot(analisis_id['target'], marker='o',linewidth=2.5, color='maroon')
    
plt.xlabel("Valores de id", size=15)
plt.ylabel("Promedio de target", size=15)
plt.title("Promedio de target vs id", fontsize=22)

#plt.xlim(0,6.3)
plt.ylim(0,1)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>Las palabras mas comunes de las noticias y su correspondiente target Task-1.3<jupyter_code>from itertools import chain
lens = train_limpio['text'].str.split(' ').map(len)
lens
res = pd.DataFrame({'id': np.repeat(train_limpio['id'], lens),
                    'keyword': np.repeat(train_limpio['keyword'], lens),
                    'location': np.repeat(train_limpio['location'], lens),
                    'text': np.repeat(train_limpio['text'], lens),
                    'target': np.repeat(train_limpio['target'], lens)
                   }).reset_index()
res.head(60)
len(res)
#El dataframe generado se guarda porque tarda mucho generarlo cada vez
id_actual = 0
posicion_actual = 0
palabras = 0
for i in range (len(res)):
    current_id = res.loc[i,'id']
    if(id_actual !=current_id):
        posicion_actual = 0
        palabras = list((res.loc[i,'text'].split(' ')))
        id_actual = current_id
    else:
        posicion_actual = posicion_actual + 1
    res.loc[i,'text'] = palabras[posicion_actual]
res.head(100)
res['text'] = res['text'].map(lambda x: x.lstrip('#').rstrip(',')).map(lambda x: (x.lower()))
res.head(100)
res.to_csv('data/train_una_palabra_por_fila.csv', index=False)
palabra_por_fila = pd.read_csv("data/train_una_palabra_por_fila.csv",encoding = "ISO-8859-1")
palabra_por_fila.head(6)
# elimino estos tipos de palabras que no aportan informacion
prepositions = ['of','if', 'with', 'at', 'from', 'into','during','including','until','among','throughout','despite','towards','upon','concerning','to','in','for','on','by','about','like','through','over','before','between','after','since','without','under','within','along','following','across','behind','beyond','plus','except','but','up','out','around','down','off','above','near']
connectors = ['and', 'plus', 'furthermore', 'moreover', 'in addition', 'also', 'as well as','when', 'while', 'as', 'as soon as', 'then', 'after', 'afterwards', 'next', 'firstly', 'secondly', 'finally',  'but', 'however', 'though', 'although', 'nevertheless', 'despite', 'whereas', 'while', 'unless', 'otherwise','because', 'as', 'due to', 'so', 'in order to', 'so', 'therefore', 'as a result', 'consequently']
subjects = ['the','a','and','that','it','this','be','was','are','have','just','so','not','as','will','when','an','has','no','why','first','see','were','their','go','them','last']
palabra_por_fila = palabra_por_fila[~( (palabra_por_fila['text'].isin(prepositions)) | (palabra_por_fila['text'].isin(connectors)) | (palabra_por_fila['text'].isin(subjects)))]
#primero las agrupo por cada twit,mismo id, así si una palabra 
#aparece varias veces en un mismo twit, solo la cuento una.
palabra_por_mencion = palabra_por_fila.groupby(['id','text']).target.mean().to_frame().reset_index()
palabra_por_mencion.head()
palabra_por_mencion = palabra_por_mencion.groupby('text').agg({'target':['mean','count']})
palabra_por_mencion.columns=['target mean','target count']
palabra_por_mencion.head()
palabra_por_mencion.shape<jupyter_output><empty_output><jupyter_text>examinamos las palabras mas asociadas a noticias verdaderas  y falsas que hayan aparecido varias veces<jupyter_code># noticias verdaderas
palabras_mas_veridicas = palabra_por_mencion[(palabra_por_mencion['target count']>50)].nlargest(20,'target mean').reset_index()
palabras_mas_veridicas.head(30)
# Variables a graficar
x = palabras_mas_veridicas['text']
y = palabras_mas_veridicas['target mean']

# Tamaño del gráfico
fig = plt.figure(figsize = (8, 6))
ax = fig.add_subplot(111)
ax.set_aspect('auto')


# Tamaño de los títulos de los ejes
plt.xlabel("Palabras", fontsize = 15);
plt.ylabel("Target", fontsize = 15);

# Título
plt.title("Palabras mas repetidas con mayor target", fontsize = 25)

# Tamaño de las letras de los ejes
plt.tick_params(axis='both', which='major', labelsize = 12)
plt.tick_params(axis='both', which='minor', labelsize = 12)

# Rotar ejes
plt.xticks(rotation = 55)

# Límites para cada coordenada

# Tipo de gráfico
plt.bar(x, y, color = 'black')<jupyter_output><empty_output><jupyter_text>Los twits tienen mayor probabilidad de ser verdaderos cuando tienen esas palabras, tiene sentido porque estas son mas usadas en noticias que en otras conversaciones<jupyter_code># noticias verdaderas
palabras_menos_veridicas = palabra_por_mencion[(palabra_por_mencion['target count']>50)].nsmallest(20,'target mean').reset_index()
palabras_menos_veridicas.head(30)
# Variables a graficar
x = palabras_menos_veridicas['text']
y = palabras_menos_veridicas['target mean']

# Tamaño del gráfico
fig = plt.figure(figsize = (8, 6))
ax = fig.add_subplot(111)
ax.set_aspect('auto')


# Tamaño de los títulos de los ejes
plt.xlabel("Palabras", fontsize = 15);
plt.ylabel("Target", fontsize = 15);

# Título
plt.title("Palabras mas repetidas con menor target", fontsize = 25)

# Tamaño de las letras de los ejes
plt.tick_params(axis='both', which='major', labelsize = 12)
plt.tick_params(axis='both', which='minor', labelsize = 12)

# Rotar ejes
plt.xticks(rotation = 55)

# Límites para cada coordenada

# Tipo de gráficok
plt.ylim(0, 0.7)
plt.bar(x, y, color = 'black')<jupyter_output><empty_output><jupyter_text>Dejando de lado palabras como "body","let","want",etc, la precencia de pronombres personales indica mayor probabilidad de que el tweet sea falso ya que los mismos no se usan en noticias, como "you re","you","i'm","my","me","i"  Y si los twits repetidos tienden a ser mas ciertos. Task-1.4 ya que la gente suele compartir la misma noticia? (para éste uso el target sin limpiar porque dependo de las repeticiones)<jupyter_code>tweets_repetidos = train
tweets_repetidos.head()
tweets_repetidos['text'] = tweets_repetidos['text'].replace(r'http\S+', '', regex=True)
tweets_repetidos = tweets_repetidos.groupby('text').agg({'target':['mean','count']})
tweets_repetidos.columns = ['target','repeticiones del tweet']
tweets_repetidos.head()
tweets_repetidos.nlargest(40,'repeticiones del tweet')
tweets_repetidos.plot.scatter('repeticiones del tweet','target',figsize=(8,6),color = 'red')
plt.title("Target promedio de tweets segun cantidad de repeticiones", fontsize = 25)
plt.xlabel("Repeticiones del tweets", fontsize = 15);
plt.ylabel("Target", fontsize = 15);
cantidad_repeticiones = tweets_repetidos.groupby(['target','repeticiones del tweet']).agg({'target':'count'})
cantidad_repeticiones.columns = ['cantidad']
cantidad_repeticiones = cantidad_repeticiones.reset_index()
cantidad_repeticiones = cantidad_repeticiones[cantidad_repeticiones['repeticiones del tweet']>3]
cantidad_repeticiones.head()<jupyter_output><empty_output><jupyter_text>Se puede ver, entonces, que cuando un twitt se repite varias veces,sucede porque es una noticia y por lo tanto varias personas publican, o comparten, lo mismo  Los tweets que tienen mas datos (locacion y keyword) tienen mas chances de ser ciertos?  Task-1.5<jupyter_code>location_y_keyword = train_limpio.drop(columns=['text'])
location_y_keyword['tiene location'] = ~(train_limpio['location'].isnull())
location_y_keyword['tiene keyword'] = ~(train_limpio['keyword'].isnull())
location_y_keyword.head()
target_location_y_keyword = location_y_keyword.groupby(['tiene keyword','tiene location']).agg({'target': 'mean'})
target_location_y_keyword = target_location_y_keyword.unstack()
target_location_y_keyword.columns = target_location_y_keyword.columns.droplevel()
target_location_y_keyword.columns = ['No tiene Location','Tiene Location']
target_location_y_keyword.index = ['No tiene Keyword','Tiene Keyword']
target_location_y_keyword
fig, ax = plt.subplots(figsize=(12, 1)) # set size frame
ax.xaxis.set_visible(False)  # hide the x axis
ax.yaxis.set_visible(False)  # hide the y axis
ax.set_frame_on(False)  # no visible frame, uncomment if size is ok
ax.set_title('                 Promedio Target segun Keyword o Location',size=18)
tabla = table(ax, target_location_y_keyword, loc='upper right', colWidths=[0.17]*len(target_location_y_keyword.columns))  # where df is your data frame
tabla.auto_set_font_size(True) # Activate set fontsize manually
tabla.set_fontsize(12) # if ++fontsize is necessary ++colWidths
tabla.scale(1.6, 1.5) # change size table
plt.savefig('table.png', transparent=True)
cantidad_location_y_keyword = location_y_keyword.groupby(['tiene keyword','tiene location']).agg({'target': 'count'})
cantidad_location_y_keyword = cantidad_location_y_keyword.unstack()
cantidad_location_y_keyword.columns = cantidad_location_y_keyword.columns.droplevel()
cantidad_location_y_keyword.columns = ['No tiene Location','Tiene Location']
cantidad_location_y_keyword.index = ['No tiene Keyword','Tiene Keyword']
cantidad_location_y_keyword
fig, ax = plt.subplots(figsize=(12, 1)) # set size frame
ax.xaxis.set_visible(False)  # hide the x axis
ax.yaxis.set_visible(False)  # hide the y axis
ax.set_frame_on(False)  # no visible frame, uncomment if size is ok
ax.set_title('                         Cantidad tweets Segun Keyword o Location',size=18)
tabla = table(ax, cantidad_location_y_keyword, loc='upper right', colWidths=[0.17]*len(cantidad_location_y_keyword.columns))  # where df is your data frame
tabla.auto_set_font_size(True) # Activate set fontsize manually
tabla.set_fontsize(12) # if ++fontsize is necessary ++colWidths
tabla.scale(1.6, 1.5) # change size table
plt.savefig('table.png', transparent=True)
location_y_keyword[~location_y_keyword['tiene keyword'] & location_y_keyword['tiene location']]<jupyter_output><empty_output><jupyter_text>No, no los tienen, sin embargo que nota que hay mucho mayor cantidad de tweets que tienen keyword por sobre aquellos que no Ademas,si no tienen keyword, no tienen locacion, mientras que el inverso es falso. (si no tienen keyword no tienen locacion pero si no tienen locacion pueden tener igual keyword)  La cantidad de caracteres raros influye en la certeza de un tweet? Task-1.6<jupyter_code>train.loc[100:200].head(200)
# Hasta ahora encontré # ?? ¿¿ = > < -   !! ; ) [ ] ( @ _ + * Â  Ã  ÂÃ£Â¢ & ;% $ | °
caracteres_inusuales = train_limpio
caracteres_inusuales['cantidad de numerales'] = caracteres_inusuales['text'].str.count('#')
cantidad_hashtags = caracteres_inusuales.groupby('cantidad de numerales').agg({'target':['mean','count']})
cantidad_hashtags
cantidad_hashtags.columns = ["promedio de target","cantidad"]
cantidad_hashtags = cantidad_hashtags[(cantidad_hashtags['cantidad']>10)]
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

plt.plot(cantidad_hashtags['promedio de target'], marker='o',linewidth=2.5, color='maroon')
for i in range(len(cantidad_hashtags)):
    x_dist = i
    y_dist =cantidad_hashtags.loc[i,'promedio de target']
    if(i==0):
        x_dist = x_dist+0.12
    else:
        y_dist = y_dist + 0.025
        x_dist = x_dist - 0.1
    ax.annotate(cantidad_hashtags.loc[i,'cantidad'], xy=(x_dist,y_dist), textcoords='data') # <--
    
plt.xlabel("Cantidad de numerales", size=15)
plt.ylabel("Promedio de target", size=15)
plt.title("Promedio de target vs cantidad de numerales", fontsize=22)

plt.xlim(0,6.3)
plt.ylim(0,1)
plt.grid()
plt.show()
caracteres_inusuales['cantiad de !'] = caracteres_inusuales['text'].str.count('!')
cantidad_exclamaciones = caracteres_inusuales.groupby('cantiad de !').agg({'target':['mean','count']})
cantidad_exclamaciones.head()
cantidad_exclamaciones.columns = ["promedio de target","cantidad"]
cantidad_exclamaciones = cantidad_exclamaciones[(cantidad_exclamaciones['cantidad']>10)]
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

plt.plot(cantidad_exclamaciones['promedio de target'], marker='o',linewidth=2.5, color='maroon')
for i in range(len(cantidad_exclamaciones)):
    x_dist = i
    y_dist =cantidad_exclamaciones.loc[i,'promedio de target']
    if(i==0):
        x_dist = x_dist+0.12
    else:
        y_dist = y_dist + 0.025
        x_dist = x_dist - 0.08
    ax.annotate(cantidad_exclamaciones.loc[i,'cantidad'], xy=(x_dist,y_dist), textcoords='data') # <--
    
plt.xlabel("Cantidad de exclamaciones", size=15)
plt.ylabel("Promedio de target", size=15)
plt.title("Promedio de target vs cantidad de exclamaciones", fontsize=22);

plt.xlim(0,4.3)
plt.ylim(0,0.7)
plt.grid()
plt.show()
caracteres_inusuales['signos de pregunta'] = caracteres_inusuales['text'].str.count('\?')
cantidad_preguntas = caracteres_inusuales.groupby('signos de pregunta').agg({'target':['mean','count']})
cantidad_preguntas.columns = ["promedio de target","cantidad"]
cantidad_preguntas = cantidad_preguntas[(cantidad_preguntas['cantidad']>20)]
cantidad_preguntas
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

plt.plot(cantidad_preguntas['promedio de target'], marker='o',linewidth=2.5, color='maroon')
for i in cantidad_preguntas.index:
    x_dist = i
    y_dist = cantidad_preguntas.loc[i,'promedio de target']
    if(i==0):
        x_dist = x_dist+0.12
    else:
        y_dist = y_dist + 0.025
        x_dist = x_dist - 0.08
    ax.annotate(cantidad_preguntas.loc[i,'cantidad'], xy=(x_dist,y_dist), textcoords='data') # <--

   
    
plt.xlabel("Cantidad de signos de pregunta", size=15)
plt.ylabel("Promedio de target", size=15)
plt.title("Promedio de target vs cantidad de signos de pregunta", fontsize=22);

plt.xlim(0,8.3)
plt.ylim(0,0.7)
plt.grid()
plt.show()
train_limpio[train_limpio['text'].str.contains('\Ã')]
caracteres_inusuales['cantiad de ['] = caracteres_inusuales['text'].str.count('\[')
caracteres_inusuales.groupby('cantiad de [').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de +'] = caracteres_inusuales['text'].str.count('\+')
caracteres_inusuales.groupby('cantiad de +').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de *'] = caracteres_inusuales['text'].str.count('\*')
caracteres_inusuales.groupby('cantiad de *').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de ¢'] = caracteres_inusuales['text'].str.count('\¢')
caracteres_inusuales.groupby('cantiad de ¢').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de $'] = caracteres_inusuales['text'].str.count('\$')
caracteres_inusuales.groupby('cantiad de $').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de %'] = caracteres_inusuales['text'].str.count('\%')
caracteres_inusuales.groupby('cantiad de %').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de Â'] = caracteres_inusuales['text'].str.count('\Â')
cantidad_A = caracteres_inusuales.groupby('cantiad de Â').agg({'target':['mean','count']})
cantidad_A.columns = ["promedio de target","cantidad"]
cantidad_A = cantidad_A[(cantidad_A['cantidad']>15)]
cantidad_A
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

plt.plot(cantidad_A['promedio de target'], marker='o',linewidth=2.5, color='maroon')
for i in cantidad_A.index:
    x_dist = i
    y_dist = cantidad_A.loc[i,'promedio de target']
    if(i==0):
        x_dist = x_dist+0.12
    else:
        y_dist = y_dist + 0.025
        x_dist = x_dist - 0.08
    ax.annotate(cantidad_A.loc[i,'cantidad'], xy=(x_dist,y_dist), textcoords='data') # <--

   
    
plt.xlabel("Cantidad de Â", size=15)
plt.ylabel("Promedio de target", size=15)
plt.title("Promedio de target vs cantidad de Â", fontsize=22);

plt.xlim(0,6.3)
plt.ylim(0,0.7)
plt.grid()
plt.show()
caracteres_inusuales['cantiad de |'] = caracteres_inusuales['text'].str.count('\|')
caracteres_inusuales.groupby('cantiad de |').agg({'target':['mean','count']})
caracteres_inusuales['cantiad de °'] = caracteres_inusuales['text'].str.count('\°')
caracteres_inusuales.groupby('cantiad de °').agg({'target':['mean','count']})<jupyter_output><empty_output><jupyter_text>Para el caso de los signos de exclamacion, se cumple que su precencia le quita credibilidad al tweet, y lo mismo para los signos de pregunta,mientras que para los ,no hay ningnuna relacion, para los demás casos, se presentan tan pocas veces que no vale la pena su estudio  Si hay mayor cantidad,en promedio, de mayusculas en un tweet,es menos fiable? Task-1.8<jupyter_code>train_limpio = pd.read_csv("data/train_limpio.csv",encoding = "ISO-8859-1")<jupyter_output><empty_output><jupyter_text>Promedio de mayúsculas<jupyter_code>promedio_mayusc['proporcion'].sum()
estudio_de_mayúsculas = train_limpio
estudio_de_mayúsculas['promedio de mayusculas'] = estudio_de_mayúsculas['text'].str.count(r'[A-Z]')/estudio_de_mayúsculas['text'].str.len() 
estudio_de_mayúsculas['promedio de mayusculas'] = estudio_de_mayúsculas['promedio de mayusculas'].round(decimals=1)
promedio_mayusc = estudio_de_mayúsculas.groupby('promedio de mayusculas').agg({'target':['mean','count']})
promedio_mayusc.columns = ['promedio de target','proporcion']
promedio_mayusc['proporcion'] = promedio_mayusc['proporcion']/promedio_mayusc['proporcion'].sum()
#promedio_mayusc
#ax = promedio_mayusc.plot.bar(x='promedio de mayusc', y='promedio de 1',color='black' ,rot=0,figsize=(8,6))
ax = promedio_mayusc.plot.bar( rot=0,figsize=(8,6),edgecolor='black')
plt.xlabel("Promedio de mayusculas", size=15)
plt.ylabel("Promedio de target", size=15)
plt.title("Promedio de target y proporcion según promedio de mayúsculas", fontsize=22)

#ax.get_legend().remove()<jupyter_output><empty_output><jupyter_text>Hay que creerle si el tweet tiene link? (para éste analisis se usa el train sin limpiar) Taks-1.7<jupyter_code>tweets_por_link = train
tweets_por_link['cantidad links'] = tweets_por_link['text'].str.count('http')
tweets_por_link = tweets_por_link.groupby('cantidad links').agg({'target':'mean'})
tweets_por_link
tweets_por_link['target'].plot(kind="bar", stacked=True,edgecolor = "black", rot=0,color="black",figsize=(8,6))
ax=plt.gca()
plt.xlabel("Cantidad de links", size=15)
plt.ylabel("Promedio de target", size=15)
plt.ylim(0,0.7)
plt.title("Promedio de target vs cantidad de links en el tweet", fontsize=22);<jupyter_output><empty_output><jupyter_text>Tweets por longitud Task-1.9<jupyter_code>tweets_por_longitud = train_limpio
def custom_round(x, base=5):
    return int(base * round(float(x)/base))
tweets_por_longitud['longitud tweet'] = tweets_por_longitud['text'].str.len()
tweets_por_longitud['longitud tweet'] = tweets_por_longitud['longitud tweet'].apply(lambda x: custom_round(x, base=5))
longitudes_agrupadas = tweets_por_longitud.groupby('longitud tweet').agg({'target':['count','mean']})
longitudes_agrupadas.columns = ['cantidad tweets','proporcion de 1']
longitudes_agrupadas['proporcion de 0'] = 1-longitudes_agrupadas['proporcion de 1']
f, (ax_viol, ax_stack) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.2, .8)},figsize=(8, 6))
#colores
color_violin = "navy"
#título
ax_viol.set_title("Proporción y Cantidad de Tweets Según su Longitud", size = 20, pad=20)
#valores
x=longitudes_agrupadas.index
y=[ longitudes_agrupadas['proporcion de 1'], longitudes_agrupadas['proporcion de 0'] ]
z=tweets_por_longitud["longitud tweet"]
# asigno gráficos
sns.violinplot(z, ax=ax_viol, color = color_violin,pad=8.0)
ax_stack.stackplot(x,y,labels=['proporcion de 1','proporcion de 0'],\
                 edgecolor = "black")
#Label del stackplot
ax_stack.legend(loc='upper right')

#Rango de valores del stackplot
ax_stack.set_xlim(10, 150)
ax_stack.set_ylim(0, 1)

#labels
ax_viol.set_ylabel("cantidad",fontsize=14)
ax_viol.set_xlabel("")
ax_stack.set_xlabel("longitud",fontsize=14)
ax_stack.set_ylabel("proporcion",fontsize=14)

#distancia nula entre los dos graficos
f.tight_layout(pad=0)

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1574806099891341, 'fraction_numerical': 0.018472029675147064, 'mean_word_length': 7.319825436408977, 'pattern_counts': {'":': 2, '<': 70, '<?xml version=': 0, '>': 79, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '16', 'dir': 'jupyter-structured-clean-dedup', 'id': '446250', 'license': 'MIT', 'n_tokens_mistral': 10404, 'n_tokens_neox': 10035, 'n_words': 1849, 'path': 'Andres.ipynb', 'repo_name': 'otlucas/Datos2020', 'size': '26689'}