emanoelopes commited on
Commit
8b2e2e4
·
1 Parent(s): e59a820

Fix: Use pickles from Git LFS instead of CSV files for Hugging Face Space

Browse files
webapp/pages/1_UCI.py CHANGED
@@ -22,35 +22,54 @@ st.divider()
22
  O UCI Machine Learning Repository é uma fonte valiosa de conjuntos de dados para a comunidade de aprendizado de máquina, promovendo a pesquisa e o avanço na área de ciência de dados.
23
  """
24
 
25
- datasets_uci_path = Path(__file__).parent.parents[1] / 'datasets' / 'uci_data'
26
- #st.write(f"Path dos datasets: {datasets_uci_path}")
27
-
28
- # Português
29
- por_path = os.path.join(datasets_uci_path, 'student-por.csv')
30
- por = pd.read_csv(por_path, sep=';')
31
- # Matemática
32
- mat_path = os.path.join(datasets_uci_path, 'student-mat.csv')
33
- mat = pd.read_csv(mat_path, sep=';')
34
-
35
- # Adicionando coluna com o conjunto de dados de origem
36
- mat['origem'] = 'mat'
37
- por['origem'] = 'por'
38
-
39
- # Concatenando os dataframes
40
-
41
  @st.cache_data(ttl=3600) # Cache por 1 hora
42
- def concat():
43
- df = pd.concat([mat, por])
44
- return df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
- df = concat()
47
 
48
  st.session_state['df_uci'] = df
49
- # Transformando valores e tipos de dados
50
- df['traveltime'] = df['traveltime'].map({1: '<15m', 2: '15-30m', 3: '30-1h', 4: '>1h'}).astype(str)
51
- df['studytime'] = df['studytime'].map({1: '<2h', 2: '2-5h', 3: '5-10h', 4: '>10h'}).astype(str)
52
- df[['Medu','Fedu','famrel','goout','Dalc','Walc','health']] = \
53
- df[['Medu','Fedu','famrel','goout','Dalc','Walc','health']].astype('object')
 
 
 
 
 
 
 
54
 
55
  st.markdown("## Explorando os valores numéricos")
56
  numeric_df = df.select_dtypes('number')
 
22
  O UCI Machine Learning Repository é uma fonte valiosa de conjuntos de dados para a comunidade de aprendizado de máquina, promovendo a pesquisa e o avanço na área de ciência de dados.
23
  """
24
 
25
+ # Tentar carregar dos pickles primeiro ( estão no Git LFS)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  @st.cache_data(ttl=3600) # Cache por 1 hora
27
+ def carregar_dados_uci():
28
+ """Carrega dados UCI, tentando primeiro dos pickles, depois dos CSVs"""
29
+ from src.carregar_dados import carregar_uci_dados, carregar_dados_uci_raw
30
+
31
+ # Tentar carregar do pickle primeiro
32
+ try:
33
+ df = carregar_uci_dados()
34
+ if df is not None and not df.empty:
35
+ return df
36
+ except Exception as e:
37
+ st.warning(f"Não foi possível carregar do pickle: {e}")
38
+
39
+ # Fallback: tentar carregar dos CSVs
40
+ try:
41
+ df = carregar_dados_uci_raw()
42
+ return df
43
+ except FileNotFoundError as e:
44
+ st.error(f"""
45
+ **Erro ao carregar dados UCI:**
46
+
47
+ Os arquivos de dados não foram encontrados. Verifique se:
48
+ 1. Os arquivos pickle (`uci_dataframe.pkl`) estão no repositório
49
+ 2. Os arquivos CSV estão em `datasets/uci_data/`
50
+
51
+ Erro: {e}
52
+ """)
53
+ st.stop()
54
+ except Exception as e:
55
+ st.error(f"Erro inesperado ao carregar dados: {e}")
56
+ st.stop()
57
 
58
+ df = carregar_dados_uci()
59
 
60
  st.session_state['df_uci'] = df
61
+
62
+ # Transformando valores e tipos de dados (apenas se ainda não foram transformados)
63
+ # O pickle vem processado, mas os CSVs precisam ser transformados
64
+ if 'traveltime' in df.columns and df['traveltime'].dtype in ['int64', 'int32']:
65
+ df['traveltime'] = df['traveltime'].map({1: '<15m', 2: '15-30m', 3: '30-1h', 4: '>1h'}).astype(str)
66
+ if 'studytime' in df.columns and df['studytime'].dtype in ['int64', 'int32']:
67
+ df['studytime'] = df['studytime'].map({1: '<2h', 2: '2-5h', 3: '5-10h', 4: '>10h'}).astype(str)
68
+ if all(col in df.columns for col in ['Medu','Fedu','famrel','goout','Dalc','Walc','health']):
69
+ # Aplicar apenas se ainda não são object
70
+ for col in ['Medu','Fedu','famrel','goout','Dalc','Walc','health']:
71
+ if df[col].dtype not in ['object', 'string']:
72
+ df[col] = df[col].astype('object')
73
 
74
  st.markdown("## Explorando os valores numéricos")
75
  numeric_df = df.select_dtypes('number')
webapp/pages/2_OULAD.py CHANGED
@@ -20,29 +20,62 @@ st.set_page_config(
20
  #st.markdown('# Informações Básicas dos Dados do OULAD')
21
  #st.divider()
22
 
23
- datasets_oulad_path = Path(__file__).parent.parents[1] / 'datasets' / 'oulad_data'
24
- #st.write(f"Path dos datasets: {datasets_oulad_path}")
25
-
26
- dataframes_oulad = {}
27
-
28
- for filename in os.listdir(datasets_oulad_path):
29
- if filename.endswith('.csv'):
30
- file_path = os.path.join(datasets_oulad_path, filename)
31
- df_name = os.path.splitext(filename)[0] # Nome do dataframe será o nome do arquivo sem a extensão
32
- try:
33
- dataframes_oulad[df_name] = pd.read_csv(file_path, sep=',', encoding='ISO-8859-1')
34
- print(f"Arquivo '{filename}' carregado com sucesso como dataframe '{df_name}'.")
35
- except Exception as e:
36
- print(f"Erro ao carregar o arquivo '{filename}': {e}")
37
-
38
-
39
- df_assessments = dataframes_oulad['assessments'].head(10_000)
40
- df_courses = dataframes_oulad['courses'].head(10_000)
41
- df_vle = dataframes_oulad['vle'].head(10_000)
42
- df_studentinfo = dataframes_oulad['studentInfo'].head(10_000)
43
- df_studentregistration = dataframes_oulad['studentRegistration'].head(10_000)
44
- df_studentassessment = dataframes_oulad['studentAssessment'].head(10_000)
45
- df_studentvle = dataframes_oulad['studentVle'].head(10_000)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
  #function to display basic info for a given dataframe
48
  def show_basic_info(df):
 
20
  #st.markdown('# Informações Básicas dos Dados do OULAD')
21
  #st.divider()
22
 
23
+ # Tentar carregar dos pickles primeiro ( estão no Git LFS)
24
+ @st.cache_data(ttl=3600) # Cache por 1 hora
25
+ def carregar_dados_oulad():
26
+ """Carrega dados OULAD, tentando primeiro dos pickles, depois dos CSVs"""
27
+ from src.carregar_dados import carregar_oulad_dados, carregar_dados_oulad_raw
28
+
29
+ # Tentar carregar do pickle primeiro
30
+ try:
31
+ df = carregar_oulad_dados()
32
+ if df is not None and not df.empty:
33
+ # Se carregou do pickle, retornar como dict para compatibilidade
34
+ return {'oulad_processed': df}
35
+ except Exception as e:
36
+ st.warning(f"Não foi possível carregar do pickle: {e}")
37
+
38
+ # Fallback: tentar carregar dos CSVs
39
+ try:
40
+ dataframes_oulad = carregar_dados_oulad_raw()
41
+ return dataframes_oulad
42
+ except FileNotFoundError as e:
43
+ st.error(f"""
44
+ **Erro ao carregar dados OULAD:**
45
+
46
+ Os arquivos de dados não foram encontrados. Verifique se:
47
+ 1. Os arquivos pickle (`oulad_data.pkl` ou `oulad_dataframe.pkl`) estão no repositório
48
+ 2. Os arquivos CSV estão em `datasets/oulad_data/`
49
+
50
+ Erro: {e}
51
+ """)
52
+ st.stop()
53
+ except Exception as e:
54
+ st.error(f"Erro inesperado ao carregar dados: {e}")
55
+ st.stop()
56
+
57
+ dataframes_oulad = carregar_dados_oulad()
58
+
59
+ # Se carregou do pickle processado, criar dataframes simulados para compatibilidade
60
+ if 'oulad_processed' in dataframes_oulad:
61
+ df_processed = dataframes_oulad['oulad_processed']
62
+ # Criar dataframes vazios ou usar o processado conforme necessário
63
+ df_assessments = df_processed.head(10_000) if 'assessments' in df_processed.columns else pd.DataFrame()
64
+ df_courses = df_processed.head(10_000) if 'courses' in df_processed.columns else pd.DataFrame()
65
+ df_vle = df_processed.head(10_000) if 'vle' in df_processed.columns else pd.DataFrame()
66
+ df_studentinfo = df_processed.head(10_000) if 'studentInfo' in df_processed.columns else pd.DataFrame()
67
+ df_studentregistration = df_processed.head(10_000) if 'studentRegistration' in df_processed.columns else pd.DataFrame()
68
+ df_studentassessment = df_processed.head(10_000) if 'studentAssessment' in df_processed.columns else pd.DataFrame()
69
+ df_studentvle = df_processed.head(10_000) if 'studentVle' in df_processed.columns else pd.DataFrame()
70
+ else:
71
+ # Carregou dos CSVs originais
72
+ df_assessments = dataframes_oulad.get('assessments', pd.DataFrame()).head(10_000)
73
+ df_courses = dataframes_oulad.get('courses', pd.DataFrame()).head(10_000)
74
+ df_vle = dataframes_oulad.get('vle', pd.DataFrame()).head(10_000)
75
+ df_studentinfo = dataframes_oulad.get('studentInfo', pd.DataFrame()).head(10_000)
76
+ df_studentregistration = dataframes_oulad.get('studentRegistration', pd.DataFrame()).head(10_000)
77
+ df_studentassessment = dataframes_oulad.get('studentAssessment', pd.DataFrame()).head(10_000)
78
+ df_studentvle = dataframes_oulad.get('studentVle', pd.DataFrame()).head(10_000)
79
 
80
  #function to display basic info for a given dataframe
81
  def show_basic_info(df):
webapp/src/carregar_dados.py CHANGED
@@ -7,11 +7,17 @@ import os
7
  def carregar_uci_dados(pickle_path: str = "../uci_dataframe.pkl") -> pd.DataFrame:
8
  """Carrega dados UCI processados do arquivo pickle"""
9
  # Tentar diferentes caminhos para o arquivo pickle
 
10
  possible_paths = [
11
  pickle_path,
12
  f"../{pickle_path}",
13
  f"../../{pickle_path}",
14
- Path(__file__).parent.parents[1] / "uci_dataframe.pkl"
 
 
 
 
 
15
  ]
16
 
17
  df = None
@@ -77,14 +83,35 @@ def carregar_oulad_dados(pickle_path: str = "../oulad_data.pkl") -> pd.DataFrame
77
 
78
  def carregar_dados_uci_raw():
79
  """Carrega dados UCI brutos dos arquivos CSV"""
80
- datasets_path = Path(__file__).parent.parents[1] / 'datasets' / 'uci_data'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
  # Português
83
- por_path = os.path.join(datasets_path, 'student-por.csv')
 
 
84
  por = pd.read_csv(por_path, sep=';')
85
 
86
  # Matemática
87
- mat_path = os.path.join(datasets_path, 'student-mat.csv')
 
 
88
  mat = pd.read_csv(mat_path, sep=';')
89
 
90
  # Adicionando coluna com o conjunto de dados de origem
 
7
  def carregar_uci_dados(pickle_path: str = "../uci_dataframe.pkl") -> pd.DataFrame:
8
  """Carrega dados UCI processados do arquivo pickle"""
9
  # Tentar diferentes caminhos para o arquivo pickle
10
+ base_path = Path(__file__).parent.parents[1]
11
  possible_paths = [
12
  pickle_path,
13
  f"../{pickle_path}",
14
  f"../../{pickle_path}",
15
+ base_path / "uci_dataframe.pkl",
16
+ base_path / "uci.pkl", # Nome alternativo
17
+ Path("/app/uci_dataframe.pkl"), # Hugging Face Space
18
+ Path("/app/uci.pkl"), # Hugging Face Space - nome alternativo
19
+ Path.cwd() / "uci_dataframe.pkl",
20
+ Path.cwd() / "uci.pkl",
21
  ]
22
 
23
  df = None
 
83
 
84
  def carregar_dados_uci_raw():
85
  """Carrega dados UCI brutos dos arquivos CSV"""
86
+ base_path = Path(__file__).parent.parents[1]
87
+ possible_paths = [
88
+ base_path / 'datasets' / 'uci_data',
89
+ Path.cwd() / 'datasets' / 'uci_data',
90
+ Path('/app/datasets/uci_data'), # Hugging Face Space
91
+ ]
92
+
93
+ datasets_path = None
94
+ for path in possible_paths:
95
+ if path.exists() and (path / 'student-por.csv').exists():
96
+ datasets_path = path
97
+ break
98
+
99
+ if datasets_path is None:
100
+ raise FileNotFoundError(
101
+ f"Diretório de datasets UCI não encontrado. Procurado em: {possible_paths}\n"
102
+ "Os arquivos CSV não estão disponíveis. Use os arquivos pickle em vez disso."
103
+ )
104
 
105
  # Português
106
+ por_path = datasets_path / 'student-por.csv'
107
+ if not por_path.exists():
108
+ raise FileNotFoundError(f"Arquivo não encontrado: {por_path}")
109
  por = pd.read_csv(por_path, sep=';')
110
 
111
  # Matemática
112
+ mat_path = datasets_path / 'student-mat.csv'
113
+ if not mat_path.exists():
114
+ raise FileNotFoundError(f"Arquivo não encontrado: {mat_path}")
115
  mat = pd.read_csv(mat_path, sep=';')
116
 
117
  # Adicionando coluna com o conjunto de dados de origem