MongoDB數據庫和數據分析模塊總結
- scrapy的基礎知識和MongoDB的簡介
- 非關系型數據庫之MongoDB
- MongoDB用戶權限
- 爬取王者榮耀皮膚思路
- pomongo模塊
- ipython模塊
- jupyter模塊
- Anaconda軟件
- 數據分析numpy科學計算模塊
- 索引切片
- pandas模塊簡介
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的特點
該數據庫數據的量和處理時間較於關系型數據庫快很多
該數據庫也是大數據生態圈里面常用的一款軟件
該數據是一款最像關系型數據庫的非關系數據庫(文本結構)
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之后無法呼起瀏覽器打開界面原因在於 你的計算機名詞含有中文 """
基礎單詞了解
單詞 意義
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簡介
- Numpy是高性能科學計算機和數據分析模塊的基礎包
- 也是pandas等其他數據分析工具的基礎
- 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
查看數組元素的數據類型
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的主要功能
1.具備諸多功能的兩大數據結構:
Series和DataFrame都是基於Numpy構建出來的
公司中使用頻繁的是DataFrame,而Series是構成DataFrame的基礎,即一個DataFrame可能由多個Series構成
2.集成時間序列功能
3.提供豐富的數學運算和操作(基於Numpy)
4.靈活處理缺失數據
在數據處理中如果遇到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) """
構造:
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:如果文件中含有中文,有時需要指定字符編碼
語法:
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)