網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
python獲取數(shù)據(jù)
Python實(shí)現(xiàn)數(shù)據(jù)可視化,看如何監(jiān)控你的爬蟲 公司視頻課程
好,開始今天的文章。
今天主要是來說一下怎么可視化來監(jiān)控你的爬蟲的狀態(tài)。
相信大家在跑爬蟲的過程中,也會(huì)好奇自己養(yǎng)的爬蟲一分鐘可以爬多少頁面,多大的數(shù)據(jù)量,當(dāng)然查詢的方式多種多樣。今天我來講一種可視化的方法。
關(guān)于爬蟲數(shù)據(jù)在mongodb里的版本我寫了一個(gè)可以熱更新配置的版本,即添加了新的爬蟲配置以后,不用重啟程序,即可獲取剛剛添加的爬蟲的狀態(tài)數(shù)據(jù)。
1.成品圖
這個(gè)是監(jiān)控服務(wù)器網(wǎng)速的最后成果,顯示的是下載與上傳的網(wǎng)速,單位為M。爬蟲的原理都是一樣的,只不過將數(shù)據(jù)存到InfluxDB的方式不一樣而已, 如下圖。
可以實(shí)現(xiàn)對爬蟲數(shù)量,增量,大小,大小增量的實(shí)時(shí)監(jiān)控。
2. 環(huán)境
InfluxDb,是目前比較流行的時(shí)間序列數(shù)據(jù)庫;
Grafana,一個(gè)可視化面板(Dashboard),有著非常漂亮的圖表和布局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數(shù)據(jù)源
Ubuntu
influxdb(pip install influxdb)
Python 2.7
3. 原理
獲取要展示的數(shù)據(jù),包含當(dāng)前的時(shí)間數(shù)據(jù),存到InfluxDb里面,然后再到Grafana里面進(jìn)行相應(yīng)的配置即可展示;
4. 安裝
4.1 Grafana安裝
官方安裝指導(dǎo)
安裝好以后,打開本地的3000端口,即可進(jìn)入管理界面,用戶名與密碼都是admin。
4.2 InfulxDb安裝
這個(gè)安裝就網(wǎng)上自己找吧,有很多的配置我都沒有配置,就不在這里誤人子弟了。
5. InfluxDb簡單操作
碰到了數(shù)據(jù)庫,肯定要把增刪改查學(xué)會(huì)了啊, 和sql幾乎一樣,只有一絲絲的區(qū)別,具體操作,大家可以參考官方的文檔。
influx 進(jìn)入命令行
CREATE DATABASE test 創(chuàng)建數(shù)據(jù)庫
show databases 查看數(shù)據(jù)庫
use test 使用數(shù)據(jù)庫
show series 看表
select * from table_test 選擇數(shù)據(jù)
DROP MEASUREMENT table_test 刪表
6. 存數(shù)據(jù)
InfluxDb數(shù)據(jù)庫的數(shù)據(jù)有一定的格式,因?yàn)槲叶际抢胮ython庫進(jìn)行相關(guān)操作,所以下面將在python中的格式展示一下:
其中:
measurement, 表名
time,時(shí)間
tags,標(biāo)簽
fields,字段
可以看到,就是個(gè)列表里面,嵌套了一個(gè)字典。其中,對于時(shí)間字段,有特殊要求,可以參考這里, 下面是python實(shí)現(xiàn)方法:
所以,到這里,如何將爬蟲的相關(guān)屬性存進(jìn)去呢?以MongoDB為例
完整代碼,關(guān)注上面的公眾號(hào),發(fā)送“”可視化“”即可獲取。
那么現(xiàn)在我們已經(jīng)往數(shù)據(jù)里存了數(shù)據(jù)了,那么接下來要做的就是把存的數(shù)據(jù)展示出來。
7.展示數(shù)據(jù)
7.1 配置數(shù)據(jù)源
以admin登錄到Grafana的后臺(tái)后,我們首先需要配置一下數(shù)據(jù)源。點(diǎn)擊左邊欄的最下面的按鈕,然后點(diǎn)擊DATA SOURCES,這樣就可以進(jìn)入下面的頁面:
點(diǎn)擊ADD DATA SOURCE,進(jìn)行配置即可,如下圖:
其中,name自行設(shè)定;Type 選擇InfluxDB;url為默認(rèn)的http://localhost:8086, 其他的因?yàn)槲仪懊鏇]有進(jìn)行配置,所以默認(rèn)的即可。然后在InfluxDB Details里的填入Database名,最后點(diǎn)擊測試,如果沒有報(bào)錯(cuò)的話,則可以進(jìn)入下一步的展示數(shù)據(jù)了;
7.2 展示數(shù)據(jù)
點(diǎn)擊左邊欄的+號(hào),然后點(diǎn)擊GRAPH
接著點(diǎn)擊下圖中的edit進(jìn)入編輯頁面:
從上圖中可以發(fā)現(xiàn):
中間板塊是最后的數(shù)據(jù)展示
下面是數(shù)據(jù)的設(shè)置項(xiàng)
右上角是展示時(shí)間的設(shè)置板塊,在這里可以選擇要展示多久的數(shù)據(jù)
7.2.1 配置數(shù)據(jù)
在Data Source中選擇剛剛在配置數(shù)據(jù)源的時(shí)候配置的NAME字段,而不是database名。
接著在下面選擇要展示的數(shù)據(jù)??粗秃苁煜な遣皇牵耆莝ql語句的可視化。同時(shí),當(dāng)我們的數(shù)據(jù)放到相關(guān)的字段上的時(shí)候,雙擊,就會(huì)把可以選擇的項(xiàng)展示出來了,我們要做的就是直接選擇即可;
設(shè)置右上角的時(shí)間,則可以讓數(shù)據(jù)實(shí)時(shí)進(jìn)行更新與展示
因?yàn)橄旅娴呐渲脤?shí)質(zhì)就是sql查詢語句,所以大家按照自己的需求,進(jìn)行選擇配置即可,當(dāng)配置完以后,就可以在中間的面板里面看到數(shù)據(jù)了。
8. 總結(jié)
到這里,本篇文章就結(jié)束了。其中,對于Grafana的操作我沒有介紹的很詳細(xì),因?yàn)楸酒饕v的是怎么利用這幾個(gè)工具完成我們的任務(wù)。
同時(shí),里面的功能確實(shí)很多,還有可以安裝的插件。我自己目前還是僅僅對于用到的部分比較了解,所以大家可以查詢官方的或者別的教程資料來對Grafana進(jìn)行更深入的了解,制作出更加好看的可視化作品來。
文末知識(shí)點(diǎn)摘要①:sql中dateiff函數(shù)的用法
DATEDIFF
返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。
一、 語法
DATEDIFF ( datepart , startdate , enddate )
二、參數(shù)
datepart
是規(guī)定了應(yīng)在日期的哪一部分計(jì)算差額的參數(shù)。下表列出了 Microsoft SQL Server? 識(shí)別的日期部分和縮寫。
日期部分 縮寫
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
startdate
是計(jì)算的開始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。
因?yàn)?smalldatetime 只精確到分鐘,所以當(dāng)用 smalldatetime 值時(shí),秒和毫秒總是 0。
如 果您只指定年份的最后兩位數(shù)字,則小于或等于"兩位數(shù)年份截止期"配置選項(xiàng)的值的最后兩位數(shù)字的數(shù)字所在世紀(jì)與截止年所在世紀(jì)相同。大于該選項(xiàng)的值的最后 兩位數(shù)字的數(shù)字所在世紀(jì)為截止年所在世紀(jì)的前一個(gè)世紀(jì)。例如,如果 two digit year cutoff 為 2049(默認(rèn)),則 49被解釋為 2049,2050 被解釋為 1950。為避免模糊,請使用四位數(shù)的年份。
enddate
是計(jì)算的終止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。
三、返回類型
integer
四、用法
此函數(shù)計(jì)算兩個(gè)指定日期之間日期部分的數(shù)目。結(jié)果為日期部分中等于(date2 - date1)的有符號(hào)的整數(shù)值。
當(dāng)結(jié)果不是日期部分的偶數(shù)倍時(shí),DATEDIFF 將被截?cái)喽皇潜簧崛搿?/p>
當(dāng)使用 day 作為日期部分時(shí),DATEDIFF 返回兩個(gè)指定的時(shí)間之間(包括第二個(gè)日期但不包括第一個(gè)日期)的午夜數(shù)。
當(dāng)使用 month 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期之間(包括第二個(gè)日期但不包括第一個(gè)日期)出現(xiàn)的月的第一天的數(shù)目。
當(dāng)使用 week 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期(包括第二個(gè)日期但不包括第一個(gè)日期)之間星期日的數(shù)目。
對于更小的時(shí)間單位存在溢出值:
milliseconds 24 天
seconds 68 年
minutes 4083 年
others 沒有溢出限制
如果超出這些限制,此函數(shù)將返回溢出錯(cuò)誤。
五、標(biāo)準(zhǔn)和兼容性
SQL/92 Transact-SQL 擴(kuò)展。
SQL/99 Transact-SQL 擴(kuò)展。
Sybase 與 Adaptive Server Enterprise 兼容。
六、示例
下面的語句返回 1:
select datediff( hour, ''4:00am'', ''5:50am'' )
下面的語句返回 102:
select datediff( month, ''1987/05/02'', ''1995/11/15'' )
下面的語句返回 0:
select datediff( day, ''00:00'', ''23:59'' )
下面的語句返回 4:
select datediff( day, ''1999/07/1900:00'',''1999/07/2323:59'' )
下面的語句返回 0:
select datediff( month, ''1999/07/19'', ''1999/07/23'' )
下面的語句返回 1:
select datediff( month, ''1999/07/19'', ''1999/08/23'' )
今天的文章分享就到此結(jié)束,希望本次分享會(huì)對正在學(xué)習(xí)Python的你有所幫助,文章部分素材來源網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪除。
關(guān)注菜鳥學(xué)Python,撰寫文章分享知識(shí)也挺辛苦的,希望大家多多關(guān)注,轉(zhuǎn)發(fā)與收藏。文末左側(cè)了解更多有一個(gè)免費(fèi)的flask課程,需要的同學(xué)可以點(diǎn)擊了解了解一下。
Python入門:利用Python快速收集金融數(shù)據(jù) 行業(yè)視頻課程
Python 作為一種開源語言提供了豐富的 API 和工具,具有較高的靈活性,同時(shí)相關(guān)的第三方庫(requests+Beautiful Soup+re)也較為成熟,可以很容易的開發(fā)出數(shù)據(jù)爬取爬蟲等程序,對于非專業(yè)程序員卻又有編程需求的業(yè)務(wù)人員非常合適。本次我們將以采集金融數(shù)據(jù)為例講述利用Python采集金融數(shù)據(jù)的過程。
BeautifulSoup庫是解析、遍歷、維護(hù) “標(biāo)簽樹” 的功能庫,需要安裝。
RE庫是正則表達(dá)式庫,Python自帶。
在使用 Python 進(jìn)行數(shù)據(jù)采集時(shí),如果是小規(guī)模數(shù)據(jù)采集,可以使用 requests+Beautiful Soup+re 的架構(gòu)來完成,使用 requests庫可以自動(dòng)提交網(wǎng)絡(luò)請求和自動(dòng)爬取 HTML 頁面,使用 Beautiful Soup 庫和 re 正則表達(dá)式可解析 HTML頁面和提取頁面關(guān)鍵信息。
在開始采集之前,我們需要對目標(biāo)網(wǎng)站進(jìn)行充分的分析。特別是URL結(jié)構(gòu)和頁面的HTML結(jié)構(gòu),確定好需要采集的數(shù)據(jù)和數(shù)據(jù)所在的頁面。根據(jù)對目標(biāo)網(wǎng)站(
某金融信息網(wǎng)站
)的分析,我這次采集的目標(biāo)鎖定在
某類交易商品銷售情況上,將要采集
交易名稱、價(jià)格、成交量、換手率、交易者、交易者地址等。此外我們還要查看網(wǎng)站的robots.txt 文件,以便確定爬取策略。
(一)確定數(shù)據(jù)爬取策略。
我們需要由某一頁面的URL地址開始,形成目標(biāo)頁面的URL隊(duì)列,從觀察網(wǎng)站頁面的URL變化得知,目標(biāo)網(wǎng)站產(chǎn)品分類頁的URL有以下規(guī)律(http://s.####/search?q=”類別”&s=頁碼 )URL地址的尾部由類別和頁碼組成,由此我們就可以制定好頁面爬取URL隊(duì)列的規(guī)則,只需使用Python腳本
遍歷得到頁面信息。每次遍歷實(shí)現(xiàn)對單個(gè) HTML 頁面信息的獲取、解析和存儲(chǔ)。頁面信息的獲取調(diào)用了自定義方法getHTML (),頁面信息的解析調(diào)用了自定義方法parseHTML()。
for i in range(頁面數(shù)量):
time.sleep(2)
try:
url=start_url+str(每頁商品數(shù)量 *i)
html=getHTML(url)
parseHTML(html,goodslist)
saveGoodsList(goodslist,file_path)
except:
continue
(二)獲取 HTML 頁面信息。Python可以通過
調(diào)用 requests 庫的 get(url)方法獲取 HTML 頁面的源代碼。
url 作為 get(url)方法參數(shù)指明了要獲取的資源路徑,返回的頁面信息被存儲(chǔ)為 Response 對象中。Response 對象的text 即為 HTML 的頁面內(nèi)容。requests 還包括 post()、head()等方法。使用 requests.get(url).text 可以獲得url 地址所對應(yīng)的 HTML 文檔內(nèi)容;使用 f.write(re-quests.get(url).content)可以將 url 所指向資源以二進(jìn)制的形式獲得并保存至本地硬盤。 getHTML()方法代碼如下:
r=requests.get(url,header,timeout=30)
return r.text
(三)解析 HTML 文檔,提取關(guān)鍵信息。獲取頁面信息后,就要對 HTML 頁面內(nèi)容進(jìn)行分析以提取關(guān)鍵信息。整個(gè)解析過程中要對 HTTP 協(xié)議及 HTML 文檔結(jié)構(gòu)有足夠的認(rèn)識(shí)。當(dāng)前要獲取的是交易名稱、價(jià)格、成交量、換手率、交易者、交易者地址等信息,分析 HTML 頁面源代碼發(fā)現(xiàn)其結(jié)構(gòu)如下:
"title":"COMEX白銀 "
"price":"15.89"
"sales":"成交量"
"user":"交易者"
"item":"廣東 廣州"
根據(jù)頁面規(guī)律這些信息可以使用正則表達(dá)式直接提取,正則表達(dá)式是一個(gè)特殊的字符序列,它能方便地檢查一個(gè)字符串是否與某種模式匹配。re 庫是 python 的標(biāo)準(zhǔn)庫,主要用于字符串匹配。re 的 findall()可以實(shí)現(xiàn)在文本中檢索全部能匹配的字符子串,并將檢索結(jié)果以列表類型返回。re 還包括 search()、match()、split()等方法。當(dāng)然如果正則表達(dá)式無法提取信息也可以使用Beautiful Soup庫等對頁面內(nèi)容進(jìn)行解析。
(四)采集結(jié)果分析。當(dāng)數(shù)據(jù)采集完畢,我們即可使用Python強(qiáng)大的數(shù)據(jù)分析庫對數(shù)據(jù)進(jìn)行分析。
如:NumPy、Matplotlib等。
NumPy
NumPy 是 Python 科學(xué)計(jì)算的基礎(chǔ)包,它提供:
快速高效的多維數(shù)組對象 ndarray;
直接對數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算及對數(shù)組執(zhí)行元素級計(jì)算的函數(shù);
線性代數(shù)運(yùn)算、隨機(jī)數(shù)生成;
將 C、C++、Fortran 代碼集成到 Python 的工具等。
它專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。多為很多大型金融公司使用,以及核心的科學(xué)計(jì)算組織如:Lawrence Livermore,NASA 用其處理一些本來使用 C++,F(xiàn)ortran 或Matlab 等所做的任務(wù)。
Python操作Mysql數(shù)據(jù)庫入門——查看和增加記錄 流量視頻課程
前言
最近學(xué)了一下sql,因?yàn)樽鰯?shù)據(jù)分析不會(huì)sql真不行。
平時(shí)學(xué)的都是Python,所以如果要用pandas做數(shù)據(jù)分析,數(shù)據(jù)除了導(dǎo)入excel和csv文件,
應(yīng)該還要會(huì)從數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)到Python中,于是我進(jìn)行了以下的學(xué)習(xí)和探索。
環(huán)境
Python 3.X
IDE : juyter notebook
安裝必要的模塊
進(jìn)入:
http://lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
找到適合自己的版本
下載到本地(我的下載到e:盤根目錄)
然后打開cmd如下圖安裝
這里推薦本地安裝
使用Python連接數(shù)據(jù)庫
import MySQLdb
如果導(dǎo)入模塊沒報(bào)錯(cuò),恭喜你,安裝模塊成功了!
conn = MySQLdb.connect( host = '127.0.0.1',#本地地址 user = 'root',#一般默認(rèn)用戶名 passwd = '********',#本地?cái)?shù)據(jù)庫登錄密碼 db = 'test',#數(shù)據(jù)庫名稱 port = 3306,#安裝mysql默認(rèn)的端口號(hào) charset = 'utf8'#設(shè)置數(shù)據(jù)庫統(tǒng)一編碼)
通過connect方法連接本地mysql數(shù)據(jù)庫,這里要注意你要修改的或許是登錄密碼和數(shù)據(jù)庫名稱
創(chuàng)建游標(biāo)
首先,我們要?jiǎng)?chuàng)建一個(gè)游標(biāo)
cursor = conn.cursor()
什么是游標(biāo)呢?
游標(biāo)就相當(dāng)于一個(gè)緩沖區(qū),存放暫時(shí)的結(jié)果(這是我的理解)
就像去超市買買買,你可能要推一個(gè)手推車,這里的手推車就像游標(biāo),推著手推車去對應(yīng)的貨架完成挑選操作,而手推車最終會(huì)在出超市時(shí)候清空
觀察數(shù)據(jù)庫
我本地的數(shù)據(jù)庫test中有個(gè)tdb_goods的表
表的內(nèi)容如上圖所示
有商品的id,名稱,種類id,品牌id,是否在售和是否下架幾個(gè)字段
一共有23條記錄
獲取數(shù)據(jù)
我們使用select語句可以獲取數(shù)據(jù)
cursor.execute('SELECT * FROM `tdb_goods`;')data = cursor.fetchone()#取一條數(shù)據(jù)print(data)
首先我們用游標(biāo)的execute方法執(zhí)行一句sql語句獲取tdb_goods中的所有數(shù)據(jù)
然后使用游標(biāo)的fetchone方法取出其中一條記錄并且展現(xiàn)出來
如上圖,我們?nèi)〕龅臄?shù)據(jù)是元組形式
當(dāng)然,我們應(yīng)該養(yǎng)成打開后關(guān)閉的好習(xí)慣,所以,在操作結(jié)束,應(yīng)該斷開與數(shù)據(jù)庫的連接
conn.close()
異常處理
當(dāng)我們在操作時(shí),希望和在mysql數(shù)據(jù)庫中一樣,異常時(shí)會(huì)提示異常信息
那么我們就要加入異常處理模塊
try: conn = MySQLdb.connect( host = '127.0.0.2222', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' )except MySQLdb.Error as e: print('Error:%s' % e)
這里異常時(shí),就將異常的信息告知我們了
我們將以上代碼整理一下:
import MySQLdbtry: conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) cursor = conn.cursor() cursor.execute('SELECT * FROM `tdb_goods`;') data = cursor.fetchone() print(data) conn.close()except MySQLdb.Error as e: print('Error:%s' % e)
當(dāng)我們將fetchone改成fetchall時(shí)候,就是取出所有信息了
使用面向?qū)ο缶幊?/p>
如果你熟悉面向?qū)ο缶幊袒蛘呖催^我寫的面向?qū)ο缶幊倘腴T系列(小姐姐系列)
傳送門:
Python面向?qū)ο缶幊虖牧汩_始(1)——從沒對象到有對象
Python面向?qū)ο缶幊虖牧汩_始(2)—— 與對象相互了解
Python面向?qū)ο缶幊虖牧汩_始(3)—— 小姐姐請客上篇
Python面向?qū)ο缶幊虖牧汩_始(4)—— 小姐姐請客下篇
Python面向?qū)ο缶幊虖牧汩_始(5)—— 小姐姐要買房
如果你還沒接觸過面向?qū)ο缶幊?,看完以?篇至少對接下來的內(nèi)容理解上不存在問題
import MySQLdbclass Mysql(object): def __init__(self): self.connect() def connect(self): try: self.conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) except MySQLdb.Error as e: print('Error:%s' % e) def close_conn(self): try: if self.conn: self.conn.close() except MySQLdb.Error as e: print('Error:%s' % e) def get_a(self): sql = 'select * from `tdb_goods` where `cate_id` = %s;' cursor = self.conn.cursor() cursor.execute(sql,('1',)) data = cursor.fetchone() print(data) cursor.close() self.close_conn() def main(): object = Mysql() object.get_a() if __name__ == '__main__': main()
注:這里定義了一個(gè)類叫Mysql,然后用類創(chuàng)建一個(gè)對象名為object,在創(chuàng)建對象的時(shí)候,類的初始化時(shí)調(diào)用連接數(shù)據(jù)庫函數(shù)
創(chuàng)建了一個(gè)叫object的對象,使用對象的get_a方法從數(shù)據(jù)庫tdb_goods中選出cate_id=1的一條記錄,在get_a函數(shù)最后位置斷開數(shù)據(jù)庫連接
結(jié)果如下:
插入記錄到數(shù)據(jù)庫
import MySQLdbclass Mysql(object): def __init__(self): self.connect() def connect(self): try: self.conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) except MySQLdb.Error as e: print('Error:%s' % e) def close_conn(self): try: if self.conn: self.conn.close() except MySQLdb.Error as e: print('Error:%s' % e) def get_a(self): sql = 'select * from `tdb_goods` where `cate_id` = %s;' cursor = self.conn.cursor() cursor.execute(sql,('1',)) data = cursor.fetchone() print(data) cursor.close() self.close_conn() def add_a(self): sql = "insert into `tdb_goods`(`goods_name`,`cate_id`,`brand_id`,`goods_price`,`is_show`,`is_saleoff`) value (%s,%s,%s,%s,%s,%s);" cursor = self.conn.cursor() cursor.execute(sql,('偉哥牌notebook','8','1','66666','1','0')) cursor.close() self.close_conn() def main(): object = Mysql() object.add_a() if __name__ == '__main__': main()
注:這里,將一條記錄插入了數(shù)據(jù)庫,但是當(dāng)我執(zhí)行完這條語句(沒報(bào)錯(cuò))
刷新數(shù)據(jù)庫并沒有新增一條記錄
劃重點(diǎn):在這里,有一個(gè)self.connmit(),這個(gè)叫提交,如果不寫這句,就無法將所做修改保存的數(shù)據(jù)庫中
加上這個(gè)之后(加在以下兩句之間):
可以看到,數(shù)據(jù)成功寫入數(shù)據(jù)庫了~
如果運(yùn)行代碼報(bào)錯(cuò),很可能是你的數(shù)據(jù)庫名和數(shù)據(jù)庫登錄密碼沒有修改~
文中如有錯(cuò)誤和敘述不妥之處,望指正。
python數(shù)據(jù)分析筆記——數(shù)據(jù)加載與整理 推廣視頻課程
文 | 張俊紅
數(shù)據(jù)加載
導(dǎo)入文本數(shù)據(jù)
1、導(dǎo)入文本格式數(shù)據(jù)(CSV)的方法:
方法一:使用pd.read_csv(),默認(rèn)打開csv文件。
9、10、11行三種方式均可以導(dǎo)入文本格式的數(shù)據(jù)。
特殊說明:第9行使用的條件是運(yùn)行文件.py需要與目標(biāo)文件CSV在一個(gè)文件夾中的時(shí)候可以只寫文件名。第10和11行中文件名ex1.CSV前面的部分均為文件的路徑。
方法二:使用pd.read.table(),需要指定是什么樣分隔符的文本文件。用sep=””來指定。
2、當(dāng)文件沒有標(biāo)題行時(shí)
可以讓pandas為其自動(dòng)分配默認(rèn)的列名。
也可以自己定義列名。
3、將某一列作為索引,比如使用message列做索引。通過index_col參數(shù)指定’message’。
4、要將多個(gè)列做成一個(gè)層次化索引,只需傳入由列編號(hào)或列名組成的列表即可。
5、文本中缺失值處理,缺失數(shù)據(jù)要么是沒有(空字符串),要么是用某個(gè)標(biāo)記值表示的,默認(rèn)情況下,pandas會(huì)用一組經(jīng)常出現(xiàn)的標(biāo)記值進(jìn)行識(shí)別,如NA、NULL等。查找出結(jié)果以NAN顯示。
6、逐塊讀取文本文件
如果只想讀取幾行(避免讀取整個(gè)文件),通過nrows進(jìn)行制定即可。
7、對于不是使用固定分隔符分割的表格,可以使用正則表達(dá)式來作為read_table的分隔符。
(’\s+’是正則表達(dá)式中的字符)。
導(dǎo)入JSON數(shù)據(jù)
JSON數(shù)據(jù)是通過HTTP請求在Web瀏覽器和其他應(yīng)用程序之間發(fā)送數(shù)據(jù)的標(biāo)注形式之一。通過json.loads即可將JSON對象轉(zhuǎn)換成Python對象。(import json)
對應(yīng)的json.dumps則將Python對象轉(zhuǎn)換成JSON格式。
導(dǎo)入EXCEL數(shù)據(jù)
直接使用read_excel(文件名路徑)進(jìn)行獲取,與讀取CSV格式的文件類似。
導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)
主要包含兩種數(shù)據(jù)庫文件,一種是SQL關(guān)系型數(shù)據(jù)庫數(shù)據(jù),另一種是非SQL型數(shù)據(jù)庫數(shù)據(jù)即MongoDB數(shù)據(jù)庫文件。
數(shù)據(jù)庫文件是這幾種里面比較難的,本人沒有接觸數(shù)據(jù)庫文件,沒有親測,所以就不貼截圖了。
數(shù)據(jù)整理
合并數(shù)據(jù)集
1、數(shù)據(jù)庫風(fēng)格的合并
數(shù)據(jù)庫風(fēng)格的合并與SQL數(shù)據(jù)庫中的連接(join)原理一樣。通過調(diào)用merge函數(shù)即可進(jìn)行合并。
當(dāng)沒有指明用哪一列進(jìn)行連接時(shí),程序?qū)⒆詣?dòng)按重疊列的列名進(jìn)行連接,上述語句就是按重疊列“key”列進(jìn)行連接。也可以通過on來指定連接列進(jìn)行連接。
當(dāng)兩個(gè)對象的列名不同時(shí),即兩個(gè)對象沒有共同列時(shí),也可以分別進(jìn)行指定。
Left_on是指左側(cè)DataFrame中用作連接的列。
right_on是指右側(cè)DataFrame中用作連接的列。
通過上面的語句得到的結(jié)果里面只有a和b對應(yīng)的數(shù)據(jù),c和d以及與之相關(guān)的數(shù)據(jù)被消去,這是因?yàn)槟J(rèn)情況下,merge做的是‘inner’連接,即sql中的內(nèi)連接,取得兩個(gè)對象的交集。也有其他方式連接:left、right、outer。用“how”來指明。
也可以根據(jù)多個(gè)鍵(列)進(jìn)行合并,用on傳入一個(gè)由列名組成的列表即可。
2、索引上的合并
(1)普通索引的合并
Left_index表示將左側(cè)的行索引引用做其連接鍵
right_index表示將右側(cè)的行索引引用做其連接鍵
上面兩個(gè)用于DataFrame中的連接鍵位于其索引中,可以使用Left_index=True或right_index=True或兩個(gè)同時(shí)使用來進(jìn)行鍵的連接。
(2)層次化索引
與數(shù)據(jù)庫中用on來根據(jù)多個(gè)鍵合并一樣。
3、軸向連接(合并)
軸向連接,默認(rèn)是在軸方向進(jìn)行連接,也可以通過axis=1使其進(jìn)行橫向連接。
(1)對于numpy對象(數(shù)組)可以用numpy中的concatenation函數(shù)進(jìn)行合并。
(2)對于pandas對象(如Series和DataFrame),可以pandas中的concat函數(shù)進(jìn)行合并。
·4、合并重疊數(shù)據(jù)
對于索引全部或部分重疊的兩個(gè)數(shù)據(jù)集,我們可以使用numpy的where函數(shù)來進(jìn)行合并,where函數(shù)相當(dāng)于if—else函數(shù)。
對于重復(fù)的數(shù)據(jù)顯示出相同的數(shù)據(jù),而對于不同的數(shù)據(jù)顯示a列表的數(shù)據(jù)。同時(shí)也可以使用combine_first的方法進(jìn)行合并。合并原則與where函數(shù)一致,遇到相同的數(shù)據(jù)顯示相同數(shù)據(jù),遇到不同的顯示a列表數(shù)據(jù)。
重塑數(shù)據(jù)集
1、旋轉(zhuǎn)數(shù)據(jù)
(1)重塑索引、分為stack(將數(shù)據(jù)的列旋轉(zhuǎn)為行)和unstack(將數(shù)據(jù)的行旋轉(zhuǎn)為列)。
(2)將‘長格式’旋轉(zhuǎn)為‘寬格式’
2、轉(zhuǎn)換數(shù)據(jù)
(1)數(shù)據(jù)替換,將某一值或多個(gè)值用新的值進(jìn)行代替。(比較常用的是缺失值或異常值處理,缺失值一般都用NULL、NAN標(biāo)記,可以用新的值代替缺失標(biāo)記值)。方法是replace。
一對一替換:用np.nan替換-999
多對一替換:用np.nan替換-999和-1000.
多對多替換:用np.nan代替-999,0代替-1000.
也可以使用字典的形式來進(jìn)行替換。
(2)離散化或面元?jiǎng)澐?,即根?jù)某一條件將數(shù)據(jù)進(jìn)行分組。
利用pd.cut()方式對一組年齡進(jìn)行分組。
默認(rèn)情況下,cut對分組條件的左邊是開著的狀態(tài),右邊是閉合狀態(tài)??梢杂胠eft(right)=False來設(shè)置哪邊是閉合的。
清理數(shù)據(jù)集
主要是指清理重復(fù)值,DataFrame中經(jīng)常會(huì)出現(xiàn)重復(fù)行,清理數(shù)據(jù)主要是針對這些重復(fù)行進(jìn)行清理。
利用drop_duplicates方法,可以返回一個(gè)移除了重復(fù)行的DataFrame.
默認(rèn)情況下,此方法是對所有的列進(jìn)行重復(fù)項(xiàng)清理操作,也可以用來指定特定的一列或多列進(jìn)行。
默認(rèn)情況下,上述方法保留的是第一個(gè)出現(xiàn)的值組合,傳入take_last=true則保留最后一個(gè)。
End.
來源:36大數(shù)據(jù)
用Python生成器處理大數(shù)據(jù) 行業(yè)視頻課程
不是每個(gè)人都擁有一臺(tái)超級計(jì)算機(jī),那么如何利用一臺(tái)普通計(jì)算機(jī)處理大數(shù)據(jù)?當(dāng)數(shù)據(jù)大小超過你計(jì)算機(jī)的內(nèi)存,這時(shí)不能一次性把大數(shù)據(jù)寫入內(nèi)存里,否則會(huì)產(chǎn)生內(nèi)存溢出。大多數(shù)機(jī)器學(xué)習(xí)算法都是基于內(nèi)存,即原始數(shù)據(jù)以及過程數(shù)據(jù)都保存在內(nèi)存,這給普通計(jì)算機(jī)處理大數(shù)據(jù)造成困難。通過本文的學(xué)習(xí),你將學(xué)會(huì)如何利用普通計(jì)算機(jī)處理大數(shù)據(jù)。本文主要討論如何用Python生成器處理大數(shù)據(jù)。
普通計(jì)算機(jī)處理大數(shù)據(jù)思想是:將大數(shù)據(jù)分為幾批,依次處理每一批數(shù)據(jù),最后綜合各個(gè)批次的處理結(jié)果。有關(guān)Python生成器的概念請參考我的文章《如何理解Python中的生成器?》。生成器的特點(diǎn)是依次不重復(fù)地生成數(shù)據(jù),符合大數(shù)據(jù)處理思想,因此利用Python生成器處理大數(shù)據(jù)是一種很自然的想法。
利用生成器,在普通計(jì)算機(jī)里也可以進(jìn)行深度學(xué)習(xí),比如要訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò),可以采取批次訓(xùn)練方法,對每一個(gè)批次,利用生成器從硬盤里提取一個(gè)批次的數(shù)據(jù),并不需要把所有數(shù)據(jù)加載到內(nèi)存里,對于訓(xùn)練過程以及結(jié)果,相應(yīng)地也可以采取批次方法將結(jié)果保存到硬盤里,唯一要做的是重寫代碼。
本文提供一個(gè)簡單案例,統(tǒng)計(jì)自然常數(shù)e的41萬位小數(shù)點(diǎn)的數(shù)字0-9出現(xiàn)的次數(shù),展示Python生成器,在不需要將數(shù)據(jù)寫入內(nèi)存的情況下,如何批次處理大數(shù)據(jù)。處理思想就是把41萬位小數(shù)點(diǎn)依次劃分為41批次,每個(gè)批次的長度10000位,統(tǒng)計(jì)每個(gè)批次的數(shù)字0-9出現(xiàn)的次數(shù),然后匯總統(tǒng)計(jì)所有批次的次數(shù)。(讀者可以嘗試用1000萬位小數(shù)點(diǎn)在一個(gè)內(nèi)存為1G的普通計(jì)算機(jī)里處理,比較一下普通方法(參考文章《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):用Python分析自然常數(shù)e的小數(shù)點(diǎn)數(shù)字出現(xiàn)規(guī)律》)和本文方法的效果)
1.數(shù)據(jù)
原始數(shù)據(jù)共4100行數(shù)據(jù),每行有100位小數(shù)點(diǎn),共41萬位小數(shù)點(diǎn),其中第1列數(shù)據(jù)為標(biāo)注,需要去掉。數(shù)據(jù)文件名為e.txt,保存在Python項(xiàng)目目錄下。
原始數(shù)據(jù)2.構(gòu)造生成器
構(gòu)造一個(gè)生成器gen,用于每次從原始文件e.txt中讀取一行數(shù)據(jù)。目前該生成器并沒有真正讀取文件,是一個(gè)機(jī)器,沒啟動(dòng)它之前(使用內(nèi)置方法next()啟動(dòng)它),在Python中只是一個(gè)符號(hào),占用內(nèi)存微不足道。另外優(yōu)點(diǎn)是,該生成器并沒有打開文件對象。
構(gòu)造生成器gen3.定義批處理函數(shù)
利用生成器gen一次性從原始文件讀取bat_number行數(shù)據(jù)(一個(gè)批次),然后將bat_number行數(shù)據(jù)轉(zhuǎn)化為列表e,接著是數(shù)據(jù)預(yù)處理,比如去掉符號(hào)“\n”和空格,最后將處理后的數(shù)據(jù)轉(zhuǎn)化為Pandas的序列數(shù)據(jù)結(jié)構(gòu)。即通過批處理函數(shù)batch(),能一批次從原始文件讀取bat_number行數(shù)據(jù),并最終轉(zhuǎn)化為Pandas的序列數(shù)據(jù)。值得注意的是,由于生成器的特點(diǎn),運(yùn)行批處理函數(shù)batch()兩次,就得到兩批次的數(shù)據(jù),而且第2批次的數(shù)據(jù)是接著第1批次的數(shù)據(jù)依次產(chǎn)生,因此不重復(fù)。
批處理函數(shù)4.定義統(tǒng)計(jì)函數(shù)
利用批處理函數(shù)batch()獲取一個(gè)批次的數(shù)據(jù),并統(tǒng)計(jì)數(shù)字的出現(xiàn)次數(shù),然后遍歷所有批次,得到數(shù)字出現(xiàn)次數(shù)的列表。
統(tǒng)計(jì)函數(shù)5.運(yùn)行結(jié)果及可視化展示
作為例子,運(yùn)行主程序,匯總統(tǒng)計(jì)數(shù)字“9”的出現(xiàn)次數(shù),并繪制每個(gè)批次出現(xiàn)次數(shù)的曲線圖。代碼如下:
主程序代碼可視化:
各個(gè)批次的次數(shù)曲線圖運(yùn)行結(jié)果如下:
運(yùn)行結(jié)果6.總結(jié)
本文展示了如何利用Python生成器處理大數(shù)據(jù)的全過程。所使用的方法是通用的,可以應(yīng)用于機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等領(lǐng)域。即使你沒有超級計(jì)算機(jī),也沒有分布式大數(shù)據(jù)處理系統(tǒng),只要你選擇合適的算法、合適的數(shù)據(jù)結(jié)構(gòu)和合適的工具(Python生成器),你只有一臺(tái)普通計(jì)算機(jī)也可以處理大數(shù)據(jù)。
(作者:百家號(hào)/AiMath)
Python抓取app數(shù)據(jù)(摩拜單車) 營銷視頻課程
前幾天有人問我,可以幫我抓取摩拜單車的數(shù)據(jù)嘛?
我想著幫他抓取下次他還是不會(huì),古話說的好:授人以魚不如授人以漁,所以本次我們就講講如何抓取app的內(nèi)容吧。
Fiddle的安裝及配置
抓手機(jī)包我用的是fiddle。
安裝
先在下載頁面下載-→https://telerik/download/fiddler
選擇你“準(zhǔn)備用fiddle來干嘛”
你的郵箱
以及同意“最終用戶許可協(xié)議”就可以下載了
下載后按照提示安裝就可以了。
配置
源碼 群 5952 66089
開始抓包
首先確保電腦和手機(jī)連在同一個(gè)WiFi下面
打開fiddle
獲取電腦ip
打開cmd命令行
輸入ipconfig,如圖所示,192.168.31.146就是我的ip地址
打開手機(jī)WiFi設(shè)置,找到你當(dāng)前鏈接的WiFi
我當(dāng)前鏈接的是Xiaomi_E172_5G
設(shè)置代理服務(wù)器為你電腦的ip,端口號(hào)為上面設(shè)置的端口號(hào)(默認(rèn)為8888)
安裝https證書
在手機(jī)瀏覽器上打開 你電腦ip:你設(shè)置的端口號(hào)
我的是192.168.31.146:8888
點(diǎn)擊框框處安裝證書
設(shè)置fiddle監(jiān)聽所有請求
選擇all process
打開摩拜單車app
然后你會(huì)看到定位的時(shí)候一輛車也沒有。。。
打開個(gè)人詳情頁還提示“抱歉,服務(wù)暫不可用。
這是因?yàn)槟Π萦蟹雷ト∠拗疲ㄎ也率菣z測,如果有使用代理的話,直接讓你用不了。。。)
那這樣的話我們就沒辦法抓到么???
因?yàn)槲抑斑€用過摩拜的小程序,所以我們抓抓微信小程序試試看
打開摩拜單車的小程序
我們看到已經(jīng)定位了。。,并且把附件的單車都顯示出來了
我們可以多移動(dòng)我們的位置,然后等有把附近的車顯示出來
可以看到fiddle上面已經(jīng)有好多請求了
mobike-api。。。這很明顯就是我們要找的請求
請求頭如下圖所示,方法是post
返回值因?yàn)槲铱吹绞莏son的格式了,所以直接以json的格式看。
源碼 群 59 5266089
可以看到我們已經(jīng)抓取了需要的數(shù)據(jù),那么怎么抓取整個(gè)上海的摩拜單車情況呢??
只要獲取上海的所有經(jīng)緯度,然后替換上面data中的經(jīng)度及緯度就可以了。。。
那么怎么獲取上海的所有經(jīng)緯度。。。這方面沒怎么接觸。。
看完我相信大家應(yīng)該多試幾次就好了。比較實(shí)用的技巧奉上。
Python實(shí)現(xiàn)數(shù)據(jù)可視化,看如何監(jiān)控你的爬蟲 互聯(lián)網(wǎng)視頻課程
好,開始今天的文章。
今天主要是來說一下怎么可視化來監(jiān)控你的爬蟲的狀態(tài)。
相信大家在跑爬蟲的過程中,也會(huì)好奇自己養(yǎng)的爬蟲一分鐘可以爬多少頁面,多大的數(shù)據(jù)量,當(dāng)然查詢的方式多種多樣。今天我來講一種可視化的方法。
關(guān)于爬蟲數(shù)據(jù)在mongodb里的版本我寫了一個(gè)可以熱更新配置的版本,即添加了新的爬蟲配置以后,不用重啟程序,即可獲取剛剛添加的爬蟲的狀態(tài)數(shù)據(jù)。
1.成品圖
這個(gè)是監(jiān)控服務(wù)器網(wǎng)速的最后成果,顯示的是下載與上傳的網(wǎng)速,單位為M。爬蟲的原理都是一樣的,只不過將數(shù)據(jù)存到InfluxDB的方式不一樣而已, 如下圖。
可以實(shí)現(xiàn)對爬蟲數(shù)量,增量,大小,大小增量的實(shí)時(shí)監(jiān)控。
2. 環(huán)境
InfluxDb,是目前比較流行的時(shí)間序列數(shù)據(jù)庫;
Grafana,一個(gè)可視化面板(Dashboard),有著非常漂亮的圖表和布局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數(shù)據(jù)源
Ubuntu
influxdb(pip install influxdb)
Python 2.7
3. 原理
獲取要展示的數(shù)據(jù),包含當(dāng)前的時(shí)間數(shù)據(jù),存到InfluxDb里面,然后再到Grafana里面進(jìn)行相應(yīng)的配置即可展示;
4. 安裝
4.1 Grafana安裝
官方安裝指導(dǎo)
安裝好以后,打開本地的3000端口,即可進(jìn)入管理界面,用戶名與密碼都是admin。
4.2 InfulxDb安裝
這個(gè)安裝就網(wǎng)上自己找吧,有很多的配置我都沒有配置,就不在這里誤人子弟了。
5. InfluxDb簡單操作
碰到了數(shù)據(jù)庫,肯定要把增刪改查學(xué)會(huì)了啊, 和sql幾乎一樣,只有一絲絲的區(qū)別,具體操作,大家可以參考官方的文檔。
influx 進(jìn)入命令行
CREATE DATABASE test 創(chuàng)建數(shù)據(jù)庫
show databases 查看數(shù)據(jù)庫
use test 使用數(shù)據(jù)庫
show series 看表
select * from table_test 選擇數(shù)據(jù)
DROP MEASUREMENT table_test 刪表
6. 存數(shù)據(jù)
InfluxDb數(shù)據(jù)庫的數(shù)據(jù)有一定的格式,因?yàn)槲叶际抢胮ython庫進(jìn)行相關(guān)操作,所以下面將在python中的格式展示一下:
其中:
measurement, 表名
time,時(shí)間
tags,標(biāo)簽
fields,字段
可以看到,就是個(gè)列表里面,嵌套了一個(gè)字典。其中,對于時(shí)間字段,有特殊要求,可以參考這里, 下面是python實(shí)現(xiàn)方法:
所以,到這里,如何將爬蟲的相關(guān)屬性存進(jìn)去呢?以MongoDB為例
完整代碼,關(guān)注上面的公眾號(hào),發(fā)送“”可視化“”即可獲取。
那么現(xiàn)在我們已經(jīng)往數(shù)據(jù)里存了數(shù)據(jù)了,那么接下來要做的就是把存的數(shù)據(jù)展示出來。
7.展示數(shù)據(jù)
7.1 配置數(shù)據(jù)源
以admin登錄到Grafana的后臺(tái)后,我們首先需要配置一下數(shù)據(jù)源。點(diǎn)擊左邊欄的最下面的按鈕,然后點(diǎn)擊DATA SOURCES,這樣就可以進(jìn)入下面的頁面:
點(diǎn)擊ADD DATA SOURCE,進(jìn)行配置即可,如下圖:
其中,name自行設(shè)定;Type 選擇InfluxDB;url為默認(rèn)的http://localhost:8086, 其他的因?yàn)槲仪懊鏇]有進(jìn)行配置,所以默認(rèn)的即可。然后在InfluxDB Details里的填入Database名,最后點(diǎn)擊測試,如果沒有報(bào)錯(cuò)的話,則可以進(jìn)入下一步的展示數(shù)據(jù)了;
7.2 展示數(shù)據(jù)
點(diǎn)擊左邊欄的+號(hào),然后點(diǎn)擊GRAPH
接著點(diǎn)擊下圖中的edit進(jìn)入編輯頁面:
從上圖中可以發(fā)現(xiàn):
中間板塊是最后的數(shù)據(jù)展示
下面是數(shù)據(jù)的設(shè)置項(xiàng)
右上角是展示時(shí)間的設(shè)置板塊,在這里可以選擇要展示多久的數(shù)據(jù)
7.2.1 配置數(shù)據(jù)
在Data Source中選擇剛剛在配置數(shù)據(jù)源的時(shí)候配置的NAME字段,而不是database名。
接著在下面選擇要展示的數(shù)據(jù)??粗秃苁煜な遣皇牵耆莝ql語句的可視化。同時(shí),當(dāng)我們的數(shù)據(jù)放到相關(guān)的字段上的時(shí)候,雙擊,就會(huì)把可以選擇的項(xiàng)展示出來了,我們要做的就是直接選擇即可;
設(shè)置右上角的時(shí)間,則可以讓數(shù)據(jù)實(shí)時(shí)進(jìn)行更新與展示
因?yàn)橄旅娴呐渲脤?shí)質(zhì)就是sql查詢語句,所以大家按照自己的需求,進(jìn)行選擇配置即可,當(dāng)配置完以后,就可以在中間的面板里面看到數(shù)據(jù)了。
8. 總結(jié)
到這里,本篇文章就結(jié)束了。其中,對于Grafana的操作我沒有介紹的很詳細(xì),因?yàn)楸酒饕v的是怎么利用這幾個(gè)工具完成我們的任務(wù)。
同時(shí),里面的功能確實(shí)很多,還有可以安裝的插件。我自己目前還是僅僅對于用到的部分比較了解,所以大家可以查詢官方的或者別的教程資料來對Grafana進(jìn)行更深入的了解,制作出更加好看的可視化作品來。
文末知識(shí)點(diǎn)摘要①:sql中dateiff函數(shù)的用法
DATEDIFF
返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。
一、 語法
DATEDIFF ( datepart , startdate , enddate )
二、參數(shù)
datepart
是規(guī)定了應(yīng)在日期的哪一部分計(jì)算差額的參數(shù)。下表列出了 Microsoft SQL Server? 識(shí)別的日期部分和縮寫。
日期部分 縮寫
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
startdate
是計(jì)算的開始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。
因?yàn)?smalldatetime 只精確到分鐘,所以當(dāng)用 smalldatetime 值時(shí),秒和毫秒總是 0。
如 果您只指定年份的最后兩位數(shù)字,則小于或等于"兩位數(shù)年份截止期"配置選項(xiàng)的值的最后兩位數(shù)字的數(shù)字所在世紀(jì)與截止年所在世紀(jì)相同。大于該選項(xiàng)的值的最后 兩位數(shù)字的數(shù)字所在世紀(jì)為截止年所在世紀(jì)的前一個(gè)世紀(jì)。例如,如果 two digit year cutoff 為 2049(默認(rèn)),則 49被解釋為 2049,2050 被解釋為 1950。為避免模糊,請使用四位數(shù)的年份。
enddate
是計(jì)算的終止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。
三、返回類型
integer
四、用法
此函數(shù)計(jì)算兩個(gè)指定日期之間日期部分的數(shù)目。結(jié)果為日期部分中等于(date2 - date1)的有符號(hào)的整數(shù)值。
當(dāng)結(jié)果不是日期部分的偶數(shù)倍時(shí),DATEDIFF 將被截?cái)喽皇潜簧崛搿?/p>
當(dāng)使用 day 作為日期部分時(shí),DATEDIFF 返回兩個(gè)指定的時(shí)間之間(包括第二個(gè)日期但不包括第一個(gè)日期)的午夜數(shù)。
當(dāng)使用 month 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期之間(包括第二個(gè)日期但不包括第一個(gè)日期)出現(xiàn)的月的第一天的數(shù)目。
當(dāng)使用 week 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期(包括第二個(gè)日期但不包括第一個(gè)日期)之間星期日的數(shù)目。
對于更小的時(shí)間單位存在溢出值:
milliseconds 24 天
seconds 68 年
minutes 4083 年
others 沒有溢出限制
如果超出這些限制,此函數(shù)將返回溢出錯(cuò)誤。
五、標(biāo)準(zhǔn)和兼容性
SQL/92 Transact-SQL 擴(kuò)展。
SQL/99 Transact-SQL 擴(kuò)展。
Sybase 與 Adaptive Server Enterprise 兼容。
六、示例
下面的語句返回 1:
select datediff( hour, ''4:00am'', ''5:50am'' )
下面的語句返回 102:
select datediff( month, ''1987/05/02'', ''1995/11/15'' )
下面的語句返回 0:
select datediff( day, ''00:00'', ''23:59'' )
下面的語句返回 4:
select datediff( day, ''1999/07/1900:00'',''1999/07/2323:59'' )
下面的語句返回 0:
select datediff( month, ''1999/07/19'', ''1999/07/23'' )
下面的語句返回 1:
select datediff( month, ''1999/07/19'', ''1999/08/23'' )
今天的文章分享就到此結(jié)束,希望本次分享會(huì)對正在學(xué)習(xí)Python的你有所幫助,文章部分素材來源網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪除。
關(guān)注菜鳥學(xué)Python,撰寫文章分享知識(shí)也挺辛苦的,希望大家多多關(guān)注,轉(zhuǎn)發(fā)與收藏。文末左側(cè)了解更多有一個(gè)免費(fèi)的flask課程,需要的同學(xué)可以點(diǎn)擊了解了解一下。