{"id":17,"date":"2025-09-17T01:56:11","date_gmt":"2025-09-17T01:56:11","guid":{"rendered":"https:\/\/brodykretz.com\/?page_id=17"},"modified":"2025-09-17T01:56:11","modified_gmt":"2025-09-17T01:56:11","slug":"17-2","status":"publish","type":"page","link":"https:\/\/brodykretz.com\/?page_id=17","title":{"rendered":"SpotifyAnalysis"},"content":{"rendered":"\n<div class=\"project-container\" style=\"max-width: 1200px; margin: 0 auto; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\">\n    \n    <!-- Project Header -->\n    <div class=\"project-header\" style=\"text-align: center; margin-bottom: 50px; padding: 40px 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 12px; color: white;\">\n        <h1 style=\"font-size: 2.5em; margin-bottom: 10px; font-weight: 700;\">Spotify Artist Network Visualization<\/h1>\n        <p style=\"font-size: 1.2em; opacity: 0.95; max-width: 600px; margin: 0 auto;\">Mapping musical connections through network analysis and web scraping<\/p>\n    <\/div>\n    \n    <!-- Tech Stack Tags -->\n    <div class=\"tech-stack\" style=\"display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-bottom: 40px;\">\n        <span style=\"background: #ffffff; padding: 8px 16px; border-radius: 20px; font-size: 0.9em; color: #333; font-weight: 600;\">Python<\/span>\n        <span style=\"background: #ffffff; padding: 8px 16px; border-radius: 20px; font-size: 0.9em; color: #333; font-weight: 600;\">NetworkX<\/span>\n        <span style=\"background: #ffffff; padding: 8px 16px; border-radius: 20px; font-size: 0.9em; color: #333; font-weight: 600;\">Selenium<\/span>\n        <span style=\"background: #ffffff; padding: 8px 16px; border-radius: 20px; font-size: 0.9em; color: #333; font-weight: 600;\">Spotify API<\/span>\n        <span style=\"background: #ffffff; padding: 8px 16px; border-radius: 20px; font-size: 0.9em; color: #333; font-weight: 600;\">Data Visualization<\/span>\n    <\/div>\n\n    <!-- MAIN VISUALIZATION IMAGE -->\n    <div style=\"margin-bottom: 50px; text-align: center;\">\n        <h2 style=\"color: #ffffff; margin-bottom: 20px; font-weight: 700; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\">Network Visualization Example<\/h2>\n        <!-- REPLACE THE SRC URL WITH YOUR ACTUAL IMAGE URL -->\n        <img decoding=\"async\" src=\"http:\/\/35.95.110.57\/wp-content\/uploads\/2025\/10\/Screenshot-2025-10-06-at-8.10.22-PM.png\" \n             alt=\"Spotify Artist Network Visualization\" \n             style=\"width: 100%; max-width: 900px; border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.2);\">\n        <p style=\"color: #e0e7ff; margin-top: 15px; font-style: italic; font-size: 1.05em;\">Interactive network showing 200+ artists across 6 generations from Coldplay<\/p>\n    <\/div>\n    \n    <!-- Overview Section -->\n    <div class=\"overview\" style=\"margin-bottom: 50px;\">\n        <h2 style=\"color: #ffffff; border-bottom: 2px solid #667eea; padding-bottom: 10px; margin-bottom: 20px; font-weight: 700; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\">Project Overview<\/h2>\n        <p style=\"line-height: 1.8; color: #e0e7ff; font-size: 1.05em;\">\n            This project creates interactive network visualizations of artist relationships on Spotify, revealing hidden connections and musical communities. Starting from any artist, the system explores outward through &#8220;related artists&#8221; to build a comprehensive map of musical connections spanning multiple generations.\n        <\/p>\n    <\/div>\n    \n    <!-- Key Features Grid -->\n    <div class=\"features-grid\" style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-bottom: 50px;\">\n        \n        <div style=\"background: rgba(15, 23, 42, 0.8); padding: 25px; border-radius: 8px; border-left: 4px solid #667eea; backdrop-filter: blur(10px);\">\n            <h3 style=\"margin-top: 0; color: #ffffff; font-weight: 600;\">Automated Data Collection<\/h3>\n            <p style=\"color: #cbd5e1; line-height: 1.6;\">Web scraping with Selenium to gather artist relationships from Spotify&#8217;s &#8220;Fans also like&#8221; section, building networks of hundreds of interconnected artists.<\/p>\n        <\/div>\n        \n        <div style=\"background: rgba(15, 23, 42, 0.8); padding: 25px; border-radius: 8px; border-left: 4px solid #764ba2; backdrop-filter: blur(10px);\">\n            <h3 style=\"margin-top: 0; color: #ffffff; font-weight: 600;\">Multi-Generation Mapping<\/h3>\n            <p style=\"color: #cbd5e1; line-height: 1.6;\">Explores connections up to 6 degrees of separation, with color-coded generations showing how musical influence spreads through the network.<\/p>\n        <\/div>\n        \n        <div style=\"background: rgba(15, 23, 42, 0.8); padding: 25px; border-radius: 8px; border-left: 4px solid #667eea; backdrop-filter: blur(10px);\">\n            <h3 style=\"margin-top: 0; color: #ffffff; font-weight: 600;\">Community Detection<\/h3>\n            <p style=\"color: #cbd5e1; line-height: 1.6;\">Implements Louvain algorithm to identify genre clusters and musical communities within the broader network structure.<\/p>\n        <\/div>\n        \n        <div style=\"background: rgba(15, 23, 42, 0.8); padding: 25px; border-radius: 8px; border-left: 4px solid #764ba2; backdrop-filter: blur(10px);\">\n            <h3 style=\"margin-top: 0; color: #ffffff; font-weight: 600;\">Dynamic Visualizations<\/h3>\n            <p style=\"color: #cbd5e1; line-height: 1.6;\">Interactive subgraph analysis including ego networks, generation-specific views, and shortest path calculations between artists.<\/p>\n        <\/div>\n    <\/div>\n\n    <!-- VISUALIZATION GALLERY -->\n    <div style=\"margin-bottom: 50px;\">\n        <h2 style=\"color: #ffffff; border-bottom: 2px solid #667eea; padding-bottom: 10px; margin-bottom: 30px; font-weight: 700; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\">Analysis Methods<\/h2>\n        \n        <!-- Gallery Grid -->\n        <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 25px;\">\n            \n            <!-- Image 1: Generation Analysis -->\n            <div style=\"background: rgba(15, 23, 42, 0.8); border-radius: 8px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <!-- REPLACE WITH YOUR IMAGE URL -->\n                <img decoding=\"async\" src=\"http:\/\/35.95.110.57\/wp-content\/uploads\/2025\/10\/Screenshot-2025-10-09-at-7.32.23-PM.png\" \n                     alt=\"Generation Analysis\" \n                     style=\"width: 100%; height: 200px; object-fit: cover;\">\n                <div style=\"padding: 20px;\">\n                    <h3 style=\"color: #ffffff; margin-top: 0; font-weight: 600;\">Generation Subgraphs<\/h3>\n                    <p style=\"color: #cbd5e1; font-size: 0.95em;\">Isolates specific generations to analyze connection density<\/p>\n                <\/div>\n            <\/div>\n            \n            <!-- Image 2: Community Detection -->\n            <div style=\"background: rgba(15, 23, 42, 0.8); border-radius: 8px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <!-- REPLACE WITH YOUR IMAGE URL -->\n                <img decoding=\"async\" src=\"http:\/\/35.95.110.57\/wp-content\/uploads\/2025\/10\/Screenshot-2025-10-09-at-7.32.29-PM.png\" \n                     alt=\"Community Detection\" \n                     style=\"width: 100%; height: 200px; object-fit: cover;\">\n                <div style=\"padding: 20px;\">\n                    <h3 style=\"color: #ffffff; margin-top: 0; font-weight: 600;\">Genre Communities<\/h3>\n                    <p style=\"color: #cbd5e1; font-size: 0.95em;\">Algorithmically detected music genre clusters<\/p>\n                <\/div>\n            <\/div>\n            \n            <!-- Image 3: Ego Network -->\n            <div style=\"background: rgba(15, 23, 42, 0.8); border-radius: 8px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <!-- REPLACE WITH YOUR IMAGE URL -->\n                <img decoding=\"async\" src=\"http:\/\/35.95.110.57\/wp-content\/uploads\/2025\/10\/Screenshot-2025-10-09-at-7.33.34-PM.png\" \n                     alt=\"Ego Network\" \n                     style=\"width: 100%; height: 200px; object-fit: cover;\">\n                <div style=\"padding: 20px;\">\n                    <h3 style=\"color: #ffffff; margin-top: 0; font-weight: 600;\">Artist Ego Networks<\/h3>\n                    <p style=\"color: #cbd5e1; font-size: 0.95em;\">Individual artist&#8217;s direct connection network<\/p>\n                <\/div>\n            <\/div>\n            \n        <\/div>\n    <\/div>\n    \n    <!-- Technical Implementation -->\n    <div class=\"technical\" style=\"margin-bottom: 50px;\">\n        <h2 style=\"color: #ffffff; border-bottom: 2px solid #667eea; padding-bottom: 10px; margin-bottom: 20px; font-weight: 700; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\">Technical Implementation<\/h2>\n        \n        <div style=\"background: rgba(15, 23, 42, 0.8); padding: 30px; border-radius: 8px; margin-bottom: 20px; border: 1px solid rgba(96, 165, 250, 0.2);\">\n            <h3 style=\"margin-top: 0; color: #ffffff; margin-bottom: 20px; font-weight: 600;\">Data Collection Pipeline<\/h3>\n            <ul style=\"line-height: 2; color: #cbd5e1;\">\n                <li>Spotify API integration for initial artist search and metadata<\/li>\n                <li>Selenium WebDriver for scraping related artist connections<\/li>\n                <li>Breadth-first search algorithm to explore network layers<\/li>\n                <li>CSV storage for data persistence and reusability<\/li>\n            <\/ul>\n        <\/div>\n        \n        <div style=\"background: rgba(15, 23, 42, 0.8); padding: 30px; border-radius: 8px; border: 1px solid rgba(96, 165, 250, 0.2);\">\n            <h3 style=\"margin-top: 0; color: #ffffff; margin-bottom: 20px; font-weight: 600;\">Visualization Techniques<\/h3>\n            <ul style=\"line-height: 2; color: #cbd5e1;\">\n                <li><strong style=\"color: #ffffff;\">Node sizing:<\/strong> Proportional to number of connections (degree centrality)<\/li>\n                <li><strong style=\"color: #ffffff;\">Edge weights:<\/strong> Exponentially decreasing by generation distance<\/li>\n                <li><strong style=\"color: #ffffff;\">Color mapping:<\/strong> Distinct colors for each generation level<\/li>\n                <li><strong style=\"color: #ffffff;\">Spring layout:<\/strong> Force-directed graph positioning for natural clustering<\/li>\n            <\/ul>\n        <\/div>\n    <\/div>\n    \n    <!-- Results -->\n    <div class=\"results\" style=\"margin-bottom: 50px;\">\n        <h2 style=\"color: #ffffff; border-bottom: 2px solid #667eea; padding-bottom: 10px; margin-bottom: 20px; font-weight: 700; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);\">Project Outcomes<\/h2>\n        <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; text-align: center;\">\n            <div style=\"background: rgba(15, 23, 42, 0.8); padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <div style=\"font-size: 2.5em; color: #60a5fa; font-weight: bold;\">200+<\/div>\n                <div style=\"color: #cbd5e1; margin-top: 10px;\">Artists Mapped<\/div>\n            <\/div>\n            <div style=\"background: rgba(15, 23, 42, 0.8); padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <div style=\"font-size: 2.5em; color: #a78bfa; font-weight: bold;\">6<\/div>\n                <div style=\"color: #cbd5e1; margin-top: 10px;\">Generations Deep<\/div>\n            <\/div>\n            <div style=\"background: rgba(15, 23, 42, 0.8); padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <div style=\"font-size: 2.5em; color: #60a5fa; font-weight: bold;\">1000+<\/div>\n                <div style=\"color: #cbd5e1; margin-top: 10px;\">Connections Analyzed<\/div>\n            <\/div>\n            <div style=\"background: rgba(15, 23, 42, 0.8); padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.3); border: 1px solid rgba(96, 165, 250, 0.2);\">\n                <div style=\"font-size: 2.5em; color: #a78bfa; font-weight: bold;\">5<\/div>\n                <div style=\"color: #cbd5e1; margin-top: 10px;\">Analysis Methods<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    \n    <!-- Back to Projects Button -->\n    <div style=\"text-align: center; margin-top: 60px; margin-bottom: 40px;\">\n        <a href=\"\/#projects\" style=\"display: inline-block; padding: 15px 30px; background: rgba(96, 165, 250, 0.2); color: #60a5fa; text-decoration: none; border-radius: 8px; font-weight: 600; border: 1px solid rgba(96, 165, 250, 0.3); transition: transform 0.2s;\">\n            \u2190 Back to All Projects\n        <\/a>\n    <\/div>\n    \n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spotify Artist Network Visualization Mapping musical connections through network analysis and web scraping Python NetworkX Selenium Spotify API Data Visualization [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-17","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/brodykretz.com\/index.php?rest_route=\/wp\/v2\/pages\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brodykretz.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/brodykretz.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/brodykretz.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brodykretz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17"}],"version-history":[{"count":0,"href":"https:\/\/brodykretz.com\/index.php?rest_route=\/wp\/v2\/pages\/17\/revisions"}],"wp:attachment":[{"href":"https:\/\/brodykretz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}