尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python数据分析实战:世界杯冠军国家GDP排名与足球经济关联研究

Python数据分析实战:世界杯冠军国家GDP排名与足球经济关联研究 如果你是一名数据分析师或者只是一个对足球和经济都感兴趣的球迷你可能会好奇那些捧起过大力神杯的足球强国它们的经济发展水平如何世界杯冠军的荣耀与一个国家的经济实力之间是否存在某种隐秘的联系这并非一个简单的“有钱就能踢好球”的问题。从1930年首届世界杯至今冠军国家横跨欧美其经济背景更是天差地别。有些国家在夺冠时正值经济腾飞有些则是在经济困境中创造了奇迹。将历届世界杯冠军与它们夺冠当年的GDP数据放在一起我们能看到的不仅是一份排行榜更是一部融合了体育激情、国家命运与经济周期的独特历史。本文将通过数据为你拆解这份特殊的“冠军GDP榜”。我们将从数据获取、清洗、分析到可视化一步步还原分析过程。更重要的是我们将试图解读数据背后的故事经济实力是否为足球成功提供了“燃料”那些“逆经济周期”夺冠的案例又揭示了足球运动的哪些本质无论你是想学习用Python进行趣味数据分析还是想从新的视角理解世界杯这篇文章都将为你提供一个完整的、可复现的分析框架。1. 这份“冠军GDP榜”真正要回答什么问题当我们谈论“世界杯冠军国家GDP排行榜”时我们首先要避免一个常见的误区这不是在论证“GDP越高足球水平就一定越高”。如果这个结论成立那么世界杯恐怕早已成为G7国家的内部联赛。这个分析真正有价值的切入点在于历史对照在一个特定的历史年份夺冠年这个国家的经济处于什么阶段是战后重建、经济奇迹、石油繁荣还是债务危机这能帮助我们理解足球成就的社会背景。资源投入现代足球的发展从青训体系、联赛运营到国家队保障确实需要相当的资源投入。GDP作为一个宏观指标能在一定程度上反映一个国家可投入于体育包括足球的潜在资源总量。“奇迹”的衡量哪些冠军是在国家经济相对薄弱的情况下取得的这些案例往往更激动人心也更能体现足球超越物质条件的魅力。趋势观察随着时间的推移夺冠国家的经济背景分布是否有变化足球世界的“中心”与经济世界的“中心”是重合还是在分化因此本文不仅会呈现一份静态的排行榜更会带你用数据分析的视角去挖掘每个冠军头衔背后的时代经济注脚。对于开发者或数据分析爱好者来说这也是一个绝佳的练手项目涉及网络数据抓取、多源数据匹配、时间序列处理和可视化叙事。2. 核心概念与数据来源拆解在开始动手之前我们需要明确两个核心概念和数据来源。2.1 关键概念定义夺冠年份以世界杯举办的年份为准。例如巴西在2002年韩日世界杯夺冠则使用2002年的GDP数据与之匹配。这是分析的时间锚点。GDP数据选择国内生产总值GDP有名义GDP和购买力平价PPPGDP之分。为了进行跨国比较尤其是跨越数十年的比较购买力平价GDP通常是更优的选择。因为它考虑了各国物价水平的差异能更好地反映实际的经济规模和人民生活水平。本文的分析将基于购买力平价GDP数据。2.2 数据来源与挑战我们需要融合两类数据世界杯历届冠军数据内容年份、举办国、冠军国家。来源这类结构化数据相对容易获得可以从维基百科、国际足联FIFA官网或各类体育数据网站获取。我们将以编程方式抓取。挑战确保数据完整从1930年至今并处理国家名称的一致性如“西德”需与后续的“德国”数据衔接。历史GDP数据内容各国在历年尤其是各夺冠年份的购买力平价GDP数据。来源世界银行World Bank、国际货币基金组织IMF或宾夕法尼亚大学世界表Penn World Table是权威的数据源。挑战早期如1930-1950年的数据可能存在缺失部分国家在历史上有名称、疆域变更如苏联、捷克斯洛伐克需要谨慎匹配。本分析的核心技术难点就在于将这两份来自不同源头、具有不同时间维度和国家名称标准的数据集准确、合理地关联起来。3. 环境准备与工具栈我们将使用Python作为数据分析的工具因为它拥有丰富且成熟的生态库。请确保你的Python环境在3.8及以上。3.1 创建虚拟环境推荐为了避免包冲突建议使用虚拟环境。# 使用 venv 创建虚拟环境 python -m venv worldcup_gdp_env # 激活虚拟环境 # Windows worldcup_gdp_env\Scripts\activate # Linux/macOS source worldcup_gdp_env/bin/activate3.2 安装必要的Python库我们将主要使用以下几个库pandas: 数据处理与分析的核心。requestsBeautifulSoup4: 用于网页抓取获取冠军列表。matplotlibseaborn: 用于数据可视化。world_bank_data: 一个方便的Python客户端用于获取世界银行数据可选也可直接下载CSV。在激活的虚拟环境中运行以下命令安装pip install pandas requests beautifulsoup4 matplotlib seaborn world_bank_data -i https://pypi.tuna.tsinghua.edu.cn/simple如果world_bank_data安装或使用遇到问题我们可以直接使用世界银行官网下载的CSV文件这反而是更稳定可控的方式。本文将采用这种直接下载的方式。4. 数据获取与清洗核心流程我们的数据分析流程将分为四步抓取冠军列表、获取GDP数据、数据关联清洗、最终分析可视化。4.1 第一步获取历届世界杯冠军列表我们从一个结构清晰的维基百科页面抓取数据。请注意在实际操作中应遵守网站的robots.txt协议并合理设置请求间隔。import requests from bs4 import BeautifulSoup import pandas as pd def fetch_world_cup_champions(): 从维基百科页面抓取历届世界杯冠军信息。 返回一个包含年份、举办国、冠军国家的DataFrame。 url https://en.wikipedia.org/wiki/List_of_FIFA_World_Cup_finals headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } try: response requests.get(url, headersheaders, timeout10) response.raise_for_status() # 检查请求是否成功 except requests.RequestException as e: print(f请求失败: {e}) return None soup BeautifulSoup(response.content, html.parser) # 寻找包含决赛信息的表格。通常第一个wikitable就是。 # 这里需要根据实际网页结构微调选择器。 table soup.find(table, {class: wikitable}) if not table: print(未找到数据表格) return None # 使用pandas直接读取HTML表格它通常能很好地处理 dfs pd.read_html(str(table)) if not dfs: print(未解析出表格数据) return None df_champions dfs[0] # 假设第一个表就是我们需要的 # 清洗列名选取我们关心的列年份、举办国、冠军 # 注意维基百科表格的列名可能变化这里需要根据实际获取的df_champions列名调整 print(原始数据列名:, df_champions.columns.tolist()) # 假设我们需要的列名是 Year, Host nation(s), Champion # 我们进行重命名和筛选 df_champions df_champions[[Year, Host nation(s), Champion]].copy() df_champions.columns [year, host, champion] # 清洗年份数据可能包含非数字字符如1930[3] df_champions[year] df_champions[year].astype(str).str.extract(r(\d{4})).astype(int) # 去除可能存在的空格 df_champions[champion] df_champions[champion].str.strip() # 处理国家名称映射为后续匹配GDP数据做准备 # 例如将West Germany映射为Germany Soviet Union需要特殊处理 country_mapping { West Germany: Germany, East Germany: Germany, # 东德未夺冠但以防万一 Czechoslovakia: Czech Republic, # 捷克斯洛伐克按继承国之一处理需注意 Soviet Union: Russian Federation, # 苏联按俄罗斯继承处理需注意 # 可以根据需要添加更多映射 } df_champions[champion_clean] df_champions[champion].replace(country_mapping) print(冠军数据预览:) print(df_champions.head()) print(f\n共获取到 {len(df_champions)} 届世界杯冠军数据) return df_champions # 执行函数 df_champions fetch_world_cup_champions()关键点与潜在问题网页结构变化维基百科页面结构可能调整table的选择器和列名可能需要更新。运行后请根据打印的列名进行调整。国家名称标准化这是最易出错的一环。网页上的国家名必须与GDP数据集里的国家名完全匹配。我们创建了champion_clean列来进行映射。对于苏联、捷克斯洛伐克等已不存在的国家需要根据分析目的决定如何处理其GDP数据例如使用继承国数据或寻找历史区域加总数据。本文为简化使用主要继承国数据但这会在分析部分作为重要说明。4.2 第二步获取历史GDP数据我们从世界银行官网直接下载购买力平价GDP数据集。这里我们使用pandas的read_csv方法数据文件可以提前下载好。手动下载数据访问世界银行数据网站https://data.worldbank.org/搜索指标GDP, PPP (constant 2017 international $)。这是一个用不变国际元衡量的实际GDP适合长期比较。选择所有国家、所有年份导出为CSV格式。假设文件名为API_NY.GDP.MKTP.PP.KD_DS2_en_csv_v2_*.csv。使用Python加载和预处理def load_world_bank_gdp_data(file_path): 加载世界银行GDP数据CSV文件。 该文件通常前几行是元数据需要跳过。 # 世界银行的CSV通常第4行开始才是表头 df_gdp_raw pd.read_csv(file_path, skiprows4) # 清洗数据将国家名列设置为索引然后转置使得年份成为列国家成为行可能更方便。 # 但更常见的做法是保持“国家-年份-值”的长格式。 # 我们将其从宽格式转换为长格式。 id_vars [Country Name, Country Code, Indicator Name, Indicator Code] value_vars [col for col in df_gdp_raw.columns if col not in id_vars] df_gdp_long df_gdp_raw.melt(id_varsid_vars, value_varsvalue_vars, var_nameyear, value_namegdp_ppp) # 转换年份为整数GDP为数值类型 df_gdp_long[year] df_gdp_long[year].astype(int) df_gdp_long[gdp_ppp] pd.to_numeric(df_gdp_long[gdp_ppp], errorscoerce) # 我们只需要国家名和年份、GDP值 df_gdp df_gdp_long[[Country Name, year, gdp_ppp]].copy() df_gdp.columns [country, year, gdp_ppp] # 重命名 # 过滤掉GDP为空值的行 df_gdp df_gdp.dropna(subset[gdp_ppp]) print(GDP数据预览:) print(df_gdp.head()) print(f\nGDP数据覆盖 {df_gdp[country].nunique()} 个国家时间范围 {df_gdp[year].min()} 到 {df_gdp[year].max()}) return df_gdp # 假设CSV文件在当前目录下 file_path ./API_NY.GDP.MKTP.PP.KD_DS2_en_csv_v2_*.csv df_gdp load_world_bank_gdp_data(file_path)关键点数据缺失世界银行数据可能没有早期如1930、1950年的数据。对于这些缺失我们需要寻找替代数据源如麦迪逊历史统计数据或接受缺失。这将直接影响早期冠军的分析。国家匹配确保df_gdp中的country列名与df_champions中的champion_clean列名一致。可能需要一个更全面的映射字典。4.3 第三步数据关联与清洗这是将足球史与经济史连接起来的关键步骤。def merge_and_clean_data(df_champions, df_gdp): 将冠军数据与GDP数据合并。 # 执行合并根据冠军国家和夺冠年份匹配GDP df_merged pd.merge(df_champions, df_gdp, howleft, # 左连接保留所有冠军记录 left_on[champion_clean, year], right_on[country, year]) # 检查合并结果 print(合并后数据预览:) print(df_merged[[year, champion, champion_clean, gdp_ppp]].head(10)) # 找出GDP数据缺失的冠军记录通常是早期数据 missing_gdp df_merged[df_merged[gdp_ppp].isna()] if not missing_gdp.empty: print(f\n警告有 {len(missing_gdp)} 条冠军记录缺少GDP数据:) print(missing_gdp[[year, champion]].to_string(indexFalse)) # 在实际分析中对于这些缺失我们可以尝试用其他来源补充或进行标注。 # 此处为简化我们将其保留为NaN在后续排序时需处理。 # 计算每届冠军GDP的全球排名在当年所有有数据的国家中 df_merged[gdp_rank] df_merged.groupby(year)[gdp_ppp].rank(ascendingFalse, methodmin) # 由于早期数据缺失排名可能为NaN我们将其填充为一个较大的数如999以示区别 df_merged[gdp_rank] df_merged[gdp_rank].fillna(999).astype(int) # 添加一个“GDP数据是否可用”的标记 df_merged[has_gdp_data] df_merged[gdp_ppp].notna() # 按夺冠年份排序 df_merged df_merged.sort_values(year).reset_index(dropTrue) return df_merged df_final merge_and_clean_data(df_champions, df_gdp)关键操作解释左连接 (howleft)确保所有世界杯冠军记录都被保留即使其GDP数据缺失。GDP排名计算使用groupby(year)和rank()方法计算每个冠军在夺冠当年全球国家中的GDP排名。ascendingFalse表示GDP值越大排名越靠前第1名是当年GDP最高的国家。处理缺失值将缺失GDP的记录的排名标记为999并添加一个布尔列用于标识数据可用性。在后续分析和可视化时我们需要谨慎对待这些数据点。5. 数据分析与可视化数据准备就绪后我们可以开始回答最初的问题了。5.1 生成“冠军GDP排行榜”我们可以从多个维度来生成排行榜def generate_rankings(df): 生成并打印几种不同的排行榜。 # 1. 按夺冠当年绝对GDP值排名仅限有数据的 print( 排行榜1按夺冠当年绝对GDP购买力平价排名 ) df_absolute df[df[has_gdp_data]].sort_values(gdp_ppp, ascendingFalse) print(df_absolute[[year, champion, gdp_ppp, gdp_rank]].to_string(indexFalse)) # 2. 按夺冠当年GDP全球排名排名数字越小表示经济实力越强 print(\n 排行榜2按夺冠当年GDP全球排名排名越靠前经济越强) df_by_rank df[df[has_gdp_data]].sort_values(gdp_rank) print(df_by_rank[[year, champion, gdp_ppp, gdp_rank]].to_string(indexFalse)) # 3. 计算“经济实力与足球成绩”反差最大的案例排名中游的冠军 # 我们可以定义一个“反差指数”例如 (gdp_rank / 当年总参赛国数量) 或直接看排名。 # 这里简单展示GDP排名在20名开外的冠军即夺冠时并非经济顶级强国 print(\n 亮点夺冠时GDP全球排名在20名以外的‘逆袭者’ ) underdogs df[(df[has_gdp_data]) (df[gdp_rank] 20)] print(underdogs[[year, champion, gdp_ppp, gdp_rank]].to_string(indexFalse)) return df_absolute, df_by_rank df_abs_rank, df_gdp_rank generate_rankings(df_final)运行这段代码你就能得到初步的排行榜。结果可能会让你有些意外。5.2 可视化呈现历史趋势与分布图表能让结论更直观。我们使用matplotlib和seaborn来创建几个关键图表。import matplotlib.pyplot as plt import seaborn as sns sns.set_style(whitegrid) # 设置绘图风格 def create_visualizations(df): 创建分析图表。 # 筛选有GDP数据的记录用于绘图 df_plot df[df[has_gdp_data]].copy() if df_plot.empty: print(没有足够的数据进行可视化) return fig, axes plt.subplots(2, 2, figsize(16, 12)) fig.suptitle(FIFA世界杯冠军国家经济背景分析, fontsize16, fontweightbold) # 图1冠军国家夺冠年份GDP全球排名趋势图 ax1 axes[0, 0] # 按年份排序后绘图用点线图连接 df_sorted df_plot.sort_values(year) ax1.plot(df_sorted[year], df_sorted[gdp_rank], markero, linestyle-, linewidth2, markersize8, colorsteelblue) ax1.set_xlabel(夺冠年份) ax1.set_ylabel(GDP全球排名 (数值越小越强)) ax1.set_title(冠军国家GDP排名随时间变化) ax1.invert_yaxis() # 反转Y轴让排名第1在最上方 ax1.grid(True, linestyle--, alpha0.7) # 为每个点添加国家标签 for idx, row in df_sorted.iterrows(): ax1.text(row[year], row[gdp_rank]0.5, row[champion], fontsize9, hacenter) # 图2冠军国家夺冠当年绝对GDP对数刻度 ax2 axes[0, 1] ax2.bar(df_plot[year].astype(str) \n df_plot[champion], df_plot[gdp_ppp], colorlightcoral) ax2.set_xlabel(夺冠年份 冠军国家) ax2.set_ylabel(GDP (购买力平价不变国际元)) ax2.set_title(冠军国家夺冠当年绝对GDP柱状图) ax2.tick_params(axisx, rotation45) ax2.set_yscale(log) # 使用对数刻度因为GDP跨度可能很大 # 在柱子上方添加GDP排名 for idx, (p, rank) in enumerate(zip(ax2.patches, df_plot[gdp_rank])): height p.get_height() ax2.text(p.get_x() p.get_width() / 2., height * 1.01, f#{int(rank)}, hacenter, vabottom, fontsize8) # 图3GDP排名分布直方图 ax3 axes[1, 0] ax3.hist(df_plot[gdp_rank], binsrange(1, int(df_plot[gdp_rank].max())5, 5), edgecolorblack, alpha0.7, colorseagreen) ax3.set_xlabel(GDP全球排名区间) ax3.set_ylabel(冠军数量) ax3.set_title(冠军国家GDP排名分布大多数冠军经济实力如何) ax3.axvline(df_plot[gdp_rank].median(), colorred, linestyle--, linewidth2, labelf中位数排名: {int(df_plot[gdp_rank].median())}) ax3.legend() # 图4按大洲分类的冠军GDP排名箱型图 # 首先需要为国家分配大洲信息这里需要一个简单的映射实际分析应更精确 # 为示例简化我们手动定义几个主要冠军国家的大洲 continent_map { Brazil: South America, Argentina: South America, Uruguay: South America, Germany: Europe, Italy: Europe, France: Europe, England: Europe, Spain: Europe, Netherlands: Europe, # 亚军假设有数据 } df_plot[continent] df_plot[champion].map(continent_map) df_plot_with_continent df_plot.dropna(subset[continent]) ax4 axes[1, 1] # 确保数据顺序便于比较 order [Europe, South America] sns.boxplot(xcontinent, ygdp_rank, datadf_plot_with_continent, orderorder, axax4, paletteSet2) sns.swarmplot(xcontinent, ygdp_rank, datadf_plot_with_continent, orderorder, axax4, color.25, size6) # 叠加散点显示具体数据点 ax4.set_xlabel(大洲) ax4.set_ylabel(GDP全球排名) ax4.set_title(不同大洲冠军国家的GDP排名对比) ax4.invert_yaxis() # 同样反转让排名高的在上方 plt.tight_layout(rect[0, 0.03, 1, 0.95]) # 调整布局给总标题留空间 plt.show() create_visualizations(df_final)这些图表会揭示一些有趣的模式例如趋势图可能显示早期冠军如乌拉圭、意大利的经济排名与后期冠军如德国、法国的差异。分布直方图能直观告诉我们是经济强国夺冠多还是“黑马”逆袭多。大洲对比可能暗示欧洲冠军的整体经济背景强于南美冠军。6. 运行结果与深度解读运行上述代码后你会得到数据表格和图表。基于典型的数据结果我们可以进行如下解读请注意你的实际数据可能略有不同6.1 数据结果示例与观察假设我们得到了以下核心发现此为模拟分析结论绝对GDP榜的顶部美国未夺冠如果出现在任何GDP榜单都会名列前茅但这恰恰说明了经济不是足球的充分条件。在冠军中德国、法国、英国在夺冠年份的绝对GDP通常很高这与其发达的经济和成熟的足球体系相符。“高经济排名”冠军像德国2014、法国2018在夺冠时其GDP全球排名基本都在前10以内。这符合“强国足球”的想象。“逆经济周期”的奇迹乌拉圭1930, 1950作为早期冠军其夺冠时国家规模和经济总量相对较小堪称奇迹。阿根廷1978, 1986尤其是1986年马拉多纳的“上帝之手”之年阿根廷正处于严重的经济危机和债务问题中GDP排名远在20名之外。这是足球超越经济的经典例证。巴西1958, 1962, 1970等巴西多次夺冠时其经济虽在发展但GDP排名并非世界最顶尖可能在10-20名区间。这表明了足球文化、天赋和体系可以弥补经济上的相对差距。6.2 核心结论经济是“燃料”而非“方向盘”通过这份数据分析我们可以提炼出几个清晰的判断经济基础提供“发展燃料”稳定的经济和社会环境确实有利于建设完善的青训中心、职业联赛、体育科学体系和后勤保障。二战后经济复苏的欧洲国家德、意、法以及经济腾飞期的巴西都受益于此。足球成功有自身的“逻辑”天赋选拔体系、深厚的足球文化、正确的战术理念、甚至民族性格这些非经济因素在足球领域权重极高。阿根廷、乌拉圭的例子以及欧洲小国如未来的潜在冠军的崛起都证明了这一点。“中等收入陷阱”的足球镜像一个有趣的现象是一些经济快速崛起但足球体系尚未完全成熟的国家其世界杯成绩与经济排名的提升并不同步。而一些经济陷入停滞但足球底蕴深厚的国家却能长期保持竞争力。这说明足球体系的建设是长期工程无法用金钱快速购买。数据分析的局限性使用国家整体GDP来衡量对足球的投入是粗糙的。人均GDP、体育经费占比、基尼系数反映贫富差距可能影响草根足球参与度或许是更精细的指标。此外国家体制如举国体制与市场体制也起着关键作用。7. 常见问题与排查思路在复现这个分析项目时你可能会遇到以下问题问题现象可能原因排查方式解决方案运行冠军抓取代码报错或返回空数据1. 维基百科页面结构已更新。2. 网络请求被阻止或超时。3.User-Agent不被接受。1. 打印response.status_code和response.text前500字符查看。2. 使用浏览器开发者工具检查目标网页最新的表格结构和类名。1. 更新BeautifulSoup查找表格的选择器如find_all(table)[1]。2. 添加timeout和更复杂的请求头模拟浏览器。3. 考虑使用pandas.read_html(url)直接尝试。GDP数据合并后大量为NaN1. 国家名称不匹配如“West Germany” vs “Germany”。2. 世界银行数据中没有对应年份的数据早期数据缺失。1. 打印df_champions[champion_clean].unique()和df_gdp[country].unique()对比差异。2. 检查缺失记录的具体年份。1. 完善country_mapping字典确保名称统一。2. 对于早期数据缺失可考虑使用其他历史数据库如麦迪逊项目进行补充或在分析中注明该限制。GDP排名计算错误所有排名为1或相同groupby(year)操作不正确或rank()方法参数有误。检查df_merged在分组排名前的数据结构确认每年是否有多个国家的GDP数据。确保df_gdp数据是“国家-年份-值”的长格式并且合并后gdp_ppp列是数值型。使用df_merged.groupby(year)[gdp_ppp].rank(ascendingFalse, methodmin)。可视化图表标签重叠或显示不全年份或国家名称太长图表布局紧凑。调整figsize旋转x轴标签 (rotation)或调整标签字体大小。使用plt.xticks(rotation45)增加figsize或使用plt.tight_layout()。对于点线图标签可以尝试只标注部分关键点。代码运行缓慢世界银行GDP原始CSV文件很大melt操作耗时。观察耗时环节。如果只分析特定年份范围可以在加载GDP数据后先过滤年份df_gdp df_gdp[df_gdp[year].isin(df_champions[year])]。8. 最佳实践与项目扩展建议8.1 工程化建议数据持久化将抓取和清洗后的df_final保存为本地文件如CSV或Parquet避免每次分析都重新抓取和请求网络。df_final.to_csv(world_cup_champions_gdp.csv, indexFalse) # 下次直接加载 # df_final pd.read_csv(world_cup_champions_gdp.csv)错误处理与日志在生产环境中应为网络请求、数据解析添加更完善的try-except块并记录日志便于排查问题。配置化管理将国家名称映射字典、数据源URL、文件路径等配置信息提取到单独的配置文件如config.py或config.yaml中提高代码可维护性。使用函数封装如本文所示将不同功能封装成函数使主流程清晰便于单元测试和复用。8.2 分析扩展方向这个项目可以深入挖掘的方向很多纳入亚军和四强分析经济实力与“进入决赛圈”概率的关系而不仅仅是冠军。使用人均GDP用总人口数据计算人均GDP这可能更能反映一个国家的社会发展水平和足球普及的潜在基础。时间滞后效应分析夺冠年份前10-20年的平均经济增长率或GDP水平。足球人才培养周期长经济影响可能有滞后性。引入其他变量结合世界银行的其他数据如“青少年人口比例”、“政府教育支出”、“基尼系数”等建立更复杂的模型。俱乐部联赛经济关联分析各国顶级联赛的俱乐部投入与国家队成绩的关系。可视化升级使用Plotly或Altair库制作交互式图表可以查看每个数据点的详细信息。通过这个项目你不仅得到了一份独特的世界杯数据洞察更完整地实践了一个数据科学小项目的全流程从构思问题、获取数据、清洗整理、分析建模到可视化呈现。这才是比任何一个单独的排行榜都更有价值的收获。建议你将代码保存下来作为自己的数据分析作品集之一未来可以轻松地套用到其他类似的“体育-经济”或“文化-社会”的跨界分析中去。
返回列表