0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Python中提供高效、富有表現(xiàn)力的函數(shù)

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

這篇文章是 加速數(shù)據(jù)分析系列文章的一部分:

Accelerated Data Analytics: Faster Time Series Analysis with RAPIDS cuDF 帶您完成使用 RAPID cuDF 處理時(shí)間序列數(shù)據(jù)的常見步驟。

本帖 討論了 pandas 庫如何在 Python 中提供高效、富有表現(xiàn)力的函數(shù)。

氣候建模、醫(yī)療保健、金融和零售業(yè)的數(shù)字進(jìn)步正在產(chǎn)生前所未有的數(shù)據(jù)量和類型。 IDC 表示,到 2025 年,將有 180 ZB 的數(shù)據(jù),而 2020 年為 64 ZB ,這將擴(kuò)大對數(shù)據(jù)分析的需求,將所有數(shù)據(jù)轉(zhuǎn)化為見解。

每天兩次的衛(wèi)星圖像為 空氣質(zhì)量 、 淹水 和 太陽耀斑建模提供信息,以幫助識別自然風(fēng)險(xiǎn)。

Advanced 基因組學(xué) 和 基因測序提供了用見解編碼的遺傳數(shù)據(jù)池,可以使我們更接近癌癥的治愈。

數(shù)字購買 和網(wǎng)絡(luò)系統(tǒng)正在產(chǎn)生數(shù) TB 的市場和 行為 數(shù)據(jù)。

NVIDIA 提供 RAPIDS 開源軟件庫和 API 套件,使數(shù)據(jù)科學(xué)家能夠完全在 GPU 上執(zhí)行端到端的數(shù)據(jù)科學(xué)和分析管道。這包括使用我們的 DataFrame API : RAPIDS cuDF 進(jìn)行分析和數(shù)據(jù)科學(xué)的常見數(shù)據(jù)準(zhǔn)備任務(wù)。

在典型的數(shù)據(jù)分析工作流程中,速度高達(dá) 40 倍,加速的數(shù)據(jù)分析為您節(jié)省了時(shí)間,并增加了可能受到當(dāng)前分析工具限制的迭代機(jī)會。

為了解釋加速數(shù)據(jù)分析的價(jià)值,我們在本文中使用 RAPIDS cuDF 進(jìn)行了一個(gè)簡單的探索性數(shù)據(jù)分析( EDA教程。

如果您現(xiàn)在使用 Spark 3.0 來處理大型數(shù)據(jù)集,請參閱 RAPIDS accelerator for Spark 。如果您現(xiàn)在已經(jīng)準(zhǔn)備好開始使用 RAPIDS ,請參閱 Step-by-Step Guide to Building a Machine Learning Application with RAPIDS 。

為什么 RAPIDS cuDF 適用于 EDA ?

如今,大多數(shù)數(shù)據(jù)科學(xué)家使用 pandas ,這是在 Python 之上構(gòu)建的 popular 開源軟件庫,專門用于 EDA 任務(wù)的數(shù)據(jù)操作和分析。它的 flexible and expressive data structures 旨在使處理關(guān)系數(shù)據(jù)或標(biāo)記數(shù)據(jù)變得簡單直觀,尤其是對于 EDA 等開放式工作流。

然而, pandas 被設(shè)計(jì)為在單核上運(yùn)行,當(dāng)數(shù)據(jù)大小達(dá)到 1-2GB 時(shí),速度會開始減慢,這限制了它的適用性。如果數(shù)據(jù)大小超過 10-20 GB 的范圍,則應(yīng)考慮使用 Dask 和 Apache Spark 等分布式計(jì)算工具。缺點(diǎn)是它們需要重寫代碼,這可能會成為采用的障礙。

對于 2-10 GB 的中間值, RAPIDS cuDF 是 Goldilocks 的解決方案。

RAPIDS cuDF 將計(jì)算并行到 GPU 中的多個(gè)核心,并抽象為類似 pandas 的API。 cuDF 的功能模仿了 pandas 中許多最流行和標(biāo)準(zhǔn)的操作,[ZBK9的運(yùn)行方式與[ZBK5類似,但速度更快。將 RAPIDS 視為當(dāng)前 pandas 工作負(fù)載的渦輪增壓按鈕。

帶有 RAPIDS cuDF 的 EDA

這篇文章展示了 cuDF 在采用 EDA 方法時(shí)是多么容易。

根據(jù)本文所述的操作,與 pandas 相比,我們觀察到使用 cuDF 時(shí)的操作速度提高了 15 倍。這種適度的收益可以幫助您在處理多個(gè)項(xiàng)目時(shí)節(jié)省時(shí)間。

有關(guān)進(jìn)行時(shí)間序列分析的更多信息,請參閱 Exploratory Data Analysis Using cuDF GitHub 存儲庫中的完整筆記本 Exploratory Data Analysis Using cuDF 和 RAPIDS 。在整個(gè)工作流程中,觀察到的加速速度增加到了 15 倍。

數(shù)據(jù)集

Meteonet 是一個(gè)天氣數(shù)據(jù)集,匯集了 2016-2018 年巴黎各地氣象站的讀數(shù)。這是一個(gè)真實(shí)的數(shù)據(jù)集,有缺失和無效的數(shù)據(jù)。

分析方法

對于這篇文章,假設(shè)你是一名數(shù)據(jù)科學(xué)家,閱讀這些匯總數(shù)據(jù)并評估其質(zhì)量。用例是開放式的;這些讀數(shù)可以用于報(bào)告、天氣預(yù)報(bào)或土木工程用例。

通過以下步驟構(gòu)建您的分析以將數(shù)據(jù)置于情境中:

了解變量。

識別數(shù)據(jù)集中的差距。

分析變量之間的關(guān)系。

步驟 1. 了解變量

首先,導(dǎo)入 cuDF 庫并讀取數(shù)據(jù)集。要下載并創(chuàng)建 NW.csv ,其中包含西北站 2016 年、 2017 年和 2018 年的數(shù)據(jù),請參閱 Exploratory Data Analysis Using cuDF 筆記本。

# Import cuDF and CuPy
import cudf
import cupy as cp

# Read in the data files into DataFrame placeholders
gdf_2016 = cudf.read_csv('./NW.csv')

查看數(shù)據(jù)集并了解您正在使用的變量。這有助于您了解 DataFrame 中數(shù)據(jù)的維度和類型。整個(gè)語法與 pandas 有相似之處。

使用. info 命令查看整個(gè) DataFrame 結(jié)構(gòu),該命令與 pandas 中的命令相同:

GS_cudf.info()

RangeIndex: 22034571 entries, 0 to 22034570
Data columns (total 12 columns):
 #   Column      Dtype
---  ------      -----
 0   number_sta  int64
 1   lat         float64
 2   lon         float64
 3   height_sta  float64
 4   date        datetime64[ns]
 5   dd          float64
 6   ff          float64
 7   precip      float64
 8   hu          float64
 9   td          float64
 10  t           float64
        object
dtypes: datetime64[ns](1), float64(9), int64(1), object(1)
memory usage: 6.5+ GB

從輸出中,觀察到了 12 個(gè)變量,您可以看到它們的標(biāo)題。

要進(jìn)一步了解數(shù)據(jù),請確定 DataFrame 的整體形狀:逐行逐列。

# Checking the DataFrame dimensions. Millions of rows by 12 columns.
GS_cudf.shape
(65826837, 12)

在這一點(diǎn)上,數(shù)據(jù)集的維度是已知的,但每個(gè)變量的數(shù)據(jù)范圍是未知的。由于有 65826837 行,您無法一次可視化整個(gè)數(shù)據(jù)集。

相反,查看 DataFrame 的前五行,以檢查耗材樣本中的變量輸入:

# Display the first five rows of the DataFrame to examine details
GS_cudf.head()

number_sta lat lon height_sta date dd ff precip hu td t psl
0 14066001 49.33 -0.43 2.0 2016-01-01 210.0 4.4 0.0 91.0 278.45 279.85
1 14126001 49.15 0.04 125.0 2016-01-01 0.0 99.0 278.35 278.45
2 14137001 49.18 -0.46 67.0 2016-01-01 220.0 0.6 0.0 92.0 276.45 277.65 102360.0
3 14216001 48.93 -0.15 155.0 2016-01-01 220.0 1.9 0.0 95.0 278.25 278.95
4 14296001 48.80 -1.03 339.0 2016-01-01 0.0 278.35

表 1 。輸出結(jié)果

現(xiàn)在,您可以了解每一行包含的內(nèi)容。有多少數(shù)據(jù)來源?看看收集所有這些數(shù)據(jù)的臺站數(shù)量:

# How many weather stations are covered in this dataset? 
# Call nunique() to count the distinct elements along a specified axis.

number_stations = GS_cudf['number_sta'].nunique()
print("The full dataset is composed of {} unique weather stations.".format(GS_cudf['number_sta'].nunique()))

完整的數(shù)據(jù)集由 287 個(gè)獨(dú)特的氣象站組成。這些電臺多久更新一次數(shù)據(jù)?

## Investigate the frequency of one specific station's data
## date column is datetime dtype, and the diff() function calculates the delta time 
## TimedeltaProperties.seconds can help get the delta seconds between each record, divide by 60 seconds to see the minutes difference.
delta_mins = GS_cudf['date'].diff().dt.seconds.max()/60
print(f"The data is recorded every {delta_mins} minutes")

每 6.0 分鐘記錄一次數(shù)據(jù)。氣象站每小時(shí)產(chǎn)生 10 個(gè)記錄。

現(xiàn)在,您了解了以下數(shù)據(jù)特征:

數(shù)據(jù)類型

數(shù)據(jù)集的維度

獲取數(shù)據(jù)集的來源數(shù)量

數(shù)據(jù)集更新頻率

然而,您仍然必須探究這些數(shù)據(jù)是否存在重大缺口,無論是數(shù)據(jù)輸入缺失還是無效。這些問題會影響這些數(shù)據(jù)是否可以單獨(dú)用作可靠的來源。

步驟 2. 確定差距

這些氣象站有多個(gè)傳感器。任何一個(gè)傳感器都可能在一年中出現(xiàn)故障或提供不可靠的讀數(shù)。一些缺失的數(shù)據(jù)是可以接受的,但如果監(jiān)測站過于頻繁地關(guān)閉,這些數(shù)據(jù)可能會歪曲全年的真實(shí)情況。

要了解此數(shù)據(jù)源的可靠性,請分析數(shù)據(jù)丟失率和無效輸入的數(shù)量。

要評估數(shù)據(jù)丟失率,請將讀數(shù)數(shù)量與預(yù)期讀數(shù)數(shù)量進(jìn)行比較。

數(shù)據(jù)集包括 271 個(gè)獨(dú)特的站點(diǎn),每小時(shí)輸入 10 條記錄(每 6 分鐘輸入一條)。假設(shè)傳感器沒有停機(jī)時(shí)間,預(yù)計(jì)記錄的數(shù)據(jù)條目數(shù)量為 271 x 10 x 24 x 365 = 23739600 。但是,正如前面從. shape 操作中觀察到的那樣,您只有 22034571 行數(shù)據(jù)。

# Theoretical number of records is... 
theoretical_nb_records = number_stations * (60 / delta_mins) * 365 * 24 
actual_nb_of_rows = GS_cudf.shape[0]
missing_record_ratio = 1 - (actual_nb_of_rows/theoretical_nb_records)
print("Percentage of missing records of the NW dataset is: {:.1f}%".format(missing_record_ratio * 100))
print("Theoretical total number of values in dataset is: {:d}".format(int(theoretical_nb_records)))

Percentage of missing records of the NW dataset is: 12.7%

當(dāng)對全年進(jìn)行上下文分析時(shí), 12.7% 表示每年約有 19.8 周的數(shù)據(jù)缺失。

你知道,在 36 個(gè)月中,大約有 5 個(gè)月的數(shù)據(jù)根本沒有被記錄下來。對于其他數(shù)據(jù)點(diǎn),您有一些缺失的數(shù)據(jù),其中記錄了一些變量,但沒有記錄其他變量。您在查看數(shù)據(jù)集的前五行時(shí)看到了這一點(diǎn),其中包含 NA 。

要了解你有多少 NA 數(shù)據(jù),首先要確定哪些變量有 NA 讀數(shù)。評估每個(gè)類別有多少無效讀數(shù)。在這部分分析中,將數(shù)據(jù)集縮減為僅考慮 2018 年的數(shù)據(jù)。

# Finding which items have NA value(s) during year 2018
NA_sum = GS_cudf[GS_cudf['date'].dt.year==2018].isna().sum()
NA_data = NA_sum[NA_sum>0]
NA_data.index

StringIndex(['dd' 'ff' 'precip' 'hu' 'td' 't' 'psl'], dtype='object')
NA_data
dd         8605703
ff         8598613
precip     1279127
hu         8783452
td         8786154
t          2893694
psl       17621180
dtype: int64

您可以看到 PSL (海平面壓力)的缺失讀數(shù)數(shù)量最多。大約 80% 的總讀數(shù)沒有被記錄。在低端,降水有約 6% 的無效讀數(shù),這表明傳感器是穩(wěn)健的。

這兩個(gè)指標(biāo)有助于您了解數(shù)據(jù)集中存在的差距以及在分析過程中需要依賴哪些參數(shù)。有關(guān)數(shù)據(jù)有效性每月變化的綜合分析,請參閱筆記本。

現(xiàn)在你已經(jīng)很好地掌握了數(shù)據(jù)的樣子及其差距,你可以看看可能影響統(tǒng)計(jì)分析的變量之間的關(guān)系。

步驟 3. 分析變量之間的關(guān)系

所有 ML 應(yīng)用程序都依賴于統(tǒng)計(jì)建模以及許多分析應(yīng)用程序。對于任何用例,都要注意高度相關(guān)的變量,因?yàn)樗鼈兛赡軙でY(jié)果。

對于這篇文章來說,分析氣象類別的讀數(shù)是最相關(guān)的。為整個(gè) 3 年數(shù)據(jù)集生成一個(gè)相關(guān)矩陣,以評估需要注意的任何依賴關(guān)系。

# Only analyze meteorological columns
Meteo_series = ['dd', 'ff', 'precip' ,'hu', 'td', 't', 'psl']
Meteo_df = cudf.DataFrame(GS_cudf,columns=Meteo_series)
Meteo_corr = Meteo_df.dropna().corr()

# Check the items with correlation value > 0.7 
Meteo_corr[Meteo_corr>0.7]

dd ff precip hu td t psl
dd 1.0
ff 1.0
precip 1.0
hu 1.0
td 1.0 0.840558357
t 0.840558357 1.0
psl

表 2 。輸出結(jié)果

在矩陣中,td(露點(diǎn))和t(溫度)之間存在顯著的相關(guān)性。如果您正在使用任何假設(shè)變量是獨(dú)立的未來算法,如 linear regression ,請考慮這一點(diǎn)。你可以回到無效數(shù)據(jù)分析,看看其中一個(gè)是否比另一個(gè)有更多的缺失讀數(shù)作為選擇的指標(biāo)。

經(jīng)過基本的探索,您現(xiàn)在了解了數(shù)據(jù)的維度和變量,并查看了變量相關(guān)矩陣。還有更多的 EDA 技術(shù),但本文中的方法是通用的,有一組任何數(shù)據(jù)科學(xué)家都熟悉的典型起點(diǎn)。正如您在整個(gè)教程中看到的那樣, cuDF 與 pandas 語法幾乎相同。

EDA 基準(zhǔn) RAPIDS cuDF

如前所述,這篇文章是完整筆記本中完整工作流程的簡化演練。在這篇文章中,我們觀察到了 9.55 倍的加速。這些結(jié)果是在 NVIDIA A6000 GPU 上實(shí)現(xiàn)的。

performance-comparison-pandas-cudf-1-625x386.png 圖 1 ??碧綌?shù)據(jù)分析的基準(zhǔn)結(jié)果 秒

表 3 顯示了一個(gè)性能比較,包括本帖和完整筆記本的結(jié)果。

Full Notebook (15x speed-up) Pandas on CPU (Intel Core i7-7800X CPU) user 1 min 15 sec
sys: 14.3 sec
total: 1 min 30 sec
RAPIDS cuDF on NVIDIA A6000 user 3.92 sec
sys: 2.03 sec
total: 5.95 sec

表 3 。在 NVIDIA RTX A6000 GPU 上使用 RAPID cuDF 執(zhí)行的 EDA 實(shí)現(xiàn)了 15 倍的加速

主要收獲

來自真實(shí)來源的真實(shí)數(shù)據(jù)存在差距、信息缺失和相關(guān)性,在對其進(jìn)行建模以發(fā)展見解之前,必須解決這些問題。

通過觀察到的 15 倍的加速,您可以推斷出為更長、更復(fù)雜的工作負(fù)載節(jié)省的時(shí)間。如果運(yùn)行 EDA 步驟需要 1 小時(shí),那么您可以在 4 分鐘內(nèi)完成這項(xiàng)工作。這讓您有 56 分鐘的時(shí)間來解決數(shù)據(jù)中不可預(yù)見的問題,完成數(shù)據(jù)處理,向該集合中再添加一年的數(shù)據(jù)以最大限度地減少差距,并開始設(shè)計(jì)數(shù)據(jù)集以適應(yīng)您的用例。最棒的是,你可以重新控制自己的時(shí)間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4856

    瀏覽量

    102713
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29824

    瀏覽量

    268116
  • 數(shù)據(jù)分析
    +關(guān)注

    關(guān)注

    2

    文章

    1413

    瀏覽量

    33987
收藏 人收藏

    評論

    相關(guān)推薦

    何在開發(fā)環(huán)境中的Python環(huán)境下使用我們提供的BM-OpenCV?

    何在開發(fā)環(huán)境中的Python環(huán)境下使用我們提供的BM-OpenCV?
    發(fā)表于 09-19 07:14

    影創(chuàng)科技借助MR超強(qiáng)的表現(xiàn)力 為教育行業(yè)打造了極具科幻感的體驗(yàn)

    世界領(lǐng)先的混合現(xiàn)實(shí)(MR)公司——影創(chuàng)科技宣布,公司通過聚焦MR+教育細(xì)分領(lǐng)域,借助MR超強(qiáng)的表現(xiàn)力,為教育行業(yè)打造了極具科幻感的MR全息教學(xué)體驗(yàn)。目前公司在教育領(lǐng)域迅猛發(fā)展,其MR產(chǎn)品和技術(shù)已進(jìn)入
    發(fā)表于 01-08 15:38 ?875次閱讀

    python提供的68個(gè)內(nèi)置函數(shù)詳解

    ? 內(nèi)置函數(shù)就是Python給你提供的,拿來直接用的函數(shù),比如print.,input等。 截止到python版本3.6.2 ,
    的頭像 發(fā)表于 10-27 09:14 ?2154次閱讀

    進(jìn)階必備的68個(gè)Python 內(nèi)置函數(shù)分析

    來源: pypypypy 內(nèi)置函數(shù)就是Python給你提供的,拿來直接用的函數(shù),比如print.,input等。 截止到python版本3.
    的頭像 發(fā)表于 11-01 10:18 ?3989次閱讀

    何在python代碼中使用HTTP代理IP

    何在python代碼中使用HTTP代理IP。
    的頭像 發(fā)表于 08-04 15:46 ?1243次閱讀

    如何使用OpenCV和Python從圖像中提取感興趣區(qū)域

    今天我們將一起探究如何使用OpenCV和Python從圖像中提取感興趣區(qū)域(ROI)。 在之間的文章中,我們完成了圖像邊緣提取,例如從臺球桌中提取桌邊。使用了簡單的OpenCV函數(shù)
    的頭像 發(fā)表于 02-07 14:42 ?1745次閱讀

    Python入門之什么是函數(shù)

    Python函數(shù)比我們想象的更為靈活。由于Python函數(shù)是對象,所以函數(shù)對象可以賦值給其他的名字、傳遞給其他
    的頭像 發(fā)表于 02-21 14:24 ?478次閱讀

    Python支持遞歸函數(shù)

    Python支持遞歸函數(shù)——即直接或間接地調(diào)用自身以進(jìn)行循環(huán)的函數(shù)。遞歸是頗為高級的話題,并且它在Python中相對少見。然而,它是一項(xiàng)應(yīng)該了解的有用的技術(shù),因?yàn)樗试S程序遍歷擁有任意
    的頭像 發(fā)表于 02-21 14:28 ?615次閱讀

    為什么Python沒有main函數(shù)

    今天的文章中,我們來討論一下為什么有的編程語言有main函數(shù),而Python為什么沒有main函數(shù)。
    發(fā)表于 08-17 11:47 ?300次閱讀

    python如何定義一個(gè)函數(shù)

    一、Python3 函數(shù) 函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。 函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道
    的頭像 發(fā)表于 11-14 11:26 ?671次閱讀

    sort函數(shù)python用法

    sort()函數(shù)Python中的內(nèi)置函數(shù)之一,用于對可迭代對象進(jìn)行排序??傻鷮ο蟀斜?、元組和字符串等。sort()函數(shù)是一個(gè)靈活而強(qiáng)大的函數(shù)
    的頭像 發(fā)表于 11-21 15:15 ?1191次閱讀

    python調(diào)用math函數(shù)的方法

    Python編程中,數(shù)學(xué)函數(shù)是非常重要的工具,我們可以使用它們進(jìn)行各種數(shù)值計(jì)算、幾何運(yùn)算和統(tǒng)計(jì)分析等操作。Python的標(biāo)準(zhǔn)庫中內(nèi)置了很多數(shù)學(xué)函數(shù),而其中最基本和常用的數(shù)學(xué)
    的頭像 發(fā)表于 11-22 11:01 ?2686次閱讀

    不屬于python的內(nèi)置函數(shù)

    Python是一種高級編程語言,它提供了許多內(nèi)置函數(shù),可以幫助開發(fā)人員更輕松地處理各種任務(wù)。但是,在Python中并非所有的函數(shù)都是內(nèi)置
    的頭像 發(fā)表于 11-29 14:27 ?1346次閱讀

    LED貼膜屏的亮度、對比度和色彩表現(xiàn)力怎么樣?

    LED貼膜屏的亮度、對比度和色彩表現(xiàn)力怎么樣? LED貼膜屏作為一種新型的顯示技術(shù),具有許多優(yōu)勢,其中包括亮度、對比度和色彩表現(xiàn)力。 首先,LED貼膜屏的亮度非常高,這意味著它可以在各種光線
    的頭像 發(fā)表于 12-11 13:43 ?610次閱讀

    Python常用函數(shù)大全

    Python 世界里,有一些寶藏函數(shù)和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認(rèn)識這些神器,讓你的開發(fā)生活瞬間輕松不少!
    的頭像 發(fā)表于 10-27 17:20 ?144次閱讀