2023年7月21日发(作者:)
MongoDB数据库和数据分析模块总结MongoDB数据库和数据分析模块总结scrapy的基础知识和MongoDB的简介⾮关系型数据库之MongoDBMongoDB⽤户权限爬取王者荣耀⽪肤思路pomongo模块
ipython模块jupyter模块Anaconda软件数据分析numpy科学计算模块索引切⽚pandas模块简介DataFrame读取外部数据
scrapy的基础知识和MongoDB的简介爬⾍框架Scrapy功能最为强⼤,使⽤频率⾼的⼀款异步爬⾍框架'''同步:提交完任务之后原地等待任务的返回结果期间不做任何事情异步:提交任务之后不等待任务的返回结果,可以去做其他事情,结果可以通过回调获取(主动获取)下载错误解决问题1:window系统可能出现问题 can not import Deque解决⽅法: 升级python版本系统问题2: vistual c++ 需要c++升级解决⽅法: 在mac系统下载不会出错,但windows系统可能出错如果windows电脑下载出错,且没有关键字提⽰报错需要进⾏格外配置3 install wheel2. 下载对应系统的⽂件,cp36:python3.6版本,amd64表⽰64位操作系统,win32表⽰32为操作系统3.下载⽂件后的安装位置最好容易找到 可以通过报错信息查看⽂件的存放位置pip3 install ⽂件名3 install 3 install scrapyscrapy的基本使⽤和⽂件介绍创建⼀个项⽬语法:scrapy startproject 项⽬名⾸先进⼊D盘创建⽂件创建爬⾍⽂件语法:scrapy genspider 名称 ⽹址创建⽂件前,先进⼊⽬标⽂件夹算数符介绍"""add 加(add)sub 减(substract)div 除(divide)mul 乘(multiple)""" scrapy⽂件介绍spiders⽂件: 存放爬⾍项⽬⽂件: 需要进⾏相关配置,将“ROBOTSTXT_OBEY=True” 改为 “ROBOTSTXT_OBEY=None”: 中间件⽂件 : 数据存储相关的⽂件
⾮关系型数据库之MongoDBMonogoDB的特点该数据库数据的量和处理时间较于关系型数据库快很多该数据库也是⼤数据⽣态圈⾥⾯常⽤的⼀款软件该数据是⼀款最像关系型数据库的⾮关系数据库(⽂本结构)MongoDB重要概念MySQLMongonDB名称库集合字段databasedatabasetable 表collectioncolumfieldrow ⾏document⽂档MongoDB⽂件介绍 bin⽂件夹'''⾥⾯存放⼀堆启动⽂件''' 服务端 客户端data⽂件夹 存放数据相关⽂件log⽂件夹 存放⽇志相关⽂件启动MongoDB步骤 配置环境变量 进⼊环境变量配置 对系统变量Path进⾏编辑MongoDB的相关⽂件设置查看mongodb⽂件夹内是否含有data和log⽂件夹如果没有需要你⾃⼰⼿动创建如果有则直接跳过在data⽂件内创建db⽂件夹(⽬的是为了管理⽂件资源)在MongoDB⽂件夹根⽬录下创建⽂件,⽂件内代码为 systemLog: destination: file path: "D:" logAppend: true storage: journal: enabled: true dbPath: "D:MongoDBdatadb" net: bindIp: 0.0.0.0 port: 27017 setParameter: enableLocalhostAuthBypass: falseDOS界⾯设置输⼊代码 mongod --bind_ip 0.0.0.0 --port 27017 --logpath D: --logappend --dbpath D:MongoDBdatadb --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth'''auth即让服务端以校验⽤户⾝份的⽅式启动 不加则不校验(刚开始不加)'''
启动/关闭net start MongoDBnet stop MongoDB登录mongo基础命令'''mongodb语句不需要分号结束'''1.查看所有的数据库名词show dbs2.退出客户端exitquit()MongoDB的特性创建东西后,必须写⼊数据才会保存到硬盘, 在此之前都是在内存中临时创建,⽤完就没了针对库的增删改查查看show dbs # 查看数据库增加use 库名删除语法:# db是关键字 当前在哪个库下执⾏改命令就是删除哪个库>tabase('库名') 针对集合的增删改查'''要想操作collection集合必须先有database库'''增加语法:Collection('表名')# 如果单纯的创建不插⼊数据 那么也只是在内存临时创建tion表名查show tablesshow collections改忽略删语法:tion名字.drop()针对⽂档(记录)增删改查增语法:# 单条数据db.表名.insert({})# 多条数据db.表名.insertMany([{},{},{}])db.表名.insert([{},{},{}])查语法:db.表名.find()db.表名.find({' ':' '})改语法:# 修改db.表名.update({},{$set:{}})# 完全替换 (少⽤)db.表名.update({})⽂档操作补充'''涉及到数据的嵌套查找 ⽀持直接点键或者索引'''eg:({'':123})({'fgh.0':'iii'})
MongoDB⽤户权限管理"""涉及到⽤户权限相关 引号推荐全部使⽤双引号"""创建⽤户'''mongodb针对⽤户权限的创建,数据可以保存在不同的数据库下之后在登录的时候只需要⾃⼰指定账户数据来源于哪个数据库即可管理员⽤户数据⼀般情况下推荐保存到admin库下⽽普通⽤户任意库都可以'''创建管理员1.切换到admin数据库下use admin2.创建账户并且赋予权限# ⽤户名为:root# 密码:123# 权限:管理员,存储位置:admin库User({ user: "root", pwd: "123", roles: [ { role: "root", db: "admin" } ] })其他⽤户在test数据库下创建1.切换到test数据库下use test2.创建账户并赋予权限针对test库⽤于读写的权限 针对db1库只拥有读的权限User({ # ⽤户名: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: --logappend --dbpath D:MongoDBdata --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth再次启动net start MongoDB两种验⽅式1.直接登录验证2.进⼊之后再验证数据查询⽅法数据准备'''是输出结果形式好看'''db.表名.find().pretty查询指定字段# 查找id为3的名字与年龄({'_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,notNOSQL中:逗号分隔的多个条件是and关系 “$or”的条件放在[]中 “$not”取反成员运算在SQL中:in,not in在NoSQL中:"$in","$nin"正则匹配⽤正则符号组合去⽂本中筛选出符合条件的数据# SQL:regexp 正则# MongoDB:/正则表达/i范围/模糊查询语法: find({查询条件},{筛选字段})"""MySQL 关键字 like 关键符号 % 匹配任意个数的任意字符 _ 匹配单个个数的任意字符MongoDB: 通过句点符 $all"""排序"""MySQL: 关键字 order by 升序 降序 asc descMongoDB 关键字 sort 升序 降序 1 -1"""排序:1代表升序,-1代表降序!=><>=<==分页(限制查询条数)"""MySQL
关键字 limit 分页 5,5MongoDB
关键字 limit 分页 skip"""杂项补充获取数量eg:获取age⼤于30的user信息({'age':{"$gt":30}})
# 输出为({'age':{"$gt":30}}).count()# 同上,输出为2分组查询按照部门分组,输出部门名ate({'$group':{'_id':'$post'}})求每个部门的平均年龄ate({"$group":{'_id':'$post','avgage':{'$avg':'$age'}}})求每个部门的最⾼薪资与最低薪资ate({ '$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创建数据库runoobdbmyclient = lient("mongodb://localhost:27017/")mydb = myclient["runoobdb"]创建集合sites(先创建库)mycol = mydb["sites"]插⼊数据mydict = { "name": "RUNOOB", "alexa": "10000", "url": "" }
x = _one(mydict)
查看数据y = _one()print(y)
数据分析数据分析应⽤领域 商品推荐: 量化交易: 应⽤:股票、期货等数据分析 短视频推送: 应⽤:抖⾳ 今⽇头条等短视频推荐需求分析 就是要分析什么数据,通过什么⽅式分析 想要什么样的结果数据采集 数据的来源: 1.公司内部⾃带 直接调⽤即可 MySQL MongoDB 2.⽹络爬⾍获取 需要编写代码 爬⾍相关技能 3.第三⽅服务 花钱直接购买 钞能⼒数据清洗 将获取到的数进⾏效验是否符合分析条件 缺失数据 异常数据...数据分析 选择对应的计算公司,算法模型分析数据⽣成数据分析报告 攥写分析报告并给出分析之后的规律及建议数据可视化 将复杂的数据⽤图形的形式展⽰出来,⽅便查看相应规律,数据可视化步骤⼀般是结合数据分析报告⼀起数据分析三剑客简介numpy模块 数学计算模块,他是所有计算机模块的底层模块pandas 主要⽤于excel表格mateplotlib 数据可视化模块
ipython模块ipython模块下载pip3 install ipython -i /simple/打开cmd之后直接输⼊ipython进⼊全新的编程环境 1.代码有提⽰ 2.代码⾃动缩进 3.通篇颜⾊不单调
jupyter模块模块的下载与使⽤在cmd窗⼝下载pip3 install jupyter -i ⽹络地址运⾏jupyter命令⾏输⼊命令,进⼊页⾯jupyter notebook# 打开的界⾯取决于终端输⼊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+enter2.运⾏当前单元格并选中下⽅的单元格shift+enter3.如何书写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.5numpy简介1. Numpy是⾼性能科学计算机和数据分析模块的基础包2. 也是pandas等其他数据分析⼯具的基础3. NumPy具有多维数组功能,运算更加⾼效快速结论 numpy模块使数据计算更⾼效
多维数组# numpy中同⼀个数组内所有数据数据类型肯定是⼀致的⼀维数组([1,2,3,4,.....])⼆维数组([[1,2,3,4,.....],[9,8,7,6,.....]])数据类型布尔型bool_整型int_、int8、int16、int32、int64int32只能表⽰(-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()
将列表转换为数组,可选择显⽰指定dtypearange()range的numpy版,⽀持浮点数linspace()平均等分zeros()根据指定形状和dtype创建全0数组ones()根据指定形状和dtype创建全1数组empty()根据指定形状和dtype创建空数组(随机值)eye()根据指定边长和dtype创建单位矩阵
索引切⽚针对⼀维数组 索引与切⽚操作跟python中的列表完全⼀致花式索引(间断索引)依照索引值布尔值索引(逻辑索引)针对⼆维数组索引与切⽚语法:res[⾏索引(切⽚),列索引(切⽚)]运算符数学运算符 +:数组对应元素的加和-:数组对应元素的差*:数组对应元素的乘积/:数组对应元素的商//:数组对应元素商的余数**:数组对应元素的幂指数⽐较运算符>:等价r(a,b) 判断arr1的元素是否⼤于arr2的元素>=:等价r_equal(,b) 判断a的元素是否⼤于等于b的元素<:等价(a,b) 判断a的元素是否⼩于arr2的元素<=:等价_equal(a,b) 判断a的元素是否⼩于等于b的元素==:等价(arr1,arr2) 判断a的元素是否等于b的元素!=:等价_equal(arr1,arr2) 判断a的元素是否不等于b的元素常⽤数学函数(arr):对各元素四舍五⼊(arr):计算各元素的算术平⽅根(arr):计算各元素的平⽅值(arr):计算以e为底的个元素为指数(arr, α):计算各元素的指数10(arr):计算以10为底各元素的对数(arr):计算以e为底各元素的对数(arr,axis) 按照轴的⽅向计算最⼩值(arr,axis) 按照轴的⽅向计算最⼤值(arr,axis) 按照轴的⽅向计算平均值(arr,axis ) 按照轴的⽅向计算中位数(arr,axis) 按照轴的⽅向计算和(arr,axis) 按照轴的⽅向计算标准差(arr,axis) 按照轴的⽅向计算⽅差随机数numpy中的random⼦模块以为前缀rand给定形状产⽣随机数组(0到1之间的数)语法:# ⽣成X⾏Y列数据组变量=(X,Y)randint给定形状产⽣随机整数choice给定形状产⽣随机选择shuffle与e相同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对应的数据⾏索引取值[0]标签取值['a']Series数据操作增加数据res['a']=88查数据['a']删数据del res[0]算数符介绍"""add 加(add)sub 减(substract)div 除(divide)mul 乘(multiple)"""
DataFrame性质表格型数据结构,相当于⼀个⼆维数组,含有⼀组有序的列也可以看作是由Series组成的共⽤⼀个索引的字典构造:ame({'one':[1,2,3,4],'boc':[5,6,7,8]})"""以上创建⽅式都仅仅做⼀个了解即可因为⼯作中dataframe的数据⼀般都是来⾃于读取外部⽂件数据,⽽不是⾃⼰⼿动去创建"""常见属性⾏索引列索引s 转置fh.T值索引快速索引be
读取外部数据_csv() # 可以读取⽂本⽂件和.csv结尾的⽂件数据_excel() # 可以读取excel表格⽂件数据_sql() # 可以读取MySQL表格数据_html() # 可以读取页⾯上table标签内所有的数据⽂本⽂件读取语法:_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 10header:是否需要将原数据集中的第⼀⾏作为表头,默认将第⼀⾏⽤作字段名称
如果原始数据没有表头需要将该参数设置为None
names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头
usecols:指定需要读取原数据集中的哪些变量名
skiprows:数据读取时,指定需要跳过原数据集开头的⾏数 有⼀些表格开头是有⼏⾏⽂字说明的,读取的时候应该跳过skipfooter:数据读取时,指定需要跳过原数据集末尾的⾏数
converters:⽤于数据类型的转换(以字典的形式指定)
encoding:如果⽂件中含有中⽂,有时需要指定字符编码excel表格读取语法:_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 = t(host,port,user,password, database, charset)参数介绍:host:指定需要访问的MySQL服务器port:指定访问MySQL数据库的端⼝号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中⽂,⼀般可以尝试将该参数设置为 “utf8”或“gbk”user:指定访问MySQL数据库的⽤户名password:指定访问MySQL数据库的密码database:指定访问MySQL数据库的具体库名⽹页表数据读取语法:获取⽹页中的第⼀个列表_html(r'/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')[0]DataFrame参数介绍.columns # 查看列 .index # 查看⾏.shape # ⾏列
.dtypes # 数据类型
.head() # 取头部多条数据.tail() # 取尾部多条数据⾏列操作 获取指定列对应的数据语法:df['列字段名词']列名修改语法:(columns={'旧列名称':'新列名称'})创建列语法:df['新列名称']=内容定义位置语法:(位置值,'新列名称',新数据)添加⾏语法:表1=表(df3)数据筛选获取指定列数据# 单列数据fg['ID']# 多列数据fg[['ID','name']] 获取指定⾏数据eg:# 获取有电梯的总价⼩于750的,只显⽰房屋名称,总价,朝向[(lig['配备电梯']=='有')&(lig['总价'] < 750),['房屋名称','总价','房屋朝向']]数据处理
更改时间格式语法:变量.属性= _datetime(变量.属性, format = '%Y年%m⽉')更改数字类型语法:变量.属性 = 变量.属性.str[:-1].astype(float)
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689896457a293123.html
评论列表(0条)