diff --git a/docs/docs.json b/docs/docs.json index eadbefcf..2236c79e 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -34,7 +34,8 @@ "group": "Tutorials", "pages": [ "tutorial/generate-presentation-over-api", - "tutorial/generate-presentation-from-csv" + "tutorial/generate-presentation-from-csv". + "tutorial/create-data-reports-using-ai" ] } ] diff --git a/docs/tutorial/create-data-reports-using-ai.mdx b/docs/tutorial/create-data-reports-using-ai.mdx new file mode 100644 index 00000000..5a216313 --- /dev/null +++ b/docs/tutorial/create-data-reports-using-ai.mdx @@ -0,0 +1,225 @@ +--- +title: "Create Data Reports Using AI" +description: "Step-by-step guide to generating company sales reports from a CSV file" +--- + +In this tutorial, we will generate detailed, multi-slide sales data reports for multiple companies using a self-hosted Presenton's API and a Python script. + +This tutorial extends [Generate a PPT via API in 5 Minutes](./generate-presentation-over-api) and shows you how to automate the creation of structured sales reports from a CSV file using Python. + +So, do check it before continuing with this and make sure you have Presenton running locally or on any server, and you are able to generate presentations with it. + +--- + +## 1. Prepare Your CSV File + +Save your sales data as `sales_data.csv`: + +```csv +Company,Month,Region,Total Sales,Product A Sales,Product B Sales,Product C Sales,Quarter Target Achieved,Top Sales Rep,New Clients,Client Churn Rate,Growth vs Last Quarter,Marketing Spend,Customer Satisfaction,Notable Events +AcmeCorp,2024-03,North,98000,45000,37000,16000,Yes,Sarah Dee,13,2%,5.5%,11500,8.9,"Launched B2B platform" +AcmeCorp,2024-03,South,76800,30000,39000,7800,Yes,John Lee,9,3%,4.5%,9200,8.3,"New partnership established" +BetaBiz,2024-03,West,82000,22000,47000,13000,No,Monica Tai,7,4%,-1.0%,10900,7.3,"Ad campaign underperformed" +BetaBiz,2024-03,East,94500,40000,41000,13500,Yes,Derek Shah,11,2.2%,7.2%,12400,8.6,"Exceeded upsell targets" +ZenithLtd,2024-03,Central,101300,38000,51200,12000,Yes,Rita Ganesh,14,1.1%,9.6%,13800,9.2,"Record-high client retention" +ZenithLtd,2024-03,East,85450,25000,47000,13450,No,Marcus Bell,8,3.8%,-2.8%,10100,7.9,"Sales dip in Product C" +GammaInc,2024-03,North,91200,39000,43000,9200,Yes,Emily Jones,10,1.5%,6.2%,11800,8.8,"Employee incentive program" +GammaInc,2024-03,Sales Ops,79000,31000,39000,9000,No,David Yu,6,5.5%,-3.2%,8700,7.1,"System migration delayed" +``` + +--- + +## 2. Install Python Requirements + +You’ll need the `requests` and `pandas` libraries: + +```bash +pip install requests pandas +``` + +--- + +## 3. Write the Python Script + +Let’s build the script step by step. + +### a. Import Libraries + +```python +import os +import pandas as pd +import requests +``` + +### b. Create reports directory + +```python +os.makedirs('reports', exist_ok=True) +``` + +### c. Load the CSV + +```python +df = pd.read_csv("sales_data.csv") +``` + +### d. Group Data by Company + +```python +company_groups = df.groupby("Company") +``` + +### e. Define a Function to Build the Prompt + +```python +def build_prompt(company, group): + """ + Build a markdown prompt with data summary, chart instructions, and slide structure. + """ + summary = [] + regions = group['Region'].unique() + total_sales = group['Total Sales'].sum() + total_clients = group['New Clients'].sum() + churn = group['Client Churn Rate'].mean() + satisfaction = group['Customer Satisfaction'].mean() + growth = group['Growth vs Last Quarter'].mean() + marketing = group['Marketing Spend'].sum() + notable = "; ".join(group['Notable Events'].unique()) + + # Markdown-structured prompt + prompt = f""" +## Sales Report for {company} + +### 1. Executive Summary +- Total sales: **${total_sales:,.0f}** +- Average client churn: **{churn:.2f}%** +- Customer satisfaction: **{satisfaction:.2f}/10** +- Notable events: _{notable}_ + +### 2. Regional Performance +**Bar Chart:** Regional Total Sales + +| Region | Sales | +|---|---| +""" + for region in regions: + reg_sales = group[group['Region'] == region]['Total Sales'].sum() + prompt += f"| {region} | ${reg_sales:,.0f} |\n" + + prompt += """ + +### 3. Product Performance +**Bar Chart:** Sales by Product per Region + +| Region | Product A | Product B | Product C | +|---|---|---|---| +""" + for region in regions: + gr = group[group['Region'] == region] + a = gr['Product A Sales'].sum() + b = gr['Product B Sales'].sum() + c = gr['Product C Sales'].sum() + prompt += f"| {region} | ${a:,.0f} | ${b:,.0f} | ${c:,.0f} |\n" + + prompt += f""" + +### 4. Key Metrics & Trends +- Aggregate new clients this month: **{total_clients}** +- Mean growth vs last quarter: **{growth:.2f}%** +- Total marketing spend: **${marketing:,.0f}** + +### 5. Top Performers +| Region | Top Sales Rep | New Clients | +|---|---|---| +""" + for region in regions: + gr = group[group['Region'] == region] + rep = gr['Top Sales Rep'].iloc[0] + clients = gr['New Clients'].iloc[0] + prompt += f"| {region} | {rep} | {clients} |\n" + + prompt += """ + +--- + +**Instructions:** +- Create 1 slide per section (5 total). +- Use clean, professional visuals. +- For charts, display the specified bar chart with given data. +- Use summary bullet points before every chart or table for clarity. +**Do exactly as in said here.** +""" + + return prompt +``` + +### f. Loop Over Each Company and Generate a Report + +```python +for company, group in company_groups: + print(f"Generating report for {company}") + prompt = build_prompt(company, group) + data = { + "prompt": prompt, + "n_slides": "5", + "language": "English", + "theme": "light_red", + "export_as": "pdf" + } + response = requests.post( + "http://localhost:5000/api/v1/ppt/generate/presentation", + data=data + ) + if response.ok: + result = response.json() + print("Downloading report...") + download_url = f"http://localhost:5000{result['path']}" + filename = f"reports/{company}_Sales_Report.pdf" + file_response = requests.get(download_url) + if file_response.ok: + with open(filename, 'wb') as f: + f.write(file_response.content) + print(f"Report for {company} saved as {filename}") + else: + print(f"Failed to download report for {company}: {file_response.status_code}") + else: + print(f"Failed to generate report for {company}: {response.text}") +``` + +Generated reports will be saved in the `reports` directory. + +You may change the URL `http://localhost:5000` to the URL of your Presenton instance. + +--- + +## 4. Run the Script + +Save your script as `generate_sales_reports.py` and run: + +```bash +python generate_sales_reports.py +``` + +Each company will get a detailed, multi-slide sales report, and you’ll see the download path for each file in your terminal. + +--- + +## 5. How It Works + +- The script reads and groups your CSV by company. +- It builds a well-structured markdown prompt for Presenton’s API (see [API Reference](./generate-presentation-over-api)). +- It sends a POST request to generate a report for each company. +- The API returns a download path for each generated PDF. +- The file is downloaded and saved in the `reports` folder. + +--- + +## 6. Next Steps + +- You can further customize the prompt or number of slides as needed. +- For more on API options, see [Generate a PPT via API in 5 Minutes](./generate-presentation-over-api). +- For advanced configuration (for example, using Ollama or GPU), see [Environment Variables](../configurations/environment-variables), [Using GPU](../configurations/using-gpu), and [Using Ollama Models](../configurations/using-ollama-models). + + + Need help? See the [full documentation](./index) or open an issue on GitHub. + \ No newline at end of file