天天看点

Pyhton—Pyhton类库2. matplotlib3.numpy4. pandas

pip install virtualenv

#查看是否安装成功

virtualenv --version

1.2 安装virualenvwrapper

virualenvwrapper 更方便的使用virtualenv

Java

复制代码

#安装

pip install virtualenvwrapper-win

#创建虚拟环境

mkvirtualenv [环境名称]

#切换虚拟环境

workon [环境名称]

#退出虚拟环境

deactivate

#删除虚拟环境

rmvirtualenv [环境名称]

2. matplotlib

2.1 环境搭建

matplotlib==2.2.2

numpy==1.14.2

pandas==0.20.3 

TA_Lib==0.4.16 技术指标库

tables==3.4.2 读取大数据平台的文件

jupyter==1.0.0 数据分析与展示的平台

将上述文件保存至 requirements.txt文件中

#切换到虚拟环境,安装上面的包

workon matploblib

pip install -r requirements.txt

2.2 jupyter Notebook

web版的ipython

常用命令

#启动jupyter

jupyter notebook

2.3 matplotlib介绍

画图,用于开发2d图标 3d也可以,实现数据可视化

2.3.1 demo

2.3.1.2 简单demo

import matplotlib.pyplot as plt

#创建画布

plt.figure()

#画图

plt.plot([1,2,4,5,1],[2,5,7,100,10])

#显示图像

plt.show()

2.3.1.3 demo1

import random

#画出某个城市一个小时内的每一分钟的温度变化折线图

#准备数据

x = range(60)

y = [random.uniform(15,18) for i in x]

# 创建画布

plt.figure(figsize=(20,8),dpi = 80)

plt.plot(x,y)

#修改x轴刻度

plt.rcParams['font.sans-serif']=['SimHei']

x_lable = ["11点{}分".format(i) for i in range(60)]

plt.xticks(x[::5],x_lable[::5])

#修改y轴刻度

plt.yticks(range(40)[::5])

#修改x轴字段

plt.xlabel("时间")

#x修改y轴字段

plt.ylabel("温度")

#添加虚线网格

plt.grid(True,linestyle="--",alpha=0.5)

#修改画布标题

plt.title("温度变化曲线图")

2.3.2 结构

三层结构

2.3.2.1 容器层

  1. 画板层Canvas
  2. 画布层Figure plt.figure()
  3. 绘图区/坐标区Axes  plt.subplots()

2.3.2.2 辅助显示层

图表的图例,刻度等

2.3.2.3 图像层

在绘图区画各种各样的图表

2.3.3 pyplot模块

作用与当前figure的当前Axes

提供了各种画图的函数

#创建画布 可以指定画布的大小 figsize,和图像的清晰度 dpi

plt.figure(figsize=(),dpi=)

#将当前画布保存为图片 必须在show()之前调用

plt.savefig("保存路径")

#修改x轴刻度 可以传入两个参数,第一个显示的点,第二个参数可以格式化显示的点的名称 可以看demo1

plt.xticks(range[60],[名称])

plt.yticks()

#修改x,y轴标题

plt.xlabel("标题")

plt.ylabel("标题")

#修改标题

plt.title("标题")

#增加网格 第一个默认True 显示不显示网格  linestyle="--"表示网格线条为虚线,alpha=0.5 透明度 

#显示图例

plt.plot(x,y,label="图例名称")

plt.lenged("可以指定图例显示的位置 使用loc参数")

#折线图

plt.plot()

#散点图

plt.scatter()

#柱状图

plt.bar()

#饼状图

plt.pie()

#直方图

plt.hist()

# matplotlib.pyplot.hist(  

#     weights=None, cumulative=False, bottom=None,   

#     histtype=u'bar', align=u'mid', orientation=u'vertical',   

#     rwidth=None, log=False, color=None, label=None, stacked=False,   

#     hold=None, **kwargs)

3.numpy

高效的运算工具

3.2 ndarray

numpy的核心 n维数组

numpy使用ndarray来对数据进行处理,对大数据的处理计算效率要远高于python原生的list

3.2.1  ndarrray的优势

3.2.1.1 存储风格

同种类型

3.2.1.2 并行化运算(向量化运算)

3.2.1.3 底层

c语言编写解除了GIL 支持多线程

3.2.2 属性

ndarray的属性有

shape ndarray的行跟列

Pyhton—Pyhton类库2. matplotlib3.numpy4. pandas

ndim 维度

size 元素 等于shape行x高

dtype 类型 整数默认是int64

itemsize 看有几个字节

3.2.3 基础使用

3.2.3.1 生成数组的方法

  1. 生成0和1的方法

np.zeros(形状)

np.ones(形状)

  1. 从现有数组中生成

np.array() 深拷贝

np,asarray() 浅拷贝

np.cory() 深拷贝

  1. 生成固定范围的数组

np.linspace(0,10,100) #生成从0到10之间的100个元素 包括0和10 等距

np.arange(0,10,100)#生成从0到10之间的元素 100是步长 不包括10(左闭右开)

  1. 生成随机数组

    生成随机数组可以指定分布状况,

    均匀分布

    可能性相当的分布 通过直方图查看分布情况

    正态分布

np.random.uniform(low=,high=,size=) #均匀分布 左闭右开包含low 不包含heigh

np.random.normal(loc=,scale=,size=) #正态分布 三个参数分别为 均值,标准差,形状

### 生成随机数组并展示为直方图

data = np.random.uniform(low=-1,high=1,size=1000000)

data

plt.figure(figsize=(20,8),dpi=80)

plt.hist(data,1000)

#展示

data2 = np.random.normal(loc=1.5,scale=0.2,size=1000000)

#绘制直方图

plt.hist(data2,1000)

3.2.3.2 切片和形状的修改

#只改变形状,数据不改变,并且返回新的ndarray 对原有的ndarray不修改

nd.reshape(shpae)

#只改变形状,没有返回值,直接对原有的ndarray进行修改

nd.resize(shpape)

#转置 修改数据

T

3.2.3.3 修改类型/序列化/数组去重

#修改类型

np.asarray("int32")

#序列化 tostring方法再3.8版本中过时 改为tobytes()

np.tostring()

np.tobytes()

#数组去重

#原生的set()只能对一维数组去重

np.unique(ndarray)

#将二维数组转换为一维数组

ndarray.flatten()

3.2.4 运算

布尔索引: numpy支持布尔索引,在使用ndarray的时候,可以通过布尔索引返回想要的数组

data5[data5>0.5]

3.2.4.1 逻辑运算

#当全部为True时,返回True,否则返回False

np.all(ndarray)

np.all(data5>-0.5)

#当其中有一个为True就返回True,全部为False时才返回False

np.any(ndarray)

#三元运算符 可以对ndarray的值进行操作

np.where(ndarray, True的值, False的值)

np.where(data5>-0.5,100,-100)

#逻辑与 逻辑或 可以与where联合使用

logical_and(条件1,条件2)

logical_or(条件1,条件2)

np.where(np.logical_and(data5>0.5,data5<0.7),1,0)

3.2.4.2 统计运算

max, min等

#取ndarray的最大值 axis=1表示跟据行取最大值

temp.max(axis=1)

np.max(temp,axis=1)

#取ndarray的最大值所在位置 axis=1表示跟据行取最大值

np.argmax(temp,axis=1)

temp.argmax(axis=1)

3.2.4.3 数组间运算

3.2.4.4 矩阵运算

矩阵 二维数组

存储矩阵的两种方法:

  1. ndarray

np.array()

  1. 使用matrix数据结构

np.mat()

3.2.4.4.1 乘法运算

np.matual()

matrix

a * b

3.2.4.5 合并

#水平拼接

np.hstack()

#竖直拼接

np.vstack()

#axis=0 竖直拼接 axis=1 水平拼接

np.concatentenate((a,b),axis=0)

3.2.5 IO操作

3.2.5.1 读取文件

使用numpy读取数据文件

np.gedata = np.genfromtxt("test.csv",delimiter=",")

如果数据中有字符串,会出现读取不出来,需要对数据进行处理

处理方法一般有两种

  1. 删除数据
  2. 对数据进行替换 使用列的平均数进行替换

4. pandas

数据处理工具

https://pandas.pydata.org/docs

4.1 DataFrame

import pandas as pd

columns=pd.date_range(start="20201112",periods=8,freq="b")

columns

indexs = ["股票{}".format(i+1) for i in range(10)]

print(indexs)

pd.DataFrame(data1,index=indexs,columns=columns)

基础语法

pd.DataFrame(数据,index=行名称,columns=列名称)

#行名称列名称都是数组,要与数据的形状相对应

4.1.2 结构

既有行索引又有列索引的二维数组

可以看作是ndarray加上了行索引和列索引

Pyhton—Pyhton类库2. matplotlib3.numpy4. pandas

4.1.3 属性

shape

index

values 值就是ndarray

T 转置

4.1.4 方法

#获取DataFrame的前几行 参数不穿默认前5行

dataFrame1.head(8)

#获取DataFrame的后几行 参数不穿默认后5行

dataFrame1.tail(7)

4.1.5 设置索引

修改行索引的方法

  1. 全部修改

#不能直接对DataFrame的索引的某个值进行修改,只能整体进行修改

dataFrame1.index = ["股票_update{}".format(i) for i in range(10)]

#这样就对index全部修改

  1. 重置索引

#drop参数默认为False 如果为True,会把原有的index当成一列,再插入默认的索引列

dataFrame1.reset_index(drop=True)

  1. 设置新索引
  2. Pyhton—Pyhton类库2. matplotlib3.numpy4. pandas
  3. #设置新索引,这样设置完索引,DataFrame会变成一个可以存储多维数据的数组

dataFrame1.set_index(["2020-11-12 00:00:00","2020-11-13 00:00:00"])

#注意set_index完的index变化了会变成 MultiIndex

4.2 Panel

存储三维数据

弃用 使用 MultiIndex代替

4.3 Series

存储一维数组

4.3.1 创建Series

Python

#pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

   pd.Series(np.arange(0,10,2))  

   pd.Series(np.arange(0,10,2),index=list("abcde"))

   pd.Series({"red":1,"yellow":2})

4.3.2 属性

1index

2values

4.4 索引操作数据

使用索引获取操作数据

4.4.1 使用索引获取数据

1直接索引

Pyhton—Pyhton类库2. matplotlib3.numpy4. pandas

#直接索引必须先列后行

data["User_id"][113639]

#data是一个DataFrame User_id是列索引,113639是行索引

2按名字索引

data.loc[]

3按数字索引

data.iloc[]

#第一行第三列

data.iloc[1,3]

4组合索引 不用

data.ix[]

4.4.2 赋值操作

使用索引操作赋值

data.loc[0,'Merchant_id']=450

data.iloc[0,1]=410

4.4.3 排序

4.4.3.1 对内容排序

1DataFrame

data.sort_values(by="Date_received",ascending=False)

#by可以是一个列表

2series

sr.sort_values()

#series 是一维数组 所以不用再指定某个字段

4.4.3.2 对索引排序

data.sort_index()

4.5 运算

4.5.1 算术运算

可以直接对DataFrame,Series进行加减乘除

4.5.2 逻辑运算

#将查询条件放入query参数 返回符合条件的数据

data.query("Distance==450")

#判断Merchant_id是否存在410的数据

data[data["Merchant_id"].isin([410])]

4.5.3 统计运算

data.describe()

...

4.5.4 自定义运算

apply()

4.6 文档的读取和存储

4.6.1 读取

https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html?highlight=read_csv#pandas.read_csv

read_csv()

4.6.2 存储

to_csv()

4.7 高阶用法

4.7.1 处理NaN数据

pd.isnull(DataFrame)

pd.notnull(DataFrame)   

#删除NaN行

DataFrame.dropna(inplace=False)

#替换NaN

DataFrame.fillna(value,inplace=False)

#替换其他默认符号为NaN

DataFrame.replace(to_replace,value)

4.7.2 数据离散化

数据离散化,将一组数据经过处理成矩阵的形式

比如 一组身高数据 160 165 170 175 ...

数据离散化就是将 身高分为 矮 中 高三个属性,达到如下效果

1

4.7.2.1 实现数据离散化

1分组

a自定义分组

ⅰpd.cut(data,bins)

b自动分组

ⅰpd.qcut(data,bins)

2求哑变量

aget_demmies(data,prefiex="分组")

#求分组

cut = pd.qcut(data_received,3)

#求哑变量矩阵

test_dummies = pd.get_dummies(cut,prefix="test")

4.7.3 合并

#axis=1水平

pd.concat([data1,data2],axis=1)

pd.merge(left,right,how="inner",on=[])

4.7.4 交叉表和透视表

#交叉表

crosstab(val1,val2)

#透视表

4.7.5 分组与聚合

#分组

groupby()

#聚合函数

max()

data.groupby(data["Date_received"])["Discount_rate"].max()

5.scikit-learn

机器学习模块

不支持GPU加速运算

5.1 预处理模块