From Python Basics to AI-Powered Geotechnical Solutions
| Author | Ripon Chandra Malo |
| Affiliation | PhD Student — Civil & Environmental Engineering (Geotechnical), University of Utah |
| Research | Granular Materials x Artificial Intelligence |
| Start Date | February 2026 |
A structured 100-day journey bridging the gap between classical geotechnical engineering and modern machine learning / deep learning — one commit, one notebook, one day at a time.
Every day includes a Python script (.py), a Jupyter Notebook (.ipynb), concise notes (notes.md),.
The journey starts from Python fundamentals and progresses to Physics-Informed Neural Networks (PINNs), LSTMs for seismic data, and end-to-end geotechnical ML pipelines.
100-Days-of-ML-for-Geotechnical-Engineering/
│
├── README.md
├── LICENSE
├── requirements.txt
├── .gitignore
│
├── Phase-1_Python-Fundamentals/ (Day 001 – 015)
├── Phase-2_Data-Science-Essentials/ (Day 016 – 035)
├── Phase-3_Classical-ML/ (Day 036 – 060)
├── Phase-4_Deep-Learning/ (Day 061 – 085)
├── Phase-5_Geotechnical-AI-Projects/ (Day 086 – 100)
│
└── assets/
| Step | Time | Action |
|---|---|---|
| Learn | 10 min | Read / watch the concept |
| Code | 35 min | Implement in .ipynb / .py |
| Notes | 10 min | Write notes.md with key takeaways |
| Push | 5 min | git add > commit > push + Upload .ipynb to Kaggle |
Day 001 – 015
| Day | Topic | Notebook | Status |
|---|---|---|---|
| 001 | Variables, Data Types & Type Casting | Notebook | |
| 002 | Conditionals — if / elif / else | Notebook | |
| 003 | Loops — for, while, enumerate, zip | Notebook | |
| 004 | Strings & String Methods | Notebook | |
| 005 | Lists, Tuples & Sets | Notebook | |
| 006 | Dictionaries & Comprehensions | Notebook | |
| 007 | Functions & Lambda Expressions | Notebook | |
| 008 | File I/O — Read & Write CSV, TXT | Notebook | |
| 009 | Error Handling — try / except / finally | Notebook | |
| 010 | OOP — Classes & Objects | Notebook | |
| 011 | OOP — Inheritance & Polymorphism | Notebook | |
| 012 | Modules & Packages | Notebook | |
| 013 | Decorators & Generators | Notebook | |
| 014 | Regular Expressions (re module) | Notebook | |
| 015 | Mini Project: USCS Soil Classification Tool | Notebook |
Day 016 – 035
| Day | Topic | Notebook | Status |
|---|---|---|---|
| 016 | NumPy — Arrays & Operations | Notebook | |
| 017 | NumPy — Linear Algebra (SVD, Eigenvalues) | Notebook | |
| 018 | NumPy — Signal Processing Basics | Notebook | |
| 019 | Pandas — Series & DataFrames | Notebook | |
| 020 | Pandas — Data Cleaning & Missing Values | Notebook | |
| 021 | Pandas — GroupBy & Aggregation | Notebook | |
| 022 | Pandas — Merge, Join & Concat | Notebook | |
| 023 | Matplotlib — Basic Plots | Notebook | |
| 024 | Matplotlib — Subplots & Customization | Notebook | |
| 025 | Seaborn — Statistical Visualization | Notebook | |
| 026 | Plotly — Interactive Plots | Notebook | |
| 027 | SciPy — Optimization | Notebook | |
| 028 | SciPy — Interpolation & Curve Fitting | Notebook | |
| 029 | SciPy — Signal Processing (FFT, Filtering) | Notebook | |
| 030 | Exploratory Data Analysis (EDA) Workflow | Notebook | |
| 031 | Feature Engineering Techniques | Notebook | |
| 032 | Data Preprocessing Pipeline | Notebook | |
| 033 | Handling Imbalanced Datasets | Notebook | |
| 034 | Dimensionality Reduction (PCA, SVD) | Notebook | |
| 035 | Mini Project: SPT Borehole Data EDA | Notebook |
Day 036 – 060
| Day | Topic | Notebook | Status |
|---|---|---|---|
| 036 | Linear Regression from Scratch | Notebook | |
| 037 | Linear Regression with Scikit-Learn | Notebook | |
| 038 | Polynomial, Ridge & Lasso Regression | Notebook | |
| 039 | Logistic Regression | Notebook | |
| 040 | K-Nearest Neighbors (KNN) | Notebook | |
| 041 | Decision Trees | Notebook | |
| 042 | Random Forest | Notebook | |
| 043 | Gradient Boosting & XGBoost | Notebook | |
| 044 | Support Vector Machines (SVM) | Notebook | |
| 045 | Naive Bayes Classifier | Notebook | |
| 046 | K-Means Clustering | Notebook | |
| 047 | DBSCAN & Hierarchical Clustering | Notebook | |
| 048 | Cross-Validation & Hyperparameter Tuning | Notebook | |
| 049 | Grid Search vs Random Search vs Optuna | Notebook | |
| 050 | Regression Metrics (R-squared, RMSE, MAE) | Notebook | |
| 051 | Classification Metrics (ROC, AUC, F1) | Notebook | |
| 052 | Ensemble Methods Deep Dive | Notebook | |
| 053 | Feature Importance & SHAP Explainability | Notebook | |
| 054 | ML Pipeline with Scikit-Learn | Notebook | |
| 055 | Soil Liquefaction Prediction (ML) | Notebook | |
| 056 | Shear Wave Velocity from SPT (ML) | Notebook | |
| 057 | Bearing Capacity Prediction (ML) | Notebook | |
| 058 | Soil Type Classification (ML) | Notebook | |
| 059 | CPT Data Interpretation with ML | Notebook | |
| 060 | Mini Project: Full Geotech ML Pipeline | Notebook |
Day 061 – 085
| Day | Topic | Notebook | Status |
|---|---|---|---|
| 061 | Neural Network from Scratch (NumPy) | Notebook | |
| 062 | Intro to PyTorch — Tensors | Notebook | |
| 063 | PyTorch — Autograd & Backpropagation | Notebook | |
| 064 | PyTorch — Building a Simple NN | Notebook | |
| 065 | Activation Functions Deep Dive | Notebook | |
| 066 | Loss Functions & Optimizers | Notebook | |
| 067 | Regularization (Dropout, BatchNorm) | Notebook | |
| 068 | CNN — Fundamentals | Notebook | |
| 069 | CNN — Image Classification | Notebook | |
| 070 | Transfer Learning (ResNet, VGG) | Notebook | |
| 071 | RNN — Fundamentals | Notebook | |
| 072 | LSTM & GRU Networks | Notebook | |
| 073 | Time Series Forecasting with LSTM | Notebook | |
| 074 | Autoencoders | Notebook | |
| 075 | Variational Autoencoders (VAE) | Notebook | |
| 076 | Intro to GANs | Notebook | |
| 077 | Physics-Informed Neural Networks (PINNs) | Notebook | |
| 078 | PINNs for Geotechnical Problems | Notebook | |
| 079 | Graph Neural Networks Basics | Notebook | |
| 080 | Attention Mechanism & Transformers Intro | Notebook | |
| 081 | Tabular Deep Learning (TabNet) | Notebook | |
| 082 | Hyperparameter Tuning for Deep Learning | Notebook | |
| 083 | Model Deployment (ONNX, TorchScript) | Notebook | |
| 084 | Seismic Signal Classification (DL) | Notebook | |
| 085 | Ground Motion Prediction with LSTM | Notebook |
Day 086 – 100
| Day | Topic | Notebook | Status |
|---|---|---|---|
| 086 | SPT to Shear Wave Velocity (ANN + Ensemble) | Notebook | |
| 087 | Liquefaction Susceptibility Mapping (DL) | Notebook | |
| 088 | Soil Classification from CPT using CNN | Notebook | |
| 089 | Settlement Prediction with ML | Notebook | |
| 090 | Seismic Response Spectra Prediction | Notebook | |
| 091 | Retaining Wall Design Optimization | Notebook | |
| 092 | Slope Stability with ML | Notebook | |
| 093 | Ground Motion Selection using Clustering | Notebook | |
| 094 | DIGGS Data Automated Analysis Pipeline | Notebook | |
| 095 | Reduced-Order Modeling for Geotechnics | Notebook | |
| 096 | Streamlit Dashboard for Geotech ML | Notebook | |
| 097 | Full Project: End-to-End ML Application | Notebook | |
| 098 | Documentation & README Polish | Notebook | |
| 099 | Kaggle Competition Submission | Notebook | |
| 100 | Portfolio Summary & Reflection | Notebook |
| Category | Tools |
|---|---|
| Language | Python 3.10+ |
| Data | NumPy, Pandas, SciPy |
| Visualization | Matplotlib, Seaborn, Plotly |
| ML | Scikit-Learn, XGBoost, Optuna |
| Deep Learning | PyTorch |
| Deployment | Streamlit, ONNX |
| Environment | Jupyter Notebook, VS Code |
| Version Control | Git & GitHub |
| Notebooks | Kaggle Kernels |
# Clone the repository
git clone https://github.com/YOUR_USERNAME/100-Days-of-ML-for-Geotechnical-Engineering.git
cd 100-Days-of-ML-for-Geotechnical-Engineering
# Install dependencies
pip install -r requirements.txt
# Open any day's notebook
jupyter notebook Phase-1_Python-Fundamentals/Day_001/day_001.ipynbThis project is licensed under the MIT License — see the LICENSE file for details.
Note
If you find this repository useful, consider giving it a star.
"The best time to plant a tree was 20 years ago. The second best time is now."
— Chinese Proverb
