{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Import Library","metadata":{}},{"cell_type":"code","source":"import folium\nfrom folium import plugins\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport plotly_express as px\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n%matplotlib inline","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Preview Data","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv('../input/birdclef-2021/train_metadata.csv')\ndf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Check unique primary label","metadata":{}},{"cell_type":"code","source":"print('unique primary label : ', len(df['primary_label'].unique()),'\\n',df['primary_label'].unique())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Bird locoation visualization (season)\n\n* Hover on the top-right button to open label list\n* 4 color corresponding to 4 seasons\n 🟢 Sprint\n 🟡 Summer\n 🟠 Fall\n 🔵 Winter\n* Click color circle to check information (primary label、date、season)\n\n## Observation results\n\nAs we can see, most of bird will move to south in winter and move back to north in summer time","metadata":{}},{"cell_type":"code","source":"bird_df = df[df['primary_label'] == 'houwre']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"route_df = bird_df[['primary_label', 'latitude', 'longitude', 'date']]\nroute_df = route_df.sort_values(by='date',ascending=True)\n\n# Filter out rows with wrong format date\nroute_df = route_df[route_df.date.str.split('-').str[2] != '00']\nroute_df = route_df[route_df.date.str.split('-').str[1] != '00']\nroute_df = route_df[route_df.date.str.split('-').str[0].astype(int) > 1000]\n\nroute_df['season'] = pd.to_datetime(route_df['date'], format='%Y-%m-%d').dt.month%12 // 3 + 1\n\nmapa = folium.Map(height = 500, width = 1000, location=[route_df.iloc[0]['latitude'], route_df.iloc[0]['longitude']],zoom_start=4,tiles=\"cartodbpositron\")\n\nfor grp_name, df_grp in route_df.groupby('primary_label'):\n    feature_group = folium.FeatureGroup(grp_name, show=True)\n    for row in df_grp.itertuples():\n        if row.season == 1:\n            color = 'blue'\n            season = 'winter'\n        elif row.season == 2:\n            color = 'green'\n            season = 'spring'\n        elif row.season == 3:\n            color = 'yellow'\n            season = 'summer'\n        else:\n            color = 'orange'\n            season = 'fall'\n\n        folium.Circle(\n            radius=40000,\n            location=[row.latitude, row.longitude],\n            popup= f\"{row.primary_label}_ \\n {row.date}_ \\n{season}\",\n            color = \"#555\",\n            weight=2,\n            fill_color = color,\n            fill_opacity=1,\n        ).add_to(feature_group)\n        \n    feature_group.add_to(mapa)\n\nfolium.LayerControl().add_to(mapa)\nmapa","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}