01
Python Pandas SQLite Google Search Console API OAuth 2.0 Chart.js Docker

Automated SEO
Analytics Pipeline

An end-to-end data pipeline that automatically extracts search performance data from the Google Search Console API, transforms it with Pandas, and stores it in a SQLite database for long-term historical analysis — with a terminal SQL report view and a local browser dashboard. Unlike the native GSC dashboard, this pipeline retains data indefinitely and enables custom SQL-based analysis with no manual exports required.

Built a full ETL pipeline across 6 modular Python scripts (auth.py, extract.py, transform.py, load.py, query.py, dashboard.py) orchestrated via a single main.py entry point.
Solved Google Search Console's 16-month data retention limit by persisting all search query and page performance data to a local SQLite database that grows indefinitely over time.
Engineered a custom ctr_percent metric and generated both a terminal SQL report and an interactive Chart.js browser dashboard for visual analysis.
Containerized the full pipeline with Docker for portable, reproducible deployment across environments.
02
Python Pandas NumPy Matplotlib Seaborn EDA Feature Engineering

NYC Taxi Fare Prediction:
Data Integrity & Feature Engineering

A data preparation and integrity project for the NYC Taxi and Limousine Commission (TLC), completed as the Google Advanced Data Analytics Professional Certificate Python capstone. The goal was to deliver a clean, engineered, and validated dataset for predictive fare modeling — following a production-grade PACE strategy (Plan, Analyze, Construct, Execute).

Loaded and assessed 22,699 rows × 17 columns of 2017 NYC Yellow Cab trip data, correcting datetime dtypes and identifying impossible negative/zero values across financial and distance columns.
Engineered two high-value predictors — trip_duration_minutes and avg_speed_mph — and applied domain-knowledge speed filtering (max 60 mph) to remove erroneous entries.
Removed 192 rows (0.847% of data) through systematic outlier filtering, producing a final clean dataset of 22,474 rows × 20 columns ready for regression modeling.
Correlation analysis confirmed trip_distance (0.94) and fare_amount (0.98) as strongest predictors; log transformation recommended for highly skewed target variable total_amount.
03
R Tidyverse ggplot2 EDA Data Visualization

BellaBeat Fitness
Data Analysis

A stakeholder-focused analysis of smart fitness device user behavior using FitBit Fitness Tracker data from Kaggle (30 users, 1,397 records). The goal was to identify usage trends and translate them into product and marketing recommendations for BellaBeat — a women's wellness technology company.

Merged two daily activity datasets, corrected date formats, removed duplicates, and confirmed zero null values — delivering a clean dataset ready for analysis.
Discovered users spent an average of 993 min/day sedentary and only 19.7 min/day very active, revealing a major engagement gap for BellaBeat's product team to address.
Built ggplot2 visualizations confirming strong positive correlations between total steps/distance and calories burned — directly informing feature design recommendations.
Recommended BellaBeat leverage its Leaf and Time devices for daily step goal reminders and gamified challenges targeted at sedentary users.
04
Google Apps Script Telegram Bot API Google Drive OCR Google Sheets PropertiesService

Telegram OCR
Expense Tracker

A personal finance automation system built around a real daily problem — manually logging Thai bank payment slips is tedious and error-prone. The solution: a Telegram bot that reads slip photos via OCR, extracts transaction data, and logs structured records into a relational Google Sheets database — entirely through a conversational interface.

Built a full three-layer system: Telegram Bot (UI) → Google Apps Script (OCR + logic engine) → Google Sheets (relational database with Pivot Tables, SUMIFS, and Net Flow analytics across multiple tabs).
Implemented smart OCR parsing that handles both English short-year format (23 Feb 26) and Thai Buddhist Era dates (26 ก.พ. 68), plus automatic bank detection (KBank, Bangkok Bank).
Engineered a server-side session store using PropertiesService to bypass Telegram's 64-byte callback_data limit — enabling multi-step flows including split transaction detection, category selection, and description confirmation.
Supports automatic split transaction parsing — a memo like 50 dinner/50 grocery is auto-detected, validated against slip total, and saved as separate categorized rows.