一、Anaconda环境搭建
1.Anaconda简介
- Anaconda是目前最流行的数据分析平台,附带了150多个常用数据科学包以及依赖,以及7000多个数据科学相关的开源库
- Anaconda包含了虚拟环境工具,使得不同的python或者开源库版本可以同时存在
2.Anaconda安装
- 前往官网下载对应系统的安装包
- 一路选择下一步即可
二、Anaconda的虚拟环境管理
1.虚拟环境的作用
- 解决问题:很多开源版本升级后API发生变化,导致老版本的代码不能在新版本中运行
- 将不同Python版本、相同开源库的不同版本进行隔离
- 使得不同版本的代码在不同的虚拟环境中运行
2.虚拟环境的本质
- 在电脑中安装多个Python解释器,每个Python解释器关联多个包
- 代码运行时,使用特定路径下的Python解释器
3.创建虚拟环境
conda create -n 虚拟环境名称 python=python版本 #创建虚拟环境,开始新项目时执行一次
conda activate 虚拟环境名称 #进入虚拟环境,每次打开终端需要运行
conda deactivate #退出虚拟环境
conda remove -n 虚拟环境名称 --all #删除虚拟环境
三、Anaconda的包管理
1.通过conda install安装
conda install 包名
2.通过pip install安装
pip install 包名 (-i 指定下载源)
- 常用国内下载源
四、Jupyter服务
1.Jupyter作用
- 我们在训练模型时,会经常进行试错,而每次都加载文件,会非常耗时
- 使用Jupyter环境可以让文件在使用后不被释放,减少加载耗时
2.Jupyter配置
- 创建.jupyter文件夹
- 写入或上传配置文件
3.启动Jupyter
jupyter notebook #以这种方式启动,Jupyter与当前终端绑定,终端关闭会导致Jupyter关闭
nohup jupyter notebook & #将Jupyter放置后台运行,输出文件名为nohup
五、DataShell
1.添加Jupyter连接
Environment(或者File)--Add Jupyter Connnection--输入URL
2.创建Jupyter文件
右键--new--Jupyter Notebook
3.使用Jupyter文件
- 通用快捷键
- Shift+Enter:执行本单元代码,并跳转到下一单元
- Ctrl+Enter:执行本单元代码,留在本单元
- 命令模式,按ESC进入
- Y:由cell模式进入Code模式
- H:由cell模式进入Markdown模式
- A:在当前cell上方添加cell
- B:在当前cell下方添加cell
- DD:删除当前cell
- 编辑模式,按Enter进入
- Ctrl+鼠标:多光标操作
- Ctrl+Z:撤销
- Ctrl+Y:重做
- Tab:自动补全
- Ctrl+/:注释
六、NumPy
1.NumPy简介
- NumPy是Python数据分析必不可少的第三方库,由C语言开发,一定程度上解决了Python的运算性能问题
2.NumPy功能
- 高性能科学计算和数据分析
- ndarray、多维数组,具有矢量运算能力
- 矩阵运算,无需循环即可完成类似MATLAB中的矢量运算
- 同于读写磁盘和操作内存映射文件的工具
3.NumPy属性
- NumPy的主要对象是同类型元素的多维数组,数组类称为nadarray
- NumPy中的维度称为轴,轴的个数称为秩
- nadarray的对象属性
- ndarray.ndim:数组轴的个数
- ndarray.shape:数组的形状
- ndarray.size:数组元素的总个数
- ndarray.dtype:数组元素的类型
- ndarray.itemsize:数组元素的字节大小
4.创建NumPy
- array
import numpy as np 数组名 = np.array([数组])
- zeros/ones/empty
import numpy as np #zeros:创建全为0的对象 数组名 = np.zeros((元组)) #元组中的元素表示行数、列数等,元素的个数表示维度 #ones:创建全为1的对象 数组名 = np.ones((元组)) #empty:创建全为空的对象 数组名 = np.empty((元组))
- arange
import numpy as np #生成一维数组 数组名 = np.arange(区间起始,区间结束,间隔,dtype=类型) #区间为左闭右开
- matrix
import numpy as np #生成二维矩阵 #方式1 数组名 = np.mat("元素1,元素2;元素3,元素4") #分号进行换行 #方式2 数组名 = np.matrix("元素1,元素2;元素3,元素4") #方式3 数组名 = np.matrix([[列表1],[列表2]]) #逗号进行换行
- 创建随机数矩阵
import numpy as np #1.生成随机多维浮点型数据,rand固定区间为0.0~1.0 数组名 = np.random.rand(行数,列数) #2.生成随机多维整型数据,randint可以指定区间 数组名 = np.random.randint(区间起始,区间结束,size=(行数,列数)) #3.生成均匀分布的随机多维浮点型数据,uniform可以指定区间 数组名 = np.random.uniform(区间起始,区间结束,size=(行数,列数))
- 等比数列
import numpy as np 数组名 = np.logspace(开始点,结束点,元素个数) #注意,前两个数表示10的次幂
- 等差数列
import numpy as np 数组名 = np.linspace(开始点,结束点,元素个数) #还有个参数endpoint,默认为True,表示包含结束点
5.NumPy内置函数
- 基本函数
- np.ceil():向上取整,参数是number或者array,下同
- np.floor():向下取整
- np.rint():四舍五入
- np.isnan():判断元素是否为NaN
- np.multiply():元素相乘
- np.divide():元素相除
- np.abs():元素绝对值
- np.where(condition,x,y):三元运算符,x if conditon else y
- 统计函数
- np.mean():所有元素的平均值
- np.sum():所有元素的和
- np.max():所有元素的最大值
- np.min():所有元素的最小值
- np.std():所有元素的标准差
- np.var():所有元素的方差
- np.argmax():最大值的下标索引
- np.argmin():最小值的下标索引
- np.cumsum():返回一维数组,每个元素都是之前元素的累加和
- np.cumprod():返回一位数组,每个元素都是之前元素的累乘积
- 参数axis:按指定轴心统计,0--按列统计,1--按行统计
- 比较函数
- np.any():至少有一个元素满足指定条件
- np.all():所有元素都满足指定条件
- 去重函数
- np.unique():去除重复值并返回排序结果
- 排序函数
- np.sort():排序,返回排序后的副本
6.NumPy运算
- 基本运算
- 按照元素进行运算,对应位置元素进行加减乘除
- 矩阵乘法
- np.dot(x,y):x左乘y
- x.dot(y):x左乘y
七、Python数据处理与分析
1.常用Python数据分析和处理开源库
- NumPy:数学库
- Pandas:强大的分析结构化数据的工具集
- Matelotlib:强大的数据可视化开源Python库
- Seaborn:Python数据可视化开源库
- Sklearn:基于Python语言的机器学习工具
- Jupyter Notebook/Lab
2.数据分析与处理的流程
- 数据输入输出
- 加载数据
- 生成对象
- 数据ETL(extract transform load)
- 查看
- 选择
- 合并
- 缺失值
- 数据转换
- 统计
- apply系列函数
- 分组
- 数据透视表
- 可视化
- matplotlib
- pandas
- seaborn
- pyecharts
八、Pandas
1.Pandas数据结构
- DataFrame:用于处理结构化数据,可以视为由Series组成
- Series:用于处理单列数据
2.Pandas数据结构的创建
- 创建Series
import pandas as pd 名称 = pd.Series([列表]) #可以指定索引 名称 = pd.Series([列表],index=[索引列表])
- 创建DataFrame
import pandas as pd 名称 = pd.DataFrame({key值:[列表]}) #更精细的创建 名称 = pd.DataFrame(data={key值:[列表]},columns=[列的顺序],index=[行索引])
3.Pandas数据结构的常用操作
- Series常用操作
- 加载数据集
import pandas as pd data = pd.read_csv("数据集文件地址",index_col="索引")
- 使用行索引选择一条记录
名称 = data.loc[索引号] - 打印索引和值 ```python #索引列表 名称.index 名称.key() #值 名称.values
- 其他操作
操作 功能 iloc 使用索引位置取值 dtype或dtypes 查看Series内容的类型 shape 数据的维数 Series中元素的数量 - Series常用计算方法
- 平均值:mean
- 最大值,最小值:max,min
- 标准差:std
- 返回不同值的数量:value_counts【1.对列进行分组;2.统计分组后的个数;3.按照个数进行降序排序】
- 返回非空值数量:count
- 打印列的数字信息:describe
- Series的布尔索引:直接在[]内进行判断,判断返回布尔值列表,索引为True进行返回,False不返回
- Series的数学运算
- 加法
- 常数可作用于全部索引值
- Series之间运算则对应索引值相加,若对应索引值为空,则该位置结果为空
- 字符串会进行拼接
- 乘法:
- 常数可作用于全部索引值
- Series之间运算则对应索引值相乘,若对应索引值为空,则该位置结果为空
- 字符串会进行拼接
- DataFrame常用操作
- 属性操作
- 形状:shape
- 元素个数:size
- 维度:ndim
- 行数:len
- 数学操作
- 每列的非空值个数:count
- 平均值:mean
- 最大值,最小值:max,min
- 标准差:std
- 返回不同值的数量:value_counts【1.对列进行分组;2.统计分组后的个数;3.按照个数进行降序排序】
- 返回非空值数量:count
- 信息操作
- 打印列的数字信息:describe
- DateFrame的布尔索引:直接在[]内进行判断,判断返回布尔值列表,索引为True进行返回,False不返回
- 索引操作
- 设置行索引:set_index
- 重置索引:reset_index
- 修改索引名称
- rename(index=idx_rename,colunms=col_rename)【idx_rename/col_rename是字典,key为旧值,value为新值】
- 提取索引,使用tolist修改,再赋值回去
- 列操作
- 添加列
#方式一 dataframe[列名] #方式二 insert(loc=索引值,column="列名",value=列的值) #loc:表示在下标为索引值的位置插入列
- 删除列
drop(lables="行或列名",axis=0/1,inplace=False/True) """ axis:0表示作用于行,1表示作用于列 inplace:False表示生成复制对象,True表示作用于原对象 """
4.Pandas数据的导出
- pickle文件
- 以二进制格式保存数据,导入导出速度快,但可读性差
- 扩展名.p/.pkl/.pickle
- 导入方式:read_pickle("导入目录")
- 导出方式:to_pickle("导出目录")【可以使用!开头在DataShell里运行shell命令】
- csv文件
- 使用分隔符的一种文件形式
- 导入方式:read_csv("导入目录")
- 导出方式:to_csv("导出目录")
- sep:分隔符,默认为',',如果指定了sep,加载时也要指定对应的sep
- index:是否保存索引,False不保存,True保存
- Excel文件
- 导入方式:read_excel("导入目录")
- 导出方式:to_excel("导出目录")
- sheet_name:子表名称
- index:是否保存索引,False不保存,True保存
- feather文件
- 二进制文件,可以加载到R语言中使用
九、Pandas DataFrame
1.加载数据集
import pandas as pd
#导入csv文件,分隔符为','
data = pd.read_csv("导入目录",index_col="索引")
#导入tsv文件,分割符为't'
data = pd.read_csv("导入目录",index_col="索引",sep='t')
2.查看部分数据
- 根据列名加载数据
- 加载一列:名称[列索引],返回Series对象
- 加载多列:名称[[列索引1,列索引2,...]],返回DataFrame对象
- 根据行名加载数据
- 加载一行:loc[行索引],通过行索引获取指定行的数据
- 加载多行:loc[[行索引1,行索引2,...]]
- 也可以使用iloc,注意loc使用的是行索引,而iloc使用的是行号
- 获取指定行列的数据
- 可以通过loc、iloc获取行列的数据
- loc/iloc [[行],[列]]
- 可以通过
起始:结束:步长
指定行列,如果起始和结束为空,则表示全部 - 若行列不存在则会添加
3.分组和聚合
- 分组方式
- groupby(["列名1","列名2",...]):按照列进行分组
- as_index:False-不将其作为索引,True-将其作为索引
- 聚合方式
- agg({列名:聚合方式})
4.简单绘图
- 绘图方式
- plot:默认为折线图,取列画图
- kind:值为bar时为柱状图
- figsize(num1,num2):画布大小
十、Pandas统计量
1.常用统计量
- 数据字段:columns
- 查看形状:shape
- 统计数值列:describe
- include:选择特定类型的数据列
- 转置:T
- 查看属性:info
2.常用排序方法
- nlargest(数量,列名):进行降序排序
- nsamllest(数量,列名):进行升序排序
- sort_values(列名,ascending=True/False):True-升序,False-降序
- drop_duplicates(subset=列名):去重
十一、数据组合
1.连接数据
- 添加行
- pd.concat([合并列表],axis=0):
row_concat = pd.concat([df1,df2,df3],axis=0)
- ignore_index:True-忽略索引
- append(名称):添加一行
- ignore_index:True-忽略索引
- pd.concat([合并列表],axis=0):
- 添加列
- pd.concat([合并列表],axis=1):
row_concat = pd.concat([df1,df2,df3],axis=1)
- ignore_index:True-忽略索引
- append(名称):添加一列
- ignore_index:True-忽略索引
- pd.concat([合并列表],axis=1):
- concat的其他用法
- concat默认按照索引对数据表进行拼接,其中有一个join参数,可选值为"outer"/"inner"
- outer:默认值,类似于并集,保留所有
- inner:类似于交集,保留相同索引
2.合并多个数据集
- 加载数据
from sqlalchemy import create_engine #需要安装sqlalchemy #pip install sqlalchemy #连接数据库 engine = create_engine("数据库连接") pd.read_sql_table("表名",engine)
- 一对一合并
- 左表.merge(右表,on=列名,how= )
- how的四个值:left,right,outer,inner
- 多表合并
- 连续调用merge方法
十二、数据清洗
1.缺失数据简介
- 不同数据集中缺失数据有不同的表现形式:
- 数据库:缺失数据表示为NULL
- 部分编程语言:缺失数据表示为NA
- Pandas:缺失数据表示为NaN
- 也可能是空字符串
''
或数值
- 缺失数据的来源:
- 原始数据中包含缺失值
- 数据整理过程中产生缺失值
- 缺失值的特点:
- 缺失值与其他数据类型不同,它毫无意义不能做比较,不等于0、空串、另一个NaN
- 缺失值的判断:
- isnull(值):若为缺失值,返回True
- notnull(值):若为缺失值,返回False
2.加载缺失数据
- pd.read_csv有以下一些参数:
- keep_default_na:是否解析pandas内置的字符串为缺失值
- na_values:设定自定义字符串,解析为缺失值
3.删除缺失值
- 删除缺失值是删除其所在的行或列,会造成信息损失,并不推荐
dropna()
:默认删除所有包含缺失值的行subset
:传入行列名,选择指定行列how
:any-有一个缺失值即删除,all-全部是缺失值即删除axis
:0-作用于行,1-作用于列
4.填充缺失值
- 非时序数据:数据不会随着时间而变动
fillna(值)
:使用该值填充缺失值的位置,该值可以是有意义的统计量
- 时序数据:数据会随着时间而变动
- 时序数据有三种填充方式,上一个非空值,下一个非空值,线性插值
fillna(值)
:- method:
"ffill"
-上一个非空值,"bfill"
-下一个非空值 interpolate(limit_direction="both")[列名][行号起始:行号结束]
:
5.重复数据处理
drop_duplicates()
:默认删除所有数据完全相同的行subset
:指定列判断是否重复
sum(axis=1).map(hash)
:对于id重复,可以通过hash生成新的id
十三、apply自定义函数
1.apply简介
- apply相当于一个for循环,会将每一个数据传入到对应函数中进行处理并返回
2.Series的apply方法
- 使用def定义一个函数,第一个参数为要进行处理的数据
Series1.apply(函数func)
:将Series1中的所有元素依次传入到func中进行处理- 若func除了第一个参数之外还有其他参数,则向func传入的其他参数需要在apply中写明
3.DataFrame的apply方法
- 使用def定义一个函数,第一个参数为要进行处理的数据
DataFrame1.apply(func)
:将DataFrame1中的所有元素依次传入func中进行处理- apply会每次将一个列传入func中
- axis:默认为列,作用于行或列
4.向量化函数
- 自定义函数无法直接对向量进行运算,有两种解决方案:
- 可以通过
np.vectorize(函数名)
生成新的能处理向量化数据的函数 - 可以直接使用装饰器
@np.vectorize
修饰函数
- 可以通过
5.lambda函数
lambda(x:x+1) #接收x,将x+1后返回
#等价函数
def sum(x):
return x+1
十四、数据分组
1.聚合
- 聚合的定义:将数据进行分组之后,通过进一步处理聚合成为一个数
agg(参数)
:可以通过agg传入函数对分组的数据进行处理- 参数中可以传入函数列表来同时传入多个函数
- 参数中可以传入字典,key表示要聚合的列名,value表示聚合的方法
2.转换
- 转换的定义:将数据转换为另一个数据,但不会减少数据数量
tarnsform(函数)
:可以通过transform传入函数进行转换操作
3.过滤
- 过滤的定义:判断数据是否满足条件,选择是否对整个分组进行过滤
filter(函数)
:返回结果为bool类型,True表示保留,False表示过滤
十五、数据透视表
1.数据透视表的定义
- 数据透视表(Pivot Table)是一种交互式的数据表,可以进行某些计算,可以动态地改变版面布置
2.数据透视表常用API
- pandas.pivot_table:多了一个参数data用于指定DataFrame
- pandas.DataFrame.pivot_table
index
:行索引,传入原始数据的列名,将其作为行索引columns
列索引,传入原始数据的列名,将其作为列索引values
:要进行聚合的列aggfunc
:聚合函数
- cumsum():累进求和
applymap(lambda函数)
:依次作用于每一个元素
十六、datetime数据类型
1.datetime简介
- datetime是Python内置的对象,导包:
from datetime import datetime
2.将Pandas的数据转换为datetime
pd.to_datetime(数据表[列名])
:将指定列转换为datetimeparse_dates=[列名]
:可以在读取数据时,设置这个参数来将指定列转换为datetime
3.提取日期的各个部分
对象=pd.to_datetime()
:可以通过这个对象后加.year
、.month
、.day
提取数据表[列名].dt
:也可以通过这个属性后加.year
、.month
、.day
提取
4.日期范围
- date_range(start=起始日期,end=结束日期):创建日期序列
freq
:D
-表示逐日递增,B
-表示按工作日递增
- between_time(时间起始,时间结束,include_end=False)
- at_time(时间)
- resample('W'):进行重采样
-