<jupyter_start><jupyter_text>Preprocessing<jupyter_code># Import our dependencies
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
import tensorflow as tf

#  Import and read the charity_data.csv.
import pandas as pd 
application_df = pd.read_csv("Resources/charity_data.csv")
application_df.head()
#Just want to make sure all the columns are visible
#==================================================
pd.options.display.max_columns=None
# Drop the non-beneficial ID columns, 'EIN' and 'NAME'.
#======================================================
df = application_df.drop(columns=['EIN', 'NAME'], axis=1)
df
# Determine the number of unique values in each column.
#======================================================
df.nunique()
# Look at APPLICATION_TYPE value counts for binning
#===================================================
app_type_cnt = df['APPLICATION_TYPE'].value_counts()
app_type_cnt
#Choose a cutoff value and create a list of application types to be replaced
#use the variable name `application_types_to_replace`
#===================================================================================
application_types_to_replace = list(app_type_cnt[app_type_cnt <500].index)
#Replace in dataframe
#===============================================================================================
for app in application_types_to_replace:
    df['APPLICATION_TYPE'] = df['APPLICATION_TYPE'].replace(app,"Other")
#Check to make sure binning was successful
#==================================================
df['APPLICATION_TYPE'].value_counts()
#Look at CLASSIFICATION value counts for binning
#=================================================
class_val_cnt = df['CLASSIFICATION'].value_counts()
class_val_cnt
#You may find it helpful to look at CLASSIFICATION value counts >1
#===================================================================
class_val_cnt.loc[lambda x : x>1]
#Choose a cutoff value and create a list of classifications to be replaced
#use the variable name `classifications_to_replace`
#=========================================================================
classifications_to_replace = list(class_val_cnt[class_val_cnt <500].index)
#Replace in dataframe
#============================================================================================
for cls in classifications_to_replace:
    df['CLASSIFICATION'] = df['CLASSIFICATION'].replace(cls,"Other")
    
#Check to make sure binning was successful
#================================================
df['CLASSIFICATION'].value_counts()
#Convert categorical data to numeric with `pd.get_dummies`
#============================================================
app_data = pd.get_dummies(df)
app_data
#Split our preprocessed data into our features and target arrays
#=================================================================
X = app_data.drop(['IS_SUCCESSFUL'],1).values
y = app_data['IS_SUCCESSFUL'].values
#Split the preprocessed data into a training and testing dataset
#=================================================================
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=41)
# Create a StandardScaler instances
scaler = StandardScaler()

# Fit the StandardScaler
X_scaler = scaler.fit(X_train)

# Scale the data
X_train_scaled = X_scaler.transform(X_train)
X_test_scaled = X_scaler.transform(X_test)<jupyter_output><empty_output><jupyter_text>Compile, Train and Evaluate the Model<jupyter_code>#Define the model - deep neural net, i.e., the number of input features and hidden nodes for each layer.
#=========================================================================================================
number_of_input_features = len(X_train[0])
hidden_node1 = 80
hidden_node2 = 30

nn = tf.keras.models.Sequential()
#First hidden layer
#=======================================================================================================
nn.add(tf.keras.layers.Dense(units=hidden_node1, input_dim=number_of_input_features, activation="relu"))
#Second hidden layer
#=====================================================================
nn.add(tf.keras.layers.Dense(units=hidden_node2, activation="relu"))
#Output layer
#============================================================
nn.add(tf.keras.layers.Dense(units=1, activation="sigmoid"))
#Check the structure of the model
#================================
nn.summary()
#Compile the model
#====================================================================================
nn.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
#Train the model
#=====================================================
fit_model = nn.fit(X_train_scaled, y_train, epochs=30)
# Evaluate the model using the test data
model_loss, model_accuracy = nn.evaluate(X_test_scaled,y_test,verbose=2)
print(f"Loss: {model_loss}, Accuracy: {model_accuracy}")
#Export our model to HDF5 file
#===============================
nn.save("AlphaSoupCharity.h5")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.3671287128712871, 'fraction_numerical': 0.005346534653465347, 'mean_word_length': 10.125550660792952, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, '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': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '50841', 'license': 'ADSL', 'n_tokens_mistral': 1333, 'n_tokens_neox': 1224, 'n_words': 322, 'path': 'Starter_Code.ipynb', 'repo_name': 'deepzissou/Deep_Learning_Challenge', 'size': '5050'}