Jakiś problem?

Python – Kuchciński Air

Obraz może zawierać: tekst

„Wbrew pozorom możemy całkiem dużo zwłaszcza z Pythonem. Najpierw używamy biblioteki Camelot żeby wyciągnąć dane z pdf do czegoś poręczniejszego. Następnie używamy poręcznego spisu lotnisk z współrzędnymi geograficznymi z dlapilota.pl/lotniskapl aby wiedzieć skąd dokąd latał pan marszałek (to wszytko można zrobić w pythonie używając głownie biblioteki pandas). To wszytko kompilujemy sobie do jednego pliku csv (żeby każdy mógł się pobawić tymi danymi https://pastebin.com/FJudqznT ).
Następnie możemy sobie policzyć i zsumować kilometrówkę (używając geopy), policzyć gdzie marszałek bywał i co robił. Do czego zachęcam w ramach zabawy. (do wizualizacji użyłem narzędzia Gephi, ale to też można załatwic w pythonie za pomocą networkx i cartopy)”

  • Zainstaluj camelot-py
  • Przykład wyeksportowania danych z pliku PDF:
import pandas as pd
from camelot.io import read_pdf

tables=read_pdf('pliki\\AirKuchKraj.pdf', pages='1-end')

df = pd.DataFrame()
for tab in tables:
df = pd.concat([df, tab.df])

df.to_excel('pliki\\kuchair.xlsx')
  • Przykład obliczenia odległości pomiędzy lotniskami:
import pandas as pd
from geopy.distance import vincenty

df = pd.read_csv('pliki\\kuch_kraj_pub.txt', delimiter=';')
df['distance'] = df.apply(lambda x: vincenty((x['DEP_lat'],x['DEP_lon']), (x['ARR_lat'], x['ARR_lon'])).km, axis=1)
print(df)

df.to_csv('pliki\\kuch_kraj.csv')
  • Przykład przygotowania danych i narysowania grafu skierowanego:
import pandas as pd
import matplotlib.pyplot as plt
import networkx as nx

df = pd.read_csv('pliki\\kuch_kraj.csv', delimiter=';')

fnumber = len(df)

#df_dep = df.groupby(['DEP', 'DEP_lat', 'DEP_lon']).count().reset_index().rename(columns={'Unnamed: 0':'starts', 'DEP':'AIRPORT'})
df_dep = df.groupby(['DEP', 'DEP_lat', 'DEP_lon']).count().reset_index().rename(columns={'Unnamed: 0':'starts', 'DEP':'airport', 'DEP_lat':'latitude', 'DEP_lon':'longitude'})
df_dep=df_dep[['airport','latitude','longitude', 'starts']]

df_arr = df.groupby(['ARR', 'ARR_lat', 'ARR_lon']).count().reset_index().rename(columns={'Unnamed: 0':'lands', 'ARR':'airport', 'ARR_lat':'latitude', 'ARR_lon':'longitude'})
df_arr=df_arr[['airport','latitude','longitude', 'lands']]

df_edges = df.groupby(['DEP','ARR']).size().reset_index()
df_edges = df_edges[['DEP','ARR']]


#df_dep = df.groupby(['DEP', 'DEP_lon', 'DEP_lat']).agg({'DEP':['count']})
#print(list(df_dep.columns))

#df_city = pd.concat([df_dep, df_arr], axis=1, sort=False)
#df_city = pd.merge(df_dep, df_arr, on='airport', how='outer')
df_city = pd.merge(df_dep, df_arr, on=['airport', 'latitude', 'longitude'], how='outer')
df_city['starts'] = df_city['starts'].fillna(0)
df_city['lands'] = df_city['lands'].fillna(0)
df_city['flies']=df_city['starts']+df_city['lands']
#print(df_city)

plt.figure(1, figsize=(11, 5))
plt.clf()

city = {}
node_sizes = []
edges = []

for index, row in df_edges.iterrows():
s,l = row['DEP'], row['ARR']
edges.append((s,l))

for index, row in df_city.iterrows():
name, x, y, p = row['airport'], row['longitude'], row['latitude'], row['flies']
city[name] = (x, y)
node_sizes.append(p*10)

print(city)
print(node_sizes)

g=nx.DiGraph()
g.add_nodes_from(city)
nx.draw_networkx_nodes(g, city, node_size=node_sizes, node_color='grey')
g.add_edges_from(edges)
nx.draw_networkx_edges(g, city, node_size=node_sizes, arrowstyle='->',arrowsize=8, edge_color='blue', edge_cmap=plt.cm.Blues, width=2)

for c in city:
x, y = city[c]
plt.text(x, y + 0.1, c)

plt.show()

Linki związane z artykułem:
https://www.facebook.com/permalink.php?story_fbid=10216657635251989&id=1193768931

https://dlapilota.pl/lotniskapl?fbclid=IwAR1X4ztB9ffno1oGSK5_5uxbRzzlM5kXyxK39rf24j-H_YyPU_Aeretu9Bg

http://sejm.gov.pl/Sejm8.nsf/komunikat.xsp?documentId=88E8A1539F4BEA2BC125845D004AC205

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *