内容介绍
-
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')