Python数据分析常用开源库 pycharm

内容介绍

  • Pandas

    • 数据处理的库, 可以做可视化

    • 文件类数据交互的是比较好的 CSV Excel

  • 环境搭建起来

  • Series DataFrame

  • 前3天 主要介绍DataFrame的使用 (Pandas的API)

  • 第四天 数据可视化

day05 ~ day08

  • Pandas 解决数据分析问题

    • 报表, 取数 (SQL, Pandas,Excel)

    • 业务分析能力, 应用数据分析的模型 规则模型, 分析套路

      • RFM

      • AARRR

      • 同期群分析

      • 漏斗分析

    • 数据分析报告

    • 数据异常波动原因的分析

    • AB测试

1 数据分析常用开源库

Pandas

  • 基于Numpy - 特点高效的科学计算库, 核心的数据对象 是 ndarray n维数组

  • Series 一列数据

  • DataFrame 二维表

绘图的库最基础的 Matplotlib

  • Pandas 有绘图的API 基于 Matplotlib

  • Seaborn 基于 Matplotlib

2 Notebook的使用

在控制台启动 anaconda prompt

jupyter notebook

在Pycharm中使用 给项目添加Python解释器, 使用conda enviroment

在项目的目录下新建一个Notebook

启动之后可能遇见的问题

弹窗口, jupyter进程直接杀死, 报错是bad file descriptor

  • 是pyzmq包的问题, 把它卸载掉, 再重装一下就好了

  • pip uninstall pyzmq

  • pip install pyzmq

3 Pandas 数据结构

3.1 Series的创建

pd.Series()

  • S大写

  • 传入一个、两个参数

  • 第一个参数就是数据, 也可以通过index = 指定行索引

  • 如果不指定行索引, 会默认添加从0开始的索引

传入的数据可以是以下类型

  • numpy的ndarray

  • python 列表,元组,字典

    • 传入的如果是字典, 字典的key作为索引, Value就是数据

一列Series数据类型必须一致的

  • 如果既有字符串, 又有数字, 会是字符串类型 Object

3.2 Series属性

复制代码
s.shape # 形状 描述series有几行 返回一个元组
s.values # Series的值 默认ndarray类型
s.index  # Series的索引, 如果手动指定, 就是一个ndarray类型, 如果是自动生成 rangeIndex()

3.3 Series的常用方法

  • head()

  • tail()

  • to_list() # 转换成列表

  • to_frame() #转换成DF

  • describe() # 加载数据之后, 首先可以先head() 再 describe 看数据的分布情况

    • count()

    • std() # 标准差 方差 = ∑(一列数据的每一个值- 均值)²/M 标准差 = 方差开根号 反映了数据的离散程度

    • mean()

    • min()

    • max()

    • 计算了三个分位数( 25% 50% 75%)

      • 50% 中位数
  • 对数据进行修改的方法, 99%都有一个共同的参数 inplace 默认值是False

    • 修改数据的API默认不会再原始的数据上进行修改, 而是会在副本上进行修改, 并且会把这个修改后的副本作为方法的返回值, 返回来

    • 如果inplace 修改为True 就会在原始的数据上进行修改, 此时这个方法没有返回

    • 去重 drop_duplicates

    • 排序 sort_values()

      复制代码
      参数 ascending=False 降序排列
  • unique() 返回唯一值的列表

  • s1.value_counts() 相当于分组计数, 统计每个取值出现的次数, 默认会按照取值多少做降序排列

3.4 布尔索引(布尔值列表做数据筛选)

加载数据之后, 要取出年龄大于平均年龄的人名

复制代码
df['Name'][df['Age']>df['Age'].mean()]
复制代码
- DataFrame 可以看作是由Series组成的列表, df[列名] 类似于 列表通过下标取值
- df['Name'][由布尔值组成的列表/Series] 这种写法类似于SQL的where条件
需要注意  df['Age']>df['Age'].mean() 长度 要跟 df['Name']长度一致, 否则会报错

3.5 Series的运算

  • Series和一个值进行计算

    • 数值类型 做加减乘除, Series中的每一个元素都跟这个值做加减乘除, 不需要写循环

    • 字符串类型 可以和数值做乘法, 相当于复制, 乘以2 复制一份

  • 两个Series之间进行计算,根据行索引进行对齐

    • 如果两行行索引一样, 就可以在一起计算

    • 如果两行行索引不一样,不能在一起算, 如果一个Series里有的行索引, 另一个Series没有, 返回NaN

  • Series做各种计算

3.6 DataFrame的创建和常用属性

pd.DataFrame()

  • 可以传入字典 {'列名':[值1,值2, 值3],'列名2':[值1,值2, 值3]}

  • 也可以传入列表套列表,列表套元组

    • data = [[],[], []]
  • 创建df的时候, 可以通过index 指定行索引 columns指定列名

常用属性

  • shape (行数,列数)

  • index 行索引

  • values 值, ndarray(注意 pandas2.0以后, 底层调用的运算库,可以不是numpy了, 可以选择pyarrow)

  • columns 列

3.7 DataFrame的常用方法

df.info()

  • 加载数据之后, 做具体的业务处理之前, 一般固定的套路

    • head() 看数据长什么样

    • info() 字段有哪些, 有没有空值, 每个字段的数据类型

    • describe() 数据的分布 默认会展示数值类型的统计量

      • include = object 显示字符串类型的分布情况

      复制代码
      count 计数,unique 唯一值的数量, top出现次数最多的字符串是啥 freq 出现次数最多的字符串出现的频率(次数)

df.head()/tail()

df.min()算最小/df.max()算最大/df.mean()取平均/df.count() 计数

3.8 DataFrame的布尔索引取部分值

  • 使用方法和Series是一样的, 只不过在条件前面的对象是一个dataframe

  • 如果要使用多个条件进行筛选,按照下面方法写

复制代码
df_sci[(df_sci['Age']>df_sci['Age'].mean()) | (df_sci['Occupation']=='Chemist')]

多个条件,同时计算, 每个条件都要用()括起来

多个条件之间,要用位运算的符号 同时满足 & 满足一个就可以 |

& 对应的还有and 运算符 | 对应or 如果是两个Series之间进行计算, 要用位运算 & | 不能用 and or

复制代码
(df_sci['Age']>df_sci['Age'].mean()) or (df_sci['Occupation']=='Chemist')

报错

复制代码
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

and or 只能在一个True、False 和 另一个True/False之间进行计算

3.9 DataFrame之间的计算

  • 和Series之间的计算 没有区别, 参见series的计算

4 读取保存Excel和CSV文件

读取文件的API pd.read_XXX XXX→ 文件格式 excel , csv, json,sql

保存文件的API df.to_XXX XXX→ 文件格式 excel , csv, json,sql

to_excel

复制代码
df.to_excel('test3.xlsx',sheet_name='student',index=False,header=False)
复制代码
# 第一个参数路径  sheet_name 表格下边工作簿的名字   index=False(默认是True) 不保存行索引  header=False(默认是True) 不保存列名

to_csv

  • 参数基本跟excel一样, 没有sheet_name

  • 特殊的参数 sep 分隔符, 默认是逗号, 可以修改成其它的比如

复制代码
df.to_csv('test3.csv',index=False,sep='\t')
# '\t'制表符作为分隔符
# 加载数据的时候, 也要指定对应的分隔符
pd.read_csv('test3.csv',sep='\t')
相关推荐
Data-Miner11 分钟前
大数据湖项目建设方案(100页WORD)
大数据·big data
宋发元18 分钟前
如何使用正则表达式验证域名
python·mysql·正则表达式
XMYX-01 小时前
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
python·elasticsearch·jenkins
正义的彬彬侠1 小时前
sklearn.datasets中make_classification函数
人工智能·python·机器学习·分类·sklearn
belldeep1 小时前
python:用 sklearn 转换器处理数据
python·机器学习·sklearn
安静的_显眼包O_o1 小时前
from sklearn.preprocessing import Imputer.处理缺失数据的工具
人工智能·python·sklearn
安静的_显眼包O_o1 小时前
from sklearn.feature_selection import VarianceThreshold.移除低方差的特征来减少数据集中的特征数量
人工智能·python·sklearn
_可乐无糖1 小时前
pytest中的断言
python·pytest
AI服务老曹1 小时前
不仅能够实现前后场的简单互动,而且能够实现人机结合,最终实现整个巡检流程的标准化的智慧园区开源了
大数据·人工智能·深度学习·物联网·开源
Wils0nEdwards1 小时前
Leetcode 整数转罗马数字
linux·python·leetcode