昨日内容回顾
-
组合图绘制
代码最好多敲几遍,然后保存至自己容易找到的地方 后续如果需要直接拷贝修改关键参数直接使用即可
-
其他可视化相关模块及工具
matplotlib seaborn echarts highcharts pyecharts # 界面交互性更强
-
数据清洗理论概述
数据清洗 其实就是在对数据进行数据分析之前的审核 校验 比对 处理等措施 数据分析的工作流程 数据清洗类似于生活中的做菜流程 数据分析常用方法及流程 1.读取数据 read_csv read_excel read_sql 2.数据概览 info describe head tail index columns shape... 3.列字段处理 4.缺失值处理 5.异常值处理 6.字段类型处理 ...
-
数据清洗实战
1.列字段处理 无用字段 首尾空格 2.缺失值 3.异常值
今日内容概要
-
正则表达式
只要涉及到数据的筛选搜可以使用正则表达式 # 使用特殊符号的组合区字符串中筛选除符合条件的数据
-
数据清洗案例实战
价格数据 节省数据 新增字段
-
非关系型数据库之MongoDB
# 关系型数据库之MySQL 非关系型数据库之MongoDB '''是爬虫和大数据都可能会使用到的数据库'''
今日内容详细
正则表达式
# python代码完成手机号检验
# 1 手机号只能式纯数字
# 2 并且只能是11位
# 3 还必须只能是13 14 16 17 18...开头
# python 实现
# 获取用户输入的手机号
Phone = input('请输入您的手机号>>>:').strip()
# 纯数字
if Phone.isdigit():
# 11位
if len(Phone) == 11:
# 是13 14 16 17 18...开头
if Phone.startswith('13') or Phone.startswith('14') or Phone.startswith('16'):
print('是一个正常的手机号码')
else:
print('开头错误')
else:
print('手机号码只能是11位')
else:
print('手机号必须是纯数字')
# 正则表达式筛选数据
# 正则表达式
import re # 导入模块
phone_number = input('please input your phone number : ')
if re.match('^(13|14|15|16|18)[0-9]{9}$',phone_number):
print('是合法的手机号码')
else:
print('不是合法的手机号码')
"""
^(13|14|15|18)[0-9]{9}$ 正则表达式
字符串必须以13或者14或者15或者18开头
后面是9个数字(范围是0到9)
"""
字符组
# 正则表达式在没有量词修饰的情况下默认都是单个单个字符匹配
字符组概念
[0123456789] 简便写法 [0-9]
[a-z] 匹配26个小写字母
[A-Z] 匹配26个大写字母
[0-9a-zA-Z] 匹配0到9的数字或者a到z的小写字母或者A到Z的大写字母
特殊字符
. 匹配换行符以外的任意字符
\d 匹配数字
^ 匹配字符串的开始
^9 匹配数字9并且9必须出现在字符串的开头
$ 匹配字符串的结尾
9$ 匹配数字9并且必须出现在字符串的末尾
a|b 匹配字符a或字符b
|管道符标识表示或的意思
() 匹配括号内的表达式,也表示一个组
仅仅是分组不会影响正则表达式的匹配
[^] 匹配除了字符组中字符的所有字符
^如果写在了中括号的里面那么表示的取反
# 如果需要匹配的内容非常的明确 也可以直接书写内容
量词
"""量词不能单独使用 一定要跟在正则表达式的后面(字符串 特殊符号)"""
"""并且量词作用的范围仅仅局限于前面的第一个表达式 \w\d*"""
* 重复零次或更多次(默认贪婪匹配 多次)
+ 重复一次或更多次(默认贪婪匹配 多次)
? 重复零次或一次 (默认贪婪匹配 一次)
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
# 正则表达式默认都是贪婪匹配
更多实战
^[1-9]\d{13,16}[0-9x]$
必须以数字1到9开头 中间可以是13个或者是16个数字 最后是0到9或者x
^[1-9]\d{14}(\d{2}[0-9x])?$
必须以数字1到9开头 中间14个数 结尾是两个数字 再加一个数字或者x
'''生活中很多数据校验的正则表达式都已经写好了 我们只需要直接拷贝使用'''
\d{17}[\d|x]|\d{15}
如果是18位 那么最后一位可能是字母x
如果是15位 那么肯定是全数字
贪婪匹配与非贪婪匹配
"""
正则表达式默认都是贪婪匹配
如果想要改为非贪婪匹配只需要在量词的后面加上一个问号即可
"""
<.*> 贪婪匹配
<.*?> 非贪婪匹配
在python中使用正则
需要借助于python内置模块re
import re
re.findall(正则表达式,待匹配的文本内容)
默认筛选出所有符合条件的内容 使用最为广泛
re.serach(正则表达式,待匹配的文本内容)
匹配到一个符合条件的内容就结束 不再继续往后匹配
re.match(正则表达式,待匹配的文本内容)
从头开始匹配 如果开头就不符合 之后不再匹配
# 分组优先原则 括号内的内容优先展示
ret = re.findall('www.(baidu|oldgirl).com', 'www.oldgirl.com')
print(ret) # ['oldgirl']
'''findall默认是分组优先展示 优先展示括号内正则匹配到的内容'''
价格与节省缺失值处理
# 针对目的地的获取 无法使用切片和切割操作 只能使用正则
import re
re.findall('-(.*?)\d','深圳-香格里拉3天2晚 | 入住大连黄金山大酒店 + 南方航空/东海往返机票')
reg_exp = '-(.*?)\d'
df.loc[df.目的地.isnull(),'目的地'] = [re.findall(reg_exp,i) for i in df.loc[df.目的地.isnull(),'路线名'].values]
# 使用正则表达式获取出发地
import re
# re.findall('(.*?)-','大连-烟台3天2晚 | 入住烟台海阳黄金海岸大')
# re.findall('(.*?)-','秦皇岛-烟台3天2晚 | 入住烟台海阳黄金海岸大')
# re.findall('(.*?)-','香格里拉-烟台3天2晚 | 入住烟台海阳黄金海岸大')
# 查看缺失数据的占比
df.isnull().sum()/df.shape[0]
# 利用round限制小数点后面的位数
round(df['价格'].mean(),1)
# 利用价格平均值填充价格缺失值
df['价格'].fillna(value=round(df['价格'].mean(),1),inplace=True)
# 利用round限制小数点后面的位数
round(df['节省'].mean(),1)
# 利用节省平均值填充节省缺失值
df['节省'].fillna(value=round(df['节省'].mean(),1),inplace=True)
酒店类型与酒店评分
# 1.新增酒店类型字段 用于记录酒店的类型
# re.findall(' (.*?) ','北海祥丰嘉年华大酒店 舒适型 4.7分/5分')
# re.findall(' (.*?) ','北海祥丰嘉年华大酒店 豪华型 4.7分/5分')
# re.findall(' (.*?) ','北海祥丰嘉年华大酒店 经济型 4.7分/5分')
# for i in df['酒店']:
# print(i)
# Dataframe也支持正则
# df['酒店'].str.extract(' (.*?) ')
# 新增酒店类型
df['酒店类型'] = df['酒店'].str.extract(' (.*?) ')
# 了解 利用切片获取酒店类型
res = '北海祥丰嘉年华大酒店 舒适型 4.7分/5分'
res[-11:-8]
# 2.新增酒店评分字段
res = '北海祥丰嘉年华大酒店 舒适型 4.7分/5分'
# 1.切片
# res[-7:-4]
# 2.切割
# res.split(' ')[2].split('分')[0]
# 3.正则
re.findall('(\d\.\d)分',res)
# 新增酒店评分字段
df['酒店评分'] = df['酒店'].str.extract('(\d\.\d)分')
# 更换酒店评分的数据类型
df['酒店评分'].astype(float)
MongoDB数据库
关系型数据库
MySQL PostgreSQL Oracle db2 sqlite
拥有固定的表结构并且表与表之间可以创建关系
操作关系型数据库的语句称之为SQL语句
非关系型数据库
redis MongoDB memcache
没有固定的表结构 数据存储一般都是k:v键值对形式
操作非关系型数据库的语句称之为NoSQL语句
'''数据库掌握了MySQL之后其他的都很简单 语句也是如此'''
文档型数据库
# MongoDB是最像关系型数据库的非关系型数据库
MongoDB重要概念
MySQL
库 文件夹
表 文件
记录 一行行数据
MySQL MongoDB
库 database数据库
表 collection集合(表)
记录 document文档(记录)
# MongoDB不支持连表操作 但是支持主键索引
需要注意的是:
# 文档中的键/值对是有序的。
# 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)
# MongoDB区分类型和大小写。
# MongoDB的文档不能有重复的键。
# 文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
MongoDB下载与安装
下载地址:
https://www.mongodb.com/try/download/community
下载类型:
Community Server
作业
1.数据清洗完整案例独立写一遍
2.尝试着使用正则匹配一些文档内容
3.下载MongoAB的msi文件