File size: 4,575 Bytes
068afd6
1fb31ed
e547235
1c25f86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1fb31ed
d600590
c74b8f3
 
 
d600590
1fb31ed
d600590
c74b8f3
d600590
 
 
c74b8f3
d600590
 
 
 
 
c74b8f3
d600590
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import pickle
import gradio as gr
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
import numpy as np
with open("earthquake_model.pkl", 'rb') as file:
    model = pickle.load(file)
def time2num(x):
    try:
        (h, m, s) = str(x).split(':')
        result = int(h) * 3600 + int(m) * 60 + int(s)
        return result
    except:
        return 0

def date2num(x):
    try:
        (m, d, y) = str(x).split("/")
        result = int(y) * 365 + int(m) * 30 + int(d)
        return result
    except:
        return 0

def datetime2num(date_str, time_str):
    date_value = date2num(date_str)
    time_value = time2num(time_str)
    return date_value ,time_value
def test(model, date_str, time_str,all_points):
    data_list = []
    for lat, lon in all_points:
        date, time = datetime2num(date_str, time_str)
        data_list.append([date, time, lat, lon])
    np_array = np.array(data_list)
    res = model.predict_proba(np_array)
    return res
def create_geodf(all_points, model, date_str, time_str):
    res = test(model, date_str, time_str,all_points)

    data_list = []
    for lat, lon in all_points:
        date, time = datetime2num(date_str, time_str)
        data_list.append([date, time, lat, lon])
    np_array = np.array(data_list)

    df = pd.DataFrame(np_array, columns=['Date', 'Time', 'Latitude', 'Longitude'])
    df['Probability_2'] = [i[1] for i in res]
    df['geometry'] = [Point(lon, lat) for lat, lon in zip(df['Latitude'], df['Longitude'])]

    crs = "EPSG:4326"
    gdf = gpd.GeoDataFrame(df, crs=crs, geometry='geometry')

    return gdf

def plot_func(date_str, time_str):
    min_latitude = -90
    max_latitude = 90
    latitude_step = 1
    min_longitude = -180
    max_longitude = 180
    longitude_step = 1
    latitudes = np.arange(min_latitude, max_latitude + latitude_step, latitude_step)
    longitudes = np.arange(min_longitude, max_longitude + longitude_step, longitude_step)
    all_points = np.array(np.meshgrid(latitudes, longitudes)).T.reshape(-1, 2)
    gdf = create_geodf(all_points, model, date_str, time_str)

    top = gdf.nlargest(100, 'Probability_2')
    world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
    fig, ax = plt.subplots(figsize=(12, 12))
    ax.imshow(np.ones((180, 360)), cmap='gray', extent=[-180, 180, -90, 90])
    world.plot(ax=ax, color='lightgray', edgecolor='black')
    top.plot(ax=ax, markersize=50, color='red', legend=True, alpha=0.5)

    plt.xlabel('Longitude')
    plt.ylabel('Latitude')
    plt.title('Possible Earthquake Map')
    plt.grid(True)

    return plt.gcf()

inputs = [gr.inputs.Textbox(label="Date: (MM/DD/YYYY)"), gr.inputs.Textbox(label="Time: (HH:MM:SS) GMT-4")]

title = "Earthquake Probability Prediction by Q-bert"
description = """"
Earthquake Probability Prediction Interface

This interface is based on a Gradient Boosting model trained with a large dataset of significant earthquakes. The model aims to predict earthquake probabilities in different geographical regions worldwide.

How to Use?

Please enter the date and time information in the text boxes below (date format: MM/DD/YYYY and time format: HH:MM:SS GMT-4). The model will visualize the possible earthquake probabilities on the world map for the specified date and time.

About the Model

This model has been trained on a substantial dataset and utilizes the Gradient Boosting algorithm. The dataset comprises historical earthquake events along with corresponding geographical information. The model is employed to estimate earthquake probabilities in various regions at the specified date and time.

Please note that these predictions are probabilistic and the precise timing and locations of actual earthquake events are challenging to forecast accurately. Therefore, always consult with authorities for earthquake preparedness and precautionary measures.

Disclaimer

The results presented in this interface are for entertainment purposes only and should not be used for real-time earthquake event predictions.

In this text, users are informed about how to use the interface and the type of data on which the model was trained. It also emphasizes that the predictions are probabilistic and should not be used as a real-time application for earthquake predictions. As earthquakes can have serious consequences, users are reminded to seek reliable sources for verified information and advice."""
gr.Interface(fn=plot_func, inputs=inputs, outputs="plot", title=title, description=description, debugging=True).launch()