{"id":2207,"date":"2019-09-19T11:06:09","date_gmt":"2019-09-19T09:06:09","guid":{"rendered":"http:\/\/jakisproblem.pl\/?p=2207"},"modified":"2019-09-26T11:41:33","modified_gmt":"2019-09-26T09:41:33","slug":"python-kuchcinski-air","status":"publish","type":"post","link":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/2019\/09\/19\/python-kuchcinski-air\/","title":{"rendered":"Python &#8211; Kuchci\u0144ski Air"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/scontent-vie1-1.xx.fbcdn.net\/v\/t1.0-9\/68809560_2349644301739095_8428711067420459008_n.jpg?_nc_cat=106&amp;_nc_oc=AQkPSEwbjREGYxCFmeaqJqKvzAjRUHDN3Q3gRhOHgOeeO5JdXvxSmU1QKrR9QgcN6gQ&amp;_nc_ht=scontent-vie1-1.xx&amp;oh=ec4c12cc91e98a78712af676ec41ed2d&amp;oe=5E049056\" alt=\"Obraz mo\u00c5\u00bce zawiera\u00c4\u0087: tekst\"\/><\/figure>\n\n\n\n<p>&#8222;Wbrew pozorom mo\u017cemy ca\u0142kiem du\u017co zw\u0142aszcza z Pythonem. Najpierw u\u017cywamy biblioteki Camelot \u017ceby wyci\u0105gn\u0105\u0107 dane z pdf do czego\u015b por\u0119czniejszego. Nast\u0119pnie u\u017cywamy por\u0119cznego spisu lotnisk z wsp\u00f3\u0142rz\u0119dnymi geograficznymi z <a rel=\"noreferrer noopener\" href=\"http:\/\/dlapilota.pl\/lotniskapl?fbclid=IwAR1X4ztB9ffno1oGSK5_5uxbRzzlM5kXyxK39rf24j-H_YyPU_Aeretu9Bg\" target=\"_blank\">dlapilota.pl\/lotniskapl<\/a> aby wiedzie\u0107 sk\u0105d dok\u0105d lata\u0142 pan marsza\u0142ek (to wszytko mo\u017cna zrobi\u0107 w pythonie u\u017cywaj\u0105c g\u0142ownie biblioteki pandas). To wszytko kompilujemy sobie do jednego pliku csv (\u017ceby ka\u017cdy m\u00f3g\u0142 si\u0119 pobawi\u0107 tymi danymi <a rel=\"noreferrer noopener\" href=\"https:\/\/pastebin.com\/FJudqznT?fbclid=IwAR2P1vJxLpv0ZEqflnoQ_bAoPpqsRIC3Du2ZP8AVH4S61j_7mLwcBOzpBuY\" target=\"_blank\">https:\/\/pastebin.com\/FJudqznT<\/a>&nbsp;).<br>Nast\u0119pnie mo\u017cemy sobie policzy\u0107 i zsumowa\u0107 kilometr\u00f3wk\u0119 (u\u017cywaj\u0105c geopy), policzy\u0107 gdzie marsza\u0142ek bywa\u0142 i co robi\u0142. Do czego zach\u0119cam w ramach zabawy. (do wizualizacji u\u017cy\u0142em narz\u0119dzia Gephi, ale to te\u017c mo\u017cna za\u0142atwic w pythonie za pomoc\u0105 networkx i cartopy)&#8221;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Zainstaluj camelot-py<\/li><li>Przyk\u0142ad wyeksportowania danych z pliku PDF:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>import <\/strong>pandas <strong>as <\/strong>pd<br><strong>from <\/strong>camelot.io <strong>import <\/strong>read_pdf<br><br>tables=read_pdf(<strong>'pliki\\\\AirKuchKraj.pdf'<\/strong>, pages=<strong>'1-end'<\/strong>)<br><br>df = pd.DataFrame()<br><strong>for <\/strong>tab <strong>in <\/strong>tables:<br>   df = pd.concat([df, tab.df])<br><br>df.to_excel(<strong>'pliki\\\\kuchair.xlsx'<\/strong>)<\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li> Przyk\u0142ad obliczenia odleg\u0142o\u015bci pomi\u0119dzy lotniskami:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>import <\/strong>pandas <strong>as <\/strong>pd<br><strong>from <\/strong>geopy.distance <strong>import <\/strong>vincenty<br><br>df = pd.read_csv(<strong>'pliki\\\\kuch_kraj_pub.txt'<\/strong>, delimiter=<strong>';'<\/strong>)<br>df[<strong>'distance'<\/strong>] = df.apply(<strong>lambda <\/strong>x: vincenty((x[<strong>'DEP_lat'<\/strong>],x[<strong>'DEP_lon'<\/strong>]), (x[<strong>'ARR_lat'<\/strong>],   x[<strong>'ARR_lon'<\/strong>])).km, axis=1)<br>print(df)<br><br>df.to_csv(<strong>'pliki\\\\kuch_kraj.csv'<\/strong>)<\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Przyk\u0142ad przygotowania danych i narysowania grafu skierowanego:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>import <\/strong>pandas <strong>as <\/strong>pd<br><strong>import <\/strong>matplotlib.pyplot <strong>as <\/strong>plt<br><strong>import <\/strong>networkx <strong>as <\/strong>nx<br><br>df = pd.read_csv(<strong>'pliki\\\\kuch_kraj.csv'<\/strong>, delimiter=<strong>';'<\/strong>)<br><br>fnumber = len(df)<br><br><em>#df_dep = df.groupby(['DEP', 'DEP_lat', 'DEP_lon']).count().reset_index().rename(columns={'Unnamed: 0':'starts', 'DEP':'AIRPORT'})<br><\/em>df_dep = df.groupby([<strong>'DEP'<\/strong>, <strong>'DEP_lat'<\/strong>, <strong>'DEP_lon'<\/strong>]).count().reset_index().rename(columns={<strong>'Unnamed: 0'<\/strong>:<strong>'starts'<\/strong>, <strong>'DEP'<\/strong>:<strong>'airport'<\/strong>, <strong>'DEP_lat'<\/strong>:<strong>'latitude'<\/strong>, <strong>'DEP_lon'<\/strong>:<strong>'longitude'<\/strong>})<br>df_dep=df_dep[[<strong>'airport'<\/strong>,<strong>'latitude'<\/strong>,<strong>'longitude'<\/strong>, <strong>'starts'<\/strong>]]<br><br>df_arr = df.groupby([<strong>'ARR'<\/strong>, <strong>'ARR_lat'<\/strong>, <strong>'ARR_lon'<\/strong>]).count().reset_index().rename(columns={<strong>'Unnamed: 0'<\/strong>:<strong>'lands'<\/strong>, <strong>'ARR'<\/strong>:<strong>'airport'<\/strong>, <strong>'ARR_lat'<\/strong>:<strong>'latitude'<\/strong>, <strong>'ARR_lon'<\/strong>:<strong>'longitude'<\/strong>})<br>df_arr=df_arr[[<strong>'airport'<\/strong>,<strong>'latitude'<\/strong>,<strong>'longitude'<\/strong>, <strong>'lands'<\/strong>]]<br><br>df_edges = df.groupby([<strong>'DEP'<\/strong>,<strong>'ARR'<\/strong>]).size().reset_index()<br>df_edges = df_edges[[<strong>'DEP'<\/strong>,<strong>'ARR'<\/strong>]]<br><br><br><em>#df_dep = df.groupby(['DEP', 'DEP_lon', 'DEP_lat']).agg({'DEP':['count']})<br>#print(list(df_dep.columns))<br><br>#df_city = pd.concat([df_dep, df_arr], axis=1, sort=False)<br>#df_city = pd.merge(df_dep, df_arr, on='airport', how='outer')<br><\/em>df_city = pd.merge(df_dep, df_arr, on=[<strong>'airport'<\/strong>, <strong>'latitude'<\/strong>, <strong>'longitude'<\/strong>], how=<strong>'outer'<\/strong>)<br>df_city[<strong>'starts'<\/strong>] = df_city[<strong>'starts'<\/strong>].fillna(0)<br>df_city[<strong>'lands'<\/strong>] = df_city[<strong>'lands'<\/strong>].fillna(0)<br>df_city[<strong>'flies'<\/strong>]=df_city[<strong>'starts'<\/strong>]+df_city[<strong>'lands'<\/strong>]<br><em>#print(df_city)<br><br><\/em>plt.figure(1, figsize=(11, 5))<br>plt.clf()<br><br>city = {}<br>node_sizes = []<br>edges = []<br><br><strong>for <\/strong>index, row <strong>in <\/strong>df_edges.iterrows():<br>    s,l = row[<strong>'DEP'<\/strong>], row[<strong>'ARR'<\/strong>]<br>    edges.append((s,l))<br><br><strong>for <\/strong>index, row <strong>in <\/strong>df_city.iterrows():<br>    name, x, y, p = row[<strong>'airport'<\/strong>], row[<strong>'longitude'<\/strong>], row[<strong>'latitude'<\/strong>], row[<strong>'flies'<\/strong>]<br>    city[name] = (x, y)<br>    node_sizes.append(p*10)<br><br>print(city)<br>print(node_sizes)<br><br>g=nx.DiGraph()<br>g.add_nodes_from(city)<br>nx.draw_networkx_nodes(g, city, node_size=node_sizes, node_color=<strong>'grey'<\/strong>)<br>g.add_edges_from(edges)<br>nx.draw_networkx_edges(g, city, node_size=node_sizes, arrowstyle=<strong>'->'<\/strong>,arrowsize=8, edge_color=<strong>'blue'<\/strong>, edge_cmap=plt.cm.Blues, width=2)<br><br><strong>for <\/strong>c <strong>in <\/strong>city:<br>   x, y = city[c]<br>   plt.text(x, y + 0.1, c)<br><br>plt.show()<\/pre>\n\n\n\n<p>Linki zwi\u0105zane z artyku\u0142em: <br><a href=\"https:\/\/www.facebook.com\/permalink.php?story_fbid=10216657635251989&amp;id=1193768931\">https:\/\/www.facebook.com\/permalink.php?story_fbid=10216657635251989&amp;id=1193768931<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/dlapilota.pl\/lotniskapl?fbclid=IwAR1X4ztB9ffno1oGSK5_5uxbRzzlM5kXyxK39rf24j-H_YyPU_Aeretu9Bg\">https:\/\/dlapilota.pl\/lotniskapl?fbclid=IwAR1X4ztB9ffno1oGSK5_5uxbRzzlM5kXyxK39rf24j-H_YyPU_Aeretu9Bg<\/a><\/p>\n\n\n\n<p><a href=\"http:\/\/sejm.gov.pl\/Sejm8.nsf\/komunikat.xsp?documentId=88E8A1539F4BEA2BC125845D004AC205\">http:\/\/sejm.gov.pl\/Sejm8.nsf\/komunikat.xsp?documentId=88E8A1539F4BEA2BC125845D004AC205<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\">&#8222;Wbrew pozorom mo\u017cemy ca\u0142kiem du\u017co zw\u0142aszcza z Pythonem. Najpierw u\u017cywamy biblioteki Camelot \u017ceby wyci\u0105gn\u0105\u0107 dane z pdf do czego\u015b por\u0119czniejszego. Nast\u0119pnie u\u017cywamy por\u0119cznego spisu lotnisk z wsp\u00f3\u0142rz\u0119dnymi geograficznymi z dlapilota.pl\/lotniskapl aby wiedzie\u0107 sk\u0105d dok\u0105d lata\u0142 pan marsza\u0142ek (to wszytko mo\u017cna zrobi\u0107 w pythonie u\u017cywaj\u0105c g\u0142ownie biblioteki pandas). To wszytko kompilujemy sobie do jednego pliku csv&hellip;<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/2019\/09\/19\/python-kuchcinski-air\/\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[101,77],"class_list":["post-2207","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii","tag-camelot","tag-python"],"_links":{"self":[{"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/posts\/2207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/comments?post=2207"}],"version-history":[{"count":11,"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/posts\/2207\/revisions"}],"predecessor-version":[{"id":2241,"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/posts\/2207\/revisions\/2241"}],"wp:attachment":[{"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/media?parent=2207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/categories?post=2207"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/u239160.webh.me\/jakisproblem.pl\/index.php\/wp-json\/wp\/v2\/tags?post=2207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}