Flood Prediction
Flood Prediction of Indian State using the Rainfall data.
Hackathon - 6.0
Category - A: AI - Natural Disaster Prediction
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
tf.print(tf.__version__)
data = pd.read_csv('./data/rainfall-in-india-1901-2015.csv')
data.tail(20)
subdivision = data["SUBDIVISION"].unique()
len(subdivision)
label_sub = le.fit_transform(data["SUBDIVISION"])
updated_data = data.drop("SUBDIVISION", axis="columns")
updated_data.insert(0, "SUBDIVISION", label_sub)
updated_data
for x in updated_data.columns:
if updated_data[x].isnull().sum()>1:
print(f"{x} : {updated_data[x].isnull().sum()}")
for x in updated_data.columns:
updated_data[x]=updated_data[x].fillna(updated_data[x].mean())
updated_data[:30]
import os
if os.path.isfile("./data/updated-data.csv") is False:
updated_data.to_csv("./data/updated-data.csv", index=False)
updated_shuffled_data = updated_data.sample(frac = 1)
import os
if os.path.isfile("./data/updated-shuffled-data.csv") is False:
updated_shuffled_data.to_csv("./data/updated-shuffled-data.csv", index=False)
updated_shuffled_data.shape
updated_shuffled_data
X = np.array(updated_shuffled_data.iloc[:,0])
y = np.array(updated_shuffled_data.iloc[:, 2:15])
y.shape
X_train = X[:2882]
X_train = np.stack(X_train, axis=0)
y_train = y[:2882]
len(X_train), len(y_train), X_train.shape
X_test = X[2882:3499]
y_test = y[2882:3499]
X_val = X[3440:4116]
y_val = y[3449:4116]
histogram = updated_shuffled_data
histogram.hist()
plt.show()
model = tf.keras.Sequential([
tf.keras.layers.Dense(30, activation="relu", name="hidden_layer1", input_shape=(1,)),
tf.keras.layers.Dense(20, activation="relu", name="hidden_layer2"),
tf.keras.layers.Dense(13, activation="sigmoid", name="output_layer")
])
model.compile(
loss = tf.keras.losses.BinaryCrossentropy(),
optimizer=tf.keras.optimizers.Adam(learning_rate = 0.001),
metrics=["accuracy"]
)
history = model.fit(
X_train,
y_train,
batch_size = 32,
epochs=10,
validation_data=(X_test, y_test)
)
model.evaluate(X_val, y_val)
X.squeeze()
X