但是現在,這些數據集使用起來并不方便。它們可能小到可以裝進你日常筆記本電腦的硬盤,也可能大到和 RAM 匹配。因此,它們已經很難被打開和檢查,更不用說探索或分析了。
在處理這些數據集時,通常使用 3 種策略。第一個是對數據進行子抽樣。它的缺點是顯而易見的:可能會錯過關鍵的部分,或者更糟的是,不看全部內容可能會對數據和它表達的事實有所曲解。還有一個策略是使用分布式計算。雖然在某些情況下這是一種有效的方法,但它會帶來管理和維護集群的巨大開銷。想象一下,必須為一個不在 RAM 范圍內的數據集(比如在 30-50GB 范圍內)設置一個集群會是什么樣子的。對我來說,這似乎難以承受?;蛘?,你可以租用一個強大的云實例,該實例具有處理相關數據所需的足夠內存。例如,AWS 提供了具有兆字節 RAM 的實例。在這種情況下,你仍然需要管理云數據存儲桶,在每次實例啟動時等待從存儲桶到實例的數據傳輸,處理將數據放到云上帶來的遵從性問題,并處理在遠程計算機上工作帶來的所有不便。當然,成本就更不用說了,雖然起價很低,但隨著時間的推移,成本往往會越來越高。
在本文中,我將向你展示一種新的方法:只要數據可以被存進筆記本電腦、臺式機或服務器的硬盤上,那么這種方法可以讓使用幾乎任意大小的數據進行數據科學研究更快、更安全、更方便。
Vaex
Vaex 是一個開源的數據框架庫,它可以在與硬盤大小相同的表格數據集上進行可視化、探索、分析甚至機器學習。為此,Vaex 采用了一些概念,如內存映射、高效的核心外算法和延后計算。所有這些都被一個和 pandas 類似的 API 類綁定起來,任何人都可以馬上開始使用它。
十億出租車分析
為了說明這個概念,讓我們在一個數據集上做一個簡單的探索性數據分析,這個數據集非常大,可以放入一個典型的筆記本電腦的 RAM 中。在這篇文章中,我們將使用紐約(NYC)出租車數據集,其中包含 2009 至 2015 年之間的超過 10 億個標志性黃色出租車。數據可以從這個網站下載,并以 CSV 格式提供。完整的分析可以在這個 Jupyter notebook 中單獨查看。
清理街道
第一步是將數據轉換為內存可映射文件格式,如 Apache Arrow、Apache Parquet 或 HDF5。將 CSV 數據轉換為 HDF5 的示例可以在這里找到。一旦數據是內存可映射格式,用 Vaex 打開它是即時的(0.052 秒?。M管磁盤上的數據超過 100GB:
使用 Vaex 打開內存映射文件只需要 0.052 秒,即使它們超過 100 GB
為什么這么快?使用 Vaex 打開內存映射文件時,實際上沒有數據讀取。Vaex 只讀取文件元數據,如磁盤上數據的位置、數據結構(行數、列數、列名和類型)、文件描述等。那么,如果我們想檢查數據或與數據交互呢?打開一個數據集會生成一個標準數據框,檢查它的速度是否也很快:
紐約市黃色出租車數據預覽
再一次注意,單元執行時間非常短。這是因為顯示 Vaex 數據幀或列只需要從磁盤讀取前 5 行和后 5 行。這就引出了另一個重要的問題:Vaex 只會在必須的時候遍歷整個數據集,它會盡可能少地傳遞數據。
無論如何,讓我們首先從極端異常值或錯誤的數據輸入中清除這個數據集。一個好的開始方法是使用 describe 方法獲得數據的高層次概述,該方法顯示每個列的樣本數、缺少的值數和數據類型。如果列的數據類型是數字,則平均值、標準偏差以及最小值和最大值也將被顯示。所有這些統計數據都是通過對數據的一次傳遞來計算的。
使用 describe 方法獲得數據幀的高級概述。注意,數據幀包含 18 列,但在此屏幕截圖中只有前 7 列可見
描述方法很好地說明了 Vaex 的功耗和效率:所有這些統計數據都是在我的 MacBook Pro(15", 2018, 2.6GHz Intel Core i7, 32GB RAM)上 3 分鐘之內計算出來的。其他的庫或方法需要分布式計算或 100GB 以上的云實例來執行相同的計算。有了 Vaex,你所需要的只是數據,你的筆記本電腦只需要幾 GB 的內存。
從 descripe 的輸出來看,很容易注意到數據中包含了一些嚴重的異常值。首先,讓我們從檢查取貨地點開始。刪除異常值的最簡單方法是簡單地繪制出上下車的位置,并直觀地定義我們希望重點分析的紐約市的區域。由于我們使用的數據集太大了,直方圖是最有效的可視化方法。用 Vaex 創建和顯示直方圖和熱圖是如此的快,這樣的繪圖可以更好地互動!
df.plot_widget(df.pickup_longitude,
df.pickup_latitude,
shape=512,
limits='minmax',
f='log1p',
colormap='plasma')
一旦我們以交互方式決定要關注紐約市的哪個區域,我們就可以簡單地創建一個過濾數據框:
上面代碼塊最酷的地方是它需要的內存可以忽略不計!它在過濾 Vaex 數據幀時,不會生成數據的副本,相反,它只創建對原始對象的引用,并在其上應用二進制掩碼。掩碼選擇顯示哪些行并用于將來的計算。這為我們節省了 100GB 的 RAM。
現在,讓我們檢查一下乘客計數欄。在一次出租車行程中記錄的乘客人數最多為 255 人,這似乎有點極端。讓我們計算一下每一位乘客的出行次數。這很容易通過值計數方法實現:
對 10 億行應用「value counts」方法只需大約 20 秒!
從上圖中我們可以看出,乘客數超過 6 人的旅行可能是罕見的異常值,或者只是錯誤的數據輸入。上面也有大量的 0 名乘客的旅行。既然現在我們還不知道這些旅行是否合理,那就讓我們把它們過濾掉吧。
讓我們做一個與前面的旅行距離相似的練習。由于這是一個連續變量,我們可以繪制行程的分布。參考最小和最大距離,我們用一個更合理的范圍繪制一個柱狀圖。
紐約出租車數據集的行程距離直方圖
從上面的圖表我們可以看出,旅行次數隨著距離的增加而減少。在大約 100 英里的距離上,分布會有一個很大的下降。目前,我們將使用此作為截止點,以消除基于行程距離的極端異常值:
出行距離列中極端離群值的存在是考察出租車出行持續時間和平均速度的動機。這些功能在數據集中不易獲得,但計算起來很簡單:
上面的代碼塊需要的內存為零,不需要時間執行!這是因為代碼導致創建虛擬列。這些列僅包含數學表達式,并且僅在需要時計算,否則,虛擬列的行為與任何其他常規列一樣。請注意,其他標準庫在相同的操作中需要 10GB 的 RAM。
好吧,我們來繪制旅行時間的分布圖:
紐約 10 億多次出租車出行持續時間的直方圖
從上面的圖中我們可以看到 95% 的出租車使用都不到 30 分鐘就能到達目的地,盡管有些旅程可以花費 4 到 5 個小時。你能想象在紐約被困在出租車里超過 3 個小時嗎?不管怎樣,讓我們開誠布公,考慮一下總共持續不到 3 小時的所有旅行:
現在讓我們研究出租車的平均速度,同時也為數據限制選擇一個合理的范圍:
出租車平均速度的分布
根據上圖,我們可以推斷出出租車平均速度在 1 到 60 英里每小時的范圍內,因此我們可以更新過濾后的 DataFrame:
讓我們把注意力轉移到出租車旅行的成本上。從 describe 方法的輸出中,我們可以看到 fare_amount、total_amount 和 tip_amount 列中有一些異常值。首先,這些列中的任何值都不應為負。與此相反,這些數字表明,一些幸運的司機幾乎成了百萬富翁,只有一輛出租車。讓我們看看在一個相對合理的范圍內,這些量的分布:
紐約 10 億多個出租車出行的票價、總金額和小費的分布情況。在筆記本電腦上創建這些圖只用了 31 秒!
我們看到上述三種分布圖都有很長的尾巴。在尾部的某些值可能是合法的,而其他值可能是錯誤的數據輸入。無論如何,現在我們還是保守一點,只考慮票價、總票價和小費低于 200 美元的行程。我們還要求票價金額、總金額值大于 0 美元。
最后,在對所有數據進行初步清洗之后,讓我們看看我們的分析有多少出租車行程。
我們還有 11 億多次旅行!通過這樣大量的數據,可以獲得一些關于出租車旅行的寶貴見解。
坐進駕駛座
假設我們是一個未來的出租車司機,或出租車公司的經理,并有興趣使用這個數據集來學習如何最大限度地提高我們的利潤,降低我們的成本,或者只是改善我們的工作生活。
讓我們先找出平均來說能帶來最好收益的接送乘客的地點。天真地說,我們可以畫出一張接送地點的熱圖,用平均票價進行編碼。然而,出租車司機自己也有成本,例如,他們得付燃料費。因此,把乘客帶到很遠的地方可能會導致更高的票價,但這也意味著更大的油耗和時間損失。此外,要從偏遠的地方找到一個乘客帶去市中心的某個地方可能不那么容易,因此在沒有乘客的情況下開車回去可能會花銷很大。一種解決方法是用車費和旅行距離之比的平均值對熱圖進行顏色編碼。讓我們考慮這兩種方法:
紐約市彩色熱圖編碼:平均票價金額(左)和票價金額與行程的平均比率
在簡單的情況下,當我們只關心為提供的服務獲得最大票價時,最佳接送乘客的區域是紐約機場以及主要的大道,如 Van Wyck 高速公路和 Long Island 高速公路。當我們把旅行的距離考慮進去時,我們得到的是一張稍微不同的圖片。 Van Wyck 高速公路、Long Island 高速公路大道以及機場仍然是接送乘客的好地方,但它們在地圖上的重要性要小得多。然而,在 Hudson 河的西側出現了一些新的熱點地區,這些地區似乎可以賺到相當的利潤。
開出租車是一項相當靈活的工作。為了更好地利用這種靈活性,知道什么時候開車是最有益的。為了回答這個問題,我們制作一個圖表,顯示每天和一天中每小時的車費與出行距離的平均比率:
一周中每天和一天中每小時的車費與出行距離的平均比率
上面的數字是有道理的:最好的收入發生在高峰時段,特別是在一周工作日的中午。作為出租車司機,我們的一小部分收入是出租車公司的,所以我們可能會對哪一天的顧客給的小費最多感興趣。因此,讓我們生成一個類似的圖,這次顯示平均小費百分比:
每周每天和每天小時的平均小費百分比
上面的圖很有趣。它告訴我們,乘客喜歡在早上 7 點到 10 點之間和在本周早些時候的晚上給出租車司機小費。如果你在凌晨 3 點或 4 點接乘客,不要指望會有太大的小費。結合上面兩個地塊的分析,早上 8 點到 10 點是上班的好時間:每個人每英里可以獲得不錯的車費和滿意的小費。
發動引擎!
在本文的前一部分中,我們簡要介紹了 trip_distance 列,在從異常值中清除它的同時,我們保留了所有小于 100 英里的行程值。這仍然是一個相當大的截止值,特別是考慮到黃色出租車公司主要在曼哈頓經營。Trimih 距離列描述出租車在接到乘客和乘客下車位置之間行駛的距離。然而,為了避免交通堵塞或道路工程等原因,人們通??赡軙x擇不同的路線。因此,作為 trip_distance 列的對應項,讓我們計算上車和下車位置之間的最短可能距離,我們稱之為 arc_distance:
對于用 numpy 編寫的復雜表達式,vaex 可以在 Numba、Pythran 甚至 CUDA(如果你有 NVIDIA GPU)的幫助下使用即時編譯來大大加快計算速度
弧長計算公式涉及面廣,包含了大量的三角函數和算法,特別是在處理大型數據集時,計算量很大。如果表達式或函數只使用來自 Numpy 包的 Python 操作和方法編寫,Vaex 將使用機器的所有核心并行計算它。除此之外,VAEX 支持通過 NUBBA(使用 LLVM)或 Pythran(通過 C++加速)及時編譯,從而提供更好的性能。如果你碰巧有一個 NVIDIA 圖形卡,你可以通過 jit_CUDA 方法使用 CUDA 來獲得更高的性能。
總之,讓我們畫出 trip_distance 和 arc_distance 的分布:
左:行程距離和弧距離的比較;右:弧距
有趣的是,arc_distance 從來沒有超過 21 英里,但是出租車實際行駛的距離可以是 5 倍大。事實上,有數百萬的出租車旅行,下車位置在上車地點 100 米(0.06 英里)以內!
多年來的黃色出租車公司
我們今天使用的數據集跨越了 7 年。我們可以看到,隨著時間的推移,一些收益的數量是如何演變的。使用 Vaex,我們可以快速執行核心分組和聚合操作。讓我們來探討 7 年來票價和行程是如何演變的:
對于一個超過 10 億個樣本的 Vaex 數據幀,在筆記本電腦上使用四核處理器進行 8 個聚合的分組操作只需不到 2 分鐘
在上面的單元塊中,我們執行一個分組操作,然后是 8 個聚合,其中 2 個在虛擬列上。上面的單元塊在我的筆記本電腦上執行不到 2 分鐘。這相當令人印象深刻,因為我們使用的數據包含超過 10 億個樣本。不管怎樣,讓我們看看結果。以下是多年來駕駛出租車的費用演變過程:
平均票價和總金額,以及乘客每年支付的小費百分比
我們看到出租車價格,以及小費隨著歲月的流逝而增加?,F在讓我們來看一下出租車的 trip_distance 和 arc_distance,出租車是以年為單位行駛的:
出租車每年旅行的平均行程和弧距。
上圖顯示,出行距離和弧線距離都有小幅增加,這意味著,平均而言,人們每年的出行都會稍微遠一點。
給我看看錢
在我們的旅程結束之前,讓我們再停一站,調查一下乘客如何支付乘車費用。數據集包含付款類型列,因此讓我們看看它包含的值:
從數據集文檔中,我們可以看到此列只有 6 個有效條目:
1=credit card payment
2=cash payment
3=no charge
4=dispute
5=Unknown
6=Voided trip
因此,我們可以簡單地將 payment_type 列中的條目映射為整數:
現在,我們可以按每年的數據分組,看看紐約人在出租車租賃支付方面的習慣是如何改變的:
每年付款方式
我們看到,隨著時間的推移,信用卡支付慢慢變得比現金支付更頻繁。我們真的生活在一個數字時代!注意,在上面的代碼塊中,一旦我們聚合了數據,小的 Vaex 數據幀可以很容易地轉換為 Pandas 數據幀,我們可以方便地將其傳遞給 Seaborn。不是想在這里重新發明輪子。
最后,讓我們通過繪制現金支付與信用卡支付的比率來確定支付方式是取決于一天中的時間還是一周中的某一天。為此,我們將首先創建一個過濾器,它只選擇用現金或卡支付的乘車。下一步是我最喜歡的 Vaex 特性之一:帶有選擇的聚合。其他庫要求對以后合并為一個支付方法的每個單獨篩選的數據幀進行聚合。另一方面,使用 Vaex,我們可以通過在聚合函數中提供選擇來一步完成此操作。這非常方便,只需要一次傳遞數據,就可以獲得更好的性能。在此之后,我們只需以標準方式繪制結果數據幀:
在一周的某一時間和某一天,現金和卡支付的一部分
看上面的圖表,我們可以發現一個類似的模式,顯示小費百分比和一周中的一天和一天中的時間相關的函數。從這兩個圖中,數據表明,用卡支付的乘客往往比用現金支付的乘客小費更多。事實真的是這樣嗎?我想請你自己試著去弄清楚,因為現在你已經掌握了知識、工具和數據!你也可以看看這個 notebook 來獲得一些額外的提示。
到達目的地
我希望這篇文章是對 Vaex 的一個有用的介紹,它將幫助緩解你可能面臨的一些「不舒服的數據」問題,至少當涉及到表格數據集時會對你有幫助。如果你對本文中使用的數據集感興趣,可以直接從帶 Vaex 的 S3 中使用它。查看完整的 Jupyter notebook 了解如何執行此操作。
有了 Vaex,你只需幾秒鐘就可以通過自己的筆記本電腦瀏覽超過十億行數據,計算出各種統計數據、聚合數據,并生成信息豐富的圖表。它不僅免費而且開源,我希望你會給它一個機會!
via:https://towardsdatascience.com/how-to-analyse-100s-of-gbs-of-data-on-your-laptop-with-python-f83363dda94
雷鋒網雷鋒網雷鋒網
你決定用新電腦替換舊的Windows電腦時,有幾種處理舊設備的方式可供選擇,你可以把它送給朋友或家人,或者當作二手賣掉。
但不論你選擇哪種處理方式,最重要的一步是在轉讓電腦前,徹底刪除所有的個人文件。
對于臺式機來說,可能只需簡單地更換硬盤。但對于筆記本電腦,通常無法輕松更換存儲設備。
而在轉讓筆記本電腦前,又該如何徹底刪除個人文件,以避免隱私泄露呢?
最便捷的方法是重置筆記本電腦,選擇刪除個人文件并重新安裝Windows。在運行Windows 10的電腦上,前往“設置 > 更新和安全 > 恢復”。
而在Windows 11上,選擇“設置 > 系統 > 恢復”下的“重置電腦”選項,并確保選擇“刪除所有內容”。
在開始重置之前,系統會給出多個提示,防止誤操作。如果你仔細查看,還能找到一個“清理磁盤”(Clean Disk)的選項,專為在刪除文件時徹底擦除數據設計。另一種方法是使用Windows安裝介質啟動電腦,刪除所有現有磁盤分區,然后進行全新安裝。
無論選擇哪種方式,現有的個人文件都會被刪除。不過,微軟提醒說,“數據擦除功能針對普通用戶設計,不符合政府和行業的數據擦除標準?!币虼?,技術高手可能仍然能通過取證工具或數據恢復軟件找回部分已刪除的信息。
對于使用固態硬盤(SSD)的現代系統,你通??梢允褂脦в邪踩脸畹墓芾砉ぞ摺1热?,三星的SSD可以使用Samsung Magician程序,Intel的SSD則可以使用Intel Memory and Storage Tool,而英睿達的SSD則使用Crucial Storage Executive工具。Microsoft Surface設備支持一種名為Microsoft Surface Data Eraser的專用工具。
一些第三方分區管理工具也提供完全擦除磁盤的功能。比如MiniTool Partition Wizard免費和付費版本都支持這一功能。
你還可以使用Windows自帶的加密工具,在執行全新安裝前確保整個系統驅動器(包括未使用的磁盤空間)已加密。這個額外步驟雖然需要一些時間,但可以確保即使從驅動器恢復到任何數據,也都是不可讀的,而且不需要借助任何第三方軟件。
如果你使用Microsoft賬戶登錄到支持BitLocker設備加密 (BDE) 的設備,系統驅動器默認情況下是完全加密的。要檢查你的設備是否支持BDE,可以以管理員身份運行系統信息實用程序(Msinfo32.exe),并在系統摘要頁面底部查看“設備加密支持”條目。
在運行Windows 10或Windows 11專業版的系統上,你可以使用BitLocker管理工具(在搜索框中輸入“BitLocker”即可找到)來加密系統驅動器和任何數據驅動器。確保選擇加密整個驅動器,而不僅僅是當前存儲數據的部分。
如果設備加密不可用,你可以以管理員身份打開命令提示符,輸入以下命令:
Cipher /W:C:\
該命令會“清零”未使用的磁盤空間,將其覆蓋,確保無法恢復。這一過程可能需要一些時間,因此建議在空閑時間運行此操作。
們都知道筆記本電腦比臺式電腦擁有方便攜帶的優勢,但是不論是筆記本還是臺式電腦,難免會出現數據丟失情況,如最近有位小伙伴,不小心將自己出差需要使用的工作資料誤刪了,那么問題來了,筆記本數據刪除怎么恢復呢?這時小編給大家分享幾種在刪除數據后常用的恢復方法,希望對大家有幫助!
第一種方法、撤銷恢復
如果你使用的是普通的刪除方法,如使用delete或鼠標右鍵刪除文件后沒有進行其他操作,可以采用撤銷恢復刪除數據。方法很簡單,按Ctrl+Z撤銷鍵,不小心刪除的數據就能馬上找回了。
第二種方法、回收站恢復
不能使用Ctrl+Z來恢復數據的話,可以嘗試在回收站恢復刪除的數據,恢復方法也很簡單,打開筆記本電腦中的回收站,然后根據數據的特征篩選找到,右鍵選擇還原即可,但是方法對于已清空回收站、永久刪除文件、設置了刪除文件后不移入回收站的用戶不適用,請需繼續閱讀下面的方法。
第三種方法、備份恢復
如果回收站沒法找回數據,那自然是只有想想其它方法來恢復了。比如備份恢復,這種方法特別適用于恢復開啟了trim指令的固態硬盤刪除數據,因此如果你有備份數據的好習慣,那么這種方法能幫助您輕松找回文件。
第四種方法、軟件恢復
如果以上三種方法都無法幫助恢復,是不是就此放棄了呢?不要怕,還有其他恢復方法,比如借助專業的數據恢復軟件—云騎士數據恢復軟件,這是一款專業的數據恢復軟件,支持恢復不同方式刪除的筆記本/臺式電腦、U盤、SD卡、移動硬盤等數據,該軟件界面簡潔,操作起來簡單,即便是電腦小白也能輕松使用。下面我們就來看看恢復筆記本電腦數據的詳細步驟吧。
恢復已刪除數據具體步驟:
步驟 1. 選擇恢復模式
了解自己的筆記本數據是如何刪除的,然后選擇相應的恢復模式,這里以“誤刪除文件”為例。
備注:如果“誤刪除文件”掃描下沒有你要恢復的文件,就通過“深度恢復”來查找更多數據。
步驟 2. 選擇恢復位置
搞清楚已刪除的數據原始位置在哪里,選擇該對應的磁盤并點擊“開始掃描”按鈕。
備注:不知道數據原來存儲的位置,可依次選擇磁盤進行掃描。
步驟 3. 篩選掃描結果
軟件在快速掃描下展示出掃描結果,你可以通過文件名/文件大小/文件類型等篩選方式找到數據。
備注:如果使用“深度恢復”掃描后發現文件名改變了,這時可通過文件大小和文件類型來篩選文件。
步驟 4. 進行立即恢復
在掃描結果中找到需要恢復的數據后點擊“立即恢復”,選擇安全的位置進行存儲。
備注:這里的安全位置是指未丟失原文件所保存的磁盤。
步驟 5. 查看恢復數據
等待數據導出完成后,點擊“查看”即可在一個云騎士命名的文件夾中查看恢復好的數據了。
備注:“深度恢復”功能不支持進入相同的文件路徑找到恢復文件。
第五種方法、線下恢復
如果借助軟件無法恢復,很有可能數據已經被覆蓋掉了,還有一種情況就是軟件無法正常識別筆記本電腦磁盤,即便能正常識別,但是在掃描過程中出現很多硬盤壞道也可能導致掃描失敗,這些與筆記本電腦出現物理性故障息息相關,在軟件無法幫助恢復的情況下,我們可以采用線下恢復,通過聯系專業的數據恢復機構人員,根據筆記本硬盤損壞情況,進行相應的數據恢復工作。
總結
綜上所述,對比了幾種筆記本電腦恢復刪除數據的方法,你會發現只要筆記本電腦未出現物理性故障且未覆蓋的情況下,借助軟件進行恢復似乎是不錯的選擇,用戶只需幾步即可恢復各種情況下刪除的文件,如果你也有同樣的數據丟失煩惱,不放在云騎士數據恢復官網下載體驗吧。
本文來自 yqssjhf.com>> 創作不易,轉載請注明出處。