边看边撸,10分钟高效掌握Pandas技术!

从0到1学Pandas(四):Pandas 高级应用 本文聚焦 Pandas 高级应用,深入探讨其与 NumPy、Matplotlib 等库的集成方法,展现多工具协同处理数据的优势。同时,从数据类型优化、向量化操作等方面讲解性能提升技巧,介绍 apply 函数、窗口函数等高级处理方法。通过金融、用户行为、销售数据分析三个实际案例,展示 Pandas 在实战中的应用,帮助读者掌握高效数据处理技能,提升在实际项目中解决复杂问题的能力。 阅读详情

点击上方“AI派”,选择“设为星标”
最新分享,第一时间送达!
640?wx_fmt=jpeg
640?wx_fmt=gif

作者:贾胜杰,硕士,退役军人,电气工程专业,现成功转行K12领域数据挖掘工程师,不仅在数据清理、分析和预测方向,而且在自制力和高效学习方面都有丰富经验。 

编辑:王老湿

Hi,各位同学,专栏关于修炼技法的部分已经发布了五篇:

上一篇我们了解了 Pandas。Pandas帮我们引入了更适应数据表的数据类型,而且它基于Numpy开发,运算速度也非常快,可以说它在Python数据分析中占据了C位,那我们快来一睹它的风采吧!

由于Pandas穿插应用在数据分析的各个流程中,所以在本文中,我们先介绍Pandas的基本知识,然后在梳理数据分析的流程中再讲解Pandas的函数应用。由于本篇文章涉及一些代码演示,所以边看边撸(代码)才能取得最佳效果!

本篇内容

  • Pandas简介

  • Pandas Series

  • Pandas DataFrame

  • 数据分析流程及Pandas函数应用

  • 延伸:Pandas数据融合

Pandas简介

Pandas 是 Python 中的数据操纵和分析软件包,它是基于Numpy去开发的,所以Pandas的数据处理速度也很快,而且Numpy中的有些函数在Pandas中也能使用,方法也类似。

Pandas 为 Python 带来了两个新的数据结构,即 Pandas Series(可类比于表格中的某一列)和 Pandas DataFrame(可类比于表格)。借助这两个数据结构,我们能够轻松直观地处理带标签数据和关系数据。

⚠️Series中各个元素的数据类型可以不一致,DataFrame也是如此,这与numpy的ndarray不同。

其实还有一个三维的数据结构Panel,但用的很少,感兴趣的话可以了解一下~

创建Pandas Series

可以使用 pd.Series(data, index) 命令创建 Pandas Series,其中data表示输入数据, index 为对应数据的索引,除此之外,我们还可以添加参数dtype来设置该列的数据类型。

示例:

import pandas as pd #约定俗成的简称
pd.Series(data = [30, 6, 7, 5], index = ['eggs', 'apples', 'milk', 'bread'],dtype=float)

out:
eggs      30.0
apples     6.0
milk       7.0
bread      5.0
dtype: float64

data除了可以输入列表之外,还可以输入字典,或者是直接一个标量。

#data输入字典
pd.Series(data = {'eggs':30,'apples': 6,  'milk':7, 'bread':5},dtype=float)

out:
apples     6.0
bread      5.0
eggs      30.0
milk       7.0
dtype: float64

#data输入某一标量
pd.Series(data = 7, index = ['eggs', 'apples', 'milk', 'bread'])

out:
eggs      7
apples    7
milk      7
bread     7
dtype: int64

访问和删除Series中的元素

  • 访问

访问Series中的元素有两种方法:

一种类似于从列表中按照索引访问数据,一种类似于从字典中按照key来访问value。

下面看示例:

640?wx_fmt=png

从上面代码里也能发现,Pandas提供的iloc与loc分别对应着按索引访问和按key访问。

  • 修改

因为Series是可更改类型,若想更改其中某一项,只需访问它然后重新赋值即可。

  • 删除

可以使用 .drop() 方法删除 Pandas Series 中的条目。Series.drop(label) 方法会从给定 Series 中删除给定的 label。这个label可以是单个label或这是label组成的list。

640?wx_fmt=png

但需要注意的是,.drop()函数并不会修改原来的数据,如果你想要修改原数据的话,可以选择添加参数inplace = True或者是用原数据替换s = s.drop(label)

inplace参数会经常出现在Pandas的函数中,所以,写代码时一定要细心,不要闹出诸如s = s.drop(label,inplace=True)这样的乌龙。

Series运算

和ndarray一样,Series也可以进行元素级的算术运算,也可以使用np中提供的各种运算函数,如sqrt()等等。

这里可以想一下,如果Series中包含字符串,然后再进行乘法会是什么结果?

可以回想下字符串的知识'*'*10的结果是什么?

创建DataFrame

我们使用pd.DataFrame(data, index, columns)来创建一个DataFrame。

其中:

data是数据,可以输入ndarray,或者是字典(字典中可以包含Series或arrays或),或者是DataFrame;

index是索引,输入列表,如果没有设置该参数,会默认以0开始往下计数;

columns是列名,输入列表,如果没有设置该参数,会默认以0开始往右计数;

示例:

640?wx_fmt=png

从上述代码中可以看出,字典d中的key被当作列名,value被当作dataframe中的数据。

? 如果在上述代码中添加一个columns列,如df = pd.DataFrame(data=d,index = ['a','b'],columns = ['col_1','col_2']),会返回什么结果呢?

访问DataFrame中的元素

与访问Series中的元素类似,我们可以通过列表式索引访问,也可以通过字典式Key值访问。

  • 创建一个DataFrame


640?wx_fmt=png

  • 访问某一行

640?wx_fmt=png

  • 访问多行


640?wx_fmt=png

  • 访问某一列


640?wx_fmt=png

  • 访问多列


640?wx_fmt=png

⚠️使用df.iloc[:,0:2]这种方法只能筛选出连续的列,那如果想要筛选的列分别在1,3,5,10:17怎么办呢?可以搜一下np.r_的用法,试试看!

  • 访问某一元素

640?wx_fmt=png

? 在第一种方法中,我们必须先访问列,再访问行,想想为什么?

删除、增加元素

  • 删除元素

我们使用.drop函数删除元素,默认为删除行,添加参数axis = 1来删除列。

640?wx_fmt=png

值得注意的是,drop函数不会修改原数据,如果想直接对原数据进行修改的话,可以选择添加参数inplace = True或用原变量名重新赋值替换。

  • 增加元素

这里先介绍两种方法,一种是append(),另外一种是insert(),这两种方法都比较简单,可类比于python list中的两种方法进行学习。

此外,Pandas还提供了其他更为复杂的做DataFrame融合的函数,比如说concat()、merge()、join()等等,相对难一些,会放在延伸内容Pandas数据融合中进行讲解。

更改行列标签

使用函数rename()即可。具体用法如下:

640?wx_fmt=png

除此之外,还可以使用隐匿函数lambda来对行列标签进行统一处理,比如:

640?wx_fmt=png

需要注意的是,rename()函数同样不会更改原数据,如果想直接对原数据进行修改的话,可以选择添加参数inplace = True或用原变量名重新赋值替换。

更改索引

可以使用函数set_index(index_label),将数据集的index设置为index_label。

除此之外,还可以使用函数reset_index()重置数据集的index为0开始计数的数列。

缺失值(NaN)处理

NaN就是Not a Number的缩写,表示这里有数据缺失。

如何处理缺失值呢?这就要根据确实数据的情况而定了,是直接删除?还是暴力平均值替换?还是分类之后再用平均值替换?还是用一些什么其他的方法,全靠你去把握了。可以看一看Python Data Science这本书中的Handling Missing Data章节,你肯定会有所收获的。链接在此:

  • 查找NaN

我们可以使用isnull()和notnull()函数来查看数据集中是否存在缺失数据,在该函数后面添加sum()函数来对缺失数量进行统计。除此之外,还可以使用count()函数对非NaN数据进行统计计数。

640?wx_fmt=png

  • 删除NaN

使用dropna(axis)函数可以删除包含NaN的行或列。

dropna()函数还有一个参数是how,当how = all时,只会删除全部数据都为NaN的列或行。

同样,该函数也不会修改原数据集。

  • 替换NaN

使用fillna()函数可以替换NaN为某一值。其参数如下:

  1. value:用来替换NaN的值

  2. method:常用有两种,一种是ffill前向填充,一种是backfill后向填充

  3. axis:0为行,1为列

  4. inplace:是否替换原数据,默认为False

  5. limit:接受int类型的输入,可以限定替换前多少个NaN

还可以使用interpolate()函数按照某一方法来替换NaN,如linear,它是忽略索引并将值视为相等间距,这是该函数的默认方法。更多method及解读请戳:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.interpolate.html

数据分析流程及Pandas应用

数据分析不是从上至下一蹴而就的过程,而是需要你不断迭代、重复、完善,最终得到结论的过程。

提出问题
  • 数据集中的各个变量之间的相关性如何?是否存在某些联系?

  • 变量的统计结果会揭示什么?

  • 根据现有掌握的数据,能否对未来走势进行预测?

  • 根据你想了解的问题,去收集数据,再对问题进行修缮,如此迭代,获取更全面的数据,提出更一阵见血的问题。

    …

整理数据

整理数据是整个数据分析流程中最为耗时、最磨耐心的一部分,但也是对结果影响最大的一部分,所以,大家一定要踏下心来,结合实际业务,一定要把这部分做扎实~

  • 收集

    数据库提取?直接下载?网络爬虫?

  • 评估

    这个过程是对数据产生直观印象的过程,你要尝试了解数据集的大小,基本的统计结果,是否存在数据重复?缺失?数据类型是否正确?是否每个变量成一列&每个观察值成一行?数据是否有统计错误?(严重偏离正常值,比如说气温达到70℃等等)…

  • 打开文件

    #打开csv文件
    pd.read_csv('filename')
    #打开excel文件
    pd.read_excel('filename')
    #处理中文字符的tsv文件
    pd.read_csv('filename',sep = '\t',encoding = 'utf-8')
    
  • 查看数据集数据

    #查看前五行
    df.head()
    #查看尾五行
    df.tail()
    #查看随机一行
    df.sample()
    
  • 查看数据集信息

    #查看数据集行数和列数
    df.shape
    #查看数据集信息(列名、数据类型、每列的数据量——可以看出数据缺失情况)
    df.info()
    #查看数据集基本统计信息
    df.describe()
    #查看数据集列名
    df.columns
    #查看数据集数据缺失情况 
    df.isnull().sum()
    #查看缺失列数据
    df[df['col_name'].isnull()]
    #查看数据集数据重复情况
    sum(df.duplicated())
    #查看重复数据
    df[df.duplicated()]
    #查看某列分类统计情况
    df['col_name'].value_counts()
    #查看某列唯一值
    df['col_name'].unique()
    #查看某列唯一值数量
    df['col_name'].nunique()
    #以某列对数据集进行排序
    df.sort_values(by = 'col_name',ascending = False)#False为由大至小
    
  • 数据筛选

    #提取某行
    df.iloc[row_index]
    df.loc['row_name']
    #提取某几行
    df.iloc[row_index_1:row_index_2]
    #提取某列
    df['col_name']
    #提取某几列
    df[['col_name_1','col_name_2']]
    #提取某行某列的值
    df.iloc[row_index,col_index]
    df.loc['row_name','col_name']
    #筛选某列中满足某条件的数据
    df[df['col_name'] == value]#等于某值的数据,同理满足所有比较运算符
    df.query('col_name == value')#代码效果同上
    df[(df['col_name_1'] >= value_1) & (df['col_name_2'] != value_2)]#与&,或|
    df.query('(col_name_1 >= value_lower) & (col_name_2 <= value_upper)')
    df.groupby('col_name')#按col_name列进行分组,聚类
    
  • 清理

    对评估出的问题进行逐项排查、清理,直至获取到干净的数据(推荐超级有用且经典的 Tidy Data(https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html),虽然代码用的是R语言,但代码不就只是工具而已嘛,关键的是思维方法)

    #删除某行
    df.drop(['row_name'],inplace = True)#若添加inplace = True,修改后的数据会覆盖原始数据
    #删除某列
    df.drop(['col_name'],axis = 1)
    #缺失值的处理
    df.fillna(mean_value)#替换缺失值
    df.dropna()#删除包含缺失值的行
    df.dropna(axis = 1, how = 'all')#只删除所有数据缺失的列
    #删除重复值
    drop_duplicates(inplace = True)
    #更改某行/列/位置数据
    用iloc或者loc直接替换修改即可
    #更改数据类型
    df['datetime_col'] = pd.to_datetime(df['datetime_col'])
    df['col_name'].astype(str)#还可以是int/float...
    #更改列名
    df.rename(columns={'A':'a', 'C':'c'}, inplace = True)
    #apply函数
    #讲function应用在col_name列,此方法比用for循环快得多得多
    df['col_name'].apply(function)
探索性数据分析

即Exploratory data analysis(EDA),这是一种分析数据集——尤其是陌生数据集——的方法,具体实施的话可以采用定量、定性的数据分析或者是可视化分析。

这是一个强调迭代的过程,在这个阶段你要不断的对数据进行探索(提问、整理、分析、可视化等等),根据你得到的结果再去丰富你的数据或者完善你的问题,最终得出结论。

这是一个考验耐心和细心的繁琐过程,所以一定要心平气和,保持工作的连贯性。(不做完一套不能睡觉?)

在做EDA的过程中,一个很好的习惯就是备份!

#导出csv文件
df.to_csv('filename.csv',index = False)
#导出中文字符的excel文件
df.to_excel('filename.xlsx',index = False,encoding = 'utf-8-sig')

Tip:utf-8与utf-8-sig 两种编码格式区别:

得出结论
  • 通过可视化展示结论

  • 利用统计学指标,如假设检验的p-值等提供理论支撑

  • 利用机器学习算法对数据进行预测、分类、关联度分析等

传达结果

撰写报告,和别人分享你的研究结果。不管你报告的载体是PDF,PPT还是交互式的网页,都需要你凝练出最精简的点,一针见血。

所以,数据分析师们做的都是表面光鲜,背地里清理头发数据的工作。。。

延伸:数据融合

数据融合这部分,主要包括四个函数merge与join,concat与append,这里只展示基本用法与总结,更多实例可以戳:

https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

  • merge

    merge意为合并,当两个数据集需要按照某个共有列进行合并时,就需要用到merge了,它的关键参数为链接方式how,默认为内链接,大家可以类比SQL中的JOIN去学习

merge的连接方式与SQL对比

合并方式SQL JOIN描述
leftLEFT OUTER JOIN只用左表的key去匹配链接
rightRIGHT OUTER JOIN只用右表的key去匹配链接
outerFULL OUTER JOIN两表中key的并集
innerINNER JOIN两表中key的交集

实例:

In [1]: left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
   ....:                      'A': ['A0', 'A1', 'A2', 'A3'],
   ....:                      'B': ['B0', 'B1', 'B2', 'B3']})
   ....: 

In [2]: right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
   ....:                       'C': ['C0', 'C1', 'C2', 'C3'],
   ....:                       'D': ['D0', 'D1', 'D2', 'D3']})
   ....: 

In [3]: result = pd.merge(left, right, on='key')

640?wx_fmt=png

  • join

join是一种基于merge的快速合并方法,所需参数较少,默认以index作为链接键,进行左链接。

In [4]: left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
   ....:                      'B': ['B0', 'B1', 'B2']},
   ....:                      index=['K0', 'K1', 'K2'])
   ....: 

In [5]: right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
   ....:                       'D': ['D0', 'D2', 'D3']},
   ....:                       index=['K0', 'K2', 'K3'])
   ....: 

In [6]: result = left.join(right)


640?wx_fmt=png

  • concat

concat是单词concatenate的简称,意为拼接,它是用来处理拼接多个具有相同列名或者索引的数据。

In [7]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
   ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
   ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
   ...:                     'D': ['D0', 'D1', 'D2', 'D3']},
   ...:                     index=[0, 1, 2, 3])
   ...: 

In [8]: df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
   ...:                     'D': ['D2', 'D3', 'D6', 'D7'],
   ...:                     'F': ['F2', 'F3', 'F6', 'F7']},
   ...:                    index=[2, 3, 6, 7])
   ...: 

#关键参数axis,决定了拼接的方向,默认为拼接行(即向下拼接),axis=1时拼接列(即向右拼接)
In [9]: result = pd.concat([df1, df4], axis=1, sort=False)


640?wx_fmt=png
  • append

append时concat的简化函数,它只能拼接行,即向下拼接。

In [10]: df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
   ...:                     'B': ['B4', 'B5', 'B6', 'B7'],
   ...:                     'C': ['C4', 'C5', 'C6', 'C7'],
   ...:                     'D': ['D4', 'D5', 'D6', 'D7']},
   ...:                      index=[4, 5, 6, 7])
   ...: 
In [11]: result = df1.append(df2)


640?wx_fmt=png

  • 总结

  1. merge主要用来根据key列对数据集进行合并;

  2. join相当于简化版的merge,key默认为index,所以你如果想按照index对数据集合并时,join就是你的首选;

  3. 如果你想对数据集进行横向连接(axis = 1)或者纵向链接时,记得想起来用concat;

  4. append相当于是简化版的concat,用得频次比concat要多得多。

最后

本文依然只是Pandas的冰山一角,希望能引起你们的兴趣去积极探索,比如说更新数据时可以用到update或者combine_first函数,对数据进行reshape或者聚合的stack、pivot,对时间序列进行处理的datetime等等。大家也不要被这么多函数吓到,在学习或者工作的过程中,不断地去尝试新方法,多去翻Pandas的官方文档,多记笔记,相信你在数据科学的道路上肯定会越走越远哒!

如果在学习数据分析(专栏)的过程中有遇到问题,欢迎加入我们的学习群来交流,我们作者在群里已等候多时。还没有加入的同学可以扫描下方的微信二维码,添加微信好友,之后统一邀请你加入交流群。添加好友时一定要备注:数据分析。 

/ 每日赠书专区 /

为了回馈一直以来支持我们的读者,“每日赠书专区”会每天从留言支持我们的读者中选择一名最脸熟的读者来赠予实体书籍(包邮),当前通过这种方式我们已赠送出 40+ 本书籍。

  1. 脸熟的评判标准是根据通过留言的次数来决定的

  2. 留言时需要按照今日留言主题来用心留言,否则不计入总数

  3. 每日赠书专区会出现在AI派当天发布文章的头条或次条的文章末尾


如果不理解头条/次条的含义的读者可看下面的图。

640?wx_fmt=jpeg



今天我们的每日赠书专区出现在“次条”的位置上,书籍为《深入浅出Python机器学习》。

本书简介:

本书内容涵盖了有监督学习、无监督学习、模型优化、自然语言处理等机器学习领域所必须掌握的知识,从内容结构上非常注重知识的实用性和可操作性。全书采用由浅入深、循序渐进的讲授方式,完全遵循和尊重初学者对机器学习知识的认知规律。本书适合有一定程序设计语言和算法基础的读者学习使用。

?↑↑点击上方小程序即可购买


恭喜上期通过留言成功混脸熟的读者:哎哟不错哦,赠送一本《在线文本数据挖掘 算法原理与编程实现》

请中奖同学联系小编:wanglaoshi201907

640?wx_fmt=png

/ 今日留言主题 /

你都有使用过Pandas什么骚操作,告诉王老湿一波?


近期专栏推荐

1. 

2. 

3. 

4. 


点下「在看」,给文章盖个戳吧!

手把手教你用组态王KingSCADA 3.53读取S7-1200 PLC数据(保姆级图文教程) 本文提供了一份详细的组态王KingSCADA 3.53读取S7-1200 PLC数据的实战教程,涵盖从硬件连接到软件配置、变量映射到故障排查的全流程。特别针对初学者常见问题提供解决方案,帮助工程师快速实现稳定通信,提升工业自动化系统效率。 阅读详情

相关推荐

第1.1节 构网型 vs. 跟网型:根本区别与技术原理

构网型与跟网型变流器的本质区别在于控制哲学与等效模型。跟网型变流器采用"电压跟随,电流注入"策略,等效为受控电流源,依赖电网电压作为参考,在弱电网下存在稳定性问题。构网型变流器采用"自主同步,电压构建"策略,等效为受控电压源,能主动构建电压和频率,具备自主运行、黑启动和电网支撑能力。两者的核心差异体现在同步机制、电网依赖性、故障行为和系统支撑等方面。构网型变流器更适合高比例新能源、弱电网和微电网场景,是未来电力系统的重要发展方向。

技术工作者 1397

手把手教你撸个直播小程序

前沿: 本篇博文会稍微有点长,用到的技术有 奥点云的 流媒体直播服务LSS  分布式双向消息服务DMS 以及  小程序的live-player组件 (奥点云做的很差劲,有更好的平台,最好换一个) 本篇博文的目的是为了让有些前端基础的新手快速搭建一个直播小程序. 下面来看一下小程序完成版的截图 // TODO 待补充截图   主要涉及的功能,二个直播频道, 直播详情页可以全屏查看,可以...

知无涯 7567

告别商业软件?实测用gnina(CNN打分版)做分子对接:从安装到跑通第一个案例

本文详细介绍了基于卷积神经网络(CNN)的开源分子对接工具gnina的安装与实战应用。从环境配置、编译安装到运行第一个COVID-19主蛋白酶抑制剂对接案例,全面解析了这款替代商业软件的强大功能,特别适合预算有限的研究团队进行药物发现和虚拟筛选。

weixin_42522320的博客 256

VSCode 插件开发实例(WebView):微信读书 ^-^边撸代码边看小说^-^

最终效果 主要代码 package.json { "name": "WeReadForVSCodeJackieZheng", "repository": { "type": "git", "url": "https://github.com/JackieZheng/WeReadForVSCode.git" }, "displayName": "WeReadForVSCode", "description": "WeRead for VSCode 微信读书 VSCode 插件

Admans的专栏 5482

2 利用ITK实现多帧Dicom读取,VTK实现数据显示

vtk中也有dicom读写类,但是只能完成单帧DICOM数据读取,这对于实际应用是非常不利的。而ITK可以实现dicom多帧读取,通常情况ITK与VTK也会结合使用(ITK处理,VTK显示),所以就一起学习下吧!

buerbuhuitou的博客 1565

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战

本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。

q6r7s8t9的博客 1145

自己撸一个阅读类休闲app

其实自己早就想撸一个app,因为自己一直没什么机会可以做那种好看的app,对我而言好看就是能安装在手机上,然后看着舒服的。 所以也对自己所学进行一次整合,然后再次扬帆。 感谢那些贡献开源api的大神,也感谢gank 主要使用的开眼的api,gank开放的api; 功能目前有不完善的地方自己仍努力的的再写; 主要使用的依赖库 material xutils jiaoziv...

jia_you1的博客 1万+

ADS与Cadence中Verilog-A文件的编译与调用实战指南

本文详细介绍了在ADS与Cadence平台中Verilog-A文件的编译与调用实战指南,涵盖开发环境配置、模型创建与编译、仿真设置技巧以及跨平台协作与调试等内容。通过具体案例和优化策略,帮助工程师高效完成混合信号仿真设计,提升电路建模与验证效率。

weixin_29196315的博客 499

Python数据分析基础技术之pandas(史上最全面)

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。简单地说,你可以把 Pandas 看作是 Python 版的 Excel。 ...

薛定谔的猫-前端领域 7万+

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

SST专题(2-4)MMC-SST 输入级的环流分析

本文分析了模块化多电平换流器(iMMC-SST)的输入级等效电路、子模块电容电压波动特性及环流抑制机理。研究表明:1)子模块电容电压波动包含基频和二倍频分量,与传统换流器相比波动幅值更大;2)环流主要由子模块电容电压波动在桥臂电感上激发的偶次谐波电流构成,呈频率越高幅值越小的特性;3)可通过增大桥臂电感或采用调制策略叠加抑制电压分量来有效控制环流。研究结果为MMC系统设计提供了理论依据。

嵌入式老牛的博客 586

如何快速上手Pandas_talib:5分钟完成技术分析指标计算

Pandas_talib是一个基于Python Pandas实现的技术分析指标库,它能帮助开发者和投资者快速计算各种金融市场技术指标。本文将带你在5分钟内掌握Pandas_talib的基本使用方法,轻松实现技术分析指标计算。 ## 准备工作:安装Pandas_talib 要开始使用Pandas_talib,首先需要安装该库。你可以通过以下步骤获取并安装: 1. 克隆仓库: ```bash g

gitblog_00691的博客 1039

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2054

10分钟快速入门Pandas库

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,这篇文章主要介绍了10分钟快速入门Pandas库,重点介绍pandas常见使用方法,结合实例代码介绍的非常详细,需要的朋友可以参考下。concat()也是一个增加数据常用的方法,常见于两个表的拼接与爬虫使用中,作用类似于append(),但是append()将在不久后被pandas舍弃,所以还是推荐使用concat()。建议使用.loc[]方法或者.iloc[]方法,loc[]通过行的名字寻找,iloc[]通过索引寻找。

ai520wangzha的博客 559

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

10分钟上手!pandas自动化Excel报表实战指南

pandas是Python中最强大的数据处理库之一,尤其在Excel报表自动化方面表现出色。无论是数据清洗、分析还是生成精美的报表,pandas都能让你告别繁琐的手动操作,实现高效办公。本文将带你快速掌握pandas自动化Excel报表的核心技巧,让你在10分钟内就能上手实战! ## 为什么选择pandas处理Excel? 传统Excel操作往往需要大量手动拖拽和公式编写,不仅效率低下,还容易

gitblog_00123的博客 1021

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

10分钟 to pandas

import pandas as pd import numpy as np import matplotlib.pyplot as pltx In [3]: dates = pd.date_range('20130101', periods=6) dates Out[3]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-...

风---的专栏 1801

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

10分钟pandas教程简介

10分钟pandas教程简介 去发现同类优质开源项目:https://gitcode.com/ 本文为您介绍了一个在数据科学领域极为重要的Python库——pandas。针对Python初学者在选择合适的库时面临的困惑,本文以浅显易懂的语言阐述了pandas库的核心功能和优势。通过阅读本教程,您将了解到pandas如何基于NumPy提供高效的数据分析工具,以及如何通过其丰富的函数和方法快速便捷地处...

gitblog_06781的博客 264

10分钟上手Dplython:让Python数据操作像R一样简单高效

想要在Python中体验R语言dplyr的流畅数据操作体验吗?Dplython就是你的完美解决方案!这个强大的Python库将R语言中备受喜爱的dplyr语法带到Python世界,让你用简洁优雅的管道操作符处理数据,大幅提升数据分析效率。无论你是从R转Python的数据科学家,还是寻求更高效数据操作方法的Python开发者,Dplython都能让你的工作流程更加顺畅。 ## 🚀 什么是Dply

gitblog_01090的博客 1008

10分钟学会Pandas

1、创建对象 import pandas as pd print(pd.Series([1,2,3,4,5], index=list("abcde"))) a 1 b 2 c 3 d 4 e 5 dates = list('ABCDEF') df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=...

luocy16的博客 262

pandas手册_十分钟快速了解Pandas的常用操作!

作者:刘早起 来源:早起Pythonpandas是python数据科学中的必备工具,熟练使用Pandas是一名优秀的数据分析师傅的必备技能。在之前我曾将Pandas数据处理中的常用操作已习题的形式整理为Pandas进阶修炼120题,但是仍有部分刚接触Python的读者不知该如何下手,所以我将在本文中分享我在学习Pandas时使用的教程。在我知道pandas之前还是个Excel Boy,偶然了解到...

weixin_39875516的博客 143

10分钟快速搞定pandas

本文是对pandas官方网站上《10 Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook 。习惯上,我们会按下面格式引入所需要的包: In [1]: import numpy as np In [2]: import pandas as pd In [3]: import matplotlib.p...

weixin_33738578的博客 95

pandas版本_分享我学习Pandas使用的资料,可能是新手入门Pandas最好的教程!

Pandas是Python数据科学中的必备工具,熟练使用Pandas是一名优秀的数据分析师傅的必备技能。在之前我曾将Pandas数据处理中的常用操作已习题的形式整理为Pandas进阶修炼120题,但是仍有部分刚接触Python的读者不知该如何下手,所以我将在本文中分享我在学习Pandas时使用的教程。在我知道pandas之前还是个Excel Boy,偶然了解到pandas,但是当时网上并没有太多的...

weixin_39838758的博客 228

10分钟学习pandas

import pandas as pd import numpy as np import matplotlib.pyplot as plt s = pd.Series([1,3,5,np.nan,6,8]) s 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64 len(s) 6 s.descri...

goForIt 596

分享我学习Pandas使用的资料,可能是新手入门Pandas最好的教程!

Pandas是Python数据科学中的必备工具,熟练使用Pandas是一名优秀的数据分析师傅的必备技能。在之前我曾将Pandas数据处理中的常用操作已习题的形式整理为Pandas进阶修炼1...

早起Python 410

DataSciencePython数据预处理技巧:10分钟掌握Pandas核心操作

想要快速掌握Python数据分析?DataSciencePython项目为你提供了完整的解决方案!这个开源项目包含了常见的数据分析和机器学习任务实现,特别适合初学者快速上手。今天我们就来学习如何使用Pandas进行高效数据预处理,让你在10分钟内掌握核心操作技巧 🚀 ## 为什么选择DataSciencePython? DataSciencePython项目汇集了多种实用的数据分析案例,从基

gitblog_00098的博客 1124

pandas版本_分享我学习Pandas的资料,新手入门Pandas最好教程

Pandas是Python数据科学中的必备工具,熟练使用Pandas是一名优秀的数据分析师傅的必备技能。在之前我曾将Pandas数据处理中的常用操作已习题的形式整理为Pandas进阶修炼120题,但是仍有部分刚接触Python的读者不知该如何下手,所以我将在本文中分享我在学习Pandas时使用的教程。在我知道pandas之前还是个Excel Boy,偶然了解到pandas,但是当时网上并没有太多的...

weixin_36035466的博客 1118
上一篇: 新出炉的Python、机器/深度学习书籍,还热乎着呢
下一篇: 如何高效入门Python与机器学习?来公众号取取经吧~
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值