MongoDB数据库和数据分析模块总结

MongoDB数据库和数据分析模块总结

  • scrapy的基础知识和MongoDB的简介
  • 非关系型数据库之MongoDB
  • MongoDB用户权限
  • 爬取王者荣耀皮肤思路
  • pomongo模块   
  • ipython模块
  • jupyter模块
  • Anaconda软件
  • 数据分析numpy科学计算模块
  • 索引切片
  • pandas模块简介
  • DataFrame
  • 读取外部数据

 

scrapy的基础知识和MongoDB的简介

爬虫框架Scrapy

功能最为强大,使用频率高的一款异步爬虫框架

'''
同步:提交完任务之后原地等待任务的返回结果期间不做任何事情
异步:提交任务之后不等待任务的返回结果,可以去做其他事情,结果可以通过回调获取(主动获取)

下载错误解决

问题1:

window系统可能出现问题

  can not import Deque

解决方法:

  升级python版本系统

问题2:

  vistual c++ 需要c++升级

解决方法:  

在mac系统下载不会出错,但windows系统可能出错

如果windows电脑下载出错,且没有关键字提示报错需要进行格外配置

1.

pip3 install wheel

2.

网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

   下载对应系统的文件,cp36:python3.6版本,amd64表示64位操作系统,win32表示32为操作系统

3.下载文件后的安装位置最好容易找到

 可以通过报错信息查看文件的存放位置

pip3 install 文件名

4.

pip3 install pywin32

5.

pip3 install scrapy

scrapy的基本使用和文件介绍

创建一个项目

语法:

scrapy startproject 项目名

首先进入D盘创建文件

创建爬虫文件

语法:

scrapy genspider 名称 网址

创建文件前,先进入目标文件夹

算数符介绍

"""
add        加(add)
sub        减(substract)
div        除(divide)
mul        乘(multiple)
"""

 scrapy文件介绍

spiders文件:
  存放爬虫项目文件
setting.py:
  需要进行相关配置,将“ROBOTSTXT_OBEY=True” 改为 “ROBOTSTXT_OBEY=None”

middlewares.py:

  中间件文件

 piplines.py:

  数据存储相关的文件

 

非关系型数据库之MongoDB

MonogoDB的特点

该数据库数据的量和处理时间较于关系型数据库快很多

该数据库也是大数据生态圈里面常用的一款软件

该数据是一款最像关系型数据库的非关系数据库(文本结构)

MongoDB重要概念

MySQL MongonDB 名称
database database
table 表 collection 集合
row 行 document 文档
colum field 字段

MongoDB文件介绍

 bin文件夹

'''里面存放一堆启动文件'''
    mongod.exe    服务端
    mongo.exe      客户端

data文件夹

  存放数据相关文件

log文件夹

  存放日志相关文件

启动MongoDB步骤

 配置环境变量

 进入环境变量配置

 对系统变量Path进行编辑

MongoDB的相关文件设置

查看mongodb文件夹内是否含有data和log文件夹

如果没有需要你自己手动创建

如果有则直接跳过

在data文件内创建db文件夹(目的是为了管理文件资源)

在MongoDB文件夹根目录下创建mongod.cfg文件,文件内代码为

        systemLog:
               destination: file
               path: "D:\MongoDB\log\mongod.log"
               logAppend: true
        storage:
           journal:
              enabled: true
           dbPath: "D:\MongoDB\data\db"
        net:
           bindIp: 0.0.0.0
           port: 27017
        setParameter:
           enableLocalhostAuthBypass: false

DOS界面设置

输入代码

        mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log --logappend --dbpath D:\MongoDB\data\db  --serviceName "MongoDB" --serviceDisplayName "MongoDB"  --install  --auth
'''auth即让服务端以校验用户身份的方式启动 不加则不校验(刚开始不加)''' 

启动/关闭

net start MongoDB
net stop MongoDB

登录

mongo

基础命令

'''mongodb语句不需要分号结束'''

1.查看所有的数据库名词

show dbs

2.退出客户端

exit
quit()

MongoDB的特性

创建东西后,必须写入数据才会保存到硬盘, 在此之前都是在内存中临时创建,用完就没了

针对库的增删改查

查看

show dbs  # 查看数据库

增加

use 库名

删除

语法:

# db是关键字 当前在哪个库下执行改命令就是删除哪个库
>db.dropDatabase('库名')

 针对集合的增删改查

'''要想操作collection集合必须先有database库'''

增加

语法:

db.createCollection('表名')
# 如果单纯的创建不插入数据 那么也只是在内存临时创建
db.collection表名

show tables
show collections

忽略

语法:

db.collection名字.drop()

针对文档(记录)增删改查

语法:

# 单条数据
db.表名.insert({})
# 多条数据
db.表名.insertMany([{},{},{}])
db.表名.insert([{},{},{}])

语法:

db.表名.find()
db.表名.find({'     ':'    '})

语法:

# 修改
db.表名.update({},{$set:{}})
# 完全替换 (少用)
db.表名.update({})

文档操作补充

'''涉及到数据的嵌套查找 支持直接点键或者索引'''

eg:

db.db1.find({'ddd.fg':123})

db.db1.find({'fgh.0':'iii'})

 

MongoDB用户权限管理

"""涉及到用户权限相关 引号推荐全部使用双引号"""

创建用户

复制代码
'''
mongodb针对用户权限的创建,数据可以保存在不同的数据库下
之后在登录的时候只需要自己指定账户数据来源于哪个数据库即可
管理员用户数据一般情况下推荐保存到admin库下
而普通用户任意库都可以
'''

创建管理员

1.切换到admin数据库下

use admin

2.创建账户并且赋予权限

复制代码
# 用户名为:root
# 密码:123
# 权限:管理员,存储位置:admin库
db.createUser({
            user: "root",
            pwd: "123",
            roles: [ { role: "root", db: "admin" } ]
          })
复制代码

其他用户在test数据库下创建

1.切换到test数据库下

use test

2.创建账户并赋予权限

针对test库用于读写的权限  针对db1库只拥有读的权限

复制代码
db.createUser({
            # 用户名:jason
            user: "jason",
            # 密码:123
            pwd: "123",
            # 权限:读写,存储位置:test
            roles: [ { role: "readWrite", db: "test" },
            # 权限:读  存储位置:db1
                     { role: "read", db: "db1" } ]
          })
复制代码

为了使设置生效,要进行下部操作

停止服务

net stop MongoDB

再移除服务

MongoDB --remove

再次系统配置

        mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log --logappend --dbpath D:\MongoDB\data  --serviceName "MongoDB" --serviceDisplayName "MongoDB"  --install --auth

再次启动

net start MongoDB

两种验方式

1.直接登录验证

2.进入之后再验证

数据查询方法

数据准备

'''是输出结果形式好看'''
db.表名.find().pretty

查询指定字段

# 查找id为3的名字与年龄
db.user.find({'_id':3},{'_id':0,'name':1,'age':1})
'''0表示不要 1表示要'''

针对主键字段_id如果不指定默认是必拿的
普通字段不写就表示不拿

查询

学习mongodb的查询语句只要对比着MySQL去学,非常的容易!
并且在书写mongodb查询语句的时候,我们可以先使用MySQL的SQL语句
然后参考SQL语句再书写mongodb语句(相当于将MySQL语句翻译成mongodb)

比较运算符

mongoDB符号 意义
$ne !=
$gt >
$lt <
$gte >=
$lte <=
{key:value} =

逻辑运算符

在SQL中:and,or,not
NOSQL中:逗号分隔的多个条件是and关系
                “$or”的条件放在[]中
                “$not”取反

成员运算

在SQL中:in,not in
在NoSQL中:"$in","$nin"

正则匹配

用正则符号组合去文本中筛选出符合条件的数据
# SQL:regexp 正则
# MongoDB:/正则表达/i

范围/模糊查询

复制代码
语法:
    find({查询条件},{筛选字段})
"""
MySQL
    关键字    like
    关键符号
        %    匹配任意个数的任意字符
        _   匹配单个个数的任意字符
MongoDB:
    通过句点符
    $all
"""

排序

"""
MySQL:
    关键字              order by
    升序 降序            asc  desc
MongoDB
    关键字                sort
    升序 降序            1    -1
"""
排序:1代表升序,-1代表降序

分页(限制查询条数)

"""
MySQL    
    关键字        limit
    分页         5,5
MongoDB    
    关键字        limit
    分页         skip
"""

杂项补充

获取数量

eg:

获取age大于30的user信息

db.user.count({'age':{"$gt":30}}) 
# 输出为2
db.user.find({'age':{"$gt":30}}).count()
# 同上,输出为2

分组查询

按照部门分组,输出部门名

db.emp.aggregate({'$group':{'_id':'$post'}})

求每个部门的平均年龄

db.emp.aggregate({"$group":{'_id':'$post','avgage':{'$avg':'$age'}}})

求每个部门的最高薪资与最低薪资

db.emp.aggregate({
    '$group':{
        '_id':'$post',
        '最高薪资':{'$max':'$salary'},
        '最低薪资':{'$min':'$salary'}
    }
})

 

爬取王者荣耀皮肤

思路

1.进入官网查看每个详细页面的网址

2.循环获取每个详细页面的网址,向详细网址发送请求

3.进入详细页面,查看图片加载方式

4.切换小图标时,背景图会变化,背景图为所要的数据

 5.打开网络源码,发现背景图所在位置,但只有一个地址,所以推测为js加载方式 5.打开网络源码,发现背景图所在位置,但只有一个地址,所以推测为js加载方式

 6.通过切换小图标,url地址在变化,发现得到的地址是图片地址

 7.所以可以识别,有多少个小图标就有多少个大图片,通过改变数字就可获取图片地址

 

pomongo模块

pymongo模块可以实现python和mongoDB实时交互

pomongo的基本操作

调用模块

import pymongo

创建数据库runoobdb

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]

创建集合sites(先创建库)

mycol = mydb["sites"]

插入数据

mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" } 
x = mycol.insert_one(mydict)

查看数据

y = mycol.find_one()
print(y)

 

数据分析

数据分析应用领域

  商品推荐:

  量化交易:

    应用:股票、期货等数据分析

  短视频推送:

    应用:抖音 今日头条等短视频推荐

需求分析

  就是要分析什么数据,通过什么方式分析 想要什么样的结果

数据采集

  数据的来源:

    1.公司内部自带

      直接调用即可 MySQL MongoDB

    2.网络爬虫获取

      需要编写代码 爬虫相关技能

    3.第三方服务

      花钱直接购买 钞能力

数据清洗

  将获取到的数进行效验是否符合分析条件

    缺失数据 异常数据...

数据分析

  选择对应的计算公司,算法模型分析数据

生成数据分析报告

  攥写分析报告并给出分析之后的规律及建议

数据可视化

  将复杂的数据用图形的形式展示出来,方便查看相应规律,数据可视化步骤一般是结合数据分析报告一起

数据分析三剑客简介

numpy模块

  数学计算模块,他是所有计算机模块的底层模块

pandas

  主要用于excel表格

mateplotlib

  数据可视化模块

 

ipython模块

ipython模块下载

pip3 install ipython -i https://pypi.tuna.tsinghua.edu.cn/simple/

打开cmd之后直接输入ipython进入全新的编程环境

  1.代码有提示

  2.代码自动缩进

  3.通篇颜色不单调

 

jupyter模块

模块的下载与使用

在cmd窗口下载

pip3 install jupyter -i 网络地址

运行jupyter

命令行输入命令,进入页面

jupyter notebook

还有一种方法,登录网址:http://localhost:8888/

# 打开的界面取决于终端输入jupyer notebook命令的左侧路径

功能区域

 upload用于上传任意类型的文件

new下拉框:

  python3用于创建notebook文件

  Text File用于创建文本文件

  Folder用于创建文件夹

  Terminal用于模拟cmd终端

 notebook文件

notebook文件的后缀名是.ipynb 该文件无法以正常的双击直接打开

不在专门的notebook环境才可以打开会看到

需要使用专门的notebook环境才可以打开并且查看内部的真实数据,以后看到该类型的文件就使用jupyter notebook打开

该模块的缺陷

"""
其实该模块就可以进行数据分析相关的工作 但是有一个非常大的缺陷
就是数据分析过程中需要使用到的其他模块都需要自己下载
    并且跟数据分析相关的模块不下于200个
"""

 

Anaconda软件

# 其内部集成了很多数据分析相关软件及功能 并且自动下载了接近300个数据分析相关模块

页面功能介绍

Home:主要是一些已经准备好的软件 有直接可以使用和下载即可使用

Environments:里面主要包含数据分析相关的模块

Learning:里面含有大量的技术教程

Community:里面含有大量技术交流平台

Jupyter Notebook详细操作

错误排查

"""
主界面点击jupyter notebook之后无法呼起浏览器打开界面原因在于
    你的计算机名词含有中文
"""

基础单词了解

    单词     意义
    cell    单元格
    cut        剪切
    copy    拷贝
    paste    粘贴
    above    在...上面
    below    在...下面
    replace 替换
    delete    删除
    undo    撤销
    split    切割
    merge    合并

命令行模式与编辑模式

'''
    蓝色对应的是命令行模式、绿色对应的是编辑模式
'''

快捷键

1.运行当前单元格

ctrl+enter

2.运行当前单元格并选中下方的单元格

shift+enter

3.如何书写md格式的标题

方式1:
  命令行模式下按m键,后按照警号个数书写几级标题执行即可,之后要运行,shift+enter
方式2:
  编辑模式下先写文本,后进入命令行模式按M加数字来控制几级标题 

4.如何在当前单元格的下方新建一个单元格

命令行模式,按b键

5.如何在当前单元格的上方新建一个单元格

命令行模式,按a键

6.如何删除单元格

命令行模式,连续按两下d键

7.如何撤销删除

命令行模式下按z键

 

数据分析numpy科学计算模块

科普

复制代码
'''
很多编程语言对数字精确度不是很敏感 python亦是如此
'''
eg:
    a=524552524.532523
    b=str(a)
    print(b)
    # 输出可能为
    524552524.5

numpy简介

  1. Numpy是高性能科学计算机和数据分析模块的基础包
  2. 也是pandas等其他数据分析工具的基础
  3. NumPy具有多维数组功能,运算更加高效快速

结论

  numpy模块使数据计算更高效 

多维数组

# numpy中同一个数组内所有数据数据类型肯定是一致的

一维数组

np.array([1,2,3,4,.....])

二维数组

np.array([[1,2,3,4,.....],[9,8,7,6,.....]])

数据类型

布尔型

bool_

整型

int_、int8、int16、int32、int64

int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数

无符号整型

uint8、uint16、uint32、uint64

浮点型

float_,float16,float32,float64

复数型

complex_,complex64,complex128

常用属性

数组的转置(对高维数组而言)

T

查看数组元素的数据类型

dtype

查看数组元素的个数

size

查看数组的维数

ndim

 查看数组的维度大小(以元组形式,输出为几行几列)

shape

如何查看某个方法的使用说明

方式1:在方法后面跟问号执行即可

方式2:写完方法名后先按shift不松开然后按tab即可(shift+tab)

array() 

将列表转换为数组,可选择显示指定dtype

arange()

range的numpy版,支持浮点数

linspace()

平均等分

zeros()

根据指定形状和dtype创建全0数组

ones()

根据指定形状和dtype创建全1数组

empty()

根据指定形状和dtype创建空数组(随机值)

eye()

根据指定边长和dtype创建单位矩阵

 

索引切片

针对一维数组 索引与切片操作跟python中的列表完全一致

花式索引(间断索引)

依照索引值

布尔值索引(逻辑索引)

针对二维数组索引与切片

语法:

res[行索引(切片),列索引(切片)]

运算符

数学运算符

 +:数组对应元素的加和

-:数组对应元素的差

*:数组对应元素的乘积

/:数组对应元素的商

//:数组对应元素商的余数

**:数组对应元素的幂指数

比较运算符

>:等价np.greater(a,b)

    判断arr1的元素是否大于arr2的元素

>=:等价np.greater_equal(,b)
  判断a的元素是否大于等于b的元素

<:等价np.less(a,b)
  判断a的元素是否小于arr2的元素

<=:等价np.less_equal(a,b)
  判断a的元素是否小于等于b的元素

==:等价np.equal(arr1,arr2)
  判断a的元素是否等于b的元素

!=:等价np.not_equal(arr1,arr2)
  判断a的元素是否不等于b的元素

常用数学函数

np.round(arr):

对各元素四舍五入

np.sqrt(arr):

计算各元素的算术平方根

np.square(arr):

计算各元素的平方值

np.exp(arr):

计算以e为底的个元素为指数

np.power(arr, α):

计算各元素的指数

np.log10(arr):

计算以10为底各元素的对数
np.log(arr):

计算以e为底各元素的对数

np.min(arr,axis)
  按照轴的方向计算最小值
np.max(arr,axis)
  按照轴的方向计算最大值
np.mean(arr,axis)
  按照轴的方向计算平均值
np.median(arr,axis )
  按照轴的方向计算中位数
np.sum(arr,axis)
  按照轴的方向计算和
np.std(arr,axis)
  按照轴的方向计算标准差
np.var(arr,axis)
  按照轴的方向计算方差

随机数

numpy中的random子模块

以np.random为前缀

rand

给定形状产生随机数组(0到1之间的数)

语法:

# 生成X行Y列数据组
变量=np.random.rand(X,Y)

randint

给定形状产生随机整数

choice

给定形状产生随机选择

shuffle

与random.shuffle相同

uniform

给定形状产生随机数组(随机均匀分布)

normal

随机正态分布

 

pandas模块简介

pandas的主要功能

1.具备诸多功能的两大数据结构: 

  Series和DataFrame都是基于Numpy构建出来的
  公司中使用频繁的是DataFrame,而Series是构成DataFrame的基础,即一个DataFrame可能由多个Series构成

2.集成时间序列功能

3.提供丰富的数学运算和操作(基于Numpy)

4.灵活处理缺失数据

数据类型Series

类似于一维数组对象,由数据和相关的标签(索引)组成

缺失数据概念

在数据处理中如果遇到NaN关键字那么意思就是缺失数据,并且NaN属于浮点型

为什么会出现数据缺失

因为新的索引标签,无法与旧的序偶印标签对应所以产生缺失

相关方法

dropna():过滤掉值为NaN的行

 fillna():填充缺失数据

notnull():判断为不缺失数据, 返回布尔数组

 isnull():判断为缺失数据,返回布尔数组

数据修改规则

如何判断当前数据是否改变
  1.如果执行操作之后有结果说明原数据没有变

  2.如果执行操作之后没有结果说明原数据改变

布尔值索引

布尔值索引的本质就是按照对应关系筛选出True对应的数据

行索引取值

f.iloc[0]

标签取值

f.loc['a']

Series数据操作

增加数据

res['a']=88

查数据

res.loc['a']

删数据

del res[0]

算数符介绍

"""
add        加(add)
sub        减(substract)
div        除(divide)
mul        乘(multiple)
"""

 

DataFrame

性质

表格型数据结构,相当于一个二维数组,含有一组有序的列也可以看作是由Series组成的共用一个索引的字典

构造:

pd.DataFrame({'one':[1,2,3,4],'boc':[5,6,7,8]})
"""
以上创建方式都仅仅做一个了解即可
因为工作中dataframe的数据一般都是来自于读取外部文件数据,而不是自己手动去创建
"""

常见属性

行索引

fh.index

列索引

fh.columns

 转置

fh.T

值索引

fh.values

快速索引

fh.describe

 

读取外部数据

pd.read_csv()  # 可以读取文本文件和.csv结尾的文件数据
pd.read_excel()  # 可以读取excel表格文件数据
pd.read_sql()  # 可以读取MySQL表格数据
pd.read_html()  # 可以读取页面上table标签内所有的数据

文本文件读取

语法:

pd.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, usecols=None, skiprows=None, skipfooter=None, converters=None, encoding=None)

参数介绍

复制代码
filepath:指定txt文件或csv文件所在的具体路径 
sep:指定原数据集中各字段之间的分隔符,默认为逗号”,” 
          id name income
        1 jj 10
header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称 
        如果原始数据没有表头需要将该参数设置为None 
names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头 
usecols:指定需要读取原数据集中的哪些变量名 
skiprows:数据读取时,指定需要跳过原数据集开头的行数
         有一些表格开头是有几行文字说明的,读取的时候应该跳过
skipfooter:数据读取时,指定需要跳过原数据集末尾的行数 
converters:用于数据类型的转换(以字典的形式指定) 
encoding:如果文件中含有中文,有时需要指定字符编码

excel表格读取

语法:

pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None,
na_values=None, thousands=None, convert_float=True)

参数介绍:

复制代码
io:指定电子表格的具体路径 
sheet—name:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称 
header:是否需要将数据集的第一行用作表头,默认为是需要的 
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数 
index_col:指定哪些列用作数据框的行索引(标签)
na_values:指定原始数据中哪些特殊值代表了缺失值 
thousands:指定原始数据集中的千分位符 
convert_float:默认将所有的数值型字段转换为浮点型字段 
converters:通过字典的形式,指定某些列需要转换的形式

数据库数据读取

# 在anaconda环境下,要安装pymysql模块

语法:

conn = pymysql.connect(host,port,user,password, database, charset)

参数介绍:

host:指定需要访问的MySQL服务器
port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 “utf8”或“gbk”
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定访问MySQL数据库的具体库名

网页表数据读取

语法:

获取网页中的第一个列表

pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')[0]

DataFrame参数介绍

复制代码
.columns  # 查看列 
.index      # 查看行
.shape    # 行列 
.dtypes      # 数据类型 
.head()      # 取头部多条数据
.tail()      # 取尾部多条数据

行列操作

 获取指定列对应的数据

语法:

df['列字段名词']

列名修改

语法:

df.rename(columns={'旧列名称':'新列名称'})

创建列

语法:

df['新列名称']=内容

定义位置

语法:

df.insert(位置值,'新列名称',新数据)

添加行

语法:

表1=表2.append(df3)

数据筛选

获取指定列数据

# 单列数据
fg['ID']
# 多列数据
fg[['ID','name']]

 获取指定行数据

eg:

# 获取有电梯的总价小于750的,只显示房屋名称,总价,朝向
lig.loc[(lig['配备电梯']=='有')&(lig['总价'] < 750),['房屋名称','总价','房屋朝向']]

数据处理 

更改时间格式

语法:

变量.属性= pd.to_datetime(变量.属性, format = '%Y年%m月')

更改数字类型

语法:

变量.属性 = 变量.属性.str[:-1].astype(float)

返回目录

posted @ 2021-10-17 18:14  微纯册  阅读(595)  评论(0编辑  收藏  举报