咨询热线:025-82229515

数据分析入门系列(一) Pandas

发布时间:2022-06-15 来源:江苏晓丹 浏览量:4

数据分析神奇之pandas

Pandas这个东西在数据的世界里用的还是很频繁的,主要是用起来会比较方便。pandas是基于numpy的基础上进行开发的,所以安装pandas的时候会自带性的把numpy也安装上去。

图片


今天我们就来用心看看,Pandas是怎样的一个数据结构呢?


图片



今天我们就主要来聊聊Series~~~~


Pandas Series


Pandas里面的Serise是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。(注意:Series中的索引值是可以重复的)

我们可以看一下下面这一张图:

图片

这样的一列就是一个Series。 对于每一列而言,他们都是一个series,这就像数据库表里面的列。

那我们来看看下面这张图,如何来创建一个Series。

图片

直接使用pandas去找Series就可以啦!



pandas pd
a = pd.Series([])
b = pd.Series(=[]=[])

(a)
(b)

图片

我们来看一下运行结果:

a的运行结果就是一列索引对应着一列值(索引的值和给的值是一一对应的~~就和python里面的字典一样)。如果没有指定索引的值,默认是从0开始的,就和python里面的list取值是一样的。

如果需要改变索引,只需要在Series方法里面加上index参数即可修改索引,不过要注意的是,给定数据的长度要和索引的长度是一样的,这样才会生效,否则就会报错。


下面我们来看一下series的属性:

编号属性/方法描述
1axes返回行轴标签列表。
2dtype返回对象的数据类型(dtype)。
3empty如果系列为空,则返回True。
4ndim返回底层数据的维数,默认定义:1。
5size返回基础数据中的元素数。
6values将系列作为ndarray返回。
7head()返回前n行。
8tail()返回最后n行。


下面问题来了,我们如何结合Numpy去创建一个Series呢?

numpy np
pandas pd
data = np.array([])
A = pd.Series(data)
(A)


我们可以直接把nparray生成的数据当作参数放到Serise里面。

图片


如果想指定索引的值可以加上index参数:

numpy np
pandas pd
data = np.array([])
A = pd.Series(data=[])
(A)

图片


那如何使用字典创建Series呢?

data = {: : : }
B = pd.Series(data)
(B)

图片

也是直接创建即可。


讲完了创建那就来说一说取值吧,Series里面的值如何取出来呢?


Series值的获取主要有两种方式:


1、通过方括号+索引的方式读取对应索引的数据,有可能返回多条数据。


2、通过方括号+下标值的方式读取对应下标值的数据,下标值的取值范围为:

[0,len(Series.values));

另外下标值也可以是负数,表示从右往左获取数据。

pandas pd
A = pd.Series([]=[])
(A[])
(A[])
(A[])


可以使用默认索引,也可以使用给定的索引。

图片


它还可以像python里面的list一样进行切片。

pandas pd
A = pd.Series([]=[])
(A[:])
(A[::-])
(A[:])
(A[::-])

图片


Series里面的删除操作使用的是drop方法和pop方法:

pandas pd

series1 = pd.Series([]=())
(series1.drop())
(series1.drop([]))
series1.pop()
(series1)

图片

使用drop方法的时候会生成一个新的Series,新的Series里面就是删除该元素的Series,

使用pop方法删除,就是对原来的Series进行修改删除。


如果你想在Series中插入值的话,和字典的原理是一样的:


pandas pd

series1 = pd.Series([]=())
series1[] = (series1)

图片

当然还可以使用append方法进行添加,但是和刚刚不一样的是,他会生成一个新的Series来存储添加后的数据:

series2 = pd.Series([]=[])
series3 = series1.append(series2)
(series3)

图片



最后我们来说一下Series里面的统计函数。


1、求和函数SUM

pandas pd
val = []
t = pd.Series(val=[])
(t)
(t.sum())

图片


数学达到高数水平的可以简单看看下面这个表达式:

图片


2、均值函数MEAN

pandas pd
val = []
t = pd.Series(val=[])
(t)
(t.mean())

图片


同样的,数学表达式如下:

图片


3、最大函数MAX

max函数可以返回series里最大值,而idxmax返回的是其index或者label。

pandas pd
val = []
t = pd.Series(val=[])
(t.max())

图片


4、方差函数VAR

方差说起来比较抽象,算起来就是拿每个数和平均数做差再平方,注意考量的就是这串数据的稳定性。方差越小越好,

举个例子,小明的高考冲刺模拟五次成绩是303,321,339,288,403,小刚的成绩是,323,351,343,328,311请问哪个同学的成绩更加稳定?

(不要问分数为什么这么低-------江苏省高考)

很明显我们可以看到小刚的成绩更加趋于稳定,因为小刚成绩的波动范围比较小,不像小明,波动的比较大。


那么我们用方差来论证这个观点:

pandas pd
xiaoming = []
xiaogang = []
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
(t.var())
(p.var())

图片


很明显我们可以看到,小刚的方差更小,所以小刚的成绩更加稳定。

数学公式如下:

图片


5、标准差函数STD

说的简单一点,他就是和方差一样的,也是考量一组数据的稳定性,具体值就是方差开平方。也就是把上面那个表达式的平方去掉即可。

pandas pd
xiaoming = []
xiaogang = []
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
(t.std())
(p.std())

图片


数学表达式:

图片



6、平均绝对离差函数MAD

平均绝对离差是用样本数据相对于其平均值的绝对距离来度量数据的离散程度。

画个图你就懂了:

图片

红线就是平均值,红色的小点点就是一组数据,距离红线越近就越偏向稳定。用肉眼看来,很明显上面一个数据会比较好。


我们依旧用小明和小刚的分数来算平均绝对离差:

pandas pd
xiaoming = []
xiaogang = []
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
(t.mad())
(p.mad())

图片


还是小刚的数据比较小。

数学表达式:

图片

(每个数据减去均值求绝对值,如何再求这些绝对值的平均值)

总的来说,我们期望数据的离散程度越小越好(就是分布的范围越小越好)。

上面的三个函数,都是用来计算数据的离散程度的。


7、协方差函数COV

表达式:

图片

(别问我啥意思了,根据上面的表达式,自己猜一下吧-_-!

提示:方差是协方差的一种特殊情况,即当两个变量是相同的情况

看下面的代码理解一下:

pandas pd
xiaoming = []
xiaogang = []
average_xiaoming = pd.Series([])
average_xiaogang = pd.Series([])
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
(t.cov(average_xiaoming))
(p.cov(average_xiaogang))

图片


8、偏态值函数SKEW

偏态值用于衡量成绩分布服从正态分布的程

正态分布,又叫常态分布,像一只倒扣的钟。两头低,中间高,左右对称。大部分数据集中在平均值,小部分在两端,如下图:

图片


pandas pd
xiaoming = []
t = pd.Series(xiaoming)
(t.skew())

图片


9、峰度函数KURT

峰度(Kurtosis)衡量实数随机变量概率分布的峰态。峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的

图片

在相同的标准差下,峰度系数越大,分布就有更多的极端值,那么其余值必然要更加集中在众数周围,其分布必然就更加陡峭。

xiaoming = []
t = pd.Series(xiaoming)
(t.kurt())

图片


立即咨询 +

固话:025-82229515

手机:18020106952

在线QQ咨询