This commit is contained in:
Peter Kannewitz 2023-03-26 18:36:49 +02:00
commit 8d3c8b3974
77 changed files with 682928 additions and 0 deletions

View file

@ -0,0 +1,164 @@
Polizei Account Name Typ Bundesland Stadt LAT LONG
bpol_11 Bundespolizei Spezialkräfte Bundespolizei - - -
bpol_bepo Bundesbereitschaftspolizei Bundesbereitschaftspolizei - - - -
bpol_air_fra Bundespolizei Flughafen Frankfurt am Main Bundespolizei Hessen Frankfurt am Main 50.1109221 8.6821267
bpol_b Bundespolizei Berlin Bundespolizei Berlin Berlin 52.520007 13.404954
bpol_b_einsatz Bundespolizei Berlin Einsatz Bundespolizei Berlin Berlin 52.520007 13.404954
bpol_bw Bundespolizei Baden-Württemberg Bundespolizei Baden-Württemberg Böblingen 48.681331 9.008830
bpol_by Bundespolizei Bayern Bundespolizei Bayern München 48.135125 11.581981
bpol_koblenz Bundespolizei Koblenz Bundespolizei Rheinland-Pfalz Koblenz 50.356943 7.588996
bpol_kueste Bundespolizei Küste Bundespolizei Schleswig-Holstein Bad Bramstedt 53.919582 9.882173
bpol_nord Bundespolizei Nord Bundespolizei Niedersachsen Hannover 52.3744779 9.7385532
bpol_nrw Bundespolizei NRW Bundespolizei Nordrhein-Westfalen Sankt Augustin 50.769478 7.187579
bpol_pir Bundespolizei Mitteldeutschland Bundespolizei Sachsen-Anhalt Magdeburg 52.120533 11.627624
bremenpolizei Polizei Bremen Polizei Bremen Bremen 53.079296 8.801694
lkabawue Landeskriminalamt BW Landeskriminalamt Baden-Württemberg Stuttgart 48.775846 9.182932
lka_bayern Bayerisches Landeskriminalamt Landeskriminalamt Bayern München 48.135125 11.581981
lka_hessen Hessisches Landeskriminalamt Landeskriminalamt Hessen Wiesbaden 50.0820384 8.2416556
lka_rlp Landeskriminalamt Rheinland-Pfalz Landeskriminalamt Rheinland-Pfalz Mainz 49.992862 8.247253
pol_grafschaft Polizei Grf Bentheim Polizei Niedersachsen Nordhorn 52.429580 7.068571
polizeiaalen Polizei Aalen Polizei Baden-Württemberg Aalen 48.836689 10.097116
polizei_aur_wtm Polizei Aurich / WTM Polizei Niedersachsen Aurich 53.470839 7.484831
polizei_badn Polizei Bad Nenndorf Polizei Niedersachsen Bad Nenndorf 52.336191 9.374258
polizeibayern Polizei Bayern Polizei Bayern München 48.135125 11.581981
polizeibb Polizei Brandenburg Polizei Brandenburg Potsdam 52.390569 13.064473
polizeibb_e PolizeiBrandenburg_E Polizei Brandenburg Potsdam 52.390569 13.064473
polizei_bbg Polizei Bückeburg Polizei Niedersachsen Bückeburg 52.259276 9.052123
polizeiberlin Polizei Berlin Polizei Berlin Berlin 52.520007 13.404954
polizeiberlin_e Polizei Berlin Einsatz Polizei Berlin Berlin 52.520007 13.404954
polizeibhv Polizei Bremerhaven Polizei Bremen Bremerhaven 53.539584 8.580942
polizei_bs Polizei Braunschweig Polizei Niedersachsen Braunschweig 52.268874 10.526770
polizei_ce Polizei Celle Polizei Niedersachsen Celle 52.617596 10.062852
polizei_clp_vec Polizei Cloppenburg/Vechta Polizei Niedersachsen Cloppenburg 52.844198 8.053016
polizei_cux Polizei Cuxhaven Polizei Niedersachsen Cuxhaven 53.859336 8.687906
polizei_del Polizei Delmenhorst/Oldenburg-Land/Wesermarsch Polizei Niedersachsen Delmenhorst 53.052189 8.635593
polizei_dero Polizei Dessau-Roßlau Polizei Sachsen-Anhalt Dessau-Roßlau 51.842828 12.230393
polizei_dh Polizei Diepholz Polizei Niedersachsen Diepholz 52.605646 8.370788
polizei_el Polizei Emsland Polizei Niedersachsen Lingen 52.540308 7.329286
polizei_ffm Polizei Frankfurt Polizei Hessen Frankfurt am Main 50.110922 8.682127
polizeifr Polizei Freiburg Polizei Baden-Württemberg Freiburg 47.999008 7.842104
polizei_ft Polizei Frankenthal Polizei Rheinland-Pfalz Frankenthal 49.533333 8.350000
polizei_ger Polizei Germersheim Polizei Rheinland-Pfalz Germersheim 49.214024 8.366815
polizei_gf Polizei Gifhorn Polizei Niedersachsen Gifhorn 52.480909 10.550783
polizei_goe Polizei Göttingen Polizei Niedersachsen Göttingen 51.541280 9.915804
polizei_gs Polizei Goslar Polizei Niedersachsen Goslar 51.905953 10.428996
polizei_h Polizei Hannover Polizei Niedersachsen Hannover 52.3744779 9.7385532
polizei_hal Polizei Halle (Saale) Polizei Sachsen-Anhalt Halle (Saale) 51.4825041 11.9705452
polizeihamburg Polizei Hamburg Polizei Hamburg Hamburg 53.550341 10.000654
polizei_hi Polizei Hildesheim Polizei Niedersachsen Hildesheim 52.1521636 9.9513046
polizei_hk Polizei Heidekreis Polizei Niedersachsen Soltau 52.9859666 9.8433909
polizei_hm Polizei Hameln Polizei Niedersachsen Hameln-Pyrmont 52.0895789 9.3875409
polizeihn Polizei Heilbronn Polizei Baden-Württemberg Heilbronn 49.142291 9.218655
polizei_hol Polizei Holzminden Polizei Niedersachsen Holzminden 51.828835 9.4466591
polizei_hst Polizei Stralsund Polizei Mecklenburg-Vorpommern Stralsund 54.3096314 13.0820846
polizei_ka Polizei Karlsruhe Polizei Baden-Württemberg Karlsruhe 49.0068705 8.4034195
polizei_kl Polizei Kaiserslautern Polizei Rheinland-Pfalz Kaiserslautern 49.4432174 7.7689951
polizei_ko Polizei Koblenz Polizei Rheinland-Pfalz Koblenz 50.3533278 7.5943951
polizeikonstanz Polizei Konstanz Polizei Baden-Württemberg Konstanz 47.659216 9.1750718
polizeilb Polizei Ludwigsburg Polizei Baden-Württemberg Ludwigsburg 48.8953937 9.1895147
polizei_ler_emd Polizei Leer / Emden Polizei Niedersachsen Leer 53.2327625 7.4577265
polizei_lg Polizei Lüneburg Polizei Niedersachsen Lüneburg 53.248706 10.407855
polizeimainz Polizei Mainz Polizei Rheinland-Pfalz Mainz 50.0012314 8.2762513
polizeimannheim Polizei Mannheim Polizei Baden-Württemberg Mannheim 49.4892913 8.4673098
polizei_md Polizei Magdeburg Polizei Sachsen-Anhalt Magdeburg 52.1315889 11.6399609
polizeimfr Polizei Mittelfranken Polizei Bayern Nürnberg 49.453872 11.077298
polizei_mh Polizei Mittelhessen Polizei Hessen Gießen 50.5862066 8.6742306
polizei_mse Polizei Mecklenburgische Seenplatte Polizei Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
polizeimuenchen Polizei München Polizei Bayern München 48.135125 11.581981
polizeinb Polizei Niederbayern Polizei Bayern Straubing 48.8819801 12.569716
polizei_nbg Polizei Nienburg Polizei Niedersachsen Nienburg (Weser) 52.6487602 9.2578105
polizeineustadt Polizei Neustadt Polizei Rheinland-Pfalz Neustadt an der Weinstraße 49.3539802 8.1350021
polizei_nh Polizei Nordhessen Polizei Hessen Kassel 51.3154546 9.4924096
polizeini_lka LKA Niedersachsen Landeskriminalamt Niedersachsen Hannover 52.3744779 9.7385532
polizei_nom Polizei Northeim Polizei Niedersachsen Northeim 51.705401 9.9972782
polizei_nrw_ac Polizei NRW AC Polizei Nordrhein-Westfalen Aachen 50.776351 6.083862
polizei_nrw_bi Polizei NRW BI Polizei Nordrhein-Westfalen Bielefeld 52.0191005 8.531007
polizei_nrw_bn Polizei NRW BN Polizei Nordrhein-Westfalen Bonn 50.735851 7.10066
polizei_nrw_bo Polizei NRW BO Polizei Nordrhein-Westfalen Bochum 51.4818111 7.2196635
polizei_nrw_bor Polizei NRW BOR Polizei Nordrhein-Westfalen Borken 51.8443183 6.8582247
polizei_nrw_coe Polizei NRW COE Polizei Nordrhein-Westfalen Coesfeld 51.9458943 7.1691108
polizei_nrw_d Polizei NRW D Polizei Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
polizei_nrw_dn Polizei NRW DN Polizei Nordrhein-Westfalen Düren 50.8031684 6.4820806
polizei_nrw_do Polizei NRW DO Polizei Nordrhein-Westfalen Dortmund 51.5142273 7.4652789
polizei_nrw_du Polizei NRW DU Polizei Nordrhein-Westfalen Duisburg 51.434999 6.759562
polizei_nrw_e Polizei NRW E Polizei Nordrhein-Westfalen Essen 51.4582235 7.0158171
polizei_nrw_en Polizei NRW EN Polizei Nordrhein-Westfalen Ennepe-Ruhr-Kreis 51.3481444 7.3351844
polizei_nrw_eu Polizei NRW EU Polizei Nordrhein-Westfalen Euskirchen 50.6612623 6.7871219
polizei_nrw_ge Polizei NRW GE Polizei Nordrhein-Westfalen Gelsenkirchen 51.5110321 7.0960124
polizei_nrw_gm Polizei NRW GM Polizei Nordrhein-Westfalen Gummersbach 51.0277658 7.5630545
polizei_nrw_gt Polizei NRW GT Polizei Nordrhein-Westfalen Gütersloh 51.9063997 8.3782078
polizei_nrw_ha Polizei NRW HA Polizei Nordrhein-Westfalen Hagen 51.3582945 7.473296
polizei_nrw_ham Polizei NRW HAM Polizei Nordrhein-Westfalen Hamm 51.6804093 7.815197
polizei_nrw_hf Polizei NRW HF Polizei Nordrhein-Westfalen Herford 52.1152245 8.6711118
polizei_nrw_hs Polizei NRW HS Polizei Nordrhein-Westfalen Heinsberg 51.0654268 6.0984461
polizei_nrw_hsk Polizei NRW HSK Polizei Nordrhein-Westfalen Hochsauerlandkreis 51.3208247 8.2684925
polizei_nrw_hx Polizei NRW HX Polizei Nordrhein-Westfalen Höxter 51.7747369 9.3816877
polizei_nrw_k Polizei NRW K Polizei Nordrhein-Westfalen Köln 50.938361 6.959974
polizei_nrw_kle Polizei NRW KLE Polizei Nordrhein-Westfalen Kleve 51.7854839 6.1313674
polizei_nrw_kr Polizei NRW KR Polizei Nordrhein-Westfalen Krefeld 51.3331205 6.5623343
polizei_nrw_lip Polizei NRW LIP Polizei Nordrhein-Westfalen Detmold 51.936284 8.8791526
polizei_nrw_lka Polizei NRW LKA Landeskriminalamt Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
polizei_nrw_me polizei_nrw_me Polizei Nordrhein-Westfalen Mettmann 51.2527778 6.9777778
polizei_nrw_mg Polizei NRW MG Polizei Nordrhein-Westfalen Mönchengladbach 51.1946983 6.4353641
polizei_nrw_mi Polizei NRW MI Polizei Nordrhein-Westfalen Minden 52.2881045 8.9168852
polizei_nrw_mk Polizei NRW MK Polizei Nordrhein-Westfalen Märkischer Kreis 51.2734857 7.7274266
polizei_nrw_ms Polizei NRW MS Polizei Nordrhein-Westfalen Münster 51.9625101 7.6251879
polizei_nrw_ob Polizei NRW OB Polizei Nordrhein-Westfalen Oberhausen 51.4696137 6.8514435
polizei_nrw_oe Polizei NRW OE Polizei Nordrhein-Westfalen Olpe 51.0297603 7.8424193
polizei_nrw_pb Polizei NRW PB Polizei Nordrhein-Westfalen Paderborn 51.7189596 8.7648698
polizei_nrw_rbk Polizei NRW RBK Polizei Nordrhein-Westfalen Rheinisch-Bergischer-Kreis 51.0139774 7.1715584
polizei_nrw_re Polizei NRW RE Polizei Nordrhein-Westfalen Recklinghausen 51.6143815 7.1978546
polizei_nrw_rek Polizei NRW REK Polizei Nordrhein-Westfalen Rhein-Erft-Kreis 50.90334 6.763334
polizei_nrw_rkn Polizei NRW RKN Polizei Nordrhein-Westfalen Rhein-Kreis Neuss 51.1758799 6.6600606
polizei_nrw_si Polizei NRW SI Polizei Nordrhein-Westfalen Siegen-Wittgenstein 50.97444 8.23972
polizei_nrw_so Polizei NRW SO Polizei Nordrhein-Westfalen Soest 51.5725501 8.1061259
polizei_nrw_st Polizei NRW ST Polizei Nordrhein-Westfalen Steinfurt 52.1294289 7.3903454
polizei_nrw_su Polizei NRW SU Polizei Nordrhein-Westfalen Rhein-Sieg-Kreis 50.7527986 7.3813038
polizei_nrw_un Polizei NRW UN Polizei Nordrhein-Westfalen Unna 51.5348835 7.689014
polizei_nrw_vie Polizei NRW VIE Polizei Nordrhein-Westfalen Viersen 51.2562118 6.3905476
polizei_nrw_w Polizei NRW W Polizei Nordrhein-Westfalen Wuppertal 51.264018 7.1780374
polizei_nrw_waf Polizei NRW WAF Polizei Nordrhein-Westfalen Warendorf 51.9532449 7.9912335
polizei_nrw_wes Polizei NRW WES Polizei Nordrhein-Westfalen Wesel 51.6576909 6.617087
polizeiobn Polizei Oberbayern N Polizei Bayern Ingolstadt 48.7630165 11.4250395
polizeiobs PolizeiOberbayernSüd Polizei Bayern Rosenheim 47.8539273 12.127262
polizeiofr Polizei Oberfranken Polizei Bayern Oberfranken 50.0553084 11.5455233
polizeiog Polizei Offenburg Polizei Baden-Württemberg Offenburg 48.4716556 7.944378
polizei_oh Polizei Osthessen Polizei Hessen Fulda 50.5521486 9.676511
polizei_oha Polizei Osterode Polizei Niedersachsen Osterode am Harz 51.72784 10.2508204
polizei_ol Polizei Oldenburg-Stadt/Ammerland Polizei Niedersachsen Oldenburg 53.1389753 8.2146017
polizeiopf Polizei Oberpfalz Polizei Bayern Regensburg 49.0195333 12.0974869
polizei_os Polizei Osnabrück Polizei Niedersachsen Osnabrück 52.266837 8.049741
polizei_pf Polizei Pforzheim Polizei Baden-Württemberg Pforzheim 48.8908846 8.7029532
polizei_pp_nb Polizeipräsidium NB Polizeipräsidium Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
polizei_pp_ros Polizeipräsidium Rostock Polizeipräsidium Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
polizei_ps Polizei Pirmasens Polizei Rheinland-Pfalz Pirmasens 49.1996961 7.6087847
polizei_rostock Polizei Rostock Polizei Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
polizei_row Polizei Rotenburg Polizei Niedersachsen Rotenburg (Wümme) 53.2520924 9.3151133
polizeirt Polizei Reutlingen Polizei Baden-Württemberg Reutlingen 48.4919508 9.2114144
polizeirv Polizei Ravensburg Polizei Baden-Württemberg Ravensburg 47.7811014 9.612468
polizeisaarland Polizei Saarland Polizei Saarland Saarbrücken 49.234362 6.996379
polizeisachsen Polizei Sachsen Polizei Sachsen Dresden 51.0493286 13.7381437
polizei_sdl Polizei Stendal Polizei Sachsen-Anhalt Stendal 52.6050782 11.8594279
polizei_sn Polizei Schwerin Polizei Mecklenburg-Vorpommern Schwerin 53.6288297 11.4148038
polizei_soh Polizei Südosthessen Polizei Hessen Offenbach am Main 50.1055002 8.7610698
polizei_std Polizei Stade Polizei Niedersachsen Stade 53.599794 9.475438
polizei_sth Polizei Stadthagen Polizei Niedersachsen Stadthagen 52.3289688 9.2053496
polizei_suedhe Polizei Südhessen Polizei Hessen Darmstadt 49.872775 8.651177
polizeiswn Polizei Schwaben Nord Polizei Bayern Augsburg 48.3668041 10.8986971
polizeisws Polizei Schwaben S/W Polizei Bayern Kempten (Allgäu) 47.7267063 10.3168835
polizei_sz Polizei SZ / PE / WF Polizei Niedersachsen Salzgitter 52.1503721 10.3593147
polizei_thuer Polizei Thüringen Polizei Thüringen Erfurt 50.9777974 11.0287364
polizeitrier Polizei Trier Polizei Rheinland-Pfalz Trier 49.7596208 6.6441878
polizeiufr Polizei Unterfranken Polizei Bayern Würzburg 49.79245 9.932966
polizeiul Polizei Ulm Polizei Baden-Württemberg Ulm 48.3974003 9.9934336
polizei_ver_ohz Polizei Verden/Osterholz Polizei Niedersachsen Verden 52.922341 9.228153
polizeivg Polizei Vorpommern-Greifswald Polizei Mecklenburg-Vorpommern Anklam 53.8560526 13.688091
polizei_wh Polizei Westhessen Polizei Hessen Wiesbaden 50.0820384 8.2416556
polizei_whv_fri Polizei Wilhelmshaven/Friesland Polizei Niedersachsen Wilhelmshaven 53.5278793 8.106301
polizeiwittlich Polizei Wittlich Polizei Rheinland-Pfalz Wittlich 49.9850353 6.88844
polizei_wl Polizei LK Harburg Polizei Niedersachsen Harburg 53.3172237 9.9084936
polizei_wob Polizei Wolfsburg Polizei Niedersachsen Wolfsburg 52.4205588 10.7861682
polizei_zpd_ni Polizei ZPD NI Polizei Niedersachsen Hannover 52.3744779 9.7385532
pp_rheinpfalz Polizei Rheinpfalz Polizei Rheinland-Pfalz Ludwigshafen am Rhein 49.4704113 8.4381568
pp_stuttgart Polizei Stuttgart Polizei Baden-Württemberg Stuttgart 48.7784485 9.1800132
sh_polizei Polizei SH Polizei Schleswig-Holstein Kiel 54.3227085 10.135555
1 Polizei Account Name Typ Bundesland Stadt LAT LONG
2 bpol_11 Bundespolizei Spezialkräfte Bundespolizei - - -
3 bpol_bepo Bundesbereitschaftspolizei Bundesbereitschaftspolizei - - - -
4 bpol_air_fra Bundespolizei Flughafen Frankfurt am Main Bundespolizei Hessen Frankfurt am Main 50.1109221 8.6821267
5 bpol_b Bundespolizei Berlin Bundespolizei Berlin Berlin 52.520007 13.404954
6 bpol_b_einsatz Bundespolizei Berlin Einsatz Bundespolizei Berlin Berlin 52.520007 13.404954
7 bpol_bw Bundespolizei Baden-Württemberg Bundespolizei Baden-Württemberg Böblingen 48.681331 9.008830
8 bpol_by Bundespolizei Bayern Bundespolizei Bayern München 48.135125 11.581981
9 bpol_koblenz Bundespolizei Koblenz Bundespolizei Rheinland-Pfalz Koblenz 50.356943 7.588996
10 bpol_kueste Bundespolizei Küste Bundespolizei Schleswig-Holstein Bad Bramstedt 53.919582 9.882173
11 bpol_nord Bundespolizei Nord Bundespolizei Niedersachsen Hannover 52.3744779 9.7385532
12 bpol_nrw Bundespolizei NRW Bundespolizei Nordrhein-Westfalen Sankt Augustin 50.769478 7.187579
13 bpol_pir Bundespolizei Mitteldeutschland Bundespolizei Sachsen-Anhalt Magdeburg 52.120533 11.627624
14 bremenpolizei Polizei Bremen Polizei Bremen Bremen 53.079296 8.801694
15 lkabawue Landeskriminalamt BW Landeskriminalamt Baden-Württemberg Stuttgart 48.775846 9.182932
16 lka_bayern Bayerisches Landeskriminalamt Landeskriminalamt Bayern München 48.135125 11.581981
17 lka_hessen Hessisches Landeskriminalamt Landeskriminalamt Hessen Wiesbaden 50.0820384 8.2416556
18 lka_rlp Landeskriminalamt Rheinland-Pfalz Landeskriminalamt Rheinland-Pfalz Mainz 49.992862 8.247253
19 pol_grafschaft Polizei Grf Bentheim Polizei Niedersachsen Nordhorn 52.429580 7.068571
20 polizeiaalen Polizei Aalen Polizei Baden-Württemberg Aalen 48.836689 10.097116
21 polizei_aur_wtm Polizei Aurich / WTM Polizei Niedersachsen Aurich 53.470839 7.484831
22 polizei_badn Polizei Bad Nenndorf Polizei Niedersachsen Bad Nenndorf 52.336191 9.374258
23 polizeibayern Polizei Bayern Polizei Bayern München 48.135125 11.581981
24 polizeibb Polizei Brandenburg Polizei Brandenburg Potsdam 52.390569 13.064473
25 polizeibb_e PolizeiBrandenburg_E Polizei Brandenburg Potsdam 52.390569 13.064473
26 polizei_bbg Polizei Bückeburg Polizei Niedersachsen Bückeburg 52.259276 9.052123
27 polizeiberlin Polizei Berlin Polizei Berlin Berlin 52.520007 13.404954
28 polizeiberlin_e Polizei Berlin Einsatz Polizei Berlin Berlin 52.520007 13.404954
29 polizeibhv Polizei Bremerhaven Polizei Bremen Bremerhaven 53.539584 8.580942
30 polizei_bs Polizei Braunschweig Polizei Niedersachsen Braunschweig 52.268874 10.526770
31 polizei_ce Polizei Celle Polizei Niedersachsen Celle 52.617596 10.062852
32 polizei_clp_vec Polizei Cloppenburg/Vechta Polizei Niedersachsen Cloppenburg 52.844198 8.053016
33 polizei_cux Polizei Cuxhaven Polizei Niedersachsen Cuxhaven 53.859336 8.687906
34 polizei_del Polizei Delmenhorst/Oldenburg-Land/Wesermarsch Polizei Niedersachsen Delmenhorst 53.052189 8.635593
35 polizei_dero Polizei Dessau-Roßlau Polizei Sachsen-Anhalt Dessau-Roßlau 51.842828 12.230393
36 polizei_dh Polizei Diepholz Polizei Niedersachsen Diepholz 52.605646 8.370788
37 polizei_el Polizei Emsland Polizei Niedersachsen Lingen 52.540308 7.329286
38 polizei_ffm Polizei Frankfurt Polizei Hessen Frankfurt am Main 50.110922 8.682127
39 polizeifr Polizei Freiburg Polizei Baden-Württemberg Freiburg 47.999008 7.842104
40 polizei_ft Polizei Frankenthal Polizei Rheinland-Pfalz Frankenthal 49.533333 8.350000
41 polizei_ger Polizei Germersheim Polizei Rheinland-Pfalz Germersheim 49.214024 8.366815
42 polizei_gf Polizei Gifhorn Polizei Niedersachsen Gifhorn 52.480909 10.550783
43 polizei_goe Polizei Göttingen Polizei Niedersachsen Göttingen 51.541280 9.915804
44 polizei_gs Polizei Goslar Polizei Niedersachsen Goslar 51.905953 10.428996
45 polizei_h Polizei Hannover Polizei Niedersachsen Hannover 52.3744779 9.7385532
46 polizei_hal Polizei Halle (Saale) Polizei Sachsen-Anhalt Halle (Saale) 51.4825041 11.9705452
47 polizeihamburg Polizei Hamburg Polizei Hamburg Hamburg 53.550341 10.000654
48 polizei_hi Polizei Hildesheim Polizei Niedersachsen Hildesheim 52.1521636 9.9513046
49 polizei_hk Polizei Heidekreis Polizei Niedersachsen Soltau 52.9859666 9.8433909
50 polizei_hm Polizei Hameln Polizei Niedersachsen Hameln-Pyrmont 52.0895789 9.3875409
51 polizeihn Polizei Heilbronn Polizei Baden-Württemberg Heilbronn 49.142291 9.218655
52 polizei_hol Polizei Holzminden Polizei Niedersachsen Holzminden 51.828835 9.4466591
53 polizei_hst Polizei Stralsund Polizei Mecklenburg-Vorpommern Stralsund 54.3096314 13.0820846
54 polizei_ka Polizei Karlsruhe Polizei Baden-Württemberg Karlsruhe 49.0068705 8.4034195
55 polizei_kl Polizei Kaiserslautern Polizei Rheinland-Pfalz Kaiserslautern 49.4432174 7.7689951
56 polizei_ko Polizei Koblenz Polizei Rheinland-Pfalz Koblenz 50.3533278 7.5943951
57 polizeikonstanz Polizei Konstanz Polizei Baden-Württemberg Konstanz 47.659216 9.1750718
58 polizeilb Polizei Ludwigsburg Polizei Baden-Württemberg Ludwigsburg 48.8953937 9.1895147
59 polizei_ler_emd Polizei Leer / Emden Polizei Niedersachsen Leer 53.2327625 7.4577265
60 polizei_lg Polizei Lüneburg Polizei Niedersachsen Lüneburg 53.248706 10.407855
61 polizeimainz Polizei Mainz Polizei Rheinland-Pfalz Mainz 50.0012314 8.2762513
62 polizeimannheim Polizei Mannheim Polizei Baden-Württemberg Mannheim 49.4892913 8.4673098
63 polizei_md Polizei Magdeburg Polizei Sachsen-Anhalt Magdeburg 52.1315889 11.6399609
64 polizeimfr Polizei Mittelfranken Polizei Bayern Nürnberg 49.453872 11.077298
65 polizei_mh Polizei Mittelhessen Polizei Hessen Gießen 50.5862066 8.6742306
66 polizei_mse Polizei Mecklenburgische Seenplatte Polizei Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
67 polizeimuenchen Polizei München Polizei Bayern München 48.135125 11.581981
68 polizeinb Polizei Niederbayern Polizei Bayern Straubing 48.8819801 12.569716
69 polizei_nbg Polizei Nienburg Polizei Niedersachsen Nienburg (Weser) 52.6487602 9.2578105
70 polizeineustadt Polizei Neustadt Polizei Rheinland-Pfalz Neustadt an der Weinstraße 49.3539802 8.1350021
71 polizei_nh Polizei Nordhessen Polizei Hessen Kassel 51.3154546 9.4924096
72 polizeini_lka LKA Niedersachsen Landeskriminalamt Niedersachsen Hannover 52.3744779 9.7385532
73 polizei_nom Polizei Northeim Polizei Niedersachsen Northeim 51.705401 9.9972782
74 polizei_nrw_ac Polizei NRW AC Polizei Nordrhein-Westfalen Aachen 50.776351 6.083862
75 polizei_nrw_bi Polizei NRW BI Polizei Nordrhein-Westfalen Bielefeld 52.0191005 8.531007
76 polizei_nrw_bn Polizei NRW BN Polizei Nordrhein-Westfalen Bonn 50.735851 7.10066
77 polizei_nrw_bo Polizei NRW BO Polizei Nordrhein-Westfalen Bochum 51.4818111 7.2196635
78 polizei_nrw_bor Polizei NRW BOR Polizei Nordrhein-Westfalen Borken 51.8443183 6.8582247
79 polizei_nrw_coe Polizei NRW COE Polizei Nordrhein-Westfalen Coesfeld 51.9458943 7.1691108
80 polizei_nrw_d Polizei NRW D Polizei Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
81 polizei_nrw_dn Polizei NRW DN Polizei Nordrhein-Westfalen Düren 50.8031684 6.4820806
82 polizei_nrw_do Polizei NRW DO Polizei Nordrhein-Westfalen Dortmund 51.5142273 7.4652789
83 polizei_nrw_du Polizei NRW DU Polizei Nordrhein-Westfalen Duisburg 51.434999 6.759562
84 polizei_nrw_e Polizei NRW E Polizei Nordrhein-Westfalen Essen 51.4582235 7.0158171
85 polizei_nrw_en Polizei NRW EN Polizei Nordrhein-Westfalen Ennepe-Ruhr-Kreis 51.3481444 7.3351844
86 polizei_nrw_eu Polizei NRW EU Polizei Nordrhein-Westfalen Euskirchen 50.6612623 6.7871219
87 polizei_nrw_ge Polizei NRW GE Polizei Nordrhein-Westfalen Gelsenkirchen 51.5110321 7.0960124
88 polizei_nrw_gm Polizei NRW GM Polizei Nordrhein-Westfalen Gummersbach 51.0277658 7.5630545
89 polizei_nrw_gt Polizei NRW GT Polizei Nordrhein-Westfalen Gütersloh 51.9063997 8.3782078
90 polizei_nrw_ha Polizei NRW HA Polizei Nordrhein-Westfalen Hagen 51.3582945 7.473296
91 polizei_nrw_ham Polizei NRW HAM Polizei Nordrhein-Westfalen Hamm 51.6804093 7.815197
92 polizei_nrw_hf Polizei NRW HF Polizei Nordrhein-Westfalen Herford 52.1152245 8.6711118
93 polizei_nrw_hs Polizei NRW HS Polizei Nordrhein-Westfalen Heinsberg 51.0654268 6.0984461
94 polizei_nrw_hsk Polizei NRW HSK Polizei Nordrhein-Westfalen Hochsauerlandkreis 51.3208247 8.2684925
95 polizei_nrw_hx Polizei NRW HX Polizei Nordrhein-Westfalen Höxter 51.7747369 9.3816877
96 polizei_nrw_k Polizei NRW K Polizei Nordrhein-Westfalen Köln 50.938361 6.959974
97 polizei_nrw_kle Polizei NRW KLE Polizei Nordrhein-Westfalen Kleve 51.7854839 6.1313674
98 polizei_nrw_kr Polizei NRW KR Polizei Nordrhein-Westfalen Krefeld 51.3331205 6.5623343
99 polizei_nrw_lip Polizei NRW LIP Polizei Nordrhein-Westfalen Detmold 51.936284 8.8791526
100 polizei_nrw_lka Polizei NRW LKA Landeskriminalamt Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
101 polizei_nrw_me polizei_nrw_me Polizei Nordrhein-Westfalen Mettmann 51.2527778 6.9777778
102 polizei_nrw_mg Polizei NRW MG Polizei Nordrhein-Westfalen Mönchengladbach 51.1946983 6.4353641
103 polizei_nrw_mi Polizei NRW MI Polizei Nordrhein-Westfalen Minden 52.2881045 8.9168852
104 polizei_nrw_mk Polizei NRW MK Polizei Nordrhein-Westfalen Märkischer Kreis 51.2734857 7.7274266
105 polizei_nrw_ms Polizei NRW MS Polizei Nordrhein-Westfalen Münster 51.9625101 7.6251879
106 polizei_nrw_ob Polizei NRW OB Polizei Nordrhein-Westfalen Oberhausen 51.4696137 6.8514435
107 polizei_nrw_oe Polizei NRW OE Polizei Nordrhein-Westfalen Olpe 51.0297603 7.8424193
108 polizei_nrw_pb Polizei NRW PB Polizei Nordrhein-Westfalen Paderborn 51.7189596 8.7648698
109 polizei_nrw_rbk Polizei NRW RBK Polizei Nordrhein-Westfalen Rheinisch-Bergischer-Kreis 51.0139774 7.1715584
110 polizei_nrw_re Polizei NRW RE Polizei Nordrhein-Westfalen Recklinghausen 51.6143815 7.1978546
111 polizei_nrw_rek Polizei NRW REK Polizei Nordrhein-Westfalen Rhein-Erft-Kreis 50.90334 6.763334
112 polizei_nrw_rkn Polizei NRW RKN Polizei Nordrhein-Westfalen Rhein-Kreis Neuss 51.1758799 6.6600606
113 polizei_nrw_si Polizei NRW SI Polizei Nordrhein-Westfalen Siegen-Wittgenstein 50.97444 8.23972
114 polizei_nrw_so Polizei NRW SO Polizei Nordrhein-Westfalen Soest 51.5725501 8.1061259
115 polizei_nrw_st Polizei NRW ST Polizei Nordrhein-Westfalen Steinfurt 52.1294289 7.3903454
116 polizei_nrw_su Polizei NRW SU Polizei Nordrhein-Westfalen Rhein-Sieg-Kreis 50.7527986 7.3813038
117 polizei_nrw_un Polizei NRW UN Polizei Nordrhein-Westfalen Unna 51.5348835 7.689014
118 polizei_nrw_vie Polizei NRW VIE Polizei Nordrhein-Westfalen Viersen 51.2562118 6.3905476
119 polizei_nrw_w Polizei NRW W Polizei Nordrhein-Westfalen Wuppertal 51.264018 7.1780374
120 polizei_nrw_waf Polizei NRW WAF Polizei Nordrhein-Westfalen Warendorf 51.9532449 7.9912335
121 polizei_nrw_wes Polizei NRW WES Polizei Nordrhein-Westfalen Wesel 51.6576909 6.617087
122 polizeiobn Polizei Oberbayern N Polizei Bayern Ingolstadt 48.7630165 11.4250395
123 polizeiobs PolizeiOberbayernSüd Polizei Bayern Rosenheim 47.8539273 12.127262
124 polizeiofr Polizei Oberfranken Polizei Bayern Oberfranken 50.0553084 11.5455233
125 polizeiog Polizei Offenburg Polizei Baden-Württemberg Offenburg 48.4716556 7.944378
126 polizei_oh Polizei Osthessen Polizei Hessen Fulda 50.5521486 9.676511
127 polizei_oha Polizei Osterode Polizei Niedersachsen Osterode am Harz 51.72784 10.2508204
128 polizei_ol Polizei Oldenburg-Stadt/Ammerland Polizei Niedersachsen Oldenburg 53.1389753 8.2146017
129 polizeiopf Polizei Oberpfalz Polizei Bayern Regensburg 49.0195333 12.0974869
130 polizei_os Polizei Osnabrück Polizei Niedersachsen Osnabrück 52.266837 8.049741
131 polizei_pf Polizei Pforzheim Polizei Baden-Württemberg Pforzheim 48.8908846 8.7029532
132 polizei_pp_nb Polizeipräsidium NB Polizeipräsidium Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
133 polizei_pp_ros Polizeipräsidium Rostock Polizeipräsidium Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
134 polizei_ps Polizei Pirmasens Polizei Rheinland-Pfalz Pirmasens 49.1996961 7.6087847
135 polizei_rostock Polizei Rostock Polizei Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
136 polizei_row Polizei Rotenburg Polizei Niedersachsen Rotenburg (Wümme) 53.2520924 9.3151133
137 polizeirt Polizei Reutlingen Polizei Baden-Württemberg Reutlingen 48.4919508 9.2114144
138 polizeirv Polizei Ravensburg Polizei Baden-Württemberg Ravensburg 47.7811014 9.612468
139 polizeisaarland Polizei Saarland Polizei Saarland Saarbrücken 49.234362 6.996379
140 polizeisachsen Polizei Sachsen Polizei Sachsen Dresden 51.0493286 13.7381437
141 polizei_sdl Polizei Stendal Polizei Sachsen-Anhalt Stendal 52.6050782 11.8594279
142 polizei_sn Polizei Schwerin Polizei Mecklenburg-Vorpommern Schwerin 53.6288297 11.4148038
143 polizei_soh Polizei Südosthessen Polizei Hessen Offenbach am Main 50.1055002 8.7610698
144 polizei_std Polizei Stade Polizei Niedersachsen Stade 53.599794 9.475438
145 polizei_sth Polizei Stadthagen Polizei Niedersachsen Stadthagen 52.3289688 9.2053496
146 polizei_suedhe Polizei Südhessen Polizei Hessen Darmstadt 49.872775 8.651177
147 polizeiswn Polizei Schwaben Nord Polizei Bayern Augsburg 48.3668041 10.8986971
148 polizeisws Polizei Schwaben S/W Polizei Bayern Kempten (Allgäu) 47.7267063 10.3168835
149 polizei_sz Polizei SZ / PE / WF Polizei Niedersachsen Salzgitter 52.1503721 10.3593147
150 polizei_thuer Polizei Thüringen Polizei Thüringen Erfurt 50.9777974 11.0287364
151 polizeitrier Polizei Trier Polizei Rheinland-Pfalz Trier 49.7596208 6.6441878
152 polizeiufr Polizei Unterfranken Polizei Bayern Würzburg 49.79245 9.932966
153 polizeiul Polizei Ulm Polizei Baden-Württemberg Ulm 48.3974003 9.9934336
154 polizei_ver_ohz Polizei Verden/Osterholz Polizei Niedersachsen Verden 52.922341 9.228153
155 polizeivg Polizei Vorpommern-Greifswald Polizei Mecklenburg-Vorpommern Anklam 53.8560526 13.688091
156 polizei_wh Polizei Westhessen Polizei Hessen Wiesbaden 50.0820384 8.2416556
157 polizei_whv_fri Polizei Wilhelmshaven/Friesland Polizei Niedersachsen Wilhelmshaven 53.5278793 8.106301
158 polizeiwittlich Polizei Wittlich Polizei Rheinland-Pfalz Wittlich 49.9850353 6.88844
159 polizei_wl Polizei LK Harburg Polizei Niedersachsen Harburg 53.3172237 9.9084936
160 polizei_wob Polizei Wolfsburg Polizei Niedersachsen Wolfsburg 52.4205588 10.7861682
161 polizei_zpd_ni Polizei ZPD NI Polizei Niedersachsen Hannover 52.3744779 9.7385532
162 pp_rheinpfalz Polizei Rheinpfalz Polizei Rheinland-Pfalz Ludwigshafen am Rhein 49.4704113 8.4381568
163 pp_stuttgart Polizei Stuttgart Polizei Baden-Württemberg Stuttgart 48.7784485 9.1800132
164 sh_polizei Polizei SH Polizei Schleswig-Holstein Kiel 54.3227085 10.135555

84795
data/tweets-1679742620302.csv Normal file

File diff suppressed because it is too large Load diff

266194
data/tweets-1679742698645.csv Normal file

File diff suppressed because it is too large Load diff

11560
data/tweets-1679742702794.csv Normal file

File diff suppressed because it is too large Load diff

282283
data/tweets.csv Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,23 @@
MIT License
Copyright (c) 2021 copbird
Permission is hereby granted, free of charge, to any person, except associates
of law enforcement agencies, obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Addition: permission for

View file

@ -0,0 +1,30 @@
# CopBird Hackathon - Ergebnisse
Hier finden sich alle Ergebnisse der Teams, die an dem Hackathon teilgenommen habe.
## Anleitung für die Teams
1. Erstellt euch einen Gitlab-Account oder benutzt einen existierenden.
2. Stellt einen Access Request für das Projekt: https://gitlab.com/copbird-hackathon/ergebnisse/-/project_members/request_access
2. Klont euch das Repository:
```
git clone https://gitlab.com/copbird-hackathon/ergebnisse.git
```
3. Erstellt einen neuen Branch für euer Team in der Form `team-<Teamnummer>`, also z.B. für Team 1 heißt der Branch: `team-01`.
```
git checkout -b team-<Teamnummer>
```
4. Kopiert das, was ihr an Ergebnissen veröffentlichen wollt, in den jeweiligen Teamordner z.B. für Team 1 in den Ordner `team-01`.
5. Übernehmt die Änderungen in Git (ersetzt das `<Teamnummer>` durch eure Teamnummer):
```
git add .
```
```
git commit -m "Ergebnisse Team <Teamnummer> hinzugefügt"
```
6. Sobald wir euren Zugang gewährt haben, ladet eure Ergebnisse auf Gitlab hoch (ersetzt das `<Teamnummer>` durch eure Teamnummer).
```
git push -u origin team-<Teamnummer>
```
7. Erstellt einen neuen Merge Request unter [Merge Requests](https://gitlab.com/copbird-hackathon/ergebnisse/-/merge_requests) von eurem Teambranch `team-<Teamnummer` auf `main`.
8. Wir schauen uns euren Merge Request an und mergen ihn in den `main`.

View file

@ -0,0 +1,56 @@
#!/usr/bin/env python3
import pandas as pd
import snscrape.modules.twitter as sntwitter
import datetime, time
import os
import plotly.express as px
police_handles = ['PolizeiWittlich','LKA_Bayern','Polizei_SDL','PolizeiRV','Polizei_BadN','Polizei_ZPD_NI','Polizei_KO','PolizeiMainz','polizei_nrw_ob','PP_Rheinpfalz','PolizeiTrier',\
'PolizeiSachsen','Polizei_Ffm','Polizei_nrw_ms','Polizei_NRW_E','Polizei_NRW_AC','polizei_nrw_bi','polizei_nrw_bo','polizei_nrw_bn','polizei_nrw_bor',\
'polizei_nrw_coe','polizei_nrw_du','polizei_nrw_dn','polizei_nrw_d','polizei_nrw_w','polizei_nrw_en','polizei_nrw_waf','polizei_nrw_wes','polizei_nrw_un',\
'polizei_nrw_eu','polizei_nrw_vie','polizei_nrw_st','polizei_nrw_ge','polizei_nrw_gt','polizei_nrw_so','polizei_nrw_si','polizei_nrw_su','polizei_nrw_rkn',\
'polizei_nrw_rbk','polizei_nrw_re','polizei_nrw_rek','polizei_nrw_pb','polizei_nrw_gm','polizei_nrw_oe','polizei_nrw_mi','polizei_nrw_me','polizei_nrw_mk',\
'polizei_nrw_mg','polizei_nrw_lip','polizei_nrw_hx','polizei_nrw_kr','polizei_nrw_hsk','polizei_nrw_kle','polizei_nrw_hs','polizei_nrw_ham','polizei_nrw_hf',\
'polizei_nrw_ha','polizeiberlin','PolizeiBerlin_E','Polizei_PS','polizei_nrw_k','PolizeiMuenchen','Polizei_MD','PolizeiHamburg','polizeiOBS','Polizei_KA',\
'Polizei_Thuer','Polizei_NH','bpol_bw','bpol_by','Polizei_PP_NB','LKA_Hessen','PolizeiVG','Polizei_SN','Polizei_HST','PolizeiBhv','Polizei_OH','PolizeiMannheim',\
'PP_Stuttgart','Polizei_MSE','Polizei_soh','Polizei_DeRo','Polizei_FT','Polizei_HAL','PolizeiKonstanz','bpol_b','bpol_koblenz','bpol_kueste','bpol_bepo',\
'bpol_air_fra','bpol_nord','bpol_pir','bpol_nrw','bpol_b_einsatz','Polizei_MH','PolizeiBB','PolizeiUFR','Polizei_WH','PolizeiBayern','polizeiNB','PolizeiLB',\
'Polizei_SuedHE','Polizei_BS','Polizei_OS','PolizeiNI_lka','polizei_nrw_do','Polizei_LG','Polizei_H','Polizei_WL','Polizei_GOE','Polizei_HI','Polizei_EL',\
'Polizei_HM','Polizei_NBG','Polizei_LER_EMD','Polizei_AUR_WTM','Polizei_NOM','Polizei_HOL','Polizei_OHA','Polizei_STH','Pol_Grafschaft','Polizei_STD','Polizei_BBG',\
'Polizei_Rostock','Polizei_OL','PolizeiHN','PolizeiUL','polizeiSWN','Polizei_ROW','Polizei_CE','PolizeiAalen','PolizeiOFR','PolizeiSWS','polizeiopf','PolizeiMFR',\
'BremenPolizei','PolizeiOG','SH_Polizei','Polizei_HK','LkaBaWue','polizeiOBN','PolizeiSaarland','PolizeiRT','Polizei_WOB','PolizeiFR','Polizei_GER','PolizeiNeustadt',\
'bpol_11','Polizei_GF','Polizei_KL','Polizei_GS','LKA_RLP','Polizei_SZ','PolizeiBB_E','Polizei_CUX','Polizei_DH','Polizei_WHV_FRI','Polizei_DEL','Polizei_CLP_VEC',\
'Polizei_VER_OHZ','Polizei_PP_ROS']
limit = None
names = []
usernames = []
followers = []
for row in police_handles:
twitter_user_in = sntwitter.TwitterUserScraper(row, False)
names += [ str(twitter_user_in.entity.displayname) ]
usernames += [ str(twitter_user_in.entity.username) ]
followers += [ int(twitter_user_in.entity.followersCount) ]
# Existenzprüfung von ./cops.csv
if os.access('./cops.csv', mode = os.O_RDONLY) is False:
add_headers = True
else:
add_headers = False
d = {'names' : names, 'user_id': usernames, 'followers': followers, 'date': str(datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S'))}
df = pd.DataFrame(data = d)
#df
df.to_csv('./cops.csv', index = False, mode = 'a+', header = add_headers)
df_plot = pd.read_csv('./cops.csv')
fig = px.line(df_plot, x="date", y="followers", color="names", hover_data=['user_id'], title="Twitter: Entwicklung der Polizei-Account Follower", labels = {'names':'Pozileidirektion','user_id':'Account', 'followers': 'Follower', 'date':'Datum'})
fig.update_traces(mode='markers+lines')
fig.update_layout(xaxis_title = 'Datum', yaxis_title = 'Follower', xaxis_tickformat = '%Y-%m-%d %H:%M:%S', yaxis_tickformat = ',', legend_traceorder="reversed")
fig.write_html("./index.html")
fig.show() # TODO: Zeitangabe nicer machen, evtl. gruppieren? nach Bundesland? nach landeskriminalamt/polizei? oder urban vs. rural oder so?

View file

@ -0,0 +1,15 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
plotly = "*"
snscrape = {git = "https://github.com/JustAnotherArchivist/snscrape.git"}
pandas = "*"
[dev-packages]
[requires]
python_version = "3.9"

View file

@ -0,0 +1,197 @@
*Git Repository von Team 11 des Copbird Hackathon im Mai 2021*
### Fragestellungen
Was wollen wir tun? (Frage- / Problemstellung)
1. Wie sieht die Entwicklung der Followeranzahl aus? Besonders interessant ist hierbei die Entwicklung im Rahmen bestimmer Events z.B. Demo's.
2. Welche Tweets (von welcher User\*In) behandeln emotionale Thematiken (Sentiment Analyse) ?
Mögliche Hürden:
1. Analyse der Followerentwicklung nicht ohne weiteres möglich, da Twitter keine entsprechenden Information aus der Vergangenheit bereitstellt.
Es können nur Daten ab einen bestimmten Zeitpunkt ausgewertet werden (in Form eines Python Twitter Scraper scripts, welches regelmäßig Twitter kontaktiert).
2. Emotionale Themen auswerten birgt Fallstricke bzgl. Validität/Interpretation.
### Projekt
Wir schreiben ein Skript, das das nächste Jahr lang jeden Tag die Followerzahlen der deutschen Polizeiaccounts scrapen wird, auf einem Server abspeichert und auf einer Website grafisch ausgibt.
Die Ergebnisse können dann auf einem eventuellen Copbird Hackathon 2022 ausgewertet werden <3
Welche Accounts wir dabei betrachten, findet ihr unten aufgelistet.
### Ergebnis
Das Python-Skript findet ihr in diesem Repository. Es verwendet snscrape zum Scrapen der Followerzahlen der Polizeiaccounts (pip3 install git+https://github.com/JustAnotherArchivist/snscrape.git), und Plotly zur Visualisierung.
Die Ergebnisse sind auf dieser Website visualisiert: https://deadc0de.dev/copscrap/
### Liste der betrachteten Polizei-Twitter-Accounts (Twitter-Handles, Stand Mai 2021)
- PolizeiWittlich
- LKA_Bayern
- Polizei_SDL
- PolizeiRV
- Polizei_BadN
- Polizei_ZPD_NI
- Polizei_KO
- PolizeiMainz
- polizei_nrw_ob
- PP_Rheinpfalz
- PolizeiTrier
- PolizeiSachsen
- Polizei_Ffm
- Polizei_nrw_ms
- Polizei_NRW_E
- Polizei_NRW_AC
- polizei_nrw_bi
- polizei_nrw_bo
- polizei_nrw_bn
- polizei_nrw_bor
- polizei_nrw_coe
- polizei_nrw_du
- polizei_nrw_dn
- polizei_nrw_d
- polizei_nrw_w
- polizei_nrw_en
- polizei_nrw_waf
- polizei_nrw_wes
- polizei_nrw_un
- polizei_nrw_eu
- polizei_nrw_vie
- polizei_nrw_st
- polizei_nrw_ge
- polizei_nrw_gt
- polizei_nrw_so
- polizei_nrw_si
- polizei_nrw_su
- polizei_nrw_rkn
- polizei_nrw_rbk
- polizei_nrw_re
- polizei_nrw_rek
- polizei_nrw_pb
- polizei_nrw_gm
- polizei_nrw_oe
- polizei_nrw_mi
- polizei_nrw_me
- polizei_nrw_mk
- polizei_nrw_mg
- polizei_nrw_lip
- polizei_nrw_hx
- polizei_nrw_kr
- polizei_nrw_hsk
- polizei_nrw_kle
- polizei_nrw_hs
- polizei_nrw_ham
- polizei_nrw_hf
- polizei_nrw_ha
- polizeiberlin
- PolizeiBerlin_E
- Polizei_PS
- polizei_nrw_k
- PolizeiMuenchen
- Polizei_MD
- PolizeiHamburg
- polizeiOBS
- Polizei_KA
- Polizei_Thuer
- Polizei_NH
- bpol_bw
- bpol_by
- Polizei_PP_NB
- LKA_Hessen
- PolizeiVG
- Polizei_SN
- Polizei_HST
- PolizeiBhv
- Polizei_OH
- PolizeiMannheim
- PP_Stuttgart
- Polizei_MSE
- Polizei_soh
- Polizei_DeRo
- Polizei_FT
- Polizei_HAL
- PolizeiKonstanz
- bpol_b
- bpol_koblenz
- bpol_kueste
- bpol_bepo
- bpol_air_fra
- bpol_nord
- bpol_pir
- bpol_nrw
- bpol_b_einsatz
- Polizei_MH
- PolizeiBB
- PolizeiUFR
- Polizei_WH
- PolizeiBayern
- polizeiNB
- PolizeiLB
- Polizei_SuedHE
- Polizei_BS
- Polizei_OS
- PolizeiNI_lka
- polizei_nrw_do
- Polizei_LG
- Polizei_H
- Polizei_WL
- Polizei_GOE
- Polizei_HI
- Polizei_EL
- Polizei_HM
- Polizei_NBG
- Polizei_LER_EMD
- Polizei_AUR_WTM
- Polizei_NOM
- Polizei_HOL
- Polizei_OHA
- Polizei_STH
- Pol_Grafschaft
- Polizei_STD
- Polizei_BBG
- Polizei_Rostock
- Polizei_OL
- PolizeiHN
- PolizeiUL
- polizeiSWN
- Polizei_ROW
- Polizei_CE
- PolizeiAalen
- PolizeiOFR
- PolizeiSWS
- polizeiopf
- PolizeiMFR
- BremenPolizei
- PolizeiOG
- SH_Polizei
- Polizei_HK
- LkaBaWue
- polizeiOBN
- PolizeiSaarland
- PolizeiRT
- Polizei_WOB
- PolizeiFR
- Polizei_GER
- PolizeiNeustadt
- bpol_11
- Polizei_GF
- Polizei_KL
- Polizei_GS
- LKA_RLP
- Polizei_SZ
- PolizeiBB_E
- Polizei_CUX
- Polizei_DH
- Polizei_WHV_FRI
- Polizei_DEL
- Polizei_CLP_VEC
- Polizei_VER_OHZ
- Polizei_PP_ROS

View file

@ -0,0 +1,56 @@
#!/usr/bin/env python3
import pandas as pd
import snscrape.modules.twitter as sntwitter
import datetime, time
import os
import plotly.express as px
police_handles = ['PolizeiWittlich','LKA_Bayern','Polizei_SDL','PolizeiRV','Polizei_BadN','Polizei_ZPD_NI','Polizei_KO','PolizeiMainz','polizei_nrw_ob','PP_Rheinpfalz','PolizeiTrier',\
'PolizeiSachsen','Polizei_Ffm','Polizei_nrw_ms','Polizei_NRW_E','Polizei_NRW_AC','polizei_nrw_bi','polizei_nrw_bo','polizei_nrw_bn','polizei_nrw_bor',\
'polizei_nrw_coe','polizei_nrw_du','polizei_nrw_dn','polizei_nrw_d','polizei_nrw_w','polizei_nrw_en','polizei_nrw_waf','polizei_nrw_wes','polizei_nrw_un',\
'polizei_nrw_eu','polizei_nrw_vie','polizei_nrw_st','polizei_nrw_ge','polizei_nrw_gt','polizei_nrw_so','polizei_nrw_si','polizei_nrw_su','polizei_nrw_rkn',\
'polizei_nrw_rbk','polizei_nrw_re','polizei_nrw_rek','polizei_nrw_pb','polizei_nrw_gm','polizei_nrw_oe','polizei_nrw_mi','polizei_nrw_me','polizei_nrw_mk',\
'polizei_nrw_mg','polizei_nrw_lip','polizei_nrw_hx','polizei_nrw_kr','polizei_nrw_hsk','polizei_nrw_kle','polizei_nrw_hs','polizei_nrw_ham','polizei_nrw_hf',\
'polizei_nrw_ha','polizeiberlin','PolizeiBerlin_E','Polizei_PS','polizei_nrw_k','PolizeiMuenchen','Polizei_MD','PolizeiHamburg','polizeiOBS','Polizei_KA',\
'Polizei_Thuer','Polizei_NH','bpol_bw','bpol_by','Polizei_PP_NB','LKA_Hessen','PolizeiVG','Polizei_SN','Polizei_HST','PolizeiBhv','Polizei_OH','PolizeiMannheim',\
'PP_Stuttgart','Polizei_MSE','Polizei_soh','Polizei_DeRo','Polizei_FT','Polizei_HAL','PolizeiKonstanz','bpol_b','bpol_koblenz','bpol_kueste','bpol_bepo',\
'bpol_air_fra','bpol_nord','bpol_pir','bpol_nrw','bpol_b_einsatz','Polizei_MH','PolizeiBB','PolizeiUFR','Polizei_WH','PolizeiBayern','polizeiNB','PolizeiLB',\
'Polizei_SuedHE','Polizei_BS','Polizei_OS','PolizeiNI_lka','polizei_nrw_do','Polizei_LG','Polizei_H','Polizei_WL','Polizei_GOE','Polizei_HI','Polizei_EL',\
'Polizei_HM','Polizei_NBG','Polizei_LER_EMD','Polizei_AUR_WTM','Polizei_NOM','Polizei_HOL','Polizei_OHA','Polizei_STH','Pol_Grafschaft','Polizei_STD','Polizei_BBG',\
'Polizei_Rostock','Polizei_OL','PolizeiHN','PolizeiUL','polizeiSWN','Polizei_ROW','Polizei_CE','PolizeiAalen','PolizeiOFR','PolizeiSWS','polizeiopf','PolizeiMFR',\
'BremenPolizei','PolizeiOG','SH_Polizei','Polizei_HK','LkaBaWue','polizeiOBN','PolizeiSaarland','PolizeiRT','Polizei_WOB','PolizeiFR','Polizei_GER','PolizeiNeustadt',\
'bpol_11','Polizei_GF','Polizei_KL','Polizei_GS','LKA_RLP','Polizei_SZ','PolizeiBB_E','Polizei_CUX','Polizei_DH','Polizei_WHV_FRI','Polizei_DEL','Polizei_CLP_VEC',\
'Polizei_VER_OHZ','Polizei_PP_ROS']
limit = None
names = []
usernames = []
followers = []
for row in police_handles:
twitter_user_in = sntwitter.TwitterUserScraper(row, False)
names += [ str(twitter_user_in.entity.displayname) ]
usernames += [ str(twitter_user_in.entity.username) ]
followers += [ int(twitter_user_in.entity.followersCount) ]
# Existenzprüfung von ./cops.csv
if os.access('./cops.csv', mode = os.O_RDONLY) is False:
add_headers = True
else:
add_headers = False
d = {'names' : names, 'user_id': usernames, 'followers': followers, 'date': str(datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H:%M:%S'))}
df = pd.DataFrame(data = d)
#df
df.to_csv('./cops.csv', index = False, mode = 'a+', header = add_headers)
df_plot = pd.read_csv('./cops.csv')
fig = px.line(df_plot, x="date", y="followers", color="names", hover_data=['user_id'], title="Twitter: Entwicklung der Polizei-Account Follower", labels = {'names':'Pozileidirektion','user_id':'Account', 'followers': 'Follower', 'date':'Datum'})
fig.update_traces(mode='markers+lines')
fig.update_layout(xaxis_title = 'Datum', yaxis_title = 'Follower', xaxis_tickformat = '%Y-%m-%d %H:%M:%S', yaxis_tickformat = ',', legend_traceorder="reversed")
fig.write_html("./index.html")
fig.show() # TODO: Zeitangabe nicer machen, evtl. gruppieren? nach Bundesland? nach landeskriminalamt/polizei? oder urban vs. rural oder so?

View file

@ -0,0 +1,20 @@
# CopBird Group 16
## Tools
* [Python](https://www.python.org/) Version >= 3.8
* [Wekan](https://wekan.github.io/) als Arbeitsgrundlage mit einem Gruppen-Wekan-Board sowie Gesamt-Boards
* [Matrix](https://matrix.org/) zur Kommunikation
Jupyter Notebook verwendet Kernels. Um ein Environment als Kernel zu verwenden, gibt es folgende
Anleitung: https://queirozf.com/entries/jupyter-kernels-how-to-add-change-remove
## Daten
Die Tweets können nicht öffentlich gemacht werden, jedoch sind die Pressemitteilungen und Sentiment-Wörter unter data/ zu finden.
## Ergebnisse
Die wichtigsten Ergebnisse befinden sich in der [Presse-vs.-Twitter](Presse-vs.-Twitter.pdf) PDF.
In den notebooks finden sich zusätzliche Details zur Datenextraktion und Analyse.

Binary file not shown.

View file

@ -0,0 +1,164 @@
Polizei Account Name Typ Bundesland Stadt LAT LONG
bpol_11 Bundespolizei Spezialkräfte Bundespolizei - - -
bpol_bepo Bundesbereitschaftspolizei Bundesbereitschaftspolizei - - - -
bpol_air_fra Bundespolizei Flughafen Frankfurt am Main Bundespolizei Hessen Frankfurt am Main 50.1109221 8.6821267
bpol_b Bundespolizei Berlin Bundespolizei Berlin Berlin 52.520007 13.404954
bpol_b_einsatz Bundespolizei Berlin Einsatz Bundespolizei Berlin Berlin 52.520007 13.404954
bpol_bw Bundespolizei Baden-Württemberg Bundespolizei Baden-Württemberg Böblingen 48.681331 9.008830
bpol_by Bundespolizei Bayern Bundespolizei Bayern München 48.135125 11.581981
bpol_koblenz Bundespolizei Koblenz Bundespolizei Rheinland-Pfalz Koblenz 50.356943 7.588996
bpol_kueste Bundespolizei Küste Bundespolizei Schleswig-Holstein Bad Bramstedt 53.919582 9.882173
bpol_nord Bundespolizei Nord Bundespolizei Niedersachsen Hannover 52.3744779 9.7385532
bpol_nrw Bundespolizei NRW Bundespolizei Nordrhein-Westfalen Sankt Augustin 50.769478 7.187579
bpol_pir Bundespolizei Mitteldeutschland Bundespolizei Sachsen-Anhalt Magdeburg 52.120533 11.627624
bremenpolizei Polizei Bremen Polizei Bremen Bremen 53.079296 8.801694
lkabawue Landeskriminalamt BW Landeskriminalamt Baden-Württemberg Stuttgart 48.775846 9.182932
lka_bayern Bayerisches Landeskriminalamt Landeskriminalamt Bayern München 48.135125 11.581981
lka_hessen Hessisches Landeskriminalamt Landeskriminalamt Hessen Wiesbaden 50.0820384 8.2416556
lka_rlp Landeskriminalamt Rheinland-Pfalz Landeskriminalamt Rheinland-Pfalz Mainz 49.992862 8.247253
pol_grafschaft Polizei Grf Bentheim Polizei Niedersachsen Nordhorn 52.429580 7.068571
polizeiaalen Polizei Aalen Polizei Baden-Württemberg Aalen 48.836689 10.097116
polizei_aur_wtm Polizei Aurich / WTM Polizei Niedersachsen Aurich 53.470839 7.484831
polizei_badn Polizei Bad Nenndorf Polizei Niedersachsen Bad Nenndorf 52.336191 9.374258
polizeibayern Polizei Bayern Polizei Bayern München 48.135125 11.581981
polizeibb Polizei Brandenburg Polizei Brandenburg Potsdam 52.390569 13.064473
polizeibb_e PolizeiBrandenburg_E Polizei Brandenburg Potsdam 52.390569 13.064473
polizei_bbg Polizei Bückeburg Polizei Niedersachsen Bückeburg 52.259276 9.052123
polizeiberlin Polizei Berlin Polizei Berlin Berlin 52.520007 13.404954
polizeiberlin_e Polizei Berlin Einsatz Polizei Berlin Berlin 52.520007 13.404954
polizeibhv Polizei Bremerhaven Polizei Bremen Bremerhaven 53.539584 8.580942
polizei_bs Polizei Braunschweig Polizei Niedersachsen Braunschweig 52.268874 10.526770
polizei_ce Polizei Celle Polizei Niedersachsen Celle 52.617596 10.062852
polizei_clp_vec Polizei Cloppenburg/Vechta Polizei Niedersachsen Cloppenburg 52.844198 8.053016
polizei_cux Polizei Cuxhaven Polizei Niedersachsen Cuxhaven 53.859336 8.687906
polizei_del Polizei Delmenhorst/Oldenburg-Land/Wesermarsch Polizei Niedersachsen Delmenhorst 53.052189 8.635593
polizei_dero Polizei Dessau-Roßlau Polizei Sachsen-Anhalt Dessau-Roßlau 51.842828 12.230393
polizei_dh Polizei Diepholz Polizei Niedersachsen Diepholz 52.605646 8.370788
polizei_el Polizei Emsland Polizei Niedersachsen Lingen 52.540308 7.329286
polizei_ffm Polizei Frankfurt Polizei Hessen Frankfurt am Main 50.110922 8.682127
polizeifr Polizei Freiburg Polizei Baden-Württemberg Freiburg 47.999008 7.842104
polizei_ft Polizei Frankenthal Polizei Rheinland-Pfalz Frankenthal 49.533333 8.350000
polizei_ger Polizei Germersheim Polizei Rheinland-Pfalz Germersheim 49.214024 8.366815
polizei_gf Polizei Gifhorn Polizei Niedersachsen Gifhorn 52.480909 10.550783
polizei_goe Polizei Göttingen Polizei Niedersachsen Göttingen 51.541280 9.915804
polizei_gs Polizei Goslar Polizei Niedersachsen Goslar 51.905953 10.428996
polizei_h Polizei Hannover Polizei Niedersachsen Hannover 52.3744779 9.7385532
polizei_hal Polizei Halle (Saale) Polizei Sachsen-Anhalt Halle (Saale) 51.4825041 11.9705452
polizeihamburg Polizei Hamburg Polizei Hamburg Hamburg 53.550341 10.000654
polizei_hi Polizei Hildesheim Polizei Niedersachsen Hildesheim 52.1521636 9.9513046
polizei_hk Polizei Heidekreis Polizei Niedersachsen Soltau 52.9859666 9.8433909
polizei_hm Polizei Hameln Polizei Niedersachsen Hameln-Pyrmont 52.0895789 9.3875409
polizeihn Polizei Heilbronn Polizei Baden-Württemberg Heilbronn 49.142291 9.218655
polizei_hol Polizei Holzminden Polizei Niedersachsen Holzminden 51.828835 9.4466591
polizei_hst Polizei Stralsund Polizei Mecklenburg-Vorpommern Stralsund 54.3096314 13.0820846
polizei_ka Polizei Karlsruhe Polizei Baden-Württemberg Karlsruhe 49.0068705 8.4034195
polizei_kl Polizei Kaiserslautern Polizei Rheinland-Pfalz Kaiserslautern 49.4432174 7.7689951
polizei_ko Polizei Koblenz Polizei Rheinland-Pfalz Koblenz 50.3533278 7.5943951
polizeikonstanz Polizei Konstanz Polizei Baden-Württemberg Konstanz 47.659216 9.1750718
polizeilb Polizei Ludwigsburg Polizei Baden-Württemberg Ludwigsburg 48.8953937 9.1895147
polizei_ler_emd Polizei Leer / Emden Polizei Niedersachsen Leer 53.2327625 7.4577265
polizei_lg Polizei Lüneburg Polizei Niedersachsen Lüneburg 53.248706 10.407855
polizeimainz Polizei Mainz Polizei Rheinland-Pfalz Mainz 50.0012314 8.2762513
polizeimannheim Polizei Mannheim Polizei Baden-Württemberg Mannheim 49.4892913 8.4673098
polizei_md Polizei Magdeburg Polizei Sachsen-Anhalt Magdeburg 52.1315889 11.6399609
polizeimfr Polizei Mittelfranken Polizei Bayern Nürnberg 49.453872 11.077298
polizei_mh Polizei Mittelhessen Polizei Hessen Gießen 50.5862066 8.6742306
polizei_mse Polizei Mecklenburgische Seenplatte Polizei Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
polizeimuenchen Polizei München Polizei Bayern München 48.135125 11.581981
polizeinb Polizei Niederbayern Polizei Bayern Straubing 48.8819801 12.569716
polizei_nbg Polizei Nienburg Polizei Niedersachsen Nienburg (Weser) 52.6487602 9.2578105
polizeineustadt Polizei Neustadt Polizei Rheinland-Pfalz Neustadt an der Weinstraße 49.3539802 8.1350021
polizei_nh Polizei Nordhessen Polizei Hessen Kassel 51.3154546 9.4924096
polizeini_lka LKA Niedersachsen Landeskriminalamt Niedersachsen Hannover 52.3744779 9.7385532
polizei_nom Polizei Northeim Polizei Niedersachsen Northeim 51.705401 9.9972782
polizei_nrw_ac Polizei NRW AC Polizei Nordrhein-Westfalen Aachen 50.776351 6.083862
polizei_nrw_bi Polizei NRW BI Polizei Nordrhein-Westfalen Bielefeld 52.0191005 8.531007
polizei_nrw_bn Polizei NRW BN Polizei Nordrhein-Westfalen Bonn 50.735851 7.10066
polizei_nrw_bo Polizei NRW BO Polizei Nordrhein-Westfalen Bochum 51.4818111 7.2196635
polizei_nrw_bor Polizei NRW BOR Polizei Nordrhein-Westfalen Borken 51.8443183 6.8582247
polizei_nrw_coe Polizei NRW COE Polizei Nordrhein-Westfalen Coesfeld 51.9458943 7.1691108
polizei_nrw_d Polizei NRW D Polizei Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
polizei_nrw_dn Polizei NRW DN Polizei Nordrhein-Westfalen Düren 50.8031684 6.4820806
polizei_nrw_do Polizei NRW DO Polizei Nordrhein-Westfalen Dortmund 51.5142273 7.4652789
polizei_nrw_du Polizei NRW DU Polizei Nordrhein-Westfalen Duisburg 51.434999 6.759562
polizei_nrw_e Polizei NRW E Polizei Nordrhein-Westfalen Essen 51.4582235 7.0158171
polizei_nrw_en Polizei NRW EN Polizei Nordrhein-Westfalen Ennepe-Ruhr-Kreis 51.3481444 7.3351844
polizei_nrw_eu Polizei NRW EU Polizei Nordrhein-Westfalen Euskirchen 50.6612623 6.7871219
polizei_nrw_ge Polizei NRW GE Polizei Nordrhein-Westfalen Gelsenkirchen 51.5110321 7.0960124
polizei_nrw_gm Polizei NRW GM Polizei Nordrhein-Westfalen Gummersbach 51.0277658 7.5630545
polizei_nrw_gt Polizei NRW GT Polizei Nordrhein-Westfalen Gütersloh 51.9063997 8.3782078
polizei_nrw_ha Polizei NRW HA Polizei Nordrhein-Westfalen Hagen 51.3582945 7.473296
polizei_nrw_ham Polizei NRW HAM Polizei Nordrhein-Westfalen Hamm 51.6804093 7.815197
polizei_nrw_hf Polizei NRW HF Polizei Nordrhein-Westfalen Herford 52.1152245 8.6711118
polizei_nrw_hs Polizei NRW HS Polizei Nordrhein-Westfalen Heinsberg 51.0654268 6.0984461
polizei_nrw_hsk Polizei NRW HSK Polizei Nordrhein-Westfalen Hochsauerlandkreis 51.3208247 8.2684925
polizei_nrw_hx Polizei NRW HX Polizei Nordrhein-Westfalen Höxter 51.7747369 9.3816877
polizei_nrw_k Polizei NRW K Polizei Nordrhein-Westfalen Köln 50.938361 6.959974
polizei_nrw_kle Polizei NRW KLE Polizei Nordrhein-Westfalen Kleve 51.7854839 6.1313674
polizei_nrw_kr Polizei NRW KR Polizei Nordrhein-Westfalen Krefeld 51.3331205 6.5623343
polizei_nrw_lip Polizei NRW LIP Polizei Nordrhein-Westfalen Detmold 51.936284 8.8791526
polizei_nrw_lka Polizei NRW LKA Landeskriminalamt Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
polizei_nrw_me polizei_nrw_me Polizei Nordrhein-Westfalen Mettmann 51.2527778 6.9777778
polizei_nrw_mg Polizei NRW MG Polizei Nordrhein-Westfalen Mönchengladbach 51.1946983 6.4353641
polizei_nrw_mi Polizei NRW MI Polizei Nordrhein-Westfalen Minden 52.2881045 8.9168852
polizei_nrw_mk Polizei NRW MK Polizei Nordrhein-Westfalen Märkischer Kreis 51.2734857 7.7274266
polizei_nrw_ms Polizei NRW MS Polizei Nordrhein-Westfalen Münster 51.9625101 7.6251879
polizei_nrw_ob Polizei NRW OB Polizei Nordrhein-Westfalen Oberhausen 51.4696137 6.8514435
polizei_nrw_oe Polizei NRW OE Polizei Nordrhein-Westfalen Olpe 51.0297603 7.8424193
polizei_nrw_pb Polizei NRW PB Polizei Nordrhein-Westfalen Paderborn 51.7189596 8.7648698
polizei_nrw_rbk Polizei NRW RBK Polizei Nordrhein-Westfalen Rheinisch-Bergischer-Kreis 51.0139774 7.1715584
polizei_nrw_re Polizei NRW RE Polizei Nordrhein-Westfalen Recklinghausen 51.6143815 7.1978546
polizei_nrw_rek Polizei NRW REK Polizei Nordrhein-Westfalen Rhein-Erft-Kreis 50.90334 6.763334
polizei_nrw_rkn Polizei NRW RKN Polizei Nordrhein-Westfalen Rhein-Kreis Neuss 51.1758799 6.6600606
polizei_nrw_si Polizei NRW SI Polizei Nordrhein-Westfalen Siegen-Wittgenstein 50.97444 8.23972
polizei_nrw_so Polizei NRW SO Polizei Nordrhein-Westfalen Soest 51.5725501 8.1061259
polizei_nrw_st Polizei NRW ST Polizei Nordrhein-Westfalen Steinfurt 52.1294289 7.3903454
polizei_nrw_su Polizei NRW SU Polizei Nordrhein-Westfalen Rhein-Sieg-Kreis 50.7527986 7.3813038
polizei_nrw_un Polizei NRW UN Polizei Nordrhein-Westfalen Unna 51.5348835 7.689014
polizei_nrw_vie Polizei NRW VIE Polizei Nordrhein-Westfalen Viersen 51.2562118 6.3905476
polizei_nrw_w Polizei NRW W Polizei Nordrhein-Westfalen Wuppertal 51.264018 7.1780374
polizei_nrw_waf Polizei NRW WAF Polizei Nordrhein-Westfalen Warendorf 51.9532449 7.9912335
polizei_nrw_wes Polizei NRW WES Polizei Nordrhein-Westfalen Wesel 51.6576909 6.617087
polizeiobn Polizei Oberbayern N Polizei Bayern Ingolstadt 48.7630165 11.4250395
polizeiobs PolizeiOberbayernSüd Polizei Bayern Rosenheim 47.8539273 12.127262
polizeiofr Polizei Oberfranken Polizei Bayern Oberfranken 50.0553084 11.5455233
polizeiog Polizei Offenburg Polizei Baden-Württemberg Offenburg 48.4716556 7.944378
polizei_oh Polizei Osthessen Polizei Hessen Fulda 50.5521486 9.676511
polizei_oha Polizei Osterode Polizei Niedersachsen Osterode am Harz 51.72784 10.2508204
polizei_ol Polizei Oldenburg-Stadt/Ammerland Polizei Niedersachsen Oldenburg 53.1389753 8.2146017
polizeiopf Polizei Oberpfalz Polizei Bayern Regensburg 49.0195333 12.0974869
polizei_os Polizei Osnabrück Polizei Niedersachsen Osnabrück 52.266837 8.049741
polizei_pf Polizei Pforzheim Polizei Baden-Württemberg Pforzheim 48.8908846 8.7029532
polizei_pp_nb Polizeipräsidium NB Polizeipräsidium Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
polizei_pp_ros Polizeipräsidium Rostock Polizeipräsidium Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
polizei_ps Polizei Pirmasens Polizei Rheinland-Pfalz Pirmasens 49.1996961 7.6087847
polizei_rostock Polizei Rostock Polizei Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
polizei_row Polizei Rotenburg Polizei Niedersachsen Rotenburg (Wümme) 53.2520924 9.3151133
polizeirt Polizei Reutlingen Polizei Baden-Württemberg Reutlingen 48.4919508 9.2114144
polizeirv Polizei Ravensburg Polizei Baden-Württemberg Ravensburg 47.7811014 9.612468
polizeisaarland Polizei Saarland Polizei Saarland Saarbrücken 49.234362 6.996379
polizeisachsen Polizei Sachsen Polizei Sachsen Dresden 51.0493286 13.7381437
polizei_sdl Polizei Stendal Polizei Sachsen-Anhalt Stendal 52.6050782 11.8594279
polizei_sn Polizei Schwerin Polizei Mecklenburg-Vorpommern Schwerin 53.6288297 11.4148038
polizei_soh Polizei Südosthessen Polizei Hessen Offenbach am Main 50.1055002 8.7610698
polizei_std Polizei Stade Polizei Niedersachsen Stade 53.599794 9.475438
polizei_sth Polizei Stadthagen Polizei Niedersachsen Stadthagen 52.3289688 9.2053496
polizei_suedhe Polizei Südhessen Polizei Hessen Darmstadt 49.872775 8.651177
polizeiswn Polizei Schwaben Nord Polizei Bayern Augsburg 48.3668041 10.8986971
polizeisws Polizei Schwaben S/W Polizei Bayern Kempten (Allgäu) 47.7267063 10.3168835
polizei_sz Polizei SZ / PE / WF Polizei Niedersachsen Salzgitter 52.1503721 10.3593147
polizei_thuer Polizei Thüringen Polizei Thüringen Erfurt 50.9777974 11.0287364
polizeitrier Polizei Trier Polizei Rheinland-Pfalz Trier 49.7596208 6.6441878
polizeiufr Polizei Unterfranken Polizei Bayern Würzburg 49.79245 9.932966
polizeiul Polizei Ulm Polizei Baden-Württemberg Ulm 48.3974003 9.9934336
polizei_ver_ohz Polizei Verden/Osterholz Polizei Niedersachsen Verden 52.922341 9.228153
polizeivg Polizei Vorpommern-Greifswald Polizei Mecklenburg-Vorpommern Anklam 53.8560526 13.688091
polizei_wh Polizei Westhessen Polizei Hessen Wiesbaden 50.0820384 8.2416556
polizei_whv_fri Polizei Wilhelmshaven/Friesland Polizei Niedersachsen Wilhelmshaven 53.5278793 8.106301
polizeiwittlich Polizei Wittlich Polizei Rheinland-Pfalz Wittlich 49.9850353 6.88844
polizei_wl Polizei LK Harburg Polizei Niedersachsen Harburg 53.3172237 9.9084936
polizei_wob Polizei Wolfsburg Polizei Niedersachsen Wolfsburg 52.4205588 10.7861682
polizei_zpd_ni Polizei ZPD NI Polizei Niedersachsen Hannover 52.3744779 9.7385532
pp_rheinpfalz Polizei Rheinpfalz Polizei Rheinland-Pfalz Ludwigshafen am Rhein 49.4704113 8.4381568
pp_stuttgart Polizei Stuttgart Polizei Baden-Württemberg Stuttgart 48.7784485 9.1800132
sh_polizei Polizei SH Polizei Schleswig-Holstein Kiel 54.3227085 10.135555
1 Polizei Account Name Typ Bundesland Stadt LAT LONG
2 bpol_11 Bundespolizei Spezialkräfte Bundespolizei - - -
3 bpol_bepo Bundesbereitschaftspolizei Bundesbereitschaftspolizei - - - -
4 bpol_air_fra Bundespolizei Flughafen Frankfurt am Main Bundespolizei Hessen Frankfurt am Main 50.1109221 8.6821267
5 bpol_b Bundespolizei Berlin Bundespolizei Berlin Berlin 52.520007 13.404954
6 bpol_b_einsatz Bundespolizei Berlin Einsatz Bundespolizei Berlin Berlin 52.520007 13.404954
7 bpol_bw Bundespolizei Baden-Württemberg Bundespolizei Baden-Württemberg Böblingen 48.681331 9.008830
8 bpol_by Bundespolizei Bayern Bundespolizei Bayern München 48.135125 11.581981
9 bpol_koblenz Bundespolizei Koblenz Bundespolizei Rheinland-Pfalz Koblenz 50.356943 7.588996
10 bpol_kueste Bundespolizei Küste Bundespolizei Schleswig-Holstein Bad Bramstedt 53.919582 9.882173
11 bpol_nord Bundespolizei Nord Bundespolizei Niedersachsen Hannover 52.3744779 9.7385532
12 bpol_nrw Bundespolizei NRW Bundespolizei Nordrhein-Westfalen Sankt Augustin 50.769478 7.187579
13 bpol_pir Bundespolizei Mitteldeutschland Bundespolizei Sachsen-Anhalt Magdeburg 52.120533 11.627624
14 bremenpolizei Polizei Bremen Polizei Bremen Bremen 53.079296 8.801694
15 lkabawue Landeskriminalamt BW Landeskriminalamt Baden-Württemberg Stuttgart 48.775846 9.182932
16 lka_bayern Bayerisches Landeskriminalamt Landeskriminalamt Bayern München 48.135125 11.581981
17 lka_hessen Hessisches Landeskriminalamt Landeskriminalamt Hessen Wiesbaden 50.0820384 8.2416556
18 lka_rlp Landeskriminalamt Rheinland-Pfalz Landeskriminalamt Rheinland-Pfalz Mainz 49.992862 8.247253
19 pol_grafschaft Polizei Grf Bentheim Polizei Niedersachsen Nordhorn 52.429580 7.068571
20 polizeiaalen Polizei Aalen Polizei Baden-Württemberg Aalen 48.836689 10.097116
21 polizei_aur_wtm Polizei Aurich / WTM Polizei Niedersachsen Aurich 53.470839 7.484831
22 polizei_badn Polizei Bad Nenndorf Polizei Niedersachsen Bad Nenndorf 52.336191 9.374258
23 polizeibayern Polizei Bayern Polizei Bayern München 48.135125 11.581981
24 polizeibb Polizei Brandenburg Polizei Brandenburg Potsdam 52.390569 13.064473
25 polizeibb_e PolizeiBrandenburg_E Polizei Brandenburg Potsdam 52.390569 13.064473
26 polizei_bbg Polizei Bückeburg Polizei Niedersachsen Bückeburg 52.259276 9.052123
27 polizeiberlin Polizei Berlin Polizei Berlin Berlin 52.520007 13.404954
28 polizeiberlin_e Polizei Berlin Einsatz Polizei Berlin Berlin 52.520007 13.404954
29 polizeibhv Polizei Bremerhaven Polizei Bremen Bremerhaven 53.539584 8.580942
30 polizei_bs Polizei Braunschweig Polizei Niedersachsen Braunschweig 52.268874 10.526770
31 polizei_ce Polizei Celle Polizei Niedersachsen Celle 52.617596 10.062852
32 polizei_clp_vec Polizei Cloppenburg/Vechta Polizei Niedersachsen Cloppenburg 52.844198 8.053016
33 polizei_cux Polizei Cuxhaven Polizei Niedersachsen Cuxhaven 53.859336 8.687906
34 polizei_del Polizei Delmenhorst/Oldenburg-Land/Wesermarsch Polizei Niedersachsen Delmenhorst 53.052189 8.635593
35 polizei_dero Polizei Dessau-Roßlau Polizei Sachsen-Anhalt Dessau-Roßlau 51.842828 12.230393
36 polizei_dh Polizei Diepholz Polizei Niedersachsen Diepholz 52.605646 8.370788
37 polizei_el Polizei Emsland Polizei Niedersachsen Lingen 52.540308 7.329286
38 polizei_ffm Polizei Frankfurt Polizei Hessen Frankfurt am Main 50.110922 8.682127
39 polizeifr Polizei Freiburg Polizei Baden-Württemberg Freiburg 47.999008 7.842104
40 polizei_ft Polizei Frankenthal Polizei Rheinland-Pfalz Frankenthal 49.533333 8.350000
41 polizei_ger Polizei Germersheim Polizei Rheinland-Pfalz Germersheim 49.214024 8.366815
42 polizei_gf Polizei Gifhorn Polizei Niedersachsen Gifhorn 52.480909 10.550783
43 polizei_goe Polizei Göttingen Polizei Niedersachsen Göttingen 51.541280 9.915804
44 polizei_gs Polizei Goslar Polizei Niedersachsen Goslar 51.905953 10.428996
45 polizei_h Polizei Hannover Polizei Niedersachsen Hannover 52.3744779 9.7385532
46 polizei_hal Polizei Halle (Saale) Polizei Sachsen-Anhalt Halle (Saale) 51.4825041 11.9705452
47 polizeihamburg Polizei Hamburg Polizei Hamburg Hamburg 53.550341 10.000654
48 polizei_hi Polizei Hildesheim Polizei Niedersachsen Hildesheim 52.1521636 9.9513046
49 polizei_hk Polizei Heidekreis Polizei Niedersachsen Soltau 52.9859666 9.8433909
50 polizei_hm Polizei Hameln Polizei Niedersachsen Hameln-Pyrmont 52.0895789 9.3875409
51 polizeihn Polizei Heilbronn Polizei Baden-Württemberg Heilbronn 49.142291 9.218655
52 polizei_hol Polizei Holzminden Polizei Niedersachsen Holzminden 51.828835 9.4466591
53 polizei_hst Polizei Stralsund Polizei Mecklenburg-Vorpommern Stralsund 54.3096314 13.0820846
54 polizei_ka Polizei Karlsruhe Polizei Baden-Württemberg Karlsruhe 49.0068705 8.4034195
55 polizei_kl Polizei Kaiserslautern Polizei Rheinland-Pfalz Kaiserslautern 49.4432174 7.7689951
56 polizei_ko Polizei Koblenz Polizei Rheinland-Pfalz Koblenz 50.3533278 7.5943951
57 polizeikonstanz Polizei Konstanz Polizei Baden-Württemberg Konstanz 47.659216 9.1750718
58 polizeilb Polizei Ludwigsburg Polizei Baden-Württemberg Ludwigsburg 48.8953937 9.1895147
59 polizei_ler_emd Polizei Leer / Emden Polizei Niedersachsen Leer 53.2327625 7.4577265
60 polizei_lg Polizei Lüneburg Polizei Niedersachsen Lüneburg 53.248706 10.407855
61 polizeimainz Polizei Mainz Polizei Rheinland-Pfalz Mainz 50.0012314 8.2762513
62 polizeimannheim Polizei Mannheim Polizei Baden-Württemberg Mannheim 49.4892913 8.4673098
63 polizei_md Polizei Magdeburg Polizei Sachsen-Anhalt Magdeburg 52.1315889 11.6399609
64 polizeimfr Polizei Mittelfranken Polizei Bayern Nürnberg 49.453872 11.077298
65 polizei_mh Polizei Mittelhessen Polizei Hessen Gießen 50.5862066 8.6742306
66 polizei_mse Polizei Mecklenburgische Seenplatte Polizei Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
67 polizeimuenchen Polizei München Polizei Bayern München 48.135125 11.581981
68 polizeinb Polizei Niederbayern Polizei Bayern Straubing 48.8819801 12.569716
69 polizei_nbg Polizei Nienburg Polizei Niedersachsen Nienburg (Weser) 52.6487602 9.2578105
70 polizeineustadt Polizei Neustadt Polizei Rheinland-Pfalz Neustadt an der Weinstraße 49.3539802 8.1350021
71 polizei_nh Polizei Nordhessen Polizei Hessen Kassel 51.3154546 9.4924096
72 polizeini_lka LKA Niedersachsen Landeskriminalamt Niedersachsen Hannover 52.3744779 9.7385532
73 polizei_nom Polizei Northeim Polizei Niedersachsen Northeim 51.705401 9.9972782
74 polizei_nrw_ac Polizei NRW AC Polizei Nordrhein-Westfalen Aachen 50.776351 6.083862
75 polizei_nrw_bi Polizei NRW BI Polizei Nordrhein-Westfalen Bielefeld 52.0191005 8.531007
76 polizei_nrw_bn Polizei NRW BN Polizei Nordrhein-Westfalen Bonn 50.735851 7.10066
77 polizei_nrw_bo Polizei NRW BO Polizei Nordrhein-Westfalen Bochum 51.4818111 7.2196635
78 polizei_nrw_bor Polizei NRW BOR Polizei Nordrhein-Westfalen Borken 51.8443183 6.8582247
79 polizei_nrw_coe Polizei NRW COE Polizei Nordrhein-Westfalen Coesfeld 51.9458943 7.1691108
80 polizei_nrw_d Polizei NRW D Polizei Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
81 polizei_nrw_dn Polizei NRW DN Polizei Nordrhein-Westfalen Düren 50.8031684 6.4820806
82 polizei_nrw_do Polizei NRW DO Polizei Nordrhein-Westfalen Dortmund 51.5142273 7.4652789
83 polizei_nrw_du Polizei NRW DU Polizei Nordrhein-Westfalen Duisburg 51.434999 6.759562
84 polizei_nrw_e Polizei NRW E Polizei Nordrhein-Westfalen Essen 51.4582235 7.0158171
85 polizei_nrw_en Polizei NRW EN Polizei Nordrhein-Westfalen Ennepe-Ruhr-Kreis 51.3481444 7.3351844
86 polizei_nrw_eu Polizei NRW EU Polizei Nordrhein-Westfalen Euskirchen 50.6612623 6.7871219
87 polizei_nrw_ge Polizei NRW GE Polizei Nordrhein-Westfalen Gelsenkirchen 51.5110321 7.0960124
88 polizei_nrw_gm Polizei NRW GM Polizei Nordrhein-Westfalen Gummersbach 51.0277658 7.5630545
89 polizei_nrw_gt Polizei NRW GT Polizei Nordrhein-Westfalen Gütersloh 51.9063997 8.3782078
90 polizei_nrw_ha Polizei NRW HA Polizei Nordrhein-Westfalen Hagen 51.3582945 7.473296
91 polizei_nrw_ham Polizei NRW HAM Polizei Nordrhein-Westfalen Hamm 51.6804093 7.815197
92 polizei_nrw_hf Polizei NRW HF Polizei Nordrhein-Westfalen Herford 52.1152245 8.6711118
93 polizei_nrw_hs Polizei NRW HS Polizei Nordrhein-Westfalen Heinsberg 51.0654268 6.0984461
94 polizei_nrw_hsk Polizei NRW HSK Polizei Nordrhein-Westfalen Hochsauerlandkreis 51.3208247 8.2684925
95 polizei_nrw_hx Polizei NRW HX Polizei Nordrhein-Westfalen Höxter 51.7747369 9.3816877
96 polizei_nrw_k Polizei NRW K Polizei Nordrhein-Westfalen Köln 50.938361 6.959974
97 polizei_nrw_kle Polizei NRW KLE Polizei Nordrhein-Westfalen Kleve 51.7854839 6.1313674
98 polizei_nrw_kr Polizei NRW KR Polizei Nordrhein-Westfalen Krefeld 51.3331205 6.5623343
99 polizei_nrw_lip Polizei NRW LIP Polizei Nordrhein-Westfalen Detmold 51.936284 8.8791526
100 polizei_nrw_lka Polizei NRW LKA Landeskriminalamt Nordrhein-Westfalen Düsseldorf 51.2254018 6.7763137
101 polizei_nrw_me polizei_nrw_me Polizei Nordrhein-Westfalen Mettmann 51.2527778 6.9777778
102 polizei_nrw_mg Polizei NRW MG Polizei Nordrhein-Westfalen Mönchengladbach 51.1946983 6.4353641
103 polizei_nrw_mi Polizei NRW MI Polizei Nordrhein-Westfalen Minden 52.2881045 8.9168852
104 polizei_nrw_mk Polizei NRW MK Polizei Nordrhein-Westfalen Märkischer Kreis 51.2734857 7.7274266
105 polizei_nrw_ms Polizei NRW MS Polizei Nordrhein-Westfalen Münster 51.9625101 7.6251879
106 polizei_nrw_ob Polizei NRW OB Polizei Nordrhein-Westfalen Oberhausen 51.4696137 6.8514435
107 polizei_nrw_oe Polizei NRW OE Polizei Nordrhein-Westfalen Olpe 51.0297603 7.8424193
108 polizei_nrw_pb Polizei NRW PB Polizei Nordrhein-Westfalen Paderborn 51.7189596 8.7648698
109 polizei_nrw_rbk Polizei NRW RBK Polizei Nordrhein-Westfalen Rheinisch-Bergischer-Kreis 51.0139774 7.1715584
110 polizei_nrw_re Polizei NRW RE Polizei Nordrhein-Westfalen Recklinghausen 51.6143815 7.1978546
111 polizei_nrw_rek Polizei NRW REK Polizei Nordrhein-Westfalen Rhein-Erft-Kreis 50.90334 6.763334
112 polizei_nrw_rkn Polizei NRW RKN Polizei Nordrhein-Westfalen Rhein-Kreis Neuss 51.1758799 6.6600606
113 polizei_nrw_si Polizei NRW SI Polizei Nordrhein-Westfalen Siegen-Wittgenstein 50.97444 8.23972
114 polizei_nrw_so Polizei NRW SO Polizei Nordrhein-Westfalen Soest 51.5725501 8.1061259
115 polizei_nrw_st Polizei NRW ST Polizei Nordrhein-Westfalen Steinfurt 52.1294289 7.3903454
116 polizei_nrw_su Polizei NRW SU Polizei Nordrhein-Westfalen Rhein-Sieg-Kreis 50.7527986 7.3813038
117 polizei_nrw_un Polizei NRW UN Polizei Nordrhein-Westfalen Unna 51.5348835 7.689014
118 polizei_nrw_vie Polizei NRW VIE Polizei Nordrhein-Westfalen Viersen 51.2562118 6.3905476
119 polizei_nrw_w Polizei NRW W Polizei Nordrhein-Westfalen Wuppertal 51.264018 7.1780374
120 polizei_nrw_waf Polizei NRW WAF Polizei Nordrhein-Westfalen Warendorf 51.9532449 7.9912335
121 polizei_nrw_wes Polizei NRW WES Polizei Nordrhein-Westfalen Wesel 51.6576909 6.617087
122 polizeiobn Polizei Oberbayern N Polizei Bayern Ingolstadt 48.7630165 11.4250395
123 polizeiobs PolizeiOberbayernSüd Polizei Bayern Rosenheim 47.8539273 12.127262
124 polizeiofr Polizei Oberfranken Polizei Bayern Oberfranken 50.0553084 11.5455233
125 polizeiog Polizei Offenburg Polizei Baden-Württemberg Offenburg 48.4716556 7.944378
126 polizei_oh Polizei Osthessen Polizei Hessen Fulda 50.5521486 9.676511
127 polizei_oha Polizei Osterode Polizei Niedersachsen Osterode am Harz 51.72784 10.2508204
128 polizei_ol Polizei Oldenburg-Stadt/Ammerland Polizei Niedersachsen Oldenburg 53.1389753 8.2146017
129 polizeiopf Polizei Oberpfalz Polizei Bayern Regensburg 49.0195333 12.0974869
130 polizei_os Polizei Osnabrück Polizei Niedersachsen Osnabrück 52.266837 8.049741
131 polizei_pf Polizei Pforzheim Polizei Baden-Württemberg Pforzheim 48.8908846 8.7029532
132 polizei_pp_nb Polizeipräsidium NB Polizeipräsidium Mecklenburg-Vorpommern Neubrandenburg 53.5574458 13.2602781
133 polizei_pp_ros Polizeipräsidium Rostock Polizeipräsidium Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
134 polizei_ps Polizei Pirmasens Polizei Rheinland-Pfalz Pirmasens 49.1996961 7.6087847
135 polizei_rostock Polizei Rostock Polizei Mecklenburg-Vorpommern Rostock 54.0924445 12.1286127
136 polizei_row Polizei Rotenburg Polizei Niedersachsen Rotenburg (Wümme) 53.2520924 9.3151133
137 polizeirt Polizei Reutlingen Polizei Baden-Württemberg Reutlingen 48.4919508 9.2114144
138 polizeirv Polizei Ravensburg Polizei Baden-Württemberg Ravensburg 47.7811014 9.612468
139 polizeisaarland Polizei Saarland Polizei Saarland Saarbrücken 49.234362 6.996379
140 polizeisachsen Polizei Sachsen Polizei Sachsen Dresden 51.0493286 13.7381437
141 polizei_sdl Polizei Stendal Polizei Sachsen-Anhalt Stendal 52.6050782 11.8594279
142 polizei_sn Polizei Schwerin Polizei Mecklenburg-Vorpommern Schwerin 53.6288297 11.4148038
143 polizei_soh Polizei Südosthessen Polizei Hessen Offenbach am Main 50.1055002 8.7610698
144 polizei_std Polizei Stade Polizei Niedersachsen Stade 53.599794 9.475438
145 polizei_sth Polizei Stadthagen Polizei Niedersachsen Stadthagen 52.3289688 9.2053496
146 polizei_suedhe Polizei Südhessen Polizei Hessen Darmstadt 49.872775 8.651177
147 polizeiswn Polizei Schwaben Nord Polizei Bayern Augsburg 48.3668041 10.8986971
148 polizeisws Polizei Schwaben S/W Polizei Bayern Kempten (Allgäu) 47.7267063 10.3168835
149 polizei_sz Polizei SZ / PE / WF Polizei Niedersachsen Salzgitter 52.1503721 10.3593147
150 polizei_thuer Polizei Thüringen Polizei Thüringen Erfurt 50.9777974 11.0287364
151 polizeitrier Polizei Trier Polizei Rheinland-Pfalz Trier 49.7596208 6.6441878
152 polizeiufr Polizei Unterfranken Polizei Bayern Würzburg 49.79245 9.932966
153 polizeiul Polizei Ulm Polizei Baden-Württemberg Ulm 48.3974003 9.9934336
154 polizei_ver_ohz Polizei Verden/Osterholz Polizei Niedersachsen Verden 52.922341 9.228153
155 polizeivg Polizei Vorpommern-Greifswald Polizei Mecklenburg-Vorpommern Anklam 53.8560526 13.688091
156 polizei_wh Polizei Westhessen Polizei Hessen Wiesbaden 50.0820384 8.2416556
157 polizei_whv_fri Polizei Wilhelmshaven/Friesland Polizei Niedersachsen Wilhelmshaven 53.5278793 8.106301
158 polizeiwittlich Polizei Wittlich Polizei Rheinland-Pfalz Wittlich 49.9850353 6.88844
159 polizei_wl Polizei LK Harburg Polizei Niedersachsen Harburg 53.3172237 9.9084936
160 polizei_wob Polizei Wolfsburg Polizei Niedersachsen Wolfsburg 52.4205588 10.7861682
161 polizei_zpd_ni Polizei ZPD NI Polizei Niedersachsen Hannover 52.3744779 9.7385532
162 pp_rheinpfalz Polizei Rheinpfalz Polizei Rheinland-Pfalz Ludwigshafen am Rhein 49.4704113 8.4381568
163 pp_stuttgart Polizei Stuttgart Polizei Baden-Württemberg Stuttgart 48.7784485 9.1800132
164 sh_polizei Polizei SH Polizei Schleswig-Holstein Kiel 54.3227085 10.135555

View file

@ -0,0 +1,39 @@
import pandas as pd
import spacy
from string import punctuation
from tqdm import tqdm
tqdm.pandas()
tw_tweets = pd.read_csv(r'data\copbird_table_tweet_ext_state.csv')
nlp = spacy.load('de_core_news_lg')
def clean_tweet(txt):
doc = nlp(txt)
token_list = []
for token in doc:
if (token.text not in punctuation) and (token.is_stop is False):
token_list.append(token.lemma_)
else:
pass
return ' '.join(token_list)
def get_topics_by_str_lst(topic, df, col_name):
df_topiced = df[df[col_name].str.contains('|'.join(topic))]
return df_topiced
if __name__ == '__main__':
topic_1 = ['demonstr', 'kundgeb']
topic_2 = ['drogen', 'weed', 'graas', 'lsd', 'cannabis', 'ecstasy', 'kokain', 'meth', 'crystal']
topic_3 = ['rassis', 'diskriminier', 'ausländerfeindlich', 'fremdenfeindlich', 'fremdenhass']
topic_4 = ['antisem', 'juden', 'synagoge', 'judenhass', 'judenfeindlich', 'holocaust']
df_pm = pd.read_csv(r'data\2020-12_2021-05_presseportal.csv', na_filter=False)
df_pm_col = 'content'
print(get_topics_by_str_lst(topic=topic_3, df=df_pm, col_name=df_pm_col).to_markdown())

View file

@ -0,0 +1,394 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"id": "7158ac22",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import pyLDAvis.sklearn\n",
"from sklearn.decomposition import LatentDirichletAllocation\n",
"from sklearn.feature_extraction.text import CountVectorizer\n",
"import pandas as pd\n",
"import spacy\n",
"from multiprocess import Pool"
]
},
{
"cell_type": "markdown",
"id": "69f33a46",
"metadata": {},
"source": [
"Funktionen zur Vorverarbeitung"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1c66c06c",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def filterSentencesByMinWordCount(text, minWordCount):\n",
" sentenceList = []\n",
" doc = nlp(text)\n",
" for sent in doc.sents:\n",
" wordList = []\n",
" sent.text.rstrip()\n",
" for word in sent:\n",
" wordList.append(word)\n",
" if len(wordList) >= minWordCount:\n",
" sentenceList.append(sent.text.rstrip())\n",
" return sentenceList"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "3b9d084d",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def extractSentences(document):\n",
" logging.debug('Extracting Sentences')\n",
" text = extractBodyContent(document)\n",
" sentenceList = filterSentencesByMinWordCount(text, 4)\n",
" return sentenceList"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "7d85891e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def tokenizeSentence(doc):\n",
" logging.debug('Tokenizing')\n",
" tokenList = []\n",
" for token in doc:\n",
" childrenList = []\n",
" for child in token.children:\n",
" childToken = ScToken(child.text,\n",
" child.lemma_,\n",
" child.pos_, str(spacy.explain(child.pos_)),\n",
" child.tag_, str(spacy.explain(child.tag_)),\n",
" child.dep_, str(spacy.explain(child.dep_)),\n",
" child.shape_, child.is_alpha, child.is_stop)\n",
" childrenList.append(childToken)\n",
"\n",
" scToken = ScToken(token.text,\n",
" token.lemma_,\n",
" token.pos_, str(spacy.explain(token.pos_)),\n",
" token.tag_, str(spacy.explain(token.tag_)),\n",
" token.dep_, str(spacy.explain(token.dep_)),\n",
" token.shape_, token.is_alpha, token.is_stop,\n",
" childrenList)\n",
" tokenList.append(scToken)\n",
" return tokenList"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "7564c883",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def chunkSentence(doc):\n",
" logging.debug('Chunking')\n",
" chunkList = []\n",
" for chunk in doc.noun_chunks:\n",
" scChunk = ScChunk(chunk.text, chunk.root.text,\n",
" chunk.root.dep_, chunk.root.head.text)\n",
" chunkList.append(scChunk)\n",
" return chunkList"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "5db74302",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def findEntitiesInSentence(doc):\n",
" logging.debug('Extracting Named Entities')\n",
" entityList = []\n",
" for ent in doc.ents:\n",
" entity = ScEntity(ent.text, ent.start_char, ent.end_char,\n",
" ent.label_, str(spacy.explain(ent.label_)))\n",
" entityList.append(entity)\n",
" return entityList"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b6753a90",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def fillSentences(document):\n",
" logging.info(\n",
" 'Building Sentences (Tokenizing, Chunking, Named Entity Recognition)')\n",
" sentenceList = []\n",
" sentences = extractSentences(document)\n",
" for i, sentence in enumerate(sentences):\n",
" doc = nlp(sentence)\n",
" id = i\n",
" tokens = tokenizeSentence(doc)\n",
" chunks = chunkSentence(doc)\n",
" entities = findEntitiesInSentence(doc)\n",
" scSentence = ScSentence(id, sentence, tokens, chunks, entities)\n",
" sentenceList.append(scSentence)\n",
"\n",
" return sentenceList"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "9af7a5c0",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def fillSentencesAsOneString(sentences):\n",
" sentencesAsOneString = str()\n",
" for sentence in sentences:\n",
" sentencesAsOneString += sentence.text\n",
" return sentencesAsOneString"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "8f952c82",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def removeStopwords(text):\n",
" doc = nlp(text)\n",
" tokens = tokenizeSentence(doc)\n",
" chunksNoStopwords = [\n",
" t.text for t in tokens if (not t.isStopword)]\n",
" return \" \".join(chunksNoStopwords)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "28910141",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
},
{
"ename": "NameError",
"evalue": "name 'ScToken' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-14-7209b5cec518>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mdef\u001b[0m \u001b[0mnumberOfStopwords\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtokens\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mScToken\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mcount\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mtokens\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0misStopword\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mcount\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mNameError\u001b[0m: name 'ScToken' is not defined"
]
}
],
"source": [
"def numberOfStopwords(tokens: [ScToken]):\n",
" count = 0\n",
" for t in tokens:\n",
" if t.isStopword:\n",
" count += 1\n",
" return count"
]
},
{
"cell_type": "markdown",
"id": "ce7cc9c1",
"metadata": {},
"source": [
"## Analyse"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "1adb09b7",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
" tweet_csv = '../data/copbird_table_tweet.csv'"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "c0936ecb",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"NUM_TOPICS=10\n",
"NUM_FEATURES=1000\n",
"NUM_TOP_WORDS=25"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "dbf0281f",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\chris\\pycharmprojects\\copbird-group-16\\copbird-venv\\lib\\site-packages\\ipykernel\\ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.\n",
" and should_run_async(code)\n"
]
}
],
"source": [
"def get_tweets(path, limit=None):\n",
" df_csv = pd.read_csv(path, nrows=limit, parse_dates=['created_at'],\n",
" encoding='utf-8-sig')\n",
"\n",
" df_csv.drop(columns=['created_at', 'like_count', 'retweet_count', 'reply_count', 'quote_count'], inplace=True)\n",
"\n",
" nlp = spacy.load(\"de_core_news_lg\")\n",
" nlp.Defaults.stop_words |= {\"&amp\", \"amp\"}\n",
" nlp.add_pipe('emoji', first=True)\n",
" return list(\n",
" nlp.pipe(df_csv['tweet_text'], disable=[\"tok2vec\", \"tagger\", \"parser\", \"attribute_ruler\"], n_process=-1))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2c39f658",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "copbird-env",
"language": "python",
"name": "copbird-env"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View file

@ -0,0 +1,490 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "cce66876",
"metadata": {},
"source": [
"# Interface Presseportal"
]
},
{
"cell_type": "markdown",
"id": "f12d7022",
"metadata": {},
"source": [
"Das Presseportal bietet eine Platform, bei der mittels GET-requests die Pressemitteilungen verschiedener Institutionen (Polizei, Feuerwehr, ...), in bestimmten Zeiträumen in gegebenen Gebieten extrahiert werden können. Dafür gibt es auch eine API."
]
},
{
"cell_type": "markdown",
"id": "b07aef9f",
"metadata": {},
"source": [
"Beispiel URL: `https://www.presseportal.de/blaulicht/d/polizei/l/hessen/30?startDate=2021-05-04&endDate=2021-05-04`"
]
},
{
"cell_type": "markdown",
"id": "258338d0",
"metadata": {},
"source": [
"Da eine große Menge an Tweets angefragt werden und Requests ziemlich lange benötigen, muss die Anfrage optimiert werden:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b07fac3c",
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"import calendar\n",
"import time\n",
"import os\n",
"import csv\n",
"\n",
"from tqdm.notebook import tqdm\n",
"from datetime import datetime\n",
"from bs4 import BeautifulSoup"
]
},
{
"cell_type": "markdown",
"id": "0dfce15a",
"metadata": {},
"source": [
"Um Pressemitteilungen sinnvoll zu speichern, werden sie als Klasse dargestellt:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "6c0b30a8",
"metadata": {},
"outputs": [],
"source": [
"class Pressemitteilung:\n",
" def __init__(self, article_id, timestamp, location, text, bundesland):\n",
" self.article_id = article_id\n",
" self.timestamp = timestamp\n",
" self.location = location\n",
" self.text = text\n",
" self.bundesland=bundesland\n",
" \n",
" def __str__(self):\n",
" return f\"[{self.article_id}] {self.timestamp} {self.location} | {' '.join(self.text.split()[:6])}\"\n",
" \n",
" def to_row(self):\n",
" return [self.article_id, self.timestamp, self.location, self.bundesland, self.text]"
]
},
{
"cell_type": "markdown",
"id": "63cceebe",
"metadata": {},
"source": [
"**Konstanten und Pfade**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8bcc877f",
"metadata": {},
"outputs": [],
"source": [
"REQUEST_HEADERS = {\n",
" \"User-Agent\": (\n",
" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 \"\n",
" \"(KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\"\n",
" )\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c637ac38",
"metadata": {},
"outputs": [],
"source": [
"DATA_FOLDER = os.path.join(\"..\", \"data\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f094dee0",
"metadata": {},
"outputs": [],
"source": [
"BUNDESLAENDER = [\n",
" \"baden-wuerttemberg\",\n",
" \"bayern\",\n",
" \"berlin-brandenburg\",\n",
" \"bremen\",\n",
" \"hamburg\",\n",
" \"hessen\",\n",
" \"mecklenburg-vorpommern\",\n",
" \"niedersachsen\",\n",
" \"nordrhein-westfalen\",\n",
" \"rheinland-pfalz\",\n",
" \"saarland\",\n",
" \"sachsen\",\n",
" \"sachsen-anhalt\",\n",
" \"schleswig-holstein\",\n",
" \"thueringen\",\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "84632391",
"metadata": {},
"outputs": [],
"source": [
"def requests_get(request):\n",
" return requests.get(request, headers=REQUEST_HEADERS)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "1af0bdbd",
"metadata": {},
"outputs": [],
"source": [
"def extract_response(response, bundesland=None):\n",
" \"\"\"Extrahiere aus der Response einer Request alle Pressemitteilungen\n",
" \n",
" Args:\n",
" response (:obj:`Response`)\n",
" bundesland (:obj:`str`): Kann mit angegeben, falls es in der Suche relevant war. Default = None\n",
" \n",
" Returns:\n",
" list of :obj:`Pressemitteilung`\n",
" \"\"\"\n",
" \n",
" mitteilungen = []\n",
" \n",
" soup = BeautifulSoup(response.content, 'html.parser')\n",
" for article in soup.find_all('article'):\n",
" data_url = article['data-url']\n",
" article_id = '-'.join(article['data-url'].split('/')[-2:])\n",
" meta = article.find('div')\n",
" \n",
" timestamp_str = meta.find(class_=\"date\")\n",
" \n",
" if timestamp_str is not None:\n",
" timestamp_str = timestamp_str.text\n",
" timestamp = datetime.strptime(timestamp_str, '%d.%m.%Y %H:%M')\n",
" else:\n",
" timestamp = None\n",
" \n",
" location_str = meta.find(class_=\"news-topic\")\n",
" location_str = location_str.text if location_str is not None else None\n",
" \n",
" p_texts = article.findAll('p')\n",
" if len(p_texts) > 1:\n",
" text = p_texts[1].text\n",
" else:\n",
" text = ''\n",
" \n",
" mitteilungen.append(Pressemitteilung(article_id, timestamp, location_str, text, bundesland))\n",
" \n",
" return mitteilungen"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c62c06c9",
"metadata": {},
"outputs": [],
"source": [
"def create_get_request(*, site=1, location=None, start_date=None, end_date=None):\n",
" \"\"\"Simulation einer API: Erzeuge aus Parametern eine URL\n",
" \n",
" Args:\n",
" site (int, default=1): Aktuelle Seite, auf der man sich befinden soll. Ist in der URL in 30er Schritten angegeben\n",
" location (:obj:`str`, default=None): Bundesland bzw. Stadt\n",
" start_date (:obj:`str`, default=None)\n",
" end_date (:obj:`str`, default=None)\n",
" Returns:\n",
" str: URL\n",
" \"\"\"\n",
" url = f\"https://www.presseportal.de/blaulicht/d/polizei\"\n",
" \n",
" if location is not None:\n",
" url += f\"/l/{location}\"\n",
" \n",
" if site > 1:\n",
" url += f\"/{site*30}\"\n",
" \n",
" if start_date is not None or end_date is not None:\n",
" url += \"?\"\n",
" \n",
" if start_date is not None:\n",
" url += f\"startDate={start_date}\"\n",
" \n",
" if end_date is not None:\n",
" url += \"&\"\n",
" \n",
" if end_date is not None:\n",
" url += f\"endDate={end_date}\"\n",
" \n",
" return url"
]
},
{
"cell_type": "markdown",
"id": "1c67c9bc",
"metadata": {},
"source": [
"## Beispiel: Hamburg "
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "aff924d6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'https://www.presseportal.de/blaulicht/d/polizei/l/hamburg/90?startDate=2021-01-13&endDate=2021-03-20'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = create_get_request(location=\"hamburg\", site=3, start_date=\"2021-01-13\", end_date=\"2021-03-20\")\n",
"url"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "6e2b9091",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[6337-4840243] 2021-02-16 17:41:00 Hamburg | Hamburg (ots) - Tatzeit: 15.02.2021, 08:15\n",
"[6337-4839937] 2021-02-16 13:14:00 Hamburg | Hamburg (ots) - Tatzeiten: a. 15.02.2021,\n",
"[6337-4839709] 2021-02-16 11:33:00 Hamburg | Hamburg (ots) - Tatzeit: 15.02.2021, 18:25\n",
"[6337-4839544] 2021-02-16 10:31:00 Hamburg | Hamburg (ots) - Zeit: 15.02.2021, 01:34\n",
"[6337-4838489] 2021-02-15 11:48:00 Hamburg | Hamburg (ots) - Tatzeit: 14.02.2021; 19:17\n"
]
}
],
"source": [
"for mitteilung in extract_response(requests_get(url))[:5]:\n",
" print(mitteilung)"
]
},
{
"cell_type": "markdown",
"id": "e50af557",
"metadata": {},
"source": [
"## Effizientes Einlesen"
]
},
{
"cell_type": "markdown",
"id": "b4a9580a",
"metadata": {},
"source": [
"Um die Dateien sinnhaft zu extrahieren, ohne auf einen Schlag zu viele Anfragen zu tätigen, läuft das Programm synchron mit Pausen (1Sek / Anfrage). Die Hauptfunktion sucht für einen gegebenen Tag alle Pressemeldungen der Polizei und sortiert diese nach Bundesland bzw. Stadt."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "da927e30",
"metadata": {},
"outputs": [],
"source": [
"def _get_meldungen_for_date_and_bundesland(year, month, day, bundesland):\n",
" \"\"\"Suche alle Meldungen für ein Bundesland zu einem konkreten Tag\"\"\"\n",
"\n",
" meldungen = []\n",
" site = 1\n",
" \n",
" start_date = datetime(year, month, day).strftime(\"%Y-%m-%d\")\n",
" end_date = datetime(year, month, day).strftime(\"%Y-%m-%d\")\n",
" request = create_get_request(site=site, location=bundesland, start_date=start_date, end_date=end_date)\n",
" \n",
" new_meldungen = extract_response(requests_get(request), bundesland=bundesland)\n",
" meldungen.extend(new_meldungen)\n",
" \n",
" pbar = tqdm(desc=bundesland)\n",
" while len(new_meldungen) != 0:\n",
" time.sleep(1)\n",
" site += 1\n",
" \n",
" request = create_get_request(\n",
" site=site, location=bundesland, start_date=start_date, end_date=end_date,\n",
" )\n",
" \n",
" new_meldungen = extract_response(requests_get(request), bundesland=bundesland)\n",
" meldungen.extend(new_meldungen)\n",
" pbar.update(1)\n",
" pbar.close()\n",
" \n",
" return meldungen"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "85508758",
"metadata": {},
"outputs": [],
"source": [
"def get_meldungen_for_date(year, month, day):\n",
" \"\"\"Extrahiere alle Meldungen für einen Tag\n",
" \n",
" Args:\n",
" year (int): Jahr\n",
" month (int): Monat\n",
" day (int): Tag\n",
" \"\"\"\n",
"\n",
" meldungen_dict = {}\n",
" \n",
" for bundesland in BUNDESLAENDER:\n",
" meldungen = _get_meldungen_for_date_and_bundesland(year, month, day, bundesland)\n",
" meldungen_dict[bundesland] = meldungen\n",
" \n",
" return meldungen_dict"
]
},
{
"cell_type": "markdown",
"id": "f938d8a9",
"metadata": {},
"source": [
"## Speichern der Daten in CSV-Dateien"
]
},
{
"cell_type": "markdown",
"id": "67374d3b",
"metadata": {},
"source": [
"Zur sinnvollen Speicherung werden alle Daten eines Tages in genau einer CSV-Datei gespeichert. Diese können danach (manuell) als ZIP des Monats zusammengefasst werden. "
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "276e700d",
"metadata": {},
"outputs": [],
"source": [
"def store_meldungen_in_csv(year, month, day):\n",
" \"\"\"Speichere alle Meldungen für ein Datum in einer CSV. Im Namen der CSV steht das Datum.\"\"\"\n",
"\n",
" filename = f\"{year}-{month}-{day}_presseportal.csv\"\n",
" path = os.path.join(DATA_FOLDER, filename)\n",
" meldungen_per_bundesland = get_meldungen_for_date(year, month, day)\n",
" \n",
" with open(path, 'w', newline='', encoding='UTF8') as f:\n",
" writer = csv.writer(f)\n",
" writer.writerow(['article_id', 'timestamp', 'location', 'bundesland', 'content'])\n",
" \n",
" for bundesland, meldungen in meldungen_per_bundesland.items():\n",
" for meldung in meldungen:\n",
" writer.writerow(meldung.to_row())\n",
" \n",
" print(f\"File '{filename}' created\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "c5d0bdbd",
"metadata": {},
"outputs": [],
"source": [
"def store_month(year, month):\n",
" month_end_day = calendar.monthrange(year, month)[1]\n",
" \n",
" for i in range(0, month_end_day):\n",
" store_meldungen_in_csv(year, month, i+1)"
]
},
{
"cell_type": "markdown",
"id": "d9f3e24b",
"metadata": {},
"source": [
"## Auswertung: Wie viele Einträge pro Bundesland?"
]
},
{
"cell_type": "markdown",
"id": "9f600d3c",
"metadata": {},
"source": [
"Für fortführende Visualisierung und um zu testen, ob der Algorithmus richtig funktioniert, werden hier alle Pressemitteilungen aller Bundesländer ausgezählt:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "b7c85078",
"metadata": {},
"outputs": [],
"source": [
"counter = {}\n",
"\n",
"for filename in os.listdir('../data/'):\n",
" if filename.endswith(\"_presseportal.csv\"):\n",
" path = '../data/' + filename\n",
" \n",
" with open(path, 'r', encoding='UTF8') as f_in:\n",
" reader = csv.reader(f_in)\n",
" next(reader)\n",
" for row in reader:\n",
" bundesland = row[3]\n",
" if bundesland not in counter:\n",
" counter[bundesland] = 1\n",
" else:\n",
" counter[bundesland] += 1\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "copbird-env",
"language": "python",
"name": "copbird-env"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,490 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "cce66876",
"metadata": {},
"source": [
"# Interface Presseportal"
]
},
{
"cell_type": "markdown",
"id": "f12d7022",
"metadata": {},
"source": [
"Das Presseportal bietet eine Platform, bei der mittels GET-requests die Pressemitteilungen verschiedener Institutionen (Polizei, Feuerwehr, ...), in bestimmten Zeiträumen in gegebenen Gebieten extrahiert werden können. Dafür gibt es auch eine API."
]
},
{
"cell_type": "markdown",
"id": "b07aef9f",
"metadata": {},
"source": [
"Beispiel URL: `https://www.presseportal.de/blaulicht/d/polizei/l/hessen/30?startDate=2021-05-04&endDate=2021-05-04`"
]
},
{
"cell_type": "markdown",
"id": "258338d0",
"metadata": {},
"source": [
"Da eine große Menge an Tweets angefragt werden und Requests ziemlich lange benötigen, muss die Anfrage optimiert werden:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b07fac3c",
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"import calendar\n",
"import time\n",
"import os\n",
"import csv\n",
"\n",
"from tqdm.notebook import tqdm\n",
"from datetime import datetime\n",
"from bs4 import BeautifulSoup"
]
},
{
"cell_type": "markdown",
"id": "0dfce15a",
"metadata": {},
"source": [
"Um Pressemitteilungen sinnvoll zu speichern, werden sie als Klasse dargestellt:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "6c0b30a8",
"metadata": {},
"outputs": [],
"source": [
"class Pressemitteilung:\n",
" def __init__(self, article_id, timestamp, location, text, bundesland):\n",
" self.article_id = article_id\n",
" self.timestamp = timestamp\n",
" self.location = location\n",
" self.text = text\n",
" self.bundesland=bundesland\n",
" \n",
" def __str__(self):\n",
" return f\"[{self.article_id}] {self.timestamp} {self.location} | {' '.join(self.text.split()[:6])}\"\n",
" \n",
" def to_row(self):\n",
" return [self.article_id, self.timestamp, self.location, self.bundesland, self.text]"
]
},
{
"cell_type": "markdown",
"id": "63cceebe",
"metadata": {},
"source": [
"**Konstanten und Pfade**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8bcc877f",
"metadata": {},
"outputs": [],
"source": [
"REQUEST_HEADERS = {\n",
" \"User-Agent\": (\n",
" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 \"\n",
" \"(KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\"\n",
" )\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c637ac38",
"metadata": {},
"outputs": [],
"source": [
"DATA_FOLDER = os.path.join(\"..\", \"data\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f094dee0",
"metadata": {},
"outputs": [],
"source": [
"BUNDESLAENDER = [\n",
" \"baden-wuerttemberg\",\n",
" \"bayern\",\n",
" \"berlin-brandenburg\",\n",
" \"bremen\",\n",
" \"hamburg\",\n",
" \"hessen\",\n",
" \"mecklenburg-vorpommern\",\n",
" \"niedersachsen\",\n",
" \"nordrhein-westfalen\",\n",
" \"rheinland-pfalz\",\n",
" \"saarland\",\n",
" \"sachsen\",\n",
" \"sachsen-anhalt\",\n",
" \"schleswig-holstein\",\n",
" \"thueringen\",\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "84632391",
"metadata": {},
"outputs": [],
"source": [
"def requests_get(request):\n",
" return requests.get(request, headers=REQUEST_HEADERS)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "1af0bdbd",
"metadata": {},
"outputs": [],
"source": [
"def extract_response(response, bundesland=None):\n",
" \"\"\"Extrahiere aus der Response einer Request alle Pressemitteilungen\n",
" \n",
" Args:\n",
" response (:obj:`Response`)\n",
" bundesland (:obj:`str`): Kann mit angegeben, falls es in der Suche relevant war. Default = None\n",
" \n",
" Returns:\n",
" list of :obj:`Pressemitteilung`\n",
" \"\"\"\n",
" \n",
" mitteilungen = []\n",
" \n",
" soup = BeautifulSoup(response.content, 'html.parser')\n",
" for article in soup.find_all('article'):\n",
" data_url = article['data-url']\n",
" article_id = '-'.join(article['data-url'].split('/')[-2:])\n",
" meta = article.find('div')\n",
" \n",
" timestamp_str = meta.find(class_=\"date\")\n",
" \n",
" if timestamp_str is not None:\n",
" timestamp_str = timestamp_str.text\n",
" timestamp = datetime.strptime(timestamp_str, '%d.%m.%Y %H:%M')\n",
" else:\n",
" timestamp = None\n",
" \n",
" location_str = meta.find(class_=\"news-topic\")\n",
" location_str = location_str.text if location_str is not None else None\n",
" \n",
" p_texts = article.findAll('p')\n",
" if len(p_texts) > 1:\n",
" text = p_texts[1].text\n",
" else:\n",
" text = ''\n",
" \n",
" mitteilungen.append(Pressemitteilung(article_id, timestamp, location_str, text, bundesland))\n",
" \n",
" return mitteilungen"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c62c06c9",
"metadata": {},
"outputs": [],
"source": [
"def create_get_request(*, site=1, location=None, start_date=None, end_date=None):\n",
" \"\"\"Simulation einer API: Erzeuge aus Parametern eine URL\n",
" \n",
" Args:\n",
" site (int, default=1): Aktuelle Seite, auf der man sich befinden soll. Ist in der URL in 30er Schritten angegeben\n",
" location (:obj:`str`, default=None): Bundesland bzw. Stadt\n",
" start_date (:obj:`str`, default=None)\n",
" end_date (:obj:`str`, default=None)\n",
" Returns:\n",
" str: URL\n",
" \"\"\"\n",
" url = f\"https://www.presseportal.de/blaulicht/d/polizei\"\n",
" \n",
" if location is not None:\n",
" url += f\"/l/{location}\"\n",
" \n",
" if site > 1:\n",
" url += f\"/{site*30}\"\n",
" \n",
" if start_date is not None or end_date is not None:\n",
" url += \"?\"\n",
" \n",
" if start_date is not None:\n",
" url += f\"startDate={start_date}\"\n",
" \n",
" if end_date is not None:\n",
" url += \"&\"\n",
" \n",
" if end_date is not None:\n",
" url += f\"endDate={end_date}\"\n",
" \n",
" return url"
]
},
{
"cell_type": "markdown",
"id": "1c67c9bc",
"metadata": {},
"source": [
"## Beispiel: Hamburg "
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "aff924d6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'https://www.presseportal.de/blaulicht/d/polizei/l/hamburg/90?startDate=2021-01-13&endDate=2021-03-20'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = create_get_request(location=\"hamburg\", site=3, start_date=\"2021-01-13\", end_date=\"2021-03-20\")\n",
"url"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "6e2b9091",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[6337-4840243] 2021-02-16 17:41:00 Hamburg | Hamburg (ots) - Tatzeit: 15.02.2021, 08:15\n",
"[6337-4839937] 2021-02-16 13:14:00 Hamburg | Hamburg (ots) - Tatzeiten: a. 15.02.2021,\n",
"[6337-4839709] 2021-02-16 11:33:00 Hamburg | Hamburg (ots) - Tatzeit: 15.02.2021, 18:25\n",
"[6337-4839544] 2021-02-16 10:31:00 Hamburg | Hamburg (ots) - Zeit: 15.02.2021, 01:34\n",
"[6337-4838489] 2021-02-15 11:48:00 Hamburg | Hamburg (ots) - Tatzeit: 14.02.2021; 19:17\n"
]
}
],
"source": [
"for mitteilung in extract_response(requests_get(url))[:5]:\n",
" print(mitteilung)"
]
},
{
"cell_type": "markdown",
"id": "e50af557",
"metadata": {},
"source": [
"## Effizientes Einlesen"
]
},
{
"cell_type": "markdown",
"id": "b4a9580a",
"metadata": {},
"source": [
"Um die Dateien sinnhaft zu extrahieren, ohne auf einen Schlag zu viele Anfragen zu tätigen, läuft das Programm synchron mit Pausen (1Sek / Anfrage). Die Hauptfunktion sucht für einen gegebenen Tag alle Pressemeldungen der Polizei und sortiert diese nach Bundesland bzw. Stadt."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "da927e30",
"metadata": {},
"outputs": [],
"source": [
"def _get_meldungen_for_date_and_bundesland(year, month, day, bundesland):\n",
" \"\"\"Suche alle Meldungen für ein Bundesland zu einem konkreten Tag\"\"\"\n",
"\n",
" meldungen = []\n",
" site = 1\n",
" \n",
" start_date = datetime(year, month, day).strftime(\"%Y-%m-%d\")\n",
" end_date = datetime(year, month, day).strftime(\"%Y-%m-%d\")\n",
" request = create_get_request(site=site, location=bundesland, start_date=start_date, end_date=end_date)\n",
" \n",
" new_meldungen = extract_response(requests_get(request), bundesland=bundesland)\n",
" meldungen.extend(new_meldungen)\n",
" \n",
" pbar = tqdm(desc=bundesland)\n",
" while len(new_meldungen) != 0:\n",
" time.sleep(1)\n",
" site += 1\n",
" \n",
" request = create_get_request(\n",
" site=site, location=bundesland, start_date=start_date, end_date=end_date,\n",
" )\n",
" \n",
" new_meldungen = extract_response(requests_get(request), bundesland=bundesland)\n",
" meldungen.extend(new_meldungen)\n",
" pbar.update(1)\n",
" pbar.close()\n",
" \n",
" return meldungen"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "85508758",
"metadata": {},
"outputs": [],
"source": [
"def get_meldungen_for_date(year, month, day):\n",
" \"\"\"Extrahiere alle Meldungen für einen Tag\n",
" \n",
" Args:\n",
" year (int): Jahr\n",
" month (int): Monat\n",
" day (int): Tag\n",
" \"\"\"\n",
"\n",
" meldungen_dict = {}\n",
" \n",
" for bundesland in BUNDESLAENDER:\n",
" meldungen = _get_meldungen_for_date_and_bundesland(year, month, day, bundesland)\n",
" meldungen_dict[bundesland] = meldungen\n",
" \n",
" return meldungen_dict"
]
},
{
"cell_type": "markdown",
"id": "f938d8a9",
"metadata": {},
"source": [
"## Speichern der Daten in CSV-Dateien"
]
},
{
"cell_type": "markdown",
"id": "67374d3b",
"metadata": {},
"source": [
"Zur sinnvollen Speicherung werden alle Daten eines Tages in genau einer CSV-Datei gespeichert. Diese können danach (manuell) als ZIP des Monats zusammengefasst werden. "
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "276e700d",
"metadata": {},
"outputs": [],
"source": [
"def store_meldungen_in_csv(year, month, day):\n",
" \"\"\"Speichere alle Meldungen für ein Datum in einer CSV. Im Namen der CSV steht das Datum.\"\"\"\n",
"\n",
" filename = f\"{year}-{month}-{day}_presseportal.csv\"\n",
" path = os.path.join(DATA_FOLDER, filename)\n",
" meldungen_per_bundesland = get_meldungen_for_date(year, month, day)\n",
" \n",
" with open(path, 'w', newline='', encoding='UTF8') as f:\n",
" writer = csv.writer(f)\n",
" writer.writerow(['article_id', 'timestamp', 'location', 'bundesland', 'content'])\n",
" \n",
" for bundesland, meldungen in meldungen_per_bundesland.items():\n",
" for meldung in meldungen:\n",
" writer.writerow(meldung.to_row())\n",
" \n",
" print(f\"File '{filename}' created\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "c5d0bdbd",
"metadata": {},
"outputs": [],
"source": [
"def store_month(year, month):\n",
" month_end_day = calendar.monthrange(year, month)[1]\n",
" \n",
" for i in range(0, month_end_day):\n",
" store_meldungen_in_csv(year, month, i+1)"
]
},
{
"cell_type": "markdown",
"id": "d9f3e24b",
"metadata": {},
"source": [
"## Auswertung: Wie viele Einträge pro Bundesland?"
]
},
{
"cell_type": "markdown",
"id": "9f600d3c",
"metadata": {},
"source": [
"Für fortführende Visualisierung und um zu testen, ob der Algorithmus richtig funktioniert, werden hier alle Pressemitteilungen aller Bundesländer ausgezählt:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "b7c85078",
"metadata": {},
"outputs": [],
"source": [
"counter = {}\n",
"\n",
"for filename in os.listdir('../data/'):\n",
" if filename.endswith(\"_presseportal.csv\"):\n",
" path = '../data/' + filename\n",
" \n",
" with open(path, 'r', encoding='UTF8') as f_in:\n",
" reader = csv.reader(f_in)\n",
" next(reader)\n",
" for row in reader:\n",
" bundesland = row[3]\n",
" if bundesland not in counter:\n",
" counter[bundesland] = 1\n",
" else:\n",
" counter[bundesland] += 1\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "python-scientific kernel",
"language": "python",
"name": "python-scientific"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,40 @@
"""
Aim: Building a connection between all tweets (tweet-id) and the state (Bundesland; Stadt) of the corresponding
police station (user_id; name; handle)
"""
import pandas as pd
from match_blaulich_tw_accounts import extend_blaulicht_data
tw_tweets = pd.read_csv(r'data\copbird_table_tweet.csv')
tw_user_data = pd.read_csv(r'data\copbird_table_user.csv')
tw_pol_geo_data = pd.read_csv(r'geolocations\polizei_accounts_geo.csv', delimiter='\t')
def get_tweets_by_user_id():
tweet_ids_user_ids = pd.DataFrame(tw_tweets, columns=['user_id', 'id'], dtype=str).rename(
columns={"id": "tweet_id"})
grouped_tweets = tweet_ids_user_ids.groupby('user_id')
return grouped_tweets
def add_state_to_user_df():
tw_user_df = tw_user_data.rename(columns={"id": "user_id"})
tw_pol_geo_df = tw_pol_geo_data.rename(columns={"Name": "name", "Bundesland": "bundesland", "Stadt": "stadt"})
return pd.merge(tw_user_df, tw_pol_geo_df[['name', 'stadt', 'bundesland']], on='name', how='left')
def add_state_to_tweets_df():
tw_tweets_ext = pd.merge(tw_tweets, add_state_to_user_df()[['user_id', 'stadt', 'bundesland', 'name', 'handle'
]], on='user_id', how='left')
return tw_tweets_ext[['id', 'tweet_text', 'created_at', 'user_id', 'name', 'handle', 'stadt', 'bundesland'
]].rename(columns={'id': 'tweet_id', 'name': 'user_name'})
def save_to_csv(df: pd, file_name: str):
df.to_csv(path_or_buf=f'{file_name}.csv', index=False)
if __name__ == '__main__':
save_to_csv(extend_blaulicht_data(), '2020-12_2021-05_presseportal')

View file

@ -0,0 +1,44 @@
import pandas as pd
from os import listdir
from os.path import join, isdir
df_tw_user = pd.read_csv('copbird_table_user_ext.csv').rename(columns={'name': 'user_name'})
dir_blaulicht = 'data/presseportal'
def concat_blaulicht_dfs():
df = pd.DataFrame()
for dir in listdir(dir_blaulicht):
dir = join(dir_blaulicht, dir)
if isdir(dir):
for f in listdir(dir):
f = join(dir, f)
csv = pd.read_csv(f)
df = df.append(csv)
return df
def extend_blaulicht_data():
df_blaulicht = concat_blaulicht_dfs()
mapping = map_bl_tw_citys()
df_blaulicht['tw_user_id'] = df_blaulicht['location'].apply(lambda x: find_location(x, mapping))
return df_blaulicht
def find_location(txt, mp):
mapped_blaulicht = mp.get(txt, "")
return mapped_blaulicht[1] if mapped_blaulicht != "" else ""
def map_bl_tw_citys():
import re
df_blaulicht = concat_blaulicht_dfs()
df_blaulicht.sort_index(inplace=True)
tw_locations = list(df_tw_user[['stadt', 'user_id']].itertuples(index=False, name=None))
tw_locations = [(loc, id) for loc, id in tw_locations if len(str(loc)) > 1]
bl_locations = list(set([str(city) for city in df_blaulicht['location'].values]))
bl_tw_locations = {}
for bl_loc in bl_locations:
for tw_loc, tw_id in tw_locations:
if re.search(r'\b' + re.escape(str(tw_loc).lower()) + r'\b', str(bl_loc).lower()):
bl_tw_locations[bl_loc] = [tw_loc, tw_id]
return bl_tw_locations
if __name__ == '__main__':
extend_blaulicht_data()

View file

@ -0,0 +1,40 @@
"""
Aim: Building a connection between all tweets (tweet-id) and the state (Bundesland; Stadt) of the corresponding
police station (user_id; name; handle)
"""
import pandas as pd
from match_blaulich_tw_accounts import extend_blaulicht_data
tw_tweets = pd.read_csv(r'data\copbird_table_tweet.csv')
tw_user_data = pd.read_csv(r'data\copbird_table_user.csv')
tw_pol_geo_data = pd.read_csv(r'geolocations\polizei_accounts_geo.csv', delimiter='\t')
def get_tweets_by_user_id():
tweet_ids_user_ids = pd.DataFrame(tw_tweets, columns=['user_id', 'id'], dtype=str).rename(
columns={"id": "tweet_id"})
grouped_tweets = tweet_ids_user_ids.groupby('user_id')
return grouped_tweets
def add_state_to_user_df():
tw_user_df = tw_user_data.rename(columns={"id": "user_id"})
tw_pol_geo_df = tw_pol_geo_data.rename(columns={"Name": "name", "Bundesland": "bundesland", "Stadt": "stadt"})
return pd.merge(tw_user_df, tw_pol_geo_df[['name', 'stadt', 'bundesland']], on='name', how='left')
def add_state_to_tweets_df():
tw_tweets_ext = pd.merge(tw_tweets, add_state_to_user_df()[['user_id', 'stadt', 'bundesland', 'name', 'handle'
]], on='user_id', how='left')
return tw_tweets_ext[['id', 'tweet_text', 'created_at', 'user_id', 'name', 'handle', 'stadt', 'bundesland'
]].rename(columns={'id': 'tweet_id', 'name': 'user_name'})
def save_to_csv(df: pd, file_name: str):
df.to_csv(path_or_buf=f'{file_name}.csv', index=False)
if __name__ == '__main__':
save_to_csv(extend_blaulicht_data(), '2020-12_2021-05_presseportal')

View file

@ -0,0 +1,44 @@
import pandas as pd
from os import listdir
from os.path import join, isdir
df_tw_user = pd.read_csv('copbird_table_user_ext.csv').rename(columns={'name': 'user_name'})
dir_blaulicht = 'data/presseportal'
def concat_blaulicht_dfs():
df = pd.DataFrame()
for dir in listdir(dir_blaulicht):
dir = join(dir_blaulicht, dir)
if isdir(dir):
for f in listdir(dir):
f = join(dir, f)
csv = pd.read_csv(f)
df = df.append(csv)
return df
def extend_blaulicht_data():
df_blaulicht = concat_blaulicht_dfs()
mapping = map_bl_tw_citys()
df_blaulicht['tw_user_id'] = df_blaulicht['location'].apply(lambda x: find_location(x, mapping))
return df_blaulicht
def find_location(txt, mp):
mapped_blaulicht = mp.get(txt, "")
return mapped_blaulicht[1] if mapped_blaulicht != "" else ""
def map_bl_tw_citys():
import re
df_blaulicht = concat_blaulicht_dfs()
df_blaulicht.sort_index(inplace=True)
tw_locations = list(df_tw_user[['stadt', 'user_id']].itertuples(index=False, name=None))
tw_locations = [(loc, id) for loc, id in tw_locations if len(str(loc)) > 1]
bl_locations = list(set([str(city) for city in df_blaulicht['location'].values]))
bl_tw_locations = {}
for bl_loc in bl_locations:
for tw_loc, tw_id in tw_locations:
if re.search(r'\b' + re.escape(str(tw_loc).lower()) + r'\b', str(bl_loc).lower()):
bl_tw_locations[bl_loc] = [tw_loc, tw_id]
return bl_tw_locations
if __name__ == '__main__':
extend_blaulicht_data()

View file

@ -0,0 +1,512 @@
pm_csv <- c(pm_csv, str_c("data/2021-1-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-2-", 1:28, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-3-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-4-", 1:30, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-5-", 1:21, "_presseportal.csv"))
pm_list <- lapply(pm_csv, read_csv)
pm_list <- lapply(pm_csv, read_csv)
pm <- do.call(rbind, pm_list)
pm_demo <- read_csv("data/copbird_table_pm_topiced_demonstr.csv")
tw_demo <- read_csv("data/copbird_table_tweet_topiced_demonstr.csv")
pm_text <- pm$content
pm_text <- pm_text[-which(is.na(pm_text))] # remove missing values
length(grep("(ots)", pm_text)) == length(pm_text) # every report contains "ots"
length(grep("(ots)", pm_text)) == length(pm_text) # every report contains "ots"
pm_text <- gsub("^(.*?\\(ots\\) - )", "", pm_text, perl = TRUE) # remove <Ort (ots) - >
pm_text <- gsub("^(.*?\\(ots\\) - )", "", pm_text, perl = TRUE) # remove <Ort (ots) - >
pm_text <- gsub("( \\.\\.\\.)$", "", pm_text) # remove < ...>
pm_text <- gsub("( \\.\\.\\.)$", "", pm_text) # remove < ...>
content_ber <- rep(NA, nrow(pm))
content_ber <- rep(NA, nrow(pm))
content_ber[which(!is.na(pm$content))] <- pm_text
content_ber[which(!is.na(pm$content))] <- pm_text
pm <- cbind(pm, content_ber)
pm_text <- gsub("[^[:alnum:] ]", "", pm_text)
pm_text <- gsub("[^[:alnum:] ]", "", pm_text)
content_ber_satzzeichen <- rep(NA, nrow(pm))
content_ber_satzzeichen <- rep(NA, nrow(pm))
content_ber_satzzeichen[which(!is.na(pm$content))] <- pm_text
pm <- cbind(pm, content_ber_satzzeichen)
head(pm)
pm_text <- pm_demo$content
pm_text <- gsub("^(.*?\\(ots\\) - )", "", pm_text, perl = TRUE) # remove <Ort (ots) - >
pm_text <- gsub("( \\.\\.\\.)$", "", pm_text) # remove < ...>
content_ber <- rep(NA, nrow(pm_demo))
content_ber[which(!is.na(pm_demo$content))] <- pm_text
pm_demo <- cbind(pm_demo, content_ber)
pm_text <- gsub("[^[:alnum:] ]", "", pm_text)
content_ber_satzzeichen <- rep(NA, nrow(pm_demo))
content_ber_satzzeichen[which(!is.na(pm_demo$content))] <- pm_text
pm_demo <- cbind(pm_demo, content_ber_satzzeichen)
head(pm_demo)
readAndflattenSentiWS <- function(filename) {
words = readLines(filename, encoding="UTF-8")
words <- sub("\\|[A-Z]+\t[0-9.-]+\t?", ",", words)
words <- unlist(strsplit(words, ","))
words <- tolower(words)
return(words)
}
pos.words <- c(scan("data/positive-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("data/positive-words.txt"))
neg.words <- c(scan("data/negative-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("data/negative-words.txt"))
score.sentiment = function(sentences, pos.words, neg.words, .progress='none')
{
#require(plyr)
require(stringr)
scores = laply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# we just want a TRUE/FALSE:
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score.sentiment = function(sentences, pos.words, neg.words, .progress='none')
{
#require(plyr)
require(stringr)
scores = lapply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# we just want a TRUE/FALSE:
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_demo <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
score.sentiment = function(sentences, pos.words, neg.words, .progress='none')
{
#require(plyr)
require(stringr)
scores = lapply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# we just want a TRUE/FALSE:
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
library(plyr)
score.sentiment = function(sentences, pos.words, neg.words, .progress='none')
{
require(plyr)
require(stringr)
scores = lapply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# we just want a TRUE/FALSE:
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score.sentiment = function(sentences, pos.words, neg.words, .progress='none')
{
require(plyr)
require(stringr)
scores = lapply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# we just want a TRUE/FALSE:
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score.sentiment = function(sentences, pos.words, neg.words, .progress='none') {
require(plyr)
require(stringr)
scores = laply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# I don't just want a TRUE/FALSE! How can I do this?
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_demo <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
View(score_tw_demo)
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(stringi)
pm_csv <- str_c("data/2020-12-", 1:26, "_presseportal.csv")
pm_csv <- c(pm_csv, str_c("data/2021-1-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-2-", 1:28, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-3-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-4-", 1:30, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-5-", 1:21, "_presseportal.csv"))
pm_list <- lapply(pm_csv, read_csv)
pm <- do.call(rbind, pm_list)
pm_demo <- read_csv("data/copbird_table_pm_topiced_demonstr.csv")
tw_demo <- read_csv("data/copbird_table_tweet_topiced_demonstr.csv")
pm_text <- pm$content
pm_text <- pm_text[-which(is.na(pm_text))] # remove missing values
length(grep("(ots)", pm_text)) == length(pm_text) # every report contains "ots"
pm_text <- gsub("^(.*?\\(ots\\) - )", "", pm_text, perl = TRUE) # remove <Ort (ots) - >
pm_text <- gsub("( \\.\\.\\.)$", "", pm_text) # remove < ...>
content_ber <- rep(NA, nrow(pm))
content_ber[which(!is.na(pm$content))] <- pm_text
pm <- cbind(pm, content_ber)
pm_text <- gsub("[^[:alnum:] ]", "", pm_text)
content_ber_satzzeichen <- rep(NA, nrow(pm))
content_ber_satzzeichen[which(!is.na(pm$content))] <- pm_text
pm <- cbind(pm, content_ber_satzzeichen)
head(pm)
# csvpath <- <your path>
# write_csv(pm, str_c(csvpath, "/pressemeldungen.csv"))
pm_text <- pm_demo$content
pm_text <- gsub("^(.*?\\(ots\\) - )", "", pm_text, perl = TRUE) # remove <Ort (ots) - >
pm_text <- gsub("( \\.\\.\\.)$", "", pm_text) # remove < ...>
content_ber <- rep(NA, nrow(pm_demo))
content_ber[which(!is.na(pm_demo$content))] <- pm_text
pm_demo <- cbind(pm_demo, content_ber)
pm_text <- gsub("[^[:alnum:] ]", "", pm_text)
content_ber_satzzeichen <- rep(NA, nrow(pm_demo))
content_ber_satzzeichen[which(!is.na(pm_demo$content))] <- pm_text
pm_demo <- cbind(pm_demo, content_ber_satzzeichen)
head(pm_demo)
readAndflattenSentiWS <- function(filename) {
words = readLines(filename, encoding="UTF-8")
words <- sub("\\|[A-Z]+\t[0-9.-]+\t?", ",", words)
words <- unlist(strsplit(words, ","))
words <- tolower(words)
return(words)
}
pos.words <- c(scan("data/positive-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("data/positive-words.txt"))
neg.words <- c(scan("data/negative-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("data/negative-words.txt"))
score.sentiment = function(sentences, pos.words, neg.words, .progress='none') {
require(plyr)
require(stringr)
scores = laply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# I don't just want a TRUE/FALSE! How can I do this?
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_demo <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
View(score_tw_demo)
Ciew(score_pm_demo)
View(score_pm_demo)
score_pm_demo$text[3]
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(stringi)
# Read in data
pm_csv <- str_c("data/2020-12-", 1:26, "_presseportal.csv")
pm_csv <- c(pm_csv, str_c("data/2021-1-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-2-", 1:28, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-3-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-4-", 1:30, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-5-", 1:21, "_presseportal.csv"))
pm_list <- lapply(pm_csv, read_csv)
pm <- do.call(rbind, pm_list)
summary(pm)
tweets <- read_csv("data/copbird_table_tweet.csv")
tweets <- tweets[tweets$created_at >= "2021-04-01", 1:4]
usersX <- read_csv("data/copbird_table_user_ext.csv")
# tweetXstate <- read_csv("data/copbird_table_tweet_ext_state.csv")
# tweetXstate$stadt[tweetXstate$user_name == "Polizei Oldenburg-Stadt/Ammerl"] <- "Oldenburg"
# tweetXstate$stadt[tweetXstate$user_name == "Polizei Mecklenburgische Seenp"] <- "Neubrandenburg"
# tweetXstate$stadt[tweetXstate$user_name == "Polizei Wilhelmshaven/Frieslan"] <- "Wilhelmshaven"
# tweetXstate$stadt[tweetXstate$user_name == "Bundespolizei Baden-Württember"] <- "Stuttgart"
# tweetXstate$stadt[tweetXstate$user_name == "Landeskriminalamt Rheinland-Pf"] <- "Mainz"
# tweetXstate$stadt[tweetXstate$user_name == "Bundespolizei Mitteldeutschlan"] <- "Pirna"
# tweetXstate$stadt[tweetXstate$user_name == "Polizei Delmenhorst/Oldenburg-"] <- "Delmenhorst"
# tweetXstate$stadt[tweetXstate$user_name == "Bundespolizei Flughafen Frankf"] <- "Frankfurt"
# blaulicht <- read_csv("data/2020-12_2021-05_presseportal.csv")
# users <- read_csv("data/copbird_table_user.csv")
# str(users)
# users$name <- as.factor(users$name)
# users$handle <- as.factor(users$handle)
pm_orte <- pm %>% group_by(bundesland) %>% count(location)
head(pm_orte)
head(pm_orte %>% arrange(desc(n)), n = 20)
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(stringi)
pm_csv <- str_c("data/2020-12-", 1:26, "_presseportal.csv")
pm_csv <- c(pm_csv, str_c("data/2021-1-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-2-", 1:28, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-3-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-4-", 1:30, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-5-", 1:21, "_presseportal.csv"))
pm_list <- lapply(pm_csv, read_csv)
pm <- do.call(rbind, pm_list)
tweets <- read_csv("data/copbird_table_tweet.csv")
tweets <- tweets[tweets$created_at >= "2021-04-01", 1:4]
usersX <- read_csv("data/copbird_table_user_ext.csv")
tweetXstate <- read_csv("data/copbird_table_tweet_ext_state.csv")
blaulicht <- read_csv("data/2020-12_2021-05_presseportal.csv")
pm_demo <- read_csv("data/copbird_table_pm_topiced_demonstr.csv")
tw_demo <- read_csv("data/copbird_table_tweet_topiced_demonstr.csv")
pm_drogen <- read_csv("data/copbird_table_pm_topiced_drogen.csv")
tw_drogen <- read_csv("data/copbird_table_tweet_topiced_drogen.csv")
pm_rass <- read_csv("data/copbird_table_pm_topiced_rassis.csv")
tw_rass <- read_csv("data/copbird_table_tweet_topiced_rassis.csv")
head(usersX)
head(tweetXstate[, 5:8])
blaulicht$tw_user_id <- as.character(blaulicht$tw_user_id)
head(blaulicht[, -c(2, 5)])
land_tw <- full_join(tweets, usersX[c(1, 4)], by = "user_id")
land_tw$bundesland[land_tw$bundesland == "-"] <- NA_character_
land_tw <- land_tw %>% group_by(bundesland) %>% count()
land_tw$bundesland <- as.factor(land_tw$bundesland)
land_pm <- pm %>% group_by(bundesland) %>% count()
land_pm$bundesland[land_pm$bundesland == "berlin-brandenburg"] <- "berlin"
land_pm$bundesland <- stri_trans_totitle(land_pm$bundesland)
land_pm$bundesland <- gsub("ue", "ü", land_pm$bundesland)
land_pm$bundesland <- factor(land_pm$bundesland, levels = levels(land_tw$bundesland))
land_pm_tw <- full_join(land_pm, land_tw, by = "bundesland")
names(land_pm_tw)[2:3] <- c("Pressemeldung", "Twitter")
land_pm_tw <- land_pm_tw[-which(is.na(land_pm_tw$bundesland)), ]
land_pm_tw$Pressemeldung[which(is.na(land_pm_tw$Pressemeldung))] <- 0
land_pm_tw <- gather(land_pm_tw, key = "Plattform", value = "count", -bundesland)
ggplot(land_pm_tw) +
geom_col(aes(x = bundesland, y = count, fill = Plattform)) +
scale_fill_manual(values = c("#CC6699", "#0099CC")) +
facet_wrap(~Plattform) +
coord_flip() +
guides(fill = FALSE) +
labs(title = "Anzahl der Pressemeldungen und Tweets",
subtitle = "Im Zeitraum April bis Mai 2021") +
theme_minimal()
ggplot(land_pm_tw) +
geom_col(aes(x = bundesland, y = count, fill = Plattform), position = "fill") +
scale_fill_manual(values = c("#CC6699", "#0099CC")) +
coord_flip() +
labs(title = "Anzahl der Pressemeldungen und Tweets",
subtitle = "Im Zeitraum April bis Mai 2021") +
theme_minimal()
readAndflattenSentiWS <- function(filename) {
words = readLines(filename, encoding="UTF-8")
words <- sub("\\|[A-Z]+\t[0-9.-]+\t?", ",", words)
words <- unlist(strsplit(words, ","))
words <- tolower(words)
return(words)
}
pos.words <- c(scan("data/positive-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("data/positive-words.txt"))
neg.words <- c(scan("data/negative-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("data/negative-words.txt"))
score.sentiment = function(sentences, pos.words, neg.words, .progress='none') {
require(plyr)
require(stringr)
scores = laply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# I don't just want a TRUE/FALSE! How can I do this?
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_demo <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
score_pm_drogen <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_drogen <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_drogen) +
geom_bar(aes(x = score), fill = "darkgreen") +
labs(title = "Topic: Drogen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_drogen) +
geom_bar(aes(x = score), fill = "darkgreen") +
labs(title = "Topic: Drogen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
score_pm_rass <- score.sentiment(pm_rass$content, pos.words, neg.words)
score_tw_rass <- score.sentiment(tw_rass$tweet_text, pos.words, neg.words)
ggplot(score_pm_rass) +
geom_bar(aes(x = score), fill = "purple") +
labs(title = "Topic: Rassismus", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_rass) +
geom_bar(aes(x = score), fill = "purple") +
labs(title = "Topic: Rassismus", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()

View file

@ -0,0 +1,216 @@
---
title: "Team 16"
author: "Christian, Simon und Cuca"
date: "23 5 2021"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Daten einlesen
```{r, message = FALSE}
library(tidyverse)
library(stringi)
pm_csv <- str_c("data/2020-12-", 1:26, "_presseportal.csv")
pm_csv <- c(pm_csv, str_c("data/2021-1-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-2-", 1:28, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-3-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-4-", 1:30, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-5-", 1:21, "_presseportal.csv"))
pm_list <- lapply(pm_csv, read_csv)
pm <- do.call(rbind, pm_list)
tweets <- read_csv("data/copbird_table_tweet.csv")
tweets <- tweets[tweets$created_at >= "2021-04-01", 1:4]
usersX <- read_csv("data/copbird_table_user_ext.csv")
tweetXstate <- read_csv("data/copbird_table_tweet_ext_state.csv")
blaulicht <- read_csv("data/2020-12_2021-05_presseportal.csv")
pm_demo <- read_csv("data/copbird_table_pm_topiced_demonstr.csv")
tw_demo <- read_csv("data/copbird_table_tweet_topiced_demonstr.csv")
pm_drogen <- read_csv("data/copbird_table_pm_topiced_drogen.csv")
tw_drogen <- read_csv("data/copbird_table_tweet_topiced_drogen.csv")
pm_rass <- read_csv("data/copbird_table_pm_topiced_rassis.csv")
tw_rass <- read_csv("data/copbird_table_tweet_topiced_rassis.csv")
```
# Scrapen der Pressemeldungen (seit Dezember 2020)
# Zuordnung von Orten der Pressemeldungen und Tweets
```{r}
head(usersX)
head(tweetXstate[, 5:8])
blaulicht$tw_user_id <- as.character(blaulicht$tw_user_id)
head(blaulicht[, -c(2, 5)])
```
# Anzahl Pressemeldungen vs. Tweets
```{r}
land_tw <- full_join(tweets, usersX[c(1, 4)], by = "user_id")
land_tw$bundesland[land_tw$bundesland == "-"] <- NA_character_
land_tw <- land_tw %>% group_by(bundesland) %>% count()
land_tw$bundesland <- as.factor(land_tw$bundesland)
land_pm <- pm %>% group_by(bundesland) %>% count()
land_pm$bundesland[land_pm$bundesland == "berlin-brandenburg"] <- "berlin"
land_pm$bundesland <- stri_trans_totitle(land_pm$bundesland)
land_pm$bundesland <- gsub("ue", "ü", land_pm$bundesland)
land_pm$bundesland <- factor(land_pm$bundesland, levels = levels(land_tw$bundesland))
land_pm_tw <- full_join(land_pm, land_tw, by = "bundesland")
names(land_pm_tw)[2:3] <- c("Pressemeldung", "Twitter")
land_pm_tw <- land_pm_tw[-which(is.na(land_pm_tw$bundesland)), ]
land_pm_tw$Pressemeldung[which(is.na(land_pm_tw$Pressemeldung))] <- 0
land_pm_tw <- gather(land_pm_tw, key = "Plattform", value = "count", -bundesland)
ggplot(land_pm_tw) +
geom_col(aes(x = bundesland, y = count, fill = Plattform)) +
scale_fill_manual(values = c("#CC6699", "#0099CC")) +
facet_wrap(~Plattform) +
coord_flip() +
guides(fill = FALSE) +
labs(title = "Anzahl der Pressemeldungen und Tweets",
subtitle = "Im Zeitraum April bis Mai 2021") +
theme_minimal()
ggplot(land_pm_tw) +
geom_col(aes(x = bundesland, y = count, fill = Plattform), position = "fill") +
scale_fill_manual(values = c("#CC6699", "#0099CC")) +
coord_flip() +
labs(title = "Anzahl der Pressemeldungen und Tweets",
subtitle = "Im Zeitraum April bis Mai 2021") +
theme_minimal()
```
# Topic modelling
```{r, message=FALSE}
# library(quanteda)
# library(tidyverse)
# library(topicmodels)
# library(ldatuning)
# library(stm)
# library(wordcloud)
#
# pm <- pm[!is.na(pm$content), ]
# tok <- tokens(pm$content_ber_satzzeichen)
# mydfm <- dfm(tok, remove_numbers = TRUE, remove_punct = TRUE, remove_symbols = TRUE, remove = stopwords("german"))
# mydfm.trim <- dfm_trim(mydfm, min_docfreq = 3, max_docfreq = 65)
# # mydfm.trim
#
# anzahl.themen <- 10
# anzahl.woerter <- 10
# dfm2topicmodels <- convert(mydfm.trim, to = "topicmodels")
# lda.modell <- LDA(dfm2topicmodels, anzahl.themen)
# lda.modell
# topmod <- as.data.frame(terms(lda.modell, anzahl.woerter))
# topmod
#
# write_csv(topmod, "data/topicmodel.csv")
```
### Auswahl der Keywords
`topic_1 = ['demonstr', 'kundgeb']`
`topic_2 = ['drogen', 'weed', 'graas', 'lsd', 'cannabis', 'ecstasy', 'kokain', 'meth', 'crystal']`
`topic_3 = ['rassis', 'diskriminier', 'ausländerfeindlich', 'fremdenfeindlich', 'fremdenhass']`
`topic_4 = ['antisem', 'juden', 'synagoge', 'judenhass', 'judenfeindlich', 'holocaust']`
# Sentiment Analyse
```{r}
readAndflattenSentiWS <- function(filename) {
words = readLines(filename, encoding="UTF-8")
words <- sub("\\|[A-Z]+\t[0-9.-]+\t?", ",", words)
words <- unlist(strsplit(words, ","))
words <- tolower(words)
return(words)
}
pos.words <- c(scan("SentiWS/positive-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("SentiWS/positive-words.txt"))
neg.words <- c(scan("SentiWS/negative-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("SentiWS/negative-words.txt"))
score.sentiment = function(sentences, pos.words, neg.words, .progress='none') {
require(plyr)
require(stringr)
scores = laply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# I don't just want a TRUE/FALSE! How can I do this?
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_demo <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
score_pm_drogen <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_drogen <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_drogen) +
geom_bar(aes(x = score), fill = "darkgreen") +
labs(title = "Topic: Drogen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_drogen) +
geom_bar(aes(x = score), fill = "darkgreen") +
labs(title = "Topic: Drogen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
score_pm_rass <- score.sentiment(pm_rass$content, pos.words, neg.words)
score_tw_rass <- score.sentiment(tw_rass$tweet_text, pos.words, neg.words)
ggplot(score_pm_rass) +
geom_bar(aes(x = score), fill = "purple") +
labs(title = "Topic: Rassismus", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_rass) +
geom_bar(aes(x = score), fill = "purple") +
labs(title = "Topic: Rassismus", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
```
```{r}
sessionInfo()
```

View file

@ -0,0 +1,216 @@
---
title: "Team 16"
author: "Christian, Simon und Cuca"
date: "23 5 2021"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Daten einlesen
```{r, message = FALSE}
library(tidyverse)
library(stringi)
pm_csv <- str_c("data/2020-12-", 1:26, "_presseportal.csv")
pm_csv <- c(pm_csv, str_c("data/2021-1-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-2-", 1:28, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-3-", 1:31, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-4-", 1:30, "_presseportal.csv"))
pm_csv <- c(pm_csv, str_c("data/2021-5-", 1:21, "_presseportal.csv"))
pm_list <- lapply(pm_csv, read_csv)
pm <- do.call(rbind, pm_list)
tweets <- read_csv("data/copbird_table_tweet.csv")
tweets <- tweets[tweets$created_at >= "2021-04-01", 1:4]
usersX <- read_csv("data/copbird_table_user_ext.csv")
tweetXstate <- read_csv("data/copbird_table_tweet_ext_state.csv")
blaulicht <- read_csv("data/2020-12_2021-05_presseportal.csv")
pm_demo <- read_csv("data/copbird_table_pm_topiced_demonstr.csv")
tw_demo <- read_csv("data/copbird_table_tweet_topiced_demonstr.csv")
pm_drogen <- read_csv("data/copbird_table_pm_topiced_drogen.csv")
tw_drogen <- read_csv("data/copbird_table_tweet_topiced_drogen.csv")
pm_rass <- read_csv("data/copbird_table_pm_topiced_rassis.csv")
tw_rass <- read_csv("data/copbird_table_tweet_topiced_rassis.csv")
```
# Scrapen der Pressemeldungen (seit Dezember 2020)
# Zuordnung von Orten der Pressemeldungen und Tweets
```{r}
head(usersX)
head(tweetXstate[, 5:8])
blaulicht$tw_user_id <- as.character(blaulicht$tw_user_id)
head(blaulicht[, -c(2, 5)])
```
# Anzahl Pressemeldungen vs. Tweets
```{r}
land_tw <- full_join(tweets, usersX[c(1, 4)], by = "user_id")
land_tw$bundesland[land_tw$bundesland == "-"] <- NA_character_
land_tw <- land_tw %>% group_by(bundesland) %>% count()
land_tw$bundesland <- as.factor(land_tw$bundesland)
land_pm <- pm %>% group_by(bundesland) %>% count()
land_pm$bundesland[land_pm$bundesland == "berlin-brandenburg"] <- "berlin"
land_pm$bundesland <- stri_trans_totitle(land_pm$bundesland)
land_pm$bundesland <- gsub("ue", "ü", land_pm$bundesland)
land_pm$bundesland <- factor(land_pm$bundesland, levels = levels(land_tw$bundesland))
land_pm_tw <- full_join(land_pm, land_tw, by = "bundesland")
names(land_pm_tw)[2:3] <- c("Pressemeldung", "Twitter")
land_pm_tw <- land_pm_tw[-which(is.na(land_pm_tw$bundesland)), ]
land_pm_tw$Pressemeldung[which(is.na(land_pm_tw$Pressemeldung))] <- 0
land_pm_tw <- gather(land_pm_tw, key = "Plattform", value = "count", -bundesland)
ggplot(land_pm_tw) +
geom_col(aes(x = bundesland, y = count, fill = Plattform)) +
scale_fill_manual(values = c("#CC6699", "#0099CC")) +
facet_wrap(~Plattform) +
coord_flip() +
guides(fill = FALSE) +
labs(title = "Anzahl der Pressemeldungen und Tweets",
subtitle = "Im Zeitraum April bis Mai 2021") +
theme_minimal()
ggplot(land_pm_tw) +
geom_col(aes(x = bundesland, y = count, fill = Plattform), position = "fill") +
scale_fill_manual(values = c("#CC6699", "#0099CC")) +
coord_flip() +
labs(title = "Anzahl der Pressemeldungen und Tweets",
subtitle = "Im Zeitraum April bis Mai 2021") +
theme_minimal()
```
# Topic modelling
```{r, message=FALSE}
# library(quanteda)
# library(tidyverse)
# library(topicmodels)
# library(ldatuning)
# library(stm)
# library(wordcloud)
#
# pm <- pm[!is.na(pm$content), ]
# tok <- tokens(pm$content_ber_satzzeichen)
# mydfm <- dfm(tok, remove_numbers = TRUE, remove_punct = TRUE, remove_symbols = TRUE, remove = stopwords("german"))
# mydfm.trim <- dfm_trim(mydfm, min_docfreq = 3, max_docfreq = 65)
# # mydfm.trim
#
# anzahl.themen <- 10
# anzahl.woerter <- 10
# dfm2topicmodels <- convert(mydfm.trim, to = "topicmodels")
# lda.modell <- LDA(dfm2topicmodels, anzahl.themen)
# lda.modell
# topmod <- as.data.frame(terms(lda.modell, anzahl.woerter))
# topmod
#
# write_csv(topmod, "data/topicmodel.csv")
```
### Auswahl der Keywords
`topic_1 = ['demonstr', 'kundgeb']`
`topic_2 = ['drogen', 'weed', 'graas', 'lsd', 'cannabis', 'ecstasy', 'kokain', 'meth', 'crystal']`
`topic_3 = ['rassis', 'diskriminier', 'ausländerfeindlich', 'fremdenfeindlich', 'fremdenhass']`
`topic_4 = ['antisem', 'juden', 'synagoge', 'judenhass', 'judenfeindlich', 'holocaust']`
# Sentiment Analyse
```{r}
readAndflattenSentiWS <- function(filename) {
words = readLines(filename, encoding="UTF-8")
words <- sub("\\|[A-Z]+\t[0-9.-]+\t?", ",", words)
words <- unlist(strsplit(words, ","))
words <- tolower(words)
return(words)
}
pos.words <- c(scan("SentiWS/positive-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("SentiWS/positive-words.txt"))
neg.words <- c(scan("SentiWS/negative-words.txt",what='character', comment.char=';', quiet=T),
readAndflattenSentiWS("SentiWS/negative-words.txt"))
score.sentiment = function(sentences, pos.words, neg.words, .progress='none') {
require(plyr)
require(stringr)
scores = laply(sentences, function(sentence, pos.words, neg.words)
{
# clean up sentences with R's regex-driven global substitute, gsub():
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
# match() returns the position of the matched term or NA
# I don't just want a TRUE/FALSE! How can I do this?
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = sum(pos.matches) - sum(neg.matches)
return(score)
},
pos.words, neg.words, .progress=.progress )
scores.df = data.frame(score=scores, text=sentences)
return(scores.df)
}
score_pm_demo <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_demo <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_demo) +
geom_bar(aes(x = score), fill = "blue") +
labs(title = "Topic: Demonstrationen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
score_pm_drogen <- score.sentiment(pm_demo$content, pos.words, neg.words)
score_tw_drogen <- score.sentiment(tw_demo$tweet_text, pos.words, neg.words)
ggplot(score_pm_drogen) +
geom_bar(aes(x = score), fill = "darkgreen") +
labs(title = "Topic: Drogen", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_drogen) +
geom_bar(aes(x = score), fill = "darkgreen") +
labs(title = "Topic: Drogen", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
score_pm_rass <- score.sentiment(pm_rass$content, pos.words, neg.words)
score_tw_rass <- score.sentiment(tw_rass$tweet_text, pos.words, neg.words)
ggplot(score_pm_rass) +
geom_bar(aes(x = score), fill = "purple") +
labs(title = "Topic: Rassismus", subtitle = "Sentiment-Analyse der Pressemeldungen") +
theme_minimal()
ggplot(score_tw_rass) +
geom_bar(aes(x = score), fill = "purple") +
labs(title = "Topic: Rassismus", subtitle = "Sentiment-Analyse der Tweets") +
theme_minimal()
```
```{r}
sessionInfo()
```

View file

@ -0,0 +1,13 @@
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8
RnwWeave: Sweave
LaTeX: pdfLaTeX

View file

@ -0,0 +1,131 @@
appdirs==1.4.4
argon2-cffi==20.1.0
async-generator==1.10
attrs==21.2.0
backcall==0.2.0
beautifulsoup4==4.9.3
bleach==3.3.0
blis==0.7.4
branca==0.4.2
bs4==0.0.1
catalogue==2.0.4
certifi==2020.12.5
cffi==1.14.5
chardet==4.0.0
click==7.1.2
cssselect==1.1.0
cycler==0.10.0
cymem==2.0.5
decorator==4.4.2
defusedxml==0.7.1
dill==0.3.3
docker==4.4.4
emoji==0.6.0
entrypoints==0.3
fake-useragent==0.1.11
filelock==3.0.12
folium==0.12.1
funcy==1.16
future==0.18.2
germansentiment==1.0.5
huggingface-hub==0.0.8
idna==2.10
ipykernel==5.5.5
ipython==7.23.1
ipython-genutils==0.2.0
ipywidgets==7.6.3
jedi==0.18.0
Jinja2
joblib==1.0.1
jsonpickle==2.0.0
jsonschema==3.2.0
jupyter==1.0.0
jupyter-client==6.1.12
jupyter-console==6.4.0
jupyter-core==4.7.1
jupyterlab-pygments==0.1.2
jupyterlab-widgets==1.0.0
kiwisolver==1.3.1
loguru==0.5.3
lxml==4.6.3
MarkupSafe==2.0.1
matplotlib==3.4.2
matplotlib-inline==0.1.2
mistune==0.8.4
multiprocess==0.70.11.1
murmurhash==1.0.5
nbclient==0.5.3
nbconvert==6.0.7
nbformat==5.1.3
nest-asyncio==1.5.1
networkx==2.5.1
nitter-scraper==0.5.0
notebook==6.4.0
numexpr==2.7.3
numpy==1.20.3
packaging==20.9
pandas==1.2.4
pandocfilters==1.4.3
parse==1.19.0
parso==0.8.2
pathy==0.5.2
pendulum==2.1.2
pexpect==4.8.0
pickleshare==0.7.5
Pillow==8.2.0
preshed==3.0.5
prometheus-client==0.10.1
prompt-toolkit==3.0.18
ptyprocess==0.7.0
pycparser==2.20
pydantic==1.7.4
pyee==8.1.0
Pygments==2.9.0
pyLDAvis==3.3.1
pyparsing==2.4.7
pyppeteer==0.2.5
pyquery==1.4.3
pyrsistent==0.17.3
python-dateutil==2.8.1
pytz==2021.1
pytzdata==2020.1
pyvis==0.1.9
pyzmq==22.0.3
qtconsole==5.1.0
QtPy==1.9.0
regex==2021.4.4
requests==2.25.1
requests-html==0.10.0
sacremoses==0.0.45
scikit-learn==0.24.2
scipy==1.6.3
seaborn==0.11.1
Send2Trash==1.5.0
six==1.16.0
sklearn==0.0
smart-open
soupsieve==2.2.1
spacy==3.0.6
spacy-legacy==3.0.5
spacymoji==3.0.1
srsly==2.4.1
terminado==0.10.0
testpath==0.5.0
thinc==8.0.3
threadpoolctl==2.1.0
tokenizers==0.10.2
torch==1.8.1
tornado==6.1
tqdm==4.60.0
traitlets==5.0.5
transformers==4.6.0
typer==0.3.2
typing-extensions==3.10.0.0
urllib3==1.26.4
w3lib==1.22.0
wasabi==0.8.2
wcwidth==0.2.5
webencodings==0.5.1
websocket-client==1.0.0
websockets==8.1
widgetsnbextension==3.5.1

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,9 @@
# Resultate von Team 22
## Heatmap für Hashtags
Das geotag-Notebook arbeitet auf einer von hashtag-geografie1 generierten csv-Datei. Also erst das nochmal durchlaufen lassen.
Für Eingaben gibt's die erste Zelle.
## Cop Connections
Visualisierung der Verbindungsstärke zwischen Polizeiaccounts anhand der Anzahl von Mentions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,255 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 40,
"id": "5eecbeeb",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from tqdm import tqdm # Fortschrittsanzeige für pandas\n",
"tqdm.pandas()\n",
"tweet_csv = '../data/copbird_table_tweet.csv'\n",
"entity_csv = '../data/copbird_table_entity.csv'\n",
"user_csv = '../data/copbird_table_user.csv'\n",
"\n",
"limit = None\n",
"tweets = pd.read_csv(tweet_csv, nrows=limit)\n",
"entities = pd.read_csv(entity_csv, nrows=limit)\n",
"users = pd.read_csv(user_csv, nrows=limit)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "1ad0f35a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"360008"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets.size"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "c0a49030",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.8/dist-packages/pandas/core/strings/accessor.py:101: UserWarning: This pattern has match groups. To actually get the groups, use str.extract.\n",
" return func(self, *args, **kwargs)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>tweet_text</th>\n",
" <th>created_at</th>\n",
" <th>user_id</th>\n",
" <th>like_count</th>\n",
" <th>retweet_count</th>\n",
" <th>reply_count</th>\n",
" <th>quote_count</th>\n",
" <th>contains</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1321023114071969792</td>\n",
" <td>#Zeugengesucht\\nDie Hintergründe zu dem Tötung...</td>\n",
" <td>2020-10-27 09:37:08</td>\n",
" <td>2397974054</td>\n",
" <td>20.0</td>\n",
" <td>24.0</td>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1321025127388188673</td>\n",
" <td>RT @bka: EUROPE´S MOST WANTED Sexualstraftät...</td>\n",
" <td>2020-10-27 09:45:08</td>\n",
" <td>2397974054</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id tweet_text \\\n",
"1 1321023114071969792 #Zeugengesucht\\nDie Hintergründe zu dem Tötung... \n",
"2 1321025127388188673 RT @bka: EUROPE´S MOST WANTED Sexualstraftät... \n",
"\n",
" created_at user_id like_count retweet_count reply_count \\\n",
"1 2020-10-27 09:37:08 2397974054 20.0 24.0 4.0 \n",
"2 2020-10-27 09:45:08 2397974054 NaN NaN NaN \n",
"\n",
" quote_count contains \n",
"1 1.0 True \n",
"2 NaN True "
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets[\"contains\"] = tweets[\"tweet_text\"].str.contains(r'(https://t.co/)')\n",
"tweets_subset = tweets[tweets[\"contains\"]]\n",
"tweets_link = tweets_subset\n",
"tweets_link.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "a5e2d37e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-43-393ebe765dff>:1: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" tweets_subset[\"link\"] = tweets_subset[\"tweet_text\"].str.extract(r'(https://t.co/[\\w]*)[\\w$|\\s|\\n][^(.*).{1} ]')\n"
]
}
],
"source": [
"tweets_subset[\"link\"] = tweets_subset[\"tweet_text\"].str.extract(r'(https://t.co/[\\w]*)[\\w$|\\s|\\n][^(.*).{1} ]')\n",
"tryout = tweets_subset\n"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "957a6b06",
"metadata": {},
"outputs": [],
"source": [
"#tryout = tryout.head(9)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b768104e",
"metadata": {},
"outputs": [],
"source": [
"import io\n",
"import requests\n",
"response_arr = []\n",
"#url = tryout[\"link\"].to_string(index=False)\n",
"df = pd.DataFrame(data=response_arr, columns=[\"full_link\"])\n",
"\n",
"for i in tryout.index:\n",
" try:\n",
" response = requests.get(tryout[\"link\"][i])\n",
" response_arr.append(response.url)\n",
" \n",
" except:\n",
" response_arr.append(\"error\")\n",
" finally:\n",
" \n",
" df = pd.DataFrame([i, response.url], columns=[\"full_link\"])\n",
" df.to_csv('links.csv', mode='a', header=False)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "1c5f3260",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'response_arr' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-9-30722b9a87cd>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mresponse_arr_orig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse_arr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mtryout\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"link_long\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"nan\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mindex\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mresponse_arr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mtryout\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"link_long\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'response_arr' is not defined"
]
}
],
"source": [
"response_arr_orig = response_arr\n",
"tryout[\"link_long\"]=float(\"nan\")\n",
"index = 0\n",
"for i in response_arr:\n",
" tryout[\"link_long\"][index]=i\n",
" index = index+1\n",
"print(index)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,523 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "847f9651",
"metadata": {},
"source": [
"Pakete laden"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "0a01b63b",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from tqdm import tqdm # Fortschrittsanzeige für pandas\n",
"tqdm.pandas()"
]
},
{
"cell_type": "markdown",
"id": "b515c823",
"metadata": {},
"source": [
"Daten laden"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0eec2734",
"metadata": {},
"outputs": [],
"source": [
"tweet_csv = '../data/copbird_table_tweet.csv'\n",
"entity_csv = '../data/copbird_table_entity.csv'\n",
"user_csv = '../data/copbird_table_user.csv'\n",
"cop_geolocations_csv = '../geolocations/polizei_accounts_geo.csv'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "fbe080bc",
"metadata": {},
"outputs": [],
"source": [
"limit = None\n",
"tweets = pd.read_csv(tweet_csv, nrows=limit)\n",
"entities = pd.read_csv(entity_csv, nrows=limit)\n",
"users = pd.read_csv(user_csv, nrows=limit)\n",
"geolocs = pd.read_csv(cop_geolocations_csv, sep=r'\\t', engine='python', nrows=limit)\n",
"# skip first two rows since they do not contain GPS data\n",
"geolocs = geolocs.iloc[2:, :]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b4e5b2b7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tweet_id</th>\n",
" <th>tag</th>\n",
" <th>entity_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>1321050580337512448</td>\n",
" <td>Alsdorf</td>\n",
" <td>hashtag</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>1321050612142870534</td>\n",
" <td>Frankfurt</td>\n",
" <td>hashtag</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>1321050612142870534</td>\n",
" <td>A3</td>\n",
" <td>hashtag</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1321050732917829639</td>\n",
" <td>Polizei</td>\n",
" <td>hashtag</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>1321050732917829639</td>\n",
" <td>Aachen</td>\n",
" <td>hashtag</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tweet_id tag entity_type\n",
"18 1321050580337512448 Alsdorf hashtag\n",
"20 1321050612142870534 Frankfurt hashtag\n",
"21 1321050612142870534 A3 hashtag\n",
"22 1321050732917829639 Polizei hashtag\n",
"23 1321050732917829639 Aachen hashtag"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hashtags = entities[entities['entity_type'] == 'hashtag']\n",
"hashtags.head()"
]
},
{
"cell_type": "markdown",
"id": "8c426c02",
"metadata": {},
"source": [
"Häufigkeit von Tweets mit GPS-Stempel"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b70fd2b2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tweet_id</th>\n",
" <th>user_id</th>\n",
" <th>tag</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1321050580337512448</td>\n",
" <td>2389142300</td>\n",
" <td>Alsdorf</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1321050612142870534</td>\n",
" <td>2272909014</td>\n",
" <td>Frankfurt</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1321050612142870534</td>\n",
" <td>2272909014</td>\n",
" <td>A3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1321050732917829639</td>\n",
" <td>2389142300</td>\n",
" <td>Polizei</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1321050732917829639</td>\n",
" <td>2389142300</td>\n",
" <td>Aachen</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tweet_id user_id tag\n",
"0 1321050580337512448 2389142300 Alsdorf\n",
"1 1321050612142870534 2272909014 Frankfurt\n",
"2 1321050612142870534 2272909014 A3\n",
"3 1321050732917829639 2389142300 Polizei\n",
"4 1321050732917829639 2389142300 Aachen"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Füge den Accounts, zu denen es ein GPS-Datum gibt, dieses hinzu:\n",
"users['handle'] = users['handle'].str.lower().str.strip()\n",
"geolocs['Polizei Account'] = geolocs['Polizei Account'].str.lower().str.strip()\n",
"users_geolocs = users.merge(geolocs, left_on='handle', right_on='Polizei Account', how='inner')\n",
"# Die Spalte mit dem Handle brauchen wir nur einmal:\n",
"users_geolocs.drop(columns='Polizei Account', inplace=True)\n",
"# Füge dazu, falls vorhanden, Tweets hinzu:\n",
"#us_ge_tw = users_geolocs.merge(tweets, left_on='id', right_on='user_id', how='inner')\n",
"# Wieder redundante Spalte wegschmeißen:\n",
"#us_ge_tw.drop(columns='id_x', inplace=True)\n",
"#us_ge_tw.rename(columns={'id_y':'id'}, inplace=True)\n",
"#us_ge_tw.head()\n",
"# Füge Hashtags dazu\n",
"tw_ht = tweets.merge(hashtags, left_on='id', right_on='tweet_id', how='inner')[['tweet_id','user_id','tag']]\n",
"tw_ht.head()"
]
},
{
"cell_type": "markdown",
"id": "2c36168a",
"metadata": {},
"source": [
"Hashtags zusammenfassen:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "4d8c367d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>user_id</th>\n",
" <th>tag</th>\n",
" <th>count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>549</th>\n",
" <td>259607457</td>\n",
" <td>Köln</td>\n",
" <td>632</td>\n",
" </tr>\n",
" <tr>\n",
" <th>551</th>\n",
" <td>259607457</td>\n",
" <td>Leverkusen</td>\n",
" <td>630</td>\n",
" </tr>\n",
" <tr>\n",
" <th>565</th>\n",
" <td>259607457</td>\n",
" <td>PolizeiNRW</td>\n",
" <td>630</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19658</th>\n",
" <td>808666671468658688</td>\n",
" <td>Bremen</td>\n",
" <td>445</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19737</th>\n",
" <td>808666671468658688</td>\n",
" <td>Polizei</td>\n",
" <td>427</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" user_id tag count\n",
"549 259607457 Köln 632\n",
"551 259607457 Leverkusen 630\n",
"565 259607457 PolizeiNRW 630\n",
"19658 808666671468658688 Bremen 445\n",
"19737 808666671468658688 Polizei 427"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ht_count = tw_ht.groupby(['user_id','tag']).size().reset_index(name='count').sort_values(by='count', ascending=False)\n",
"ht_count.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "2bfaaeec",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>user_id</th>\n",
" <th>tag</th>\n",
" <th>count</th>\n",
" <th>handle</th>\n",
" <th>Name</th>\n",
" <th>Typ</th>\n",
" <th>Bundesland</th>\n",
" <th>Stadt</th>\n",
" <th>LAT</th>\n",
" <th>LONG</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>259607457</td>\n",
" <td>Köln</td>\n",
" <td>632</td>\n",
" <td>polizei_nrw_k</td>\n",
" <td>Polizei NRW K</td>\n",
" <td>Polizei</td>\n",
" <td>Nordrhein-Westfalen</td>\n",
" <td>Köln</td>\n",
" <td>50.938361</td>\n",
" <td>6.959974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>259607457</td>\n",
" <td>Leverkusen</td>\n",
" <td>630</td>\n",
" <td>polizei_nrw_k</td>\n",
" <td>Polizei NRW K</td>\n",
" <td>Polizei</td>\n",
" <td>Nordrhein-Westfalen</td>\n",
" <td>Köln</td>\n",
" <td>50.938361</td>\n",
" <td>6.959974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>259607457</td>\n",
" <td>PolizeiNRW</td>\n",
" <td>630</td>\n",
" <td>polizei_nrw_k</td>\n",
" <td>Polizei NRW K</td>\n",
" <td>Polizei</td>\n",
" <td>Nordrhein-Westfalen</td>\n",
" <td>Köln</td>\n",
" <td>50.938361</td>\n",
" <td>6.959974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>259607457</td>\n",
" <td>Zeugensuche</td>\n",
" <td>32</td>\n",
" <td>polizei_nrw_k</td>\n",
" <td>Polizei NRW K</td>\n",
" <td>Polizei</td>\n",
" <td>Nordrhein-Westfalen</td>\n",
" <td>Köln</td>\n",
" <td>50.938361</td>\n",
" <td>6.959974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>259607457</td>\n",
" <td>Einbruchradar</td>\n",
" <td>21</td>\n",
" <td>polizei_nrw_k</td>\n",
" <td>Polizei NRW K</td>\n",
" <td>Polizei</td>\n",
" <td>Nordrhein-Westfalen</td>\n",
" <td>Köln</td>\n",
" <td>50.938361</td>\n",
" <td>6.959974</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" user_id tag count handle Name Typ \\\n",
"0 259607457 Köln 632 polizei_nrw_k Polizei NRW K Polizei \n",
"1 259607457 Leverkusen 630 polizei_nrw_k Polizei NRW K Polizei \n",
"2 259607457 PolizeiNRW 630 polizei_nrw_k Polizei NRW K Polizei \n",
"3 259607457 Zeugensuche 32 polizei_nrw_k Polizei NRW K Polizei \n",
"4 259607457 Einbruchradar 21 polizei_nrw_k Polizei NRW K Polizei \n",
"\n",
" Bundesland Stadt LAT LONG \n",
"0 Nordrhein-Westfalen Köln 50.938361 6.959974 \n",
"1 Nordrhein-Westfalen Köln 50.938361 6.959974 \n",
"2 Nordrhein-Westfalen Köln 50.938361 6.959974 \n",
"3 Nordrhein-Westfalen Köln 50.938361 6.959974 \n",
"4 Nordrhein-Westfalen Köln 50.938361 6.959974 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ht_geo = ht_count.merge(users_geolocs, left_on=\"user_id\", right_on=\"id\", how=\"inner\")\n",
"ht_geo.drop(columns=['name','id'], inplace=True)\n",
"ht_geo.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3db0daf3",
"metadata": {},
"outputs": [],
"source": [
"ht_geo.to_csv(\"hashtags_users_geolocs.csv\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b4bd5938",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_7b4714703d1c48729c407c322cff45da {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_7b4714703d1c48729c407c322cff45da" ></div>
</body>
<script>
var map_7b4714703d1c48729c407c322cff45da = L.map(
"map_7b4714703d1c48729c407c322cff45da",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_b7da55fd4dda4626a109e02b81b2b636 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_7b4714703d1c48729c407c322cff45da);
var heat_map_0e12f61ee70247edaf26579e088f3207 = L.heatLayer(
[[49.79245, 9.932966, 1.0], [49.234362, 6.996379, 131.0], [53.248706, 10.407855, 47.0], [51.3154546, 9.4924096, 1.0], [52.520007, 13.404954, 2.0], [52.6050782, 11.8594279, 8.0], [51.4825041, 11.9705452, 2.0], [49.1996961, 7.6087847, 1.0], [52.9859666, 9.8433909, 2.0], [53.3172237, 9.9084936, 2.0], [50.0820384, 8.2416556, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_7b4714703d1c48729c407c322cff45da);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_2634cfd09b5949a088718c17091601d2 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_2634cfd09b5949a088718c17091601d2" ></div>
</body>
<script>
var map_2634cfd09b5949a088718c17091601d2 = L.map(
"map_2634cfd09b5949a088718c17091601d2",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_38381be3eeb843f9a6f804aed871ea21 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_2634cfd09b5949a088718c17091601d2);
var heat_map_dc574607710741b5ac74d11a5b6ae51e = L.heatLayer(
[[51.0493286, 13.7381437, 2841.0], [50.938361, 6.959974, 2254.0], [48.7784485, 9.1800132, 1146.0], [51.5142273, 7.4652789, 681.0], [54.0924445, 12.1286127, 272.0], [49.4432174, 7.7689951, 263.0], [50.3533278, 7.5943951, 389.0], [50.0012314, 8.2762513, 308.0], [51.4696137, 6.8514435, 210.0], [49.4704113, 8.4381568, 821.0], [49.7596208, 6.6441878, 284.0], [50.110922, 8.682127, 1098.0], [51.9625101, 7.6251879, 1239.0], [51.4582235, 7.0158171, 501.0], [50.776351, 6.083862, 520.0], [52.0191005, 8.531007, 519.0], [51.4818111, 7.2196635, 1100.0], [50.735851, 7.10066, 47.0], [51.8443183, 6.8582247, 137.0], [51.9458943, 7.1691108, 55.0], [51.434999, 6.759562, 1096.0], [50.8031684, 6.4820806, 215.0], [51.2254018, 6.7763137, 58.0], [51.264018, 7.1780374, 344.0], [51.3481444, 7.3351844, 137.0], [51.9532449, 7.9912335, 505.0], [51.6576909, 6.617087, 501.0], [51.5348835, 7.689014, 421.0], [50.6612623, 6.7871219, 719.0], [51.2562118, 6.3905476, 535.0], [52.1294289, 7.3903454, 1263.0], [51.5110321, 7.0960124, 772.0], [51.9063997, 8.3782078, 457.0], [51.5725501, 8.1061259, 6.0], [50.97444, 8.23972, 699.0], [50.7527986, 7.3813038, 310.0], [51.1758799, 6.6600606, 375.0], [51.0139774, 7.1715584, 30.0], [51.6143815, 7.1978546, 782.0], [50.90334, 6.763334, 98.0], [51.7189596, 8.7648698, 269.0], [51.0277658, 7.5630545, 229.0], [51.0297603, 7.8424193, 600.0], [52.2881045, 8.9168852, 481.0], [51.2527778, 6.9777778, 1300.0], [51.2734857, 7.7274266, 605.0], [51.1946983, 6.4353641, 88.0], [51.936284, 8.8791526, 116.0], [51.7747369, 9.3816877, 67.0], [51.3331205, 6.5623343, 311.0], [51.3208247, 8.2684925, 117.0], [51.7854839, 6.1313674, 67.0], [51.0654268, 6.0984461, 229.0], [51.6804093, 7.815197, 76.0], [52.1152245, 8.6711118, 62.0], [51.3582945, 7.473296, 150.0], [52.520007, 13.404954, 1305.0], [52.520007, 13.404954, 129.0], [49.1996961, 7.6087847, 260.0], [48.135125, 11.581981, 407.0], [52.1315889, 11.6399609, 1011.0], [53.550341, 10.000654, 988.0], [47.8539273, 12.127262, 170.0], [49.0068705, 8.4034195, 1215.0], [50.9777974, 11.0287364, 506.0], [51.3154546, 9.4924096, 532.0], [48.681331, 9.00883, 472.0], [48.135125, 11.581981, 674.0], [53.5574458, 13.2602781, 92.0], [50.0820384, 8.2416556, 46.0], [53.8560526, 13.688091, 517.0], [53.6288297, 11.4148038, 92.0], [54.3096314, 13.0820846, 361.0], [53.539584, 8.580942, 76.0], [50.5521486, 9.676511, 1434.0], [49.4892913, 8.4673098, 1787.0], [53.5574458, 13.2602781, 488.0], [50.1055002, 8.7610698, 186.0], [51.842828, 12.230393, 1401.0], [49.533333, 8.35, 634.0], [51.4825041, 11.9705452, 398.0], [47.659216, 9.1750718, 80.0], [52.520007, 13.404954, 254.0], [50.356943, 7.588996, 492.0], [53.919582, 9.882173, 937.0], [50.1109221, 8.6821267, 286.0], [52.3744779, 9.7385532, 364.0], [52.120533, 11.627624, 579.0], [50.769478, 7.187579, 1009.0], [52.520007, 13.404954, 16.0], [50.5862066, 8.6742306, 1580.0], [52.390569, 13.064473, 1570.0], [49.79245, 9.932966, 820.0], [50.0820384, 8.2416556, 204.0], [48.135125, 11.581981, 78.0], [48.8819801, 12.569716, 669.0], [48.8953937, 9.1895147, 487.0], [49.872775, 8.651177, 247.0], [52.268874, 10.52677, 176.0], [52.266837, 8.049741, 202.0], [52.3744779, 9.7385532, 121.0], [53.248706, 10.407855, 789.0], [52.3744779, 9.7385532, 491.0], [53.3172237, 9.9084936, 150.0], [51.54128, 9.915804, 742.0], [52.1521636, 9.9513046, 447.0], [52.540308, 7.329286, 102.0], [52.0895789, 9.3875409, 87.0], [52.6487602, 9.2578105, 208.0], [53.2327625, 7.4577265, 14.0], [53.470839, 7.484831, 68.0], [51.705401, 9.9972782, 189.0], [51.828835, 9.4466591, 194.0], [51.72784, 10.2508204, 233.0], [52.3289688, 9.2053496, 58.0], [52.42958, 7.068571, 55.0], [53.599794, 9.475438, 8.0], [52.259276, 9.052123, 162.0], [53.1389753, 8.2146017, 341.0], [49.142291, 9.218655, 235.0], [48.3974003, 9.9934336, 1086.0], [48.3668041, 10.8986971, 450.0], [53.2520924, 9.3151133, 38.0], [52.617596, 10.062852, 189.0], [48.836689, 10.097116, 285.0], [50.0553084, 11.5455233, 382.0], [47.7267063, 10.3168835, 81.0], [49.0195333, 12.0974869, 54.0], [49.453872, 11.077298, 1477.0], [53.079296, 8.801694, 1549.0], [48.4716556, 7.944378, 21.0], [54.3227085, 10.135555, 193.0], [52.9859666, 9.8433909, 147.0], [48.775846, 9.182932, 582.0], [48.7630165, 11.4250395, 183.0], [49.234362, 6.996379, 1084.0], [48.4919508, 9.2114144, 422.0], [52.4205588, 10.7861682, 114.0], [47.999008, 7.842104, 670.0], [49.214024, 8.366815, 425.0], [49.3539802, 8.1350021, 305.0], [52.480909, 10.550783, 156.0], [51.905953, 10.428996, 170.0], [49.992862, 8.247253, 150.0], [52.1503721, 10.3593147, 41.0], [52.390569, 13.064473, 61.0], [53.859336, 8.687906, 128.0], [52.605646, 8.370788, 156.0], [53.5278793, 8.106301, 395.0], [53.052189, 8.635593, 229.0], [52.844198, 8.053016, 37.0], [52.922341, 9.228153, 148.0], [54.0924445, 12.1286127, 60.0], [49.9850353, 6.88844, 78.0], [48.135125, 11.581981, 96.0], [52.6050782, 11.8594279, 587.0], [47.7811014, 9.612468, 125.0], [52.336191, 9.374258, 98.0], [52.3744779, 9.7385532, 44.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_2634cfd09b5949a088718c17091601d2);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_2f32606ed67348f19eb1fb69dfac76dd {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_2f32606ed67348f19eb1fb69dfac76dd" ></div>
</body>
<script>
var map_2f32606ed67348f19eb1fb69dfac76dd = L.map(
"map_2f32606ed67348f19eb1fb69dfac76dd",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_13975c4cc4a4436cb8eae7154d71188d = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_2f32606ed67348f19eb1fb69dfac76dd);
var heat_map_c86aac5a5a4e4971bba8764f51e22554 = L.heatLayer(
[[50.938361, 6.959974, 3.0], [49.0068705, 8.4034195, 1.0], [51.2734857, 7.7274266, 1.0], [50.5521486, 9.676511, 3.0], [51.9625101, 7.6251879, 7.0], [49.453872, 11.077298, 15.0], [49.4892913, 8.4673098, 1.0], [51.842828, 12.230393, 2.0], [52.1315889, 11.6399609, 2.0], [48.3974003, 9.9934336, 8.0], [50.769478, 7.187579, 9.0], [52.120533, 11.627624, 1.0], [51.4825041, 11.9705452, 1.0], [52.390569, 13.064473, 4.0], [52.0191005, 8.531007, 1.0], [51.54128, 9.915804, 1.0], [50.9777974, 11.0287364, 2.0], [48.8953937, 9.1895147, 3.0], [54.3096314, 13.0820846, 2.0], [52.266837, 8.049741, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_2f32606ed67348f19eb1fb69dfac76dd);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_569eb2e3ba9e47038bcccbb653ecad79 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_569eb2e3ba9e47038bcccbb653ecad79" ></div>
</body>
<script>
var map_569eb2e3ba9e47038bcccbb653ecad79 = L.map(
"map_569eb2e3ba9e47038bcccbb653ecad79",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_e94af6d32e5d4bc181f2c972f9929528 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_569eb2e3ba9e47038bcccbb653ecad79);
var heat_map_c7c02dbfce564b248752799a1682ed99 = L.heatLayer(
[[50.938361, 6.959974, 0.0014326647564469914], [51.0493286, 13.7381437, 0.01311866428145498], [51.4818111, 7.2196635, 0.00141643059490085], [48.135125, 11.581981, 0.0035087719298245615], [49.79245, 9.932966, 0.0014084507042253522], [51.5142273, 7.4652789, 0.0007283321194464676], [51.842828, 12.230393, 0.012567324955116697], [53.919582, 9.882173, 0.02666666666666667], [52.120533, 11.627624, 0.002551020408163265], [52.520007, 13.404954, 0.026836158192090395], [52.6050782, 11.8594279, 0.0034602076124567475], [52.3744779, 9.7385532, 0.0011025358324145535], [52.390569, 13.064473, 0.012203876525484566], [52.3744779, 9.7385532, 0.015267175572519083], [48.681331, 9.00883, 0.0020491803278688526], [52.520007, 13.404954, 0.1826086956521739], [48.135125, 11.581981, 0.011904761904761904], [52.520007, 13.404954, 0.5]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_569eb2e3ba9e47038bcccbb653ecad79);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_793c86416fc04e23892e678bf5fee6a9 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_793c86416fc04e23892e678bf5fee6a9" ></div>
</body>
<script>
var map_793c86416fc04e23892e678bf5fee6a9 = L.map(
"map_793c86416fc04e23892e678bf5fee6a9",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_1ec357930c8e4283bd412c524172b4fb = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_793c86416fc04e23892e678bf5fee6a9);
var heat_map_f1858b14c82e4c43a9fdb43d036c78e6 = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_793c86416fc04e23892e678bf5fee6a9);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_4c32c5561608432590b41c0c1f95de47 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_4c32c5561608432590b41c0c1f95de47" ></div>
</body>
<script>
var map_4c32c5561608432590b41c0c1f95de47 = L.map(
"map_4c32c5561608432590b41c0c1f95de47",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_01f98342d9b8468cb67fd9dba30681f0 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_4c32c5561608432590b41c0c1f95de47);
var heat_map_a74afa2ed23149be958a106d83422104 = L.heatLayer(
[[50.5862066, 8.6742306, 286.0], [50.5521486, 9.676511, 1.0], [50.110922, 8.682127, 1.0], [51.3154546, 9.4924096, 1.0], [50.1109221, 8.6821267, 1.0], [50.0820384, 8.2416556, 1.0], [50.0012314, 8.2762513, 1.0], [54.3096314, 13.0820846, 1.0], [49.872775, 8.651177, 1.0], [50.1055002, 8.7610698, 2.0], [50.0820384, 8.2416556, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_4c32c5561608432590b41c0c1f95de47);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_3e2c580e11a84cc5bb8d84935de68b6e {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_3e2c580e11a84cc5bb8d84935de68b6e" ></div>
</body>
<script>
var map_3e2c580e11a84cc5bb8d84935de68b6e = L.map(
"map_3e2c580e11a84cc5bb8d84935de68b6e",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_81d33bd0163b495fa030fbb5f98a156f = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_3e2c580e11a84cc5bb8d84935de68b6e);
var heat_map_7295074abab04caebb9fa2143a96aacf = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_3e2c580e11a84cc5bb8d84935de68b6e);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_9f18d9c181c54ba6b625b728f4355efc {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_9f18d9c181c54ba6b625b728f4355efc" ></div>
</body>
<script>
var map_9f18d9c181c54ba6b625b728f4355efc = L.map(
"map_9f18d9c181c54ba6b625b728f4355efc",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_532c44ada72447b4a1362dc1890db44d = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_9f18d9c181c54ba6b625b728f4355efc);
var heat_map_930862bf7d1e46bcbd22766eb47a8376 = L.heatLayer(
[[51.5110321, 7.0960124, 0.0028011204481792717], [47.999008, 7.842104, 0.008645533141210375], [49.453872, 11.077298, 0.004955401387512388], [49.4892913, 8.4673098, 0.000877963125548727], [50.356943, 7.588996, 0.027559055118110236], [49.3539802, 8.1350021, 0.031746031746031744], [52.6050782, 11.8594279, 0.0034602076124567475], [52.6487602, 9.2578105, 0.008064516129032258], [54.3227085, 10.135555, 0.006711409395973154]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_9f18d9c181c54ba6b625b728f4355efc);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_045e611cadd34abf886b5ed0fae587fb {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_045e611cadd34abf886b5ed0fae587fb" ></div>
</body>
<script>
var map_045e611cadd34abf886b5ed0fae587fb = L.map(
"map_045e611cadd34abf886b5ed0fae587fb",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_e0616ad6045446aa91d4b9f2c226c163 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_045e611cadd34abf886b5ed0fae587fb);
var heat_map_ad93446452dd462db12167d74c78f228 = L.heatLayer(
[[51.5110321, 7.0960124, 1.0], [47.999008, 7.842104, 3.0], [49.453872, 11.077298, 5.0], [49.4892913, 8.4673098, 1.0], [50.356943, 7.588996, 7.0], [49.3539802, 8.1350021, 6.0], [52.6050782, 11.8594279, 1.0], [52.6487602, 9.2578105, 1.0], [54.3227085, 10.135555, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_045e611cadd34abf886b5ed0fae587fb);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_09e5f6501b344fce926c115931a0a030 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_09e5f6501b344fce926c115931a0a030" ></div>
</body>
<script>
var map_09e5f6501b344fce926c115931a0a030 = L.map(
"map_09e5f6501b344fce926c115931a0a030",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_99793849c2e24db9b0520423e9557dd5 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_09e5f6501b344fce926c115931a0a030);
var heat_map_b8df3d0f50b74aa893a7d6fcc0a2ab65 = L.heatLayer(
[[50.110922, 8.682127, 0.0005763688760806917], [49.453872, 11.077298, 0.006937561942517344], [48.135125, 11.581981, 0.0008888888888888889], [49.4892913, 8.4673098, 0.000877963125548727], [50.356943, 7.588996, 0.023622047244094488], [49.3539802, 8.1350021, 0.015873015873015872], [53.052189, 8.635593, 0.007751937984496124], [54.0924445, 12.1286127, 0.006369426751592357], [49.142291, 9.218655, 0.004329004329004329]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_09e5f6501b344fce926c115931a0a030);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_e9c17733dd13460cb6dc6459119b58d9 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_e9c17733dd13460cb6dc6459119b58d9" ></div>
</body>
<script>
var map_e9c17733dd13460cb6dc6459119b58d9 = L.map(
"map_e9c17733dd13460cb6dc6459119b58d9",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_3a6881b6c1444ee1af8e972635eb33ce = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_e9c17733dd13460cb6dc6459119b58d9);
var heat_map_4dc8590f5ca443dc9f67f271477a31b8 = L.heatLayer(
[[50.110922, 8.682127, 1.0], [49.453872, 11.077298, 7.0], [48.135125, 11.581981, 1.0], [49.4892913, 8.4673098, 1.0], [50.356943, 7.588996, 6.0], [49.3539802, 8.1350021, 3.0], [53.052189, 8.635593, 1.0], [54.0924445, 12.1286127, 1.0], [49.142291, 9.218655, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_e9c17733dd13460cb6dc6459119b58d9);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_ff0696dba6fe475889f7fd5ef3e62692 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_ff0696dba6fe475889f7fd5ef3e62692" ></div>
</body>
<script>
var map_ff0696dba6fe475889f7fd5ef3e62692 = L.map(
"map_ff0696dba6fe475889f7fd5ef3e62692",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_dca1daf383bb4a488f54b302b34a0cff = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_ff0696dba6fe475889f7fd5ef3e62692);
var heat_map_14c3b370fdb74ca5882f560782595683 = L.heatLayer(
[[50.938361, 6.959974, 0.9054441260744985], [51.264018, 7.1780374, 0.005291005291005291], [50.769478, 7.187579, 0.10572687224669604], [50.7527986, 7.3813038, 0.006920415224913495], [48.4919508, 9.2114144, 0.004672897196261682], [52.1152245, 8.6711118, 0.00423728813559322], [48.135125, 11.581981, 0.011904761904761904]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_ff0696dba6fe475889f7fd5ef3e62692);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_70c4e4784c324100abff8b4e26d1b0c6 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_70c4e4784c324100abff8b4e26d1b0c6" ></div>
</body>
<script>
var map_70c4e4784c324100abff8b4e26d1b0c6 = L.map(
"map_70c4e4784c324100abff8b4e26d1b0c6",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_49f31a3359b54ec0b92f915488461317 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_70c4e4784c324100abff8b4e26d1b0c6);
var heat_map_3ab784fd62824262ac6d0d3c7e1baff8 = L.heatLayer(
[[53.079296, 8.801694, 427.0], [51.434999, 6.759562, 6.0], [51.0493286, 13.7381437, 12.0], [48.7784485, 9.1800132, 331.0], [51.0297603, 7.8424193, 3.0], [51.2527778, 6.9777778, 8.0], [50.5862066, 8.6742306, 116.0], [51.6143815, 7.1978546, 257.0], [51.4818111, 7.2196635, 22.0], [49.0068705, 8.4034195, 257.0], [51.2734857, 7.7274266, 2.0], [50.97444, 8.23972, 1.0], [51.5110321, 7.0960124, 233.0], [50.5521486, 9.676511, 223.0], [50.110922, 8.682127, 5.0], [51.9625101, 7.6251879, 116.0], [52.1294289, 7.3903454, 2.0], [47.999008, 7.842104, 172.0], [51.9532449, 7.9912335, 2.0], [50.776351, 6.083862, 150.0], [49.79245, 9.932966, 13.0], [51.5142273, 7.4652789, 97.0], [49.234362, 6.996379, 1.0], [49.453872, 11.077298, 31.0], [51.1758799, 6.6600606, 3.0], [51.6576909, 6.617087, 144.0], [48.135125, 11.581981, 24.0], [49.4892913, 8.4673098, 8.0], [51.842828, 12.230393, 99.0], [52.1315889, 11.6399609, 12.0], [49.4704113, 8.4381568, 3.0], [51.9063997, 8.3782078, 1.0], [51.264018, 7.1780374, 113.0], [53.248706, 10.407855, 4.0], [53.8560526, 13.688091, 6.0], [51.7189596, 8.7648698, 1.0], [51.3154546, 9.4924096, 5.0], [51.4696137, 6.8514435, 63.0], [48.3974003, 9.9934336, 13.0], [50.8031684, 6.4820806, 82.0], [48.8819801, 12.569716, 6.0], [51.2562118, 6.3905476, 72.0], [52.2881045, 8.9168852, 1.0], [51.3331205, 6.5623343, 3.0], [50.769478, 7.187579, 4.0], [48.3668041, 10.8986971, 28.0], [48.775846, 9.182932, 4.0], [52.120533, 11.627624, 1.0], [51.5348835, 7.689014, 22.0], [52.520007, 13.404954, 1.0], [53.5574458, 13.2602781, 17.0], [49.3539802, 8.1350021, 3.0], [52.6050782, 11.8594279, 53.0], [51.4825041, 11.9705452, 25.0], [50.6612623, 6.7871219, 19.0], [49.533333, 8.35, 35.0], [52.3744779, 9.7385532, 1.0], [50.7527986, 7.3813038, 48.0], [51.0277658, 7.5630545, 3.0], [52.390569, 13.064473, 1.0], [52.0191005, 8.531007, 1.0], [53.5278793, 8.106301, 41.0], [51.54128, 9.915804, 7.0], [51.4582235, 7.0158171, 21.0], [50.3533278, 7.5943951, 13.0], [53.052189, 8.635593, 35.0], [48.8953937, 9.1895147, 6.0], [50.1109221, 8.6821267, 1.0], [52.605646, 8.370788, 32.0], [50.0820384, 8.2416556, 21.0], [50.0553084, 11.5455233, 31.0], [50.0012314, 8.2762513, 1.0], [49.214024, 8.366815, 21.0], [52.617596, 10.062852, 2.0], [54.3096314, 13.0820846, 18.0], [53.1389753, 8.2146017, 26.0], [49.7596208, 6.6441878, 1.0], [53.539584, 8.580942, 19.0], [52.6487602, 9.2578105, 8.0], [51.3582945, 7.473296, 23.0], [50.90334, 6.763334, 22.0], [51.705401, 9.9972782, 3.0], [49.1996961, 7.6087847, 14.0], [51.6804093, 7.815197, 21.0], [52.520007, 13.404954, 1.0], [51.0654268, 6.0984461, 1.0], [52.266837, 8.049741, 15.0], [52.3744779, 9.7385532, 2.0], [52.9859666, 9.8433909, 12.0], [51.1946983, 6.4353641, 2.0], [54.3227085, 10.135555, 18.0], [49.9850353, 6.88844, 1.0], [49.4432174, 7.7689951, 1.0], [52.480909, 10.550783, 7.0], [50.1055002, 8.7610698, 4.0], [52.268874, 10.52677, 1.0], [51.2254018, 6.7763137, 1.0], [48.836689, 10.097116, 13.0], [51.7747369, 9.3816877, 5.0], [51.828835, 9.4466591, 4.0], [51.905953, 10.428996, 2.0], [49.142291, 9.218655, 12.0], [53.859336, 8.687906, 2.0], [48.7630165, 11.4250395, 2.0], [52.1503721, 10.3593147, 11.0], [51.8443183, 6.8582247, 8.0], [49.992862, 8.247253, 2.0], [51.72784, 10.2508204, 5.0], [52.922341, 9.228153, 4.0], [53.5574458, 13.2602781, 3.0], [51.0139774, 7.1715584, 1.0], [47.8539273, 12.127262, 2.0], [52.0895789, 9.3875409, 7.0], [52.540308, 7.329286, 1.0], [52.3744779, 9.7385532, 5.0], [52.42958, 7.068571, 1.0], [47.7811014, 9.612468, 1.0], [47.7267063, 10.3168835, 2.0], [52.844198, 8.053016, 4.0], [48.135125, 11.581981, 2.0], [48.135125, 11.581981, 4.0], [49.0195333, 12.0974869, 2.0], [53.470839, 7.484831, 3.0], [50.0820384, 8.2416556, 1.0], [48.4716556, 7.944378, 1.0], [51.5725501, 8.1061259, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_70c4e4784c324100abff8b4e26d1b0c6);
</script>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_053d18bdcf6f473db0f07b5e1a01bbf3 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_053d18bdcf6f473db0f07b5e1a01bbf3" ></div>
</body>
<script>
var map_053d18bdcf6f473db0f07b5e1a01bbf3 = L.map(
"map_053d18bdcf6f473db0f07b5e1a01bbf3",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_c95f448c3d2f4edb90823a73852cd166 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_053d18bdcf6f473db0f07b5e1a01bbf3);
var heat_map_81258ff04ec74ba8b43c961d184fa636 = L.heatLayer(
[[49.0068705, 8.4034195, 0.0019880715705765406], [47.999008, 7.842104, 0.002881844380403458], [49.79245, 9.932966, 0.0014084507042253522], [49.234362, 6.996379, 0.00819672131147541], [49.453872, 11.077298, 0.0009910802775024777], [48.135125, 11.581981, 0.0017777777777777779], [49.4892913, 8.4673098, 0.000877963125548727], [48.8819801, 12.569716, 0.003484320557491289], [48.3668041, 10.8986971, 0.037267080745341616], [53.5574458, 13.2602781, 0.008032128514056224], [49.3539802, 8.1350021, 0.026455026455026454], [51.4582235, 7.0158171, 0.01466275659824047], [54.0924445, 12.1286127, 0.08280254777070063], [50.0820384, 8.2416556, 0.0070921985815602835], [50.0553084, 11.5455233, 0.006711409395973154], [54.3096314, 13.0820846, 0.009009009009009009], [53.6288297, 11.4148038, 0.047058823529411764], [52.268874, 10.52677, 0.012987012987012988], [47.8539273, 12.127262, 0.009009009009009009], [52.844198, 8.053016, 0.029411764705882353], [53.470839, 7.484831, 0.02857142857142857], [53.599794, 9.475438, 0.2857142857142857]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_053d18bdcf6f473db0f07b5e1a01bbf3);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_d2a081d724a747fca8eb63bc6c3a47c9 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_d2a081d724a747fca8eb63bc6c3a47c9" ></div>
</body>
<script>
var map_d2a081d724a747fca8eb63bc6c3a47c9 = L.map(
"map_d2a081d724a747fca8eb63bc6c3a47c9",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_9b4aaf599a85438990c49638d1fccff5 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_d2a081d724a747fca8eb63bc6c3a47c9);
var heat_map_2622daf2dceb4193beef136c43d7a5e5 = L.heatLayer(
[[49.0068705, 8.4034195, 2.0], [47.999008, 7.842104, 1.0], [49.79245, 9.932966, 1.0], [49.234362, 6.996379, 2.0], [49.453872, 11.077298, 1.0], [48.135125, 11.581981, 2.0], [49.4892913, 8.4673098, 1.0], [48.8819801, 12.569716, 1.0], [48.3668041, 10.8986971, 12.0], [53.5574458, 13.2602781, 2.0], [49.3539802, 8.1350021, 5.0], [51.4582235, 7.0158171, 5.0], [54.0924445, 12.1286127, 13.0], [50.0820384, 8.2416556, 1.0], [50.0553084, 11.5455233, 1.0], [54.3096314, 13.0820846, 2.0], [53.6288297, 11.4148038, 4.0], [52.268874, 10.52677, 2.0], [47.8539273, 12.127262, 1.0], [52.844198, 8.053016, 1.0], [53.470839, 7.484831, 1.0], [53.599794, 9.475438, 2.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_d2a081d724a747fca8eb63bc6c3a47c9);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_b82da960f07740428405955771ea86e5 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_b82da960f07740428405955771ea86e5" ></div>
</body>
<script>
var map_b82da960f07740428405955771ea86e5 = L.map(
"map_b82da960f07740428405955771ea86e5",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_e0ca26c320714fadb83cc9063b453b47 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_b82da960f07740428405955771ea86e5);
var heat_map_0897662ab8ca4f6d8bcabba079b0224b = L.heatLayer(
[[52.617596, 10.062852, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_b82da960f07740428405955771ea86e5);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_adec882193aa40fd919f55be458b02ee {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_adec882193aa40fd919f55be458b02ee" ></div>
</body>
<script>
var map_adec882193aa40fd919f55be458b02ee = L.map(
"map_adec882193aa40fd919f55be458b02ee",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_40301701df2d4a4e8ee54f1ecf54b303 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_adec882193aa40fd919f55be458b02ee);
var heat_map_c647028405f84938a691a16621b312ac = L.heatLayer(
[[50.938361, 6.959974, 3.0], [49.0068705, 8.4034195, 1.0], [51.2734857, 7.7274266, 1.0], [50.5521486, 9.676511, 3.0], [51.9625101, 7.6251879, 7.0], [49.453872, 11.077298, 15.0], [49.4892913, 8.4673098, 1.0], [51.842828, 12.230393, 2.0], [52.1315889, 11.6399609, 2.0], [48.3974003, 9.9934336, 8.0], [50.769478, 7.187579, 9.0], [52.120533, 11.627624, 1.0], [51.4825041, 11.9705452, 1.0], [52.390569, 13.064473, 4.0], [52.0191005, 8.531007, 1.0], [51.54128, 9.915804, 1.0], [50.9777974, 11.0287364, 2.0], [48.8953937, 9.1895147, 3.0], [54.3096314, 13.0820846, 2.0], [52.266837, 8.049741, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_adec882193aa40fd919f55be458b02ee);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_135292aea73a42399ee5a53aee971204 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_135292aea73a42399ee5a53aee971204" ></div>
</body>
<script>
var map_135292aea73a42399ee5a53aee971204 = L.map(
"map_135292aea73a42399ee5a53aee971204",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_882e7f0bc671451397991e670bb0099a = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_135292aea73a42399ee5a53aee971204);
var heat_map_003e164497ee4334afa7297fa080e3af = L.heatLayer(
[[50.938361, 6.959974, 1.0], [50.938361, 6.959974, 1.0], [53.079296, 8.801694, 7.0], [51.0493286, 13.7381437, 2.0], [48.7784485, 9.1800132, 5.0], [51.2527778, 6.9777778, 1.0], [50.5862066, 8.6742306, 1.0], [51.4818111, 7.2196635, 4.0], [49.0068705, 8.4034195, 1.0], [51.2734857, 7.7274266, 3.0], [51.5110321, 7.0960124, 1.0], [50.5521486, 9.676511, 3.0], [50.110922, 8.682127, 1.0], [51.9625101, 7.6251879, 1.0], [52.1294289, 7.3903454, 2.0], [48.135125, 11.581981, 8.0], [47.999008, 7.842104, 6.0], [49.234362, 6.996379, 65.0], [49.453872, 11.077298, 12.0], [51.1758799, 6.6600606, 1.0], [48.135125, 11.581981, 3.0], [49.4892913, 8.4673098, 6.0], [51.842828, 12.230393, 3.0], [52.259276, 9.052123, 1.0], [52.1315889, 11.6399609, 5.0], [49.4704113, 8.4381568, 6.0], [49.4704113, 8.4381568, 5.0], [51.264018, 7.1780374, 1.0], [53.248706, 10.407855, 8.0], [53.248706, 10.407855, 3.0], [53.919582, 9.882173, 4.0], [53.8560526, 13.688091, 4.0], [51.7189596, 8.7648698, 1.0], [51.3154546, 9.4924096, 2.0], [51.4696137, 6.8514435, 1.0], [48.3974003, 9.9934336, 9.0], [50.356943, 7.588996, 2.0], [48.8819801, 12.569716, 1.0], [53.550341, 10.000654, 3.0], [50.769478, 7.187579, 6.0], [48.3668041, 10.8986971, 3.0], [48.775846, 9.182932, 8.0], [48.775846, 9.182932, 1.0], [52.120533, 11.627624, 4.0], [51.5348835, 7.689014, 2.0], [52.520007, 13.404954, 1.0], [53.5574458, 13.2602781, 2.0], [49.3539802, 8.1350021, 2.0], [52.6050782, 11.8594279, 8.0], [52.6050782, 11.8594279, 1.0], [51.4825041, 11.9705452, 2.0], [50.6612623, 6.7871219, 1.0], [49.533333, 8.35, 7.0], [52.3744779, 9.7385532, 11.0], [50.7527986, 7.3813038, 3.0], [52.390569, 13.064473, 5.0], [53.5278793, 8.106301, 2.0], [51.54128, 9.915804, 7.0], [51.54128, 9.915804, 1.0], [51.4582235, 7.0158171, 2.0], [50.3533278, 7.5943951, 7.0], [50.3533278, 7.5943951, 7.0], [52.3744779, 9.7385532, 5.0], [53.052189, 8.635593, 5.0], [48.8953937, 9.1895147, 3.0], [54.0924445, 12.1286127, 4.0], [50.1109221, 8.6821267, 6.0], [50.1109221, 8.6821267, 1.0], [52.605646, 8.370788, 2.0], [50.0553084, 11.5455233, 1.0], [50.0012314, 8.2762513, 14.0], [50.0012314, 8.2762513, 2.0], [48.681331, 9.00883, 2.0], [49.214024, 8.366815, 2.0], [52.617596, 10.062852, 1.0], [54.3096314, 13.0820846, 7.0], [53.1389753, 8.2146017, 2.0], [49.7596208, 6.6441878, 7.0], [49.872775, 8.651177, 1.0], [52.6487602, 9.2578105, 3.0], [51.3582945, 7.473296, 14.0], [51.705401, 9.9972782, 2.0], [53.6288297, 11.4148038, 2.0], [49.1996961, 7.6087847, 7.0], [49.1996961, 7.6087847, 1.0], [52.520007, 13.404954, 2.0], [52.266837, 8.049741, 5.0], [52.9859666, 9.8433909, 1.0], [54.3227085, 10.135555, 1.0], [49.9850353, 6.88844, 2.0], [49.9850353, 6.88844, 1.0], [48.4919508, 9.2114144, 1.0], [49.4432174, 7.7689951, 2.0], [50.1055002, 8.7610698, 1.0], [50.1055002, 8.7610698, 1.0], [52.268874, 10.52677, 4.0], [48.836689, 10.097116, 2.0], [51.828835, 9.4466591, 4.0], [51.905953, 10.428996, 2.0], [49.142291, 9.218655, 2.0], [49.992862, 8.247253, 6.0], [49.992862, 8.247253, 1.0], [51.72784, 10.2508204, 3.0], [52.922341, 9.228153, 3.0], [53.5574458, 13.2602781, 2.0], [52.3289688, 9.2053496, 1.0], [54.0924445, 12.1286127, 2.0], [52.336191, 9.374258, 1.0], [47.7811014, 9.612468, 2.0], [47.659216, 9.1750718, 2.0], [53.2520924, 9.3151133, 1.0], [52.844198, 8.053016, 2.0], [48.135125, 11.581981, 1.0], [48.135125, 11.581981, 1.0], [53.470839, 7.484831, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_135292aea73a42399ee5a53aee971204);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_c557ddfdee3c471ead063867b7f97d48 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_c557ddfdee3c471ead063867b7f97d48" ></div>
</body>
<script>
var map_c557ddfdee3c471ead063867b7f97d48 = L.map(
"map_c557ddfdee3c471ead063867b7f97d48",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_a5591d32dbbf42ebae58cd6e24506422 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_c557ddfdee3c471ead063867b7f97d48);
var heat_map_5435d58f81974c8d88b6ea913baf2f1e = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_c557ddfdee3c471ead063867b7f97d48);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_cafa3aa3cbf9491192ee4e98daba8417 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_cafa3aa3cbf9491192ee4e98daba8417" ></div>
</body>
<script>
var map_cafa3aa3cbf9491192ee4e98daba8417 = L.map(
"map_cafa3aa3cbf9491192ee4e98daba8417",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_a3d7501029394368abc2d1398488a2b7 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_cafa3aa3cbf9491192ee4e98daba8417);
var heat_map_c1893cffd6f245ef8e5aa475bd0b7fd5 = L.heatLayer(
[[51.434999, 6.759562, 1.0], [51.4818111, 7.2196635, 1.0], [52.1294289, 7.3903454, 1.0], [51.9532449, 7.9912335, 1.0], [49.79245, 9.932966, 1.0], [51.5142273, 7.4652789, 5.0], [51.5142273, 7.4652789, 1.0], [49.234362, 6.996379, 2.0], [49.234362, 6.996379, 1.0], [49.453872, 11.077298, 5.0], [49.453872, 11.077298, 1.0], [49.4892913, 8.4673098, 1.0], [52.1315889, 11.6399609, 1.0], [53.248706, 10.407855, 1.0], [53.248706, 10.407855, 1.0], [53.919582, 9.882173, 2.0], [53.919582, 9.882173, 2.0], [53.8560526, 13.688091, 8.0], [50.356943, 7.588996, 1.0], [52.2881045, 8.9168852, 1.0], [50.769478, 7.187579, 1.0], [48.775846, 9.182932, 1.0], [52.520007, 13.404954, 23.0], [52.520007, 13.404954, 1.0], [53.5574458, 13.2602781, 14.0], [53.5574458, 13.2602781, 3.0], [49.3539802, 8.1350021, 1.0], [52.6050782, 11.8594279, 4.0], [51.4825041, 11.9705452, 2.0], [51.4825041, 11.9705452, 1.0], [49.533333, 8.35, 1.0], [51.0277658, 7.5630545, 1.0], [51.0277658, 7.5630545, 1.0], [52.390569, 13.064473, 2.0], [52.390569, 13.064473, 1.0], [53.5278793, 8.106301, 1.0], [51.54128, 9.915804, 1.0], [52.3744779, 9.7385532, 1.0], [52.3744779, 9.7385532, 1.0], [54.0924445, 12.1286127, 2.0], [50.0820384, 8.2416556, 2.0], [49.214024, 8.366815, 2.0], [49.214024, 8.366815, 1.0], [52.617596, 10.062852, 1.0], [54.3096314, 13.0820846, 3.0], [52.520007, 13.404954, 3.0], [49.7596208, 6.6441878, 2.0], [52.6487602, 9.2578105, 1.0], [52.520007, 13.404954, 1.0], [52.266837, 8.049741, 1.0], [49.9850353, 6.88844, 2.0], [52.268874, 10.52677, 1.0], [52.390569, 13.064473, 3.0], [53.5574458, 13.2602781, 2.0], [52.336191, 9.374258, 1.0], [52.336191, 9.374258, 1.0], [49.0195333, 12.0974869, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_cafa3aa3cbf9491192ee4e98daba8417);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_85d930ca0a07415d9dd68e1d0abe395e {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_85d930ca0a07415d9dd68e1d0abe395e" ></div>
</body>
<script>
var map_85d930ca0a07415d9dd68e1d0abe395e = L.map(
"map_85d930ca0a07415d9dd68e1d0abe395e",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_830e849270754ae3bd2ea70100821135 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_85d930ca0a07415d9dd68e1d0abe395e);
var heat_map_8579e50a4cd64cbb839f27a8bd37b3de = L.heatLayer(
[[50.5862066, 8.6742306, 286.0], [50.5862066, 8.6742306, 3.0], [50.5521486, 9.676511, 1.0], [50.110922, 8.682127, 1.0], [51.3154546, 9.4924096, 1.0], [50.1109221, 8.6821267, 1.0], [50.0820384, 8.2416556, 1.0], [50.0012314, 8.2762513, 1.0], [54.3096314, 13.0820846, 1.0], [49.872775, 8.651177, 1.0], [50.1055002, 8.7610698, 2.0], [50.0820384, 8.2416556, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_85d930ca0a07415d9dd68e1d0abe395e);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_6aef4af00af54e2e92844234e14018b7 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_6aef4af00af54e2e92844234e14018b7" ></div>
</body>
<script>
var map_6aef4af00af54e2e92844234e14018b7 = L.map(
"map_6aef4af00af54e2e92844234e14018b7",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_04747955ac024492b2f97dc8b13b0887 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_6aef4af00af54e2e92844234e14018b7);
var heat_map_9de8301423e44c64af58e4c797deb4d9 = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_6aef4af00af54e2e92844234e14018b7);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_ebe45c1fb4d04d1a95be4f62657f738b {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_ebe45c1fb4d04d1a95be4f62657f738b" ></div>
</body>
<script>
var map_ebe45c1fb4d04d1a95be4f62657f738b = L.map(
"map_ebe45c1fb4d04d1a95be4f62657f738b",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_2e241fb7d546463fbdf373658ee835eb = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_ebe45c1fb4d04d1a95be4f62657f738b);
var heat_map_e73488534b334eda9b44e979b66e7054 = L.heatLayer(
[[51.4818111, 7.2196635, 1.0], [49.234362, 6.996379, 1.0], [51.842828, 12.230393, 2.0], [52.1315889, 11.6399609, 2.0], [51.264018, 7.1780374, 1.0], [48.3974003, 9.9934336, 2.0], [48.8819801, 12.569716, 1.0], [50.769478, 7.187579, 1.0], [52.520007, 13.404954, 1.0], [52.6050782, 11.8594279, 2.0], [51.4825041, 11.9705452, 1.0], [52.390569, 13.064473, 2.0], [52.266837, 8.049741, 2.0], [51.828835, 9.4466591, 2.0], [52.1503721, 10.3593147, 1.0], [47.8539273, 12.127262, 1.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_ebe45c1fb4d04d1a95be4f62657f738b);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_5a06192c8dc849ebb51e1684eec6a072 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_5a06192c8dc849ebb51e1684eec6a072" ></div>
</body>
<script>
var map_5a06192c8dc849ebb51e1684eec6a072 = L.map(
"map_5a06192c8dc849ebb51e1684eec6a072",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_8aad6cc72e2246d081b995f6aa6913b8 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_5a06192c8dc849ebb51e1684eec6a072);
var heat_map_f290006b43454c8d8b8c27f866e81e39 = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_5a06192c8dc849ebb51e1684eec6a072);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_f04a5cf204f8442da011a485ac471876 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_f04a5cf204f8442da011a485ac471876" ></div>
</body>
<script>
var map_f04a5cf204f8442da011a485ac471876 = L.map(
"map_f04a5cf204f8442da011a485ac471876",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_120a2f57890243ce9409df877e47e282 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_f04a5cf204f8442da011a485ac471876);
var heat_map_8abdc313946b4aa5a79ec29dff1e1d3d = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_f04a5cf204f8442da011a485ac471876);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_a08fa9b693bf4a5a815962b957e44fc4 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_a08fa9b693bf4a5a815962b957e44fc4" ></div>
</body>
<script>
var map_a08fa9b693bf4a5a815962b957e44fc4 = L.map(
"map_a08fa9b693bf4a5a815962b957e44fc4",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_9ab2306557eb41e9be1c098bbf5d6784 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_a08fa9b693bf4a5a815962b957e44fc4);
var heat_map_f4c5c6980dcb4c3cb537fa8a08f9b7a2 = L.heatLayer(
[[47.999008, 7.842104, 6.0]],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_a08fa9b693bf4a5a815962b957e44fc4);
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_c83da2fa6eea4f18b3c984ff31f38da7 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@master/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
<div class="folium-map" id="map_c83da2fa6eea4f18b3c984ff31f38da7" ></div>
</body>
<script>
var map_c83da2fa6eea4f18b3c984ff31f38da7 = L.map(
"map_c83da2fa6eea4f18b3c984ff31f38da7",
{
center: [51.423, 9.03],
crs: L.CRS.EPSG3857,
zoom: 6,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_bfc9ad4d67cc457b9786cf80eb52a7a8 = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e, under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
).addTo(map_c83da2fa6eea4f18b3c984ff31f38da7);
var heat_map_549f5561514c459d8ac2fa173de6c52d = L.heatLayer(
[],
{"blur": 15, "maxZoom": 18, "minOpacity": 0.5, "radius": 25}
).addTo(map_c83da2fa6eea4f18b3c984ff31f38da7);
</script>

591
flake.lock Normal file
View file

@ -0,0 +1,591 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1627913399,
"narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"locked": {
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"locked": {
"lastModified": 1629481132,
"narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "997f7efcb746a9c140ce1f13c72263189225f482",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": {
"flake": false,
"locked": {
"lastModified": 1611672876,
"narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "211907489e9f198594c0eb0ca9256a1949c9d412",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"jupyenv",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1660459072,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"hls": {
"inputs": {
"flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_3",
"gitignore": "gitignore",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks"
},
"locked": {
"lastModified": 1637213318,
"narHash": "sha256-ZgxPwV7t4DyGYP7aXoetq+JHtd73XlOV2fYSflQmOXw=",
"owner": "haskell",
"repo": "haskell-language-server",
"rev": "311107eabbf0537e0c192b2c377d282505b4eff1",
"type": "github"
},
"original": {
"owner": "haskell",
"repo": "haskell-language-server",
"type": "github"
}
},
"ihaskell": {
"inputs": {
"flake-compat": [
"jupyenv",
"flake-compat"
],
"flake-utils": [
"jupyenv",
"flake-utils"
],
"hls": "hls",
"nixpkgs": [
"jupyenv",
"nixpkgs"
]
},
"locked": {
"lastModified": 1671426600,
"narHash": "sha256-MahAFyp6AxY0H61U6zqJXM1NsckNNkK6iqONEtOPSK0=",
"owner": "ihaskell",
"repo": "ihaskell",
"rev": "1c22a874ac0c8ed019229f4a0cd5a0bfda017357",
"type": "github"
},
"original": {
"owner": "ihaskell",
"repo": "ihaskell",
"type": "github"
}
},
"jupyenv": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_2",
"ihaskell": "ihaskell",
"nix-dart": "nix-dart",
"nixpkgs": "nixpkgs_2",
"nixpkgs-stable": "nixpkgs-stable",
"npmlock2nix": "npmlock2nix",
"opam-nix": "opam-nix",
"poetry2nix": "poetry2nix",
"pre-commit-hooks": "pre-commit-hooks_2",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1679071568,
"narHash": "sha256-3LAo9uXGTmfS4OsiiIuoxX9knEshziCyI1MxR40VKeU=",
"owner": "tweag",
"repo": "jupyenv",
"rev": "3ad2c9512c9efd586cf63adde454e734a8ce049c",
"type": "github"
},
"original": {
"owner": "tweag",
"repo": "jupyenv",
"type": "github"
}
},
"mirage-opam-overlays": {
"flake": false,
"locked": {
"lastModified": 1661959605,
"narHash": "sha256-CPTuhYML3F4J58flfp3ZbMNhkRkVFKmBEYBZY5tnQwA=",
"owner": "dune-universe",
"repo": "mirage-opam-overlays",
"rev": "05f1c1823d891ce4d8adab91f5db3ac51d86dc0b",
"type": "github"
},
"original": {
"owner": "dune-universe",
"repo": "mirage-opam-overlays",
"type": "github"
}
},
"nix-dart": {
"inputs": {
"flake-utils": [
"jupyenv",
"flake-utils"
],
"nixpkgs": [
"jupyenv",
"nixpkgs"
],
"pub2nix": "pub2nix"
},
"locked": {
"lastModified": 1673740150,
"narHash": "sha256-JiZrr75JILHW7IaNW3MwpYn+084Q6/gnXScPR7Pozhs=",
"owner": "djacu",
"repo": "nix-dart",
"rev": "8ee4e1a5ec0cc6c1e15860c4733f741485e8231e",
"type": "github"
},
"original": {
"owner": "djacu",
"repo": "nix-dart",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1630887066,
"narHash": "sha256-0ecIlrLsNIIa+zrNmzXXmbMBLZlmHU/aWFsa4bq99Hk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5e47a07e9f2d7ed999f2c7943b0896f5f7321ca3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1672580127,
"narHash": "sha256-3lW3xZslREhJogoOkjeZtlBtvFMyxHku7I/9IVehhT8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0874168639713f547c05947c76124f78441ea46c",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-22.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1673800717,
"narHash": "sha256-SFHraUqLSu5cC6IxTprex/nTsI81ZQAtDvlBvGDWfnA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2f9fd351ec37f5d479556cd48be4ca340da59b8f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1673796341,
"narHash": "sha256-1kZi9OkukpNmOaPY7S5/+SlCDOuYnP3HkXHvNDyLQcc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6dccdc458512abce8d19f74195bb20fdb067df50",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1679616449,
"narHash": "sha256-E6Fvb13mDFa1ZY4lDbTpKbjvUOA4gbh23GWRf3ZzOOw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a64e169e396460d6b5763a1de1dd197df8421688",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"npmlock2nix": {
"flake": false,
"locked": {
"lastModified": 1668989938,
"narHash": "sha256-/IxdS0AiqSN0/VEOLnnfHyi4nP17yPrkhGf6KlXVwrc=",
"owner": "nix-community",
"repo": "npmlock2nix",
"rev": "0ba0746d62974403daf717cded3f24c617622bc7",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "npmlock2nix",
"rev": "0ba0746d62974403daf717cded3f24c617622bc7",
"type": "github"
}
},
"opam-nix": {
"inputs": {
"flake-compat": [
"jupyenv",
"flake-compat"
],
"flake-utils": [
"jupyenv",
"flake-utils"
],
"mirage-opam-overlays": "mirage-opam-overlays",
"nixpkgs": [
"jupyenv",
"nixpkgs"
],
"opam-overlays": "opam-overlays",
"opam-repository": "opam-repository",
"opam2json": "opam2json"
},
"locked": {
"lastModified": 1669990974,
"narHash": "sha256-wHhdlDUC/tBDVFBemeJPpqdIRdehKKbxbdMP0QjOhM4=",
"owner": "tweag",
"repo": "opam-nix",
"rev": "75199758e1954f78286e7e79c0e3916e28b732b0",
"type": "github"
},
"original": {
"owner": "tweag",
"repo": "opam-nix",
"rev": "75199758e1954f78286e7e79c0e3916e28b732b0",
"type": "github"
}
},
"opam-overlays": {
"flake": false,
"locked": {
"lastModified": 1654162756,
"narHash": "sha256-RV68fUK+O3zTx61iiHIoS0LvIk0E4voMp+0SwRg6G6c=",
"owner": "dune-universe",
"repo": "opam-overlays",
"rev": "c8f6ef0fc5272f254df4a971a47de7848cc1c8a4",
"type": "github"
},
"original": {
"owner": "dune-universe",
"repo": "opam-overlays",
"type": "github"
}
},
"opam-repository": {
"flake": false,
"locked": {
"lastModified": 1661161626,
"narHash": "sha256-J3P+mXLwE2oEKTlMnx8sYRxwD/uNGSKM0AkAB7BNTxA=",
"owner": "ocaml",
"repo": "opam-repository",
"rev": "54e69ff0949a3aaec0d5e3d67898bb7f279ab09f",
"type": "github"
},
"original": {
"owner": "ocaml",
"repo": "opam-repository",
"type": "github"
}
},
"opam2json": {
"inputs": {
"nixpkgs": [
"jupyenv",
"opam-nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1665671715,
"narHash": "sha256-7f75C6fIkiLzfkwLpJxlQIKf+YORGsXGV8Dr2LDDi+A=",
"owner": "tweag",
"repo": "opam2json",
"rev": "32fa2dcd993a27f9e75ee46fb8b78a7cd5d05113",
"type": "github"
},
"original": {
"owner": "tweag",
"repo": "opam2json",
"type": "github"
}
},
"poetry2nix": {
"inputs": {
"flake-utils": [
"jupyenv",
"flake-utils"
],
"nixpkgs": [
"jupyenv",
"nixpkgs"
]
},
"locked": {
"lastModified": 1673926875,
"narHash": "sha256-QOsT76Al0Igpo0u5vtQJuDSOxrocX3sTD523pLPEklc=",
"owner": "nix-community",
"repo": "poetry2nix",
"rev": "a5c454a834cd290dd4d33102ab8b4aa37d850e65",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "poetry2nix",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-utils": [
"jupyenv",
"ihaskell",
"hls",
"flake-utils"
],
"nixpkgs": [
"jupyenv",
"ihaskell",
"hls",
"nixpkgs"
]
},
"locked": {
"lastModified": 1624971177,
"narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"pre-commit-hooks_2": {
"inputs": {
"flake-compat": "flake-compat_4",
"flake-utils": [
"jupyenv",
"flake-utils"
],
"gitignore": "gitignore_2",
"nixpkgs": [
"jupyenv",
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable_2"
},
"locked": {
"lastModified": 1674075316,
"narHash": "sha256-0uZuAcYBpNJLxr7n5O0vhwn3rSLpUTm9M5WGgmNQ+wM=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "3e42a77571cc0463efa470dbcffa063977a521ab",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"pub2nix": {
"flake": false,
"locked": {
"lastModified": 1594192744,
"narHash": "sha256-pDvcXSG1Mh2BpwkqAcNDJzcupV3pIAAtZJLfkiHMAz4=",
"owner": "paulyoung",
"repo": "pub2nix",
"rev": "0c7ecca590fcd1616db8c6468f799ffef36c85e9",
"type": "github"
},
"original": {
"owner": "paulyoung",
"repo": "pub2nix",
"type": "github"
}
},
"root": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"jupyenv": "jupyenv",
"nixpkgs": "nixpkgs_3"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": [
"jupyenv",
"flake-utils"
],
"nixpkgs": [
"jupyenv",
"nixpkgs"
]
},
"locked": {
"lastModified": 1674008920,
"narHash": "sha256-ugwPxKjvmJ5GpzN/MHg8tuhe8nYi3SbJm5nWNy7CB0Q=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "eecc44934a0f6c02c02856b38bd3b6af3bec0870",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

43
flake.nix Normal file
View file

@ -0,0 +1,43 @@
{
description = "Your jupyenv project";
nixConfig.extra-substituters = [
"https://tweag-jupyter.cachix.org"
];
nixConfig.extra-trusted-public-keys = [
"tweag-jupyter.cachix.org-1:UtNH4Zs6hVUFpFBTLaA4ejYavPo5EFFqgd7G7FxGW9g="
];
inputs.flake-compat.url = "github:edolstra/flake-compat";
inputs.flake-compat.flake = false;
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
inputs.jupyenv.url = "github:tweag/jupyenv";
outputs = {
self,
flake-compat,
flake-utils,
nixpkgs,
jupyenv,
...
} @ inputs:
flake-utils.lib.eachSystem
[
flake-utils.lib.system.x86_64-linux
]
(
system: let
inherit (jupyenv.lib.${system}) mkJupyterlabNew;
jupyterlab = mkJupyterlabNew ({...}: {
nixpkgs = inputs.nixpkgs;
imports = [(import ./kernels.nix)];
});
in rec {
packages = {inherit jupyterlab;};
packages.default = jupyterlab;
apps.default.program = "${jupyterlab}/bin/jupyter-lab";
apps.default.type = "app";
}
);
}

12
kernels.nix Normal file
View file

@ -0,0 +1,12 @@
{pkgs, ...}: {
kernel.python.scientific = {
enable = true;
extraPackages = ps: [
ps.numpy
ps.pandas
ps.matplotlib
ps.networkx
ps.altair
];
};
}

649
zusammenfassung.ipynb Normal file
View file

@ -0,0 +1,649 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "83885e86-1ccb-46ec-bee9-a33f3b541569",
"metadata": {},
"source": [
"# Zusammenfassung der Analysen vom Hackathon für die Webside\n",
"\n",
"- womöglich zur Darstellung auf der Webside\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "9bd1686f-9bbc-4c05-a5f5-e0c4ce653fb2",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import altair as alt"
]
},
{
"cell_type": "markdown",
"id": "81780c9a-7721-438b-9726-ff5a70910ce8",
"metadata": {},
"source": [
"## Daten aufbereitung\n",
"\n",
"Dump der Datenbank vom 25.03.2023. Die verschiedene Tabellen der Datenbank werden einzeln eingelesen. Zusätzlich werden alle direkt zu einem Tweet zugehörige Information in ein Datenobjekt gesammelt. Die Informationen zu den GIS-Daten zu den einzelnen Polizeistadtion (\"police_stations\") sind noch unvollständig und müssen gegebenfalls nocheinmal überprüft werden.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e312a975-3921-44ee-a7c5-37736678bc3f",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tweet_id</th>\n",
" <th>measured_at</th>\n",
" <th>like_count</th>\n",
" <th>reply_count</th>\n",
" <th>retweet_count</th>\n",
" <th>quote_count</th>\n",
" <th>is_deleted</th>\n",
" <th>tweet_text</th>\n",
" <th>created_at</th>\n",
" <th>user_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1496955054712045581</td>\n",
" <td>2022-02-28 22:42:26</td>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Auch wir schließen uns dem Apell an! \\n\\n#Ukra...</td>\n",
" <td>2022-02-24 21:07:51</td>\n",
" <td>773438463068766208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1496957213516214277</td>\n",
" <td>2022-02-28 22:42:26</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>@BWeltenbummler Sehr schwer zu sagen. Die Evak...</td>\n",
" <td>2022-02-24 21:16:26</td>\n",
" <td>2397974054</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1496963501201539073</td>\n",
" <td>2022-02-28 22:42:26</td>\n",
" <td>-1</td>\n",
" <td>-1</td>\n",
" <td>-1</td>\n",
" <td>-1</td>\n",
" <td>1</td>\n",
" <td>Halten Sie durch die Evakuierung ist fast ab...</td>\n",
" <td>2022-02-24 21:41:25</td>\n",
" <td>2398002414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1496963771054825472</td>\n",
" <td>2022-02-28 23:42:27</td>\n",
" <td>142</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>Halten Sie durch die Evakuierung ist fast ab...</td>\n",
" <td>2022-02-24 21:42:29</td>\n",
" <td>2398002414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1496965696907104258</td>\n",
" <td>2022-02-28 23:42:27</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>RT @drkberlin_iuk: 🚨 In enger Abstimmung mit d...</td>\n",
" <td>2022-02-24 21:50:09</td>\n",
" <td>2398002414</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tweet_id measured_at like_count reply_count \\\n",
"0 1496955054712045581 2022-02-28 22:42:26 13 0 \n",
"1 1496957213516214277 2022-02-28 22:42:26 2 0 \n",
"2 1496963501201539073 2022-02-28 22:42:26 -1 -1 \n",
"3 1496963771054825472 2022-02-28 23:42:27 142 7 \n",
"4 1496965696907104258 2022-02-28 23:42:27 0 0 \n",
"\n",
" retweet_count quote_count is_deleted \\\n",
"0 2 0 0 \n",
"1 0 0 0 \n",
"2 -1 -1 1 \n",
"3 8 3 0 \n",
"4 11 0 0 \n",
"\n",
" tweet_text created_at \\\n",
"0 Auch wir schließen uns dem Apell an! \\n\\n#Ukra... 2022-02-24 21:07:51 \n",
"1 @BWeltenbummler Sehr schwer zu sagen. Die Evak... 2022-02-24 21:16:26 \n",
"2 Halten Sie durch die Evakuierung ist fast ab... 2022-02-24 21:41:25 \n",
"3 Halten Sie durch die Evakuierung ist fast ab... 2022-02-24 21:42:29 \n",
"4 RT @drkberlin_iuk: 🚨 In enger Abstimmung mit d... 2022-02-24 21:50:09 \n",
"\n",
" user_id \n",
"0 773438463068766208 \n",
"1 2397974054 \n",
"2 2398002414 \n",
"3 2398002414 \n",
"4 2398002414 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets_meta = pd.read_csv(\"data/tweets.csv\")\n",
"tweets_time = pd.read_csv(\"data/tweets-1679742620302.csv\")\n",
"tweets_text = pd.read_csv(\"data/tweets-1679742698645.csv\")\n",
"tweets_user = pd.read_csv(\"data/tweets-1679742702794.csv\"\n",
" ).rename(columns = {\"username\":\"handle\", # rename columns\n",
" \"handle\": \"username\"})\n",
"tweets_user = tweets_user.assign(handle = tweets_user['handle'].str.lower()) # convert handles to lower case\n",
"tweets_combined = pd.merge(tweets_time, # merge the two tweet related data frames\n",
" tweets_text, \n",
" how = 'inner', \n",
" on = 'tweet_id'\n",
" ).drop(['id'], # drop unascessary id column (redundant to index)\n",
" axis = 1)\n",
"tweets_combined = tweets_combined.assign(measured_at = pd.to_datetime(tweets_combined['measured_at']), # change date to date format\n",
" created_at = pd.to_datetime(tweets_combined['created_at']))\n",
"police_stations = pd.read_csv(\"data/polizei_accounts_geo.csv\", sep = \"\\t\" # addiditional on police stations\n",
" ).rename(columns = {\"Polizei Account\": \"handle\"})\n",
"tweets_combined.head()"
]
},
{
"cell_type": "markdown",
"id": "91dfb8bb-15dc-4b2c-9c5f-3eab18d78ef8",
"metadata": {
"tags": []
},
"source": [
"### Adjazenzmatrix mentions\n",
" \n",
"Information, welche nicht direkt enthalten ist: welche Accounts werden erwähnt. Ist nur im Tweet mit @handle gekennzeichnet."
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "5d8bf730-3c8f-4143-b405-c95f1914f54b",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"0 Auch wir schließen uns dem Apell an! \\n\\n#Ukra...\n",
"1 @BWeltenbummler Sehr schwer zu sagen. Die Evak...\n",
"2 Halten Sie durch die Evakuierung ist fast ab...\n",
"3 Halten Sie durch die Evakuierung ist fast ab...\n",
"4 RT @drkberlin_iuk: 🚨 In enger Abstimmung mit d...\n",
"Name: tweet_text, dtype: object"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# TODO"
]
},
{
"cell_type": "markdown",
"id": "0c242090-0748-488c-b604-f521030f468f",
"metadata": {
"tags": []
},
"source": [
"## Metadaten \n",
"\n",
"Welche Daten bilden die Grundlage?"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0e5eb455-6b12-4572-8f5e-f328a94bd797",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"hashtag 157145\n",
"url 88322\n",
"mention 36815\n",
"Name: entity_type, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets_meta[\"entity_type\"].value_counts()\n",
"# tweets_meta[tweets_meta['entity_type'] == \"mention\"]"
]
},
{
"cell_type": "markdown",
"id": "ef440301-cf89-4e80-8801-eb853d636190",
"metadata": {
"tags": []
},
"source": [
"Insgesamt haben wir 84794 einzigartige Tweets:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "5a438e7f-8735-40bb-b450-2ce168f0f67a",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"84794"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets_combined[\"tweet_id\"].value_counts().shape[0] # Anzahl an Tweets"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "4f1e8c6c-3610-436e-899e-4d0307259230",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Die Tweets wurden vom 2022-02-24 bis zum: 2023-03-16 gesammelt. Also genau insgesamt: 384 Tage.\n"
]
}
],
"source": [
"print(\"Die Tweets wurden vom \", tweets_combined['created_at'].min().date(), \"bis zum:\", tweets_combined['created_at'].max().date(), \"gesammelt.\", \"Also genau insgesamt:\", (tweets_combined['created_at'].max() - tweets_combined['created_at'].min()).days, \"Tage.\")\n",
"# tweets_combined[tweets_combined['created_at'] == tweets_combined['created_at'].max()] # Tweets vom letzten Tag"
]
},
{
"cell_type": "markdown",
"id": "d8b47a60-1535-4d03-913a-73e897bc18df",
"metadata": {
"tags": []
},
"source": [
"Welche Polizei Accounts haben am meisten getweetet?"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "9373552e-6baf-46df-ae16-c63603e20a83",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>handle</th>\n",
" <th>count</th>\n",
" <th>Name</th>\n",
" <th>Typ</th>\n",
" <th>Bundesland</th>\n",
" <th>Stadt</th>\n",
" <th>LAT</th>\n",
" <th>LONG</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>polizei_ffm</td>\n",
" <td>2993</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>polizei_nrw_do</td>\n",
" <td>2860</td>\n",
" <td>Polizei NRW DO</td>\n",
" <td>Polizei</td>\n",
" <td>Nordrhein-Westfalen</td>\n",
" <td>Dortmund</td>\n",
" <td>51.5142273</td>\n",
" <td>7.4652789</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>polizeisachsen</td>\n",
" <td>2700</td>\n",
" <td>Polizei Sachsen</td>\n",
" <td>Polizei</td>\n",
" <td>Sachsen</td>\n",
" <td>Dresden</td>\n",
" <td>51.0493286</td>\n",
" <td>13.7381437</td>\n",
" </tr>\n",
" <tr>\n",
" <th>91</th>\n",
" <td>polizeibb</td>\n",
" <td>2310</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>polizeihamburg</td>\n",
" <td>2093</td>\n",
" <td>Polizei Hamburg</td>\n",
" <td>Polizei</td>\n",
" <td>Hamburg</td>\n",
" <td>Hamburg</td>\n",
" <td>53.550341</td>\n",
" <td>10.000654</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" handle count Name Typ Bundesland \\\n",
"11 polizei_ffm 2993 NaN NaN NaN \n",
"3 polizei_nrw_do 2860 Polizei NRW DO Polizei Nordrhein-Westfalen \n",
"0 polizeisachsen 2700 Polizei Sachsen Polizei Sachsen \n",
"91 polizeibb 2310 NaN NaN NaN \n",
"61 polizeihamburg 2093 Polizei Hamburg Polizei Hamburg \n",
"\n",
" Stadt LAT LONG \n",
"11 NaN NaN NaN \n",
"3 Dortmund 51.5142273 7.4652789 \n",
"0 Dresden 51.0493286 13.7381437 \n",
"91 NaN NaN NaN \n",
"61 Hamburg 53.550341 10.000654 "
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets_agg = tweets_combined.merge(tweets_user,\n",
" on = \"user_id\"\n",
" ).groupby(by = [\"user_id\", \"handle\", \"username\"]\n",
" )[\"user_id\"].aggregate(['count']\n",
" ).merge(police_stations, \n",
" on = \"handle\",\n",
" how = \"left\"\n",
" ).sort_values(['count'], \n",
" ascending=False)\n",
"tweets_agg.shape\n",
"activy_police_vis = tweets_agg[0:50]\n",
"activy_police_vis.headd()"
]
},
{
"cell_type": "markdown",
"id": "9cf5f544-706b-41af-b785-7023f04e3ecb",
"metadata": {
"tags": []
},
"source": [
"Visualisierung aktivste Polizeistadtionen:"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "b1c39196-d1cc-4f82-8e01-7529e7b3046f",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<div id=\"altair-viz-a660bd38b72240eaae654b5e471932a6\"></div>\n",
"<script type=\"text/javascript\">\n",
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n",
" (function(spec, embedOpt){\n",
" let outputDiv = document.currentScript.previousElementSibling;\n",
" if (outputDiv.id !== \"altair-viz-a660bd38b72240eaae654b5e471932a6\") {\n",
" outputDiv = document.getElementById(\"altair-viz-a660bd38b72240eaae654b5e471932a6\");\n",
" }\n",
" const paths = {\n",
" \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n",
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n",
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext\",\n",
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n",
" };\n",
"\n",
" function maybeLoadScript(lib, version) {\n",
" var key = `${lib.replace(\"-\", \"\")}_version`;\n",
" return (VEGA_DEBUG[key] == version) ?\n",
" Promise.resolve(paths[lib]) :\n",
" new Promise(function(resolve, reject) {\n",
" var s = document.createElement('script');\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" s.async = true;\n",
" s.onload = () => {\n",
" VEGA_DEBUG[key] = version;\n",
" return resolve(paths[lib]);\n",
" };\n",
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n",
" s.src = paths[lib];\n",
" });\n",
" }\n",
"\n",
" function showError(err) {\n",
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n",
" throw err;\n",
" }\n",
"\n",
" function displayChart(vegaEmbed) {\n",
" vegaEmbed(outputDiv, spec, embedOpt)\n",
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n",
" }\n",
"\n",
" if(typeof define === \"function\" && define.amd) {\n",
" requirejs.config({paths});\n",
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n",
" } else {\n",
" maybeLoadScript(\"vega\", \"5\")\n",
" .then(() => maybeLoadScript(\"vega-lite\", \"4.17.0\"))\n",
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n",
" .catch(showError)\n",
" .then(() => displayChart(vegaEmbed));\n",
" }\n",
" })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-da2bacd5b3a57271f77be4dc435a345f\"}, \"mark\": \"bar\", \"encoding\": {\"x\": {\"field\": \"count\", \"type\": \"quantitative\"}, \"y\": {\"field\": \"handle\", \"sort\": \"-x\", \"type\": \"nominal\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.17.0.json\", \"datasets\": {\"data-da2bacd5b3a57271f77be4dc435a345f\": [{\"handle\": \"polizei_ffm\", \"count\": 2993, \"Name\": null, \"Typ\": null, \"Bundesland\": null, \"Stadt\": null, \"LAT\": null, \"LONG\": null}, {\"handle\": \"polizei_nrw_do\", \"count\": 2860, \"Name\": \"Polizei NRW DO\", \"Typ\": \"Polizei\", \"Bundesland\": \"Nordrhein-Westfalen\", \"Stadt\": \"Dortmund\", \"LAT\": \"51.5142273\", \"LONG\": \"7.4652789\"}, {\"handle\": \"polizeisachsen\", \"count\": 2700, \"Name\": \"Polizei Sachsen\", \"Typ\": \"Polizei\", \"Bundesland\": \"Sachsen\", \"Stadt\": \"Dresden\", \"LAT\": \"51.0493286\", \"LONG\": \"13.7381437\"}, {\"handle\": \"polizeibb\", \"count\": 2310, \"Name\": null, \"Typ\": null, \"Bundesland\": null, \"Stadt\": null, \"LAT\": null, \"LONG\": null}, {\"handle\": \"polizeihamburg\", \"count\": 2093, \"Name\": \"Polizei Hamburg\", \"Typ\": \"Polizei\", \"Bundesland\": \"Hamburg\", \"Stadt\": \"Hamburg\", \"LAT\": \"53.550341\", \"LONG\": \"10.000654\"}, {\"handle\": \"polizeimuenchen\", \"count\": 2021, \"Name\": \"Polizei M\\u00fcnchen\", \"Typ\": \"Polizei\", \"Bundesland\": \"Bayern\", \"Stadt\": \"M\\u00fcnchen\", \"LAT\": \"48.135125\", \"LONG\": \"11.581981\"}, {\"handle\": \"polizeimfr\", \"count\": 1892, \"Name\": \"Polizei Mittelfranken\", \"Typ\": \"Polizei\", \"Bundesland\": \"Bayern\", \"Stadt\": \"N\\u00fcrnberg\", \"LAT\": \"49.453872\", \"LONG\": \"11.077298\"}, {\"handle\": \"polizeimannheim\", \"count\": 1835, \"Name\": \"Polizei Mannheim\", \"Typ\": \"Polizei\", \"Bundesland\": \"Baden-W\\u00fcrttemberg\", \"Stadt\": \"Mannheim\", \"LAT\": \"49.4892913\", \"LONG\": \"8.4673098\"}, {\"handle\": \"polizei_nrw_bi\", \"count\": 1794, \"Name\": \"Polizei NRW BI\", \"Typ\": \"Polizei\", \"Bundesland\": \"Nordrhein-Westfalen\", \"Stadt\": \"Bielefeld\", \"LAT\": \"52.0191005\", \"LONG\": \"8.531007\"}, {\"handle\": \"polizei_nrw_k\", \"count\": 1540, \"Name\": \"Polizei NRW K\", \"Typ\": \"Polizei\", \"Bundesland\": \"Nordrhein-Westfalen\", \"Stadt\": \"K\\u00f6ln\", \"LAT\": \"50.938361\", \"LONG\": \"6.959974\"}, {\"handle\": \"bremenpolizei\", \"count\": 1417, \"Name\": null, \"Typ\": null, \"Bundesland\": null, \"Stadt\": null, \"LAT\": null, \"LONG\": null}, {\"handle\": \"polizei_kl\", \"count\": 1380, \"Name\": \"Polizei Kaiserslautern\", \"Typ\": \"Polizei\", \"Bundesland\": \"Rheinland-Pfalz\", \"Stadt\": \"Kaiserslautern\", \"LAT\": \"49.4432174\", \"LONG\": \"7.7689951\"}, {\"handle\": \"polizei_md\", \"count\": 1365, \"Name\": \"Polizei Magdeburg\", \"Typ\": \"Polizei\", \"Bundesland\": \"Sachsen-Anhalt\", \"Stadt\": \"Magdeburg\", \"LAT\": \"52.1315889\", \"LONG\": \"11.6399609\"}, {\"handle\": \"polizei_ka\", \"count\": 1356, \"Name\": \"Polizei Karlsruhe\", \"Typ\": \"Polizei\", \"Bundesland\": \"Baden-W\\u00fcrttemberg\", \"Stadt\": \"Karlsruhe\", \"LAT\": \"49.0068705\", \"LONG\": \"8.4034195\"}, {\"handle\": \"polizeiberlin\", \"count\": 1351, \"Name\": null, \"Typ\": null, \"Bundesland\": null, \"Stadt\": null, \"LAT\": null, \"LONG\": null}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.Chart(...)"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"barchart = alt.Chart(activy_police_vis[0:15]).mark_bar().encode(\n",
" x = 'count:Q',\n",
" y = alt.Y('handle:N', sort = '-x'),\n",
")\n",
"barchart "
]
},
{
"cell_type": "markdown",
"id": "90f686ff-93c6-44d9-9761-feb35dfe9d1d",
"metadata": {
"tags": []
},
"source": [
"Welche Tweets ziehen besonders viel Aufmerksamkeit auf sich?"
]
},
{
"cell_type": "code",
"execution_count": 90,
"id": "d0549250-b11f-4762-8500-1134c53303b4",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"0 Die Gewalt, die unsere Kolleginnen &amp; Kollegen in der Silvesternacht erleben mussten, ist une...\n",
"1 WICHTIGE Info:\\nÜber das Internet wird derzeit ein Video verbreitet, in dem von einem Überfall a...\n",
"2 Die Experten gehen derzeit davon aus, dass es sich um ein absichtliches \"Fake-Video\" handelt, da...\n",
"3 Auf unserem #A45 in #lichterfelde) befindet sich gerade diese Fundhündin. Sie wurde am Hindenbur...\n",
"4 @nexta_tv Wir haben das Video gesichert und leiten den Sachverhalt an die zuständigen Kolleginne...\n",
" ... \n",
"84789 #Polizeimeldungen #Tagesticker\\n \\nAnhalt-Bitterfeld\\nhttps://t.co/tNLEzztL1o\\n \\nDessau-Roßlau\\...\n",
"84790 Am Mittwoch erhielten wir mehrere Anrufe über einen auffälligen Pkw-Fahrer (Reifen quietschen un...\n",
"84791 @Jonas5Luisa Kleiner Pro-Tipp von uns: Einfach mal auf den link klicken! ;)*cl\n",
"84792 Vermisstensuche nach 27-Jährigem aus Bendorf-Mühlhofen: Wer hat Tobias Wißmann gesehen? Ein Foto...\n",
"84793 #PolizeiNRW #Köln #Leverkusen : XXX - Infos unter https://t.co/SeWShP2tZE https://t.co/Kopy7w8W3B\n",
"Name: tweet_text, Length: 84794, dtype: object"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tweets_attention = tweets_combined.merge(tweets_user,\n",
" on = \"user_id\",\n",
" how = \"left\"\n",
" ).merge(police_stations,\n",
" on = \"handle\",\n",
" how = \"left\")\n",
"pd.options.display.max_colwidth = 100\n",
"tweets_attention.sort_values('like_count', ascending = False).reset_index()['tweet_text']\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "python-scientific kernel",
"language": "python",
"name": "python-scientific"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}