<jupyter_start><jupyter_text>Função de remoção de outliers<jupyter_code>def outliers_indexes(df, ft):
    """ 
    Função que retorna o índice dos outliers
    Embasamento matemático:
    Amplitude Interquartil => IQR = Quartil_3 - Quartil_1
    Limite Inferior => LI = Quartil_1 - 1.5*IQR
    Limite Superior => LS = Quartil_3 + 1.5*IQR
    Todos os dados que estiverem acima do limite superior ou abaixo do limite inferior, são outliers
    """
    Q1 = df[ft].quantile(0.25)
    Q3 = df[ft].quantile(0.75)
    IQR = Q3 - Q1
    
    LI = Q1 - 1.5*IQR
    LS = Q3 + 1.5*IQR
    
    lista_indices = df.index[ (df[ft] < LI) | (df[ft] > LS) ]
    
    return lista_indices


# Cria-se uma lista vazia para armazenar os índices de saídas de múltiplas colunas 
# (somente caso se quisesse tirar outliers de multiplas colunas)

def outliers_index_l(df):
    index_list = []
    for feature in ["Preço", "TotalReviews"]:
        index_list.extend(outliers_indexes(df, feature))
    outliers_index_list = outliers_indexes(df, 'Preço')
    print("Quantidade de outliers: ",len(outliers_index_list))
    
    return outliers_index_list
    
    
def remove_outliers(df, index_list):
    index_list = sorted(set(index_list))
    # Drop dos outliers
    df = df.drop(index_list)
    return df<jupyter_output><empty_output><jupyter_text>Dados amazon<jupyter_code>dados_amazon = pd.read_csv('amazon/output/dados_amazon.csv')
dados_amazon_new = pd.read_csv('amazon/output/dados_amazon.csv').drop(columns=['Estrelas','Url'])<jupyter_output><empty_output><jupyter_text>Dados Americanas<jupyter_code>dados_americanas = pd.read_csv('americanas/output/dados_completos_americanas.csv',sep=';')
dados_americanas_new = dados_americanas.drop(columns=['Modelo','Url'])
dados_americanas_new['Categoria'].loc[dados_americanas_new['Categoria'] == 'Televisão'] = 'TV'
dados_americanas_new.query("Categoria == 'TV'")<jupyter_output>D:\Programas\Anaconda3\lib\site-packages\pandas\core\indexing.py:1637: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self._setitem_single_block(indexer, value, name)<jupyter_text>Dados Casas Bahia<jupyter_code>dados_casas_bahia = pd.read_csv('casas_bahia/output/dados_casas_bahia.csv', sep=';')
dados_casas_bahia_new = dados_casas_bahia.drop(columns=['Estrelas'])
dados_casas_bahia_new['Categoria'].loc[dados_casas_bahia_new['Categoria'] == 'Smart TV'] = 'TV'
dados_casas_bahia_new.query("Categoria == 'TV'")
dados_casas_bahia_new["Categoria"]
outliers_index_list_cb = outliers_index_l(dados_casas_bahia_new)
df_clean_cb = remove_outliers(dados_casas_bahia_new, outliers_index_list_cb)<jupyter_output>Quantidade de outliers:  55<jupyter_text>Dados Magazine Luiz<jupyter_code>dados_ml = pd.read_csv('magazine_luiza/output/dados_magazine_luiza.csv',sep=';')
dados_ml_new = dados_ml.drop(columns=['Estrelas','URL'])
dados_ml_new['Categoria'].loc[dados_ml_new['Categoria'] == 'Smart TV'] = 'TV'
dados_ml_new.query("Categoria == 'TV'")
dados_submarino = pd.read_csv('submarino\output\data\dados_submarino.csv',sep=';')<jupyter_output><empty_output><jupyter_text>Dataframe Geral<jupyter_code>dados_gerais = pd.concat([dados_amazon_new, dados_americanas_new,df_clean_cb,dados_ml_new,dados_submarino])
dados_gerais.reset_index(drop=True, inplace=True)
dados_gerais['Loja'].loc[dados_gerais['Loja'] == 'Megazine Luiza'] = 'Magazine Luiza'
dados_gerais
dados_gerais.to_csv('output_geral/dataset_geral.csv',sep=';',index=False)
dados_gerais_marcas = dados_gerais.copy()
dados_gerais_marcas
modelos = ["lenovo", "positivo", "samsung", "dell", "acer", "apple", "xiaomi", "motorola", "asus","sony","tcl","philips","lg","philco" ]
count = 0
dados_gerais_marcas["Marca"] = np.NaN

for index, row in dados_gerais_marcas.iterrows():
    for modelo in modelos:
        if modelo in row["Descrição"].lower():
            dados_gerais_marcas.loc[index, "Marca"] = modelo.capitalize()
dados_gerais_marcas.dropna(inplace=True)
dados_gerais_marcas.reset_index(drop=True, inplace=True)
dados_gerais_marcas
dados_gerais_marcas.to_csv('output_geral/dataset_geral_marcas.csv',sep=';',index=False)
fig = plt.figure(figsize=(16,9))
sns.pairplot(data=dados_gerais_marcas.query("Categoria == 'Smartphone'"), hue="Marca",height=4);
dados_gerais_notebooks = dados_gerais_marcas[dados_gerais_marcas["Categoria"] == "Notebook"]
dados_gerais_notebooks.shape
from bokeh.io import show
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral6
from bokeh.plotting import figure
from bokeh.transform import factor_cmap

dados_gerais_notebooks.head()
dados_gerais_notebooks["Marca"].value_counts().index.tolist()
import plotly.express as px


fig = px.bar(dados_gerais_notebooks, x="Loja",  color="Marca", title="Long-Form Input")
fig.show()
dados_gerais_smartphone = dados_gerais_marcas[dados_gerais_marcas["Categoria"] == "Smartphone"]
fig = px.bar(dados_gerais_smartphone, x="Loja",  color="Marca", title="HEY", facet_row_spacing=0)
fig.show()
groupby_loja_marca = dados_gerais_smartphone[['Loja','Marca','Descrição']].groupby(['Loja','Marca']).count()
groupby_loja_marca.reset_index(inplace=True)
groupby_loja_marca.rename(columns={'Descrição':'Quantidade'}, inplace=True)
groupby_loja_marca
fig = px.bar(groupby_loja_marca, x='Loja',y='Quantidade',  color="Marca", title="Contagem de marcas de Smartphones por loja")
fig.show()
dados_gerais_smartphone
dados_gerais_smartphone[dados_gerais_smartphone["Descrição"].str.contains("32gb")]
dados_gerais_tv = dados_gerais_marcas[dados_gerais_marcas["Categoria"] == "TV"]
dados_gerais_tv.head()
fig = px.bar(dados_gerais_tv, x="Loja",  color="Marca", title="HEY")
fig.show()
groupby_loja_marca_tv = dados_gerais_tv[['Loja','Marca','Descrição']].groupby(['Loja','Marca']).count()
groupby_loja_marca_tv.reset_index(inplace=True)
groupby_loja_marca_tv.rename(columns={'Descrição':'Quantidade'}, inplace=True)
groupby_loja_marca_tv
fig = px.bar(groupby_loja_marca_tv, x='Loja',y='Quantidade',  color="Marca", title="Contagem de marcas de TVs por Loja", facet_row_spacing=0)
fig.show()
dados_gerais_tv[dados_gerais_tv["Descrição"].str.contains("4K")]
ntb_groupby_review = dados_gerais[['Loja','Categoria','TotalReviews']].groupby(['Loja', 'Categoria']).sum()
ntb_groupby_review.reset_index(inplace=True)
ntb_groupby_review.head()

fig = px.bar(ntb_groupby_review, x='Loja' ,y='TotalReviews',  color="Categoria", barmode="group", title="Total de Reviews por lojas",text="TotalReviews",height=600)
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
fig.update_layout()
fig.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14122533748701974, 'fraction_numerical': 0.0068239133659694405, 'mean_word_length': 7.824607329842932, 'pattern_counts': {'":': 0, '<': 24, '<?xml version=': 0, '>': 27, 'https://': 1, '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': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '407192', 'license': 'MIT', 'n_tokens_mistral': 2738, 'n_tokens_neox': 2688, 'n_words': 367, 'path': 'scrapings/analise_geral.ipynb', 'repo_name': 'Felipeecp/desafio-3-trilhas-webscraping', 'size': '6741'}