python屏幕找图算法_科学计算:Python 分析数据找问题,并图形化

本文介绍了使用Python的numpy, matplotlib, pandas, scipy包进行数据分析和图形化的步骤。通过加载CSV数据,计算数据平均值、标准差,使用matplotlib绘制数据图,以及scipy进行数据插值,展示了Python在科学计算中的应用。" 115941103,10468807,Ubuntu安装中文man pages指南,"['Linux', 'Ubuntu', '命令行工具', '文档']
摘要由CSDN通过智能技术生成

对于记录的数据,如何用 Python 进行分析、或图形化呢?

本文将介绍 numpy, matplotlib, pandas, scipy 几个包,进行数据分析、与图形化。

准备环境

Python 环境建议用 Anaconda 发行版,下载地址:

Anaconda 是一个用于科学计算的 Python 发行版,已经包含了众多流行的科学计算、数据分析的 Python 包。

可以 conda list 列出已有的包,会发现本文要介绍的几个包都有了:

$ conda list | grep numpy

numpy 1.17.2 py37h99e6662_0

$ conda list | grep "matplot\|seaborn\|plotly"

matplotlib 3.1.1 py37h54f8f79_0

seaborn 0.9.0 py37_0

$ conda list | grep "pandas\|scipy"

pandas 0.25.1 py37h0a44026_0

scipy 1.3.1 py37h1410ff5_0

如果已有 Python 环境,那么 pip 安装一下它们:

pip install numpy matplotlib pandas scipy

# pypi 镜像: https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

本文环境为: Python 3.7.4 (Anaconda3-2019.10)

准备数据

本文假设了如下格式的数据 data0.txt :

id, data, timestamp

0, 55, 1592207702.688805

1, 41, 1592207702.783134

2, 57, 1592207702.883619

3, 59, 1592207702.980597

4, 58, 1592207703.08313

5, 41, 1592207703.183011

6, 52, 1592207703.281802

...

CSV 格式:逗号分隔,读写简单, Excel 可打开。

之后,我们会一起达成如下几个目标:CSV 数据, numpy 读取与计算

data 列数据, matplotlib 图形化

data 列数据, scipy 插值,形成曲线

timestamp 列数据, pandas 分析前后差值、每秒个数

numpy 读取数据

numpy 可用 loadtxt 直接读取 CSV 数据,

import numpy as np

# id, (data), timestamp

datas = np.loadtxt(p, dtype=np.int32, delimiter=",", skiprows=1, usecols=(1))dtype=np.int32: 数据类型 np.int32

delimiter=",": 分隔符 ","

skiprows=1: 跳过第 1 行

usecols=(1): 读取第 1 列

如果读取多列,

# id, (data, timestamp)

dtype = {'names': ('data', 'timestamp'), 'formats': ('i4', 'f8')}

datas = np.loadtxt(path, dtype=dtype, delimiter=",", skiprows=1, usecols=(1, 2))

numpy 分析数据

numpy 计算均值、样本标准差:

# average

data_avg = np.mean(datas)

# data_avg = np.average(datas)

# standard deviation

# data_std = np.std(datas)

# sample standard deviation

data_std = np.std(datas, ddof=1)

print(" avg: {:.2f}, std: {:.2f}, sum: {}".format(

data_avg, data_std, np.sum(datas)))

matplotlib 图形化

只需四行,就能图形化显示了:

import sys

import matplotlib.pyplot as plt

import numpy as np

def _plot(path):

print("Load: {}".format(path))

# id, (data), timestamp

datas = np.loadtxt(path, dtype=np.int32, delimiter=",", skiprows=1, usecols=(1))

fig, ax = plt.subplots()

ax.plot(range(len(datas)), datas, label=str(i))

ax.legend()

plt.show()

if __name__ == "__main__":

if len(sys.argv) < 2:

sys.exit("python data_plot.py *.txt")

_plot(sys.argv[1])

ax.plot(x, y, ...) 横坐标 x 取的数据下标 range(len(datas)) 。

完整代码见文末 Gist 地址的 data_plot.py 。运行效果如下:

$ python data_plot.py data0.txt

Args

nonzero: False

Load: data0.txt

size: 20

avg: 52.15, std: 8.57, sum: 1043

可以读取多个文件,一起显示:

$ python data_plot.py data*.txt

Args

nonzero: False

Load: data0.txt

size: 20

avg: 52.15, std: 8.57, sum: 1043

Load: data1.txt

size: 20

avg: 53.35, std: 6.78, sum: 1067

scipy 对数据插值

x, y 两组数据,用 scipy 进行插值,平滑成曲线:

from scipy import interpolate

xnew = np.arange(xvalues[0], xvalues[-1], 0.01)

ynew = interpolate.interp1d(xvalues, yvalues, kind='cubic')

完整代码见文末 Gist 地址的 data_interp.py 。运行效果如下:

python data_interp.py data0.txt

matplotlib 图像化时如何配置、延迟、保存,可见代码与注释。

pandas 分析数据

这儿需要读取 timestamp 列数据,

# id, data, (timestamp)

stamps = np.loadtxt(path, dtype=np.float64, delimiter=",", skiprows=1, usecols=(2))

numpy 计算前后差值,

stamps_diff = np.diff(stamps)

pandas 统计每秒个数,

stamps_int = np.array(stamps, dtype='int')

stamps_int = stamps_int - stamps_int[0]

import pandas as pd

stamps_s = pd.Series(data=stamps_int)

stamps_s = stamps_s.value_counts(sort=False)

办法:把时间戳直接变整秒数,再 pandas 统计相同值。

完整代码见文末 Gist 地址的 stamp_diff.py 。运行效果如下:

python stamp_diff.py data0.txt

matplotlib 图形化时怎么显示多个图表,也可见代码。

结语

分享 Coding 中实用的小技巧、小知识!欢迎关注,共同成长!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值