Data Wrangling with Python学习笔记

Chapter 3 Numpy、pandas、Matplotlib

一、Numpy数组操作

1、数组可以由整数、浮点数、布尔值、字符串甚至混合类填充,大多数情况下数字数据类型占主导地位。(与列表一致)
2、Numpy的主要优点之一是处理或者创建一维或者多维数组。与python列表不同,Python列表被认为是简单的数组,Numpy数组用于向量化操作,只需一行代码就可以处理大量数据。
3、Numpy数组相加,当做向量相加,与列表不同。
4、Numpy数组数学运算(+、-、*、/),都和向量类似。
5、Numpy数组的函数:

np.array(list) ##将列表转化为数组
np.log() 
np.exp()
np.sin()
np.zeros(n) #全零向量
np.zeros((n,m,k)) ##可设定二维或者三维
np.ones(n) #全1向量
np.ones((n,m,k)) ##可设定二维或者三维
np.eye(n) #单位矩阵
np.random()##随机形状的矩阵
np.random.randint(low,high,size)##可设定上界、下届以及形状,二维三维都可

6、生成数组

np.arange(5,16)#可根据指定的最小、最大和步长的大小创建一连串数字
np.linspace(1,5,11)#在两极值之间创建一连串数字

7、创建多维数组

#(1)先创建一个列表的列表,然后转换为二维数组
list2d = [[1,2,3],[4,5,6],[7,8,9]]
mat1 = np.array(list2d)
#(2)将元组转化为二维数组
tuple2d = np.array([(1,2,3),(4,5,6),(7,8,9)])
mat_tup = np.array(tuple2d )
np.random.randint(low,high,size)##可设定上界、下届以及形状,二维三维都可
np.random.randint(low,high,seq).reshape(n,m)

8、二维数组的维度、形状、大小和数据类型

mat1.ndim #矩阵维度2
mat1.size #矩阵大小9
mat1.shape#矩阵形状(3,3)
mat1.dtype#矩阵数据类型int32

9、reshape 和ravel函数
reshape函数可以进行矩阵重塑,改变数组形状

#重塑矩阵形状
mat2 = np.random.randint(1,100,30)
mat2.reshape(3,)
mat2.reshape(2,3,5) ##三维数组
mat2.reshape(6,5)
#矩阵降维--降到1维
b_flat = mat2.ravel() ##等价于mat2.reshape(30,)
b_flat = mat2.flatten() 

10、矩阵切片

matrix_1 [0:2,[1,4]] ##矩阵可以取连续位置,也可以不取连续位置
matrix_1 [1,2] #等价于matrix_1 [1][2]
matrix_1 [matrix_1 > 50] ##条件子集

11、数组的操作(矩阵)-加减乘除和线性组合

#加减乘除
pow(matrix_1 ,2) ##次幂
A = matrix_1 + matrix_2
B = 2*matrix_1 - 3*matrix_2
C = matrix_1 * matrix_2
D = matrix_1 / matrix_2

12、数组栈并列或者并排在一起

a = np.array([[1,2,3],[4,5,6]])
b = np.array([[3,4,5],[8,9,10]])
print(np.vstack(a,b)) ##行合并
print(np.hstack(a,b)) ##列合并

二、pandas-DataFrame

1、创建pandas序列
可以通过列表、数组(numpy-array)、字典等方式创建序列。

import pandas as pd
pd.Series(arrary_1,labels) ##通过列表或者数组创建时
pd.Series(arrary_1) ##通过字典创建时

2、函数可以作为序列的元素

print(pd.Series(data=[sum,print,len]))

3、创建pandas DataFrame
可以基于数组和字典来创建,需要设置column和index

pd.DataFrame(data,index=,column=) #由数组创建
pd.DataFrame(data,index=) #由字典创建

4、查看部分DataFrame(索引&切片)

df.head()#默认查看前5行
df.tail()#默认查看最后5行
##Bracket方法 ##根据列名来取数据
df['column1'] ##单括号,取一列
df[['column1','column2']] #双括号,可以取多列
##基于标签的loc方法:可以通过行的名称来访问数据
df.loc[["b","c"]]
##基于索引的iloc方法:可以通过行的数字索引访问行
df.iloc[[1,2]]
##基于loc方法,可以同时选择行和列的部分内容
df.loc[[i for i in range(5,10)],["a","b","c","d"]]

5、删除DataFrame中的行或者列-drop()
注意:df.drop()会创建DataFrame的副本,不会更改原始的DataFrame。但可以通过设置参数inplace=True来改变原始DataFrame,此改变不可逆,请慎重使用。

df.drop('A',axis=0) ##删除行,不改变原DataFrame
df.drop('A',axis=1) ##删除列,不改变原DataFrame
df.drop('A',axis=0,inplace=True) ##删除行,改变原DataFrame
df.drop('A',axis=1,inplace=True) ##删除列,改变原DataFrame

三、可视化 Matplotlib

1、描述性统计分析有两种比较广泛的方法:
1)图形技术:条形图、散点图、线条图、方框图、直方图等;
2)集中趋势和分布的计算:平均值、中位数、众数、方差、标准差、极值等

##简单散点图
import matplotlib.pyplot as plt
import numpy as np
age = [np.random.randint(20,40,10)]
weight = [np.random.randint(30,80,10)]
plt.scatter(age,weight) 
plt.show()
##优化散点图
plt.figure(figsize=(8,6))
plt.title("Plot of XX",fontsize=20) ##标题
plt.xlabel("age(years)",fontsize=16) ##横坐标
plt.ylabel("weight(kgs)",fontsize=16)##纵坐标
plt.grid(True)##画布网格
plt.ylim(0,100) ##纵坐标的高度
plt.xticks([i*5 for i in range(12)],fontsize=15) #横坐标的尺度
plt.yticks(fontsize=15)
plt.scatter(x=age,y=weight,c='orange',s=150,edgecolors='k')#画散点图
plt.text(x=20,y=85,s="Weights after 18-20 years of age",fontsize=15)##图片上的文字
plt.vlines(x=20,ymin=0,ymax=80,linestyles='dashed',color='blue',lw=3)##图中垂直线
plt.legend(['Weight in kgs'],loc=2,fontsize=12) ##图片的标记
plt.show()#展示图片

2、生成随机数

###均匀分布
np.random.randint(1,10,size=10)#生成指定范围的整数(上限、下限),size可省略
np.random.random(size=15)##随机返回0-1的随机数,size表示个数
np.random.rand(3,3)##生成服从0-1的矩阵
np.random.uniform(n,m)#指定范围内随机数
np.random.shuffle()##随机打乱列表
np.random.sample()##随机抽样

##二项分布
np.random.binomial(10,0.6,size=8)
#柱状图
plt.figure(figsize=(7,4))##生成画布区域及确定区域大小
plt.bar(left=np.arange(1,9),height=x)
plt.xlabel("Experiment number",fontsize=15) ##fontsize 是字体的大小
plt.ylabel("Number of sucess",fontsize=15)
plt.show()

##正态分布-直方图
x=np.random.normal(local,sacle,size)##local是均值,scale是标准差
plt.hist(x,color='orange',edgecolor='k')
plt.show()

3、描述性统计

df.shape ##
df['age'].count()
df['age'].sum()
df['age'].mean()
df['age'].median()
df['age'].std()
df['age'].describe()##适用于包含数字的列

4、DataFrame中也有内置画图工具

df.hist()
plt.show()

不过还是更推荐Matplotlib,可以画出更完美的图。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值