我想要获取 CSV 文件、处理数据并生成报告文件,我可以在哪里学习如何执行此操作?

我想要获取 CSV 文件、处理数据并生成报告文件,我可以在哪里学习如何执行此操作?

我可以使用 MATLAB 进行数据处理,使用 TeXstudio 进行报告。我对 MATLAB 的熟悉程度比对 LaTeX 的熟悉程度高出 100 倍。我尝试创建的数据流:

  1. 生成的 CSV 文件包含 50 列数据,其中 1 列为所有内容的时间戳,1 列为用户记录的事件时间戳,因为数据是连续收集的(在收集数据时按下按钮以创建事件时间戳)

  2. MATLAB 查看事件时间戳列,并通过将其与时间戳列进行比较来查找当时的数据,以找到需要处理的数据段。

  3. MATLAB 查找用户请求的数据段的参数(最小值、最大值、中值、上升时间、下降时间等)

  4. MATLAB 将所有这些信息存储在某个文件中,或用这些信息构建一个大表。也可能有根据这些数据段创建的图表 (2)

这就是 LaTeX 的作用所在:

  1. LaTeX 将为这些数据创建报告。使用预先输入的语句,例如在任务 X 期间达到的最大值是 Y,其中 Y 取自 (3) 中为该任务创建的 MATLAB 表。

  2. 每项任务都要重复这一过程。一些数据列可能需要分组,一些图表、表格和图形也可能需要分散在整个最终报告中。

我自己可以搞清楚 MATLAB 的大部分内容,我想学习的是将两者结合起来以及 LaTeX 部分。哪里有最好的参考资料或例子来实现我所建议的内容?

数据看起来应该是这样的(抱歉,我似乎无法弄清楚如何格式化这个表格,但是有无数的行和数据行:

Time        Data Line 1  Data Line 2  Data Line 3  Data Line 4  Data Line 5 

7:49:23 AM  0.43493256   851.4415556  0.032704144  -1.24928     -0.016921   

7:49:24 AM  0.52979029   851.4415556  0.032704144  -1.24928     -0.016921   

答案1

这是一个使用 Python 的示例文档,其中包含代码和输出。

要使用此示例,您需要 Python。蟒蛇是这类事情的一个好选择。您还需要软件包pythontex。它在 TeX Live 中。也可以手动安装;从下载最新版本GitHub,提取,然后运行目录中的 Python 安装程序pythontex

要编译文档,您需要在需要执行 Python 代码时使用三步编译。运行 LaTeX,然后运行pythontex​​,然后再次运行 LaTeX。例如,对于文件analysis.tex,您可以使用

  • pdflatex -interaction=nonstopmode analysis.tex
  • pythontex analysis.tex
  • pdflatex -interaction=nonstopmode analysis.tex

正确安装后pythontex,您应该有一个允许它从命令行运行的包装器/符号链接。

数据文件data.csv

Time,A,B,C,D,E
7:49:23 AM,0.43493256,851.4415556,0.032704144,-1.24928,-0.016921
7:49:24 AM,0.52979029,851.4415556,0.132704144,-3.07928,-0.016921
7:49:25 AM,0.34579029,851.4415556,0.173704144,-2.24258,-0.012351

TeX 来源:

\documentclass{article}

\usepackage{graphicx}
\usepackage{pythontex}

\begin{pycode}
# Import functions etc. that may be needed
from numpy import median, average, mean, std
import collections
from matplotlib import pyplot as plt

# Read in data and parse each column into a list of values
# Put the data in a dictionary, with keys corresponding to column labels
# This assumes simple, well-behaved CSV, with no quoting
with open('data.csv') as f:
    raw_data = f.readlines()
# Add the data file as a dependency to be tracked
# This causes Python code to be re-executed when changes are detected
# Optional, but can be useful
pytex.add_dependencies('data.csv')

# Need a way to convert times into a format that allows easy comparison
# Could also find a library to do this
def time_to_ISO8601_int(t):
    t = t.strip()
    hms, meridian = t.split(' ', 1)
    h, m, s = map(int, hms.split(':'))
    if 'AM' in meridian and h == 12:
        h = 0
    elif 'PM' in meridian and h != 12:
        h += 12
    return h*10000 + m*100 + s

# Store processed data in an ordered dictionary
# Ordered dictionaries store data in order of insertion
# So columns maintain their ordering
data = collections.OrderedDict()
# Create an entry in the data dictionary for each column
# Create an empty list for each column, which will be filled in later
# Python is zero-indexed
header_row = raw_data[0]
for item in header_row.split(','):
    data[item.strip()] = []
# Process data into dictionary
# For very large data sets, a more efficient approach might be beneficial
for line in raw_data[1:]:
    if line:
        vals = list(line.split(','))
        vals[0] = time_to_ISO8601_int(vals[0])
        vals[1:] = map(float, vals[1:])
        for n, data_list in enumerate(data.values()):
            data_list.append(vals[n])
\end{pycode}


\begin{document}

Make a table of max values.

\begin{table}[h!]
\begin{center}
\begin{pycode}
print('\\begin{tabular}{|c|c|}')
print('\\hline')
print('Field & Max \\\\')
print('\\hline')
for key in data:
    if key != 'Time':
        print(key + '&' + str(max(data[key])) + '\\\\')
        print('\\hline')
print('\\end{tabular}')
\end{pycode}
\end{center}
\caption{Maximum values}
\end{table}


Plot some data.

\begin{figure}[h!]
\begin{pycode}
plt.figure(figsize=(4,3))
plt.plot(data['Time'], data['A'], label='A')
plt.plot(data['Time'], data['C'], label='C')
plt.plot(data['Time'], data['E'], label='E')
# Prevent plotting from reformatting tick labels
plt.ticklabel_format(useOffset=False, axis='x')
plt.xticks(data['Time'])
plt.xlabel('Time (ISO 8601)')
plt.legend()
plt.savefig('fig.pdf', bbox_inches='tight')
\end{pycode}
\begin{center}
\includegraphics{fig}
\end{center}
\caption{Figure caption.}
\end{figure}

\end{document}

输出:

在此处输入图片描述

相关内容