<jupyter_start><jupyter_text>Primeiro projeto com machine learning Preparando os dadosPrimeiro vamos carregar os dados usando pandas<jupyter_code>house = pd.read_csv('datasets\housing.csv')
house<jupyter_output><empty_output><jupyter_text>Rápida visualização dos dados que vamos trabalhar<jupyter_code>house.hist(bins=50, figsize=(15, 9))
plt.show()<jupyter_output><empty_output><jupyter_text>Funação para **separar** os dados em **dados de teste** e **dados de treinamento**<jupyter_code>def split_train_test(data, test_ratio):
    np.random.seed(42)
    shuffled_indices = np.random.permutation(len(data))
    test_set_size = int(len(data)*test_ratio)
    test_indices = shuffled_indices[:test_set_size]
    train_indices = shuffled_indices[test_set_size:]
    return data.iloc[train_indices], data.iloc[test_indices]<jupyter_output><empty_output><jupyter_text>Aplicando a função nos dados<jupyter_code>train_set, test_set = split_train_test(house, 0.2)
len(train_set), len(test_set)<jupyter_output><empty_output><jupyter_text>O problema é que cada vez que rodarmos a célula teremos valores diferentes. Como não queremos isso iremos usar um truque para que uma vez rodada a função *split_train_test()* os valores de treino e teste fiquem constantes.<jupyter_code>from zlib import crc32

def test_set_check(identifier, teste_ratio):
    return crc32(np.int64(identifier)) & 0xfffffff <teste_ratio*2**32

def split_train_test_by_id(data, teste_ratio, id_column):
    ids = data[id_column]
    in_test_set = ids.apply(lambda id_:test_set_check(id_, teste_ratio))
    return data.loc[~in_test_set], data.loc[in_test_set]

house_with_id = house.reset_index()
train_set, test_set = split_train_test_by_id(house_with_id, 0.2, 'index')

house_with_id['id'] = house['longitude'] * 1000 + house['latitude']
train_set, test_set = split_train_test_by_id(house_with_id, 0.2, 'id')<jupyter_output><empty_output><jupyter_text>Iremos usar da *train_test_split()* da biblioteca sklearn para separar os dados de maneira aleatória.<jupyter_code>from sklearn.model_selection import train_test_split

train_set, test_set = train_test_split(house, test_size=0.2, random_state=42)<jupyter_output><empty_output><jupyter_text>Contudo é importante lembrar que os dados podem ter erros de bias, como por exemplo os dados serem afetados pela renda. Por isso é importate garantir que os dados de treino e teste são representativos. Dessa forma vamos agrupar por categorias de renda.<jupyter_code>house['income_cat'] = pd.cut(house['median_income'], 
                            bins=[0., 1.5, 3.0, 4.5, 6.0, np.inf],
                            labels=[1, 2, 3, 4, 5])

house['income_cat'].hist()<jupyter_output><empty_output><jupyter_text>Usando a função *StratifiedShuffleSplit()* será garantido que será pego amostras de traino e teste representativas dentro do conjunto de dados do atributo renda (income_cat).<jupyter_code>from sklearn.model_selection import StratifiedShuffleSplit

split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(house, house['income_cat']):
    strat_train_set = house.loc[train_index]
    strat_test_set = house.loc[test_index]

#Tirando a coluna income_cat p/ voltar nos dados originais
for set_ in (strat_train_set, strat_test_set):
    set_.drop('income_cat', axis=1, inplace=True)<jupyter_output><empty_output><jupyter_text>Visualizando os dados<jupyter_code>housing = strat_train_set.copy()

housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.5, 
            s=housing['population']/100, label='population', figsize=(10,7), 
            c='median_house_value', cmap=plt.get_cmap('jet'), colorbar=True)
housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.5, 
            s=housing['population']/100, label='population', figsize=(10,7), 
            c='housing_median_age', cmap=plt.get_cmap('jet'), colorbar=True)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11181541582150101, 'fraction_numerical': 0.016987829614604464, 'mean_word_length': 6.387640449438202, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 1, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '375103', 'license': 'MIT', 'n_tokens_mistral': 1491, 'n_tokens_neox': 1422, 'n_words': 291, 'path': 'Machine Learning/ml_intro.ipynb', 'repo_name': 'Chabole/Equipe-Devs', 'size': '3944'}