Adresų duomenys
Registrų centras 2020-10-22 dieną atvėrė adresų duomenis.
Jau praėjo keli mėnesiai ir tik dabar prisiruošiau pasižiūrėti, kas per duomenys, nors OSM bendruomenė atvertus duomenis jau sėkmingai importuoja į OSM.
%matplotlib inline
import locale
import pandas as pd
import geopandas as gp
import jupyterthemes.jtplot as jtplot
import matplotlib as mpl
import matplotlib.pyplot as plt
locale.setlocale(locale.LC_TIME, 'lt_LT.UTF-8')
jtplot.style(theme='monokai', fscale=.9, figsize=(10, 4))
base = 'https://www.registrucentras.lt/aduomenys/?byla='
apskritys = pd.read_csv(f'{base}adr_apskritys.csv')
apskritys.info()
apskritys
<class 'pandas.core.frame.DataFrame'> RangeIndex: 10 entries, 0 to 9 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 ADM_KODAS 10 non-null int64 1 TIPAS 10 non-null object 2 TIPO_SANTRUMPA 10 non-null object 3 VARDAS_K 10 non-null object 4 NUO 10 non-null object 5 ADM_NUO 10 non-null object dtypes: int64(1), object(5) memory usage: 608.0+ bytes
ADM_KODAS | TIPAS | TIPO_SANTRUMPA | VARDAS_K | NUO | ADM_NUO | |
---|---|---|---|---|---|---|
0 | 10 | apskritis | apskr. | Vilniaus | 2015-12-22 | 1998-06-01 |
1 | 9 | apskritis | apskr. | Utenos | 2015-12-22 | 1998-06-01 |
2 | 8 | apskritis | apskr. | Telšių | 2015-12-22 | 1998-06-01 |
3 | 7 | apskritis | apskr. | Tauragės | 2015-12-22 | 1998-06-01 |
4 | 1 | apskritis | apskr. | Alytaus | 2015-12-22 | 1998-06-01 |
5 | 5 | apskritis | apskr. | Panevėžio | 2015-12-22 | 1998-06-01 |
6 | 4 | apskritis | apskr. | Marijampolės | 2015-12-22 | 1998-06-01 |
7 | 3 | apskritis | apskr. | Klaipėdos | 2015-12-22 | 1998-06-01 |
8 | 2 | apskritis | apskr. | Kauno | 2015-12-22 | 1998-06-01 |
9 | 6 | apskritis | apskr. | Šiaulių | 2015-12-22 | 1998-06-01 |
apskritys_geo = gp.read_file(f'{base}adr_gra_apskritys.json')
print('Projekcija:', apskritys_geo.crs)
apskritys_geo.info()
apskritys_geo.head()
Projekcija: epsg:3346 <class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 10 entries, 0 to 9 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 FID 10 non-null int64 1 APS_KODAS 10 non-null object 2 APS_PAV 10 non-null object 3 APS_PLOTAS 10 non-null float64 4 APS_R 10 non-null object 5 geometry 10 non-null geometry dtypes: float64(1), geometry(1), int64(1), object(3) memory usage: 608.0+ bytes
FID | APS_KODAS | APS_PAV | APS_PLOTAS | APS_R | geometry | |
---|---|---|---|---|---|---|
0 | 0 | 1 | Alytaus apskr. | 541779.570953 | 1998.06.01 | POLYGON ((517033.280 6047228.310, 517021.480 6… |
1 | 1 | 10 | Vilniaus apskr. | 972981.673801 | 1998.06.01 | POLYGON ((541542.508 6152968.721, 541530.937 6… |
2 | 2 | 2 | Kauno apskr. | 808629.288424 | 1998.06.01 | POLYGON ((451222.341 6159108.385, 451223.985 6… |
3 | 3 | 3 | Klaipėdos apskr. | 522185.494739 | 1998.06.01 | POLYGON ((375215.075 6251267.085, 375253.614 6… |
4 | 4 | 4 | Marijampolės apskr. | 446540.511597 | 1998.06.01 | POLYGON ((445334.000 6106218.000, 445198.000 6… |
apskritys_geo.plot(color='none', edgecolor='whitesmoke', figsize=(16, 10));
savivaldybes = pd.read_csv(f'{base}adr_savivaldybes.csv')
savivaldybes.info()
savivaldybes.head()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 60 entries, 0 to 59 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SAV_KODAS 60 non-null int64 1 TIPAS 60 non-null object 2 TIPO_SANTRUMPA 60 non-null object 3 VARDAS_K 60 non-null object 4 ADM_KODAS 60 non-null int64 5 NUO 60 non-null object 6 SAV_NUO 60 non-null object dtypes: int64(2), object(5) memory usage: 3.4+ KB
SAV_KODAS | TIPAS | TIPO_SANTRUMPA | VARDAS_K | ADM_KODAS | NUO | SAV_NUO | |
---|---|---|---|---|---|---|---|
0 | 86 | savivaldybė | sav. | Švenčionių rajono | 10 | 2015-12-22 | 1998-06-01 |
1 | 63 | savivaldybė | sav. | Pagėgių | 7 | 2015-12-22 | 2000-02-02 |
2 | 85 | savivaldybė | sav. | Šalčininkų rajono | 10 | 2015-12-22 | 1998-06-01 |
3 | 79 | savivaldybė | sav. | Trakų rajono | 10 | 2015-12-22 | 1998-06-01 |
4 | 81 | savivaldybė | sav. | Ukmergės rajono | 10 | 2015-12-22 | 1998-06-01 |
savivaldybes_geo = gp.read_file(f'{base}adr_gra_savivaldybes.json')
print('Projekcija:', savivaldybes_geo.crs)
savivaldybes_geo.info()
savivaldybes_geo.head()
Projekcija: epsg:3346 <class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 60 entries, 0 to 59 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 FID 60 non-null int64 1 SAV_PAV 60 non-null object 2 SAV_KODAS 60 non-null object 3 SAV_PLOTAS 60 non-null float64 4 SAV_R 60 non-null object 5 APS_KODAS 60 non-null object 6 geometry 60 non-null geometry dtypes: float64(1), geometry(1), int64(1), object(4) memory usage: 3.4+ KB
FID | SAV_PAV | SAV_KODAS | SAV_PLOTAS | SAV_R | APS_KODAS | geometry | |
---|---|---|---|---|---|---|---|
0 | 0 | Alytaus m. sav. | 11 | 3943.467594 | 2000.05.01 | 1 | POLYGON ((500756.469 6033988.999, 500746.875 6… |
1 | 1 | Pakruojo r. sav. | 65 | 131518.855923 | 2000.05.01 | 6 | POLYGON ((497655.971 6244106.537, 497632.508 6… |
2 | 2 | Druskininkų sav. | 15 | 45301.086231 | 2000.05.01 | 1 | POLYGON ((492744.946 6004830.915, 492744.590 6… |
3 | 3 | Skuodo r. sav. | 75 | 91095.011082 | 2000.05.01 | 3 | POLYGON ((375150.503 6252016.244, 375147.219 6… |
4 | 4 | Palangos m. sav. | 25 | 7910.994589 | 2000.05.01 | 3 | POLYGON ((320898.639 6219638.600, 320899.123 6… |
savivaldybes_geo.plot(color='none', edgecolor='whitesmoke', figsize=(16, 10));
seniunijos = pd.read_csv(f'{base}adr_seniunijos.csv')
seniunijos.info()
seniunijos.head()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 544 entries, 0 to 543 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SEN_KODAS 544 non-null int64 1 TIPAS 544 non-null object 2 TIPO_SANTRUMPA 544 non-null object 3 VARDAS_K 544 non-null object 4 SAV_KODAS 544 non-null int64 5 NUO 544 non-null object 6 SEN_NUO 544 non-null object dtypes: int64(2), object(5) memory usage: 29.9+ KB
SEN_KODAS | TIPAS | TIPO_SANTRUMPA | VARDAS_K | SAV_KODAS | NUO | SEN_NUO | |
---|---|---|---|---|---|---|---|
0 | 5475 | seniūnija | sen. | Tytuvėnų apylinkių | 54 | 2015-12-22 | 1998-06-01 |
1 | 5290 | seniūnija | sen. | Akademijos | 52 | 2015-12-22 | 1999-01-29 |
2 | 8910 | seniūnija | sen. | Kernavės | 89 | 2015-12-22 | 1998-06-01 |
3 | 8904 | seniūnija | sen. | Alionių | 89 | 2015-12-22 | 1998-06-01 |
4 | 8923 | seniūnija | sen. | Gelvonų | 89 | 2015-12-22 | 1998-06-01 |
seniunijos_geo = gp.read_file(f'{base}adr_gra_seniunijos.json')
print('Projekcija:', seniunijos_geo.crs)
seniunijos_geo.info()
seniunijos_geo.head()
Projekcija: epsg:3346 <class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 544 entries, 0 to 543 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 FID 544 non-null int64 1 SEN_PAV 544 non-null object 2 SEN_KODAS 544 non-null object 3 SEN_PLOTAS 544 non-null float64 4 SEN_R 544 non-null object 5 SAV_KODAS 544 non-null object 6 geometry 544 non-null geometry dtypes: float64(1), geometry(1), int64(1), object(4) memory usage: 29.9+ KB
FID | SEN_PAV | SEN_KODAS | SEN_PLOTAS | SEN_R | SAV_KODAS | geometry | |
---|---|---|---|---|---|---|---|
0 | 0 | Kriūkų sen. | 8435 | 10012.466854 | 1998.06.01 | 84 | POLYGON ((464222.000 6103650.000, 464036.154 6… |
1 | 1 | Šakių sen. | 8483 | 23699.830864 | 1998.06.01 | 84 | POLYGON ((437939.909 6099595.133, 437939.909 6… |
2 | 2 | Raseinių miesto sen. | 7201 | 850.802323 | 1998.06.01 | 72 | POLYGON ((444941.340 6140154.605, 444929.967 6… |
3 | 3 | Riešės sen. | 4168 | 10376.382422 | 1998.06.01 | 41 | POLYGON ((581536.672 6085082.629, 581424.840 6… |
4 | 4 | Skaistgirio sen. | 4756 | 13609.842827 | 1998.06.01 | 47 | POLYGON ((465064.195 6247001.250, 465059.352 6… |
seniunijos_geo.plot(color='none', edgecolor='whitesmoke', figsize=(16, 10));
gyvenvietes = pd.read_csv(f'{base}adr_gyvenamosios_vietoves.csv')
gyvenvietes.info()
gyvenvietes.head()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 21076 entries, 0 to 21075 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 GYV_KODAS 21076 non-null int64 1 TIPAS 21076 non-null object 2 TIPO_SANTRUMPA 21076 non-null object 3 VARDAS 21076 non-null object 4 SEN_KODAS 20949 non-null float64 5 SAV_KODAS 21076 non-null int64 6 NUO 21076 non-null object 7 GYV_NUO 21076 non-null object dtypes: float64(1), int64(2), object(5) memory usage: 1.3+ MB
GYV_KODAS | TIPAS | TIPO_SANTRUMPA | VARDAS | SEN_KODAS | SAV_KODAS | NUO | GYV_NUO | |
---|---|---|---|---|---|---|---|---|
0 | 36802 | kaimas | k. | Aukštieji Karklėnai | 4122.0 | 41 | 2015-12-22 | 1998-06-01 |
1 | 36803 | kaimas | k. | Didieji Karklėnai | 4122.0 | 41 | 2015-12-22 | 1998-06-01 |
2 | 36806 | kaimas | k. | Pupeliai | 4122.0 | 41 | 2015-12-22 | 1998-06-01 |
3 | 12936 | viensėdis | vs. | Dailidžiai | 8910.0 | 89 | 2015-12-22 | 1998-06-01 |
4 | 30265 | kaimas | k. | Valiukiškiai | 8910.0 | 89 | 2015-12-22 | 1998-06-01 |
gyvenvietes_geo = gp.read_file(f'{base}adr_gra_gyvenamosios_vietoves.json')
print('Projekcija:', gyvenvietes_geo.crs)
gyvenvietes_geo.info()
gyvenvietes_geo.head()
Projekcija: epsg:3346 <class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 21030 entries, 0 to 21029 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 FID 21030 non-null int64 1 GYV_KODAS 21030 non-null int64 2 GYV_PAV 21030 non-null object 3 PLOTAS 21030 non-null float64 4 GYV_R 21030 non-null object 5 SAV_KODAS 21030 non-null object 6 geometry 21030 non-null geometry dtypes: float64(1), geometry(1), int64(2), object(3) memory usage: 1.1+ MB
FID | GYV_KODAS | GYV_PAV | PLOTAS | GYV_R | SAV_KODAS | geometry | |
---|---|---|---|---|---|---|---|
0 | 0 | 27009 | Skrodlių vs. | 148.60 | 1998.06.01 | 63 | POLYGON ((367960.585 6127775.869, 367954.410 6… |
1 | 1 | 14343 | Gailiškių vs. | 17.91 | 1998.06.01 | 63 | POLYGON ((364503.632 6126941.414, 364681.141 6… |
2 | 2 | 28918 | Tamošaičių k. | 294.39 | 1998.06.01 | 63 | POLYGON ((370889.142 6126564.789, 370893.048 6… |
3 | 3 | 31177 | Vydutaičių k. | 796.49 | 1998.06.01 | 63 | POLYGON ((372667.582 6121122.573, 372654.820 6… |
4 | 4 | 14159 | Eisraviškių k. | 794.92 | 1998.06.01 | 63 | POLYGON ((369269.430 6122014.090, 369091.090 6… |
gyvenvietes_geo.plot(color='none', edgecolor='whitesmoke', figsize=(16, 10));
Matau, kad kai kurios gyvenvietės nepriskirtos seniūnijai, įdomu, kokios tai gyvenvietės?
gyvenvietes[gyvenvietes['SEN_KODAS'].isnull()].head()
GYV_KODAS | TIPAS | TIPO_SANTRUMPA | VARDAS | SEN_KODAS | SAV_KODAS | NUO | GYV_NUO | |
---|---|---|---|---|---|---|---|---|
452 | 36668 | kaimas | k. | Traksėdis | NaN | 87 | 2015-12-22 | 1998-06-01 |
1909 | 31248 | kaimas | k. | Vaidegiai | NaN | 13 | 2015-12-22 | 1998-06-01 |
2372 | 19969 | kaimas | k. | Mačiuliškės | NaN | 13 | 2015-12-22 | 1998-06-01 |
2386 | 11307 | kaimas | k. | Bališkės | NaN | 13 | 2015-12-22 | 1998-06-01 |
5654 | 31003 | miestas | m. | Vilnius | NaN | 13 | 2015-12-22 | 1998-06-01 |
Turėjau įtarimą, kad gal būt didieji miestai neturi seniūnijos kodo, bet matau, kad yra ir kaimai, gal būt patys kaimai yra seniūnijos?
gyvenvietes['SEN_KODAS'].isnull().sum()
127
seniunijos.shape[0]
544
Viso yra 127 gyvenvietės be seniūnijos kodo, o viso seniūnijų yra 544.
Įdomu, koks duomenų pasiskirstymas, pagal gyvenvietės tipą?
gyvenvietes['TIPAS'].value_counts().plot.barh(logx=True);
gatves = pd.read_csv(f'{base}adr_gatves.csv')
gatves.info()
gatves.head()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 57528 entries, 0 to 57527 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 GAT_KODAS 57528 non-null int64 1 TIPAS 57528 non-null object 2 TIPO_SANTRUMPA 57528 non-null object 3 VARDAS_K 57528 non-null object 4 GYV_KODAS 57528 non-null int64 5 NUO 57528 non-null object 6 GAT_NUO 57528 non-null object dtypes: int64(2), object(5) memory usage: 3.1+ MB
GAT_KODAS | TIPAS | TIPO_SANTRUMPA | VARDAS_K | GYV_KODAS | NUO | GAT_NUO | |
---|---|---|---|---|---|---|---|
0 | 1122775 | gatvė | g. | Pyvesos | 27713 | 2015-12-22 | 2011-10-11 |
1 | 1842758 | gatvė | g. | Jakštaičių | 28338 | 2015-12-22 | 1998-06-01 |
2 | 1680705 | gatvė | g. | Sembos | 28338 | 2015-12-22 | 1998-06-01 |
3 | 1169339 | gatvė | g. | Miško | 22902 | 2015-12-22 | 1998-06-01 |
4 | 1686646 | gatvė | g. | Saulėtekio | 15691 | 2015-12-22 | 1998-06-01 |
gatves_geo = gp.read_file(f'{base}adr_gra_gatves.json')
print('Projekcija:', gatves_geo.crs)
gatves_geo.info()
gatves_geo.head()
Projekcija: epsg:3346 <class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 57520 entries, 0 to 57519 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 FID 57520 non-null int64 1 GAT_KODAS 57520 non-null int64 2 GAT_PAV 57520 non-null object 3 GTV_R 57520 non-null object 4 GAT_ILGIS 57520 non-null float64 5 GYV_KODAS 57520 non-null int64 6 geometry 57520 non-null geometry dtypes: float64(1), geometry(1), int64(3), object(2) memory usage: 3.1+ MB
FID | GAT_KODAS | GAT_PAV | GTV_R | GAT_ILGIS | GYV_KODAS | geometry | |
---|---|---|---|---|---|---|---|
0 | 0 | 1697051 | Daržų g. | 1998.06.01 | 75.936085 | 28544 | LINESTRING (571800.179 6178796.241, 571785.493… |
1 | 1 | 1189371 | Pandėlio g. | 1998.06.01 | 566.298773 | 26821 | LINESTRING (575174.925 6196297.189, 575186.860… |
2 | 2 | 1332051 | Panevėžio g. | 1998.06.01 | 689.658467 | 27758 | LINESTRING (546695.493 6181477.157, 546648.563… |
3 | 3 | 1225199 | Medžiotojų g. | 1998.06.01 | 344.376186 | 27758 | LINESTRING (546748.207 6181064.186, 546663.208… |
4 | 4 | 1475081 | Kupiškio g. | 1998.06.01 | 844.903611 | 27758 | LINESTRING (546730.928 6181998.674, 546799.545… |
gatves_geo.plot(color='white', alpha=.2, figsize=(16, 10));
Įdomu, koks yra gatvių pasiskirstymas laike?
pd.to_datetime(gatves['GAT_NUO']).dt.year.value_counts().plot.bar();
Įdomu, kodėl 2011 metais buvo staigus naujų įregistruotų gatvių šuolis?
Top 10 gyvenviečių, pagal gatvių skaičių?
(
gatves['GYV_KODAS'].value_counts().to_frame(name='GATVIŲ_SK').
join(gyvenvietes.set_index('GYV_KODAS')[['VARDAS', 'TIPAS']], how='inner').
sort_values('GATVIŲ_SK', ascending=False).
head(10)
)
GATVIŲ_SK | VARDAS | TIPAS | |
---|---|---|---|
31003 | 2866 | Vilnius | miestas |
17507 | 1681 | Kaunas | miestas |
28338 | 648 | Šiauliai | miestas |
23485 | 535 | Panevėžys | miestas |
18067 | 495 | Klaipėda | miestas |
20249 | 330 | Marijampolė | miestas |
23195 | 325 | Palanga | miestas |
13428 | 293 | Dercekliai | kaimas |
10278 | 278 | Alytus | miestas |
29090 | 255 | Telšiai | miestas |
Keista, kad kaimas „Dercekliai“ turi tiek daug gatvių. Gal aš kažką ne taip darau?
(
gatves['GYV_KODAS'].value_counts().to_frame(name='GATVIŲ_SK').
join(gyvenvietes.set_index('GYV_KODAS')['VARDAS'].rename('MIESTAS'), how='inner').
sort_values('GATVIŲ_SK', ascending=False).
set_index('MIESTAS', drop=True).
head(10).plot.barh()
);
adresai = pd.read_csv(f'{base}adr_stat_lr.csv', low_memory=False)
adresai.info()
adresai.head()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1036251 entries, 0 to 1036250 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SAV_KODAS 1036251 non-null int64 1 AOB_KODAS 1036251 non-null int64 2 GYV_KODAS 1036251 non-null int64 3 GAT_KODAS 965309 non-null float64 4 NR 1036251 non-null object 5 KORPUSO_NR 2490 non-null object 6 PASTO_KODAS 1023716 non-null object 7 NUO 1036251 non-null object 8 AOB_NUO 1036251 non-null object dtypes: float64(1), int64(3), object(5) memory usage: 71.2+ MB
SAV_KODAS | AOB_KODAS | GYV_KODAS | GAT_KODAS | NR | KORPUSO_NR | PASTO_KODAS | NUO | AOB_NUO | |
---|---|---|---|---|---|---|---|---|---|
0 | 34 | 155328408 | 10403 | 1204934.0 | 1 | NaN | LT-29106 | 2015-12-22 | 2005-01-25 |
1 | 34 | 155328412 | 10403 | 1204934.0 | 7 | NaN | LT-29107 | 2015-12-22 | 2005-01-25 |
2 | 34 | 155328427 | 10403 | 1204934.0 | 9 | NaN | LT-29107 | 2015-12-22 | 2005-01-25 |
3 | 34 | 155328431 | 10403 | 1204934.0 | 3 | NaN | LT-29107 | 2015-12-22 | 2005-01-25 |
4 | 34 | 155328446 | 10403 | 1204934.0 | 5 | NaN | LT-29107 | 2015-12-22 | 2005-01-25 |
adresai_geo = pd.concat([
(
gp.read_file(f'{base}adr_gra_{sav_kodas}.json').
set_index('AOB_KODAS', drop=True)
)
for sav_kodas in savivaldybes['SAV_KODAS']
])
print('Projekcija:', adresai_geo.crs)
adresai_geo.info()
adresai_geo.head()
Projekcija: epsg:3346 <class 'geopandas.geodataframe.GeoDataFrame'> Int64Index: 1036251 entries, 158648089 to 192533876 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 FID 1036251 non-null int64 1 GYV_KODAS 1036251 non-null int64 2 GAT_KODAS 1036251 non-null int64 3 X_KOORD 1036251 non-null int64 4 Y_KOORD 1036251 non-null int64 5 AOB_R 1036251 non-null object 6 AOB_RK 1036251 non-null object 7 AOB_ATR_KO 1036251 non-null object 8 PASTO_KODA 1036251 non-null object 9 E_KOORD 1036251 non-null float64 10 N_KOORD 1036251 non-null float64 11 geometry 1036251 non-null geometry dtypes: float64(2), geometry(1), int64(5), object(4) memory usage: 102.8+ MB
FID | GYV_KODAS | GAT_KODAS | X_KOORD | Y_KOORD | AOB_R | AOB_RK | AOB_ATR_KO | PASTO_KODA | E_KOORD | N_KOORD | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
AOB_KODAS | ||||||||||||
158648089 | 0 | 28838 | 1224063 | 636663 | 6112054 | 2005.09.08 | 2005.09.08 | 2005.09.08 | LT-18123 | 26.142837 | 55.125299 | POINT (636663.000 6112054.000) |
156447422 | 1 | 28838 | 1476198 | 638846 | 6112863 | 2005.09.08 | 2005.09.08 | 2005.09.08 | LT-18110 | 26.177434 | 55.131956 | POINT (638846.000 6112863.000) |
156230625 | 2 | 28838 | 1224044 | 639677 | 6111708 | 2005.09.08 | 2005.09.08 | 2005.09.08 | LT-18130 | 26.189888 | 55.121353 | POINT (639677.000 6111708.000) |
158656083 | 3 | 28838 | 1224059 | 637001 | 6112783 | 2005.09.08 | 2005.09.08 | 2005.09.08 | LT-18112 | 26.148485 | 55.131751 | POINT (637001.000 6112783.000) |
158656102 | 4 | 28838 | 1224059 | 636979 | 6112750 | 2005.09.08 | 2005.09.08 | 2005.09.08 | LT-18112 | 26.148124 | 55.131461 | POINT (636979.000 6112750.000) |
adresai_geo.plot(markersize=1, color='white', alpha=.1, figsize=(16, 10));
Adresai yra žymiai įdomesnis dalykas, nes galima juos galima labai įvairiai panaudoti.
Pavyzdžiui galima galima surasti gatvę, kuriai priklauso daugiausiai adresų:
(
adresai.
groupby(['GYV_KODAS', 'GAT_KODAS']).size().to_frame(name='ADRESU_SK').
join(gatves.set_index(['GYV_KODAS', 'GAT_KODAS'])['VARDAS_K'].rename('GATVE')).
join(gyvenvietes.set_index('GYV_KODAS')['VARDAS'].rename('GYVENVIETE')).
sort_values('ADRESU_SK', ascending=False).
head(10)
)
ADRESU_SK | GATVE | GYVENVIETE | ||
---|---|---|---|---|
GYV_KODAS | GAT_KODAS | |||
31003 | 1249222.0 | 450 | Kryžiokų | Vilnius |
17507 | 1228843.0 | 447 | Savanorių | Kaunas |
1440312.0 | 422 | Raudondvario | Kaunas | |
1685119.0 | 359 | Panerių | Kaunas | |
1666842.0 | 353 | Taikos | Kaunas | |
31003 | 1213806.0 | 347 | Kalvarijų | Vilnius |
17507 | 1822199.0 | 303 | Partizanų | Kaunas |
23195 | 1540158.0 | 294 | Vaivorykštės | Palanga |
23485 | 1853838.0 | 288 | Pušaloto | Panevėžys |
28338 | 1808742.0 | 283 | Vilniaus | Šiauliai |
Arba, galima paskaičiuoti, kuriame mieste daugiausiai registruotų adresų:
(
adresai.
groupby('GYV_KODAS').size().to_frame(name='ADRESU_SK').
join(gyvenvietes.set_index('GYV_KODAS')['VARDAS'].rename('GYVENVIETE')).
sort_values('ADRESU_SK', ascending=False).
head(10)
)
ADRESU_SK | GYVENVIETE | |
---|---|---|
GYV_KODAS | ||
31003 | 71542 | Vilnius |
17507 | 48779 | Kaunas |
28338 | 19164 | Šiauliai |
23485 | 15883 | Panevėžys |
18067 | 12197 | Klaipėda |
23195 | 9672 | Palanga |
20249 | 7074 | Marijampolė |
10278 | 6875 | Alytus |
13428 | 6421 | Dercekliai |
29534 | 5725 | Ukmergė |
Įdomu, kuriame kaime registruota daugiausiai adresų?
(
adresai.
groupby('GYV_KODAS').size().to_frame(name='ADRESU_SK').
join(
gyvenvietes[gyvenvietes['TIPAS'] == 'kaimas'].
set_index('GYV_KODAS')['VARDAS'].rename('KAIMAS'),
how='inner',
).
sort_values('ADRESU_SK', ascending=False).
head(10)
)
ADRESU_SK | KAIMAS | |
---|---|---|
GYV_KODAS | ||
13428 | 6421 | Dercekliai |
30131 | 2563 | Vaiteliai |
18821 | 2546 | Kurmaičiai |
29390 | 2469 | Trušeliai |
10126 | 2343 | Akmeniškės |
12210 | 2279 | Brinkiškės |
25539 | 2251 | Rastinėnai |
31793 | 2073 | Žiaukos |
13690 | 2031 | Domeikava |
13742 | 1989 | Drąseikiai |
Vėl pasirodė „Dercekliai“, pažiūrėjau žemėlapyje, tai yra didelė sodų bendrija, Klaipėdos rajone.
Įdomu, kaip keičiasi įregistruotų adresų skaičius laike?
(
adresai.
join(pd.to_datetime(adresai['AOB_NUO']).dt.year.rename('METAI')).
groupby(['GYV_KODAS', 'METAI']).size().to_frame(name='ADRESU_SK').
reset_index(level=-1).
join(gyvenvietes.set_index('GYV_KODAS')['TIPAS']).
groupby(['TIPAS', 'METAI'])['ADRESU_SK'].sum().cumsum().
unstack(level=0).
dropna().
sort_index().
plot(figsize=(10, 6))
);
patalpos = pd.read_csv(f'{base}adr_pat_lr.csv', low_memory=False)
patalpos.info()
patalpos.head()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1097082 entries, 0 to 1097081 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SAV_KODAS 1097082 non-null int64 1 PAT_KODAS 1097082 non-null int64 2 AOB_KODAS 1097082 non-null int64 3 PATALPOS_NR 1097082 non-null object 4 NUO 1097082 non-null object 5 PAT_NUO 1097082 non-null object dtypes: int64(3), object(3) memory usage: 50.2+ MB
SAV_KODAS | PAT_KODAS | AOB_KODAS | PATALPOS_NR | NUO | PAT_NUO | |
---|---|---|---|---|---|---|
0 | 29 | 160315148 | 158100896 | 406 | 2015-12-22 | 2009-05-08 |
1 | 29 | 160343261 | 158100896 | 516 | 2015-12-22 | 2009-05-08 |
2 | 29 | 160338615 | 158100896 | 514 | 2015-12-22 | 2009-05-08 |
3 | 29 | 160352353 | 158100896 | 503 | 2015-12-22 | 2009-05-08 |
4 | 29 | 160354337 | 158100896 | 513 | 2015-12-22 | 2009-05-08 |
Kaip suprantu, viename adrese gali būti kelios patalpos?
patalpos['AOB_KODAS'].value_counts().rename('ADRESAS').plot.box(vert=False, logx=True);
Labai keista, jei teisingai suprantu, tai vienu adresu, daugeliu atveju registruotos kelios patalpos, bet yra pavieniai atvejai, kur vienu adresu yra registruotą tūkstančiai patalpų.
Bando pažiūrėti kokiais adresais registruota daugiausiai patalpų:
(
patalpos['AOB_KODAS'].value_counts().to_frame(name='PATALPU_SK').
join(adresai.set_index('AOB_KODAS')).
set_index(['GYV_KODAS', 'GAT_KODAS']).
join(gatves.set_index(['GYV_KODAS', 'GAT_KODAS'])['VARDAS_K'].rename('GATVE')).
join(gyvenvietes.set_index('GYV_KODAS')['VARDAS'].rename('GYVENVIETE')).
sort_values('PATALPU_SK', ascending=False).
head(10).reset_index(drop=True)[[
'GYVENVIETE',
'GATVE',
'NR',
'PATALPU_SK',
]]
)
GYVENVIETE | GATVE | NR | PATALPU_SK | |
---|---|---|---|---|
0 | Elektrėnai | Elektrinės | 4 | 1291 |
1 | Visaginas | Taikos | 39 | 857 |
2 | Visaginas | Kosmoso | 9C | 661 |
3 | Klaipėda | Šilutės | 100 | 608 |
4 | Utena | Rašės | 11 | 547 |
5 | Kaunas | Pramonės | 19 | 528 |
6 | Vilnius | Kazio Ulvydo | 11 | 503 |
7 | Utena | Šilinės | 7 | 495 |
8 | Druskininkai | Ringeliškės | 12 | 489 |
9 | Jonava | Virbalų | 21 | 483 |
Gal būt, čia kažkokioms gamykloms priklausančios patalpos?
Kaip keičiasi patalpų skaičius laike?
(
patalpos.
join(pd.to_datetime(patalpos['PAT_NUO']).dt.year.rename('METAI')).
set_index('AOB_KODAS').
join(adresai.set_index('AOB_KODAS')['GYV_KODAS']).
groupby(['GYV_KODAS', 'METAI']).size().to_frame(name='ADRESU_SK').
reset_index(level=-1).
join(gyvenvietes.set_index('GYV_KODAS')['TIPAS']).
groupby(['TIPAS', 'METAI'])['ADRESU_SK'].sum().cumsum().
unstack(level=0).
dropna().
sort_index().
plot(figsize=(10, 6))
);
Keista, kad viensėdžiuose tiek dauga patalpų, daugiau nei miestuose.
Įdomu, koks adresų pasiskirstymas žemėlapyje, pagal gyvenvietės tipą?
(
adresai_geo.set_index('GYV_KODAS').
join(gyvenvietes.set_index('GYV_KODAS')['TIPAS']).
plot(markersize=1, alpha=.2, column='TIPAS', legend=True, figsize=(16, 10))
);
Kuriose vietose yra daugiausiai adresų?
fig, ax = plt.subplots(figsize=(16, 10))
hb = plt.hexbin(
adresai_geo.geometry.x,
adresai_geo.geometry.y,
C=adresai_geo.any(axis=1),
reduce_C_function=sum,
gridsize=50,
cmap='hot',
)
plt.colorbar(hb, ax=ax)
savivaldybes_geo.plot(ax=ax, color='none', edgecolor='lightgray');
Kuriose vietose yra daugiausiai patalpų?
df = adresai_geo.join(patalpos['AOB_KODAS'].value_counts().rename('PATALPU_SK'))
fig, ax = plt.subplots(figsize=(16, 10))
hb = plt.hexbin(
df.geometry.x,
df.geometry.y,
C=df['PATALPU_SK'],
reduce_C_function=sum,
gridsize=50,
cmap='hot',
)
plt.colorbar(hb, ax=ax)
savivaldybes_geo.plot(ax=ax, color='none', edgecolor='lightgray');