Business_recomendations (07) - Govarthan-Boopalan/Customer_Behaviour_Analysis GitHub Wiki
This script generates a data-driven PDF business report for ShopEasy, combining SQL insights with strategic recommendations. It features a 2-page layout with actionable insights and supporting data tables.
Table of Contents
Script Overview
Key Features
- Dynamic Recommendations: 5 data-driven business strategies
- Two-Page PDF Report:
- Page 1: Executive summary with analysis commentary
- Page 2: Detailed support tables
- Automated Styling: Professional formatting with ReportLab
- MySQL Integration: Real-time data analysis
Data Domains Analyzed
- Product Performance
- Demographic Targeting
- Regional Sales
- Marketing ROI
- Discount Candidates
Flowchart
Start
│
├── Initialize Database Connection (SQLAlchemy)
│
├── get_dynamic_recommendations()
│ ├── Execute 5 Analytical Queries
│ ├── Process Results with Pandas
│ └── Generate Strategic Recommendations
│
├── create_dynamic_pdf()
│ ├── Page 1: Title & Actionable Insights
│ │ ├── Add Styled Headings
│ │ ├── Insert Recommendations + Analysis
│ │ └── Add Methodology Footnote
│ │
│ └── Page 2: Supporting Data Tables
│ ├── Execute 3 Additional Queries
│ ├── Format Tables with Alternating Colors
│ └── Add Explanatory Captions
│
└── Save PDF to ../results/
Code Explanation
Core Components
1. Database Connection
engine = create_engine('mysql+mysqlconnector://root:456123@localhost/ShopEasy')
- Uses SQLAlchemy for connection pooling and safe query execution
2. PDF Styling Configuration
style_heading = ParagraphStyle(
'Heading1',
fontSize=16,
textColor=colors.darkblue,
spaceAfter=12
)
- Defines reusable styles for:
- Headings (dark blue)
- Body text
- Bulleted recommendations
- Footnotes
Key Functions
get_dynamic_recommendations()
Generates 5 business insights through SQL queries:
- Product Performance
SELECT p.ProductName,
ROUND((SUM(purchases)*100.0/COUNT(*),2) AS conversion_rate
FROM customer_journey...
- Identifies best-converting product using purchase-to-browse ratio
- Demographic Targeting
CASE WHEN Age < 30 THEN '18-29'...
- Segments customers by age/gender/location
- Calculates demographic-specific conversion rates
create_dynamic_pdf()
Constructs PDF layout using ReportLab's Platypus framework:
elements = [
Paragraph("Title", style_heading),
Spacer(1,12),
Table(data, style=table_style),
PageBreak()
]
- Uses
KeepTogether
to prevent content fragmentation - Implements alternating row colors for tables:
TableStyle([
('BACKGROUND', (0,1), (-1,-1), colors.beige),
('GRID', (0,0), (-1,-1), 1, colors.black)
])
SQL Query Breakdown
Discount Candidate Logic
SELECT p.ProductName
FROM products p
LEFT JOIN top_products ON p.ProductID = top_products.ProductID
WHERE top_products.ProductID IS NULL
HAVING avg_rating < 3.5 AND review_count > 5
- Excludes top 3 selling products
- Filters for underperforming items with:
- Low ratings (<3.5/5)
- Significant review volume (>5)
Marketing ROI Calculation
(SUM(purchases)*100.0/SUM(Clicks) AS conversion_rate
- Measures campaign effectiveness via click-to-purchase ratio
Usage
- Prerequisites
pip install pandas sqlalchemy mysql-connector-python reportlab
- Execution
python 07_Business_recomendations.py
- Output
- PDF report at:
../results/ShopEasy_Business_Recommendations.pdf
Customization Guide
-
Modify Queries
Adjust LIMIT clauses or WHERE conditions in thequeries
dictionaries -
Change Styling
EditParagraphStyle
configurations:
style_heading.textColor = colors.red # Change header color
- Add New Sections
Extendtables
list increate_dynamic_pdf()
with additional queries
Improvement Suggestions
- Parameterization
# Convert to command-line arguments
LIMIT_TOP_PRODUCTS = 5 → config.LIMIT_TOP_PRODUCTS
- Enhanced Visualization
from reportlab.graphics.charts.barcharts import VerticalBarChart
# Add conversion rate comparison charts
- Email Automation
import smtplib
# Auto-send PDF to stakeholders
- Error Resilience
try:
df = pd.read_sql(query, engine)
except SQLAlchemyError as e:
logger.error(f"Query failed: {str(e)}")
Conclusion
This script provides a robust framework for transforming database insights into executive-ready reports. By combining SQL analysis with automated PDF generation, it bridges the gap between data teams and business decision-makers. The modular structure allows easy adaptation to new analysis requirements while maintaining professional presentation standards.