Rama Wijaya

Civil Engineer & AI Enthusiast

I am an active Civil Engineer who learned coding from Python and is now exploring Artificial Intelligence. Specializing in Hydraulic & Hydrologic Modeling, GIS, and Remote Sensing. Proficient in using CAD, BIM, and other engineering software.

Notebooks

A collection of data analysis and engineering research powered by Jupyter Notebooks.

Click on the project card to see and download the notebooks.

Insert_Picture_to_Excel.ipynb
Sub InsertPicturesWithDialog()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim fullPath As String
    Dim picNum As String
    Dim shp As Shape
    Dim targetCell As Range
    Dim folderPath As String
    Dim successCount As Long
    Dim picWidth As Double
    Dim picHeight As Double
    
    ' Variables for user input
    Dim numberColumn As String
    Dim pictureColumn As String
    Dim widthInput As String
    Dim heightInput As String
    Dim unitInput As String
    Dim numberCol As Long
    Dim pictureCol As Long
    Dim widthValue As Double
    Dim heightValue As Double
    
    ' Get folder path
    folderPath = InputBox("Enter the folder path where images are stored:" & vbCrLf & vbCrLf & _
                         "Example: C:\Users\User\Downloads\Images", _
                         "Image Folder Path", _
                         "C:\Users\User\Downloads\")
    
    If folderPath = "" Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    ' Ensure folder path ends with backslash
    If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
    
    ' Check if folder exists
    If Dir(folderPath, vbDirectory) = "" Then
        MsgBox "Folder not found! Please check the path.", vbCritical
        Exit Sub
    End If
    
    ' Get column with numbers
    numberColumn = InputBox("Enter the column letter that contains the numbers:" & vbCrLf & vbCrLf & _
                           "Example: B", _
                           "Number Column", _
                           "B")
    
    If numberColumn = "" Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    numberCol = Range(numberColumn & "1").Column
    
    ' Get column for pictures
    pictureColumn = InputBox("Enter the column letter where pictures should be placed:" & vbCrLf & vbCrLf & _
                            "Example: J", _
                            "Picture Column", _
                            "J")
    
    If pictureColumn = "" Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    pictureCol = Range(pictureColumn & "1").Column
    
    ' Get unit of measurement
    unitInput = InputBox("Select unit of measurement:" & vbCrLf & vbCrLf & _
                        "Enter:" & vbCrLf & _
                        "  'in' or 'inch' for inches" & vbCrLf & _
                        "  'cm' for centimeters" & vbCrLf & _
                        "  'mm' for millimeters", _
                        "Unit of Measurement", _
                        "cm")
    
    If unitInput = "" Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    ' Normalize unit input
    unitInput = LCase(Trim(unitInput))
    If unitInput <> "in" And unitInput <> "inch" And unitInput <> "cm" And unitInput <> "mm" Then
        MsgBox "Invalid unit! Please enter 'in', 'cm', or 'mm'.", vbCritical
        Exit Sub
    End If
    
    ' Get picture width
    widthInput = InputBox("Enter picture width in " & unitInput & ":" & vbCrLf & vbCrLf & _
                          "Example: 7.2 (for " & unitInput & ")", _
                          "Picture Width", _
                          "7.2")
    
    If widthInput = "" Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    If Not IsNumeric(widthInput) Then
        MsgBox "Invalid width! Please enter a number.", vbCritical
        Exit Sub
    End If
    
    widthValue = CDbl(widthInput)
    
    ' Get picture height
    heightInput = InputBox("Enter picture height in " & unitInput & ":" & vbCrLf & vbCrLf & _
                           "Example: 9.6 (for " & unitInput & ")", _
                           "Picture Height", _
                           "9.6")
    
    If heightInput = "" Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    If Not IsNumeric(heightInput) Then
        MsgBox "Invalid height! Please enter a number.", vbCritical
        Exit Sub
    End If
    
    heightValue = CDbl(heightInput)
    
    ' Convert to points (1 inch = 72 points)
    Select Case unitInput
        Case "in", "inch"
            picWidth = widthValue * 72
            picHeight = heightValue * 72
        Case "cm"
            picWidth = (widthValue / 2.54) * 72  ' cm to inches to points
            picHeight = (heightValue / 2.54) * 72
        Case "mm"
            picWidth = (widthValue / 25.4) * 72  ' mm to inches to points
            picHeight = (heightValue / 25.4) * 72
    End Select
    
    ' Confirm settings
    Dim confirmMsg As String
    confirmMsg = "Please confirm your settings:" & vbCrLf & vbCrLf & _
                 "Folder: " & folderPath & vbCrLf & _
                 "Number Column: " & numberColumn & vbCrLf & _
                 "Picture Column: " & pictureColumn & vbCrLf & _
                 "Picture Size: " & widthInput & unitInput & " x " & heightInput & unitInput & vbCrLf & _
                 "              (" & Format(picWidth / 72, "0.00") & """ x " & Format(picHeight / 72, "0.00") & """)" & vbCrLf & vbCrLf & _
                 "Continue?"
    
    If MsgBox(confirmMsg, vbYesNo + vbQuestion, "Confirm Settings") = vbNo Then
        MsgBox "Operation cancelled.", vbInformation
        Exit Sub
    End If
    
    ' Start processing
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, numberCol).End(xlUp).Row
    successCount = 0
    
    ' Loop through each row
    For i = 1 To lastRow
        picNum = Trim(ws.Cells(i, numberCol).Value)
        
        If IsNumeric(picNum) And picNum <> "" Then
            ' Try to find the image file
            fullPath = ""
            If Dir(folderPath & picNum & ".jpeg") <> "" Then
                fullPath = folderPath & picNum & ".jpeg"
            ElseIf Dir(folderPath & picNum & ".jpg") <> "" Then
                fullPath = folderPath & picNum & ".jpg"
            ElseIf Dir(folderPath & picNum & ".png") <> "" Then
                fullPath = folderPath & picNum & ".png"
            End If
            
            If fullPath <> "" Then
                Set targetCell = ws.Cells(i, pictureCol)
                
                ' Delete existing shapes/pictures in target column for this row
                On Error Resume Next
                Dim existingShp As Shape
                For Each existingShp In ws.Shapes
                    If existingShp.TopLeftCell.Row = i And _
                       existingShp.TopLeftCell.Column = pictureCol Then
                        existingShp.Delete
                    End If
                Next existingShp
                On Error GoTo 0
                
                ' Add picture as EMBEDDED
                Set shp = ws.Shapes.AddPicture( _
                    Filename:=fullPath, _
                    LinkToFile:=msoFalse, _
                    SaveWithDocument:=msoTrue, _
                    Left:=targetCell.Left + 5, _
                    Top:=targetCell.Top + 5, _
                    Width:=picWidth, _
                    Height:=picHeight)
                
                ' Set placement to move/size with cells
                With shp
                    .LockAspectRatio = msoFalse
                    .Placement = xlMoveAndSize
                End With
                
                successCount = successCount + 1
            End If
        End If
    Next i
    
    MsgBox successCount & " picture(s) embedded successfully!", vbInformation
End Sub

Insert Pictures VBA

VBA Macro to insert pictures into Excel based on cell values.

VBAExcel
LULC Processor.ipynb
# Library
import os
import geopandas as gpd
import rasterio
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import rasterio.mask
from rasterio.plot import show
from rasterio.warp import transform_geom

LULC Processor

Land Use Land Cover change detection and spatial processing using Python and GIS.

PythonGeoPandasRasterio
ML_LULC Train and Forecast.ipynb
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error, mean_absolute_error, confusion_matrix, ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings("ignore")

ML LULC Forecast

Machine learning model for training and forecasting LULC changes.

PythonMachine LearningScikit-Learn
RegressionGraph.ipynb
import pandas as pd
import numpy as np
from IPython.display import display
import os

# Define file paths
source_file_path = r"\Regression.xlsx"
result_file_path = r"\RegressionGraph_Results.xlsx"

# Verify paths exist
if not os.path.exists(source_file_path):
    print(f"Warning: Source file not found at {source_file_path}")
else:
    print(f"Source file found: {source_file_path}")

# Create results directory if it doesn't exist
os.makedirs(os.path.dirname(result_file_path), exist_ok=True)

Regression Analysis

Linear and non-linear regression modeling for engineering data visualization.

PythonMatplotlibSciPy
netCDF4 File Checker.ipynb
import netCDF4 as nc
import os
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
import warnings
warnings.filterwarnings('ignore')

NetCDF4 Checker

Utility tool for inspecting and validating NetCDF4 climate data files.

PythonNetCDF4Data Engineering
Outlier Test_v1.ipynb
import pandas as pd
import numpy as np
from scipy import stats

import matplotlib.pyplot as plt

Outlier Test

Statistical detection of outliers in hydrological precipitation datasets.

PythonStatisticsData Analysis
Trend Test_v1.ipynb
import pandas as pd
import numpy as np
from scipy.stats import kendalltau

Trend Test

Mann-Kendall trend test implementation for long-term climate data analysis.

PythonMann-KendallClimate Data
Stability Test_v1.ipynb
import pandas as pd
import numpy as np
from scipy import stats

Stability Test

Data stability verification for hydrological time series analysis.

PythonHydrologyStats
Independency Test_v1.ipynb
import pandas as pd
import numpy as np 
import scipy.stats as stats
from scipy import stats

Independency Test

Statistical independence checks for rainfall data series validation.

PythonScienceMath
Monthly Rainfall.ipynb
import pandas as pd

Monthly Rainfall Analysis

Monthly average rainfall calculation and spatial interpolation (IDW) mapping.

PythonGeoPandasNoteable

Publications

Research papers and academic contributions in civil engineering, water resources, and computational modeling.

Conference

Evaluation of GSMap (Global Satellite Mapping of Precipitation) with the reference to rain gauge observations in Banjarbaru City, Indonesia

N Helda, E Nashrullah, M R Wijayanto, M Noralamsyah, N Jannah, E Erisa, D S Saputri

IOP Conference Series: Earth and Environmental Science2024

Evaluation of satellite-based precipitation data (GSMap) against rain gauge observations in Banjarbaru City, Indonesia.

Journal

Identifikasi Kejadian Hujan dengan Menggunakan Data Satelit GSMaP (Global Satellite Mapping of Precipitation) di Banjarbaru

Noordiah Helda, Muhammad Ramadhani Wijayanto

Buletin Profesi Insinyur2023

Identification of rainfall events using GSMaP satellite data in Banjarbaru, comparing with BMKG station observations.

Journal

Aplikasi Program HEC-RAS 5.0.7 untuk Pemodelan Banjir di Sub-sub DAS Martapura Kabupaten Banjar

Muhammad Ramadhani Wijayanto, Noordiah Helda

Jurnal Serambi Engineering2022

Application of HEC-RAS 5.0.7 for flood modeling in the Martapura sub-watershed, Banjar Regency.

Conference

Analysis of hydrology parameters in a tropical wetland as an early approach to identify a drought risk in a peatland area

Nilna Amal, Noordiah Helda, Achmad Rusdiansyah, M Ramadhani Wijayanto, Fadhiil Muammar

IOP Conference Series: Earth and Environmental Science2022

Hydrological parameter analysis in tropical wetlands for early drought risk identification in peatland areas.

About Me

Rama Wijaya
5+
Years Experience
30+
Construction Projects
250+
GitHub Contributions
Coffee Cups

Background

I am an active Civil Engineer with a passion for automation and visualization. My journey began with Python for data processing and has evolved into "vibe coding" — creating some web applications that solve problems.

I combine my technical engineering expertise with modern web development to build unique tools and interfaces. I also proficient in using hydraulic and hydrological modeling software to analyze and design water resources systems.

Engineering Tools

Water Resources & Modeling

HEC-RASHEC-HMSRRI Model

Architecture & BIM

ArchiCAD (BIM)AutoCADSketchUp

Visualization & Rendering

EnscapeLumion

Geospatial & Remote Sensing

ArcGISQGISEarth Engine

Tech Stack

Languages

PythonTypeScriptJavaScript

Web Development

ReactNext.jsTailwind CSSFastAPIFlaskNode.js

AI & Machine Learning

OpenAILangChainPyTorchYOLOScikit-learnTensorFlowKeras

Database

PostgreSQLMongoDB

Get In Touch

I'm always open for any challenges and opportunities. Whether you have a question or just want to say hi, don't hesitate to hit me up on one of my social media below!

Tanah Laut, Indonesia
Say Hello