数据分析-python模块5.26

昨日内容回顾

  • 组合图绘制

    代码最好多敲几遍,然后保存至自己容易找到的地方
    后续如果需要直接拷贝修改关键参数直接使用即可
    
  • 其他可视化相关模块及工具

    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]	匹配09的数字或者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]$
	必须以数字19开头 中间可以是13个或者是16个数字 最后是09或者x
^[1-9]\d{14}(\d{2}[0-9x])?$
	必须以数字19开头 中间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文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值