在数据科学领域,经常需要处理各种格式的数据。对于初学者来说,通常接触的是CSV、TSV等标准格式的数据集。这些文件因其结构化的特性,可以轻松地被加载到Pandas数据框中进行操作。然而,在现实世界中,需要分析的数据可能存储在任何类型的文档中。例如,在申请实习职位时,任务就是从Word文档中提取数据进行分析。本文将详细介绍如何对Word文档进行ETL(提取、转换、加载)处理,包括Doc和Docx文件格式的区别、Doc文件转换为Docx的方法,以及如何利用这些数据创建交互式图表。
在处理Word文档时,会遇到两种文件扩展名:'.doc'和'.docx'。这两种扩展名都用于Microsoft Word文档,但它们之间存在一些差异。在Word 2007之前,'.doc'扩展名被广泛使用。2007年之后,Microsoft引入了新的'.docx'扩展名,这是一种基于XML的文件格式,它使得文件体积更小、更易于存储,并且减少了文件损坏的风险。此外,'.docx'格式也支持在线工具如Google文档的编辑和管理。
尽管现在大多数文件默认以'.docx'格式创建,但仍有许多旧文件使用'.doc'扩展名。为了从这些旧文件中提取数据,需要将它们转换为'.docx'格式。这一转换过程在不同的操作系统上有所不同。
对于Windows系统,可以使用Python的pywin32模块来实现这一转换。以下是转换代码的示例:
from win32com import client as wc
w = wc.Dispatch('Word.Application')
doc = w.Documents.Open("file_name.doc")
doc.SaveAs("file_name.docx", 16)
这段代码首先导入了win32com模块,然后创建了一个Word应用程序的Dispatch对象,打开指定的文档,并将其保存为'.docx'格式。
对于Linux系统,可以直接使用LibreOffice的内置转换工具:
lowriter --convert-to docx testdoc.doc
这条命令将'.doc'文件转换为'.docx'格式。
Python提供了一个名为'python-docx'的模块,用于读取和操作Docx文件。这个模块已经实现了所有基本功能,可以通过pip安装:
pip install python-docx
Docx文件在抽象层面上由三部分组成:Run、Paragraph和Document对象。在本教程中,将主要处理Paragraph和Document对象。以下是从Docx文件中提取数据的步骤:
- 导入模块
- 创建一个Docx文件文档对象,并传递文件路径
- 创建一个空的数据字典
- 从文档对象创建一个段落对象,该对象可以访问文档的所有段落
- 遍历所有段落,访问文本,并将其保存到数据字典中
- 访问字典的值
import docx
Text = docx.Document('file_name.docx')
data = {}
paragraphs = Text.paragraphs
for i in range(2, len(Text.paragraphs)):
data[i] = tuple(Text.paragraphs[i].text.split('t'))
data_values = list(data.values())
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter(x=doc_data.index,
y=doc_data['Historic Glucose (mg/dL)'].rolling(5).mean(),
mode='lines',
marker=dict(
size=20,
line_width=2,
colorscale='Rainbow',
showscale=True,
),
name = 'Historic Glucose (mg/dL)'
))
fig.update_layout(xaxis_tickangle=-45,
font=dict(size=15),
yaxis={'visible': True},
xaxis_title='Dates',
yaxis_title='Glucose',
template='plotly_dark',
title='Glucose Level Over Time'
)
fig.update_layout(hovermode="x")