[Python]数据分析常用库

anaconda平台都有

numpy

导入

import numpy as np

查看版本

np._version_

numpy数组构造

np.array([1,2,3])
构造一维数组
[1,2,3]
np.array([1,2,3],[4,5,6])
构造二维数组
[1,2,3],
[4,5,6]
np.ones(shape=(3.2))
以1填充的3行2列二维数组
[1,1],
[1,1],
[1,1]
np.zeros(shape=(3.2,3))
以0填充三维数组,由3个3X2的二维数组构成
[[0,0],
[0,0],
[0,0]],
[[0,0],
[0,0],
[0,0]],
[[0,0],
[0,0],
[0,0]]
np.full(shape=(4,3),fill_value=5)
四行三列一个,5填充的三维数组
[[5,5,5],
[5,5,5],
[5,5,5],
[5,5,5]]
np.random.randint(0,10,size=(2,3))
构建0-10随机数的2×3的二维数组
np.random.random(size=(3,4))
构建0-1随机浮点数的3×4的二维数组
np.random,permutation(10)
构建0-9的随机索引(随机排列,不重复)
np.linspace(0,10,11)
构建等差数列,0-10之间,11个数字
[0,1,2,3,4,5,6,7,8,9,10]
np.arange(0,10,1)
用步长构建等差,0-10,步长为1,不包含10
[0,1,2,3,4,5,6,7,8,9]

一维数组访问

array = [7,8,10,11,8,6,20,9]

numpy数组与列表访问方法一致,都利用[索引]

array[0] 结果是7 array[4] 结果是8 array[-1] 结果是9
array[:2] 结果是[7,8]

numpy数组也有特殊的,比如可以使用列表作为索引项

array[[1,2,1,2]] 结果是[8,10,8,10]

也可以使用布尔列表访问

array[[true,false,true]] 结果是[7,10]
array[array > 9] 结果是[10,11,20]

高维数组访问

[[9,8,7],
[7,8,6]]

常规列表访问

array[0] 结果是[9,8,7] array[0][0] 结果是9 array[1,2] 结果是6

数组运算

array1
[1,2,3],
[4,5,6],
[2,3,4]
array2 = np.array([1,2,3])
array3 = np.array([1],[2],[3])

数组加常数,array1+10

[11,12,13],
[14,15,16],
[12,13,14]

两个符合广播机制(重复现有数组结构,补充维度,扩展成可运算的数组)的数组相加

array2会扩展成

[1,2,3],
[1,2,3],
[1,2,3]

array3会扩展成

[1,1,1],
[2,2,2],
[3,3,3]

array2 + array3

[2,3,4],
[3,4,5],
[4,5,6]

([1,2,3]) + ([1,2],[3,4]) 无法扩展会报错

numpy的排序方法

data = np.random.permutation(10)
生成不重复的0-9十个数字,假定为[8,7,5,4,9,6,3,2,1,0]
np.sort(data)
numpy的sort方法不会更改data值,data此时还为[8,7,5,4,9,6,3,2,1,0]
但是np.sort(data)的返回值为[0,1,2,3,4,5,6,7,8,9]
data.sort()
将data从小到大排列,data.sort是没有返回值的,直接更改data的值为[0,1,2,3,4,5,6,7,8,9]

numpy的拷贝方法

c_data = data.copy()
c_data[0] = 9
c_data会被更改掉一个数字,而data保持不变

numpy的级联方法

array1 = np,random.randint(0,10,size = (3,2))
array2 = np,random.randint(0,10,size = (3,3))
np.concatenate((array1,array2),axis=1)
数组1为3行2列,数组2为3行3列,np.concatenate默认是纵向连接,也就是加行。但数组1和2的列不同,不能纵向连结,axis=1,将连接方式改为横向,也就是扩列。

pandas

导入

import pandas as pd
from pandas import Series,DataFrame
Series 一维列表 包含可显示的索引 可以通过index进行调整
pd.read.excel('xxxx.xlsx')
pd.read.csv('xxxx.csv')
数据读取

基本的pandas数组,Series和DataFrame

Series([1,2,3])
0 1
1 2
2 3
s = Series([1,2,3],index = ['Sun','Moon','Star'])
Sun 1
Moon 2
Star 3

s['Sun']
s.loc['Sun']
显式访问,第二种是padas专有,结果为1
s[0]
隐式访问结果为1
s.loc[s >1]
Moon 2
Star 3

DataFrame 二维表格 引入行标签列标签,行标签是index,列标签是columns
DataFrame(data=np.random.randint(0,10,size=(3,5)),index=['Sun','Moon','Star'],columns=['v','w','x','y','z'])
v w x y z
Sun 1 8 0 6 7
Moon 2 5 5 6 1
Star 3 3 6 7 2

df.loc['Sun','y']
显式访问为6
df.loc[['Sun','Star'],'y']
Sun 6
Star 7
Name:y
df.loc['Sun',['x','y']]
x 0
y 6
Name:Sun
参数中的某一维可以传列表,也可以传布尔

pandas数组的计算

pandas的数组运算通常采用索引对齐,pandas和numpy的运算通常采用广播
DataFrame + DataFrame,相同索引相加,没有顺序问题
DataFrame + Series,对所有相同索引相加,默认基于列表签运算
v w x y z
Sun 3 8 6 6 6
Moon 2 6 9 6 6
Star 3 4 8 8 0

df.loc['Sun',['v','x','y','w']]
v 3
x 6
y 6
w 8
Name: Sun, dtype: int64
由于这个一维数组没包含所有列标签,首先会用Na补齐z列,再相加
v w x y z
Sun 6.0 16.0 12.0 12.0 NaN
Moon 5.0 14.0 15.0 12.0 NaN
Star 6.0 12.0 14.0 14.0 NaN

如果与
df.loc[['Sun','Moon'],'w']
Sun 8
Moon 6
Name: w, dtype: int64
直接相加的话,列标签没有Sun和Moon,Series数组会用Na补足其vwxyz列,DataFrame二维数组会用Na补足齐Sun和Moon列,结果是3×7的Na数组
Moon Sun v w x y z
Sun NaN NaN NaN NaN NaN NaN NaN
Moon NaN NaN NaN NaN NaN NaN NaN
Star NaN NaN NaN NaN NaN NaN NaN

df.add(df.loc[['Sun','Moon'],'w'],axis = 'index')
利用add命令和axis的’index’参数,可以进行行标签加法
v w x y z
Moon 8.0 12.0 15.0 12.0 12.0
Star NaN NaN NaN NaN NaN
Sun 11.0 16.0 14.0 14.0 14.0

pandas数组的聚合运算

score = df.loc['Sun',['v','x','y','w']]
score.sum(),score.mean(),score.min(),score.var(),score.max(),score.std()
(23, 5.75, 3, 4.25, 8, 2.0615528128088303)
求和,平均值,最小值,方差,最大值,标准差,mean函数针对布尔数据可以看出true的占比
df.sum()
v 8
w 18
x 23
y 20
z 12
dtype: int64
DataFrame默认是列标签求和
df.sum(axis=1)
Sun 29
Moon 29
Star 23
dtype: int64
(score>5).any()
True
score里存在大于5的数
(score>5).all()
False
score中并非所有都大于5
(df>5).all()
v False
w False
x True
y True
z False
dtype: bool
DataFrame基于列表签运算,如需变为行
(df>5).all(axis=1)
series对象包含一个map函数,可以对所有的内容批量处理执行map后面的程序
def add_yuan(x):
return(str(x)+'元')

score.map(add_yuan)
v 3元
x 6元
y 6元
w 8元

matplotlib

导入

import matplotlib.pyplot as plt
%matplotlib inline

设置画板

plt.subplot(111)
111代表1行1列第1个位置 221表示2行2列第一个
plt.subplot(222)
plt.subplot(223)
34cf8bb56884b76190b7c13b17cdb608

美化画板

plt.xlabel('个数')
设置横轴名称
plt.ylabel('个数',fontsize=20)
设置纵轴名称及字体大小
可以使用下划线接收绘图函数,来屏蔽绘图函数的返回值,比如 _ = plt.bar([‘a’,’b’,’c’,’d’,’e’],y) 或者在绘图函数下方增加无返回值的函数plt.show()
plt.xticks(rotation=60),plt.yticks(rotation=60)
对x轴和y轴上的数字
plt.bar(['a','b','c','d','e'],y,color = np.random.random(size=(5,3)))
plt.plot(x,y,color=(0,0.5,0))
所有绘图函数,都可以添加color参数,color是0-1的三个小数组成
import warnings
warnings.filterwarnings('ignore')
忽略报警信息
sns.set()
seaborn的默认美化设置
plt.rcParams['font.sans-serif'] = 'SimHei'
设置字体,支持中文,需要在/root/anaconda3/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf及/usr/share/fonts中有对应的SimHei,tff的字体,同时删除/root/.cache/matplotlib的缓存

折线图

plt.subplot(221)
x = np.linspace(0,3*np.pi,100)
plt.plot(x)
plt.subplot(224)
y = np.sin(x)
plt.plot(x,y)

b9e4370dde3530bc432a65541eebd20b

注意:单独的x绘图,其实是y=[1,2,3,4,5…] 这种绘图方式
另外,两个数据都可以使用文本列表,文本列表的数值就是按顺序[1,2,3,4,5…]排列,通常可以使x轴以文本列表的形式出现,比如[‘jan’,’feb’,’march’,’april’,’june’]

直方图

x = np.random.randint(0,10,5)
y = np.cos(x*x*10)
plt.bar(x=['a','b','c','d','e'],height=y)

392cd2d9c723cddd208beb5a33cf58c2
由于直方图是非连续的有限数组,参数1表示横轴,参数2表示高度,也可以省掉赋值运算,直接传两个参数
plt.bar(['a','b','c','d','e'],y)

饼图

plt.figure(figsize=(5,5))
调整画布比例
plt.pie(x,labels = ['a','b','c','d','e'],autopct = '%.2f%%')
绘制饼图,x参数是绘制用的数组,第二个参数是标签,autopct是百分比,%.2f是显示方式,%%两个百分号转义一个百分号
plt.show()

屏蔽返回值

cc441b7d02c10808857342aa6a520632

seaborn

导入

import seaborn as sns
df = DataFrame(data=np.random.randint(0,10,size=(3,5)),index=['Sun','Moon','Star'],columns=['v','w','x','y','z'])
v w x y z
Sun 4 6 5 2 1
Moon 9 2 5 3 4
Star 5 9 3 9 1

sns.countplot(df['x'])

针对x列的计数统计直方图

a623d25ea179b7bd592a93147941c0a4

re

导入

import re
正则表达式导入
def remove_space(x):
return re.sub(r'\s+','',x)

将x里所有符合\s+正则规则的内容都替换掉并且返回

原创文章,作者:熊阿初,如若转载,请注明出处:https://www.guofc.com/1027.html

Like (0)
熊阿初的头像熊阿初
Previous 2023年3月12日
Next 2023年4月3日

相关推荐

发表回复

Please Login to Comment