灰太狼的数据世界(二)

简介: 灰太狼的数据世界(二)

上一篇数据文章中,我们介绍了Numpy里面的一些结构,那么这次我们来介绍一些更好玩的东西----Pandas。Pandas这个东西在数据的世界里用的还是很频繁的,主要是用起来会比较方便。相对Numpy而言的话,pandas属于那种青出于蓝而胜于蓝这样的一个角色。pandas是基于numpy的基础上进行开发的,所以安装pandas的时候会自带性的把numpy也安装上去。

640.jpg

上期的内容我们主要是针对Numpy里面的一些数据结构和统计函数做了一番介绍,了解了ndarry是怎样的一个结构(说白了就是一个数据,或是一个矩阵),那么今天我们来看看,在Pandas里面又有怎样的一个数据结构呢?




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


Pandas Series


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

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

640.png

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

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

640.png

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


import pandas as pd
a = pd.Series([1, 2, 3, 4])
b = pd.Series(data=[1, 2, 3, 4],
              index=['a', 'b', 'c', 'd'])
print(a)
print(b)

我们来看一下运行结果:

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

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


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

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


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

import numpy as np
import pandas as pd
data = np.array(['Amy', 'Ben', 'Candy', 'David'])
A = pd.Series(data)
print(A)

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


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


mport numpy as np
import pandas as pd
data = np.array(['Amy', 23, '女', 99])
A = pd.Series(data,
              index=["name", "age", "gender", "point"])
print(A)

640.png

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

data = {'a': 1, 'b': 2, 'c': 3}
B = pd.Series(data)
print(B)

640.png

也是直接创建即可。


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


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

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

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

[0,len(Series.values));

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

import pandas as pd
A = pd.Series([1, 2, 3, 4, 5],
              index=['a', 'b', 'c', 'd', 'e'])
print(A[1])
print(A['a'])
print(A['d'])

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

640.png

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

import pandas as pd
A = pd.Series([1, 2, 3, 4, 5],
              index=['a', 'b', 'c', 'd', 'e'])
print(A[:3])
print(A[4:2:-1])
print(A['a':'d'])
print(A['e':'c':-1])


640.png

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

import pandas as pd
series1 = pd.Series([10, 20, 30, 40], index=list('abcd'))
# 删除元素返回副本
print(series1.drop('c'))
print(series1.drop(['a', 'd']))
# 删除源数据中的元素
series1.pop('d')
print(series1)

640.png

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

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

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

import pandas as pd
series1 = pd.Series([10, 20, 30, 40], index=list('abcd'))
# 新增一个标签索引值为f,值为100的元素
series1['f'] = 100
print(series1)


640.png

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

series2 = pd.Series([100, 200], index=['g', 'h'])
series3 = series1.append(series2)
print(series3)


640.png

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


1、求和函数SUM

import pandas as pd
val = [1000, 201, None, 104]
t = pd.Series(val, index=[1, 2, 3, 4])
print(t)
print('sum=', t.sum())

640.png

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



2、均值函数MEAN


import pandas as pd
val = [1000, 201, None, 104]
t = pd.Series(val, index=[1, 2, 3, 4])
print(t)
print('average=', t.mean())

640.png

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

640.png


3、最大函数MAX

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

import pandas as pd
val = [1000, 201, None, 104]
t = pd.Series(val, index=[1, 2, 3, 4])
print('max=', t.max())

640.png


4、方差函数VAR

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

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

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

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

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

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.var())
print('xiaogang=', p.var())

640.png

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

数学公式如下:


640.png

5、标准差函数STD

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

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.std())
print('xiaogang=', p.std())

640.png


数学表达式:

640.png



6、平均绝对离差函数MAD


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

画个图你就懂了:

640.png

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

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

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.mad())
print('xiaogang=', p.mad())

640.png

还是小刚的数据比较小。

数学表达式:


640.png

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

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

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


7、协方差函数COV

表达式:

640.png

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

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

看下面的代码理解一下:

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
xiaogang = [323, 351, 343, 328, 311]
average_xiaoming = pd.Series([330.8, 330.8, 330.8, 330.8, 330.8])
average_xiaogang = pd.Series([331.2, 331.2, 331.2, 331.2, 331.2])
t = pd.Series(xiaoming)
p = pd.Series(xiaogang)
print('xiaoming=', t.cov(average_xiaoming))
print('xiaogang=', p.cov(average_xiaogang))

640.png


8、偏太值函数SKEW

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

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

640.jpg

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
t = pd.Series(xiaoming)
print('xiaoming=', t.skew())

640.png

9、峰度函数KURT

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

640.jpg

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

import pandas as pd
xiaoming = [303, 321, 339, 288, 403]
t = pd.Series(xiaoming)
print('xiaoming=', t.kurt())


640.png



关于Series的内容差不多到这里就结束啦!有问题可以私信进行提问哦!(因为暂不支持留言,只能私信啦!)

相关文章
|
8月前
数据的压迫
最近有点烦躁,项目上的效益不是很好,所以就开始压缩工时,更多的项目带来的是更短的时间,大家不再能友好的沟通,每个人的身上都或多或少带着戾气. 我有时候也在想为什么会这样,整体环境导致了如今的局面,大家应该一致对外,敢想敢干才是,直到前不久忽然得知一个同学有了更好的发展,薪资的水平是我的三倍还多,我也失衡了,一整夜都在失眠,所以我就想写篇文章,既然是干数据的,那我就把这篇博客叫“数据的压迫”.
27 0
|
9天前
|
存储 数据采集 数据可视化
数据
【6月更文挑战第21天】数据。
15 3
|
1月前
|
数据安全/隐私保护 C++
C++程序中共用数据的保护
C++程序中共用数据的保护
25 2
|
10月前
|
存储 算法 数据可视化
灰太狼的数据世界(一)
灰太狼的数据世界(一)
123 0
|
10月前
|
SQL 数据可视化 数据挖掘
人人都会点数据分析 | 了解数据
人人都会点数据分析 | 了解数据
|
10月前
|
Linux
6.3.3 数据撷取
6.3.3 数据撷取
55 0
|
存储 人工智能 缓存
通过数据,你都知道了哪些“原来是这样”的事儿?
在生活中,数据无处不在,有新数据,也有老数据。有1T的数据,也有1P的数据。有文件数据,也有视频数据。通过数据的分析与洞察,我们总能通过数据了解到一些 “原来是这样”的事儿。比如,记账APP会总结自己花费了多少钱,分析钱花在那些地方了。音乐APP会汇总曲库的歌曲自己听了多少次,分析自己喜欢那些类型的音乐。
129 2
|
人工智能 算法 新能源
数据上新啦!
风机检测算法与风机分布数据集上线
数据上新啦!
|
Java 数据库连接 数据库
数据的写入
数据的写入
89 1