Data-Science-For-Beginners 实战课:用 Python 与 Pandas 处理表格、文本与图像数据

发布时间:2026/9/14 14:56:17
Data-Science-For-Beginners 实战课:用 Python 与 Pandas 处理表格、文本与图像数据
Data-Science-For-Beginners 实战课用 Python 与 Pandas 处理表格、文本与图像数据【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本篇技术指南围绕 Data-Science-For-Beginners 项目第 07 课「Working with Data: Python and the Pandas Library」翻译版文档展开系统讲解用 Python 完成数据处理的完整路径从 Pandas 的两大核心结构 Series 与 DataFrame 出发覆盖时间序列、布尔过滤、分组聚合、数据加载与可视化并以 COVID-19 传播建模与医学论文分析两个实战项目收尾。读完本文你将掌握 Pandas 处理表格数据、NumPy 数值计算、Matplotlib 绘图的最小可用知识并能直接运行本仓库提供的三个 Notebook 完成真实数据分析。为什么数据科学家选择 Python 处理数据数据库如本系列第 05 课介绍的关系型数据库擅长用 SQL 高效存储与查询大规模关联数据但当你需要从一张数据表中获得洞察——例如分析数值分布、探究变量相关性、做数据变换并可视化时编写自己的程序往往更灵活。数据科学领域主要有三种语言可选Python通用编程语言因语法简单常被视为入门首选拥有海量第三方库如从 ZIP 解压数据、图片转灰度等除数据科学外也广泛用于 Web 开发R面向统计数据处理设计的传统工具集拥有庞大的 CRAN 扩展库但并非通用语言极少用于数据科学以外的场景Julia专为数据科学设计的新兴语言目标是在保持易用性的同时提供优于 Python 的性能适合科学实验。本课程聚焦 Python。仓库中附带完整的入门 Notebooknotebook.ipynb涵盖本文所有基础示例对于想深入学习的读者仓库的 README 还给出了整个学习路线图。同时本课程的数据全部来自仓库 data 目录下的真实数据集COVID 时序数据、鸟类数据、糖尿病数据 等可脱离网络直接练习。处理表格数据的四大核心库处理表格数据时Python 生态中有两个最常用的库另有两个必须了解的辅助库库作用定位Pandas操作DataFrame类关系型数据表拥有命名列支持对行、列整体做各种操作数据分析主力NumPy操作张量多维数组数组元素类型一致比 DataFrame 更底层、数学运算更丰富、开销更小数值计算引擎Matplotlib数据可视化、绘制图表绘图SciPy额外科学计算函数在概率统计章节已接触过科学计算扩展程序开头通常这样导入与 notebook.ipynb 第 1 个代码单元一致import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import ... # 按需导入具体子模块Series带索引的一维数据序列Series是值的序列类似列表或 NumPy 一维数组核心区别在于它带有索引index。对 Series 做运算如相加时索引会被自动对齐。索引既可以是最简单的整数行号从列表或数组创建 Series 时的默认值也可以是日期区间这类复杂结构。时间序列示例冰淇淋店的每日销量假设要分析一家冰淇淋店的销售生成一段时间内每日售出件数的 Seriesstart_date Jan 1, 2020 end_date Mar 31, 2020 idx pd.date_range(start_date,end_date) print(fLength of index is {len(idx)}) items_sold pd.Series(np.random.randint(25,50,sizelen(idx)),indexidx) items_sold.plot()pd.date_range生成日期索引2020 年为闰年全年共 366 天见 notebook.ipynb 中Length of index is 366的实际输出np.random.randint(25,50,sizelen(idx))生成每天 2549 件的随机销量。绘图结果如下再假设每周日为朋友聚会额外购入 10 件商品可用按周频率freqW索引的另一个 Series 表示additional_items pd.Series(10,indexpd.date_range(start_date,end_date,freqW))索引对齐与 NaN 陷阱把两个 Series 相加求总量时不能直接写total_itemsadditional_items——additional_items只在每周日有值其余日期缺失缺失值相加会产生大量NaNNot a Number。必须显式指定fill_valuetotal_items items_sold.add(additional_items,fill_value0) total_items.plot()从 notebook.ipynb 的运行输出可以看到对比不使用fill_value时2020-01-01 至 01-04 全部是NaN使用后则得到正常的浮点值如2020-01-01 26.0、2020-01-05 54.0。索引对齐是 Pandas 最重要的行为之一本课用真实输出演示了它如何影响运算结果。重采样按不同时间粒度聚合时间序列还可重采样resample到不同的时间间隔。例如按月1M计算平均销量并用柱状图展示monthly total_items.resample(1M).mean() ax monthly.plot(kindbar)kindbar展示了 Series/DataFrame 内置plot方法对图型的支持线图、柱状图等。DataFrame同索引 Series 的集合DataFrame本质上是索引相同的多个 Series 的组合。可以用两个 Series 拼接成横向表格a pd.Series(range(1,10)) b pd.Series([I,like,to,use,Python,and,Pandas,very,much],indexrange(0,9)) df pd.DataFrame([a,b])01234567801234567891IliketousePythonandPandasverymuch更常见的做法是把 Series 作为列并用字典指定列名df pd.DataFrame({ A : a, B : b })AB01I12like.........89much同样的布局也可以通过转置实现pd.DataFrame([a,b]).T.rename(columns{ 0 : A, 1 : B })其中.T交换行列rename重命名列。DataFrame 的六个高频操作1. 列选择。df[A]返回单个 Seriesdf[[B,A]]返回选中的列构成的新 DataFrame。2. 条件过滤。df[df[A]5]只保留列 A 大于 5 的行。其原理是df[A]5先返回一个布尔 Series对每个元素给出 True/False布尔 Series 作为索引使用时返回对应行的子集。因此不能写任意的 Python 布尔表达式例如df[df[A]5 and df[A]7]是错误的应改用布尔 Series 上的运算df[(df[A]5) (df[A]7)] # 括号是必需的3. 创建计算列。直接用表达式赋值即可新建列df[DivA] df[A]-df[A].mean() # A 相对其均值的离差这里实际发生的是先算出右侧 Series再整体赋给左侧新列。所以与 Series 不兼容的运算会出错例如df[ADescr] Low if df[A] 5 else Hi是非法代码而df[LenB] len(df[B])虽然语法正确却把整个 Series 的长度广播给了每一行得到错误结果。4.apply逐元素计算。需要逐元素求复杂表达式时使用apply上面的长度示例应改写为df[LenB] df[B].apply(lambda x : len(x)) # 或者 df[LenB] df[B].apply(len)经过上述操作最终 DataFrame 为ABDivALenB01I-4.0112like-3.0423to-2.0234use-1.0345Python0.0656and1.0367Pandas2.0678very3.0489much4.045. 按行号选取。用iloc构造df.iloc[:5]取前 5 行。6. 分组聚合。groupby常用于得到类似 Excel 透视表的结果。要按LenB分组计算列 A 与 DivA 的均值df.groupby(byLenB)[[A,DivA]].mean()如需同时得到组内元素个数与均值可用更强大的aggregatedf.groupby(byLenB) \ .aggregate({ DivA : len, A : lambda x: x.mean() }) \ .rename(columns{ DivA : Count, A : Mean})LenBCountMean111.000000213.000000325.000000436.333333626.000000数据加载与可视化真实数据通常以文本或 Excel 文件形式存在Pandas 从磁盘加载非常直接df pd.read_csv(file.csv)数据分析师经常需要快速探查数据df.head()打印前几行在 Jupyter Notebook 中会以美观的表格渲染plot方法与kind参数可绘制多种图形复杂图形则直接用 Matplotlib 定制可视化将在本系列第 3 部分深入讲解。实战挑战一COVID-19 传播建模将上述知识用于真实问题用约翰斯·霍普金斯大学 CSSE 提供的确诊感染人数时间序列建模 COVID-19 流行病的传播过程。完整代码在 notebook-covidspread.ipynb建议从头到尾阅读并运行末尾留有挑战题。数据加载与结构探查Notebook 默认从网络读取最新数据也可改用仓库自带的本地副本data/COVID/目录包含三个时序 CSV确诊、死亡、治愈取消注释base_url ../../data/COVID/即可离线运行base_url https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/ # 从网络加载 # base_url ../../data/COVID/ # 从磁盘加载 infected_dataset_url base_url time_series_covid19_confirmed_global.csv recovered_dataset_url base_url time_series_covid19_recovered_global.csv deaths_dataset_url base_url time_series_covid19_deaths_global.csv infected pd.read_csv(infected_dataset_url) infected.head()数据每行是一个国家或国家下的省份每列是一个日期如1/22/20、1/23/20…单元格为当日累计感染数——这正是典型的宽表时间序列。Notebook 随后通过infected[Province/State].value_counts()探查省份列、按国家分组求和把宽表melt成长表并把日期列解析为datetime索引形成每日新增感染数序列。计算有效再生数 Rt为衡量疾病传染性课程引入基本再生数 R₀一名感染者平均再感染的人数R₀ 1 意味着疫情可能扩散。疫情进程中可估计任意时刻 t 的有效再生数 R_t粗略估计方法取 8 天窗口用前 4 天新增感染数之和除以后 4 天之和df[Rt] df[ninfected].rolling(8).apply(lambda x: x[4:].sum()/x[:4].sum()) df[Rt].plot()rolling(8)生成 8 天滑动窗口apply传入的 lambda 把窗口内后 4 天与先 4 天相除。绘制 R_t 曲线时还需处理除零产生的inf如replace(np.inf, np.nan).fillna(methodpad)或只绘制疫情早期区间。这就是 DataFrame 时间序列、滚动窗口与逐窗口apply的实战组合。非结构化数据文本与图像数据并不总是表格形态文本和图像属于弱结构数据。要套用前面的处理技巧关键在于先从非结构化数据中抽取结构化信息例如从文本中抽取关键词并统计词频用神经网络识别图片中的对象从摄像头视频流中识别人的情绪。实战挑战二COVID 医学论文分析仓库的 notebook-papers.ipynb 基于CORD-19 数据集收录 7000 篇 COVID 相关论文的元数据与摘要约半数含全文演示文本数据分析。数据集不随仓库分发需要先自行下载metadata.csv后按 Notebook 提示加载df pd.read_csv(https://datascience4beginners.blob.core.windows.net/cord/metadata.csv.zip,compressionzip) # df pd.read_csv(metadata.csv)分析流程围绕关键词与共现展开利用摘要文本构建药物-诊断共现矩阵观察哪些药物常在同一个摘要中同时出现从而推断潜在治疗方案。Notebook 末尾的挑战包括用热力图可视化共现矩阵作为延伸目标用弦图chord diagram可视化药物共现关系再用正则表达式从take 400mg of chloroquine daily这类句子中抽取剂量构建药物-剂量 DataFrame。这与本仓库作业assignment.md的评分标准一一对应。图像数据的处理思路近年来预训练神经网络与云服务大幅降低了图像理解门槛常见任务包括图像分类把图片归入预定义类别可用 Custom Vision 等服务训练自有分类器物体检测识别图中的多种常见物体人脸识别识别年龄、性别与情绪。这些云服务大多提供 Python SDK可直接嵌入数据探索工作流。仓库 sketchnotes 中也有对应课程的速记图供复习。需要注意图片本身通常先借助计算机视觉抽取成结构化特征再进入 Pandas 做统计分析这与文本数据的处理思路一致。总结与延伸无论是结构化表格还是文本、图像等非结构化数据Python 都能覆盖从处理到理解的全部环节——这也是大多数数据科学家将其作为主力工具的原因。若要继续深入建议通读三个 Notebook基础入门、COVID 传播分析、论文共现分析并逐单元运行完成 作业绘制多国 R_t 对比图、分析死亡/治愈与感染人数的相关性、估算病程时长、计算病死率随时间的变化论文部分构建药物共现矩阵并用热力图/弦图可视化使用仓库 data 目录下的真实数据集如 COVID 时序、鸟类数据自行设计分析问题课后自测仓库 quiz-app 中的相关测验检验理解程度。本课内容与仓库其他章节相互衔接表格数据可进一步与第 05 课关系型数据库对照可视化部分将在第 3 部分系统展开而第 4 部分的数据科学生命周期会带领你完成从数据到故事的完整闭环。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考