对于记录的数据,如何用 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))

dtype 说明可见: https://numpy.org/devdocs/reference/arrays.dtypes.html

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 图形化时怎么显示多个图表,也可见代码。

结语

本文代码 Gist 地址: https://gist.github.com/ikuokuo/8629cc28079199c65e0eedb0d02a9e74

科学计算:Python 分析数据找问题,并图形化的更多相关文章

  1. Python分析数据难吗?某科技大学教授说,很难但有方法就简单

    用python分析数据难吗?某科技大学的教授这样说,很难,但要讲方法,主要是因为并不是掌握了基础,就能用python来做数据分析的. 所谓python的基础,也就是刚入门的python学习者,学习的基 ...

  2. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  3. 32-第3章 数据链路层--抓包分析数据帧格式-ISO一图了然-小结

    OSI理论模型 层级 名称 事物举例 功能 数据单位 别名 数据组成 协议举例 7 应用层 QQ.OA 网络通信 上层数据 上层数据 HTTP/FTP/DNS 6 表示层 web数据压缩.https加 ...

  4. CentOS6.5配置python开发环境之一:CentOS图形化界面显示

    这两天在配置centos系统下python的开发环境和工具. 刚用centos,做做记录可以方便以后有需要的人...查资料确实挺麻烦的 centos6.5 sublime3 python27 subl ...

  5. 提高生产性工具(五) - 数据的过滤器和图形化(适用于 MVC5 + MongoDB)

    在下面流水账似的文章之前,先将一些感悟说一下. 1.如果一个系统对于某个功能在至少三个地方使用的话,必须将其抽象提炼出来,而且时间点最好是大规模测试之前. 2.提炼出来的功能,如果品质做得好,整个系统 ...

  6. python学习(十二) 图形化用户界面

    12.1 丰富的平台 12.2 下载和安装wxPython 12.3 创建示例GUI应用程序 12.3.1 开始 12.3.2 窗口和组件 12.3.3 标签.标题和位置 12.3.4 更智能的布局 ...

  7. Python 科学计算-介绍

    Python 科学计算 作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文 ...

  8. Python科学计算(一)

    作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文件 http://git ...

  9. Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)

    用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought ...

随机推荐

  1. Docker搭建VS Code Server ,设置访问密码随时随地写代码

    今天在N1盒子上安装了 VS Code Server,简单的记录一下. 安装docker Docker一键安装脚本 $ sudo wget -qO- https://get.docker.com/ | ...

  2. 11_ArrayList集合的方法

    class Program { static void Main(string[] args) { //数组:长度不可变,类型单一 //ArrayList集合:长度可以任意改变,类型可以不单一 //创 ...

  3. Channels集成到Django消息实时推送

    channel架构图 InterFace Server:负责对协议进行解析,将不同的协议分发到不同的Channel Channel Layer:频道层,可以是一个FIFO队列,通常使用Redis Dj ...

  4. 一元三次方程组求解 luogu P1024

    题目传送门 首先,要明确题目信息,f(x1) * f(x2) < 0, 则一定存在实数根在区间(x1, x2).且所有的根都在[-100, 100)之间.根与根的绝对值之差 >= 1 那么 ...

  5. [Unity2d系列教程] 003.Unity如何调用android的方法

    Unity开发的时候很多时候我们需要用到底层的一些功能,比如摄像,录音,震动等等,我们在Unity的层面是无法完成的.那么我们考虑到Unity是否可以直接调用到android方面的方法,替我们去完成我 ...

  6. [PHP学习教程 - 文件]002.修改上传文件大小限制(File Upload Limit)

    引言:通常大家直装xampp之后,默认的文件上传大小应该被设定成2M左右,这个时候如果上传超过2M的东西,就会报错,让人非常尴尬.如何修改呢? 导航索引: 概念 FTP常用API FTP封装类 其他 ...

  7. Django ListView DetailView等基于类的视图如何添加装饰器?

    场景: Django开发中,如果我们使用了类视图,如:ListView.DetailView.UpdateView等,这时我们又想要对这个视图添加一个装饰器,来实现某种功能,这时候该怎么处理呢? 环境 ...

  8. python常见面试题讲解(十)数字颠倒

    题目描述 描述: 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001 输入描述: 输入一个int整数 输出描述: 将 ...

  9. 认证(Authentication)和授权(Authorization)总结

    身份认证是验证你的身份,一旦通过验证,即启用授权.你所拥有的身份可以进行哪些操作都是由授权规定.例如,任何银行客户都可以创建一个账户(如用户名),并使用该账户登录该银行的网上服务,但银行的授权政策必须 ...

  10. Rocket - debug - SBA

    https://mp.weixin.qq.com/s/eFOHrEhvq2PlEJ14j2vlhg 简单介绍SBA的实现. 1. SystemBusAccessState 系统总线访问状态: 分别是: ...