trangngiosds
commited on
Commit
·
fadd436
1
Parent(s):
a0297e4
initial commit
Browse files- .gitignore +278 -0
- app.py +189 -0
- city-district-map.json +845 -0
- city-map.json +65 -0
- models/mm-text-no-price/assets.json +1 -0
- models/mm-text-no-price/config.yaml +163 -0
- models/mm-text-no-price/data_processors.pkl +3 -0
- models/mm-text-no-price/df_preprocessor.pkl +3 -0
- models/mm-text-no-price/hf_text/config.json +30 -0
- models/mm-text-no-price/hf_text/special_tokens_map.json +7 -0
- models/mm-text-no-price/hf_text/tokenizer.json +0 -0
- models/mm-text-no-price/hf_text/tokenizer_config.json +14 -0
- models/mm-text-no-price/hf_text/vocab.txt +0 -0
- models/mm-text-no-price/hparams.yaml +16 -0
- models/mm-text-no-price/model.ckpt +3 -0
- requirements.txt +9 -0
.gitignore
ADDED
@@ -0,0 +1,278 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Created by https://www.toptal.com/developers/gitignore/api/linux,macos,direnv,python,windows,jupyternotebooks,visualstudiocode
|
2 |
+
# Edit at https://www.toptal.com/developers/gitignore?templates=linux,macos,direnv,python,windows,jupyternotebooks,visualstudiocode
|
3 |
+
|
4 |
+
### direnv ###
|
5 |
+
.direnv
|
6 |
+
.envrc
|
7 |
+
|
8 |
+
### JupyterNotebooks ###
|
9 |
+
# gitignore template for Jupyter Notebooks
|
10 |
+
# website: http://jupyter.org/
|
11 |
+
|
12 |
+
.ipynb_checkpoints
|
13 |
+
*/.ipynb_checkpoints/*
|
14 |
+
|
15 |
+
# IPython
|
16 |
+
profile_default/
|
17 |
+
ipython_config.py
|
18 |
+
|
19 |
+
# Remove previous ipynb_checkpoints
|
20 |
+
# git rm -r .ipynb_checkpoints/
|
21 |
+
|
22 |
+
### Linux ###
|
23 |
+
*~
|
24 |
+
|
25 |
+
# temporary files which can be created if a process still has a handle open of a deleted file
|
26 |
+
.fuse_hidden*
|
27 |
+
|
28 |
+
# KDE directory preferences
|
29 |
+
.directory
|
30 |
+
|
31 |
+
# Linux trash folder which might appear on any partition or disk
|
32 |
+
.Trash-*
|
33 |
+
|
34 |
+
# .nfs files are created when an open file is removed but is still being accessed
|
35 |
+
.nfs*
|
36 |
+
|
37 |
+
### macOS ###
|
38 |
+
# General
|
39 |
+
.DS_Store
|
40 |
+
.AppleDouble
|
41 |
+
.LSOverride
|
42 |
+
|
43 |
+
# Icon must end with two \r
|
44 |
+
Icon
|
45 |
+
|
46 |
+
# Thumbnails
|
47 |
+
._*
|
48 |
+
|
49 |
+
# Files that might appear in the root of a volume
|
50 |
+
.DocumentRevisions-V100
|
51 |
+
.fseventsd
|
52 |
+
.Spotlight-V100
|
53 |
+
.TemporaryItems
|
54 |
+
.Trashes
|
55 |
+
.VolumeIcon.icns
|
56 |
+
.com.apple.timemachine.donotpresent
|
57 |
+
|
58 |
+
# Directories potentially created on remote AFP share
|
59 |
+
.AppleDB
|
60 |
+
.AppleDesktop
|
61 |
+
Network Trash Folder
|
62 |
+
Temporary Items
|
63 |
+
.apdisk
|
64 |
+
|
65 |
+
### macOS Patch ###
|
66 |
+
# iCloud generated files
|
67 |
+
*.icloud
|
68 |
+
|
69 |
+
### Python ###
|
70 |
+
# Byte-compiled / optimized / DLL files
|
71 |
+
__pycache__/
|
72 |
+
*.py[cod]
|
73 |
+
*$py.class
|
74 |
+
|
75 |
+
# C extensions
|
76 |
+
*.so
|
77 |
+
|
78 |
+
# Distribution / packaging
|
79 |
+
.Python
|
80 |
+
build/
|
81 |
+
develop-eggs/
|
82 |
+
dist/
|
83 |
+
downloads/
|
84 |
+
eggs/
|
85 |
+
.eggs/
|
86 |
+
lib/
|
87 |
+
lib64/
|
88 |
+
parts/
|
89 |
+
sdist/
|
90 |
+
var/
|
91 |
+
wheels/
|
92 |
+
share/python-wheels/
|
93 |
+
*.egg-info/
|
94 |
+
.installed.cfg
|
95 |
+
*.egg
|
96 |
+
MANIFEST
|
97 |
+
|
98 |
+
# PyInstaller
|
99 |
+
# Usually these files are written by a python script from a template
|
100 |
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
101 |
+
*.manifest
|
102 |
+
*.spec
|
103 |
+
|
104 |
+
# Installer logs
|
105 |
+
pip-log.txt
|
106 |
+
pip-delete-this-directory.txt
|
107 |
+
|
108 |
+
# Unit test / coverage reports
|
109 |
+
htmlcov/
|
110 |
+
.tox/
|
111 |
+
.nox/
|
112 |
+
.coverage
|
113 |
+
.coverage.*
|
114 |
+
.cache
|
115 |
+
nosetests.xml
|
116 |
+
coverage.xml
|
117 |
+
*.cover
|
118 |
+
*.py,cover
|
119 |
+
.hypothesis/
|
120 |
+
.pytest_cache/
|
121 |
+
cover/
|
122 |
+
|
123 |
+
# Translations
|
124 |
+
*.mo
|
125 |
+
*.pot
|
126 |
+
|
127 |
+
# Django stuff:
|
128 |
+
*.log
|
129 |
+
local_settings.py
|
130 |
+
db.sqlite3
|
131 |
+
db.sqlite3-journal
|
132 |
+
|
133 |
+
# Flask stuff:
|
134 |
+
instance/
|
135 |
+
.webassets-cache
|
136 |
+
|
137 |
+
# Scrapy stuff:
|
138 |
+
.scrapy
|
139 |
+
|
140 |
+
# Sphinx documentation
|
141 |
+
docs/_build/
|
142 |
+
|
143 |
+
# PyBuilder
|
144 |
+
.pybuilder/
|
145 |
+
target/
|
146 |
+
|
147 |
+
# Jupyter Notebook
|
148 |
+
|
149 |
+
# IPython
|
150 |
+
|
151 |
+
# pyenv
|
152 |
+
# For a library or package, you might want to ignore these files since the code is
|
153 |
+
# intended to run in multiple environments; otherwise, check them in:
|
154 |
+
# .python-version
|
155 |
+
|
156 |
+
# pipenv
|
157 |
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
158 |
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
159 |
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
160 |
+
# install all needed dependencies.
|
161 |
+
#Pipfile.lock
|
162 |
+
|
163 |
+
# poetry
|
164 |
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
165 |
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
166 |
+
# commonly ignored for libraries.
|
167 |
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
168 |
+
#poetry.lock
|
169 |
+
|
170 |
+
# pdm
|
171 |
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
172 |
+
#pdm.lock
|
173 |
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
174 |
+
# in version control.
|
175 |
+
# https://pdm.fming.dev/#use-with-ide
|
176 |
+
.pdm.toml
|
177 |
+
|
178 |
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
179 |
+
__pypackages__/
|
180 |
+
|
181 |
+
# Celery stuff
|
182 |
+
celerybeat-schedule
|
183 |
+
celerybeat.pid
|
184 |
+
|
185 |
+
# SageMath parsed files
|
186 |
+
*.sage.py
|
187 |
+
|
188 |
+
# Environments
|
189 |
+
.env
|
190 |
+
.venv
|
191 |
+
env/
|
192 |
+
venv/
|
193 |
+
ENV/
|
194 |
+
env.bak/
|
195 |
+
venv.bak/
|
196 |
+
|
197 |
+
# Spyder project settings
|
198 |
+
.spyderproject
|
199 |
+
.spyproject
|
200 |
+
|
201 |
+
# Rope project settings
|
202 |
+
.ropeproject
|
203 |
+
|
204 |
+
# mkdocs documentation
|
205 |
+
/site
|
206 |
+
|
207 |
+
# mypy
|
208 |
+
.mypy_cache/
|
209 |
+
.dmypy.json
|
210 |
+
dmypy.json
|
211 |
+
|
212 |
+
# Pyre type checker
|
213 |
+
.pyre/
|
214 |
+
|
215 |
+
# pytype static type analyzer
|
216 |
+
.pytype/
|
217 |
+
|
218 |
+
# Cython debug symbols
|
219 |
+
cython_debug/
|
220 |
+
|
221 |
+
# PyCharm
|
222 |
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
223 |
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
224 |
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
225 |
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
226 |
+
#.idea/
|
227 |
+
|
228 |
+
### Python Patch ###
|
229 |
+
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
|
230 |
+
poetry.toml
|
231 |
+
|
232 |
+
# ruff
|
233 |
+
.ruff_cache/
|
234 |
+
|
235 |
+
# LSP config files
|
236 |
+
pyrightconfig.json
|
237 |
+
|
238 |
+
### VisualStudioCode ###
|
239 |
+
.vscode/
|
240 |
+
|
241 |
+
# Local History for Visual Studio Code
|
242 |
+
.history/
|
243 |
+
|
244 |
+
# Built Visual Studio Code Extensions
|
245 |
+
*.vsix
|
246 |
+
|
247 |
+
### VisualStudioCode Patch ###
|
248 |
+
# Ignore all local history of files
|
249 |
+
.history
|
250 |
+
.ionide
|
251 |
+
|
252 |
+
### Windows ###
|
253 |
+
# Windows thumbnail cache files
|
254 |
+
Thumbs.db
|
255 |
+
Thumbs.db:encryptable
|
256 |
+
ehthumbs.db
|
257 |
+
ehthumbs_vista.db
|
258 |
+
|
259 |
+
# Dump file
|
260 |
+
*.stackdump
|
261 |
+
|
262 |
+
# Folder config file
|
263 |
+
[Dd]esktop.ini
|
264 |
+
|
265 |
+
# Recycle Bin used on file shares
|
266 |
+
$RECYCLE.BIN/
|
267 |
+
|
268 |
+
# Windows Installer files
|
269 |
+
*.cab
|
270 |
+
*.msi
|
271 |
+
*.msix
|
272 |
+
*.msm
|
273 |
+
*.msp
|
274 |
+
|
275 |
+
# Windows shortcuts
|
276 |
+
*.lnk
|
277 |
+
|
278 |
+
# End of https://www.toptal.com/developers/gitignore/api/linux,macos,direnv,python,windows,jupyternotebooks,visualstudiocode
|
app.py
ADDED
@@ -0,0 +1,189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import json
|
3 |
+
from autogluon.multimodal import MultiModalPredictor
|
4 |
+
import pandas as pd
|
5 |
+
from geopy.geocoders import GoogleV3
|
6 |
+
import os
|
7 |
+
import tempfile
|
8 |
+
|
9 |
+
st.set_page_config(layout="wide")
|
10 |
+
|
11 |
+
if "price_text" not in st.session_state:
|
12 |
+
st.session_state.price_text = 0
|
13 |
+
|
14 |
+
|
15 |
+
@st.cache_resource
|
16 |
+
def load_geocoder():
|
17 |
+
return GoogleV3(api_key=os.environ.get("GOOGLE_MAP_API_KEY"))
|
18 |
+
|
19 |
+
|
20 |
+
geocoder = load_geocoder()
|
21 |
+
|
22 |
+
|
23 |
+
@st.cache_resource
|
24 |
+
def load_mm_text_no_price_model():
|
25 |
+
return MultiModalPredictor.load("models/mm-text-no-price/", verbosity=0)
|
26 |
+
|
27 |
+
|
28 |
+
mm_text_no_price_predictor = load_mm_text_no_price_model()
|
29 |
+
|
30 |
+
|
31 |
+
@st.cache_resource
|
32 |
+
def load_city_map():
|
33 |
+
return json.load(open("city-map.json"))
|
34 |
+
|
35 |
+
|
36 |
+
city_map = load_city_map()
|
37 |
+
|
38 |
+
|
39 |
+
@st.cache_resource
|
40 |
+
def load_city_district_map():
|
41 |
+
return json.load(open("city-district-map.json"))
|
42 |
+
|
43 |
+
|
44 |
+
city_district_map = load_city_district_map()
|
45 |
+
|
46 |
+
CERT_STATUS = pd.CategoricalDtype(
|
47 |
+
categories=["Không có", "hợp đồng", "sổ đỏ / sổ hồng"], ordered=False
|
48 |
+
)
|
49 |
+
DIRECTION = pd.CategoricalDtype(
|
50 |
+
categories=[
|
51 |
+
"Không có",
|
52 |
+
"Tây - Nam",
|
53 |
+
"Đông - Nam",
|
54 |
+
"Đông - Bắc",
|
55 |
+
"Tây - Bắc",
|
56 |
+
"Nam",
|
57 |
+
"Tây",
|
58 |
+
"Bắc",
|
59 |
+
"Đông",
|
60 |
+
],
|
61 |
+
ordered=False,
|
62 |
+
)
|
63 |
+
CITY = pd.CategoricalDtype(categories=city_map.keys(), ordered=False)
|
64 |
+
DISTRICT = pd.CategoricalDtype(
|
65 |
+
categories=sum([list(map(int, v.keys())) for v in city_district_map.values()], []),
|
66 |
+
ordered=False,
|
67 |
+
)
|
68 |
+
|
69 |
+
location_options = st.columns([1, 1, 2, 1, 1])
|
70 |
+
with location_options[0]:
|
71 |
+
city = st.selectbox(
|
72 |
+
"Choose city", options=city_map.items(), format_func=lambda x: x[1]
|
73 |
+
)
|
74 |
+
with location_options[1]:
|
75 |
+
district = st.selectbox(
|
76 |
+
"Choose district",
|
77 |
+
options=city_district_map[city[0]].items(),
|
78 |
+
format_func=lambda x: x[1],
|
79 |
+
)
|
80 |
+
with location_options[2]:
|
81 |
+
location = st.text_input("Enter precise location")
|
82 |
+
|
83 |
+
location = (location + ", " if location else "") + city[1] + ", " + district[1]
|
84 |
+
geocode_result = geocoder.geocode(query=location, region="vn", language="vi")
|
85 |
+
latitude = geocode_result.latitude
|
86 |
+
longitude = geocode_result.longitude
|
87 |
+
|
88 |
+
with location_options[3]:
|
89 |
+
latitude = st.number_input(
|
90 |
+
"Enter latitude", value=latitude, step=1e-8, format="%.7f"
|
91 |
+
)
|
92 |
+
with location_options[4]:
|
93 |
+
longitude = st.number_input(
|
94 |
+
"Enter longitude", value=longitude, step=1e-8, format="%.7f"
|
95 |
+
)
|
96 |
+
|
97 |
+
numerical_options = st.columns(6)
|
98 |
+
with numerical_options[0]:
|
99 |
+
area = st.number_input("Area (m2)", min_value=1.0)
|
100 |
+
with numerical_options[1]:
|
101 |
+
bedrooms = st.number_input("Number of bedrooms", min_value=1, value=1)
|
102 |
+
with numerical_options[2]:
|
103 |
+
bathrooms = st.number_input("Number of bathrooms", min_value=1, value=1)
|
104 |
+
with numerical_options[3]:
|
105 |
+
floors = st.number_input("Number of floors", min_value=1, value=1)
|
106 |
+
with numerical_options[4]:
|
107 |
+
front_width = st.number_input(
|
108 |
+
"Front width, leave 0 for N/A", min_value=0.0, value=0.0, step=0.1
|
109 |
+
)
|
110 |
+
with numerical_options[5]:
|
111 |
+
road_width = st.number_input(
|
112 |
+
"Road width, leave 0 for N/A", min_value=0.0, value=0.0, step=0.1
|
113 |
+
)
|
114 |
+
|
115 |
+
cat_time_columns = st.columns(4)
|
116 |
+
with cat_time_columns[0]:
|
117 |
+
timestamp = st.date_input("Date posted", format="DD/MM/YYYY")
|
118 |
+
with cat_time_columns[1]:
|
119 |
+
cert_status = st.selectbox("Certification status", options=CERT_STATUS.categories)
|
120 |
+
with cat_time_columns[2]:
|
121 |
+
direction = st.selectbox("Direction", options=DIRECTION.categories)
|
122 |
+
with cat_time_columns[3]:
|
123 |
+
balcony_direction = st.selectbox("Balcony direction", options=DIRECTION.categories)
|
124 |
+
|
125 |
+
description = st.text_area("Description")
|
126 |
+
title = description.split(".", maxsplit=1)[0]
|
127 |
+
|
128 |
+
uploaded_image = st.file_uploader("Upload an image")
|
129 |
+
image_tmp = None
|
130 |
+
if uploaded_image:
|
131 |
+
image_tmp = tempfile.NamedTemporaryFile(suffix=uploaded_image.name)
|
132 |
+
image_tmp.write(uploaded_image.read())
|
133 |
+
print(image_tmp.name)
|
134 |
+
|
135 |
+
df = pd.DataFrame(
|
136 |
+
[
|
137 |
+
{
|
138 |
+
"Title": title,
|
139 |
+
"Area": area,
|
140 |
+
"Location": location,
|
141 |
+
"Time stamp": timestamp,
|
142 |
+
"Certification status": cert_status,
|
143 |
+
"Direction": direction,
|
144 |
+
"Bedrooms": bedrooms,
|
145 |
+
"Bathrooms": bathrooms,
|
146 |
+
"Front width": front_width or float("nan"),
|
147 |
+
"Floor": floors,
|
148 |
+
"Description": description,
|
149 |
+
"Image URL": image_tmp.name if image_tmp else None,
|
150 |
+
"Road width": road_width or float("nan"),
|
151 |
+
"City_code": city[0],
|
152 |
+
"DistrictId": int(district[0]),
|
153 |
+
"Lattitude": latitude,
|
154 |
+
"Longitude": longitude,
|
155 |
+
"Balcony_Direction": balcony_direction,
|
156 |
+
}
|
157 |
+
]
|
158 |
+
).astype(
|
159 |
+
{
|
160 |
+
"Title": "str",
|
161 |
+
"Area": "float",
|
162 |
+
"Location": "str",
|
163 |
+
"Time stamp": "datetime64[ns]",
|
164 |
+
"Certification status": CERT_STATUS,
|
165 |
+
"Direction": DIRECTION,
|
166 |
+
"Bedrooms": "int",
|
167 |
+
"Bathrooms": "int",
|
168 |
+
"Front width": "float",
|
169 |
+
"Floor": "int",
|
170 |
+
"Description": "str",
|
171 |
+
"Image URL": "str",
|
172 |
+
"Road width": "float",
|
173 |
+
"City_code": CITY,
|
174 |
+
"DistrictId": DISTRICT,
|
175 |
+
"Lattitude": "float",
|
176 |
+
"Longitude": "float",
|
177 |
+
"Balcony_Direction": DIRECTION,
|
178 |
+
}
|
179 |
+
)
|
180 |
+
|
181 |
+
if st.button("Get estimated price with text"):
|
182 |
+
st.session_state.price_text = mm_text_no_price_predictor.predict(
|
183 |
+
df, as_pandas=False
|
184 |
+
).item()
|
185 |
+
st.text(
|
186 |
+
"Estimated price: {0:,} VND".format(int(st.session_state.price_text * 1e6))
|
187 |
+
if st.session_state.price_text
|
188 |
+
else "No price estimated."
|
189 |
+
)
|
city-district-map.json
ADDED
@@ -0,0 +1,845 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"AG": {
|
3 |
+
"85": "An Phú",
|
4 |
+
"86": "Châu Phú",
|
5 |
+
"87": "Châu Thành",
|
6 |
+
"88": "Chợ Mới",
|
7 |
+
"89": "Tri Tôn",
|
8 |
+
"90": "Phú Tân",
|
9 |
+
"91": "Tân Châu",
|
10 |
+
"92": "Thoại Sơn",
|
11 |
+
"93": "Tịnh Biên",
|
12 |
+
"94": "Long Xuyên",
|
13 |
+
"95": "Châu Đốc"
|
14 |
+
},
|
15 |
+
"BD": {
|
16 |
+
"156": "Bến Cát",
|
17 |
+
"157": "Dầu Tiếng",
|
18 |
+
"158": "Dĩ An",
|
19 |
+
"159": "Phú Giáo",
|
20 |
+
"160": "Tân Uyên",
|
21 |
+
"161": "Thuận An",
|
22 |
+
"163": "Thủ Dầu Một",
|
23 |
+
"716": "Bàu Bàng",
|
24 |
+
"730": "Bắc Tân Uyên"
|
25 |
+
},
|
26 |
+
"BDD": {
|
27 |
+
"145": "An Lão",
|
28 |
+
"146": "An Nhơn",
|
29 |
+
"147": "Hoài Ân",
|
30 |
+
"148": "Hoài Nhơn",
|
31 |
+
"149": "Phù Cát",
|
32 |
+
"150": "Phù Mỹ",
|
33 |
+
"151": "Tây Sơn",
|
34 |
+
"152": "Tuy Phước",
|
35 |
+
"153": "Vân Canh",
|
36 |
+
"154": "Vĩnh Thạnh",
|
37 |
+
"155": "Quy Nhơn"
|
38 |
+
},
|
39 |
+
"BG": {
|
40 |
+
"104": "Hiệp Hòa",
|
41 |
+
"105": "Lạng Giang",
|
42 |
+
"106": "Lục Nam",
|
43 |
+
"107": "Lục Ngạn",
|
44 |
+
"108": "Sơn Động",
|
45 |
+
"109": "Tân Yên",
|
46 |
+
"110": "Việt Yên",
|
47 |
+
"111": "Yên Dũng",
|
48 |
+
"112": "Yên Thế",
|
49 |
+
"113": "Bắc Giang"
|
50 |
+
},
|
51 |
+
"BK": {
|
52 |
+
"114": "Ba Bể",
|
53 |
+
"115": "Bạch Thông",
|
54 |
+
"116": "Chợ Đồn",
|
55 |
+
"117": "Chợ Mới",
|
56 |
+
"118": "Na Rì",
|
57 |
+
"119": "Ngân Sơn",
|
58 |
+
"120": "Pác Nặm",
|
59 |
+
"121": "Bắc Kạn"
|
60 |
+
},
|
61 |
+
"BL": {
|
62 |
+
"122": "Đông Hải",
|
63 |
+
"123": "Giá Rai",
|
64 |
+
"124": "Hòa Bình",
|
65 |
+
"125": "Hồng Dân",
|
66 |
+
"126": "Phước Long",
|
67 |
+
"127": "Vĩnh Lợi",
|
68 |
+
"128": "Bạc Liêu"
|
69 |
+
},
|
70 |
+
"BN": {
|
71 |
+
"129": "Gia Bình",
|
72 |
+
"130": "Lương Tài",
|
73 |
+
"131": "Quế Võ",
|
74 |
+
"132": "Thuận Thành",
|
75 |
+
"133": "Tiên Du",
|
76 |
+
"134": "Từ Sơn",
|
77 |
+
"135": "Yên Phong",
|
78 |
+
"136": "Bắc Ninh"
|
79 |
+
},
|
80 |
+
"BP": {
|
81 |
+
"164": "Bình Long",
|
82 |
+
"165": "Bù Đăng",
|
83 |
+
"166": "Bù Đốp",
|
84 |
+
"167": "Chơn Thành",
|
85 |
+
"168": "Đồng Phú",
|
86 |
+
"169": "Lộc Ninh",
|
87 |
+
"170": "Phước Long",
|
88 |
+
"171": "Đồng Xoài",
|
89 |
+
"698": "Hớn Quản",
|
90 |
+
"699": "Bù Gia Mập",
|
91 |
+
"728": "Phú Riềng"
|
92 |
+
},
|
93 |
+
"BTH": {
|
94 |
+
"172": "Bắc Bình",
|
95 |
+
"173": "Đảo Phú Quý",
|
96 |
+
"174": "Đức Linh",
|
97 |
+
"175": "Hàm Tân",
|
98 |
+
"176": "Hàm Thuận Bắc",
|
99 |
+
"177": "Hàm Thuận Nam",
|
100 |
+
"178": "Tánh Linh",
|
101 |
+
"179": "Tuy Phong",
|
102 |
+
"181": "Phan Thiết",
|
103 |
+
"182": "La Gi"
|
104 |
+
},
|
105 |
+
"BTR": {
|
106 |
+
"137": "Ba Tri",
|
107 |
+
"138": "Bình Đại",
|
108 |
+
"139": "Châu Thành",
|
109 |
+
"140": "Chợ Lách",
|
110 |
+
"141": "Giồng Trôm",
|
111 |
+
"143": "Thạnh Phú",
|
112 |
+
"144": "Bến Tre",
|
113 |
+
"705": "Mỏ Cày Bắc",
|
114 |
+
"706": "Mỏ Cày Nam"
|
115 |
+
},
|
116 |
+
"CB": {
|
117 |
+
"192": "Bảo Lạc",
|
118 |
+
"193": "Bảo Lâm",
|
119 |
+
"194": "Hạ Lang",
|
120 |
+
"195": "Hà Quảng",
|
121 |
+
"196": "Hòa An",
|
122 |
+
"197": "Nguyên Bình",
|
123 |
+
"198": "Phục Hòa",
|
124 |
+
"199": "Quảng Uyên",
|
125 |
+
"200": "Thạch An",
|
126 |
+
"201": "Thông Nông",
|
127 |
+
"202": "Trà Lĩnh",
|
128 |
+
"203": "Trùng Khánh",
|
129 |
+
"204": "Cao Bằng"
|
130 |
+
},
|
131 |
+
"CM": {
|
132 |
+
"183": "Cái Nước",
|
133 |
+
"184": "Đầm Dơi",
|
134 |
+
"185": "Năm Căn",
|
135 |
+
"186": "Ngọc Hiển",
|
136 |
+
"187": "Phú Tân",
|
137 |
+
"188": "Thới Bình",
|
138 |
+
"189": "Trần Văn Thời",
|
139 |
+
"190": "U Minh",
|
140 |
+
"191": "Cà Mau"
|
141 |
+
},
|
142 |
+
"CN": {
|
143 |
+
"700": "Không xác định"
|
144 |
+
},
|
145 |
+
"CT": {
|
146 |
+
"77": "Cờ Đỏ",
|
147 |
+
"78": "Phong Điền",
|
148 |
+
"79": "Thốt Nốt",
|
149 |
+
"80": "Vĩnh Thạnh",
|
150 |
+
"81": "Bình Thủy",
|
151 |
+
"82": "Cái Răng",
|
152 |
+
"83": "Ninh Kiều",
|
153 |
+
"84": "Ô Môn",
|
154 |
+
"704": " Thới Lai"
|
155 |
+
},
|
156 |
+
"DDB": {
|
157 |
+
"227": "Điện Biên",
|
158 |
+
"228": "Điện Biên Đông",
|
159 |
+
"229": "Mường Ảng",
|
160 |
+
"230": "Mường Chà",
|
161 |
+
"231": "Mường Nhé",
|
162 |
+
"232": "Tủa Chùa",
|
163 |
+
"233": "Tuần Giáo",
|
164 |
+
"234": "Điện Biên Phủ",
|
165 |
+
"235": "Mường Lay",
|
166 |
+
"711": "Nậm Pồ"
|
167 |
+
},
|
168 |
+
"DDL": {
|
169 |
+
"205": "Buôn Đôn",
|
170 |
+
"206": "Cư Kuin",
|
171 |
+
"207": "Cư M'gar",
|
172 |
+
"208": "Ea H'Leo",
|
173 |
+
"209": "Ea Kar",
|
174 |
+
"210": "Ea Súp",
|
175 |
+
"211": "Krông Ana",
|
176 |
+
"212": "Krông Bông",
|
177 |
+
"213": "Krông Buk",
|
178 |
+
"214": "Krông Năng",
|
179 |
+
"215": "Krông Pắc",
|
180 |
+
"216": " Lăk",
|
181 |
+
"217": " M'Đrăk",
|
182 |
+
"218": "Buôn Ma Thuột",
|
183 |
+
"697": "Buôn Hồ"
|
184 |
+
},
|
185 |
+
"DDN": {
|
186 |
+
"45": "Cẩm Lệ",
|
187 |
+
"46": "Hải Châu",
|
188 |
+
"47": "Liên Chiểu",
|
189 |
+
"48": "Ngũ Hành Sơn",
|
190 |
+
"49": "Sơn Trà",
|
191 |
+
"50": "Thanh Khê",
|
192 |
+
"51": "Hòa Vang",
|
193 |
+
"52": "Hoàng Sa"
|
194 |
+
},
|
195 |
+
"DDT": {
|
196 |
+
"247": "Huyện Cao Lãnh",
|
197 |
+
"248": "Châu Thành",
|
198 |
+
"249": "Hồng Ngự",
|
199 |
+
"250": "Lai Vung",
|
200 |
+
"251": "Lấp Vò",
|
201 |
+
"252": "Tam Nông",
|
202 |
+
"253": "Tân Hồng",
|
203 |
+
"254": "Thanh Bình",
|
204 |
+
"255": "Tháp Mười",
|
205 |
+
"257": "Sa Đéc",
|
206 |
+
"721": "Cao Lãnh",
|
207 |
+
"722": "Huyện Hồng Ngự"
|
208 |
+
},
|
209 |
+
"DNA": {
|
210 |
+
"236": "Cẩm Mỹ",
|
211 |
+
"237": "Định Quán",
|
212 |
+
"238": "Long Thành",
|
213 |
+
"239": "Nhơn Trạch",
|
214 |
+
"240": "Tân Phú",
|
215 |
+
"241": "Thống Nhất",
|
216 |
+
"242": "Trảng Bom",
|
217 |
+
"243": "Vĩnh Cửu",
|
218 |
+
"244": "Xuân Lộc",
|
219 |
+
"245": "Biên Hòa",
|
220 |
+
"246": "Long Khánh"
|
221 |
+
},
|
222 |
+
"DNO": {
|
223 |
+
"219": "Cư Jút",
|
224 |
+
"220": "Dăk GLong",
|
225 |
+
"221": "Dăk Mil",
|
226 |
+
"222": "Dăk R'Lấp",
|
227 |
+
"223": "Dăk Song",
|
228 |
+
"224": "Krông Nô",
|
229 |
+
"225": "Tuy Đức",
|
230 |
+
"226": "Gia Nghĩa"
|
231 |
+
},
|
232 |
+
"GL": {
|
233 |
+
"258": "AYun Pa",
|
234 |
+
"259": "Chư Păh",
|
235 |
+
"260": "Chư Sê",
|
236 |
+
"261": " ChưPRông",
|
237 |
+
"262": "Đăk Đoa",
|
238 |
+
"263": "Đăk Pơ",
|
239 |
+
"264": "Đức Cơ",
|
240 |
+
"265": "Ia Grai",
|
241 |
+
"266": "Ia Pa",
|
242 |
+
"267": " KBang",
|
243 |
+
"268": "Kông Chro",
|
244 |
+
"269": "Krông Pa",
|
245 |
+
"270": "Mang Yang",
|
246 |
+
"271": "Phú Thiện",
|
247 |
+
"272": "Plei Ku",
|
248 |
+
"273": "An Khê",
|
249 |
+
"710": "Chư Pưh"
|
250 |
+
},
|
251 |
+
"HB": {
|
252 |
+
"322": "Cao Phong",
|
253 |
+
"323": "Đà Bắc",
|
254 |
+
"324": "Kim Bôi",
|
255 |
+
"326": "Lạc Sơn",
|
256 |
+
"327": "Lạc Thủy",
|
257 |
+
"328": "Lương Sơn",
|
258 |
+
"329": "Mai Châu",
|
259 |
+
"330": "Tân Lạc",
|
260 |
+
"331": "Yên Thủy",
|
261 |
+
"332": "Hòa Bình"
|
262 |
+
},
|
263 |
+
"HD": {
|
264 |
+
"303": "Bình Giang",
|
265 |
+
"304": "Cẩm Giàng",
|
266 |
+
"305": "Chí Linh",
|
267 |
+
"306": "Gia Lộc",
|
268 |
+
"307": "Kim Thành",
|
269 |
+
"308": "Kinh Môn",
|
270 |
+
"309": "Nam Sách",
|
271 |
+
"310": "Ninh Giang",
|
272 |
+
"311": "Thanh Hà",
|
273 |
+
"312": "Thanh Miện",
|
274 |
+
"313": "Tứ Kỳ",
|
275 |
+
"314": "Hải Dương"
|
276 |
+
},
|
277 |
+
"HG": {
|
278 |
+
"274": "Bắc Mê",
|
279 |
+
"275": "Bắc Quang",
|
280 |
+
"276": "Đồng Văn",
|
281 |
+
"277": "Hoàng Su Phì",
|
282 |
+
"278": "Mèo Vạc",
|
283 |
+
"279": "Quản Bạ",
|
284 |
+
"280": "Quang Bình",
|
285 |
+
"281": "Vị Xuyên",
|
286 |
+
"282": "Xín Mần",
|
287 |
+
"283": "Yên Minh",
|
288 |
+
"284": "Hà Giang"
|
289 |
+
},
|
290 |
+
"HGI": {
|
291 |
+
"315": "Châu Thành",
|
292 |
+
"316": "Châu Thành A",
|
293 |
+
"317": "Long Mỹ",
|
294 |
+
"318": "Phụng Hiệp",
|
295 |
+
"319": "Vị Thủy",
|
296 |
+
"320": "Ngã Bảy",
|
297 |
+
"321": "Vị Thanh",
|
298 |
+
"731": "Thị xã Long Mỹ"
|
299 |
+
},
|
300 |
+
"HN": {
|
301 |
+
"1": "Hoàn Kiếm",
|
302 |
+
"2": "Ba Đình",
|
303 |
+
"3": "Đống Đa",
|
304 |
+
"4": "Hai Bà Trưng",
|
305 |
+
"5": "Thanh Xuân",
|
306 |
+
"6": "Tây Hồ",
|
307 |
+
"7": "Cầu Giấy",
|
308 |
+
"8": "Hoàng Mai",
|
309 |
+
"9": "Long Biên",
|
310 |
+
"10": "Đông Anh",
|
311 |
+
"11": "Gia Lâm",
|
312 |
+
"12": "Sóc Sơn",
|
313 |
+
"13": "Thanh Trì",
|
314 |
+
"14": "Nam Từ Liêm",
|
315 |
+
"15": "Hà Đông",
|
316 |
+
"16": "Sơn Tây",
|
317 |
+
"17": "Mê Linh",
|
318 |
+
"18": "Ba Vì",
|
319 |
+
"19": "Phúc Thọ",
|
320 |
+
"20": "Đan Phượng",
|
321 |
+
"21": "Hoài Đức",
|
322 |
+
"22": "Quốc Oai",
|
323 |
+
"23": "Thạch Thất",
|
324 |
+
"24": "Chương Mỹ",
|
325 |
+
"25": "Thanh Oai",
|
326 |
+
"26": "Thường Tín",
|
327 |
+
"27": "Phú Xuyên",
|
328 |
+
"28": "Ứng Hòa",
|
329 |
+
"29": "Mỹ Đức",
|
330 |
+
"718": "Bắc Từ Liêm"
|
331 |
+
},
|
332 |
+
"HNA": {
|
333 |
+
"285": "Bình Lục",
|
334 |
+
"286": "Duy Tiên",
|
335 |
+
"287": "Kim Bảng",
|
336 |
+
"288": "Lý Nhân",
|
337 |
+
"289": "Thanh Liêm",
|
338 |
+
"290": "Phủ Lý"
|
339 |
+
},
|
340 |
+
"HP": {
|
341 |
+
"30": "Đồ Sơn",
|
342 |
+
"31": "Dương Kinh",
|
343 |
+
"32": "Hải An",
|
344 |
+
"33": "Hồng Bàng",
|
345 |
+
"34": "Kiến An",
|
346 |
+
"35": "Lê Chân",
|
347 |
+
"36": "Ngô Quyền",
|
348 |
+
"37": "An Dương",
|
349 |
+
"38": "An Lão",
|
350 |
+
"39": "Bạch Long Vĩ",
|
351 |
+
"40": "Cát Hải",
|
352 |
+
"41": "Kiến Thụy",
|
353 |
+
"42": "Thủy Nguyên",
|
354 |
+
"43": "Tiên Lãng",
|
355 |
+
"44": "Vĩnh Bảo"
|
356 |
+
},
|
357 |
+
"HT": {
|
358 |
+
"291": "Cẩm Xuyên",
|
359 |
+
"292": "Can Lộc",
|
360 |
+
"293": "Đức Thọ",
|
361 |
+
"294": "Hương Khê",
|
362 |
+
"295": "Hương Sơn",
|
363 |
+
"296": "Kỳ Anh",
|
364 |
+
"297": "Lộc Hà",
|
365 |
+
"298": "Nghi Xuân",
|
366 |
+
"299": "Thạch Hà",
|
367 |
+
"300": "Vũ Quang",
|
368 |
+
"301": "Hà Tĩnh",
|
369 |
+
"302": "Hồng Lĩnh"
|
370 |
+
},
|
371 |
+
"HY": {
|
372 |
+
"333": "Ân Thi",
|
373 |
+
"334": "Khoái Châu",
|
374 |
+
"335": "Kim Động",
|
375 |
+
"336": "Mỹ Hào",
|
376 |
+
"337": "Phù Cừ",
|
377 |
+
"338": "Tiên Lữ",
|
378 |
+
"339": "Văn Giang",
|
379 |
+
"340": "Văn Lâm",
|
380 |
+
"341": "Yên Mỹ",
|
381 |
+
"342": "Hưng Yên"
|
382 |
+
},
|
383 |
+
"KG": {
|
384 |
+
"352": "An Biên",
|
385 |
+
"353": "An Minh",
|
386 |
+
"354": "Châu Thành",
|
387 |
+
"355": "Giồng Riềng",
|
388 |
+
"356": "Gò Quao",
|
389 |
+
"357": "Hòn Đất",
|
390 |
+
"358": "Kiên Hải",
|
391 |
+
"359": "Kiên Lương",
|
392 |
+
"360": "Phú Quốc",
|
393 |
+
"361": "Tân Hiệp",
|
394 |
+
"362": "U minh Thượng",
|
395 |
+
"363": "Vĩnh Thuận",
|
396 |
+
"364": "Rạch Giá",
|
397 |
+
"365": "Hà Tiên",
|
398 |
+
"723": "Giang Thành"
|
399 |
+
},
|
400 |
+
"KH": {
|
401 |
+
"343": "Cam Lâm",
|
402 |
+
"344": "Diên Khánh",
|
403 |
+
"345": "Khánh Sơn",
|
404 |
+
"346": "Khánh Vĩnh",
|
405 |
+
"347": "Ninh Hòa",
|
406 |
+
"348": "Trường Sa",
|
407 |
+
"349": "Vạn Ninh",
|
408 |
+
"350": "Nha Trang",
|
409 |
+
"351": "Cam Ranh"
|
410 |
+
},
|
411 |
+
"KT": {
|
412 |
+
"366": "Đăk Glei",
|
413 |
+
"367": "Đăk Hà",
|
414 |
+
"368": "Đăk Tô",
|
415 |
+
"369": "Kon Plông",
|
416 |
+
"370": "Kon Rẫy",
|
417 |
+
"371": "Ngọc Hồi",
|
418 |
+
"372": "Sa Thầy",
|
419 |
+
"373": "Tu Mơ Rông",
|
420 |
+
"374": "TP. KonTum",
|
421 |
+
"729": "Ia H'Drai"
|
422 |
+
},
|
423 |
+
"LA": {
|
424 |
+
"415": "Bến Lức",
|
425 |
+
"416": "Cần Đước",
|
426 |
+
"417": "Cần Giuộc",
|
427 |
+
"418": "Châu Thành",
|
428 |
+
"419": "Đức Hòa",
|
429 |
+
"420": "Đức Huệ",
|
430 |
+
"421": "Mộc Hóa",
|
431 |
+
"422": "Tân Hưng",
|
432 |
+
"423": "Tân Thạnh",
|
433 |
+
"424": "Tân Trụ",
|
434 |
+
"425": "Thạnh Hóa",
|
435 |
+
"426": "Thủ Thừa",
|
436 |
+
"427": "Vĩnh Hưng",
|
437 |
+
"429": "Tân An",
|
438 |
+
"724": "Kiến Tường"
|
439 |
+
},
|
440 |
+
"LCA": {
|
441 |
+
"404": "Bắc Hà",
|
442 |
+
"405": "Bảo Thắng",
|
443 |
+
"406": "Bảo Yên",
|
444 |
+
"407": "Bát Xát",
|
445 |
+
"408": "Mường Khương",
|
446 |
+
"409": "Sa Pa",
|
447 |
+
"410": "Văn Bàn",
|
448 |
+
"411": "Si Ma Cai",
|
449 |
+
"414": "Lào Cai"
|
450 |
+
},
|
451 |
+
"LCH": {
|
452 |
+
"375": "Mường Tè",
|
453 |
+
"376": "Phong Thổ",
|
454 |
+
"377": "Sìn Hồ",
|
455 |
+
"378": "Tam Đường",
|
456 |
+
"379": "Than Uyên",
|
457 |
+
"380": "Lai Châu",
|
458 |
+
"691": "Tân Uyên",
|
459 |
+
"709": "Nậm Nhùn"
|
460 |
+
},
|
461 |
+
"LDD": {
|
462 |
+
"381": "Bảo Lâm",
|
463 |
+
"382": "Cát Tiên",
|
464 |
+
"383": "Đạ Huoai",
|
465 |
+
"384": "Đạ Tẻh",
|
466 |
+
"385": "Đam Rông",
|
467 |
+
"386": "Di Linh",
|
468 |
+
"387": "Đơn Dương",
|
469 |
+
"388": "Đức Trọng",
|
470 |
+
"389": "Lạc Dương",
|
471 |
+
"390": "Lâm Hà",
|
472 |
+
"391": "Đà Lạt",
|
473 |
+
"392": "Bảo Lộc"
|
474 |
+
},
|
475 |
+
"LS": {
|
476 |
+
"393": "Bắc Sơn",
|
477 |
+
"394": "Bình Gia",
|
478 |
+
"395": "Cao Lộc",
|
479 |
+
"396": "Chi Lăng",
|
480 |
+
"397": "Đình Lập",
|
481 |
+
"398": "Hữu Lũng",
|
482 |
+
"399": "Lộc Bình",
|
483 |
+
"400": "Tràng Định",
|
484 |
+
"401": "Văn Lãng",
|
485 |
+
"402": "Văn Quan",
|
486 |
+
"403": "Lạng Sơn"
|
487 |
+
},
|
488 |
+
"NA": {
|
489 |
+
"440": "Anh Sơn",
|
490 |
+
"441": "Con Cuông",
|
491 |
+
"442": "Diễn Châu",
|
492 |
+
"443": "Đô Lương",
|
493 |
+
"444": "Hưng Nguyên",
|
494 |
+
"445": "Kỳ Sơn",
|
495 |
+
"446": "Nam Đàn",
|
496 |
+
"447": "Nghi Lộc",
|
497 |
+
"448": "Nghĩa Đàn",
|
498 |
+
"449": "Quế Phong",
|
499 |
+
"450": "Quỳ Châu",
|
500 |
+
"451": "Quỳ Hợp",
|
501 |
+
"452": "Quỳnh Lưu",
|
502 |
+
"453": "Tân Kỳ",
|
503 |
+
"454": "Thanh Chương",
|
504 |
+
"455": "Tương Dương",
|
505 |
+
"456": "Yên Thành",
|
506 |
+
"457": "TP. Vinh",
|
507 |
+
"458": "Cửa Lò",
|
508 |
+
"692": "Thái Hòa",
|
509 |
+
"725": "Hoàng Mai"
|
510 |
+
},
|
511 |
+
"NB": {
|
512 |
+
"459": "Gia Viễn",
|
513 |
+
"460": "Hoa Lư",
|
514 |
+
"461": "Kim Sơn",
|
515 |
+
"462": "Nho Quan",
|
516 |
+
"463": "Yên Khánh",
|
517 |
+
"464": "Yên Mô",
|
518 |
+
"465": "Ninh Bình",
|
519 |
+
"466": "Tam Điệp"
|
520 |
+
},
|
521 |
+
"NDD": {
|
522 |
+
"430": "Giao Thủy",
|
523 |
+
"431": "Hải Hậu",
|
524 |
+
"432": "Mỹ Lộc",
|
525 |
+
"433": "Nam Trực",
|
526 |
+
"434": "Nghĩa Hưng",
|
527 |
+
"435": "Trực Ninh",
|
528 |
+
"436": "Vụ Bản",
|
529 |
+
"437": "Xuân Trường",
|
530 |
+
"438": "Ý Yên",
|
531 |
+
"439": "Nam Định"
|
532 |
+
},
|
533 |
+
"NT": {
|
534 |
+
"467": "Bác Ái",
|
535 |
+
"468": "Ninh Hải",
|
536 |
+
"469": "Ninh Phước",
|
537 |
+
"470": "Ninh Sơn",
|
538 |
+
"471": "Thuận Bắc",
|
539 |
+
"472": "Phan Rang - Tháp Chàm",
|
540 |
+
"693": "Thuận Nam"
|
541 |
+
},
|
542 |
+
"PT": {
|
543 |
+
"473": "Cẩm Khê",
|
544 |
+
"474": "Đoan Hùng",
|
545 |
+
"475": "Hạ Hòa",
|
546 |
+
"476": "Lâm Thao",
|
547 |
+
"477": "Phù Ninh",
|
548 |
+
"478": "Tam Nông",
|
549 |
+
"479": "Tân Sơn",
|
550 |
+
"480": "Thanh Ba",
|
551 |
+
"481": "Thanh Sơn",
|
552 |
+
"482": "Thanh Thủy",
|
553 |
+
"483": "Yên Lập",
|
554 |
+
"485": "Việt Trì",
|
555 |
+
"486": "Phú Thọ"
|
556 |
+
},
|
557 |
+
"PY": {
|
558 |
+
"487": "Đông Hòa",
|
559 |
+
"488": "Đồng Xuân",
|
560 |
+
"489": "Phú Hòa",
|
561 |
+
"490": "Sơn Hòa",
|
562 |
+
"491": "Sông Cầu",
|
563 |
+
"492": "Sông Hinh",
|
564 |
+
"493": "Tây Hòa",
|
565 |
+
"494": "Tuy An",
|
566 |
+
"495": "Tuy Hòa"
|
567 |
+
},
|
568 |
+
"QB": {
|
569 |
+
"496": "Bố Trạch",
|
570 |
+
"497": "Lệ Thủy",
|
571 |
+
"498": "Minh Hóa",
|
572 |
+
"499": "Quảng Ninh",
|
573 |
+
"500": "Quảng Trạch",
|
574 |
+
"501": "Tuyên Hóa",
|
575 |
+
"502": "Đồng Hới",
|
576 |
+
"720": "Ba Đồn"
|
577 |
+
},
|
578 |
+
"QNA": {
|
579 |
+
"503": "Bắc Trà My",
|
580 |
+
"504": "Đại Lộc",
|
581 |
+
"505": "Điện Bàn",
|
582 |
+
"506": "Đông Giang",
|
583 |
+
"507": "Duy Xuyên",
|
584 |
+
"508": "Hiệp Đức",
|
585 |
+
"509": "Nam Giang",
|
586 |
+
"510": "Nam Trà My",
|
587 |
+
"511": "Núi Thành",
|
588 |
+
"512": "Phú Ninh",
|
589 |
+
"513": "Phước Sơn",
|
590 |
+
"514": "Quế Sơn",
|
591 |
+
"515": "Tây Giang",
|
592 |
+
"516": "Thăng Bình",
|
593 |
+
"517": "Tiên Phước",
|
594 |
+
"519": "Tam Kỳ",
|
595 |
+
"520": "Hội An",
|
596 |
+
"694": "Nông Sơn"
|
597 |
+
},
|
598 |
+
"QNG": {
|
599 |
+
"521": "Ba Tơ",
|
600 |
+
"522": "Bình Sơn",
|
601 |
+
"523": "Đức Phổ",
|
602 |
+
"524": "Lý Sơn",
|
603 |
+
"525": "Minh Long",
|
604 |
+
"526": "Mộ Đức",
|
605 |
+
"527": "Nghĩa Hành",
|
606 |
+
"528": "Sơn Hà",
|
607 |
+
"529": "Sơn Tây",
|
608 |
+
"530": "Sơn Tịnh",
|
609 |
+
"531": "Tây Trà",
|
610 |
+
"532": "Trà Bồng",
|
611 |
+
"533": "Tư Nghĩa",
|
612 |
+
"534": "Quảng Ngãi"
|
613 |
+
},
|
614 |
+
"QNI": {
|
615 |
+
"535": "Ba Chẽ",
|
616 |
+
"536": "Bình Liêu",
|
617 |
+
"537": "Cô Tô",
|
618 |
+
"538": "Đầm Hà",
|
619 |
+
"539": "Đông Triều",
|
620 |
+
"540": "Hải Hà",
|
621 |
+
"542": "Tiên Yên",
|
622 |
+
"543": "Vân Đồn",
|
623 |
+
"546": "Hạ Long",
|
624 |
+
"547": "Cẩm Phả",
|
625 |
+
"548": "Móng Cái",
|
626 |
+
"549": "Uông Bí",
|
627 |
+
"708": "Quảng Yên"
|
628 |
+
},
|
629 |
+
"QT": {
|
630 |
+
"550": "Cam Lộ",
|
631 |
+
"551": "Đa Krông",
|
632 |
+
"552": "Đảo Cồn cỏ",
|
633 |
+
"553": "Gio Linh",
|
634 |
+
"554": "Hải Lăng",
|
635 |
+
"555": "Hướng Hóa",
|
636 |
+
"556": "Triệu Phong",
|
637 |
+
"557": "Vĩnh Linh",
|
638 |
+
"558": "Đông Hà",
|
639 |
+
"559": "Quảng Trị"
|
640 |
+
},
|
641 |
+
"QTT": {
|
642 |
+
"732": "Bất động sản Mỹ",
|
643 |
+
"733": "Bất động sản Úc"
|
644 |
+
},
|
645 |
+
"SG": {
|
646 |
+
"53": "Quận 1",
|
647 |
+
"54": "Quận 2",
|
648 |
+
"55": "Quận 3",
|
649 |
+
"56": "Quận 4",
|
650 |
+
"57": "Quận 5",
|
651 |
+
"58": "Quận 6",
|
652 |
+
"59": "Quận 7",
|
653 |
+
"60": "Quận 8",
|
654 |
+
"61": "Quận 9",
|
655 |
+
"62": "Quận 10",
|
656 |
+
"63": "Quận 11",
|
657 |
+
"64": "Quận 12",
|
658 |
+
"65": "Bình Tân",
|
659 |
+
"66": "Bình Thạnh",
|
660 |
+
"67": "Gò Vấp",
|
661 |
+
"68": "Phú Nhuận",
|
662 |
+
"69": "Tân Bình",
|
663 |
+
"70": "Tân Phú",
|
664 |
+
"71": "Thủ Đức",
|
665 |
+
"72": "Bình Chánh",
|
666 |
+
"73": "Cần Giờ",
|
667 |
+
"74": "Củ Chi",
|
668 |
+
"75": "Hóc Môn",
|
669 |
+
"76": "Nhà Bè"
|
670 |
+
},
|
671 |
+
"SL": {
|
672 |
+
"569": "Bắc Yên",
|
673 |
+
"570": "Mai Sơn",
|
674 |
+
"571": "Mộc Châu",
|
675 |
+
"572": "Mường La",
|
676 |
+
"573": "Phù Yên",
|
677 |
+
"574": "Quỳnh Nhai",
|
678 |
+
"575": "Sông Mã",
|
679 |
+
"576": "Sốp Cộp",
|
680 |
+
"577": "Thuận Châu",
|
681 |
+
"578": "Yên Châu",
|
682 |
+
"579": "Sơn La",
|
683 |
+
"726": "Vân Hồ"
|
684 |
+
},
|
685 |
+
"ST": {
|
686 |
+
"560": "Cù Lao Dung",
|
687 |
+
"561": "Kế Sách",
|
688 |
+
"562": "Long Phú",
|
689 |
+
"563": "Mỹ Tú",
|
690 |
+
"564": "Mỹ Xuyên",
|
691 |
+
"565": "Ngã Năm",
|
692 |
+
"566": "Thạnh Trị",
|
693 |
+
"567": "Vĩnh Châu",
|
694 |
+
"568": "Sóc Trăng",
|
695 |
+
"695": "Châu Thành",
|
696 |
+
"707": "Trần Đề"
|
697 |
+
},
|
698 |
+
"TB": {
|
699 |
+
"589": "Đông Hưng",
|
700 |
+
"590": "Hưng Hà",
|
701 |
+
"591": "Kiến Xương",
|
702 |
+
"592": "Quỳnh Phụ",
|
703 |
+
"593": "Thái Thuỵ",
|
704 |
+
"594": "Tiền Hải",
|
705 |
+
"595": "Vũ Thư",
|
706 |
+
"596": "Thái Bình"
|
707 |
+
},
|
708 |
+
"TG": {
|
709 |
+
"642": "Cái Bè",
|
710 |
+
"643": "Huyện Cai Lậy",
|
711 |
+
"644": "Châu Thành",
|
712 |
+
"645": "Chợ Gạo",
|
713 |
+
"646": "Gò Công Đông",
|
714 |
+
"647": "Gò Công Tây",
|
715 |
+
"648": "Tân Phước",
|
716 |
+
"649": "Tân Phú Đông",
|
717 |
+
"650": "Mỹ Tho",
|
718 |
+
"651": "Gò Công",
|
719 |
+
"727": "Cai Lậy"
|
720 |
+
},
|
721 |
+
"TH": {
|
722 |
+
"606": "Bá Thước",
|
723 |
+
"607": "Cẩm Thủy",
|
724 |
+
"608": "Đông Sơn",
|
725 |
+
"609": "Hà Trung",
|
726 |
+
"610": "Hậu Lộc",
|
727 |
+
"611": "Hoằng Hóa",
|
728 |
+
"612": "Lang Chánh",
|
729 |
+
"613": "Mường Lát",
|
730 |
+
"614": "Nga Sơn",
|
731 |
+
"615": "Ngọc Lặc",
|
732 |
+
"616": "Như Thanh",
|
733 |
+
"617": "Như Xuân",
|
734 |
+
"618": "Nông Cống",
|
735 |
+
"619": "Quan Hóa",
|
736 |
+
"620": "Quan Sơn",
|
737 |
+
"621": "Quảng Xương",
|
738 |
+
"622": "Thạch Thành",
|
739 |
+
"623": "Thiệu Hóa",
|
740 |
+
"624": "Thọ Xuân",
|
741 |
+
"625": "Thường Xuân",
|
742 |
+
"626": "Nghi Sơn",
|
743 |
+
"627": "Triệu Sơn",
|
744 |
+
"628": "Vĩnh Lộc",
|
745 |
+
"629": "Yên Định",
|
746 |
+
"630": "Thanh Hóa",
|
747 |
+
"631": "Bỉm Sơn",
|
748 |
+
"632": "Sầm Sơn"
|
749 |
+
},
|
750 |
+
"TN": {
|
751 |
+
"597": "Đại Từ",
|
752 |
+
"598": "Định Hóa",
|
753 |
+
"599": "Đồng Hỷ",
|
754 |
+
"600": "Phổ Yên",
|
755 |
+
"601": "Phú Bình",
|
756 |
+
"602": "Phú Lương",
|
757 |
+
"603": "Võ Nhai",
|
758 |
+
"604": "Thái Nguyên",
|
759 |
+
"605": "Sông Công"
|
760 |
+
},
|
761 |
+
"TNI": {
|
762 |
+
"580": "Bến Cầu",
|
763 |
+
"581": "Châu Thành",
|
764 |
+
"582": "Dương Minh Châu",
|
765 |
+
"583": "Gò Dầu",
|
766 |
+
"584": "Hòa Thành",
|
767 |
+
"585": "Tân Biên",
|
768 |
+
"586": "Tân Châu",
|
769 |
+
"587": "Trảng Bàng",
|
770 |
+
"588": "Tây Ninh"
|
771 |
+
},
|
772 |
+
"TQ": {
|
773 |
+
"660": "Chiêm Hóa",
|
774 |
+
"661": "Hàm Yên",
|
775 |
+
"662": "Na Hang",
|
776 |
+
"663": "Sơn Dương",
|
777 |
+
"664": "Yên Sơn",
|
778 |
+
"665": "Tuyên Quang",
|
779 |
+
"712": "Lâm Bình"
|
780 |
+
},
|
781 |
+
"TTH": {
|
782 |
+
"633": "A Lưới",
|
783 |
+
"634": "Hương Thủy",
|
784 |
+
"635": "Hương Trà",
|
785 |
+
"636": "Nam Đông",
|
786 |
+
"637": "Phong Điền",
|
787 |
+
"638": "Phú Lộc",
|
788 |
+
"639": "Phú Vang",
|
789 |
+
"640": "Quảng Điền",
|
790 |
+
"641": "TP. Huế"
|
791 |
+
},
|
792 |
+
"TV": {
|
793 |
+
"652": "Càng Long",
|
794 |
+
"653": "Cầu Kè",
|
795 |
+
"654": "Cầu Ngang",
|
796 |
+
"655": "Châu Thành",
|
797 |
+
"656": "Huyện Duyên Hải",
|
798 |
+
"657": "Tiểu Cần",
|
799 |
+
"658": "Trà Cú",
|
800 |
+
"659": "Trà Vinh",
|
801 |
+
"734": "Duyên Hải"
|
802 |
+
},
|
803 |
+
"VL": {
|
804 |
+
"666": "Bình Minh",
|
805 |
+
"667": "Bình Tân",
|
806 |
+
"668": "Long Hồ",
|
807 |
+
"669": "Mang Thít",
|
808 |
+
"670": "Tam Bình",
|
809 |
+
"671": "Trà Ôn",
|
810 |
+
"672": "Vũng Liêm",
|
811 |
+
"673": "Vĩnh Long"
|
812 |
+
},
|
813 |
+
"VP": {
|
814 |
+
"674": "Bình Xuyên",
|
815 |
+
"675": "Lập Thạch",
|
816 |
+
"676": "Tam Đảo",
|
817 |
+
"677": "Tam Dương",
|
818 |
+
"678": "Vĩnh Tường",
|
819 |
+
"679": "Yên Lạc",
|
820 |
+
"680": "Vĩnh Yên",
|
821 |
+
"681": "Phúc Yên",
|
822 |
+
"696": "Sông Lô"
|
823 |
+
},
|
824 |
+
"VT": {
|
825 |
+
"96": "Châu Đức",
|
826 |
+
"97": "Côn Đảo",
|
827 |
+
"98": "Đất Đỏ",
|
828 |
+
"99": "Long Điền",
|
829 |
+
"100": "Phú Mỹ",
|
830 |
+
"101": "Xuyên Mộc",
|
831 |
+
"102": "Vũng Tàu",
|
832 |
+
"103": "Bà Rịa"
|
833 |
+
},
|
834 |
+
"YB": {
|
835 |
+
"682": "Lục Yên",
|
836 |
+
"683": "Mù Cang Chải",
|
837 |
+
"684": "Trạm Tấu",
|
838 |
+
"685": "Trấn Yên",
|
839 |
+
"686": "Văn Chấn",
|
840 |
+
"687": "Văn Yên",
|
841 |
+
"688": "Yên Bình",
|
842 |
+
"689": "Yên Bái",
|
843 |
+
"713": "Nghĩa Lộ"
|
844 |
+
}
|
845 |
+
}
|
city-map.json
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"AG": "An Giang",
|
3 |
+
"BD": "Bình Dương",
|
4 |
+
"BDD": "Bình Định",
|
5 |
+
"BG": "Bắc Giang",
|
6 |
+
"BK": "Bắc Kạn",
|
7 |
+
"BL": "Bạc Liêu",
|
8 |
+
"BN": "Bắc Ninh",
|
9 |
+
"BP": "Bình Phước",
|
10 |
+
"BTH": "Bình Thuận",
|
11 |
+
"BTR": "Bến Tre",
|
12 |
+
"CB": "Cao Bằng",
|
13 |
+
"CM": "Cà Mau",
|
14 |
+
"CT": "Cần Thơ",
|
15 |
+
"DDB": "Điện Biên",
|
16 |
+
"DDL": "Đắk Lắk",
|
17 |
+
"DDN": "Đà Nẵng",
|
18 |
+
"DDT": "Đồng Tháp",
|
19 |
+
"DNA": "Đồng Nai",
|
20 |
+
"DNO": "Đắk Nông",
|
21 |
+
"GL": "Gia Lai",
|
22 |
+
"HB": "Hòa Bình",
|
23 |
+
"HD": "Hải Dương",
|
24 |
+
"HG": "Hà Giang",
|
25 |
+
"HGI": "Hậu Giang",
|
26 |
+
"HN": "Hà Nội",
|
27 |
+
"HNA": "Hà Nam",
|
28 |
+
"HP": "Hải Phòng",
|
29 |
+
"HT": "Hà Tĩnh",
|
30 |
+
"HY": "Hưng Yên",
|
31 |
+
"KG": "Kiên Giang",
|
32 |
+
"KH": "Khánh Hòa",
|
33 |
+
"KT": "Kon Tum",
|
34 |
+
"LA": "Long An",
|
35 |
+
"LCA": "Lào Cai",
|
36 |
+
"LCH": "Lai Châu",
|
37 |
+
"LDD": "Lâm Đồng",
|
38 |
+
"LS": "Lạng Sơn",
|
39 |
+
"NA": "Nghệ An",
|
40 |
+
"NB": "Ninh Bình",
|
41 |
+
"NDD": "Nam Định",
|
42 |
+
"NT": "Ninh Thuận",
|
43 |
+
"PT": "Phú Thọ",
|
44 |
+
"PY": "Phú Yên",
|
45 |
+
"QB": "Quảng Bình",
|
46 |
+
"QNA": "Quảng Nam",
|
47 |
+
"QNG": "Quảng Ngãi",
|
48 |
+
"QNI": "Quảng Ninh",
|
49 |
+
"QT": "Quảng Trị",
|
50 |
+
"SG": "Hồ Chí Minh",
|
51 |
+
"SL": "Sơn La",
|
52 |
+
"ST": "Sóc Trăng",
|
53 |
+
"TB": "Thái Bình",
|
54 |
+
"TG": "Tiền Giang",
|
55 |
+
"TH": "Thanh Hóa",
|
56 |
+
"TN": "Thái Nguyên",
|
57 |
+
"TNI": "Tây Ninh",
|
58 |
+
"TQ": "Tuyên Quang",
|
59 |
+
"TTH": "Thừa Thiên Huế",
|
60 |
+
"TV": "Trà Vinh",
|
61 |
+
"VL": "Vĩnh Long",
|
62 |
+
"VP": "Vĩnh Phúc",
|
63 |
+
"VT": "Bà Rịa Vũng Tàu",
|
64 |
+
"YB": "Yên Bái"
|
65 |
+
}
|
models/mm-text-no-price/assets.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"class_name": "MultiModalPredictor", "column_types": {"Title": "text", "Area": "numerical", "Location": "text", "Time stamp": "numerical", "Certification status": "categorical", "Direction": "categorical", "Bedrooms": "numerical", "Bathrooms": "numerical", "Front width": "numerical", "Floor": "categorical", "Description": "text", "Image URL": "categorical", "Road width": "numerical", "City_code": "categorical", "DistrictId": "categorical", "Balcony_Direction": "categorical", "Longitude": "numerical", "Lattitude": "numerical", "Price": "numerical"}, "label_column": "Price", "problem_type": "regression", "presets": null, "eval_metric_name": "rmse", "validation_metric_name": "rmse", "output_shape": 1, "classes": null, "save_path": "/kaggle/working/mm-nlp-image-transformer", "pretrained": true, "pretrained_path": null, "fit_called": true, "best_score": null, "total_train_time": null, "version": "0.8.2"}
|
models/mm-text-no-price/config.yaml
ADDED
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
model:
|
2 |
+
names:
|
3 |
+
- categorical_transformer
|
4 |
+
- fusion_transformer
|
5 |
+
- hf_text
|
6 |
+
- numerical_transformer
|
7 |
+
hf_text:
|
8 |
+
checkpoint_name: local://hf_text
|
9 |
+
gradient_checkpointing: false
|
10 |
+
pooling_mode: cls
|
11 |
+
data_types:
|
12 |
+
- text
|
13 |
+
tokenizer_name: hf_auto
|
14 |
+
max_text_len: 512
|
15 |
+
insert_sep: true
|
16 |
+
low_cpu_mem_usage: false
|
17 |
+
text_segment_num: 2
|
18 |
+
stochastic_chunk: false
|
19 |
+
text_aug_detect_length: 10
|
20 |
+
text_trivial_aug_maxscale: 0.0
|
21 |
+
text_train_augment_types: null
|
22 |
+
categorical_transformer:
|
23 |
+
out_features: 192
|
24 |
+
d_token: 192
|
25 |
+
ffn_d_hidden: 192
|
26 |
+
num_trans_blocks: 0
|
27 |
+
num_attn_heads: 8
|
28 |
+
residual_dropout: 0.0
|
29 |
+
attention_dropout: 0.2
|
30 |
+
ffn_dropout: 0.1
|
31 |
+
normalization: layer_norm
|
32 |
+
ffn_activation: reglu
|
33 |
+
head_activation: relu
|
34 |
+
data_types:
|
35 |
+
- categorical
|
36 |
+
additive_attention: false
|
37 |
+
share_qv_weights: false
|
38 |
+
numerical_transformer:
|
39 |
+
out_features: 192
|
40 |
+
d_token: 192
|
41 |
+
ffn_d_hidden: 192
|
42 |
+
num_trans_blocks: 0
|
43 |
+
num_attn_heads: 8
|
44 |
+
residual_dropout: 0.0
|
45 |
+
attention_dropout: 0.2
|
46 |
+
ffn_dropout: 0.1
|
47 |
+
normalization: layer_norm
|
48 |
+
ffn_activation: reglu
|
49 |
+
head_activation: relu
|
50 |
+
data_types:
|
51 |
+
- numerical
|
52 |
+
embedding_arch:
|
53 |
+
- linear
|
54 |
+
- relu
|
55 |
+
merge: concat
|
56 |
+
additive_attention: false
|
57 |
+
share_qv_weights: false
|
58 |
+
fusion_transformer:
|
59 |
+
hidden_size: 192
|
60 |
+
n_blocks: 3
|
61 |
+
attention_n_heads: 8
|
62 |
+
adapt_in_features: max
|
63 |
+
attention_dropout: 0.2
|
64 |
+
residual_dropout: 0.0
|
65 |
+
ffn_dropout: 0.1
|
66 |
+
ffn_d_hidden: 192
|
67 |
+
normalization: layer_norm
|
68 |
+
ffn_activation: geglu
|
69 |
+
head_activation: relu
|
70 |
+
data_types: null
|
71 |
+
additive_attention: false
|
72 |
+
share_qv_weights: false
|
73 |
+
data:
|
74 |
+
image:
|
75 |
+
missing_value_strategy: zero
|
76 |
+
text:
|
77 |
+
normalize_text: false
|
78 |
+
categorical:
|
79 |
+
minimum_cat_count: 100
|
80 |
+
maximum_num_cat: 20
|
81 |
+
convert_to_text: false
|
82 |
+
numerical:
|
83 |
+
convert_to_text: false
|
84 |
+
scaler_with_mean: true
|
85 |
+
scaler_with_std: true
|
86 |
+
document:
|
87 |
+
missing_value_strategy: zero
|
88 |
+
label:
|
89 |
+
numerical_label_preprocessing: standardscaler
|
90 |
+
pos_label: null
|
91 |
+
mixup:
|
92 |
+
turn_on: false
|
93 |
+
mixup_alpha: 0.8
|
94 |
+
cutmix_alpha: 1.0
|
95 |
+
cutmix_minmax: null
|
96 |
+
prob: 1.0
|
97 |
+
switch_prob: 0.5
|
98 |
+
mode: batch
|
99 |
+
turn_off_epoch: 5
|
100 |
+
label_smoothing: 0.1
|
101 |
+
templates:
|
102 |
+
turn_on: false
|
103 |
+
num_templates: 30
|
104 |
+
template_length: 2048
|
105 |
+
preset_templates:
|
106 |
+
- super_glue
|
107 |
+
- rte
|
108 |
+
custom_templates: null
|
109 |
+
optimization:
|
110 |
+
optim_type: adamw
|
111 |
+
learning_rate: 0.0001
|
112 |
+
weight_decay: 0.001
|
113 |
+
lr_choice: layerwise_decay
|
114 |
+
lr_decay: 0.9
|
115 |
+
lr_schedule: cosine_decay
|
116 |
+
max_epochs: 10
|
117 |
+
max_steps: -1
|
118 |
+
warmup_steps: 0.1
|
119 |
+
end_lr: 0
|
120 |
+
lr_mult: 1
|
121 |
+
patience: 10
|
122 |
+
val_check_interval: 0.5
|
123 |
+
check_val_every_n_epoch: 1
|
124 |
+
skip_final_val: false
|
125 |
+
gradient_clip_val: 1
|
126 |
+
gradient_clip_algorithm: norm
|
127 |
+
track_grad_norm: -1
|
128 |
+
log_every_n_steps: 10
|
129 |
+
top_k: 3
|
130 |
+
top_k_average_method: greedy_soup
|
131 |
+
efficient_finetune: null
|
132 |
+
lora:
|
133 |
+
module_filter: null
|
134 |
+
filter:
|
135 |
+
- query
|
136 |
+
- value
|
137 |
+
- ^q$
|
138 |
+
- ^v$
|
139 |
+
- ^k$
|
140 |
+
- ^o$
|
141 |
+
r: 8
|
142 |
+
alpha: 8
|
143 |
+
loss_function: auto
|
144 |
+
focal_loss:
|
145 |
+
alpha: null
|
146 |
+
gamma: 2.0
|
147 |
+
reduction: mean
|
148 |
+
env:
|
149 |
+
num_gpus: 1
|
150 |
+
num_nodes: 1
|
151 |
+
batch_size: 32
|
152 |
+
per_gpu_batch_size: 8
|
153 |
+
eval_batch_size_ratio: 4
|
154 |
+
per_gpu_batch_size_evaluation: null
|
155 |
+
precision: 16
|
156 |
+
num_workers: 2
|
157 |
+
num_workers_evaluation: 2
|
158 |
+
fast_dev_run: false
|
159 |
+
deterministic: false
|
160 |
+
auto_select_gpus: true
|
161 |
+
strategy: null
|
162 |
+
deepspeed_allgather_size: 1000000000.0
|
163 |
+
deepspeed_allreduce_size: 1000000000.0
|
models/mm-text-no-price/data_processors.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:53336fa325f49948fed81d515d4a468dffcd03d5eeaa90a116a4d61b556540d7
|
3 |
+
size 15581
|
models/mm-text-no-price/df_preprocessor.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:e852f953943f31fd34f6d356dbd2b05f8b8860737a75786a42f2138109d0678e
|
3 |
+
size 26784
|
models/mm-text-no-price/hf_text/config.json
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_name_or_path": "bert-base-multilingual-uncased",
|
3 |
+
"architectures": [
|
4 |
+
"BertForMaskedLM"
|
5 |
+
],
|
6 |
+
"attention_probs_dropout_prob": 0.1,
|
7 |
+
"classifier_dropout": null,
|
8 |
+
"directionality": "bidi",
|
9 |
+
"hidden_act": "gelu",
|
10 |
+
"hidden_dropout_prob": 0.1,
|
11 |
+
"hidden_size": 768,
|
12 |
+
"initializer_range": 0.02,
|
13 |
+
"intermediate_size": 3072,
|
14 |
+
"layer_norm_eps": 1e-12,
|
15 |
+
"max_position_embeddings": 512,
|
16 |
+
"model_type": "bert",
|
17 |
+
"num_attention_heads": 12,
|
18 |
+
"num_hidden_layers": 12,
|
19 |
+
"pad_token_id": 0,
|
20 |
+
"pooler_fc_size": 768,
|
21 |
+
"pooler_num_attention_heads": 12,
|
22 |
+
"pooler_num_fc_layers": 3,
|
23 |
+
"pooler_size_per_head": 128,
|
24 |
+
"pooler_type": "first_token_transform",
|
25 |
+
"position_embedding_type": "absolute",
|
26 |
+
"transformers_version": "4.26.1",
|
27 |
+
"type_vocab_size": 2,
|
28 |
+
"use_cache": true,
|
29 |
+
"vocab_size": 105879
|
30 |
+
}
|
models/mm-text-no-price/hf_text/special_tokens_map.json
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cls_token": "[CLS]",
|
3 |
+
"mask_token": "[MASK]",
|
4 |
+
"pad_token": "[PAD]",
|
5 |
+
"sep_token": "[SEP]",
|
6 |
+
"unk_token": "[UNK]"
|
7 |
+
}
|
models/mm-text-no-price/hf_text/tokenizer.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
models/mm-text-no-price/hf_text/tokenizer_config.json
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cls_token": "[CLS]",
|
3 |
+
"do_lower_case": true,
|
4 |
+
"mask_token": "[MASK]",
|
5 |
+
"model_max_length": 512,
|
6 |
+
"name_or_path": "bert-base-multilingual-uncased",
|
7 |
+
"pad_token": "[PAD]",
|
8 |
+
"sep_token": "[SEP]",
|
9 |
+
"special_tokens_map_file": null,
|
10 |
+
"strip_accents": null,
|
11 |
+
"tokenize_chinese_chars": true,
|
12 |
+
"tokenizer_class": "BertTokenizer",
|
13 |
+
"unk_token": "[UNK]"
|
14 |
+
}
|
models/mm-text-no-price/hf_text/vocab.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
models/mm-text-no-price/hparams.yaml
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
optim_type: adamw
|
2 |
+
lr_choice: layerwise_decay
|
3 |
+
lr_schedule: cosine_decay
|
4 |
+
lr: 0.0001
|
5 |
+
lr_decay: 0.9
|
6 |
+
end_lr: 0
|
7 |
+
lr_mult: 1
|
8 |
+
weight_decay: 0.001
|
9 |
+
warmup_steps: 0.1
|
10 |
+
validation_metric_name: rmse
|
11 |
+
custom_metric_func: null
|
12 |
+
efficient_finetune: null
|
13 |
+
trainable_param_names: []
|
14 |
+
mixup_fn: null
|
15 |
+
mixup_off_epoch: 5
|
16 |
+
skip_final_val: false
|
models/mm-text-no-price/model.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c424f2e2472c2606f5436b98f8d3b856c6b400ddf9537e1f6cff2e1a83aa65c0
|
3 |
+
size 706840833
|
requirements.txt
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
-f https://download.pytorch.org/whl/cpu/torch_stable.html
|
2 |
+
torch==1.13.1+cpu
|
3 |
+
-f https://download.pytorch.org/whl/cpu/torch_stable.html
|
4 |
+
torchvision==0.14.1+cpu
|
5 |
+
|
6 |
+
autogluon.multimodal==0.8.2
|
7 |
+
autogluon.tabular[all,skex]==0.8.2
|
8 |
+
|
9 |
+
streamlit==1.27.0
|