目录

1.查看数据集的基本信息

2、显示前5行数据

3、查看数据集的统计信息

4、计算每类的个数

 5、对分组后的某列或者多列使用聚合函数


在机器学些中,当我们拿到一个数据集,尤其是关于分类的问题的数据集,有时需要进行数据分析,看看会不会存在数据不平衡等问题。下面将介绍一下,当我拿到有关我的课题时对数据集进行数据分析时用的几个函数。

数据集的部分如下所示:

python看数据集大小 python数据集分析_python

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