copbird_aufarbeitung/ergebnisse_hackathon_repo/team-22/geolikes.ipynb

318 lines
20 KiB
Text
Raw Normal View History

2023-03-26 16:36:49 +00:00
{
"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()\n",
"import folium\n",
"from folium import plugins as fpg"
]
},
{
"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": "markdown",
"id": "86a35bfb",
"metadata": {},
"source": [
"Map für Deutschland initialisieren"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "46da62ac",
"metadata": {},
"outputs": [],
"source": [
"map_ = folium.Map(location=[51.423, 9.03], zoom_start=6)"
]
},
{
"cell_type": "markdown",
"id": "8c426c02",
"metadata": {},
"source": [
"Kombination von Tweets mit GPS-Stempel"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b70fd2b2",
"metadata": {
"scrolled": true
},
"outputs": [],
"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",
"\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",
"\n",
"#bad_users = users_geolocs_left.where(users_geolocs_left['LAT'].isnull()).dropna(how='all')[['id','name','handle']]\n",
"#second_try = bad_users.merge(geolocs, left_on='handle', right_on='Polizei Account', how='right')\n",
"#second_try#.where(second_try['id'].isnull()).dropna(how='all')\n",
"\n"
]
},
{
"cell_type": "raw",
"id": "d4d9325e",
"metadata": {},
"source": [
"Heat = Tweet mit maximaler Metrik bezogen auf den Account"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "6122decc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"146\n",
"161\n"
]
}
],
"source": [
"metric = 'like_count'\n",
"grouped = us_ge_tw.groupby(['LAT','LONG'])\n",
"\n",
"max_counts = []\n",
"number_of_groups = grouped.ngroups\n",
"print(number_of_groups)\n",
"print(len(geolocs))\n",
"max_all = us_ge_tw[metric].max()\n",
"\n",
"for i in range(0,127): #TODO rausfinden was mit der range nicht stimmt (eig. sollte number_of_groups verwendet werden)\n",
" gps = geolocs.iloc[i][['LAT','LONG']] \n",
" lat = gps[0]\n",
" long = gps[1]\n",
" mygroup = grouped.get_group((lat, long))\n",
" max_counts.append([lat, long, mygroup[metric].max()])\n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "7c944621",
"metadata": {},
"source": [
"Experiment with the handles"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "78d607bc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" id name handle\n",
"57 2397974054 Polizei Berlin polizeiberlin\n",
" Polizei Account Name Typ Bundesland Stadt LAT \\\n",
"25 polizeiberlin Polizei Berlin Polizei Berlin Berlin 52.520007 \n",
"\n",
" LONG \n",
"25 13.404954 \n"
]
}
],
"source": [
"\n",
"print(users.loc[users['handle']=='polizeiberlin'])\n",
"print(geolocs.loc[geolocs['Polizei Account']=='polizeiberlin'])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "cd9698b3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Polizei Account polizeibhv\n",
"Name Polizei Bremerhaven\n",
"Typ Polizei\n",
"Bundesland Bremen\n",
"Stadt Bremerhaven\n",
"LAT 53.539584\n",
"LONG 8.580942\n",
"Name: 27, dtype: object\n",
"polizeiberlin\n",
"polizeibhv\n"
]
}
],
"source": [
"\n",
"\n",
"u = users.iloc[57]\n",
"g = geolocs.iloc[25]\n",
"#u['handle'].eq(g['Polizei Account'])\n",
"print(g)\n",
"print(u['handle'])\n",
"print(g['Polizei Account'])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "3ac1d3e3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"19498.0\n"
]
}
],
"source": [
"max_likes = us_ge_tw['like_count'].max()\n",
"likes = us_ge_tw['like_count'] / max_likes\n",
"print(max_likes)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "e862ec51",
"metadata": {},
"outputs": [],
"source": [
"locs = us_ge_tw[['LAT','LONG']]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "400543a3",
"metadata": {},
"outputs": [],
"source": [
"#wlocs = locs.merge(pd.DataFrame(data = [likes.values] * len(locs), columns = likes.index, index=locs.index), left_index=True, right_index=True)\n",
"wlocs = pd.concat([locs, likes], axis=1)\n",
"wlocs = wlocs.dropna()\n",
"wloclist = wlocs.values.tolist()\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "29af903a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=%3C%21DOCTYPE%20html%3E%0A%3Chead%3E%20%20%20%20%0A%20%20%20%20%3Cmeta%20http-equiv%3D%22content-type%22%20content%3D%22text/html%3B%20charset%3DUTF-8%22%20/%3E%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%3Cscript%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20L_NO_TOUCH%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20L_DISABLE_3D%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%3C/script%3E%0A%20%20%20%20%0A%20%20%20%20%3Cstyle%3Ehtml%2C%20body%20%7Bwidth%3A%20100%25%3Bheight%3A%20100%25%3Bmargin%3A%200%3Bpadding%3A%200%3B%7D%3C/style%3E%0A%20%20%20%20%3Cstyle%3E%23map%20%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bright%3A0%3Bleft%3A0%3B%7D%3C/style%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//cdn.jsdelivr.net/npm/leaflet%401.6.0/dist/leaflet.js%22%3E%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//code.jquery.com/jquery-1.12.4.min.js%22%3E%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js%22%3E%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js%22%3E%3C/script%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//cdn.jsdelivr.net/npm/leaflet%401.6.0/dist/leaflet.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css%22/%3E%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20initial-scale%3D1.0%2C%20maximum-scale%3D1.0%2C%20user-scalable%3Dno%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23map_7762746d906349d1b4d490478cc51c40%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20relative%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20100.0%25%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%20100.0%25%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20left%3A%200.0%25%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20top%3A%200.0%25%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/style%3E%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//cdn.jsdelivr.net/gh/python-visualization/folium%40master/folium/templates/leaflet_heat.min.js%22%3E%3C/script%3E%0A%3C/head%3E%0A%3Cbody%3E%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22folium-map%22%20id%3D%22map_7762746d906349d1b4d490478cc51c40%22%20%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%0A%3C/body%3E%0A%3Cscript%3E%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20map_7762746d906349d1b4d490478cc51c40%20%3D%20L.map%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22map_7762746d906349d1b4d490478cc51c40%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20center%3A%20%5B51.4
],
"text/plain": [
"<folium.folium.Map at 0x7fc993ef2af0>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"folium.plugins.HeatMap(data=max_counts, radius=15, min_opacity=.5, blur=5).add_to(map_)\n",
"map_"
]
}
],
"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.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}