![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据分析
羸弱的穷酸书生
这个作者很懒,什么都没留下…
展开
-
关于pandas中两个不同的Series相减的问题
众所周知,pandas中有两种主要的数据结构,一种是DataFrame,一种是Series,DataFrame的行或列其实都是Series,然后一般情况我们不会对两个df或者两个series进行计算,但是事实上pandas是支持两个df或者series的整体运算的,具体算法就是根据对应的行列索引进行计算,比如进行加减乘除,只对行列索引相同的进行计算,剩下的会变成Nan,所以基于这个原理,其实pandas也支持不同长度的Series进行计算,这里有个坑要注意,由于是按索引进行计算,如果索引不同,则计算结果就会原创 2024-08-02 11:22:46 · 224 阅读 · 0 评论 -
matplotlib循环绘图时如何节省内存
近期在改一个需求,需要绘制大量的图片,起初,用的之前的代码,因为之前虽然也是循环绘制,但是不论是数据量还是图的数量,都没有很大,然后导致我用老的代码做现在的功能时出现爆内存现象,第一次中途退出了我还不知道是怎么回事,但是第二次,我无意中打开了任务管理器,发现内存占用已经到了96%如下图 可以看到,python进程内存占用已经到了惊人的10G,估计已经把其它进程全部挤到硬盘里了,内存里只剩下python了,我没多想肯定是绘图导致的,并且我大概能想到应该是每次绘制完图,内存没有释放,于是搜了下怎么释放已绘制完图原创 2024-04-28 17:19:02 · 378 阅读 · 0 评论 -
使用asammdf中把mdf转成dataframe时发现一个问题
知道了这点以后,只需要把时间戳去重排序,就可以和转出的dataframe拼接了,因为调用to_dataframe后,会丢失时间戳信息,所以需要从原始数据中取一个信号的时间戳做dataframe的时间戳列。原创 2024-04-09 16:53:25 · 292 阅读 · 0 评论 -
发现一个pandas种concat和merge的区别
pandas中,concat和merge都可以用来拼接数据,但是这两个方法有什么区别呢,常规的区别今天暂且不提,主要分享一个我近期发现的区别,主要是针对两个df有重名的列的情况,先看concat。可以看到,merge会对同名的列进行重命名,而且不论是第一个df,还是第二个df,名字都会被改变,而且规则是,左边的df名字会被加_x,右边的df会加_y。可以看到,当两个df有同名的列的时候,concat不会做任何处理,之前是什么名字,拼接后还是什么名字,再看merge。原创 2024-04-01 15:57:35 · 213 阅读 · 0 评论 -
pandas的drop_duplicates无法去重问题
之前没研究过pandas的去重方法,今天用了一下,发现这个方法并不是那么好用,我的需求是去除所有列的重复值,并保留第一个重复的值,按我的想法应该是下面这样写。当然这样数据的索引是无法跟之前的对应起来了,所以我猜pandas是想保留之前的数据的对应关系的,一旦有操作要破坏这种对应,它就不会执行。如图所示,并没有删除重复值,所以我只能一个一个列的删,删完在重新拼接在一起,但是结果却不尽如人意,原创 2024-01-04 09:31:25 · 550 阅读 · 0 评论 -
关于python解析mf4中二维信号数据的注意事项
python解析mf4中的信号数据一般用np.ndarray存储,但是mf4中的一个信号有时不一定是一维数据,有时会是一个二维的,没错,就是一个信号数据就是二维的,这时候,np数组的每个元素也是一个数组,这个时候就要注意了,当一个mf4有这种数据时,这时转成dataframe的时候是下图这样的。所以,当遇到这种信号的时候,需要把这种二维数据去掉,否则会影响df的拼接,经过打印知道,这种二维信号的单个元素一般是np.record类型,所以通过type或者isinstance类型判断,把这种数据去掉,解决!原创 2023-12-27 10:31:50 · 547 阅读 · 0 评论 -
pandas用字符串筛选索引发现的问题
奇怪吧,后来查资料说它会把contains里的字符串当做正则表达式!原创 2023-12-07 14:27:10 · 383 阅读 · 0 评论 -
发现matplotlib的一个问题
但是如果改成marker='o',就会成为折线图。感觉有点奇怪,所以记下来。原创 2023-09-16 16:48:01 · 440 阅读 · 0 评论 -
使用CANape查看blf数据
blf数据不像mf4那样自带信号数据库,因为它是记日志用的,一般情况下要尽可能的小,所以,解析blf数据要单独有个数据库文件,一般是dbc或者arxml,我这里用dbc做示范,解析之前要先加载dbc,当然具体操作其实很简单,只需要两步即可。直接拖拽文件到绘图窗口,弹出下面界面,依次选择Insert signals into new window--> Graphic window,然后就会弹出信号界面了,跟打开mf4文件一样。点击add,选择要加载的dbc文件 ,点击ok关闭。双击相应的信号就能看曲线了。原创 2023-08-10 16:40:23 · 4702 阅读 · 4 评论 -
pandas绘制堆叠柱状图并添加数值显示
需要注意的其实只有一点,就是柱子的遍历顺序,普通的柱状图结构简单,就是从下到上遍历(我的是横向的),如果是堆叠的会怎么遍历呢,经过观察是广度优先的,也就是说,如果一个柱子是由四个子柱子组成,它会呈N形遍历,也就是先遍历同一个类型的所有柱子,再遍历其它的,知道这这点,其实就好办了,废话不多说,直接上代码。当然如果数字显示的位置不太准,可以自己慢慢调,用pandas直接画图还是比较简洁的,如果用matplotlib画,可能代码行数稍微多点,所以建议熟悉pandas的人还是用pandas画好点。原创 2023-07-10 14:48:56 · 1756 阅读 · 0 评论 -
pandas给条形图顶部加数字显示以及拟合线
第二个是给条形图加拟合线,这个拟合线其实就是给变量算一个正态分布,正太分布一共需要两个参数,一个是均值,一个是标准差,这个很容易算然后再根据x值拟合下y值,这个需要借助scipy的一个函数来算,就是norm.pdf(),大概代码如下。其实用hist图已经可以看到显示效果,但是因为要在图形顶部显示数字,所以又手动分箱求了下具体数值,这个不知道有没有更简洁的实现方法,其它的就是求下正太分布,然后把曲线再绘制到条形图上,效果如下。原创 2023-06-25 09:41:38 · 630 阅读 · 0 评论 -
python中使用candas解析转换blf文件
我这个代码最后是把dataframe转成了mf4,用canape看比较方便。这个库其实还是蛮好用的,但是开发的工具最后没有用这个库,而是用底层库cantools和python-can解析的,原因是用这个库后,开发时功能是没问题的,但是用pyinstaller打包后就有问题了,总是报错,查了资料貌似有共享库冲突,最终没有解决,所以不得不放弃了,如果不打包还是ok的,高层api还是要方便一些,就是参数没太懂为什么要搞成那个样子。原创 2023-03-30 14:09:47 · 2614 阅读 · 7 评论 -
python中使用cantools和can工具包解析blf文件
可以发现,时间戳解析出来了,其它的数据都是16进制,没法直接看,当然我们如果熟悉blf格式,可以自己把数据还原出来,但是既然已经用第三方库,我们当然就不用自己解析了,而且仔细观察一下即可发现,之前的加载dbc并没有用上,所以这时一个重要的函数登场了,那就是dbc.decode_message(id,data),具体代码如下。一般情况下,解析blf需要dbc文件,当然其实不用dbc也可以,只不过解析比较麻烦,推荐还是配合dbc解析,这个也是我们最常用的办法。加载完dbc文件,就可以解析blf文件了,代码。原创 2023-03-30 13:38:53 · 8913 阅读 · 31 评论 -
状态空间方法的时间序列分析
继续看statsmodels文档,发现还有一种比较流行的时间序列分析模型,叫做状态空间法,但很可惜,这个方法代码没跑通,我想的是如果先能跑出结果,那自然是好,跑完我再慢慢看原理,没想到没跑通,好吧,那我就再深入的研究一下原理,于是我就开始百度,但是这不百度不知道,这个方法甚至有一本书专门介绍,名字就是本文标题《状态空间方法的时间序列分析》,我靠,我寻思着看几天就能完事,但是我觉得算法原理应该不至于写一本书,书里应该还有其它内容。原创 2023-02-15 14:41:33 · 275 阅读 · 0 评论 -
阿里天池竞赛记录
这个代码实现是一个var算法,翻译过来就是向量自回归算法,用来处理多列的时序数据建模,在深度学习爆火的当下,大家已经很熟悉,处理时序预测有专门的神经网络lstm,trasformer等,但是没办法,官方不让用,因为这个算法要用到控制器里,而神经网络模型首先比较大,第二,可解释性比较差,所以不太适合,所以只能用传统的公式模型,虽然这些传统模型在神经网络的光辉下已经不再那么耀眼,但是技术含量是丝毫不含糊的,理解起来比神经网络更难,因为涉及到的理论知识特别多。原创 2023-02-10 16:24:32 · 911 阅读 · 0 评论 -
使用matplotlib绘制高级图表
树形图的形状一般是一个上下颠倒的树,其根部是一个没有父成员的根节点,之后从根节点开始用线连接子成员,使子成员变为子节点,直至线的末端为没有子成员的树叶节点为止。桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表着数据流量的大小,且所有主支宽度的总和等于所有分支宽度的总和,常见于能源、材料成分等场景或金融领域。matplotlib除了可以绘制简单的图表,还可以绘制一些常见的高级图表,包括等高线图、矢量场流线图、棉棒图、哑铃图、甘特图、人口金字塔图、漏斗图、桑基图、树状图和华夫饼图。转载 2022-12-20 13:38:58 · 1474 阅读 · 0 评论 -
matplotlib中plt.figure()的注意事项
这里我每个循环调用一下plt.figure(),生成一个新的画布,怎么保证是新的画布,这个从后面我打印的id可以看到,然后绘图保存,这个函数有个参数,就是传一个数字,也就是可以写成这样plt.figure(i),这里就要注意了,如果每次传的数字相同,返回的会是同一个画布,而且只要调用后,画布就一直在内存里,下次再调用的时候就会返回这个已经存在的画布。今天在改功能就掉进了这个坑,当我写两个循环时,发现画的图都重叠在一起了。比如有这样一个需求,我要画10个图然后画一个,保存一个,这时候我可能要这样写代码。原创 2022-12-19 17:14:52 · 605 阅读 · 0 评论 -
浅谈第三方图表库绘图原理
其实,总结下来,我觉得带坐标系的主要有两种图,一种是有序图,一种是无序图,当然这两个分类是我定义,那么什么是有序图,有序图就是横坐标是有序的,并且一般是从小到大顺序,或者是时间,或者数字,常见的基本就这两种,纵坐标一般表示因变量,表示随着x的变化,y的变化,图的形式一般是散点或者折线。因为近半年时间都在做数据分析,可视化方面的工作,接触了很多图表库,python生态里图表库是非常多的,有窗口形式的,有web网页形式的,技术不尽相同,但是绘图原理基本差不多。另外一种是无序图表。原创 2022-12-15 13:39:00 · 183 阅读 · 0 评论 -
Matplotlib箱线图日期轴问题
matplotlib中的dateformatter有时会抽风导致时间倒回1970,有没有大神知道怎么解决。原创 2022-12-13 10:37:32 · 372 阅读 · 0 评论 -
python解析mdf或mf4文件利器---asammdf
asammdf是python解析mdf/mf4文件的主流第三方包,包含了很多实用的方法做mdf/mf4文件解析,同时提供数据格式转换,绘图,合并等一系列好用的方法,应该说是做汽车数据分析的必备利器,希望本篇文章能祝你一臂之力。原创 2022-11-24 15:16:37 · 10902 阅读 · 16 评论 -
分析工具QCustomPlot2版
【代码】分析工具QCustomPlot2版。原创 2022-11-15 14:14:56 · 812 阅读 · 2 评论 -
在python中用QCustomPlot实现多y轴多曲线
它会导致完整的重新插入内部缓冲区。当您对图形的轴范围或数据点进行更改时,必须调用此方法,这使得更改可见。,当我点击左侧窗格(树状视图)时会显示图表。问题是图表在我调整分割器大小之前没有显示或更新。这中间遇到另一个问题,绘图不更,我正在使用。原创 2022-11-10 10:44:42 · 2912 阅读 · 2 评论 -
新发现的一个pyqt5的绘图控件QCustomPlot2
今天发现了一个新的绘图控件QCustomPlot2,据说性能也非常不错,这个图表库原生支持很多种图表类型,这点比pyqtgraph要好点,pyqtgraph本身支持的图表种类不是特别全,但是也算够用吧,这个plot2教程很少,文档都只看到有c++的,没看到python,估计只能自己踩坑了,后面研究一下。原创 2022-11-08 16:36:58 · 799 阅读 · 0 评论 -
pandas中iloc和loc需要注意的点
今天用pandas筛选数据时发现一个问题,通常来说,loc时通过名字筛选数据,但具体来说,应该是通过索引名筛选数据,pandascoloums本身也是索引类型,和index一样,但是索引不一定是数字,索引可以是数字,也可以是字符串,这就是我以前经常混淆的点,只不过多数情况下,索引是数字,列是字符串的名字,然后当index是数字时,loc里就传数字,比如。然后iloc是什么呢,iloc只关心你是第几行,不关心你index是多少,所以,它只能传数字,比如像下面这样,当索引时字符串时,就传字符串。原创 2022-10-26 14:37:32 · 263 阅读 · 0 评论 -
数据中的时间列如果带小数点,则pandas读取时会转成float
转成数字,刚开始我还没纳闷,为什么有些数据是对的,而有些则变了,后来通过打印日志和观察,发现只有带小数点的变了,找到问题所在了,解决方法其实很简单,最直接的办法就是直接把小数点截取掉。由于数据比较特殊,有的会带毫秒,如果不带毫秒,那么读取时自动会转成datetime.datetime,如果带小数点,那么就会转成float类型,如下。下面是我输出到一个文件的数据。原创 2022-10-25 16:31:44 · 794 阅读 · 0 评论 -
numpy.float64不能当作列表索引
在python中,列表索引必须是integer,不能是float类型,包括numpy.float64比如。如果用numpy.float64会报如下错误。这样是不行的,会报错。原创 2022-10-24 09:42:47 · 1056 阅读 · 0 评论 -
原来numpy也可以用字段访问数据
这个数据类型就是np.recarray,这种数据类型可以像数据库建表一样,定义每个字段的数据类型,然后定义一个数组,然后就可以用字段名取数据了,先看一个例子。原创 2022-10-13 11:09:34 · 141 阅读 · 0 评论 -
pandas给重名的列重命名的三种方法
这种是columns后面加了个匿名函数,说实话头一次知道还可以这样用。这种应该是最常规的操作了,就是根据重复的列的位置进行重命名。这个更离谱一点,直接写了个类,更长见识了。原创 2022-09-30 10:35:44 · 4265 阅读 · 0 评论 -
pandas细节总结(一)
1. 查看df中缺失值所在的行。原创 2022-09-22 09:10:44 · 320 阅读 · 0 评论 -
重大发现,nan原来是float类型。。。。
从以上几种方法里可以看到,就是说nan是用float强转来的,而且只有少数一个字符串可以这样操作,比如inf,nan等,如果用其它字符串,你这么操作会报错,所以,本质来说,nan其实是python的一种内置类型(可能以前学过,但是后来忘了),很明显python对nan,inf做了特殊处理,所以我们才可以用float('nan')这样强转,math.isnan()才能判断。知道了这个点后,那么到底怎么才能找到缺失值的key呢,于是我百度了一下,缺失值判断,发现了一下几种方法。2.pandas判断。原创 2022-09-20 13:31:18 · 4049 阅读 · 4 评论 -
pandas绘制带有marker的线(并且是一图多线),图例显示错误问题
折线图是没问题的,但是图例显示却有点问题,没有marker,第二个就是正确的,这使我很疑惑,因为如果折线图不对的话可能是绘制错误,但是图是对的,图例确实错的,这个我还是第一次见,搜了一番,找到一个解决方法,就是在第二次绘图完加上ax.legend(),说是试图回忆一下图例,这个我就不懂了,不过确实管用,加上后立马就好了,打开注释即可,至于原理,我得再研究研究。我感觉这样应该没什么问题,但是画出的图是这样的。原创 2022-09-19 09:20:49 · 627 阅读 · 0 评论 -
pandas绘制点线图
这个代码细节很多,首先是一图多线,这个需要指定ax参数,指定在同一个图上绘制多条线,设置图的标题和大小,pandas有的图没有title参数,比如boxplot,这时需要用plt.title(“”)设置,有的图有,比如散点图和折线图,所以可以单独设置。其次是双y轴,这个用到ax.twinx()函数,公用上一个图的x坐标,生成另一个图ax2,然后这时坐标自己就跑到右边了,也就形成了双轴图。最下面是设置轴的坐标间距,这个目前没用到,这个如果是自动的就好了,可以根据数据量自动伸缩,但是现在还不知道怎么设置。原创 2022-09-17 11:18:18 · 877 阅读 · 0 评论 -
pandas中重复索引的处理
而且警告显示,未来版本将不再支持给有重复值的索引调用reindex重新索引。取出索引不重复的值就好了。这个方法同样对Series起作用,那就很方便了。如果index的值重复,那么我调用reindex重新索引时就会报异常。1. pandas重新索引reindex方法的一个问题,代码如下。3.接上个话题,那么怎么删除索引重复的数据呢,今天查到了一下方法。原创 2022-09-09 17:20:28 · 6918 阅读 · 0 评论 -
Series和列表的区别
s1是筛选后得到的序列,序列和普通列表当然是有区别的,首先是类型不一样,Series是pandas里的自定义类型,list是python内置的类型,但我这里主要说在遍历时候的区别,series是带索引的,但是这个索引不一定从0开始,但是list的索引一定是从0开始的,即使做了切片,比如我上面的代码,我创建df时索引确实是从0开始的,但是我加条件筛选后就不是了,索引是从51开始的,这样的话,写s1[0]就会报错,需要注意一下。2.一股一股型,沉稳型,咆哮型,情感充沛型。原创 2022-09-06 14:20:02 · 922 阅读 · 0 评论 -
matplotlib修改坐标标签间隔
3.一直想做那种控件可以拉伸的功能,但是由于对pyqt不太熟悉,一直没找到解决方法,今天用asammdf.exe,看到它有这个功能,于是看了下源码,再结合搜索,终于找到这个功能,实际这个不是控件科拉伸,控件本身就是可拉伸的,但是普通的布局是不支持拉伸的,只能随窗口变化,然后要想手动可以拉的那种,需要一个布局组件,叫QSpliter,具体怎么用,我还得再研究研究。2.pandas修改列的类型及名称,可用df.columns = df.columns.map(fn)原创 2022-09-06 11:39:13 · 3193 阅读 · 0 评论 -
pandas一些细节
4.pandas的cumsum函数,这个函数表示累加,什么是累加,和直接求个和有什么区别,我看了半天,简单来说就是,求和的结果是一个值,累加和是多个值,什么意思,比如说,我有三个数,1,2,3,求和就是1+2+3=6,最后返回一个结果6,但是cumsum返回1,3,6,就是说,它是把一个数的和,两个数的和,三个数的和全部记下来,最后得到的是一个series,这就是sum和cumsum的区别。1.今天做需求的时候遇到这样一个警告,原创 2022-09-02 17:47:21 · 304 阅读 · 0 评论 -
pyqt5树控件及其它问题
All arrays must be of the same length,但是我们如果有一个csv或者excel文件,当数据不齐时,pandas会自动填充nan,那么如果我想直接从一个dict创建dataframe,但是数据不齐,怎么处理呢,我试了一下发现,如果有的key的值的类型不是list,而是一个普通变量,这时,创建就不会报错,而且它缺的数据会全部填充这个普通变量的值,比如下面这样。3. 用字典创建dataframe的时候,如果数据长度不一样,则会报错,比如下面的代码。...原创 2022-08-31 16:20:25 · 337 阅读 · 0 评论 -
用xlwings直接调用excel打开xlsx文件
2.由于办公系统加密原因,我不能用pandas直接读取csv或者excel,只能用xlwings操作本地excel读取,所以我不能直接创建dataframe,必须先读取全部数据,然后做填充,在创建dataframe,再转置,为什么要转置,因为需求要求的。当然也可以用df['xxx'].astype(),但是这个方法遇到字母,文字会报错,pd.to_numeric则不会。3.把非数值类型的数据转成数值类型,当然,前提它可以转,如果是字母,文字等不行。1.pandas读取csv文件并设置第一列为索引。...原创 2022-08-26 17:01:46 · 647 阅读 · 0 评论 -
mdf数据信号采集频率不同的处理
昨天主要研究业务问题,给同事分析数据的过程中发现一个问题,mdf文件结构可能不是常见的一个channel group,然后一堆信号,也可能是多个channelgroup,多个信号,多个信号的采集频率还可能不一样,这种情况下,即使文件不大,asammdf的mdf.to_dataframe()的方法也会爆内存,那么之前的逻辑对这种文件就失效了,所以得专门针对这种格式做处理,这种格式由于数据不能对齐,所以,多个文件合并几乎不太可能,除非对数据进行裁切,但这种显然不合适。这种性能还行,缺点是不能处理多个数据。原创 2022-08-25 15:11:48 · 376 阅读 · 0 评论 -
日常思考和总结
2.公司内部的云平台数据分析,正常来说,云平台的数据会比较多,要基于全部数据的数据挖掘,应该要基于spark等组件实现,加载到本地是不现实的。3.新工具界面可能要稍微复杂点,需要学习新的组件,比如tabwidget等,查了一下,基本使用应该很简单,主要还是业务逻辑。1.开会时提到了机器学习在业务中的应用,感觉现在的话缺少问题场景数据,如果要训练模型,数据是少不了的,这个需要后面积累。原创 2022-08-23 09:34:39 · 202 阅读 · 0 评论