Python数据分析与应用

常见的数据分析工具,也就是用到的第三方库有:NumpyPandasMatplotlibScipy

1.NumPy库

NumPy是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

1.N维的数组对象

N维的数组对象是科学计算的基础创建数组的方法有以下几种:
1.array()函数,参数为列表或元组

import numpy as np
d1=np.array([1,2,3])
d2=np.array([[1,2,3],[4,5,6]])

2.arange()函数可以创建一个等差数组

import numpy as np
#区间是[1,10),步长为3
d3=np.arange(1,10,3)

3.random()相关函数

#d4  3行4列  数的范围是[0,1)
d4=np.random.rand(3,4)
#d5  3行4列  数的范围是[2,8)
d5=np.random.uniform(2,8,size=(3,4))
#d6  3行4列  数的均值为0,方差为1
d6=np.random.randn(3,4)
#d7  3行4列  数的范围是[10,20)
d7=np.random.randint(10,20,size=(3,4))

创建特殊数组的方法有如下几种方法
1.zero()函数创建元素值都是0的数组

#生成一个3行4列的元素都为0的数组
d8=np.zeros([3,4])
#或者 d8=np.zeros((3,4))

2.ones()函数创建元素值都是1的数组

#生成一个3行4列的元素都为1的数组
d9=np.ones([3,4])

注意,zero()函数和ones()函数在使用时的参数不能直接写(3,4),参数必须是列表类型或者元组类型

2.数组对象的重要属性

数组对象的重要属性

3.NumPy数组运算

数组运算可以分为以下三种
数组运算

1.矢量化运算
例如a=[1,2,3],b=[10,20,30],求a+b?

d1=np.array((1,2,3))
d2=np.array((10,20,30))
print(d1+d2)

运行结果:

[11 22 33]

2.广播机制
3.数组与标量运算
标量运算会产生一个与数组具有相同行和列的新矩阵,其原始矩阵的
每个元素
都被相加、相减、相乘或者相除。
数组与标量运算
例如:

d1=np.array((1,2,3))
print(d1+10)

运行结果:

[11 12 13]
4.数组的转置与轴对称

数组的转置指的是将数组中的每个元素按照一定的规则进行位置变换,最常见的就是行与列的互换
数组的转置与轴对称有三种实现方式:

  • T属性
  • transpose(指定顺序排列所有的轴编号)
  • swapaxes(相交换的两个轴编号)

所谓轴编号,就是例如d4=np.random.rand(3,4),对它这个二维数组来说,轴编号为0的就是行(3行),轴编号为1的就是列(4列)。那么对于三维的数据类型来说,分为块,行,列所对应的轴编号就是0,1,2

1.T属性

d7=np.random.randint(10,20,size=(3,4))
d8=d7.T
print(d7)
print(d8)

运行结果:

[[15 15 12 16]
 [18 18 18 11]
 [17 12 11 18]]
[[15 18 17]
 [15 18 12]
 [12 18 11]
 [16 11 18]]

2.transpose()

d7=np.random.randint(10,20,size=(3,4))
d8=d7.transpose(1,0)
print(d7)
print(d8)

运行结果:

[[19 19 13 16]
 [16 11 19 18]
 [19 19 17 11]]
[[19 16 19]
 [19 11 19]
 [13 19 17]
 [16 18 11]]

3.swapaxes()

d7=np.random.randint(10,20,size=(3,4))
#下面这句话的意思就是将0轴与1轴交换,那么你写swapaxes(1,0)也是一样的
d8=d7.swapaxes(0,1)
print(d7)
print(d8)

运行结果:

[[18 15 16 11]
 [17 16 16 13]
 [18 14 17 19]]
[[18 17 18]
 [15 16 14]
 [16 16 17]
 [11 13 19]]
5.NumPy通用函数

接受一个数组参数的函数称为一元通用函数
NumPy通用函数1
NumPy通用函数2

具体格式为:

import numpy as np
b=np.sqrt(a)

接受两个数组参数的则称为二元通用函数
NumPy通用函数3

6.数组统计运算

数组统计运算

7.线性代数模块

矩阵乘法的dot()方法
矩阵乘法的dot()方法
例如:

d7=np.random.randint(0,3,size=(2,3))
d8=np.random.randint(0,3,size=(3,2))
print(d7)
print(d8)
d9=np.dot(d7,d8)
print(d9)

运行结果:

[[2 2 0]
 [2 0 2]]
[[2 2]
 [2 0]
 [0 0]]
[[8 4]
 [4 4]]

2.Pandas库

Pandas库中有两个主要的数据结构:SeriesDataFrame
Pandas库中的两个主要的数据结构

1.Series对象

Series对象
Series的创建
pandas.Series( data = None , index = None )
其中,data表示传入的数据index表示索引,默认创建0-N的整数索引
例如:

import pandas as pd

#创建一维数据
a=pd.Series([1,2,3,4,5])
print(a)
#创建一维数据 并指定索引
b=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
print(b)

运行结果:

0    1
1    2
2    3
3    4
4    5
dtype: int64
a    1
b    2
c    3
d    4
e    5

这里跟字典中的键值对类似,当然也能用字典来构建Series对象:

year_data={2001:17.8,2002:20.1,2003:16.5}
ser_obj2=pd.Series(year_data)

Series对象的两个属性的获取
获取Series对象的索引:
ser_obj.index
获取Series对象的数据:
ser_obj.values

2.DataFrame对象

DataFrame是一个类似于**二维数组或表格(如excel)**的对象,它每列的数据可以是不同的数据类型。如下图:
DataFrame对象

注意,DataFrame的索引不仅有行索引还有列索引数据可以有多列

DataFrame对象的创建:
pandas。DataFrame( data = None , index = None , columns = None)
其中,data表示传入的数据index表示行标签,默认自动创建0-N的整数索引columns表示列标签
例如:

#通过传入数组来创建DataFrame类对象
demo_arr=np.array([['a','b','c'],['d','e','f']])
df_obj=pd.DataFrame(demo_arr)
print(df_obj)

运行效果:

   0  1  2
0  a  b  c
1  d  e  f

用上columns属性之后:

demo_arr=np.array([['a','b','c'],['d','e','f']])
df_obj=pd.DataFrame(demo_arr,columns=['NO1','NO2','NO3'])
print(df_obj)

运行效果:

  NO1 NO2 NO3
0   a   b   c
1   d   e   f

DataFrame对象的数据的获取
通过列索引的方式获取数据:
d=df_obj['NO2']
通过访问属性的方式获取数据:
d=df_obj.NO2'
另外还有一些操作:
增加一列数据df_obj['NO2'] = ['g','h'](这和字典的操作是差不多的)
删除一列数据del df_obj['NO3']

3.Pandas读写文件

1.读取文件
read_csv():读取CSV文件数据,转换成DataFrame对象
例如:pd.read_csv(path,sep=',',names=None...)
其中,path指的是文件路径sep是指定使用的分隔符,默认用分隔,names:如果不包含标题行,则将参数设置为None
1.写入文件
to_csv():读取CSV文件数据,转换成DataFrame对象
例如:pd.read_csv(path=None,sep=',',index=True...)
其中,path指的是文件路径sep是指定使用的分隔符,默认用分隔,index:默认为True,若设置为False,则将不会显示索引
下面看一个简单的实验,读取CSV文件操作学生数据计算总分并写入新的CSV文件
方法一:

a=pd.read_csv('a.csv',names=None)
a['总分']=a['语文']+a['数学']+a['英语']
a.to_csv('b.csv',index=False,sep=' ')

方法二:

a=pd.read_csv('a.csv',names=None)
#axis=1就是对行求和,这与之前的swapaxes有点区别,不光时参数名字不同,行与列的轴编号也不同。
sum_lt=a.sum(axis=1)
a['总分']=sum_lt
a.to_csv('c.csv',index=False,sep=' ')

源文件a.csv

姓名,语文,数学,英语
张三,80,80,80
李四,90,90,90
王五,70,70,70
赵六,70,80,90

运行结果:
b.csvc.csv

姓名 语文 数学 英语 总分
张三 80 80 80 240
李四 90 90 90 270
王五 70 70 70 210
赵六 70 80 90 240
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偶尔躲躲乌云_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值