ARTICLE DETAIL

资讯详情

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

Python数据分析实战:从机场客流周榜看Pandas数据处理全流程

Python数据分析实战:从机场客流周榜看Pandas数据处理全流程 在实际数据分析工作中我们经常需要处理来自不同渠道、格式各异的数据并从中提取有价值的信息。例如一份看似简单的机场客流周榜数据——“浦东190.5万反超广州11座机场集体暴涨暑假出游需求旺盛”背后就涉及数据清洗、指标计算、趋势分析和可视化呈现等一系列完整的数据处理流程。对于数据分析师、数据工程师或任何需要从原始数据中挖掘洞察的开发者而言掌握一套标准化的数据处理方法至关重要。本文将以这份虚构的机场客流周榜数据为例模拟一个从零开始的完整数据分析项目。我们将假设数据来源于一个CSV文件内容包含机场名称、所在城市、周客流万人次、环比增长率等字段。通过这个案例你将学习到如何使用Python的Pandas库进行数据加载、清洗、计算和排序使用Matplotlib/Seaborn进行可视化并最终生成一份结构清晰、结论明确的数据分析报告。整个过程强调可复现性每一步都包含具体的代码、参数解释和常见问题排查。1. 理解数据与分析目标在动手写代码之前必须先明确我们手头有什么数据以及我们希望通过分析得到什么结论。盲目开始编码往往会导致后续频繁返工。1.1 数据字段假设与业务含义根据项目标题“浦东190.5万反超广州11座机场集体暴涨暑假出游需求旺盛”我们可以推断出数据至少包含以下几个维度的信息机场/城市标识数据主体如“浦东机场”、“广州白云机场”。周客流数据核心指标标题中“190.5万”很可能指上海浦东国际机场当周的旅客吞吐量单位为“万人次”。排名与比较“反超”一词暗示存在排名变化因此数据应能支持跨期如本周 vs 上周或跨对象的比较。增长率“集体暴涨”表明多数机场客流有显著增长数据中应包含增长率的计算字段如“环比增长率”。时间与背景“暑假”是重要的时间背景和驱动因素数据应包含周次或日期信息。基于以上推断我们设计一个模拟的CSV数据文件airport_traffic_weekly.csv其结构如下机场名称所在城市上周客流(万人次)本周客流(万人次)周次浦东国际机场上海185.2190.52023-W30广州白云机场广州188.1189.82023-W30北京首都机场北京175.5182.32023-W30深圳宝安机场深圳125.7133.62023-W30...............注意在实际项目中原始数据可能非常混乱字段名不统一、存在缺失值、格式错误如数字被存储为文本等都是常见问题。我们的第一步永远是先理解数据的“理想状态”再处理其“真实状态”。1.2 本次分析的核心目标我们的分析不应止于复现标题结论而应通过数据回答更深入的问题验证与细化结论浦东机场是否真的反超了广州反超的幅度是多少除了浦东还有哪些机场排名发生了显著变化量化“暴涨”程度计算所有机场的周环比增长率找出增长最快的机场并评估整体增长水平。结构分析客流排名前十的机场是哪些它们占据了总客流的多大比例即市场集中度分析。可视化呈现制作直观的图表如客流排名柱状图、增长率排名图、客流前后对比图等让结论一目了然。数据输出将清洗、计算后的数据以及分析结论输出为结构化的文件如新的CSV、Excel或报告供后续使用。明确了目标和数据结构后我们就可以着手准备分析环境了。2. 环境准备与依赖配置一个独立、可复现的Python环境是数据分析项目的基石。推荐使用Conda或venv创建虚拟环境避免包版本冲突。2.1 创建并激活虚拟环境使用Conda假设已安装Miniconda或Anaconda# 创建一个名为 data_analysis 的新环境指定Python版本为3.9 conda create -n data_analysis python3.9 -y # 激活该环境 conda activate data_analysis使用Python venv# 在项目目录下创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate2.2 安装核心依赖库在激活的虚拟环境中使用pip安装以下库。我们将使用pandas进行数据处理numpy进行数值计算matplotlib和seaborn进行可视化jupyter用于交互式探索可选。pip install pandas numpy matplotlib seaborn jupyter安装完成后可以通过以下命令验证主要库的版本python -c import pandas as pd; print(fPandas version: {pd.__version__}) python -c import matplotlib; print(fMatplotlib version: {matplotlib.__version__})2.3 准备项目目录与数据文件建议建立清晰的项目目录结构airport_traffic_analysis/ ├── data/ │ ├── raw/ # 存放原始数据 │ │ └── airport_traffic_weekly.csv │ └── processed/ # 存放处理后的数据 ├── notebooks/ # Jupyter Notebook文件用于探索 ├── scripts/ # Python脚本文件 │ └── analysis_pipeline.py ├── output/ # 存放生成的图表和报告 │ ├── figures/ │ └── reports/ └── requirements.txt # 项目依赖列表将模拟数据保存到data/raw/airport_traffic_weekly.csv。你可以用文本编辑器或Excel创建内容示例如下机场名称,所在城市,上周客流(万人次),本周客流(万人次),周次 浦东国际机场,上海,185.2,190.5,2023-W30 广州白云机场,广州,188.1,189.8,2023-W30 北京首都机场,北京,175.5,182.3,2023-W30 深圳宝安机场,深圳,125.7,133.6,2023-W30 成都天府机场,成都,105.3,118.9,2023-W30 重庆江北机场,重庆,98.7,112.4,2023-W30 杭州萧山机场,杭州,87.6,99.1,2023-W30 西安咸阳机场,西安,85.2,96.8,2023-W30 昆明长水机场,昆明,78.9,90.5,2023-W30 武汉天河机场,武汉,72.4,85.2,2023-W30 南京禄口机场,南京,68.1,80.7,2023-W30 青岛胶东机场,青岛,65.3,78.9,2023-W30环境与数据就绪后我们开始核心的数据处理流程。3. 数据加载、清洗与核心指标计算我们将在一个Python脚本scripts/analysis_pipeline.py中完成主要工作。首先进行数据加载与初步检查。3.1 加载数据并查看概览import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import os # 设置中文字体和图表样式解决中文显示问题 plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 sns.set_style(whitegrid) # 1. 加载数据 data_path os.path.join(data, raw, airport_traffic_weekly.csv) df pd.read_csv(data_path) print(数据形状行数列数:, df.shape) print(\n数据前5行) print(df.head()) print(\n数据基本信息) print(df.info()) print(\n数值型字段描述性统计) print(df.describe())运行后你应看到类似以下输出数据形状行数列数: (12, 5) 数据前5行 机场名称 所在城市 上周客流(万人次) 本周客流(万人次) 周次 0 浦东国际机场 上海 185.2 190.5 2023-W30 1 广州白云机场 广州 188.1 189.8 2023-W30 2 北京首都机场 北京 175.5 182.3 2023-W30 3 深圳宝安机场 深圳 125.7 133.6 2023-W30 4 成都天府机场 成都 105.3 118.9 2023-W30 数据基本信息 class pandas.core.frame.DataFrame RangeIndex: 12 entries, 0 to 11 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 机场名称 12 non-null object 1 所在城市 12 non-null object 2 上周客流(万人次) 12 non-null float64 3 本周客流(万人次) 12 non-null float64 4 周次 12 non-null object dtypes: float64(2), object(3) memory usage: 608.0 bytes Nonedf.info()显示没有缺失值且客流数据已是数值类型float64这很理想。但实际数据往往需要清洗。3.2 数据清洗与预处理即使数据看起来干净也应执行标准清洗步骤# 2. 数据清洗 # 检查缺失值 print(缺失值统计) print(df.isnull().sum()) # 检查重复行 print(f\n重复行数量{df.duplicated().sum()}) # 处理可能的字符串空格 df[机场名称] df[机场名称].str.strip() df[所在城市] df[所在城市].str.strip() df[周次] df[周次].str.strip() # 确保数值列类型正确本例中已是float但实践中常需转换 # df[本周客流(万人次)] pd.to_numeric(df[本周客流(万人次)], errorscoerce) # 重命名列方便后续代码编写英文列名更通用 df df.rename(columns{ 机场名称: airport, 所在城市: city, 上周客流(万人次): traffic_last_week, 本周客流(万人次): traffic_current_week, 周次: week }) print(\n清洗后数据列名, df.columns.tolist())3.3 计算核心衍生指标现在计算标题中提到的关键指标周环比增长率和本周排名。# 3. 计算核心指标 # 计算周环比增长率 ((本周-上周)/上周 * 100%)保留两位小数 df[week_over_week_growth_rate] round( (df[traffic_current_week] - df[traffic_last_week]) / df[traffic_last_week] * 100, 2 ) # 计算本周客流排名降序客流越大排名越靠前即数字越小 df[rank_current_week] df[traffic_current_week].rank(ascendingFalse, methodmin).astype(int) # 计算上周客流排名用于对比排名变化 df[rank_last_week] df[traffic_last_week].rank(ascendingFalse, methodmin).astype(int) # 计算排名变化正数表示排名上升/数字变小负数表示排名下降/数字变大 df[rank_change] df[rank_last_week] - df[rank_current_week] print(\n计算衍生指标后的数据) print(df[[airport, traffic_current_week, rank_current_week, rank_last_week, rank_change, week_over_week_growth_rate]])输出将显示每个机场的本周客流、排名、排名变化及增长率。至此我们已经得到了可用于分析的核心数据框。4. 数据分析与结论验证有了干净的数据和核心指标我们可以开始回答最初提出的业务问题。4.1 验证“浦东反超广州”# 4.1 验证“浦东反超广州” # 找出浦东和广州的数据 airports_of_interest [浦东国际机场, 广州白云机场] mask df[airport].isin(airports_of_interest) comparison_df df.loc[mask, [airport, traffic_last_week, traffic_current_week, rank_last_week, rank_current_week]].copy() comparison_df comparison_df.sort_values(traffic_current_week, ascendingFalse) print( 浦东 vs 广州 详细对比 ) print(comparison_df.to_string(indexFalse)) # 逻辑判断 pudong df[df[airport] 浦东国际机场].iloc[0] guangzhou df[df[airport] 广州白云机场].iloc[0] if pudong[traffic_current_week] guangzhou[traffic_current_week]: print(f\n结论浦东机场本周客流 {pudong[traffic_current_week]} 万人次 f高于广州机场的 {guangzhou[traffic_current_week]} 万人次实现反超。) print(f反超幅度{pudong[traffic_current_week] - guangzhou[traffic_current_week]:.1f} 万人次。) else: print(\n结论浦东机场本周客流未超过广州机场。)4.2 分析“11座机场集体暴涨”“暴涨”是一个定性描述我们需要定量定义。例如可以将增长率超过平均增长率或某个阈值如5%视为“暴涨”。# 4.2 分析“集体暴涨” # 计算整体平均增长率 avg_growth df[week_over_week_growth_rate].mean() median_growth df[week_over_week_growth_rate].median() print(f\n所有机场平均周环比增长率{avg_growth:.2f}%) print(f所有机场周环比增长率中位数{median_growth:.2f}%) # 定义“暴涨”阈值例如增长率 5% surge_threshold 5.0 surge_airports df[df[week_over_week_growth_rate] surge_threshold] print(f\n增长率超过 {surge_threshold}% 的机场共 {len(surge_airports)} 个) print(surge_airports[[airport, week_over_week_growth_rate]].sort_values(week_over_week_growth_rate, ascendingFalse).to_string(indexFalse)) # 检查是否绝大多数机场都在增长 positive_growth df[df[week_over_week_growth_rate] 0] growth_ratio len(positive_growth) / len(df) * 100 print(f\n客流正增长的机场占比{growth_ratio:.1f}% ({len(positive_growth)}/{len(df)}))4.3 客流排名与市场集中度分析# 4.3 客流排名与集中度分析 # 按本周客流降序排列 df_sorted df.sort_values(traffic_current_week, ascendingFalse).reset_index(dropTrue) print( 本周机场客流排名 TOP 10 ) print(df_sorted[[rank_current_week, airport, city, traffic_current_week, week_over_week_growth_rate]].head(10).to_string(indexFalse)) # 计算TOP N机场的客流集中度 top_n 5 total_traffic df[traffic_current_week].sum() top_n_traffic df_sorted.head(top_n)[traffic_current_week].sum() concentration_ratio top_n_traffic / total_traffic * 100 print(f\n前 {top_n} 大机场客流合计{top_n_traffic:.1f} 万人次占总客流 {concentration_ratio:.1f}%。) # 找出排名变化最大的机场进步或退步 df[abs_rank_change] df[rank_change].abs() biggest_movers df.sort_values(abs_rank_change, ascendingFalse).head(3) print(\n 排名变动最大的机场 ) print(biggest_movers[[airport, rank_last_week, rank_current_week, rank_change]].to_string(indexFalse))通过以上代码我们已经从数据中验证了标题中的核心结论并得到了更丰富的量化信息。接下来我们需要用图表将这些发现直观地呈现出来。5. 数据可视化呈现图表能让分析结论更具冲击力。我们将创建三个核心图表客流排名柱状图、增长率横向条形图、排名变化热力图。5.1 本周客流TOP 10柱状图# 5.1 本周客流TOP 10柱状图 top10_df df_sorted.head(10).copy() # 为了图表美观按客流升序排列使得柱状图从上到下递减 top10_df top10_df.sort_values(traffic_current_week, ascendingTrue) plt.figure(figsize(10, 6)) bars plt.barh(top10_df[airport], top10_df[traffic_current_week], colorsns.color_palette(Blues_r, len(top10_df))) plt.xlabel(本周客流 (万人次), fontsize12) plt.title(本周机场客流TOP 10, fontsize14, fontweightbold) plt.grid(axisx, linestyle--, alpha0.7) # 在柱子上添加数值标签 for bar in bars: width bar.get_width() plt.text(width 0.5, bar.get_y() bar.get_height()/2, f{width:.1f}, vacenter, fontsize10) # 高亮浦东和广州 highlight_airports [浦东国际机场, 广州白云机场] for i, airport in enumerate(top10_df[airport]): if airport in highlight_airports: bars[i].set_color(orange) plt.tight_layout() # 保存图表 output_fig_path os.path.join(output, figures, top10_traffic.png) os.makedirs(os.path.dirname(output_fig_path), exist_okTrue) plt.savefig(output_fig_path, dpi300, bbox_inchestight) plt.show()5.2 周环比增长率横向条形图# 5.2 周环比增长率横向条形图所有机场 df_for_growth df.sort_values(week_over_week_growth_rate, ascendingTrue) plt.figure(figsize(10, 8)) colors [green if x 0 else red for x in df_for_growth[week_over_week_growth_rate]] bars plt.barh(df_for_growth[airport], df_for_growth[week_over_week_growth_rate], colorcolors) plt.axvline(x0, colorblack, linewidth0.8, linestyle-) plt.axvline(xavg_growth, colorblue, linewidth1.5, linestyle--, alpha0.7, labelf平均增长率 ({avg_growth:.1f}%)) plt.xlabel(周环比增长率 (%), fontsize12) plt.title(各机场周环比增长率, fontsize14, fontweightbold) plt.legend() plt.grid(axisx, linestyle--, alpha0.7) # 添加数据标签 for bar in bars: width bar.get_width() ha left if width 0 else right offset 0.3 if width 0 else -0.3 plt.text(width offset, bar.get_y() bar.get_height()/2, f{width:.1f}%, vacenter, fontsize9) plt.tight_layout() output_fig_path os.path.join(output, figures, growth_rate_all.png) plt.savefig(output_fig_path, dpi300, bbox_inchestight) plt.show()5.3 排名变化热力图可选热力可以直观展示排名升降。# 5.3 排名变化热力图 # 创建一个数据透视表样式的视图 pivot_df df[[airport, rank_last_week, rank_current_week]].copy() pivot_df pivot_df.sort_values(rank_current_week) plt.figure(figsize(8, 10)) # 使用散点图或文本表示排名这里用简单的文本热图 for i, row in pivot_df.iterrows(): # 排名上升数字变小用绿色下降用红色不变用灰色 if row[rank_change] 0: color lightgreen symbol ▲ elif row[rank_change] 0: color lightcoral symbol ▼ else: color lightgray symbol ● plt.text(0.2, i, row[airport], vacenter, fontsize11) plt.text(0.5, i, f{int(row[rank_last_week])}, vacenter, hacenter, fontsize11, bboxdict(boxstyleround,pad0.3, facecolorwheat, alpha0.7)) plt.text(0.7, i, f{int(row[rank_current_week])}, vacenter, hacenter, fontsize11, bboxdict(boxstyleround,pad0.3, facecolorcolor, alpha0.7)) plt.text(0.85, i, f{symbol} {abs(int(row[rank_change]))}, vacenter, fontsize11, colordarkred if row[rank_change]0 else darkgreen) plt.xlim(0, 1) plt.ylim(-1, len(pivot_df)) plt.axis(off) plt.title(机场客流排名变化热图\n左上周排名 | 中本周排名 | 右变化, fontsize13, fontweightbold, locleft) plt.tight_layout() output_fig_path os.path.join(output, figures, rank_change_heatmap.png) plt.savefig(output_fig_path, dpi300, bbox_inchestight) plt.show()可视化完成后分析的核心结果已经产生。我们需要将处理后的数据和结论保存下来。6. 结果输出与报告生成数据分析的最终产出应该是结构化的数据和简要的文字结论。6.1 保存清洗并计算后的数据# 6.1 保存处理后的数据 processed_data_path os.path.join(data, processed, airport_traffic_processed.csv) os.makedirs(os.path.dirname(processed_data_path), exist_okTrue) # 选择需要保存的列 output_columns [week, airport, city, traffic_last_week, traffic_current_week, week_over_week_growth_rate, rank_last_week, rank_current_week, rank_change] df[output_columns].to_csv(processed_data_path, indexFalse, encodingutf-8-sig) # utf-8-sig 确保Excel打开不乱码 print(f处理后的数据已保存至{processed_data_path})6.2 生成简易文本分析报告# 6.2 生成文本分析报告 report_path os.path.join(output, reports, weekly_analysis_report.txt) os.makedirs(os.path.dirname(report_path), exist_okTrue) with open(report_path, w, encodingutf-8) as f: f.write(*60 \n) f.write(机场周度客流数据分析报告\n) f.write(f分析周次{df[week].iloc[0]}\n) f.write(*60 \n\n) f.write(一、核心结论验证\n) f.write(f1. 浦东机场反超广州机场{是 if pudong[traffic_current_week] guangzhou[traffic_current_week] else 否}\n) if pudong[traffic_current_week] guangzhou[traffic_current_week]: f.write(f 反超幅度{pudong[traffic_current_week] - guangzhou[traffic_current_week]:.1f} 万人次。\n) f.write(f2. 客流正增长机场占比{growth_ratio:.1f}% ({len(positive_growth)}/{len(df)})\n) f.write(f3. 增长率超过{surge_threshold}%的机场数量{len(surge_airports)}个\n\n) f.write(二、关键指标摘要\n) f.write(f1. 总体平均周环比增长率{avg_growth:.2f}%\n) f.write(f2. 前{top_n}大机场客流集中度{concentration_ratio:.1f}%\n) f.write(f3. 本周总客流{total_traffic:.1f} 万人次\n\n) f.write(三、本周客流TOP 5\n) for _, row in df_sorted.head().iterrows(): f.write(f 第{int(row[rank_current_week])}名{row[airport]} ({row[city]}) - {row[traffic_current_week]:.1f} 万人次 f增长率 {row[week_over_week_growth_rate]:.1f}%\n) f.write(\n四、增长率TOP 3与最低3\n) growth_top3 df.nlargest(3, week_over_week_growth_rate) growth_bottom3 df.nsmallest(3, week_over_week_growth_rate) f.write( 增长率最高\n) for _, row in growth_top3.iterrows(): f.write(f {row[airport]}: {row[week_over_week_growth_rate]:.1f}%\n) f.write( 增长率最低\n) for _, row in growth_bottom3.iterrows(): f.write(f {row[airport]}: {row[week_over_week_growth_rate]:.1f}%\n) f.write(\n五、排名变动显著机场\n) for _, row in biggest_movers.iterrows(): direction 上升 if row[rank_change] 0 else 下降 f.write(f {row[airport]}: 从第{int(row[rank_last_week])}名 - 第{int(row[rank_current_week])}名 ({direction}{abs(int(row[rank_change]))}位)\n) f.write(\n *60 \n) f.write(报告生成完毕。详细数据见 processed 目录图表见 figures 目录。\n) print(f分析报告已生成至{report_path})运行完整的脚本后你将在output/目录下得到图表在data/processed/目录下得到清洗后的数据在output/reports/目录下得到文本报告。一个完整、可复现的数据分析流程就完成了。7. 常见问题与排查路径在实际运行上述代码时你可能会遇到一些典型问题。以下是排查指南。7.1 数据加载失败问题现象可能原因检查方式处理建议FileNotFoundError文件路径错误print(os.path.abspath(data_path))检查绝对路径使用绝对路径或确保相对路径正确。在脚本开头添加import os; print(os.getcwd())查看当前工作目录。UnicodeDecodeError文件编码非UTF-8用文本编辑器打开CSV另存为UTF-8编码pd.read_csv(data_path, encodinggbk)或encodingutf-8-sig尝试不同编码。数据全部为NaN或类型错误分隔符不对或首行作为数据用文本编辑器查看文件前几行指定分隔符pd.read_csv(data_path, sep,)。检查是否有表头header0。7.2 中文显示为方框乱码问题图表中的中文标签显示为方框。原因系统或Matplotlib缺少中文字体。解决本文代码中已使用plt.rcParams[font.sans-serif]指定了通用中文字体。如果无效需要确认系统是否有这些字体。更稳妥的方法是下载中文字体如SimHei.ttf并将其路径添加到Matplotlib字体库。import matplotlib zh_font matplotlib.font_manager.FontProperties(fnamepath/to/your/SimHei.ttf) plt.xlabel(x轴标签, fontpropertieszh_font)7.3 数值计算错误如增长率无穷大问题计算增长率时得到inf无穷大或NaN。原因除数为零上周客流为0或数据缺失。解决在计算前处理零或缺失值。# 方法1将上周客流为0的替换为一个极小值或直接标记为NaN df[traffic_last_week] df[traffic_last_week].replace(0, np.nan) # 方法2使用条件判断计算 def safe_growth(current, last): if pd.isna(last) or last 0: return np.nan return (current - last) / last * 100 df[growth_rate] df.apply(lambda row: safe_growth(row[traffic_current_week], row[traffic_last_week]), axis1)7.4 图表保存失败或空白问题plt.savefig成功但图片是空白。原因在plt.show()之后调用savefigshow()会创建一个新的空白图形。解决始终先savefig()再show()。或者使用plt.figure()明确创建图形对象并在其上操作。8. 生产环境最佳实践与扩展方向上述流程适用于一次性的分析脚本。若要将此流程产品化或用于定期报告需要考虑更多因素。8.1 脚本健壮性提升参数化配置将文件路径、暴涨阈值(surge_threshold)、TOP N数量等硬编码值提取为脚本顶部的配置变量或通过命令行参数传入。import argparse parser argparse.ArgumentParser() parser.add_argument(--input, defaultdata/raw/airport_traffic_weekly.csv) parser.add_argument(--surge_threshold, typefloat, default5.0) args parser.parse_args()异常处理与日志使用try...except包裹文件读写、数据计算等可能出错的部分并使用logging模块记录运行状态和错误信息而不是仅用print。数据验证在加载数据后增加断言或检查确保关键字段存在、数据类型正确、数值在合理范围内如客流不为负数。assert traffic_current_week in df.columns, “数据中缺少‘本周客流’列” assert df[traffic_current_week].min() 0, “发现负的客流数据请检查数据源”8.2 自动化与调度定期运行使用操作系统级的任务调度器如Linux的cronWindows的Task Scheduler或工作流调度框架如Apache Airflow来定期如每周一运行此分析脚本。邮件或消息通知在脚本末尾集成邮件smtplib或企业微信/钉钉机器人API将核心结论如“浦东反超广州”或报告链接自动发送给相关人员。8.3 分析维度扩展当前分析仅限于周度环比。在实际业务中还可以加入同比数据计算相较于去年同期的增长率区分季节性因素和真实增长。多周趋势分析分析多个连续周次的数据绘制客流时间序列图观察长期趋势。机场属性关联如果有关联数据可以分析机场所在城市的经济指标、旅游政策、航线数量等与客流增长的关系。预测模型基于历史数据使用时间序列模型如Prophet、ARIMA预测未来几周的客流。8.4 输出格式升级HTML报告使用Jinja2模板引擎将分析结果和图表嵌入HTML生成更美观的网页报告。Excel仪表盘利用pandas.ExcelWriter结合openpyxl或xlsxwriter将多个数据表和图表写入一个Excel文件的不同工作表制作简单的交互式仪表盘。集成到BI工具将处理后的数据表 (airport_traffic_processed.csv) 导入到Tableau、Power BI等商业智能工具中创建可交互的、更复杂的可视化看板。通过遵循从数据理解、环境准备、清洗计算、分析验证到可视化输出的完整流程并关注生产环境的健壮性和可扩展性你就能将任何类似“机场客流周榜”的零散数据需求转化为一个标准、可靠且可复现的数据分析项目。这个项目的核心价值不在于单个脚本而在于建立了一套应对数据问题的标准方法和质量意识。
返回列表