python 的应用场景
重复性的东西编写脚本
和对于大数据量的操作
数据搭建的环境
不建议自己在网上找下载, 建议下载 anaconda, 可在清华镜像里面下载 anaconda, 下载安装之后可在桌面上找到程序 image.PNG
jupyer Notebook 为本次学习的常用项目, 可进行可视化界面操作, 分段
shift + 光标执行
python 基础
目录
1. 数据类型
2. 变量
3. 三大结构
3.1 列表
3.2 元组
3.3 字典
4. 控制流
5.def 命名函数
6.Numpy 包
- 7.1 Series
- 7.2 dataframe
8. 数据的筛选
9. 数据的聚合
10. 多表关联
11. 多重索引
12. 文本函数
13. 空值 & 去重
14.apply 函数
15. 数据透视表
16. 链接数据库
1. 数据类型:
数值型, 直接输入可以进行计算
可用 type 进行数据类型的判断
返回整除的结果
显示余数的结果
int 整数直接计算
在 python 里面单双引号基本没有影响, 但是在一段话表示的时候里面有单引号, 整段话两边套上双引号才能识别, 都为单引号系统则识别不了. 相反, 整句里面用双引号, 整句的时候则用单引号作为系统区分.
系统报错, 将单引号改成双引号就可以识别(双引号为具体内容的边界)
边界用三引号的时候, 内容可以包含单双引号的.
字符串: 字符串同样不能直接进行计算, 可用 int 转换成数字进行计算.
bool 数组(ture 默认为 1,false 默认为 0): 是可以进行与数字加减运算的
注意, 第一个字母要大写
None: 代表缺失值, 不能进行运算(相当于表格内画斜线的格子)
"": 代表空值
回目录
2. 变量
对应的叫 " 常量
a=1
变量 = 1(不加引号的时候就是变量, 中文也可以, 但是不建议用, 因为兼容性差)
同时给对个变量赋值: a,b=1,2
3. 三大结构
3.1 列表
num=[1,2,3]表示数据里面有 1,2,3, 可以对其进行运算
len()列表里面有几个元素
访问列表里面有几个元素: 列表名[] 第一个位置是 "0" 表示
查找 sql, 增加, 更改, 删除
shift+tab 帮助键查
insert(位置, 插入内容)插入
apped(插入内容)在末尾添加内容, 但是插入的是唯一的值, 不能添加多个因素
变量 = 变量 +[内容 1, 内容 2]添加多个因素可以此方法
pop(位置)删除, 直接空的话默认删除末尾的数字
更改
二维列表的创建
元组
()
元组不能修改, 与列表对比
字典
键 key 值 value 对
在磁盘上占用空间比较大, 查询效果一直会很快
set()将列表集合化, 相当并集去重
list(set())将 set 进行嵌套变成新的列表
回目录
4. 控制流
if for while
[if] 判断
[while] 循环
- [for]
- for i in range(10)
- #10 代表一个列表
for 优点就是不容易形成死循环
需要 1~100 之间的数字
换一种写法, 一句等同以上三句的效果
5.def 命名函数
":"
换行缩进表示 def 内部的函数内容
1~10 之间求平方
map()全匹配
免除了定义函数的苦恼
python 有很多第三方库, 可以进行加载使用
加载: import collection
其中 collection 为第三方模块
常用包:
特性是用法比较简单, 并且有很多共享的第三方包
回目录
6.Numpy 包
进行加载
Python 的特点是语法比较简单, 并且有很多可以共享的第三方包其中今天提到的 Numpy 和 Pandas 这两个包常用语统计分析, 这两个包会帮助我们保证速度的处理上千条数据.
[Numpy 包进行加载和使用]
可用 type 查看数据类型
利用 a 变量对数组进行赋值
一样可以接受与数组一样的切片, 简单运算
能够进行多维数据结构
注意数据类型的区别 "int32"
7.Pandas 包
性价比会相对较高一些(因为是基于 Numpy 开发的)-- 操作方面更加习惯, 数据框的形式.
进行加载并重命名为 pd:import pandas as pd
其主要有两个数据结构:
7.1 Series
一维的, 在 tab 搜索时首字母 S 要大写
从 0 开始到 4 结束, 索引
有一些比较高的属性 shift+tab 调出查看里面支持哪些参数
结果区别
索引查找
索引也可以进行多个值索引, 索引是列表表示, 所以需要有方括号.
最外面的方括号代表索引方式
里面的方括号, 代表索引的内容一个列表
比较智能的可以自动补缺
特性: 原始的数值类型的内容增加一个字符串, 则整体都会变成字符串, 数据类型会保证统一.
基础是一维的近似于数组的结构.
7.2 dataframe
二维的, 视觉上比较接近表格
相当于无数的一维叠加起来, 支持多形式输入
通过字典来输入数据框:
会发现顺序改变, 是因为字典本身就是无需的
进行一维输入: 会发现, 两者不等价, 数据结构是不一样的
对数据框进行切片, 数据类型进行变换
等价代码 df.age, 与别的一起写有可能会报错, 建议用方括号的切片形式
基于行的切片
同时可切多个值
以上主要是些标准的查找
单独搜索某一值
字符串的更改
针对的是某个行和某个列
某一个特定值的筛选 "年龄为 18 岁的"
方法 1: 逻辑判断
外面的 df 是提取出来, 里面的 df 代表的是逻辑判断.
提取结构就是 TRUE 的结果内容
多条件的筛选查找
同时满足这两个条件的,"|" 为并集
方法 2: 逻辑判断
iloc 和 loc 查找(可同时满足两个参数进行切片的)
iloc 所在行的数字进行索引, 是针对第几行的
loc 是针对标签进行切片的
(可同时满足两个参数进行切片的)
df.ix 是可以行和标签一起使用, 但是还是会报错, 不建议使用.
读入. CSV 文件: read.CSV
首先把文件放在相同的目录下面
本身默认读取就是 utf 所以读取会很顺畅
如果改成读取 gbk 则会报错, 如果读取 gbk 需要进行设置解析编码
查看前几行:
查看尾行: df.tail()
查看数据类型依然用: df.info()
还可以继续追加筛选过滤条件
回目录
8. 数据的筛选
1. 转至
表名称. T, 可将表格快速的转至
2. 排序
[values] 函数
方法 1: 排序的依据 by="排序依据"
方法 2: 通过数组也可以进行排序
df.avg.sort_values()
二者区别是, 如果用数组调, 返回的是数组, 在数据框里面调直接返回的是数据框.
ascending=False 改变排序升序为降序
对字段进行排序: 直接把条件加入
列出的表不是根据实际的中文顺序进行的, 介意的话需建另一张表格进行调整.
[index] 按照索引的排序
[rank] 函数
默认顺序为升序排列, 添加 ascending 参数改为降序
method 参数默认为加权平均, 改为 min 直接用排序第一个, 符合现实使用的习惯. 改为 first 则排序不考虑并列情况直接按照顺序来进行.
3. 查找重复
直接可查出有多少个唯一值
加个 count 可直接查找出合计数量
4. 描述性统计
5. 累计累加
6. 分段统计
使用更加适合分段统计的 cut 函数
pd.cut(df.avg.bins=5) 系统自动分割成 5 部分
也可以自定义区间, 然后命名
常用于用户分级, 消费水平分割等使用场景
7. 分位法进行分割统计
分位法函数:.qcut()
x 具体的内容例如 df.avg
q 排名几等分
retbins 是否包含开区间闭区间
precision 分割出来的精度
duplicates 是否要进行些去重操作
回目录
9. 数据的聚合
聚合函数: MySQL 不支持分组排名, 则可用此函数 groupby
通过 for 循环可把分组内容打印出来进行查看
10. 多表关联
三种关联方法
1.merge 根据键值, 对的是某一列
同名去重不同名保留
附加:
修改表的字段名称可用 rename()函数
也可把行名提取出来, 然后从 0 开始查其位置进行更改, 再赋值的方法(一般用于只改一个, 比较简单)
- col=list(df.columns)
- col[0]='all'
- df.columns=col
2.join 针对索引进行
针对的是固定的索引例如日期
3.concat 堆叠, 对应的是对象
两张表格上下放一起,"暴力组合"
之间是上下拼接, 增加函数 .axis=1 进行左右拼接, 对不上的默认为空值.
应用场景: 例如 1~12 月份相同字段的销售统计的拼接汇总等.
11. 多重索引
方法 1: 可用切片
方法 2: 数据框类型的
不借助 groupby 进行设置多重索引的方法: set_index
把列变成索引进行排序, 输出可达到整理在一起的效果
反过来把索引变成列, 增加函数 reset_index()即可
这时后面可直接 [] 去引用.
回目录
12. 文本函数
pandas 里面预处理函数
需求: 想把表格内某一列带方括号的字段去掉方括号.
思路 1: 直接进行左右两边切掉(不成功, 因为操作是针对数组进行的, 是针对索引的切片)
思路 2: 调用. str()(可行)
例如:.str.count 统计字符串出现的次数
.str.find("数据")从哪个位置开始统计
.str 都是针对值里面的字符串进行的操作
需求: 继续把单引号排除
思路 1: 用空值替换单引号(不可行)
因为 replace 针对的是表格内具体的某一值进行替换, 所以, 上面对表格内字段进行替换并没有成功.
思路 2: 增加. str (可行)
回目录
13. 空值 & 去重
1. 空值
对表赋予空值, 及对空值进行再赋值
2. 删除重复元素
去重方法 1:
去重方法 2: 相对更简单
14.apply 函数
帮助我们把一个函数或者自定义函数应用到所有的行或者列里面进行处理, 可大大提高数据分析的效率.
需求示例:
薪资显示数值后面加上 K, 例如 11.5K
方法 1:
用 .str 将浮点数据转成文本再进行拼接
方法 2:
输入 x, 输出的是. str 和 k 进行拼接
输入从 position.avg 来
apply 的优点是特别快
方法 3: 等价方法 2(在里面可加进去简单的判断)
方法 4:
注意, 直接 position 会直接报错, 因为对象不能针对整个表, 其中参数 axis 默认为 0, 是空值对应函数应用到列里面. 需要把它设置为 = 1, 说明函数设置应用到列, 对这一列数组进行操作, 指明是 x.avvg 则可成功.
1.apply 聚合(分组)
需求: 不同城市下面新增排名前 5 的职位.
分析需求:
1对不同城市 -- 分组
2前 5--- 排序
方法 1: 记住输入和输出
数据拆开后再合并
方法 2:
通过控制参数, 变成升序
agg 和 apply 的区别: agg 聚合后针对固定的行和列, apply 的灵活性比较高, 可以对数据进行拆分再组合, 不涉及行数的变化用 agg 是可以的.
agg 直接调用方法;
等价于:
比较高级的用法是, 可以同时应用多个函数
回目录
15. 数据透视表
可以处理超大的数据对比 Excel 透视
首选要考虑 "我想要的数据透视表形式是什么样子的"
values: 具体的哪个值进行计算
index: 按照什么来进行聚合, 例如 "city"
columns: 列是设什么样子的, 例如 "workyear"
aggfunc: 具体形成什么样子的值, 默认是 "mean"
多重索引同样可以
调用 np, 所以要用 np.mean 等计算方式, 直接 mean 则会报错
也可在此表格进行继续接片
其中 margins 参数 = Ture 是在透视表下面添加汇总项目
透视表的一些高级用法:
需求: 只想要对平均薪资进行平均, top 进行求和, 想要计算 values 的值是有针对性的.
方法: aggfuns 里面把列表改成字典
![](https://img2018.cnblogs.com/blog/793818/201811/793818-20181117165148355-1859547716.png)
应用场景, 对处理大数据量的统计提供很好的工具.
- <a href=#mulu>
- <font color="#C0C0C0">
- 回目录
- </font>
- </a>
- ###
- <a id="16">
- 16. 链接数据库
- </a>
建议用 pandas 链接数据库, 会比较方便
需要安装一依赖包
![](https://img2018.cnblogs.com/blog/793818/201811/793818-20181117165245998-1017022446.png)
老师在讲的时候说新人在安装依赖包的时候回会遇到些问题, 很幸运~ 我就遇到了~~~
安装包的时候出现 "pip 不是内部外部, 或其他可执行的程序" 的报错
方法: 需要把环境配置一下,
此电脑 -->属性 -->高级 -->环境变量 -->Path-->把 ananconda 里面含有 pip 程序的两个文件的位置路径放进去 -->保存 -->调用 cmd(win+r, 输入 cmd)-->成功
- ![](https://img2018.cnblogs.com/blog/793818/201811/793818-20181117165310974-728894245.png)
- ![](https://img2018.cnblogs.com/blog/793818/201811/793818-20181117165317258-436531379.png)
**1. 链接数据库方式 **
- import pymysql #加载变量
- conn=pymysql.connect(
- host='localhost', #定义新的变量链接, 可以直接输入 localhost, 也可以直接输入本地的地址 127.0.0.11 因为 MySQL 一般都是本地所以这两种方法均可
- user='root', #数据库用户名称
- password='12346', #账号密码
- db='data', #想要链接的数据库
- port=3306, #输入端口, 默认的, 如果有变化自己更改即可
- charset='utf8' #文本编码如果是 gbk 则改成 gbk 对应
- )
- ```
创建后调用一个方法(直接记住)
conn.cursor()
之后可以用 .execute()来进行 sql 语句的输入
如果需要把所有的结果都执行出来
data=cur.fetchall()
不过会以元组的形式输出, 需要简单处理一下
进行增删该查后的结果提交操作可用. conn.commit()方可提交
打开游标之后, 需要养成好的习惯进行关闭
cur.close()
同样, 数据库连接进行关闭
conn.close()
2. 连接数据库方式
pandas 在数据库的应用最关键的是 sql 和 con
可直接先把 sql 语句写好
要注意的是链接是比较特殊的, 新的链接方式 .ORM 帮助数据读写的 sqlalchemy
从读取到处理然后到写入数据库的过程:
1读取表:
如果忘记数据库中有哪些表的具体名头可以用此函数进行查看
reader('show tables')
2处理合并多表格
3按照需求条件, 分组汇总, 提取部分数值转换重置成数据框
4查看数据类型是否需要更改
result.info()
5写入数据库
参数 if_exists 指的是他是否存在了 ='fail'是默认的, 也就是说如果表存在的话, 则写入是失败的.
把参数修改成 ='append' 是指插入数据, 即表存在的话则是插入数据, 表不存在的话则会是新建数据,
参数 index, 如果 = True 是代表写入的时候把数据框里面的索引变成一列进行存储; 一般会更改为 = False 不写入.
返回 MySQL 数据库查看
会发现新导入的表格的字段类型和之前的不太相符, 不是预想的最优形式.
建议在开始做的时候, 预先在数据库中建好, 设置好新的表格表头及类型, 然后再进行导入.
并且注意, 在 python 导入运行步骤时候, 如不小心执行了多次, 则在数据库中也会相应的重复增加多次的数据, 所以操作要小心谨慎.
当在数据库建表的时候字段小于导入字段的时候, python 会报错.
当在数据库建表的时候字段大于导入字段的时候, python 则可正常写入, 在数据库中可自动匹配为空.
6写入 .CSV
返回总目录 https://www.cnblogs.com/hankleo/p/9973292.html
来源: http://www.bubuko.com/infodetail-2850767.html