File size: 5,751 Bytes
47cec27
79bdb89
 
 
 
 
 
 
 
 
 
 
47cec27
79bdb89
168a3a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import streamlit as st
from data_cleaning import DataCleaner
from visualization import VisualizationSelector
from data_analysis import DataAnalyzer
from report_generator import ReportGenerator
from api_integration import APIConnector
from natural_language_query import NLQueryEngine
from predictive_analytics import PredictiveAnalytics
from anomaly_detection import AnomalyDetector
from time_series_forecasting import TimeSeriesForecaster
from sentiment_analysis import SentimentAnalyzer
from data_storytelling import DataStoryteller
import pandas as pd

class DataAutomationApp:
    def __init__(self):
        self.data = None
        self.cleaner = DataCleaner()
        self.visualizer = VisualizationSelector()
        self.analyzer = DataAnalyzer()
        self.report_generator = ReportGenerator()
        self.api_connector = APIConnector()
        self.nl_query_engine = NLQueryEngine()
        self.predictive_analytics = PredictiveAnalytics()
        self.anomaly_detector = AnomalyDetector()
        self.time_series_forecaster = TimeSeriesForecaster()
        self.sentiment_analyzer = SentimentAnalyzer()
        self.data_storyteller = DataStoryteller()

    def load_data(self, file):
        if file.name.endswith('.csv'):
            self.data = pd.read_csv(file)
        elif file.name.endswith(('.xls', '.xlsx')):
            self.data = pd.read_excel(file)
        else:
            st.error("Unsupported file format. Please upload a CSV or Excel file.")

    def run(self):
        st.title("Data Automation and Visualization App")

        # File upload
        uploaded_file = st.file_uploader("Choose a CSV or Excel file", type=["csv", "xlsx"])
        if uploaded_file is not None:
            self.load_data(uploaded_file)
            if self.data is not None:
                st.success("Data loaded successfully!")

                # Sidebar for feature selection
                st.sidebar.title("Select a Feature")
                feature = st.sidebar.radio(
                    "Choose what you'd like to do:", 
                    ("Clean Data", "Generate Visualizations", "Analyze Data", 
                     "Natural Language Query", "Run Predictive Analytics", 
                     "Detect Anomalies", "Forecast Time Series", 
                     "Analyze Sentiment", "Generate Data Story", 
                     "Generate Report")
                )

                # Based on the selected feature, execute corresponding functionality
                if feature == "Clean Data":
                    st.subheader("Clean Data")
                    if st.button("Clean Data"):
                        self.data = self.cleaner.clean(self.data)
                        st.write(self.data.head())

                elif feature == "Generate Visualizations":
                    st.subheader("Generate Visualizations")
                    if st.button("Generate Visualizations"):
                        visualizations = self.visualizer.select_visualizations(self.data)
                        for viz in visualizations:
                            st.pyplot(viz)

                elif feature == "Analyze Data":
                    st.subheader("Analyze Data")
                    if st.button("Analyze Data"):
                        insights = self.analyzer.analyze(self.data)
                        st.write(insights)

                elif feature == "Natural Language Query":
                    st.subheader("Ask a Question About Your Data")
                    query = st.text_input("Ask a question about your data:")
                    if query:
                        result = self.nl_query_engine.process_query(query, self.data)
                        st.write(result)

                elif feature == "Run Predictive Analytics":
                    st.subheader("Run Predictive Analytics")
                    if st.button("Run Predictive Analytics"):
                        prediction = self.predictive_analytics.predict(self.data)
                        st.write(prediction)

                elif feature == "Detect Anomalies":
                    st.subheader("Detect Anomalies")
                    if st.button("Detect Anomalies"):
                        anomalies = self.anomaly_detector.detect(self.data)
                        st.write(anomalies)

                elif feature == "Forecast Time Series":
                    st.subheader("Forecast Time Series")
                    if st.button("Forecast Time Series"):
                        forecast = self.time_series_forecaster.forecast(self.data)
                        st.write(forecast)

                elif feature == "Analyze Sentiment":
                    st.subheader("Analyze Sentiment")
                    if st.button("Analyze Sentiment"):
                        sentiment = self.sentiment_analyzer.analyze(self.data)
                        st.write(sentiment)

                elif feature == "Generate Data Story":
                    st.subheader("Generate Data Story")
                    if st.button("Generate Data Story"):
                        story = self.data_storyteller.generate_story(self.data)
                        st.write(story)

                elif feature == "Generate Report":
                    st.subheader("Generate Report")
                    if st.button("Generate Report"):
                        report = self.report_generator.generate(self.data)
                        st.download_button(
                            label="Download Report",
                            data=report,
                            file_name="data_report.txt",
                            mime="text/plain"
                        )

if __name__ == "__main__":
    app = DataAutomationApp()
    app.run()