<jupyter_start><jupyter_text>Formato del dataset de nubesEn este notebook se va a limpiar el dataset de las nubes de forma que nos quedemos solamente con **Cirros, Altocumulos, Altostratos** y **Estratocumulo**.Se va a guardar un dataframe de `pandas` en el disco en formato `.pkl` con las clases anteriormente mencionadas.Cada imagen del dataset (256x256) va a ser partida en patches de (32x32). Estos patches van a ser etiquetados como nubes (dependiendo de su clase) o como cielo.<jupyter_code>from sklearn.externals import joblib

import pandas as pd
import numpy as np
import netCDF4<jupyter_output><empty_output><jupyter_text>Obtener los datos del dataset en formato Numpy y obtener un Dataframe de `pandas`.<jupyter_code>clouds_nc = netCDF4.Dataset('data/TSIdatasetToCarlosIIISet600_20160609.nc')

datestr = np.array(clouds_nc.variables.get('dateStr'))
cloud_type = np.array(clouds_nc.variables.get('cloudType'))
imgs_proy = np.array(clouds_nc.variables.get('imgsProy')).reshape(717, 256*256*3)

clouds_pd = pd.concat([
    pd.DataFrame({
        'datestr' : datestr,
        'cloud_type' : cloud_type,
    }), 
    pd.DataFrame(imgs_proy, columns=range(256*256*3))], 
    axis=1)

clouds_pd.head()<jupyter_output><empty_output><jupyter_text>Una vez que tenemos el DataFrame, vamos a visualizar una de las imagenes.<jupyter_code>import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(clouds_pd.iloc[0, 2:].values.reshape((256,256,3)).astype('uint8'))
plt.show()<jupyter_output><empty_output><jupyter_text>Se eliminan todas aquellas nubes que no sean: **Cirros, Altocumulos, Altostratos** y **Estratocumulos**.<jupyter_code>print('- Initial clouds: {}'.format(np.unique(clouds_pd.cloud_type.values)))

cloud_names = ['cirros', 'altocumulos', 'altostratos', 'estratocumulos']
clouds_pd = clouds_pd[clouds_pd.cloud_type.isin(cloud_names)]

print('\n- Target clouds: {}'.format(np.unique(clouds_pd.cloud_type.values)))
print('\n- Dataset size: {}'.format(clouds_pd.shape))<jupyter_output>- Initial clouds: ['altocumulos' 'altostratos' 'cieloDespejado' 'cirrocumulos' 'cirros'
 'cirrostratos' 'cumulos' 'estratocumulos' 'estratos' 'multinube'
 'nimbostratos']

- Target clouds: ['altocumulos' 'altostratos' 'cirros' 'estratocumulos']

- Dataset size: (312, 196610)<jupyter_text>Se itera sobre el Dataframe, se calculan los patches de **(32x32)** y se decide si son nube o cielo.<jupyter_code>from imutils import helpers

clouds_final_pd = pd.DataFrame(columns=['cloud_type', 'datestr', *range(32*32*3)])
for index, row in clouds_pd.iterrows():
    print('- Row number: {}'.format(index))
    img = row.iloc[2:].values.reshape((256,256,3)).astype('uint8')
    
    for _, _, roi in helpers.sliding_window(img, (32, 32), stepSize=32):
        cloud_ratio = np.sum(roi[:,:,0] / roi[:,:,2] >= 0.82) / float(32*32)
        cloud_type = row['cloud_type'] if cloud_ratio >= 0.3 else 'sky'
        
        _row = pd.Series([cloud_type, row['datestr'], *roi.flatten()],
                         index=['cloud_type', 'datestr', *range(32*32*3)])
        clouds_final_pd = clouds_final_pd.append(_row, ignore_index=True)<jupyter_output>- Row number: 0<jupyter_text>En este momento se tienen los datos almacenados en el **DataFrame** en patches de (32x32). Etiquetados en **Cirros, Altocumulos, Altostratos, Estratocumulos** y **sky**.Se va a mostrar uno de los patches para ver que aspecto tienen.<jupyter_code>plt.imshow(clouds_final_pd.iloc[8,2:].values.reshape((32,32,3)).astype('uint8'))
plt.show()
print('- Dataset shape: {}'.format(clouds_final_pd.shape))
clouds_final_pd.head()<jupyter_output>- Dataset shape: (19968, 3074)<jupyter_text>Finalmente se guarda el dataset en el disco en formato `pkl`<jupyter_code>joblib.dump(clouds_final_pd, 'data/clouds.pkl')
clouds_final_pd.to_csv('data/clouds.csv')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1394681960375391, 'fraction_numerical': 0.03180396246089677, 'mean_word_length': 5.864042933810376, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 28, 'https://': 0, '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': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '447189', 'license': 'MIT', 'n_tokens_mistral': 1518, 'n_tokens_neox': 1448, 'n_words': 315, 'path': '1-Dataset-Formatting.ipynb', 'repo_name': 'labellson/cloud-characterization-pytorch', 'size': '3836'}