{"id":129,"date":"2025-10-10T10:12:04","date_gmt":"2025-10-10T10:12:04","guid":{"rendered":"https:\/\/olgamironczuk.pl\/?p=129"},"modified":"2026-06-29T14:51:16","modified_gmt":"2026-06-29T13:51:16","slug":"projekt-wolontariacki-incydenty-z-rekinami-2000-2024","status":"publish","type":"post","link":"https:\/\/olgamironczuk.pl\/en\/projekt-wolontariacki-incydenty-z-rekinami-2000-2024\/","title":{"rendered":"Volunteer project: shark incidents \u2022 2000-2024"},"content":{"rendered":"<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"443\" height=\"251\" src=\"http:\/\/olgamironczuk.pl\/wp-content\/uploads\/2026\/01\/Shark_Incidents_2000-2024.gif\" alt=\"\" class=\"wp-image-132\"\/><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p class=\"has-small-font-size wp-block-paragraph\"><strong>Project:&nbsp;<\/strong>Shark incidents \u2022 2000-2024 <br><strong>Tools:&nbsp;<\/strong>Tableau, MySQL (ETL), DBeaver <br><strong>Description:&nbsp;<\/strong>Independent, pro bono analysis based on the Global Shark Attack File (GSAF) \u2013 from importing and cleaning data (ETL in MySQL) to building an interactive dashboard in Tableau. <br><strong>Objective:<\/strong>&nbsp;Education and context, not fear \u2013 emphasizing seasonality, human activity and geography (with clear definitions: fatal vs non-fatal and unprovoked).<strong><br>Data:&nbsp;<\/strong>Global Shark Attack File (GSAF) \u2022 snapshot 2025-09-24 \u2022 incidents 2000-2024. <br><strong>Repository:<\/strong> <img decoding=\"async\" style=\"width:26px; height:auto; vertical-align:middle; position:relative; top:0px; margin:0 6px 0 6px;\" src=\"http:\/\/olgamironczuk.pl\/wp-content\/uploads\/2026\/01\/github-mark.png\" alt=\"GitHub\"> <a href=\"https:\/\/github.com\/Waderlla\/Volunteer_Project_Shark_Bite_Incidents_2000_2024\" target=\"_blank\" rel=\"noopener\">See on GitHub <\/a><br><br><strong><a href=\"https:\/\/olgamironczuk.pl\/en\/list-referencyjny-global-shark-attack-file-gsaf\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width:40px; height:auto; vertical-align:middle; position:relative; top:0px; margin:0 6px 0 6px;\" src=\"http:\/\/olgamironczuk.pl\/wp-content\/uploads\/2026\/01\/GSAF_reference_letter_highres.png\" alt=\"List_referencyjny_GSAF\"> View the reference letter from GSAF<\/a><\/strong><\/p>\n<\/div>\n<\/div>\n\n\n\n<!--more Czytaj wi\u0119cej-->\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph translation-block\" style=\"font-size:15px\">Sharks have always sparked strong emotions \u2014 and data helps turn those emotions into understanding. This project was created as part of my volunteer collaboration with the Global Shark Attack File (GSAF). My goal was to tell this story in a calm and responsible way \u2014 showing that most incidents do not result in death, and that risk depends mainly on the time of year, the type of activity, and the location, rather than on \u201cdangerous species.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph translation-block\" style=\"font-size:15px\">This was not only a data analysis project, but also a process of improving data quality and practicing ethical data visualization. The dashboard was designed to be clear, minimalist, and free from sensationalism.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Data<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-size:15px\"><strong>Source:<\/strong>&nbsp;Global Shark Attack File (GSAF)<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Time range:<\/strong><strong>akres lat:<\/strong>&nbsp;2000-2024 (snapshot)<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Po<\/strong><strong>Fields included in the dataset:<\/strong>&nbsp;incident date and location, human activity, shark species (if known), outcome (fatal \/ non-fatal), type (provoked \/ unprovoked), season, and country.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Note<\/strong><strong>:<\/strong>&nbsp;The dataset contains historical records that may vary in level of detail or accuracy depending on how and where incidents were reported. The goal of this project was clarity and structure, not sensationalism.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Process<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:16px\"><strong>1) Data preparation (MySQL)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-size:15px\">Importing the source file and creating backups.<\/li>\n\n\n\n<li style=\"font-size:15px\">Removing duplicates and empty rows, and standardizing text case and formats.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Parsing dates<\/strong>&nbsp;from different formats (YYYY-MMM-DD, DD-MMM-YY, MMM-YYYY); when the day of the month was missing, a default value of 15 was used.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Standardizing country and state names<\/strong>&nbsp;(ISO codes, aliases) and cleaning inconsistent location names.<\/li>\n\n\n\n<li style=\"font-size:15px\">Creating derived fields such as&nbsp;<strong>IsFatal<\/strong>,&nbsp;<strong>IsProvoked<\/strong>,&nbsp;<strong>ActivityCategory&nbsp;<\/strong>, and&nbsp;<strong>SpeciesCategory<\/strong>.<\/li>\n\n\n\n<li style=\"font-size:15px\">Performing data quality checks to ensure logical ranges and consistent record counts.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:16px\"><strong>2) Visualization (Tableau)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-size:15px\">KPI: total number of incidents,&nbsp;<strong>non-fatal incidents<\/strong>,&nbsp;<strong>unprovoked incidents&nbsp;<\/strong>and the country with&nbsp;<strong>the highest number of cases<\/strong>.<\/li>\n\n\n\n<li style=\"font-size:15px\">Trend chart for 2000\u20132024 (fatal vs non-fatal vs unknown).<\/li>\n\n\n\n<li style=\"font-size:15px\">Share of different activities (e.g., board sports, swimming, fishing).<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Seasonality by month<\/strong>, with filters for country, activity, and incident type.<\/li>\n\n\n\n<li style=\"font-size:15px\">Tooltips including definitions and methodology notes.<\/li>\n\n\n\n<li style=\"font-size:15px\">The color palette and layout are focused on clarity and balance \u2014 without dramatization.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:15px\"><strong>Technologies and tools:<\/strong>&nbsp;MySQL, DBeaver, Tableau, SQL\/ETL, methodology documentation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Results<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-size:15px\"><strong>Most incidents do not result in death.<\/strong><\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Seasonality:<\/strong>&nbsp;more incidents occur in summer and in areas with high levels of water activity.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Activity matters:&nbsp;<\/strong>board sports, swimming, and fishing are the most frequently reported activities.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>The fatality<\/strong><strong>rate did not increase<\/strong>&nbsp;between 2000 and 2024.<\/li>\n\n\n\n<li style=\"font-size:15px\">The interactive dashboard makes it easy to explore trends over time, by activity, and by geography.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reflections<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-size:15px\"><strong>Data quality first:&nbsp;<\/strong>The most time-consuming part was standardizing locations. Many reports contained descriptive place names (beaches, bays, reefs, regions) that Tableau couldn\u2019t automatically recognize. I applied&nbsp;<strong>regex-based rules<\/strong>&nbsp;(spelling normalization, removing abbreviations\/special characters, and standardizing the format) to harmonize country, state, and location names, which allowed the map to display correctly.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Clear definitions prevent misinterpretation:<\/strong>&nbsp;Distinguishing between provoked and unprovoked incidents, as well as fatal and non-fatal cases, is essential for responsible analysis.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>E<\/strong><strong>Ethical visualization:&nbsp;<\/strong>Muted colors, clear labels, and avoiding rankings of the \u201cmost dangerous sharks\u201d ensure the message remains informative rather than alarmist.<\/li>\n\n\n\n<li style=\"font-size:15px\"><strong>Acknowledging limitations:<\/strong>&nbsp;Results depend on how incidents are reported in different regions \u2014 the numbers should always be interpreted in the appropriate context.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:63px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<style>\n  .tableau-auto-wrap{\n    width: 100%;\n    margin: 0 auto;\n  }\n\n  .tableau-auto-frame{\n    position: relative;\n    width: 100%;              \/* docelowo 100% szeroko\u015bci *\/\n    margin: 0 auto;\n    aspect-ratio: 1366\/795;\n    overflow: hidden;\n  }\n\n  .tableau-auto-frame iframe{\n    position: absolute;\n    top: 0; left: 0;\n    border: none !important;\n\n    display: block !important;\n    max-width: none !important;\n\n    transform-origin: 0 0;\n  }\n<\/style>\n\n<div class=\"tableau-auto-wrap\">\n  <div class=\"tableau-auto-frame\" id=\"tableauFrame\">\n    <iframe\n      id=\"tableauIframe\"\n      src=\"https:\/\/public.tableau.com\/views\/Project_17593974410570\/Dashboard?:showVizHome=no&#038;:embed=y&#038;:device=desktop&#038;:toolbar=n&#038;:language=en-US\"\n      loading=\"lazy\"\n      allowfullscreen\n><\/iframe>\n  <\/div>\n<\/div>\n\n<script>\n  (function () {\n    const BASE_W = 1366;\n    const BASE_H = 795;\n\n    const frame = document.getElementById(\"tableauFrame\");\n    const iframe = document.getElementById(\"tableauIframe\");\n\n    function fit() {\n      const w = frame.getBoundingClientRect().width;\n\n      \/\/ skala dopasowana do aktualnej szeroko\u015bci\n      const scale = w \/ BASE_W;\n\n      \/\/ ustawiamy \"bazowy\" rozmiar iframe, a potem skalujemy\n      iframe.style.width  = BASE_W + \"px\";\n      iframe.style.height = BASE_H + \"px\";\n      iframe.style.transform = `scale(${scale})`;\n\n      \/\/ \u017ceby nie by\u0142o pustej przestrzeni \u2013 wysoko\u015b\u0107 kontenera ma by\u0107 przeskalowana\n      frame.style.height = (BASE_H * scale) + \"px\";\n    }\n\n    \/\/ dopasuj na starcie i po zmianie rozmiaru\n    fit();\n    window.addEventListener(\"resize\", fit);\n  })();\n<\/script>","protected":false},"excerpt":{"rendered":"<p>Projekt:&nbsp;Incydenty z rekinami \u2022 2000-2024 Narz\u0119dzia:&nbsp;Tableau, MySQL (ETL), DBeaver Opis:&nbsp;Niezale\u017cna, pro bono analiza oparta na Global Shark Attack File (GSAF) &#8211; od importu i czyszczenia danych (ETL w MySQL) po budow\u0119 interaktywnego dashboardu w Tableau. Cel:&nbsp;Edukacja i kontekst, nie strach &#8211; podkre\u015blenie sezonowo\u015bci, aktywno\u015bci cz\u0142owieka i geografii (z jasnymi definicjami: fatal vs non-fatal oraz unprovoked).Dane:&nbsp;Global&#8230;<\/p>","protected":false},"author":1,"featured_media":132,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,36,13],"tags":[],"class_list":["post-129","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projekty","category-sql","category-tableau"],"_links":{"self":[{"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/posts\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":54,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"predecessor-version":[{"id":2428,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/posts\/129\/revisions\/2428"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/media\/132"}],"wp:attachment":[{"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olgamironczuk.pl\/en\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}