对于记录的数据,如何用 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. List的扩容机制,你真的明白吗?

    一:背景 1. 讲故事 在前一篇大内存排查中,我们看到了Dictionary正在做扩容操作,当时这个字典的count=251w,你把字典玩的66飞起,其实都是底层为你负重前行,比如其中的扩容机制,当你 ...

  2. Java IO(十八) BufferedReader 和 BufferedWriter

    Java IO(十八) BufferedReader 和 BufferedWriter 一.介绍 BufferedReader 和 BufferedWriter 是字符缓冲流,分别继承自 Reader ...

  3. Java中的自动装箱拆箱

    Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 // 自动装箱 2 Integer total = 90 ...

  4. css 禁用浏览器滚动条,初始最外层包含容器 wrapper

    浏览器默认的视窗会随着滚动条滚动,绝对定位的元素会随着滚动条滚动,为了解决这个问题我们需要禁止浏览器的滚动条,然后在代码的最外层初始化一个 div(最外层包含容容器代替默认的视窗),是滚动天出现在最外 ...

  5. 03 . 前端之JavaScipt

    JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者–Netscape公司,决定将JavaScript提交给国际标准化组织ECMA ...

  6. Java实现 LeetCode 661 图片平滑器(暴力)

    661. 图片平滑器 包含整数的二维矩阵 M 表示一个图片的灰度.你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元 ...

  7. Java实现选号码

    选号码 Description CF打算换个手机号码,但是他去营业厅选号码的时候却把移动的客服小姐烦得不行,因为他太挑三捡四啦. 对于一个手机号的后六位数字(前面五位他就无所谓了)CF有很严格的要求, ...

  8. java中PipedStream管道流通信详细使用(详解)

    多线程使用PipedStream 通讯 Java 提供了四个相关的管道流,我们可以使用其在多线程进行数据传递,其分别是 类名 作用 备注 PipedInputStream 字节管道输入流 字节流 Pi ...

  9. 天哪!手动编写mybatis雏形竟然这么简单

    前言 mybaits 在ORM 框架中,可算是半壁江山了,由于它是轻量级,半自动加载,灵活性和易拓展性.深受广大公司的喜爱,所以我们程序开发也离不开mybatis .但是我们有对mabtis 源码进行 ...

  10. iOS-线程&&进程的深入理解

    进程基本概念 进程就是一个正在运行的一个应用程序; 每一个进度都是独立的,每一个进程均在专门且手保护的内存空间内; iOS是怎么管理自己的内存的,见博客:博客地址 在Linux系统中,想要新开启一个进 ...