Python在财务与会计中的应用-第2章-Python财务数据采集与整_第1页
Python在财务与会计中的应用-第2章-Python财务数据采集与整_第2页
Python在财务与会计中的应用-第2章-Python财务数据采集与整_第3页
Python在财务与会计中的应用-第2章-Python财务数据采集与整_第4页
Python在财务与会计中的应用-第2章-Python财务数据采集与整_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章Python财务数据采集与整理第二章·教学课件《Python在财务与会计中的应用》本章内容2.1财务数据结构与存储基础2.2Python财务数据文件基本操作2.3Python财务数据整理2.4Python财务数据可视化学习目标识别二维表格、时间序列与面板数据读写CSV、Excel、JSON与XML文件完成类型转换、缺失与重复值处理使用筛选、concat、merge与join整合数据用Matplotlib和pyecharts展示财务结果第二章学习主线把原始数据转化为可解释的财务信息选择合适图表,把处理结果转化为可解释的视觉信息。先判断数据结构与存储格式,再选择可靠的读取方式。处理类型、日期、缺失值和重复值,并筛选目标数据。2|整理与合并3|展示与解释1|采集与读写财务数据处理的四个关键判断技术操作必须服从业务含义报表、行情和跨公司数据需要不同结构与格式。结构与格式缺失和重复不能机械处理,应结合字段含义制定规则。清洗规则路径、编码和读取参数错误会引发找不到文件或乱码。路径与编码连接键与连接方式选择错误,会造成遗漏、重复或错配。合并关系01数据结构与存储学习目标区分二维表格、时间序列和面板数据理解CSV、Excel、JSON与XML的特点将数据结构与财务业务场景匹配认识列表、元组、字典、集合使用Series与DataFrame组织财务数据2.1.1三类财务数据结构数据结构决定索引设计、清洗方式和后续分析方法。先判断观察对象和维度,再选择分析工具选择原则时间序列按时间顺序记录指标,适合股价、汇率和月度收入。二维表格行列结构清晰,适合财务报表、台账和交易明细。面板数据同时包含个体与时间维度,适合跨公司、跨年度比较。2.1.1二维表格数据行表示记录,列表示属性▌核心定义:

二维表格是结构化财务数据的基础形式,横向的“行”代表独立的业务记录(如不同会计期间),纵向的“列”代表数据的属性或指标(如收入、成本、利润等)。▌财务案例:简化季度利润表会计期间营业收入(元)营业成本(元)净利润(元)2024Q11,200,000860,000340,0002024Q21,350,000930,000420,0002024Q31,500,0001,020,000480,000▌技术映射:

在Python数据分析库Pandas中,这种二维表格结构被抽象为DataFrame对象,它是处理财务数据清洗、透视与分析的核心载体。2.1.1时间序列数据时间顺序是数据含义的一部分date=pd.to_datetime(["2024-01-01","2024-01-02","2024-01-03"])close=[100,102,105]应用场景:该类型数据广泛应用于金融市场分析,涵盖股票价格走势、外汇汇率波动、市场交易量监控以及宏观经济月度指标(如CPI、GDP增速)等领域,其核心价值在于捕捉数据随时间演变的趋势与周期性规律。2.1.1面板数据同时比较“个体差异”和“时间变化”面板数据(PanelData)是融合了**截面数据(个体维度)**与**时间序列数据(时间维度)**的复合型数据结构,能够同时反映不同个体间的差异以及同一个体随时间的动态变化。▍数据示例:两家公司的年度利润率对比公司名称统计年份销售利润率A公司2023年12.5%A公司2024年13.8%B公司2023年9.6%B公司2024年11.1%核心特征:

每一条有效观测记录由“个体(公司)”和“时间(年份)”两个维度共同唯一确定,既支持横向对比不同公司的经营状况,也支持纵向分析单一公司的发展趋势。如何选择财务数据结构围绕业务问题识别观察维度采用二维表格,列名表达项目,行记录期间或业务明细。报表与台账采用面板数据,同时保留公司代码和会计期间。跨公司比较采用时间序列,保持时间排序并设置日期索引。行情与月度指标先确认主键、时间粒度和字段含义,再清洗。结构检查2.1.2财务数据存储格式格式选择要兼顾结构复杂度、协作方式、文件体积和系统兼容性。四种常见格式选择依据纯文本二维表格,通用、轻量、读写速度快。CSV支持多工作表和格式,便于财务人员交换与审核。Excel适合嵌套对象、接口数据和交易元数据。JSON适合标准化层次结构、跨系统交换与XBRL场景。XMLCSV:轻量、通用的二维数据格式适合批量交换,不保存单元格样式纯文本、兼容性强、体积较小,适合结构化明细。优势使用read_csv()与to_csv()完成DataFrame读写。Python读写缺少固定类型与格式信息,日期和数字可能被误识别。限制关注分隔符、中文编码、列名和字段中的逗号。财务提示Excel:财务协作最常见的文件格式兼顾多表、格式和人工审核支持多工作表、样式、公式和宏,便于业务人员查看。优势使用read_excel()和to_excel(),写入常需openpyxl。Python读写结构较复杂,大批量处理通常慢于CSV。限制明确sheet_name、表头位置及合并单元格。财务提示JSON:适合接口与嵌套信息比二维表格更擅长表达层次结构支持对象、数组和嵌套结构,适合Web接口和元数据。优势使用read_json()与to_json(),注意orient参数。Python读写大型二维数据体积较大,解析成本相对较高。限制先确认记录方向、嵌套层级和字段命名。财务提示XML:面向标准化交换的层次结构适合规则明确、需要校验的业务场景标签可扩展,适合复杂结构、元数据和标准化文档。优势使用read_xml()与to_xml(),复杂场景结合lxml。Python读写文件较冗长,复杂嵌套常需专门解析工具。限制XBRL等财务报告标准常以XML体系表达。财务提示文件格式选择要从使用场景出发不存在适合所有任务的单一格式优先CSV:轻量、通用,便于自动化批处理。批量明细交换优先JSON:结构灵活,适合API和元数据。接口与嵌套数据优先Excel:支持多工作表、样式和人工复核。人工审核与多表优先XML:层次清晰,适合规范与合规文档。标准化跨系统交换2.1.3Python中的数据结构选择数据结构时,要同时考虑顺序、是否允许修改、键值关系和分析维度。从基础容器到pandas对象常见类型列表可变、元组不可变,适合存放有序数据。列表与元组字典表达映射,集合用于去重和集合运算。字典与集合一维带索引数组,适合单列财务指标。Series二维表格对象,是结构化财务分析的核心容器。DataFrame列表、元组、字典与集合四类基础容器各有职责有序且可修改,适合存储连续期间的销售额或股价。列表list用键值对保存指标及数值,便于按指标名称访问。字典dict有序且不可修改,适合固定项目或参数集合。元组tuple元素唯一,适合交易ID去重和集合比较。集合setSeries与DataFrameSeries强调“一列数据+索引”,DataFrame把多列Series组织为二维表格。pandas的两类核心对象结构关系适合收入、成本、价格等单一指标序列。Series适合利润表、交易明细和多字段业务数据。DataFrame索引用于定位观测,可使用日期、公司或交易编号。索引每列可拥有独立类型,便于计算、筛选和转换。列类型2.1.3创建Series与DataFrame让业务字段进入可计算的数据结构revenue=pd.Series([100000,110000,120000],index=["2023","2024","2025"])df=pd.DataFrame({"Revenue":[100000,120000],"Cost":[80000,90000]})小练习|结构与格式匹配1.利润表、日收盘价和跨公司指标分别属于哪类结构?2.接口返回的嵌套交易信息更适合JSON还是CSV?3.需要多工作表并供财务人员审核时,选择哪种格式?4.Series与DataFrame的核心区别是什么?5.交易ID去重可以使用哪类Python数据结构?02财务数据文件基本操作2.2路径管理、读取、写入与资源关闭学习目标使用os和pathlib管理文件路径用open()、with和csv模块读写文本文件使用pandas读取四种常见文件格式将DataFrame导出为CSV、Excel、JSON与XML处理路径、编码、索引和资源关闭问题2.2.1文件路径操作路径是文件读写的第一道检查获取当前工作目录,帮助确认相对路径从哪里开始。os.getcwd()在读取前检查文件是否存在,减少路径错误。os.path.exists()按操作系统规则拼接目录和文件名。os.path.join()以对象方式组合和检查路径,代码更清晰。pathlib.Path2.2.1使用pathlib构造路径避免手工拼接斜杠frompathlibimportPathdata_dir=Path("financial_data")csv_path=data_dir/"2024_sales.csv"print(csv_path)print(csv_path.exists())2.2.2使用with读取CSV上下文管理器会自动关闭文件importcsvwithopen("financial_data.csv",mode="r",encoding="utf-8",newline="")asfile:rows=list(csv.reader(file))pandas统一多种文件读取方式同一套表格操作可衔接不同数据来源,减少手工转换。read_*函数通常返回DataFrame读取入口pd.read_csv(path)CSVpd.read_excel(path,sheet_name=...)Excelpd.read_json(path,orient=...)JSONpd.read_xml(path)XML读取文件前先确认四类参数避免“读进来但读错了”确认绝对或相对路径、文件名和扩展名是否正确。路径确认header、skiprows、sheet_name等结构参数。表头与工作表CSV中文乱码时检查utf-8、utf-8-sig或实际编码。编码金额、编号和日期可能被错误识别,需要读取后检查dtypes。字段类型2.2.3使用csv模块写入文件明确表头和每一行数据importcsvrows=[["Date","Revenue","Cost"],["2024-01",100000,80000]]withopen("output.csv","w",encoding="utf-8",newline="")asf:csv.writer(f).writerows(rows)DataFrame可直接导出四种格式在导出前先确认列名、数据类型、缺失值表示和索引是否需要保留。输出格式与读取入口相互对应写入入口df.to_csv("output.csv",index=False)CSVdf.to_excel("output.xlsx",index=False)Exceldf.to_json("output.json",orient="records")JSONdf.to_xml("output.xml",index=False)XML导出参数决定文件是否可复用不要把默认值当作业务规则通常设置index=False,避免产生无业务含义的索引列。indexJSON需确定records、split或table等结构方向。orientCSV跨系统交换时,明确utf-8或utf-8-sig。encodingExcel指定工作表名称,统一字段顺序与格式。sheet_name2.2.4文件关闭与资源管理让文件在正确时机释放优先使用withopen(),即使发生异常也能自动关闭文件。pandas读写函数会在内部管理文件资源,通常无需手动关闭。直接使用open()后,应调用close()释放文件对象。open+closewith上下文pandas函数财务练习|读取、检查并导出形成可重复的数据交付流程frompathlibimportPathimportpandasaspdsource=Path("financial_data.csv")df=pd.read_csv(source,encoding="utf-8")print(df.head())df.to_excel("financial_checked.xlsx",index=False)03Python财务数据整理学习目标在列表、字典、Series与DataFrame间转换使用astype、to_numeric和to_datetime转换类型按业务规则处理缺失值与重复值使用布尔索引完成单条件和多条件筛选正确选择concat、merge与join合并多源数据2.3.1财务数据结构转换转换前先明确目标结构、字段类型、日期索引和后续计算需求。把原始数据变成适合分析的形式转换任务pd.DataFrame(list,columns=...)列表→DataFramepd.Series(dict)字典→Seriesastype()与pd.to_numeric()类型转换pd.to_datetime()与set_index()日期索引2.3.1列表与字典转换结构转换不应丢失字段含义prices=[100,102,105]price_df=pd.DataFrame(prices,columns=["StockPrice"])first_day={"Date":"2024-01-01","StockPrice":100}first_series=pd.Series(first_day)2.3.1数据类型转换计算前确认金额、编号和分类字段df["StockPrice"]=pd.to_numeric(df["StockPrice"],errors="coerce")df["CompanyCode"]=(df["CompanyCode"].astype("string"))df["RiskLevel"]=(df["RiskLevel"].astype("category"))2.3.1日期解析与索引日期字符串需要先转换才能按时间分析df["Date"]=pd.to_datetime(df["Date"],errors="coerce")df=df.set_index("Date").sort_index()无法解析的日期会变为NaT,应继续检查。2.3.2缺失值处理处理方法取决于字段的财务含义适合缺失很少、随机发生且对整体影响较小的记录。删除行仅当缺失确实代表“没有发生”时才能填0。零填充适合近似稳定的数值字段,但可能压缩波动。均值填充适合连续时间序列,但会把前期状态延续到下一期。前向填充缺失值处理要留下清晰规则先统计缺失比例,再结合字段、期间和数据来源选择处理方法。四种方法对应不同业务假设常用方法删除包含缺失值的记录。dropna()用列均值填充数值缺口。fillna(mean)把缺失解释为业务上的零值。fillna(0)以前一有效值延续时间序列。ffill()2.3.2缺失值处理示例先检测,再执行并验证print(df.isna().sum())clean_drop=df.dropna()clean_mean=df.fillna(df.select_dtypes("number").mean())clean_zero=df.fillna(0)clean_ffill=df.ffill()处理后再次检查缺失数量。2.3.3重复值处理重复记录会放大收入、成本和交易数量同一业务被重复输入,可能造成金额重复累计。录入错误交易编号、公司和期间组合不唯一时容易误判。主键不清多系统同步异常可能重复导入同一批交易。系统同步先明确业务主键,再决定保留第一条、最后一条或合并。判断标准2.3.3检测并删除重复值subset决定“什么算重复”dup=df.duplicated()print(dup.sum())clean_all=df.drop_duplicates()clean_key=df.drop_duplicates(subset=["TransactionID"],keep="last")删除前后应核对记录数与金额合计。2.3.4单条件筛选布尔表达式决定保留哪些记录high_revenue=df[df["Revenue"]>110000]print(high_revenue)条件表达式生成True或False序列;只有True对应的行会被保留。2.3.4多条件筛选每个条件都要用括号包围target=df[(df["Revenue"]>110000)&(df["Cost"]>90000)]#“或”条件使用|筛选后检查记录数、期间和金额范围。2.3.5多个财务文件合并合并方法取决于文件之间是“继续追加记录”还是“补充字段”。先判断拼接方向与匹配键方法选择相同列结构的数据按行追加。concat纵向索引一致时按列拼接指标。concat横向按公司、年份或交易编号匹配。merge默认按索引左连接。joinconcat:沿指定轴拼接数据axis=0追加行,axis=1追加列monthly=pd.concat([jan_df,feb_df,mar_df],axis=0,ignore_index=True)metrics=pd.concat([revenue_df,cost_df],axis=1)列名或索引不一致时会产生缺失值。merge:按业务键匹配字段连接键必须稳定且含义一致merged=revenue_df.merge(cost_df,on=["CompanyCode","Year"],how="inner",validate="one_to_one")匹配前检查键的类型、空值和唯一性。join:按索引横向合并适合索引已经对齐的数据revenue=revenue_df.set_index("Year")cost=cost_df.set_index("Year")joined=revenue.join(cost,how="left",rsuffix="_cost")索引不唯一会导致记录扩张。四种连接方式表达不同保留规则选择连接方式就是选择业务边界只保留左右两表键值都匹配的记录。inner保留右表全部记录,左表未匹配字段填缺失值。right保留左表全部记录,右表未匹配字段填缺失值。left保留双方全部键值,便于发现未匹配记录。outer合并完成不等于合并正确用数量、主键和金额验证结果对比合并前后行数,解释新增、丢失或倍增的原因。行数变化用indicator=True识别只在左表或右表出现的键。未匹配记录检查duplicated(),确认一对一、一对多或多对多关系。键唯一性复核收入、成本等关键字段的合计与异常值。金额复核财务数据整理闭环每一步都要保留可验证证据合并多源文件并核对行数、主键、金额和未匹配记录。检查shape、columns、dtypes、缺失比例与主键唯一性。转换类型,处理缺失与重复,再按业务条件筛选。2|执行清洗3|合并验证1|诊断数据04财务数据可视化2.4Matplotlib静态图表与pyecharts交互图表学习目标根据业务问题选择折线图、柱状图、饼图或K线图使用Matplotlib绘制静态财务图表使用pyecharts生成交互式HTML图表正确准备日期、金额和OHLC数据从趋势、差异、构成和波动角度解释图表图表类型应服务于财务问题先确定比较关系,再选择图形折线图展示收入、成本、价格随时间的变化。趋势饼图展示少量类别的总体占比,避免类别过多。构成柱状图比较期间、部门或公司之间的金额差异。差异K线图展示开盘、最高、最低和收盘价格。波动区间2.4.1Matplotlib财务可视化Matplotlib可精细控制坐标轴、标题、图例、颜色和日期格式。静态图表适合分析、报告和打印绘图流程转换日期并准备OHLC数据。准备数据使用plt.figure()设置画布大小。创建画布用plot、bar、pie或K线函数。绘制图形添加标题、轴标签、图例并设置日期格式。完善表达Matplotlib绘图前的数据准备日期和OHLC顺序必须正确df["Date"]=pd.to_datetime(df["Date"])date_num=df["Date"].map(mdates.date2num)kline_data=list(zip(date_num,df["Open"],df["High"],df["Low"],df["Close"]))折线图:观察收入与成本趋势横轴使用日期,纵轴使用金额plt.figure(figsize=(10,6))plt.plot(df["Date"],df["Revenue"],label="Revenue")plt.plot(df["Date"],df["Cost"],label="Cost")plt.xlabel("Date")plt.ylabel("Amount")plt.legend()plt.show()柱状图与饼图回答不同问题柱状图看差异,饼图看总体构成df.plot.bar(x="Date",y=["Revenue","Cost"])totals=[df["Revenue"].sum(),df["Cost"].sum()]plt.pie(totals,labels=["Revenue","Cost"],autopct="%1.1f%%")K线图:展示价格区间与方向数据顺序为日期、开盘、最高、最低、收盘fig,ax=plt.subplots(figsize=(10,6))candlestick_ohlc(ax,kline_data,width=0.6,colorup="g",colordown="r")ax.xaxis_date()ax.set_xlabel("Date")ax.set_ylabel("Price")2.4.2pyecharts财务可视化pyecharts基于ECharts,可生成带交互提示的HTML图表。交互式图表适合浏览器展示核心流程导入options和所需图表类。导入组件日期、期间或类别通常作为x轴。添加x轴收入、成本或OHLC作为y轴。添加y轴设置标题并导出HTML。设置并导出pyecharts折线图与柱状图相同数据可切换不同图表对象line=(Line().add_xaxis(data["Date"]).add_yaxis("Revenue",data["Revenue"]).add_yaxis("Cost",data["Cost"]).set_global_opts(title_opts=opts.TitleOpts(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论