目录
1.查看数据集的基本信息
2、显示前5行数据
3、查看数据集的统计信息
4、计算每类的个数
5、对分组后的某列或者多列使用聚合函数
在机器学些中,当我们拿到一个数据集,尤其是关于分类的问题的数据集,有时需要进行数据分析,看看会不会存在数据不平衡等问题。下面将介绍一下,当我拿到有关我的课题时对数据集进行数据分析时用的几个函数。
数据集的部分如下所示:
1.查看数据集的基本信息
使用info()可以得到数据集的列名、行数、数据类型等。
import pandas as pd
data = pd.read_csv(r'E:\soundscapes.tsv', sep='\t') # 替换自己文件实际位置
info = data.info()
运行结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32096 entries, 0 to 32095
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 filename 32096 non-null object
1 onset 32096 non-null float64
2 offset 32096 non-null float64
3 event_label 32096 non-null object
dtypes: float64(2), object(2)
memory usage: 1003.1+ KB
2、显示前5行数据
head = data.head()
print(head)
运行结果:
filename onset offset event_label
0 0.wav 4.151 4.410 Speech
1 0.wav 4.190 5.888 Dog
2 1.wav 0.000 10.000 Frying
3 1.wav 4.591 4.841 Dishes
4 1.wav 5.458 7.572 Speech
3、查看数据集的统计信息
des = data.describe()
print(des)
运行结果:
onset offset
count 32096.000000 32096.000000
mean 4.201868 6.687454
std 2.365403 2.425218
min 0.000000 0.528000
25% 2.615000 4.808000
50% 4.322000 6.679000
75% 5.912000 8.853000
max 9.750000 10.000000
但我的数据集中提供的onset和offset并不需要计算均值、方差等。
4、计算每类的个数
因为我的数据集中每个文件对应一个类别,我想了解数据集中每个类别分别有多少个,看有无类不平衡问题。
vc=data['event_label'].value_counts() # 频数统计
print(vc)
想要了解如何实现升序的 value_counts()、如何用 value_counts() 求各个值的相对频率等可见:Pandas | 频数统计很简单,但这5 种技巧你使用过吗?_Sim1480的博客
运行结果:
Speech 15880
Dishes 4338
Dog 2289
Alarm_bell_ringing 1986
Cat 1861
Frying 1349
Running_water 1224
Electric_shaver_toothbrush 1096
Vacuum_cleaner 1046
Blender 1027
由于我不仅想知道每类发生的次数,还想知道每个事件发生时长的均值和总时长,因此单纯使用value_counts是不够的,下面使用groupby达到这个目的。
5、对分组后的某列或者多列使用聚合函数
data['dura'] = data.apply(lambda x: x['offset'] - x['onset'], axis=1)#offset-onset=持续时长(duration)
df1 = data[['event_label','dura']]
print(df1.groupby("event_label").agg(["mean","sum"]))
#将"event_label",“dura”,"订单预定"这2列拿出组成一个新的df1 ,然后根据"event_label"进行分组,并统计分组后的统计值
想要更多了解groupby可见:python数据分析之Dataframe分组(group by)_柳小葱的博客
想要了解Pandas对DataFrame单列/多列进行运算可见:Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)_akenseren的博客
运行结果:
dura
mean sum
event_label
Alarm_bell_ringing 1.449212 2878.136
Blender 4.135130 4246.779
Cat 1.347954 2508.542
Dishes 0.663292 2877.359
Dog 1.125450 2576.154
Electric_shaver_toothbrush 8.669221 9501.466
Frying 9.384563 12659.775
Running_water 6.657672 8148.990
Speech 1.542008 24487.092
Vacuum_cleaner 9.458015 9893.084