import requests, pandas as pd, numpy as np
from requests import session
from bs4 import BeautifulSoup
url='http://www.omnibus.ro/index.php/hu/szekelyfoldi-top-listak/arbevetel/also-haromszek-2015-2018#oldal'
r = requests.get(url)
for c in r.cookies:
print(c.name, c.value)
__cfduid ddf927e7801beda5fe82f1d16dfea29e81578227078 PHPSESSID 37tq2cosotem3rha99bjdhd280
url='http://www.omnibus.ro/index.php/hu/szekelyfoldi-top-listak/kozbirtokossag/top25-kozbirtokossag-2019#oldal'
with session() as c:
response = c.get(url)
#print(response.headers)
#print(response.text)
df=pd.read_html(response.text)[1]
df.columns=list(df.loc[0])
df=df.loc[2:]
#df=df[df.columns[1:-1]]
df=df.loc[list(df.index)[:-1]]
#df['nr']=df.index
soup = BeautifulSoup(response.content)
links=soup.findAll('table')[3].findAll('a')
coords=[]
kws=[]
cms=[]
for i in range(len(links)):
print(i,)
r=requests.get(links[i]['href'])
g=repr(r.content)
coord_start=g.find('GLatLng')
coord_end=coord_start+g[coord_start:].find(')')
coord=g[coord_start+len('GLatLng')+1:coord_end].split(',')
kw_start=g.find('<meta name="keywords')
kw_end=kw_start+g[kw_start:].find('/>')
kw=g[kw_start+len('<meta name="keywords" content="'):kw_end].split(',')
kw=[i.strip() for i in kw]
cm_start=g.find('<b>Cím:</b>')
cm_end=cm_start+g[cm_start:].find('<br>')
cm=g[cm_start+len('<b>Cím:</b>'):cm_end].strip()
coords.append(coord)
kws.append(kw)
cms.append(cm)
df=df[:len(links)]
df['coords']=coords
df['kws']=kws
df['cms']=cms
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:24: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:25: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:26: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df.to_csv('kozb.csv',sep=';')
df=pd.read_csv('kozb.csv',sep=';')
data=pd.DataFrame(df)
lat=[]
lon=[]
for i in range(len(data.index)):
k=str(data.loc[data.index[i]]['coords']).replace("'",'').replace('[','')\
.replace(']','').replace(' ','').split(',')
lon.append(k[0])
lat.append(k[1])
data['Latitude']=lat
data['Longitude']=lon
data=data.drop('coords',axis=1)
data=data[data.columns[2:]]
manual=data[data['Longitude']=='']
data=data[data['Longitude']!='']
data.to_excel('kdata.xlsx')
manual.to_excel('kmanual.xlsx')
manual.to_excel('kmanual_manual.xlsx')
Fix sector, address data and coordinates manually
data=pd.read_excel('kdata.xlsx')
manual=pd.read_excel('kmanual_manual.xlsx')
data=pd.concat([data.set_index('Közbirtokosság neve'),manual.set_index('Közbirtokosság neve')])
sectors=pd.read_excel('sectors.xlsx')
sectormap={}
repl={'á':'a','é':'e','í':'i','ó':'o','ú':'u','ü':'u','ű':'u','ő':'o','ö':'o'}
for s in sectors.columns:
for k in sectors[s].values:
for j in str(k).replace(' ','').split(','):
sectormap[j]=s
for c in repl:
j=j.replace(c,repl[c])
sectormap[j]=s
valid=[]
kws=[]
ki=-1
for i in range(len(data.index)):
ks=data.loc[data.index[i]]['kws'].replace("'",'').replace('[','')\
.replace(']','').replace(' ','').lower().split(',')[:-2]
for k in ks:
if k in sectormap:
kws.append(sectormap[k])
break
k=k.replace('-','')
if k in sectormap:
kws.append(sectormap[k])
break
if len(kws)<i-1:
print('ERROR',ks,i)
break
else:
#print('SUCCES',kws[-1],ks)
valid.append([data.index[i],kws[-1],ks])
pd.DataFrame(valid).to_excel('kvalid.xlsx')
pd.DataFrame(valid).to_excel('kvalid_manual.xlsx')
Manual check and overwrite
manual=pd.read_excel('kmanual_manual.xlsx').set_index('Közbirtokosság neve')
data=pd.read_excel('kdata.xlsx').set_index('Közbirtokosság neve')
sectors=pd.read_excel('kvalid_manual.xlsx')
len(data), len(manual)
(23, 2)
data=pd.concat([data,manual])
data
Unnamed: 0 | Helyezés.1 | Szék | Gazdasági tevékenységbőlszármazó bevétel (RON)2018 | Gazdasági tevékenységbőlszármazó bevétel (RON)2017 | kws | cms | Latitude | Longitude | |
---|---|---|---|---|---|---|---|---|---|
Közbirtokosság neve | |||||||||
GYERGYÓALFALUI KÖZBIRTOKOSSÁG/ COMPOSESORATUL JOSENI | 0 | 1 | Gyergyószék | 11 017 249 | 10 744 216 | ['kozbirtokossagok', 'erdokitermeles', '', '"'] | 537130, Gyergy\xf3alfalu, F\xf5 u., 663\t | 25.515620 | 46.680137 |
ZETELAKI KÖZBIRTOKOSSÁG/ COMPOSESORAT ZETEA | 2 | 2 | Udvarhelyszék | 7 620 294 | 7 011 349 | ['allattenyesztes', 'csemetekert', 'erdogazdal... | 537360, Zetelaka, F\xf5 u., 272\t | 25.366667 | 46.383333 |
SZOVÁTAI MAROS KÖZBIRTOKOSSÁG/ COMPOSESORATUL MURESUL SOVATA | 3 | 3 | Marosszék | 7 125 940 | 5 297 852 | ['kozbirtokossagok', '', '"'] | 545500, Szov\xe1ta, Iszujka u., 1\t | 25.077440 | 46.599080 |
HOMORÓDALMÁSI KÖZBIRTOKOSSÁG/ COMPOSESORAT MERESTI | 5 | 17 | Udvarhelyszék | 3 958 246 | 2 058 345 | ['erdeszeti-szolgaltatasok', 'erdogazdalkodas'... | 537195, Homor\xf3dalm\xe1s, F\xf5 u., 503\t | 25.456996 | 46.234392 |
CSÍKSZENTIMREI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA SINTIMBRU CIUC | 6 | 11 | Csíkszék | 3 836 591 | 2 397 785 | ['kozbirtokossagok', '', '"'] | 537271, Cs\xedkszentimre, F\xf5 u., 572/A\t | 25.862959 | 46.284012 |
BORSZÉK KÖZBIRTOKOSSÁG GYERGYÓSZÁRHEGY/ COMPOSESORATUL BORSEC LAZAREA | 7 | >25 | Gyergyószék | 3 660 937 | 1 122 063 | ['kozbirtokossagok', '', '"'] | 537135, Gyergy\xf3sz\xe1rhegy, , 702\t | 25.531790 | 46.744120 |
CSÍKSZENTGYÖRGYI KÖZBIRTOKOSSÁG/ COMPOSESORATUL CIUCSANGEORGIU | 8 | 6 | Csíkszék | 3 451 456 | 3 256 805 | ['kozbirtokossagok', '', '"'] | 537040, Cs\xedkszentgy\xf6rgy, , 189\t | 25.960130 | 46.323230 |
GYERGYÓSZENTMIKLÓSI KÖZBIRTOKOSSÁG/ COMPOSESORATUL GHEORGHENI | 9 | 5 | Gyergyószék | 3 349 378 | 3 407 803 | ['kozbirtokossagok', '', '"'] | 535500, Gyergy\xf3szentmikl\xf3s, Pet\xf5fi S\... | 25.607200 | 46.722991 |
KILYÉNFALVA KÖZBIRTOKOSSÁGA/ COMPOSESORATUL CHILENI | 10 | 20 | Gyergyószék | 3 096 467 | 1 969 503 | ['erdokitermeles', 'kozbirtokossagok', '', '"'] | 537306, Kily\xe9nfalva, F\xf5 u., 35\t | 25.802604 | 45.835985 |
PAPOLCI IMREH ALBERT KÖZBIRTOKOSSÁG/ COMPOSESORATUL IMREH ALBERT PAPAUTI | 11 | 7 | Felső-Háromszék | 3 095 199 | 3 154 109 | ['kozbirtokossagok', '', '"'] | 527186, Papolc, , 29\t | 26.142945 | 45.788646 |
CSÍKCSEKEFALVI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA CIUCANI | 12 | 9 | Csíkszék | 2 895 087 | 2 853 724 | ['kozbirtokossagok', '', '"'] | 537281, Cs\xedkcsekefalva, F\xf5 u., 77\t | 25.946410 | 46.254800 |
CSÍKCSICSÓI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA CICEU | 13 | 12 | Csíkszék | 2 753 868 | 2 380 248 | ['kozbirtokossagok', '', '"'] | 537297, Cs\xedkcsics\xf3, F\xf5 u., 650/A\t | 25.779990 | 46.410470 |
NYÁRÁDREMETE KÖZBIRTOKOSSÁGA/ COMPOSESORATUL EREMITU | 14 | 14 | Marosszék | 2 531 413 | 2 340 887 | ['kozbirtokossagok', '', '"'] | 547210, Ny\xe1r\xe1dremete, , 379C\t | 24.927360 | 46.660980 |
CSÍKMADARASI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA MADARAS CIUC | 15 | 15 | Csíkszék | 2 460 000 | 2 169 124 | ['kozbirtokossagok', '', '"'] | 537071, Cs\xedkmadaras, F\xf5 u., 192\t | 25.749840 | 46.494020 |
CSÍKSZENTMÁRTONI AKLOS KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA AKLOS SINMARTIN | 16 | >25 | Csíkszék | 2 383 491 | 1 325 654 | ['kozbirtokossagok', '', '"'] | 537280, Cs\xedkszentm\xe1rton, F\xf5 u., 55\t | 25.949280 | 46.266350 |
CSÍKSZENTDOMOKOSI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA SANDOMINIC | 17 | 10 | Csíkszék | 2 352 930 | 2 504 405 | ['kozbirtokossagok', '', '"'] | 537275, Cs\xedkszentdomokos, F\xf5 u., 1243\t | 25.789032 | 46.579749 |
CSÍKBÁNKFALVI KÖZBIRTOKOSSÁG/ COMPOSESORATUL BANCU | 18 | 19 | Csíkszék | 2 338 527 | 1 975 920 | ['kozbirtokossagok', '', '"'] | 537043, Cs\xedkb\xe1nkfalva, F\xf5 u., 344\t | 25.943230 | 46.301690 |
OZSDOLAI LÁROS TULAJDONOSI EGYESÜLET/ ASOCIATIE PROPRIETARILOR RAMASI IN INDIVIZIUNE LAROS OJDULA | 19 | >25 | Felső-Háromszék | 2 295 564 | 1 496 973 | ['kozbirtokossagok', '', '"'] | 527125, Ozsdola, F\xf5 u., 588\t | 26.250000 | 45.983333 |
GYERGYÓCSOMAFALVA KÖZBIRTOKOSSÁGA/ COMPOSESORATUL CIUMANI | 20 | >25 | Gyergyószék | 2 102 835 | 1 083 769 | ['erdokitermeles', 'kozbirtokossagok', '', '"'] | 537050, Gyergy\xf3csomafalva, F\xf5 u., 14\t | 25.517272 | 46.685406 |
GYERGYÓÚJFALU KÖZBIRTOKOSSÁGA/ COMPOSESORATUL SUSENI | 21 | 13 | Gyergyószék | 2 082 335 | 2 342 408 | ['erdokitermeles', 'kozbirtokossagok', '', '"'] | 537305, Gyergy\xf3\xfajfalu, F\xf5 u., 1039\t | 25.555311 | 46.666291 |
SZÉKELYSZÁLDOBOSI KÖZBIRTOKOSSÁG/ COMPOSESORAT DOBOSENI | 22 | >25 | Alsó-Háromszék | 2 017 143 | 1 422 398 | ['kozbirtokossagok', '', '"'] | 527056, Sz\xe9kelysz\xe1ldobos, F\xf5 u., 143\t | 25.593349 | 46.127242 |
CSÍKSZENTKIRÁLYI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA SINCRAIENI | 23 | 22 | Csíkszék | 1 894 630 | 1 881 032 | ['kozbirtokossagok', '', '"'] | 537265, Cs\xedkszentkir\xe1ly, F\xf5 u., 160/A\t | 25.839444 | 46.313333 |
CSÍKDÁNFALVI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA DANESTI | 24 | >25 | Csíkszék | 1 879 072 | 1 669 899 | ['kozbirtokossagok', '', '"'] | 537070, Cs\xedkd\xe1nfalva, F\xf5 u., 775\t | 25.750000 | 46.516667 |
CSÍKJENŐFALVI TERCS KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA TERCS INEU | 1 | 18 | Csíkszék | 8 102 468 | 1 982 088 | ['kozbirtokossagok','', '"'] | Csikjenofalva | 25.758609 | 46.451575 |
GYERGYÓDITRÓI KÖZBIRTOKOSSÁG/ COMPOSESORATUL DITRAU | 4 | 16 | Gyergyószék | 4 276 682 | 2 157 196 | ['kozbirtokossagok','', '"'] | Ditrau | 25.491271 | 46.803146 |
data['Sector']=sectors.set_index(0)[1]
data.columns
Index(['Unnamed: 0', 'Helyezés.1', 'Szék', 'Gazdasági tevékenységbőlszármazó bevétel (RON)2018', 'Gazdasági tevékenységbőlszármazó bevétel (RON)2017', 'kws', 'cms', 'Latitude', 'Longitude', 'Sector'], dtype='object')
data=data[['Gazdasági tevékenységbőlszármazó bevétel (RON)2018',
'Gazdasági tevékenységbőlszármazó bevétel (RON)2017', 'Szék',
'Latitude', 'Longitude', 'Sector']]
data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']=\
np.round(data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018'].str.replace('\xa0','').astype(float)/1000000.0,3)
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
data['Gazdasági tevékenységbőlszármazó bevétel (RON)2017']=\
np.round(data['Gazdasági tevékenységbőlszármazó bevétel (RON)2017'].str.replace('\xa0','').astype(float)/1000000.0,3)
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
Pretty Names
data.index=data.index.str.title().str.split('/').str[0].str.replace('Közbirtokosság','KB').str.replace('KBa','KB').str.replace('KB','')
#overwrite sector
data['Sector']='Közbirtokosság'
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
data['Size']=data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']*5
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy """Entry point for launching an IPython kernel.
data.to_excel('kexport.xlsx')
d2017=data[['Gazdasági tevékenységbőlszármazó bevétel (RON)2017']]
d2017.columns=['Gazdasági tevékenységbőlszármazó bevétel (millió RON)']
d2017['Év']=2017
d2018=data[['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']]
d2018.columns=['Gazdasági tevékenységbőlszármazó bevétel (millió RON)']
d2018['Év']=2018
d2=pd.concat([d2017,d2018])
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy This is separate from the ipykernel package so we can avoid doing imports until C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:6: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
d2.join(data).to_excel('kexport2.xlsx')