enzograndino commited on
Commit
1f0604f
·
verified ·
1 Parent(s): 40aeac6

Upload 2 files

Browse files
Files changed (3) hide show
  1. .gitattributes +1 -0
  2. airbnb_data (2).db +3 -0
  3. app.py +84 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ airbnb_data[[:space:]](2).db filter=lfs diff=lfs merge=lfs -text
airbnb_data (2).db ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9721d3a1c165e332bb8220fdd7d0f72fde3e9fb8d208e6eca17328d2f6e2a2b8
3
+ size 2510848
app.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import sqlite3
4
+ import numpy as np
5
+
6
+ # Configuração da página
7
+ st.set_page_config(layout="wide", page_title="Dashboard Airbnb")
8
+
9
+ st.title("📍 Mapa de Imóveis Airbnb")
10
+ st.write("Visualização interativa da localização dos imóveis listados.")
11
+
12
+ # Função para carregar os dados
13
+ @st.cache_data
14
+ def load_data():
15
+ # Conecta ao banco de dados (certifique-se de que o nome do arquivo está correto)
16
+ db_path = 'airbnb_data (2).db'
17
+ conn = sqlite3.connect(db_path)
18
+
19
+ # Pega o nome da coluna "estranha" que contém todos os cabeçalhos juntos
20
+ try:
21
+ # Descobre o nome da coluna única
22
+ cursor = conn.cursor()
23
+ cursor.execute("PRAGMA table_info(listings)")
24
+ col_info = cursor.fetchall()
25
+ raw_header = col_info[0][1] # O nome da coluna é o cabeçalho CSV
26
+
27
+ # Lê os dados brutos
28
+ df_raw = pd.read_sql(f'SELECT "{raw_header}" FROM listings', conn)
29
+ conn.close()
30
+
31
+ # Tenta processar os dados (separar o texto por ponto e vírgula)
32
+ # Nota: O arquivo atual parece ter um desalinhamento (85 cabeçalhos vs 30 valores)
33
+ # O código abaixo tenta extrair, mas se falhar, usaremos dados de exemplo.
34
+
35
+ # Lista de colunas baseada no cabeçalho
36
+ columns = raw_header.split(';')
37
+
38
+ # Separa a coluna única em várias
39
+ df_split = df_raw.iloc[:, 0].str.split(';', expand=True)
40
+
41
+ # Se o número de colunas extraídas for igual ao cabeçalho, ajustamos os nomes
42
+ if df_split.shape[1] == len(columns):
43
+ df_split.columns = columns
44
+
45
+ # Converte latitude e longitude para números
46
+ df_split['latitude'] = pd.to_numeric(df_split['latitude'], errors='coerce')
47
+ df_split['longitude'] = pd.to_numeric(df_split['longitude'], errors='coerce')
48
+
49
+ # Filtra apenas linhas com coordenadas válidas
50
+ df_final = df_split.dropna(subset=['latitude', 'longitude'])
51
+ return df_final
52
+ else:
53
+ st.warning(f"⚠️ Aviso: O banco de dados possui um desalinhamento. Cabeçalhos: {len(columns)}, Dados: {df_split.shape[1]}. Gerando dados de exemplo para visualização.")
54
+ return None
55
+
56
+ except Exception as e:
57
+ st.error(f"Erro ao ler o banco de dados: {e}")
58
+ return None
59
+
60
+ # Carrega os dados
61
+ df = load_data()
62
+
63
+ # Lógica de Exibição do Mapa
64
+ if df is not None and not df.empty:
65
+ st.success(f"Carregados {len(df)} imóveis reais.")
66
+ st.map(df[['latitude', 'longitude']])
67
+ else:
68
+ # GERAÇÃO DE DADOS FICTÍCIOS (FALLBACK)
69
+ # Isso serve para você ver o mapa funcionando mesmo com o banco de dados corrompido
70
+ st.info("🔍 Usando dados gerados aleatoriamente (Rio de Janeiro/SP) para demonstração.")
71
+
72
+ # Gera 100 pontos aleatórios próximos ao Rio de Janeiro e São Paulo
73
+ lat_rj = -22.9068 + np.random.randn(50) * 0.05
74
+ lon_rj = -43.1729 + np.random.randn(50) * 0.05
75
+
76
+ lat_sp = -23.5505 + np.random.randn(50) * 0.05
77
+ lon_sp = -46.6333 + np.random.randn(50) * 0.05
78
+
79
+ df_mock = pd.DataFrame({
80
+ 'latitude': np.concatenate([lat_rj, lat_sp]),
81
+ 'longitude': np.concatenate([lon_rj, lon_sp])
82
+ })
83
+
84
+ st.map(df_mock)