04.Anaconda与数据分析

发布于 2025-07-22  111 次阅读


一、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=1):row_concat = pd.concat([df1,df2,df3],axis=1)
    • ignore_index:True-忽略索引
    • append(名称):添加一列
    • ignore_index:True-忽略索引
  • 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(数据表[列名]):将指定列转换为datetime
  • parse_dates=[列名]:可以在读取数据时,设置这个参数来将指定列转换为datetime

3.提取日期的各个部分

  • 对象=pd.to_datetime():可以通过这个对象后加.year.month.day提取
  • 数据表[列名].dt:也可以通过这个属性后加.year.month.day提取

4.日期范围

  • date_range(start=起始日期,end=结束日期):创建日期序列
    • freqD-表示逐日递增,B-表示按工作日递增
  • between_time(时间起始,时间结束,include_end=False)
  • at_time(时间)
  • resample('W'):进行重采样


学习是一段漫长的旅途