python数据分析02--numpy模块/pandas模块

1 NumPy

用于科学计算、数学计算
ndarry,可以理解为数组里面嵌套数组

1.1 基本方法及常用属性

import numpy as np
import matplotlib.pyplot as plt

"""
数组与列表的区别:数组只能存储统一类型的数据元素。
优先级:字符串>浮点型>整数
"""
# 使用array()创建一个一维数组
np.array([1,2,3,4,5])

# 使用array()创建一个多维数组
np.array([[1,2,3],[4,5,6]])

# 将外部的一张图片读取加载到numpy数组中,然后尝试改变数组元素的数值查看对原始图片的影响
# 读取图片到numpy数组
img_arr = plt.imread('img_path')
# 将numpy数组的数据显示成一张图片
plt.imshow(img_arr)
# 调整颜色
plt.imshow(img_arr - 100)


# 给定形状和类型,建立3个4行5列的全是1的数组
np.ones(shape=[3,4,5])

# 在0-100间生成20个数
np.linspace(0,100,num=20)
# 设置了步长step
np.arange(0,100,step=5)
# 0-100间随机生成20个整数,从给定的由低到高的范围抽取随机整数
np.random.randint(0,100,size=(4,5))
# --------
np.random.random(size=(2,3)
# 从均值为0方差为1的正态分布中抽取样本
np.random.randn(2,3)

# numpy常用属性
# 1.描述数组每个维度的数量
img_arr.shape
# 2.显示数组尺寸
img_arr.size
# 3.描述数组类型
img_arr.dtype
# 4.计算不同类型存储最大最小的数值
np.iinfo('int8')

# numpy的数据类型
array(dtype=?)	# 设定数据类型
arr.dtype='?'	# 修改

# numpy的数值类型实际上是dtype对象的示例,并对应唯一的字符
arr = np.array([1,2,3,4,5])
arr.dtype

# 修改arr的数据类型为utf-8
arr.dtype = 'utf-8'

# 查看数组本身的类型是什么
tpye(arr)

[numpy常用属性和方法](https://blog.csdn.net/weixin_43874036/article/details/98599123)

1.2 索引与切片

# numpy的索引和切片操作(重点)

import numpy as np
import matplotlib.pyplot as plt

arr = np.random.randint(0,100,size=(6,5))
# 索引操作和列表同理

# 取出第一行列表
arr[0]

# 切出数组的前两行
arr[0:2]
# 切出数组的前两列,第一个冒号代表行,第二个冒号代表列,逗号分隔
arr[:,0:2]
# 切出前两行前两列
arr[0:2, 0:2]
# 数组行倒置
arr[::-1]
# 列倒置
arr[:, ::-1]
arr[::-1, ::-1]

# 图片行列颜色倒置
plt.imshow(img_arr[::-1,::-1,::-1])
# 图片裁剪
plt.imshow(img_arr)	# 读取
plt.imshow(img_arr[60:400, 75:350]) # 裁剪

# 变形reshape:变形前后数组的容量不可以发生变化,就是该有多少数得有多少数
arr.reshape((30,))
arr.reshape((30,)).reshape((2,15))	# 2行一行15个


1.3 级联操作

# 级联操作:多个numpy数组横向或纵向的拼接,concatenate
# 参数:axis,代表轴向,0代表列,1代表行

import numpy as np

arr1 = np.random.randint(0,100,size=(3,4))
arr2 = np.random.randint(0,100,size=(4,4))

np.concatenate((arr1,arr2),axis=1)	# 按行为标准
np.concatenate((arr1,arr2),axis=0)	# 按列为标准

# 应用:制作一个照片九宫格
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axios=0)

# 常用的聚合操作:
summaxmin、mean

1.4 常见的数学函数

# 常用的数学函数
import numpy as np

np.sin(arr)
# 四舍五入,参数decimals,代表舍入的小数位数,默认为0,如果为负,整数舍到小数点左侧位置
arr = np.array([1.23,3.76,5.1,27,33])
np.around(arr,decimals=-1)

1.5 常见的统计函数

# 常用的统计函数

numpy.amin()	# 用于计算数组中的元素沿指定轴的最大、最小值
numpy.amax()
numpy.ptp()		# 计算数组中元素的最大值与最小值的差
numpy.median()	# 函数用于计算数组a中元素的中位数
.std()	# 标准差,体现数据平均值的分散程度,标准差是方差的平方根
.var()	# 方差

1.6 矩阵相关

# 矩阵相关:矩阵库numpy.matlib,该模块的函数返回一个矩阵,而不是ndarray对象
# 一个 的矩阵是一个由行(row)列(column)元素排列成的矩形阵列。
# 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0
numpy.matlib.identity() 

# 转置矩阵:其实就是按照读列的顺序去生成行,也就行变列,列变行
.T

# 矩阵相乘:a,b都是数组,
numpy.dot(a,b,out=None)

2  1  *  1  2  =  3  4
4  3     1  0     7  8

# 实现过程:第一个数组的行分别乘以第二个数组的列
2*1+1*1  2*2+1*0  =>  3  4
4*1+3*1  4*2+3*0      7  8

2 Pandas

numpy处理数值型数据,pandas处理非数值型数据,比如字符串、时间序列等。
pandas常用的两个类:

  • Series
  • DataFrame

2.1 Series

Series是一种对象,类似于一维数组,由values(ndarray类型)和index组成,可由列表或numpy数组创建,也可以由字典创建。

import pandas as pd
import numpy as np
from pandas import Series,DataFrame

# 默认索引也叫隐式索引,从0开始
Series(data=[1,2,3])

# 自定义索引叫显示索引,可以通过字典来实现
dic = {
	'数学'100'语文'20
}
Series(data=dic)
# 通过index参数设置显示索引
s = Series(data=[1,2,3],index=['a','b','c'])

# Series的索引和切片
s[0],s['a'],s.a
# 切片,切a-c
s[0:2],s['a':'c']

# Series常用属性
s.index		# 索引
s.values	# 值

# Series常用方法
s = Series(data=[1,1,1,2,2,3,4,5,6,6,6,6,7,8])
# 1.取前三个元素
s.head(3)
# 2.取后三个元素
s.tail(3)
# 3.将Series元素进行去重
s.unique()
# 4.统计去重之后的元素个数
s.nunique()
# 5.统计Series中每个元素出现的次数
s.value_counts()


# Series的算数运算:索引一致的元素进行算数运算否则用NaN补空
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[4,5,6],index=['a','d','c'])
s1+s2
# 索引b和d不一致,所以这两项返回NaN

# 判读是否为空,返回布尔值
s.isnull()
s.notnull()
# 将s中的空值进行清洗过滤,可以通过将布尔值作为Series的索引,可以通过.notnull()
s[[True,False,True,False]]

# s1.add(s2)和s1+s2是一样的

2.2 DataFrame

是一种表格型数据结构,由一定顺序排列的多列数据组成。
设计初衷是将Series的使用场景从一维=>多维,所以有行索引index列索引columns值values
可由ndarray创建,也可以由字典创建。

# DataFrame的创建
# ndarray对象创建
DataFrame(data=np.random.randint(0,100,size=(5,6)))

# 字典方式创建,行索引index,列索引dic的键
dic = {
    'name':['jay','tom','bobo'],
    'salary':[1000,2000,3000]
}
df = DataFrame(data=dic,index=['a','c','c'])

# DataFrame的属性
df.shape
df.values
df.index
df.columns

# DataFrame索引操作
# 取列
df['张三']
# 取行,通过显示索引取
df.loc['英语']
# 取第一行,通过隐式索引取
df.iloc[0]
# 通过索引取元素
df.loc['英语','张三']
df.loc['英语',['张三','李四']]

# 中括号中直接作用的切片是行切片
df[0:2]
# 列切片
df.iloc[:,0:2]
# DataFrame的运算
"""
假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
假设张三期中考试数学被发现作弊,要记为0分,如何实现?
李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
"""
dic = {
    '张三':[150,150,150,150],
    '李四':[0,0,0,0]
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
# 1.
qizhong = df.copy()
qimo = df.copy()
(qizhong+qimo) / 2
# 2.数学是第二行,张三是第一位,一步步切片
qizhong.iloc[1,0] = 0
# 3.单独的找到李四这个人,直接加索引
qizhong['李四'] += 100
# 4.需要在所有值上进行操作,就是直接加就行了,都不用什么索引切片
qizhong += 10

你可能感兴趣的:(数据分析)