Python数据分析、Pandas

数据分析用到的软件

jupyter notebook

代码模式

使用shift+enter键运行代码。每一个单元格都是一个代码区域

使用Insert菜单来添加新的单元格,变量可以跨单元格使用。

标记模式

模式切换之后,支持Markdown来写笔记

pendulum库

可以在官网上了解,一个日期时间库

数据分析基本常识

什么是数据分析

数据分析是指利用合适的工具,在统计学的支撑下,对数据进行一定程度的预处理,然后借助具体的业务分析逻辑,帮助大家进行业务监控、问题定位、解决问题的过程。

为什么做数据分析

根据数据分析趋势

数据分析究竟在分析什么

  1. 现状分析:只看到结果、表象

  2. 原因分析:分析内部成因

  3. 预测分析:预测销量和未来的计划

数据分析会分析哪些指标

  1. 总体概览指标:又叫做关键性指标,反应某个时间段内某个业务的平均值。
  2. 对比性指标:说明现象之间数量对比关系。例如:同比、环比、差值
  3. 集中趋势指标:反应某个现象在一定时间内所达到的一般水平。主要分为:

    • 数值平均
    • 位置平均:众数、中位数
  4. 离中趋势(离散程度):主要用于反应数据的波动情况

    • 极差:全距,用最大值减去最小值
    • 方差
    • 标准差
  5. 相关性指标

数据分析的流程

  • 熟悉工具
  • 明确目的
  • 获取数据
  • 熟悉数据
  • 处理数据
  • 分析数据
  • 得出结论
  • 验证结论
  • 展示结论

Pandas

Series

Series类似与一维数组的对象,由一组数据以及一组与之相关的数据标签(索引)组成

Series的数据标签可以不局限于数字

Series常见操作

构建一个Series

1
2
3
4
5
# 通过常规列表来创建Series
ser1 = pd.Series(['a', 'b', 'c', 'd'])

# 通过一个字典构建Series
dic = {'name' : 'lzx', 'age' : 18, 'location' : 'jinan'}

输出

name lzx

age 18

location jinan

查看一个Series的index和values

1
2
print(ser1.index)
print(ser2.index)

输出

RangeIndex(start = 0, stop = 4, step = 1)

Index([‘name’, ‘age’, ‘location’], dtype = ‘object’)

可以使用切片的方法来截取index,如

1
2
print(ser1.index[0:3])
print(ser2.index[:2])

改变Series的index值

1
2
# 想改index只能一起改,不能通过切片选择部分index进行修改
ser1.index = [0, 'one', 'two', 3]

Series的值不能通过series.values属性修改(和修改index相反)

1
2
3
4
5
6
7
8
# 先选中要修改的values值,再来重新赋值修改
ser1[:] = ['A', 'B', 'C', 'D']

# 或者通过index选择具体的值来进行修改
ser1['one'] = 'BB'

# 选择多个values进行修改(嵌套列表)
ser1[[0, 'one']] = ['name', 'sex']

DataFrame

由行标签和列表前以及值组成的二维数据结构,类似于平时的表结构

常见操作

创建DataFrame

1
2
3
4
5
6
7
8
9
# 通过普通列表创建DataFrame
df1 = pd.DataFrame(['a', 'b', 'c', 'd'])

# 通过嵌套列表创建多列DataFrame
df2 = pd.DataFrame([['one', 'a'], ['two', 'b'], ['three', 'c']])

# 通过字典创建DataFrame
dic = {'lower' : ['a', 'b', 'c', 'd'], 'upper' : ['A', 'B', 'C', 'D']}
df3 = pd.DataFrame(dic)

字典的键会成为DataFrame的列标签,所有的值将成为每一列的值

小写 大写
0 a A
1 b B
2 c C
3 d D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 指定index和column

df4 = pd.DataFrame([['one', 'a'], ['two', 'b'], ['three', 'c']], index = ['行1', '行2', '行3'], columns = ['第一列', '第二列', '第三列'])

# 显示index和columns
df4.index
df4.columns

# 修改DataFrame的index和columns
df4.index = ['line1', 'line2', 'line3']
df4.columns = ['col1', 'col2', 'col3']

# 单独修改某行的index或者某列的columns
df4.rename(columns = {'col2' : '新二'}) # 该指令不会原地修改,它会返回df4的副本,原来的df4不改变,可以用两种方法

# 方法1
df4 = df4.rename(columns = {'col2' : '新二'})

# 方法2
df4.rename(columns = {'col2' : '新二'}, inplace = True)

# 改单独的行
df4.rename(index = {'line1' : '新行1', 'line2' : '新行2'}, inplace = True/False)

DataFrame常见的属性

df.shape

返回对应的行和列,如

1
2
3
df4.shape # 返回行和列(元组)
df4.shape[0] # 返回行
df4.shape[1] # 返回列

df.index

返回df的索引

df.colunms

返回df的列信息

df.values

返回整个DataFrame的信息

df.T(创建副本,不会修改原来的DataFrame)

返回df矩阵的转置

df[’列名‘]

返回该列对应的值,以Series存储

df[‘列名’].value_counts()

统计每一列不同元素的个数

df[‘列名’].unique()

对列元素进行去重处理

df[‘列名’].nunique()

求列元素不重复元素的个数,等效于len(df[‘列名’].unique())

df.describe()

返回该DataFrame的概览(包括每个列的元素个数、不重复元素个数、最大值、出现频率最高元素)

df.info()

列出每一列值的类型

df.head(n)

查看DataFrame前n行数据,默认n = 5

df.tail(n)

查看DataFrame的后n行,默认n = 5