• 数据分析学习及实用技巧 —— LF《数据分析集训营》


    数据分析学习及实用技巧 —— LF《数据分析集训营》

    本学习笔记内容来源于网络视频课,多为拼凑内容,但也很实用;
    涵盖了职业分析、Excel、notebook & numpy & pandas & matplotlib的常规使用,仅为数据分析入门要求,如果想深入了解,可自阅官方文档;

    职业解析

    • 导数据 做报表
    • 需求理解 动态分析
    • 预测

    sql、excel、python + 业务理解,数据分析思维很重要;

    数据分析岗位要求:

    • 做什么:
      • 了解公司核心业务:针对公司的数据流,从数据仓库、数据库中提取、监测数据;
      • 检测业务健康度:指标体系搭建、报表检测、办公自动化;
      • 精细化运营:用户分析、埋点、日志数据、BI平台、搭建BI平台;
      • 基于数据的新业务:支撑核心业务增长、新业务线、行业分析报告、数据探索;
      • 对外提供付费数据服务;
    • 需要什么:
      • 理解业务的能力;
      • 搭建指标体系:报表监测,Excel,SQL,Python;
      • 运营能力:埋点设计,统计学分析方法,数据分析报告,整理日志数据(SQL自己查);
      • BI平台的使用和接入:神策、PowerBI;或者搭建自己的BI平台(这是数据产品经理的工作,但是我们是这部分业务的需求方);
      • 支撑新业务:数据挖掘、智能服务、推荐算法;搭建新的指标体系;
      • 行业分析报告的撰写和解读 、数据探索;

    技术栈和能力解读:

    • 数据业务思维 对标 运营岗;
    • 数据处理能力 sql+Excel+BI工具+Python
    • 数据分析 统计学+数据分析报告+可视化 用数据说话
    • 预测 机器学习
    • 其他: R(不需要了)、SAS、SPSS(拖拽的图表)、Matlab(也不需要);

    Tips:

    • 小基础:SQL
    • 生产力:Excel
    • BI工具:超智能
    • 拉差距:Python

    具体岗位职责:

    • 做表格、做报表、数据分析报告、问题分析和跟踪、重点业务客户跟踪;
    • 产品运营相关数据分析整理,建立分析模型(指 BI的使用 和 机器学习);Tableau;
    • 智能营销、风控,主要是预测场景;
    • 数学、统计学、计算机相关;

    前景:

    • 擅长与人打交道:业务方向,高级数据分析 业务专家
    • IT型:数据平台 数据质量 大数据工程师
    • 喜欢数据:机器学习算法 数据挖掘 算法 解决方案专家

    理解业务、学习技术、领域深耕(用户增长、风控、推荐、金融量化)、数据科学;

    数据分析思维、统计学、Excel、SQL、Python、业务理解、PBI、Tableau、数据分析报告;

    可以兼职做一些数据分析的工作;

    一名好的数据分析师:

    • 搭建好的指标体系,选择好的指标,生成好的报表;
    • 直观的传达信息:可视化;
    • 正确且高效的传达信息;
    • 真实的统计,统计所传达的真相;

    好的指标:

    • 王者为例:
      • 作战指标:场次 胜率 输出 生存 KDA
      • 信誉指标:信誉分 被举报次数 举报成功次数
      • 等级指标:VIP等级、经验等级
      • 社交指标:好友数 点赞数

    思维训练:

    • 看别人的报告、图表,所表达的信息;
    • 看指标:行业的指标、指标体系;
    • 利用统计学:查看数据分布,适当选择可视化方法;

    Excel入门基础

    • 数据格式 单元格格式【开始】
    • 函数:汇总 统计 文本处理 时间计算 查找和匹配 【公式】
    • 可视化【插入】
    • 数据透视表

    Power Query:使用PowerBI,而不用Excel;

    基础、数据条件格式、快捷键

    • F2: 切换单元格的编辑和选择模型
    • alt+enter:单元格中换行
    • 行列操作 可以自动调节 单元格行高、宽
    • 设置单元格格式 可以调整文字排列角度

    数据格式:

    • 文本;数字;其他;自定义;

    选择特定的数据类型 主要是为了匹配使用相应的函数

    Excel的自定义格式:

    ##"次"
    
    [>=75][蓝色]##"次";[<75][红色]##"次" // 这种根据条件改变了数字值的颜色;使用条件格式 可以设置单元格的颜色(颜色进度条);
    
    
    [>=60][蓝色]##"分";[<60][红色]##"分"####;0000(自动补位)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 自定义格式的结构
    方式1
    
    四个部分代码结构,中间用 ; 号间隔:
    格式: 正数格式;负数格式;零格式;文本格式
    示例:
    
    两部分代码结构:
    第一部分用于正数和零,第二部分用于负数
    00.00;[红色]"-"00;
    
    一部分代码结构:
    用于所有数字
    
    要跳过某一代码部分,需要为其指定一个结束分号;
    
    
    方式2
    
    特定条件,如
    大于条件值;小于条件值;等于条件值;文本
    示例:
    [红色][<=100];[蓝色][>100]
    
    
    方式3
    
    特定条件
    条件值1;条件值2;同时不满足条件值1,2;文本
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    
    使用方法:
    使用 TEXT(value, format txt)
    示例:
    TEXT(1234.4567, "00.00") 显示为 1234.46
    
    
    这里会用到一些符号标记:
    - G/通用格式 // 这是默认的格式
    
    - # // 代表数字
    - ##.## // 保留两位小数
    
    - ##.00 // 保留两位小数 不够则补0
    - 0 // 也代表数字,不过 0000 对应的数值如果只要3位 就会在前 补一个0(这个0并无意义)
    
    - "" // 使用双引号标记显示的字符串 仅仅是额外显示 不会影响被保留的单位
    
    - ? // 为无意义的零在小数点两边添加空格,以便使小数点对其
    - ??.???
    
    - , // 显示千位分隔符或者将数字除以千倍显示
    - #,# // 千位分隔符
    - #, // 除以千倍
    - #,, // 除以千千倍
    
    - . // 小数点 如果外加双引号则为字符
    - 0.# 
    
    - % // 百分比
    - #% // 以百分比显示数字
    
    - / // 显示后面一个字符 实际会被转成双引号的形式
    - "" // 显示双引号里的字符
    
    - * // 重复下一次字符 直到充满列宽,用于文本重复显示
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    条件格式

    • 数据条;色阶;显示规则;

    单元格样式

    清除功能

    排序和筛选

    • 自定义排序,可以按照
      • 单元格值 的排序
      • 单元格颜色 的排序
      • 字体颜色 的排序
      • 条件格式图标 的排序

    查找和选择

    • 查找指定内容的单元格后,在查找弹出内容 全选
    • 再针对指定的内容 进行替换

    填充柄、冻结窗格、数据格式的变换

    审阅:保护工作表、工作簿,即添加密码、进行操作限制;

    只开放部分区域:可以 使用审阅中的“允许编辑区域”

    填充柄:

    • 放在单元格的右下角,变成➕号,然后拖动;
    • 填充方式是可选的(右键拖动):可复制、可填充等差 等比 日期序列等;

    添加自定义选项序列

    • 文件 选项 高级 编辑自定义列表;

    多个不连续单元格填入同数据

    • Ctrl 逐个选中
    • Ctrl + Enter补全

    文本记忆输入:

    • 右键 从下拉列表中选择,会把所编辑单元格之上的所有数据使用下拉选择输入;
    • 相当于进行了有效性验证

    数据验证:

    • 单元格只能输入要求的数据;
    • 选择验证区域,选择 数据 -》数据验证 功能,进行验证条件设置;可以把已存在的无效数据圈出来;

    数据可以从外部导入;(更确切的说是引入)

    单列数据 可以 使用 数据中的分列功能 进行按照特定分隔符的拆分;

    汇总的快捷方式:Alt + =

    视图 冻结单元格:当数据行列较多时,方便查看;

    定位条件 替换 排序等常用操作

    填充空值:

    • 查找 选择、定位条件、空值(或其他);

    分类汇总:

    • 数据 分类汇总;

    查找 选择、定位条件、可见单元格

    选择性粘贴:

    • 对粘贴的数据 进行额外的操作
    • 可以转置,将行转列

    隔一行差一行

    • 插入辅助列:
      • 有数据的部分 填入等差数列 首项1
      • 无数据的部分 填入等差数列 首项2
    • 排序即可

    快速填充、智能填充(Ctrl + e)

    数据分列:

    • 右侧需要有一个空列

    Python编程环境

    Anaconda和镜像

    Anaconda / Miniconda

    • python环境管理工具,支持conda命令安装所需包;
    • 选择Python3 64位版本, Miniconda3 Windows 64-bit;
    • Mac下载 MacOS pkg即可;

    打开Anaconda Prompt终端:(或者cd到conda目录 conda activate base

    接下来可以 做一些 conda的配置;

    Anaconda 镜像使用帮助

    • Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。
    • Anaconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载。
    • TUNA 还提供了 Anaconda 仓库与第三方源(conda-forge、msys2、pytorch等,查看完整列表)的镜像,各系统都可以通过修改用户目录下的 .condarc 文件。Windows 用户无法直接创建名为 .condarc 的文件,可先执行 conda config --set show_channel_urls yes 生成该文件之后再修改。

    注:由于更新过快难以同步,我们不同步pytorch-nightly, pytorch-nightly-cpu, ignite-nightly这三个包。

    channels:
      - defaults
    show_channel_urls: true
    default_channels:
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
    custom_channels:
      conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 即可添加 Anaconda Python 免费仓库。
    • 运行 conda clean -i 清除索引缓存,保证用的是镜像站提供的索引。
    • 运行 conda create -n myenv numpy 测试一下吧。

    主要是配置国内的安装源 如清华源;(某些包如果这个源没有,就需要更换其他源,或者使用pip安装)

    conda install jupyter
    pip install pyecharts # pyecharts只能使用pip安装
    
    • 1
    • 2

    环境变量:

    • 打开命令提示符,可执行的指令包括:内部命令、外部命令、可运行程序、批处理文件;
    • 我们之所以能够执行python启动python环境,是因为我们配置了环境变量;
    • 环境变量相当于执行命令时,优先检索的路径;

    用户变量 和 系统变量:

    • 一般配置到系统变量 PATH中;
    • 主目录、script、lib、bin;
    • 相关的指令包括: conda、python、jupyter notebook;
    • which python 查看指定终端命令 环境变量的路径

    conda的基本使用:

    Conda:查看
        conda list
        conda env list
        conda update conda
    
    Conda:创建
        conda create -n your_env_name python=X.X
        python --version
        source activate your_env_name(虚拟环境名称) / activate your_env_name(虚拟环境名称) / conda activate base
        conda install -n your_env_name [package]即可安装package到your_env_name中
        
    Conda:切换
        deactivate env_name,也可以使用`activate root`切回root环境
        Linux下使用 source deactivate 
    
    Conda:更新
        conda update conda
        conda update --force conda
    
    移除环境
       使用命令conda remove -n your_env_name(虚拟环境名称) --all, 即可删除。
    
    删除环境中的某个包。
       使用命令conda remove --name $your_env_name  $package_name 即可。
    
    设置国内镜像
        如果需要安装很多packages,你会发现conda下载的速度经常很慢,因为Anaconda.org的服务器在国外。所幸的是,清华TUNA镜像源有Anaconda仓库的镜像,我们将其加入conda的配置即可:
    # 添加Anaconda的TUNA镜像
        conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
        # TUNA的help中镜像地址加有引号,需要去掉
     
        # 设置搜索时显示通道地址
        conda config --set show_channel_urls yes
    
    示例:
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ 
    conda config --set show_channel_urls yes
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    notebook操作

    单元格选中状态(编辑状态)

    • a 上边加一个
    • b 下边加一个
    • c copy
    • v 粘贴
    • dd 删除单元格
    • x 剪切单元格(往往用来替代删除)
    • z 撤销单元格操作(注意撤销的是对单元格的操作)
    • m 切换到markdown
    • y 切换回code
    • 编辑状态 切换到 选中状态:esc
    • shift+enter / ctrl + enter 运行单元格
    • shift + tab 查看函数 类似问号?的方式查看函数文档
    • func?
    • help(len)

    魔发指令:

    • %run 运行外部python脚本(一般可以把软件工具包 写成这样一个单独的脚本)
    • %time 记录一行运行时间
    %time func
    
    • 1
    • %%time 记录多行运行时间
    %%time
    func1
    func2
    
    • 1
    • 2
    • 3
    • %timeit 循环多次取均值
    %timeit func
    
    • 1
    • %%timeit 循环多次取均值
    %%timeit
    func1
    func2
    
    • 1
    • 2
    • 3
    • %who 查看当前Python变量
    • %whos 更详细

    值得注意IN OUT 的单元格序号 说明单元格的操作是有顺序的;

    • In[45] 可以返回 单元格In序号为45的输出
    • Out[44] 可以返回 单元格Out序号为44的输出
    • _ 最近一次输出
    • _44 等价于 Out[44]

    多个cell运行独立 但是资源共享;Ipython内核:基于python内核,做了数学上的优化;

    Python数据处理之 numpy、pandas、matplotlib

    numpy、pandas、matplotlib + seaborn、pyecharts

    numpy

    矩阵运算

    import numpy as np
    import matplotlib.pyplot as plt
    
    arr = np.array([])
    arr.sum()
    np.arange(1,10,2) # 一组等差序列
    np.random.randn(n) # 一组随机数 服从正态分布(均值0 方差1)
    
    plt.hist(data) # 直方图展示
    
    np.random.randint(起始数, 终止数,(行,列))
    
    arr.reshape((4,5))
    
    # 从0 到 2π 之间 拆出100个数,等差数列
    x = np.linespace(0, 2*np.pi, 100)
    y = np.sin(x)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    pandas

    二维表格处理:分析 和清晰

    • series
    • DataFrame
    import pandas as pd
    
    pd.Series(['a','b','c']) # 默认 显示索引 0 1 2
    
    names = pd.Series(['a','b','c'], index=['x','y','z']) # 指定 显示索引为 x y z
    ages = pd.Series(['1','2','3'], index=['x','y','z'])
    
    # 共用索引 即可组成表格
    pd.DataFrame(data={
      'names':names,
      'ages':ages
    })
    
    # 也可以传入数组(ndarray也可)进行构建
    pd.DataFrame([[1,2],[1,2],[1,2]], columns=['date','score'], index=["A","B","C"])
    
    # 其他构造方法
    df = pd.DataFrame()
    df['date'] = [1,3,5]
    df['score'] = [2,4,6] 
    
    # 从一个字典构造
    pd.DataFrame.from_dict({'a':[],'b':[]}) # 默认列索引
    pd.DataFrame.from_dict({'a':[],'b':[]}, orient="index") # 可以改变朝向 变成行索引
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    修改索引 :

    # 把列设置为索引
    df.set_index('date') # 未修改原数据
    df.set_index('date', inplace=True) # 替换原数据
    
    # 把索引设置为列
    df.reset_index()
    df.reset_index(inplace=True)
    
    # 修改 索引和列名
    df.rename(index={"A":"a","B":"b","C":"c"}, columns={'X':'x','Y':'y'}, inplace=True)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    文件读取和写入:

    pd.read_excel('./xxx1.xlsx')
    pd.read_excel('./xxx1.xlsx', sheet_name=0) # 第一个sheet的索引为0
    pd.read_excel('./xxx1.xlsx', index_col=0) # 将第0列设定为 行索引
    pd.read_excel('./xxx1.xlsx', header=0) # 将第0行设定为 列索引(多行就传入数组)
    
    
    df.to_excel('./xxx2.xlsx', index=False)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    数据的读取和筛选:

    
    data_list = [[1,2,3]],[4,5,6],[7,8,9]
    
    data = pd.DataFrame(data=data_list, index=['r1','r2','r3'], columns=['c1','c2','c3'])
    
    # 读取n列
    data['c1'] # 单列 seriex
    data[['c1','c2']] # 多列 dataframe
    
    # 读取n行
    data.loc['r1'] # 单行
    data.loc[['r1','r2']] # 多行
    
    data.head(10) # 查看前10行 默认为5
    
    # 筛选
    data[df['c1'] > 1]
    
    
    data.shape
    data.describe()
    data.info()
    
    
    data['c1'].value_counts() # 数值频次统计
    
    # 运算
    df['sum'] = df['c1'] + df['c2'] + df['c3']
    
    # 聚合运算
    df.sum(axis=0) # 列向 每一列求和 series
    df.mean(axis=1) # 行向 每一行求和 series
    
    # 数据映射:通过map方法 对数据列进行映射
    def map_func(x):
      if x >0 :
        return 'A'
      else:
        return 'B'
    
    df['c1'].map(map_func) # map是对Series的
    
    df.apply(map_func) # apply是对Dataframe的
    df.apply(map_func, axis=0) # axis=0(每次给一列,可以对该列的每行访问)
    df.apply(map_func, axis=1) # apply通过设置axis=1(每次给一行,可以对该行的列访问)
    
    df.sort_values(by='c1', ascending=False) # 排序
    df.drop_duplicates(subset=["name", "songer"], keep="first", inplace=True) # 按列去重
    
    # pandas 其他常用方法:
        mean(axis=0, skipna=False) # DataFrame 经计算返回的是 Series对象 默认按列进行计算
        sum(axis)
        sort_index(axis, ascending) # 对 列/行 索引进行排序
        sort_values(by, axis, ascending) # 对 列/行 值进行排序
    
    
    # 空值处理
    df.fillna(value=0, inplace=True) # 全部填充
    df.loc[2, 'c2'] = 0 # 单独赋值 索引为2的行 列名为c2的列
        df.loc[‘a’,’one’] # 更推荐的方式 和ndarray类似
        df.loc[['a’,’c'],:]
    
    
    # 空值检验
    df.isnull()
    df.isnull().sum() # 每列空值个数
    df.isnull().sum().mean() # 每列空值占比
    
    
    # 处理缺失数据的方法:
        dropna() #默认 一行只要有一个缺失值 整行就都会被删掉
        dropna(how=all) # how的默认值是any 设置为all之后 那么需要整行都是缺失值 才会被删掉;
        dropna(axis=1) # 按列轴 进行 缺失值处理
        fillna()
        isnull()
        notnull()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    pandas 时间相关:

    # pandas 对时间对象的处理
    # 时间序列类型:
    #     时间戳
    #     时期
    #     间隔
    # Python标准库处理时间对象:datetime time
        import datetime
        datetime.datetime.strptime(2021-06-21,%Y-%m-%d')
    # 灵活处理时间对象:dateutil库(pandas依赖该库)
        dateutil.parser.parse('2021/06/21)
        dateutil.parser.parse('06/21/2021')
    # 成组处理时间对象:
        pd.to_datetime(['2021/06/21','2021/06/22']) 
    # 生成时间范围:
        dt = pd.date_range(start, end, freq='1h20min') # 默认频率是天(D day)、月(M month)、半个月(SM semi-month)小时(H hour)、周日(W week)、周一(W-MON)、工作日(B business)、分钟(T min)、秒(S second)、年(A year);
        pd.date_range(start, period)
        dt[0].to_pydatetime()
    
    
    # pandas 时间序列
    #     以时间对象作为索引的 Series 或 DataFrame
    #     datetime对象作为索引时 是存储在 DatetimeIndex对象中的
    # 时间序列特殊功能:
    #     传入 年 年月 作为切片方式
    #     传入日期范围作为切片方式
    #     丰富的函数支持:
            resample() # 重新采样
            sr.truncate(before,after) # 类似切片
    sr = pd.Series(np.arange(100), index=pd.date_range('2020-01-01', period=100))
    sr['2020-03'] # 整个三月
    sr['2020-03':'2020-4'] # 切片 支持不完整的日期
    sr.resample('W').sum() # 会算出来 每一周数据的和
    sr.resample('M').mean() # 每个月数据的平均值
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    使用实例:

    # 时间类型装换
    pd.to_datetime(df['日期'])
    df.info()
    
    df.set_index('日期')
    
    # 2016年3月的所有数据(DataFrame)
    df.loc['2016-3'] # 由于是datetime类型 这里索引行 会自动识别
    
    
    # 路径简要操作
    if not os.path.exists('./test'):
      os.makedirs('./test')
    
    for item in os.listdir('./test')
      file_path = os.path.join('./test', item)
      print(file_path)
    
    for root, dirs, filenames in os.walk('./test')
      print('逐层路径 遍历目录!!')
      for filename in filenames:
        print(os.path.join(root, filename))
    
    
    # 汇总:
    # 级联汇总:纵向(字段同)
    pd.concat(df1, df2)
    # 合并汇总:横向(关联索引同)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    matplotlib

    数据可视化功能:

    • plt.plot() 折线图
    • plt.bar() 柱状图
    • plt.pie() 饼状图
    • plt.scatter() 散点图
    # 引入方式
    import matplotlib.pyplot as plt
    # from matplotlib import pyplot as plt # 同
    %matplotlib inline
    
    
    # 多条线:  
    plt.plot(x, y, color='red', linewidth=3, linestyle='--') # -- 虚线
    plt.plot(x, y, color='red', linewidth=3, linestyle='-') # - 实线
    plt.show() # 渲染(单元末尾可选)
    
    
    plt.bar(x,y)
    plt.bar(x,y, color=np.random.random((4,3))) # 4个 3元组 值为0~1之间的小数
    plt.show() # 渲染(单元末尾可选)
    
    
    plt.scatter(x, y)
    plt.scatter(x, y, s=z) # s指 size 表示散点大小
    plt.show() # 渲染(单元末尾可选)
    
    
    
    # 图例、标题和说明
    plt.title('Title')
    plt.xlabel('X')
    plt.ylabel('Y')
    
    plt.plot(x, y, label='L1') # 图例信息
    plt.legend() # 图例展示
    plt.legend(loc='upper right') # 指定位置 右上角【upper lower right left】
    
    
    # 中文显示问题
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False # 解决负号显示为方块的问题
    # 可以打印 查看 plt.rcParams
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    pandas中的便捷绘图:

    df.plot(kind='line') # 线状图
    df.plot(kind='bar') # 柱状图
    df.plot(kind='hist') # 直方图
    df.plot(kind='bie') # 饼图
    df.plot(kind='box') # 箱体图
    df.plot(kind='area') # 面积图
    # series 也有类似的绘图功能
    
    df.T.plot()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    绘制多图:子画布

    figure
      axes:1  axes:2
      axes:3  axes:4
    
    # 绘制多图
    plt.figure(figsize=(12, 8)) # 调整画板大小
    
    ax1 = subplot(221) # 2行2列的画布 在子图序号1上进行绘制
    ax1.plot(x, y)
    
    ax2= subplot(222) 
    ax2.plot(x, y)
    
    ax3= subplot(223) 
    ax3.plot(x, y)
    
    ax4= subplot(224) 
    ax4.plot(x, y)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    Over!

  • 相关阅读:
    esp32c3 nuttx 移植 micropython 尝试
    前端异步+token下载文件
    golang 工程组件:grpc-gateway option自定义http规则
    Shell编程_0Linux任务调度
    2022·创新峰会回顾 | 擎创科技荣获CCID双料优秀成果奖
    1015 Reversible Primes
    Paddle-OCR简介
    里程碑!用自己的编程语言实现了一个网站
    如何使用C#在Excel中插入分页符
    关于MMC子系统添加CMD56获取金士顿数据写入量方案
  • 原文地址:https://blog.csdn.net/baby_hua/article/details/126037659