数据准备、预处理、统计分析及建模、可视化(将目标变量的预测值和实际值进行对比)
Anaconda Navigtor:用于管理工具包和图形用户界面,提供了Jupyter Spyder等编程环境的启动入口
Anaconda Prompt:用于管理工具包和环境的命令行界面
Jupyter Notebook:基于Web的交互式编程环境
Spyder: 基于客户端的Python程序集成开发环境。如果需要通过调试解决程序中的逻辑错误,可以使用spyter, 方便跟踪。
1、内置数据类型6种:数字,字符串,列表、元组、字典
2、模块化:写成函数def 名:
3、面向对象 :
class 类名:
class Time:
def __init__:# 构造方法,用于初始化新创建的对象
self.h = h
self.m = m
self.s = s
def AddOneSec(self):
self.s += 1
if self.s == 60:
self.m += 1
self.s = 0
if self.m ==60:
self.h += 1
self.m = 0
if self.h == 24:
self.h = 0
h = int(input())
m = int(input())
s = int(input())
count = int(input())
t = Time(h,m,s)# 创建Time类对象t,并使用h\m\s初始化t的属性值
4、文件操作
with open("d:\\python\\stuinfo.txt", 'w+') as f:# 以w+方式打开文件
for i in range(len(ls)):# 遍历ls中的每一名学生数据
f.write(str(df[i])) #将当前信息写入文件
f.write('\n')
with open("d:\\python\\stuinfo.txt", 'r') as f:# 以r方式打开文件
ls_read = f.readline #从文件中读取所有学生数据
for i in range(len(ls_read)):# 遍历ls中的每一名学生数据
stu = ls_read[i].strip().split(',')# 按逗号分离出学生的各项信息
print('{0},{1},{2}'.format(stu[0],stu[1],stu[2]))# 格式化输出
5、异常处理
#1-7 异常处理
try: # 异常捕获
pos = df.index(sub, beg) # 通过字符串index方法,从df索引未beg的字符开始及进行sub字串的检索。检索成功则返回第一个匹配字串的起始字符索引,检索失败则产生ValueError异常,该异常会被后面的except ValueError捕获
except ValueError: # 捕获index方法检索事变所产生的ValueError异常
break # index 方法产生产生ValueError异常,说明已经没有匹配的子串,退出while循环
import pandas
==dir(类名 或 对象名)== #查看类(或对象)中包含的方法和属性名称列表
==help(pandas)==# 查看pandas模块的详细帮助信息
1.3.1 csv文件操作
with open("D\\Python\\stu.csv", 'w', newline='') as f:# 打开文件,注意需要将newline参数指定为空字符串
csv_writer = csv.writer(f)
csv_writer.writerow(['','',''])# 写入标题名称
csv_writer.writerows(data)# 将数据写入csv文件
with open('D:\\Python\\stu.csv','r',newline='') as f:# 打开文件,注意需要将newline参数指定为空字符串
csvreader = csv.reader(f)
for line in csvreader:
print(line)
random模块
用于生成随机数,具体查看random模块常用功能
(1)用于生成随机整数
random.randrange()
random.randint()
random.random()等等
(2)进行序列随机处理
random.choice(seq),在seq序列上随机选择一个数返回
random.shuffle(x) x是一个列表,将列表中的元素顺序随机打乱
random.sample(population, k) population表示一个元素序列或集合,k表示采样的元素数量
time模块
time.time()返回当前时间的时间戳
time.localtime([seconds])指定自纪元以来经过的浮点秒数,如省略,seconds默认为当前时间的时间戳
epo= time.localtime(0)获取纪元时间,
cur = time.localtime() 获取当前时间
time.sleep(seconds)程序暂停执行seconds秒time.strftime(format[, tuple])format用于指定时间格式
curtime = time.localtime()
time.strftime('%Y-%m-%d', curtime)
ndim, shape, size, dtype, itemsize
- ndarray.ndim:数组的轴数(维度)
ndarray.shape:返回一个元组,表示数组各维度长度信息
ndarray.size:数组中元素综述,相当于shape元组种个元素的乘积
ndarray.dtype: 表示数组中元素类型的对象
ndarray.itemsize: 数组中每个元素所占字节数
ndarray.dtype.itemsize == ndarray.itemsize
数组的元素类型既可以在创建ndarray类时指定,也可以对已有的ndarray类对象调用astype方法进行修改
from sklearn.datasets import load_boston
boston = load_boston()
data = boston.data #获取特征数据
target = boston.target # 获取目标房价
data.ndim
data.shape
data.size
data.dtype
data.itemsize
target属性也是这样
2.1.3 创建ndarray类对象
numpy.array(object, dtype =None):
参数: object是一个类似于数组的对象,可以是元组或列表,dtye用于指定元素类,如果不知道则默认有系统自动确定元素类型,其他对象具体去查
返回值:一个ndarray对象
import numpy as np
#np.array(object, dtype=None)
x_int64 = np.array([2,3,4])
x_float63=np.array([2,3,4] , dtype = np.float64)
x_2d = np.array([[2,3,4], [5,6,7]])
#np.zeros(shape, dtype)
x = np.zeros(5)
y = np.zeros((2,3), dtype=int)
#np.ones(shape, dtype=None)
#np.empty(shape, dtype = float)
参数:与numpy.zeros参数含义相同
返回值:numpy.ones 用于创建一个所有元素值都为1的ndarray对象,
numpy.empty 用于创建一个所有元素值都 未初始化 的ndarray对象,即随机值的ndarray对象
#np.arrange([start], stop[,step], dtype = None)
参数: start是区间的开始值,默认是0;stop是区间的结束值;step是步长,即ndarray中后一个元素减前一个元素的差值,默认是1,dtype是所创建的元素类型
左闭右开区间
x = np.arange(2,6,-2)
y = np.arange(5)
z = np.arange(3, 6)
#np.linspace(start, stop, num = 50, endpoint = True, ..., dtype=None)
参数:start是区间的开始值,stop是区间的结束值,num是生成ndarray对象的元素数量,默认是50,endpoint是指定生成元素正是否包括end,默认Ture
返回值:ndarray对象,在争夺区间[start, stop]上以等间隔生成的num个值所创建的ndarray对象的元素
x = np.linspace(0, 1, 6)
y = np.linspace(0, 1, 4, endpoint = False)
np.arange和np.linspace 都是只可以生成一维数组,如果希望生成多维数组,可以结合ndarray对象的reshape方法使用
ndarray.reshape(newshape) 参数newshape是一个整数(一维数组)或一个整数元组,用于指定将数组改变为何种形状。
索引:arr[idx_1, idx_2, idx_3, … idx_n]
切片:arr[range_1, range_2, range_3… range_n] range既可以是一个索引值,也可以是一个包含多个索引值的序列,也可以是beg_i: end_i: step_i的形式,beg_i 缺省,从0开始;end_i缺省,到末尾结束;step_i缺省,步长为1
: 几到几
() 几和几
第三行:data[2]
第三行第2列元素和第四列元素置为-1 data[2, (1,3)]
前五行:data[0:5, :] 行
前五行的第二列和第三列:data[0:5,1:3]
前五行第2列元素:data[0:5, 1]
第三行和第五行:data[(2,4),:]
第三行和第五行的 第2列和第4列元素 data[(2,4), :][:, (1,3)]
x.reshape() 改变形状
x.T 转置
形状相同时
x+y
x+2 逐元素加2
x**2 逐元素乘方
x*y 逐元素成分
x@y矩阵乘法
x**y x与y逐元素幂运算结果
广播机制:会自动进行
使用ndarray数组对象进行运算时,如果形状不满足要求,系统会通过简单的元素复制操作自动对长度为1的维度进行拉伸,以使得数组对象可以做响应运算。
Numpy提供了通用函数:
数学运算函数(很多,与数学有关的基本都有),三角运算函数,位运算函数,比较运算函数,浮点运算函数
对于numpy提供的通用函数何以是哟个numpy.info查看相关信息
np.info(np.add)
常用函数和方法:
np.amax(a, axis = None)
- np.amax(a, axis = None)
参数:a是ndarray对象,axis是整数,用于指定计算的轴,默认是None,即返回a中所有元素最大值
np.amin(a, axis = None)
np.ptp(a, axis = None)
计算数组对象a中所有元素的波动幅度(max-min), 或沿指定轴axis计算元素波动幅度
np.median(a, axis= None) 计算中值
np.percentile() 百分位数
mean 均值
var方差
average(a, axis = None, weight=None)加权平均值weights指定权值 通常为数组
sort排序
diff 相邻两个元素的差值,
where(condition) 用于获取条件condition返回结果为真的元素对应的索引
log(x) 逐元素计算自然对数
split(a, indices, axis=0) 用于将素组对象a沿指定轴axis切分成多个子数组对象,标兵以列表形式返回,index用于指定切分位置
hstack(tup) 用于将序列tup中的多个数组对象进行==水平==堆叠,返回堆叠后的数组对象
a=[[1 2]
[3 4]]
b=[[5 6]
[7 8]]
np.hstack([a,b]) [[1 2 5 6]
[3 4 7 8]]
vstack(tup) 垂直堆叠
unique(ar, return_, index = False) 用于滤除数组对象中的重复元素值
整型数组索引:
a=np.array() 3行3列的二维数组
x=np.array([2,1,2])
a[x] 依次获取a中行索引为2,1,1(即第3行,第2行,第1行)的数据 生成数组对象 并返回
y=np.array([0,1,1], [2, 1, 0])
a[y] 依次获取a中行索引为0,1,1的数据生成第一个子数组对象,再一次获取a中行索引为2,1,0的数据生成第二个子数组对象, 两个子数组对象 组成一个大的数组对象 返回 {【[], [], []】,【[], [], []】}
数学运算符类, 三角运算符类,位运算符类,比较运算符类,浮点运算类
Series.index 对象的索引,轴标签
Series.array 基础数据的扩展数组
Series.values 对象的基础数据,跟dtype以ndarray或类似ndarray的形式返回
Series.dtype 基础数据的dtype对象
Series.shape
Series.nbytes 基础数据的字节数
Series.ndim 对象的维度,默认值为1,即一维数组
Series.size 对象中基础数据的个数
Series.empty 对象是否为空的指示符
Series.name 对象名称
data 可以是类数组,可迭代对象,字典或标量值;
index是标签列表,必须是可哈西的,如果未指定,则默认未RangeIndex(0,1,2,...n-1)
name未对象名称,可以缺省
DataFrame.index 行标签
DataFrame.columns 列标签
DataFrame.dtypes
DataFrame.info() 简要信息
DataFrame.select_dtypes([include, exclude]) 根据列的dtypes返回DataFrame对象的 列子集
DataFrame.values 对象的数组,以ndarray数组形式返回
DataFrame.axes 轴标签信息表(行和列的信息列表)
DataFrame.ndim 数组的维度,即轴数 默认为2
DataFrame.size 对象中元素的个数
DataFrame.shape 行数和列数的shape元组
DataFrame.memory_use([index, deep]) 对象每一列内存的使用情况,以字节为单位
DataFrame.empty 对象是否为空的指示符
- 创建DataFrame对象:
df=pd.DataFrame(data, index, columns,dtype,''')
data可以是ndarray数组,可迭代对象,字典,DataFrame对象,其中字典可以包含Series对象,数组,常量或类列表对象等
index是行标签,默认为RangeIndex(1,...n-1)
columns是列标签
dtype 类型,只允许传递当dtype
构建Series或DataFrame对象时,所用到的任何数据或类数组标签都会被转换为一个Index对象,Index对象是一个从标签到数据值的映射,当数据是一列时,Index是标签,当数据是一行时,Index时行标签
Index.values 以ndarray数组形式返回Index对象中的基础数据
Index.array 引用索引中基础数据的数组
Index.to_numpy 表示Index对象中基础数据的numpy数组
Index.dtype
Index.name 对象的名称
Index.shape
Index.size
Index.ndim 对象中基础数据的维度,定义为1
index= pd.Index(data, dtype, copy, name,...)
data类似于一维数组对象
dtype 默认为object
copy表示是否复制输入数据,默认值是False
. [] loc iloc at iat head tail
Series s.label label表示轴标签数据 返回dtype
DataFrame df.col col表示列标签数据 返回Series
DataFrame df.col.row col表示列标签数据,row表示行标签数据
Series s[range]
range: 可以是一个下标位置索引值(从0开始的整数);一个包含多个位置索引值的列表s[[1,2,3]];beg:end:step;与s的轴标签长度相同的布尔数组,提取True所对应的元素
DataFrame df[row_range]
row_range: beg:end:step;一个与df行长度相同的布尔数组,提取True对应的行切片
2、标签索引(列):通过轴标签索引访问数据元素
Series s[label] :label可以是Series对象中定义的标签,也可以是包含多个的标签的列表
DataFrame df[col] :col既可以是DataFrame对象中定义的列标签,也可以是一个包含多个列标签的列表
所以,[]里面既可以是数,也可以是属性名;
[]一次只能访问DataFrame对象的一个维度,位置索引只能实现对DataFrame对象的行切片,标签索引只能实现列切片。
通过列表对Pandas数据进行索引时,要有两组方括号df[[“c1”, “c2”]]
loc:基于标签的索引与切片
Series s.loc[lable_range]
label_range: 一个Series对象中定义的标签;一个包含多个标签的列表;beg:end:step;与Series对象标签长度相同的布尔数组
DataFrame
df.loc[row_range]
row_range: DataFrame对象中定义的行标签;一个包含多个行标签的列表;beg:end:step;与行标签长度相同的布尔数组
df.loc[row_range, col_range]: 行+列
Series s.iloc[i_range]
range: 一个整数位置索引;包含多个整数索引位置的列表;beg:end:step;布尔数组
DataFrame df.iloc[i_range] df.iloc[i_range, j_range]
Series s.at[label]
Series s.iat[i]
DataFrame df.at[col, row]
DataFrame df.iat[i,j]
Series s.head(n)/s.tail(n) n默认为5
DataFrame df.head(n)/tail(n)
1、缺失数据
isna notna fillna dropna
isna()/notna
pd.isna(data) == data.isna()
pd.notna(data) == data.notna()
data可以是一个Series对象,返回值为布尔Series对象;也可以是一个DataFrame对象,返回值为布尔DataFrame对象;可以是一个标量值,此时返回一个布尔值
1、fillna() 将缺失值重新赋值为新的元素值
result = data.fillna(value, method=None, ...)
data可以是Series/DataFrame
value 可以是一个字典对象,Series对象或者DataFrame对象,用于将data中匹配标签(Series对象)或匹配列标签(DataFrame对象)所对应的缺失值替换为不同的值
mothod表示填充NA值的方法,默认为None,method = ’ffill‘或者methd='pad'时使用上一个有效值填充NA值 method='bfill'/'backfill'使用下一个有效值来填充NA值
返回值:为新赋值的Series或DataFrame对象。
2、dropna 实现行或列删除NA值功能
result = data.dropna(axis = 0, how='any',...)
axis:
如果data是Series对象,则axis只能等于0,直接删除所有的NA值
data是DataFrame对象,参数为0或'index',实现删除缺失值所在的行; axis为1或'columns',则删除缺失值所在的列
how:
how = 'any' 表示只要有NA值存在,就删除所在的行和列
how=’all‘ 表示只有当全部元素都是NA是才会执行删除操作
返回值为删掉缺失值的Series或DataFrame对象
3、interpolate() 通过插值法补充缺失的数据点
result = data.interpolate(method='linear', axis=0..)
method表示使用的插值方法,缺省时默认为线性差值'linear' ,还有time,nearest, zero,slinear,等
2、删除重复数据
data是Series对象时,没有subset参数,subset是列标签参数,表示考虑某些特定列来标识重复数据,缺省时考虑全部列。
keep决定标记哪个重复数据,缺省时默认为first,即对于data中的每一组数据,第一次出现的位置标记为False,其他重复出现的位置标记为True。
data.drop_duplicates(subset=None,keep='first'...)
参数与duplicated方法相同,keep参数决定保留哪一行重复数据,返回值为删掉重复数据Series或DataFrame对象。
数据 标签 中存在重复项:Index.duplicated方法确定数据标签中是否存在重复值,
df3 = df[~df.index.duplicated(keep='last')]
data = pandas.read_csv('')
bins = [min(data.score),80,90,max(data.score)+1]
labels = ['80分以下', '80-90分', '90分以上']
data["cut"] = pandas.cut(data.score, bins, labels=labels, right=False)
先利用pivot_table()函数进行数据透视表分析,然后指定axis参数对数据透视表按行或列计算出所占比例
date,time,datetime
#date类
datetime.date(year, month, day) 自定义创建日期对象
date.year, date.month, date,day 提取日期对象的年 月 日
date.max,date.min date对象能表示的最大最小日期
date.today() 返回一个当前本地日期对象
date.replace(year, month, day) 创建新的日期对象,用指定日期替换原date对象的内容,可单独修改年,月,日中的一项或多项
date.weekday() 周几 0~6 对应周一到周日
date.isoweekday() 周几 1`7对应周一到周日
date.isocalendar() 返回格式为(year, month, day)的元组
date.isoformat() 返回格式为"YYYY-MM-DD"的字符串
#time类
datetime.time(hour, minute[, second[, microsecond[,tzinfo]]]):自定义创建时间对象,可以精确到毫秒,tzinfo用于指定时区,不常用
time.hour, time.minute, time.second, time.microsecond,time.tzinfo: 分别提取time类中的时,分,秒,毫秒,时区,等数据
time类中没有类似于date类中today()的方法,往往用time.time()方法获取本地时间戳,在对得到的时间戳进行格式化。
#datetime
datetime.datetime(year,month,day[,hour[, minute[, second[, microsecond[,tzinfo]]]]]) 将date类和time类整合起来
datetime.combine(date, time):数据date和time对象创建一个datetime对象
datetime.today() 返回一个表示本地时间的datetime对象
datetime.now([tz]) 返回本地时间的datetime对象
datetime.date() 获取dateduix
datetime.time() 获取time对象
对含有三个元素的一维列表进行格式化
字符串,np.datetime64对象,datetime模块中的datetime对象
pd_todatetime() 用pandas中to_datetime对不同的时间序列数据进行统一的格式化,特定格式可以使用format=' '进行指定
dti = pd.to_datetime( ['1/1/2018', np.datetime64('2018-01-01'),datetime.datetime(2018,1,1)] )
运行结果:DatetimeIndex(['2018-01-01', '2018-01-01', '2018-01-01'], dtype='datetime64[ns]', freq=None)
perios:固定十七,取值为整数或None
pd.date_range() 至少指定start, end, periods中的两个参数值
dti = pd.date_range('2018-01-01',periods=3, freq='H')
运行结果:
DatetimeIndex(['2018-01-01 00:00:00', '2018-01-01 01:00:00',
'2018-01-01 02:00:00'],
dtype='datetime64[ns]', freq='H')
idx = pd.date_range('2018-01-01',periods=5, freq='H')
ts = pd.Series(range(len(idx)), index = idx)
ts
2018-01-01 00:00:00 0
2018-01-01 01:00:00 1
2018-01-01 02:00:00 2
2018-01-01 03:00:00 3
2018-01-01 04:00:00 4
Freq: H, dtype: int64
pd.Timedelta(" ")指定时间长度
time.localtime 仅对时间戳进行封装,输出结果时结构体形式
import time
localtime = time.localtime(time.time())
localtime
运行结果:
time.struct_time(tm_year=2022, tm_mon=5, tm_mday=4, tm_hour=9, tm_min=51, tm_sec=1, tm_wday=2, tm_yday=124, tm_isdst=0)
time.asctime()函数可以生成固定格式的日期时间字符串
localtime = time.asctime(time.localtime(time.time()))
localtime
运行结果:
'Wed May 4 09:53:44 2022
- time.acstime()返回的日期时间字符串格式是固定的
time.strftime()函数可以返回格式话日期时间字符串
time.mktime()函数可以返回指定日期时间字符串对应的时间戳
格式化日期数据的符号
%y, %Y, %m, %d, %H, %I ,%M等等
按日
td/np.timedelta64(1,'D')
td.astype('timedelta64[D]')
向下、向上重采样(对应转换为时间间隔为5分钟,50天)
将秒数按5分钟间隔重采样
re = ts.resample('5Min')
re.asfreq()#输出重采样结果
re.sum()/re.mean()等等重采样之后的结果
向上重采样 由于数据频率增大,采样时间点增加, 往往需要指定填充值 .ffill()
Figure 图形
Axes 坐标轴
Subplots 子图
Matplotlib将数据绘制在Figure(图形)对象上,每个Figure对象可以包含一个或多个Axes(坐标轴),多个Axes会将Figure切分成多个区域展示不同的Subplots(子图)。每个坐标轴都可以设置标题,x轴标签,y轴标签等属性。
创建Figure, Axes对象的简单方法是使用pyplot提供的subplots方法
fig, ax = matplotlib.pyplot.subplots(nrow=1, ncols=1,...)
参数:
nrows 子图网格的行数 默认值1
ncols 子图网格的列数 默认值1
返回值:
fig为Figure对象,ax既可以是一个Axes对象,也可以是一个Axes对象序列
pyplot是Matplotlib的关键模块,提供了很多构建图表的函数接口,pyplot提供的绘图方式类似于Matlab,主要适用于交互式绘制图形。
1、线形图
plot() 常用于显示数据的变化趋势。
matplotlib.pyplot.plot([x], y, fmt, [x2], y2, [fmt2], ... ,**kwargs)
x表示x轴数据,可为列表,缺省是根据x轴数据长度设置为索引数组
y:y表示y轴数据,可为列表
可选参数fmt为格式字符串,用于快速设置线条的基本格式,如颜色,标记和线的形状等
[x2], y2, [fmt2], ... ,:表示可以同时绘制第二组或更多的数据
pyplot还提供了可以设置图表的坐标轴标签,标题图例等的函数
matplotlib.pyplot.xlabel(xlabel)
matplotlib.pyplot.ylabel(ylabel)
函数功能,为图表添加轴标签,xlabel为x轴,y为y轴
matplotlib.pyplot.title(label) 为图表添加标题
matplotlib.pyplot.text(x,y, s) 为图表添加文本注解,x,y为文本位置的坐标,s为添加的文本字符串
matplotlib.pyplot.legend(handles, labels, **kwargs) 为图表设置图例,handles指定要添加到图例中的lines,patches等对象列表,labels指定添加到图例中的标签列表,若未传递任何参数,将根据标签自动确定添加到图例
绘图案例
import numpy as np
import matplotlib.pyplot as plt #重名名
x1 = np.linspace(0.0, 5.0) #生成均匀间隔的序列
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi *x1)*np.exp(-x1) #对应y值
y2 = np.cos(2 * np.pi *x2)
fig, (ax1, ax2) = plt.subplots(2,1) #创建一个2行1列的Figure对象fig,在后续的程序中用来操纵图像
fig.suptitle('Matplotlib Line') #是指图像标题
ax1.plot(x1, y1) #绘制线形图 线条采用默认设置
ax1.set_ylabel('y_label') #设置y坐标标签
ax2.plot(x2, y2, 'o-')
ax2.set_xlabel('time')
ax2.set_ylabel('Undamped')
plt.show()# 显示图像
2、条形图
matplotlib.pyplot.bar(x, weight, width=0.8, bottom=None, **kwargs)
参数说明:
x为条形图x坐标,数据类型为float或列表
height为条形图高度,数据类型为float或列表
width为条形图的宽度,数据类型为float或列表,默认为0.8
bottom为条形图==底部其实的y坐标==,用于绘制堆叠条形图,数据类型为float或列表,默认为0
**kwargs可以设置图形颜色,标签,图例线宽等属性。
- 水平图:
matplotlib.pyplot.barh(y, width, height=0.8, left=None, **kwargs)
y为水平条形图的y坐标,数据类型为float或列表
width
height
left为水平条形图左侧的x坐标,数据类型为float或列表,默认值为0
**kwargs
3、饼图
x:要显示的数据
explode 序列设置饼图每一部分的偏离程度,默认值为Nonem可为数组或列表(在饼图中凸出来的某项)
labels序列设置饼图每部分的标签,默认None
colors序列设置饼图每部分的颜色,默认使用当前活动循环中的颜色
autopct设置数据显示的格式,默认None,可为字符串或可调用的函数
shadow 设置饼图下是否有阴影,布尔类型,默认值False
startangle 起始角度,float类型,默认值为0
import matplotlib.pyplot as plt
labels = '1_','2_', '3_', '4_', '5_'
size = [10, 20, 30, 40, 50]
explode = (0,0,0,0,0.1)
fig1, ax1 = plt.shbplots()
ax1.pie(siezes, explode=explode, labels=labels, autopct='%1.1f%%', startangle=90)
ax1.axis('equal')
plt.show()
4、散点图
将样本以点的形式绘制在二维平面上,从而判断变量之间的相互关系
- matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, **kwargs,...)
参数
x,y为数据坐标,可为float类型或列表
s size散点大小
c color散点颜色
marker散点显示的图形
- x=np.random.rand(50)
y=np.random.rand(50)
colors = y
size = (30*x)**2
plt.scatter(x,y,s=size,c=colors,alpha=0.5)#alpha表示透明度
5、直方图
sns
1、关系图
seaborn.relplot(*[, x, y, hue, size, style, data, kind,...])
通过kind参数选择要使用的方法,通过hue、size、style等参数来显示数据的不同子集
data是输入的数据集,数据类型可以是pd.DataFrame对象,np.ndarray数组,映射等
x和y 是参数data中的键或向量,指定关系图中的x轴和y轴的变量
hue是 data中的键或向量,根据hue变量对数据进行分组,并在图中使用不同颜色的元素加以区分
size data中的键或向量,根据size控制图中点的大小或线条的粗细
style data中的键或向量,根据style变量对数据进行分组,并在图中使用不同类型的元素 加以区分,如点线,虚线
kind 指定要绘制的关系图类型,可选 散点图scatter,线形图line, 默认为scatter
更具体的绘制分布图的函数,sns.scatterplot(), sns.lineplot()
sns.scatterplot() == sns.relplot(kind='scatter')
sns.lineplot() == sns.lineplot(kind='scatter')
import matplotlib.pyplot as plt
import seaborn as sns
data=sns.load_dataset('tip')
data.head()
sns.replot(x='total_bill',y='tip', data =data, hue='smoker', style='sex', size='size')
plt.show()
2、分布图
可视化数据单变量或双变量分布的方法
seaborn.displot([data, x, y, hue, row, col,...])
data 输入数据集,数据类型可以是pd.DataFrame对象,np.ndarrray对象,映射等
x和y 是参数data中的键或向量,根据hue变量对数据进行分组,并在图中使用不同颜色的元素加以区分
row 和 col 是data中的键或向量,根据row或col变量提取子集,并将子集分布情况绘制在不同的面板上
kind 指定要绘制的分布图类型,默认为his如hist(直方图),kde(核密度估计)、ecdf(经验累积分布函数),
更具体的绘制分布图的函数,sns.hisplot(), kdeplot(), ecdfplot()
sns.hisplot == sns.displot(kind='hist')
- 2、rugplot()函数
绘制轴须图(毛毯分布图),即通过 边缘轴虚线的方式 显示单个观测点的位置,以补充其他分布图
sns.rugplot()
- 3、distplot()函数
sns.distplot() 整合了matplotlib的hist()函数和Seaborn的kdeplot()函数的功能,并增加了rugplot()函数绘制轴须图的功能。一次出现多个图
sns.distplot([a, bins, hist, kde, rug, fit, …])
- 4、jointplot()函数
提供了几种绘制两个变量的联合分布图的方法
sns.jointplot()
联合分布:双向绘制,即两个变量分别以对方作为自变量绘制分布图。
3、分类图
data是输入的数据集,数据类型只能是长格式的pandas.DataFrame对象,即每一列对应一个变量,每一行对应一个观测值
x和y是 data数据集中的变量名,指定分类图中的x轴和y轴变量
hue是data数据集中的变量名,根据hue变量对数据进行分组,并在图中使用不同的颜色加以区分。
row和col也是data数据集中的变量名,作为分类变量提取数据子集,并将子集分布情况绘制在不同的面板上
kind指定要绘制的分类图类型,strip带状图,swarm分簇散点图,box箱型图,violin小提琴图,boxen增强箱型图,point点估计,bar条形图,count记数条形图,默认值为strip
catplot() 函数通过kind参数选择要使用的绘制数据分类的方法,并通过hue,row,col等参数来处理不同的子集,
- Seaborn还提供了三类更具体的绘制分类图的函数,包括分类散点图,分类分布图,分类预测图
sns.stripplot() == sns.catplot(kind = "strip") 可以显示测量变量在每个类别的分布情况,绘制的散点呈带状,数据较多时会有重叠部分
sns.swarmplot() 与stripplot()类似,但是绘制的数据点不会重叠
2、分类分布图 boxplot(), violinplot(), boxenplot(),
sns.boxplot() == ...绘制箱型图以显示与类别相关的分布情况,可以显示四分位数,中位数,和极值
violinplot() 结合了箱型图和核密度估计图
boxenplot() 用于为更大的数据集绘制增强箱型图
3、分类预测图函数 pointplot() barplot() countplot()
pointplot() 使用散点图显示点估计和置信区间
barplot() 使用条形图来显示点估计和置信区间
countplot() 使用条形图显示每个分类中的观察值计数
- f = sns.catplot(data=tips, kind='bar', x="day", y='total_bill', hue="smoker")
通过sns.catplot()函数针对数据集tips绘制分布图,
kind=bar指定绘制条形图,
x=day指定x坐标为day变量,即根据day变量对数据集进行分类,
y=total_bill指定y坐标为total_bill 变量,即显示total_bill变量的统计情况,
hue=smoker 指定以smoker变量对数据点进行分类并以不同的颜色显示,smoker值为No的对应数据条是蓝色的,smoker值为yes对应的数据条是棕色的,
sns.set_theme(style="whitegrid") 设置主题颜色
f.despine(left=True)设置移除f左侧的y轴轴线。
f.se_axis_labels()# x轴y轴标签
f.legend.set_title()
4、回归图
regplot()和Implot()
regplot()函数的功能是绘制数据和线性回归模型拟合的曲线,
sns.regplot(*[, x, y, data, x_estimator, ... ])
lmplot()函数结合了regplot()和FacetGrid的功能,为绘制数据集的 条件子集 的回归模型提供接口
sns.lmplot(*[, x, y, data, hue, col, row, ... ])
hue,col, row 是划分子集的变量,子集将绘制在不同的面板上
5、热力图
Seaborn提供的heatmap()函数可以为二维数据绘制由颜色编码矩阵组成的热力图
sns.heatmap(data, *[, vmini, vmax, cmap, center,...])
data是输入的二维矩阵数据集,数据类型可以是dataframe对象或二维ndarray数值等
vmin和vmax指定colormap的值,数据类型为float
cmap是指定数据值到颜色空间的映射,数据类型可以是Matplotlib colormap名称或对象,颜色列表等
center指定在绘制发散数据时颜色映射的居中值,数据类型为float。
sns.heatmap(data)
plt.show()
Echarts是一款用JavaScript实现的开源数据可视化库,常用于网页数据可视化。
Pyecharts 是一款将Echarts与Python结合的数据可视化工具,可以直接生成Echarts图表。
1、Pyecharts图标类
Line, Bar,Scatter, Kline, Pie, Boxlot, Radar, Map, HeatMap, Gauge, Funnel, Treemap, TRee, Sunburst, WordCloud
- 2、Pyecharts图表配置
全局配置项 和 系列配置项
全局配置项:
p = pyecharts.Pie(init_opts)
标题配置项,图例配置项,工具箱配置项,区域缩放配置项,提示框配置项,视觉映射配置项等
系列配置项:
设置图表中的文本,线样式,标记等元素,包括图元样式配置项,文字样式配置项,标签配置项,线样式配置项等。
p = pyecharts.Pie(init_opts)
init_opts是全局初始化配置项,数据类型为pyecharts.options.InitOpts对象,
常用属性包括width(图表画布宽度)、height,chart_id, page_title(网页标题)、theme,bg_color
init_opts可以通过opts.InitOpts对象或字典进行参数传递,返回值p为一个Pie类对象。
全局配置项:
p.set_global_opts(title_opt, legend_opts, tooltip_opts, toolbox_opts, visualmap_opts, datazoom_opts, ...)
标题配置项,图例配置项,工具箱配置项,提示框配置项,视觉映射配置项,区域缩放配置项等
系列配置项:系列配置项 用于 设置图表中的文本,线样式,标记等元素,包括图元样式配置项,文字样式配置项,标签配置项,线样式配置项等。
系列配置项:
p.set_series_opt(label_opts, linestyle_opts, areastyle_opts, markpoint_opts, markline_opts, itemstyle_opts,...)
标签配置项,线样式配置项,区域样式配置项,标记点配置项,标记线配置项,图元样式配置项。
可以调用图标类的add方法添加图表数据并设置各种配置项,不同图表的add方法参数列表不同,。Pie类中,add方法的语法格式如下
p.add(series_name, data_pair, color, radius, center, rosetype,…)
requests.get(url, **kwargs) #向指定url发送http的get请求,常用于从服务器请求各类数据
requests.post(url, **kwargs)# 向指定url发送http的post请求,常用于先服务器提交各类数据
requests.put(url, **kwargs)提交数据
reauests.delete(url, **kwargs) 从服务器中删除数据
requests.head(url, **kwargs) 向指定url发送head请求,获取响应头
requests.requests(method, url, **kwargs)向指定url发送自定义请求
返回的都是Response对象,表示服务器对该请求的响应
Requests请求函数的 相关参数 功能
Response 类对象成员:
response.status_code 200表示成功
response.text 相应内容的文本形式
response.content 响应内容的二进制形式
response.json() 将json响应解码为json对象
response.encoding 该响应的编码方式
会话操作
with requests.Session() as session: #用with语句(上下文管理器)来打开一个会话
# 通过设置会话的各参数对应成员属性的值,可以使改会话下的请求保持这些参数
session.params
session.cookies
session.auth
session.headers
常用的是Beautiful Soup模块,Beautiful Soup基于Python解释器,有丰富的API和多种解析方式,能够用于HTML,XML,等markup文档的解析,可以快速实现从网页中提取数据。
Tag, 即HTML中的“标签”。通过tag的name属性,可以获取标签的名字,如 title, body
通过tag['属性名'], 可以获取标签的属性,如id,class等,其操作和字典相同,可直接通过“tag.属性名”进行访问
NavigableString 标签内的字符串文本,例如 <h1>TEXT<\h1>中的TEXT就是NavigableString对象
BeautifulSoup 表示整个文档,其操作类似于Tag类型
Comment HTML内的注释,可以将其当作特殊的NavigableString对象
文档树的建立与遍历
BeautifulSoup(markup, features) 功能,解析markup文档,生成文档树
tag.contents 给出tag节点的直接子节点构成的列表
tag.children tag节点的直接子节点生成器
tag.等等属性
文档树的搜索方法
soup.find_all(name, attrs, recursive, string, limit, **kwargs) 在文档树上搜索满足过滤条件的所有标签
soup.find(...) 在文档树上搜索满足过滤条件的单个标签
db = pymysql.connect(host, user,password, database, port)
返回值是创建的connect对象
data = pd.read_sql(sql, con, index_col, …)
存储到数据库
data.to_sql()
查询、插入、更新、删除