In [1]:
import pandas as pd
Ha nincs meg minden bővítőcsomag, akkor feltesszük ezeket console
-ból vagy !
a cella elejére.
In [2]:
!pip install xlrd
Pandasban az táblázatatok DataFrame
-ek.
In [3]:
df=pd.read_excel('set-date-deschise-vtp2015.xlsx')
Vízszintes sorok nevei
In [4]:
df.index
Out[4]:
Oszlopok nevei
In [5]:
df.columns
Out[5]:
Első néhány sor
In [6]:
df.head(2)
Out[6]:
Utolsó néhány sor
In [7]:
df.tail(2)
Out[7]:
Szűrés több oszlop szerint
In [8]:
az_en_oszlopom=['varsta','Cetatenie','gen']
df2=df[az_en_oszlopom].head(2)
df2
Out[8]:
Szűrés egyetloen oszlopra lehet Series
vagy DataFrame
.
In [9]:
print(type(df[['varsta']]))
print(type(df['varsta']))
Sorok szerinti szűrés
In [10]:
az_en_indexem=[2,4,67]
df3=df.loc[az_en_indexem]
df3
Out[10]:
Pnadas dokumentációban van sok más típusú szűrés (iloc
, xslice
) és még sok más.
Új oszlop hozzáadása.
In [11]:
df['uj']=42
Új oszlop egyenlő méretű listát kell tartalmazzon a DataFrame
sorai számával.
In [12]:
df['uj2']=range(880)
df['uj2']=range(len(df))
#df['uj2']=range(870) #nem mukodik
Exportálás pl. Excelbe
In [13]:
df[['gen','varsta','Destinatie_tara1']].to_excel('enyim.xlsx')
Egyediségvizsgálat
In [14]:
len(df)
Out[14]:
In [15]:
len(df['Destinatie_tara1'].unique())
Out[15]:
Számolás NaN
elemek nélkül.
In [16]:
df.count()
Out[16]:
Egyedi számolás NaN
elemek nélkül.
In [17]:
df.nunique()
Out[17]:
Csoportosítani oszlopok szerint
In [18]:
df.groupby(['judet_domiciliu','Destinatie_tara1']).mean() #tobb oszlop is lehet a szuro
Out[18]:
In [19]:
df4=df.groupby(['Destinatie_tara1']).mean()
In [20]:
df4=df4[['varsta']]
In [21]:
az_en_indexem=list(df4.index)
In [22]:
az_en_indexem[2]
Out[22]:
In [23]:
az_en_indexem[2:]
Out[23]:
Listák vágása (slicing) / szeletelése
In [24]:
az_en_indexem[:2]
Out[24]:
In [25]:
az_en_indexem[2:7]
Out[25]:
"Hány elemenként"
In [26]:
az_en_indexem[::3]
Out[26]:
In [27]:
az_en_indexem[::-1]
Out[27]:
Pythonic list composition
for
és if
parancsok
In [28]:
for elem in az_en_indexem[:4]:
print(elem)
In [29]:
for i,elem in enumerate(az_en_indexem[:4]):
print(i,elem)
In [30]:
for i in range(5):
print(i,az_en_indexem[i])
range(honnan,hova,mekkora lepes=1)
In [31]:
for i in range(3,8):
print(i,az_en_indexem[i])
Elegánsabb szűrés
In [32]:
for elem in az_en_indexem:
if ( (elem==18) or (elem==999) ):
print(elem)
In [33]:
tiltolista=[18,999]
for elem in az_en_indexem:
if elem in tiltolista:
print(elem)
In [34]:
for elem in az_en_indexem:
if ( (elem!=18) and (elem!=999) ):
print(elem)
In [35]:
for elem in az_en_indexem:
if elem not in tiltolista:
print(elem)
In [36]:
uj_index=[]
for elem in az_en_indexem:
if elem not in [18,999]:
uj_index.append(elem)
In [37]:
uj_index
Out[37]:
In [38]:
[i for i in range(5)]
Out[38]:
In [39]:
uj_index2=[elem for elem in az_en_indexem if elem not in tiltolista]
In [40]:
uj_index2
Out[40]:
Uj index szerinti szűrés
In [41]:
df4.loc[uj_index2].head(4)
Out[41]:
In [42]:
df5=df4.loc[uj_index2]
In [43]:
df5=df5.reset_index()
In [44]:
df5[['Destinatie_tara1']].replace('Belgia','Belgium').replace('Cehia','Cseh')
Out[44]:
Python dictionary
, azaz szotar: {key1:value2, key2: value2, ...}
In [45]:
nev_cserelo={'Belgia':'Belgium','Cehia':'Cseh'}
df5[['Destinatie_tara2']]=df5[['Destinatie_tara1']].replace(nev_cserelo)
In [46]:
df5.set_index('Destinatie_tara2')[['varsta']].to_excel('df5.xlsx')
In [47]:
df5=df5.set_index('Destinatie_tara2')[['varsta']]
df5.to_excel('df5.xlsx')
Geometria hozzatarsitas. Ezeket shapefile
-típusú fájlokban találjuk. Ezeke ArcGIS. A shapefile
fájlok nagyok, Csak az ArcGIS nyithatóak - ezért van egy nyílt standard, ez a geojson
. (De a geojson
elég régi és van egy újabb stnadardja a topojson
).
Szükségunk van országok szintű geojson
-ra.
https://github.com/johan/world.geo.json/blob/master/countries.geo.json
Európa megyeszintű felosztás: https://data.europa.eu/euodp/en/data/dataset/HZKBS2y8ycdZijX0PMHPA
JSON file beolvasása
In [48]:
pd.read_json('countries.geo.json').head()
Out[48]:
In [49]:
import json
In [50]:
file=open('countries.geo.json','r').read()
countries=json.loads(file)
In [51]:
countries=countries['features']
In [52]:
countries[0]
Out[52]:
In [54]:
orszagok_angol=[country['properties']['name'] for country in countries]
In [55]:
orszagok_roman=list(df5.index)
Levenshtein függvény definiálása kólön python .py
fileban.
In [56]:
import lev
Összes távolság
In [57]:
orszag_matrix={}
for orszag1 in orszagok_roman:
if orszag1 not in orszag_matrix:orszag_matrix[orszag1]={}
for orszag2 in orszagok_angol:
orszag_matrix[orszag1][orszag2]=lev.levenshteinDistance(orszag1,orszag2)
#print(orszag1,orszag2)
Minimum távolságok
In [58]:
orszag_matrix_jo={}
for orszag1 in orszag_matrix:
orszag_matrix_jo[orszag1]=min(orszag_matrix[orszag1],key=orszag_matrix[orszag1].get)
Hibák javítása manuálisan
In [59]:
orszag_matrix_jo['Cseh']='Czech Republic'
orszag_matrix_jo['Elvetia']='Switzerland'
orszag_matrix_jo['Grecia']='Greece'
orszag_matrix_jo['Norvegia']='Norway'
orszag_matrix_jo['Olanda']='Netherlands'
orszag_matrix_jo['Suedia']='Sweden'
orszag_matrix_jo['Turcia']='Turkey'
orszag_matrix_jo['UK']='United Kingdom'
orszag_matrix_jo['Ungaria']='Hungary'
orszag_matrix_jo['Bahamas']='The Bahamas'
orszag_matrix_jo
Out[59]:
Életkorok kinyerése a df5
dataframeből
In [60]:
eletkorok=df5.to_dict()['varsta']
In [61]:
eletkorok
Out[61]:
Országok listáját átalakítjuk szótárrá
In [62]:
country_dict={country['properties']['name']:country for country in countries}
Ezután kicseréljük a szótár kulcsait az angol országneveről a román országnevekre.
In [63]:
country_dict_ro={orszag1:country_dict[orszag_matrix_jo[orszag1]] for orszag1 in orszag_matrix_jo}
Behozzuk a román országneveket és élatkorokat az országok szótárába
In [64]:
for country in country_dict_ro:
country_dict_ro[country]['properties']['name_ro']=country
country_dict_ro[country]['properties']['varsta']=eletkorok[country]
Visszalakítjuk lista formátumba
In [65]:
country_dict_ro_values=list(country_dict_ro.values())
country_dict_ro_updated={'features':country_dict_ro_values}
country_dict_ro_updated['type']='FeatureCollection'
Exportáljuk mint új geojson
In [66]:
export_file=open('countries_ro.geo.json','w')
export_file.write(json.dumps(country_dict_ro_updated))
Out[66]: