91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何在Colab中使用SQL

智能感知與物聯(lián)網(wǎng)技術(shù)研究所 ? 來源:Towards Data Science ? 作者:Marie Stephen Leo ? 2021-10-12 09:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如今,編碼測試在數(shù)據(jù)科學(xué)面試過程中幾乎是標(biāo)準(zhǔn)的。

作為一名數(shù)據(jù)科學(xué)招聘經(jīng)理,我發(fā)現(xiàn)一個20-30分鐘的現(xiàn)場編碼測試和一些準(zhǔn)備好的任務(wù)能夠有效地識別那些能夠勝任職位的候選人。

Google Colab[https://colab.research.google.com/notebooks/intro.ipynb?utm_source=scs-index]是各種離線和實(shí)時數(shù)據(jù)科學(xué)編碼的優(yōu)秀工具,因?yàn)樗煜さ墓P記本環(huán)境和并且方便共享。但是Colab幾乎只限于Python(還有一些黑客攻擊)。

根據(jù)我個人的經(jīng)驗(yàn),SQL是成為一名成功的數(shù)據(jù)科學(xué)家的關(guān)鍵技能。深度學(xué)習(xí)是很好的,但是如果你不能編寫SQL查詢,你可能永遠(yuǎn)都會被你的貓對狗分類器所困擾。

因此,我開始尋找進(jìn)行實(shí)時SQL編碼測試的方法,瞧!我偶然發(fā)現(xiàn)了這種在Colab(或任何Python環(huán)境)中運(yùn)行SQL的簡單方法,實(shí)際上只有2個helper函數(shù)。

在本文中,我將介紹兩個Python函數(shù),我們可以使用它們在Google Colab中設(shè)置和運(yùn)行SQL,具體如下:

在Google Colab中創(chuàng)建一個數(shù)據(jù)庫并將數(shù)據(jù)幀上傳到該數(shù)據(jù)庫中的一個表中

在GoogleColab中對該數(shù)據(jù)庫和表編寫和執(zhí)行SQL查詢。

所有代碼都可以在我的Github帳戶上找到。你也可以直接在谷歌Colab上打開代碼, 單擊此鏈接:

https://colab.research.google.com/github/stephenleo/medium-python-hacks/blob/main/02_sql_on_colab/main.ipynb

SQLite

失敗是成功之母

在這次搜索之前,我只隱約聽說過SQLite,但從未需要深入研究它。

SQLite…實(shí)現(xiàn)了一個小型、快速、自包含、高可靠性、功能齊全的SQL數(shù)據(jù)庫引擎。

SQLite是世界上使用最多的數(shù)據(jù)庫引擎。SQLite內(nèi)置于所有手機(jī)和大多數(shù)計(jì)算機(jī)中,并捆綁在人們每天使用的應(yīng)用程序中。

聽起來很有希望!SQLite的工作原理是創(chuàng)建一個本地的.db文件,我們可以像普通的SQL數(shù)據(jù)庫一樣連接到該文件。然后我們可以在這個.db文件上創(chuàng)建表、上傳數(shù)據(jù)和查詢數(shù)據(jù)。

另外,用于創(chuàng)建SQLite并與之交互的Python模塊(sqlite3)也是Python標(biāo)準(zhǔn)庫的一部分。所以它在Colab上是開箱即用的。

首先,讓我們導(dǎo)入sqlite3和pandas模塊,它們是我們?nèi)蝿?wù)的唯一需求

importsqlite3
importpandasaspd

函數(shù)1:將Dataframe轉(zhuǎn)換為SQL DB表

我們的第一個任務(wù)是創(chuàng)建一個數(shù)據(jù)庫,并將一個數(shù)據(jù)幀上傳到該數(shù)據(jù)庫中的一個表中。

下面的代碼將其作為一個函數(shù)實(shí)現(xiàn),我將逐步介紹。該函數(shù)將輸入數(shù)據(jù)幀、表名稱和數(shù)據(jù)庫名稱(.db)作為輸入,并運(yùn)行以下步驟。

  1. 設(shè)置一些日志以跟蹤函數(shù)的執(zhí)行

  2. 查找數(shù)據(jù)框中的所有列。這是必要的,因?yàn)槲覀冃枰趧?chuàng)建表和將數(shù)據(jù)上載到表時提供此信息。

  3. 連接到.db文件(如果存在)。如果文件不存在,請?jiān)诒镜赜?jì)算機(jī)上創(chuàng)建新文件。

  4. 在.db文件中創(chuàng)建一個表,我們在上一步中連接到該表(或剛剛創(chuàng)建)

  5. 將 input_df 中的數(shù)據(jù)行上傳到我們在上一步中剛剛創(chuàng)建的表中

  6. 提交更改并關(guān)閉與數(shù)據(jù)庫的連接

defpd_to_sqlDB(input_df:pd.DataFrame,
table_name:str,
db_name:str='default.db')
->None:


'''
取一個數(shù)據(jù)幀'input_df'并將其上傳到'table_name'SQLITE表
Args:
input_df(pd.DataFrame):包含要上傳到SQLITE的數(shù)據(jù)的數(shù)據(jù)幀
table_name(str):要上傳的SQLITE表的名稱
db_name (str, optional):創(chuàng)建表的SQLITE數(shù)據(jù)庫的名稱。
默認(rèn)為“default.db”
'''


#步驟1:設(shè)置本地日志
importlogging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s%(levelname)s:%(message)s',
datefmt='%Y-%m-%d%H:%M:%S')

#步驟2:在數(shù)據(jù)幀中查找列
cols=input_df.columns
cols_string=','.join(cols)
val_wildcard_string=','.join(['?']*len(cols))

#步驟3:如果DB文件存在,連接到它,否則創(chuàng)建一個新文件
con=sqlite3.connect(db_name)
cur=con.cursor()
logging.info(f'SQLDB{db_name}created')

#步驟4:創(chuàng)建表
sql_string=f"""CREATETABLE{table_name}({cols_string});"""
cur.execute(sql_string)
logging.info(f'SQLTable{table_name}createdwith{len(cols)}columns')

#步驟5:上傳數(shù)據(jù)幀
rows_to_upload=input_df.to_dict(orient='split')['data']
sql_string=f"""INSERTINTO{table_name}({cols_string})VALUES({val_wildcard_string});"""
cur.executemany(sql_string,rows_to_upload)
logging.info(f'{len(rows_to_upload)}rowsuploadedto{table_name}')

#步驟6:提交更改并關(guān)閉連接
con.commit()
con.close()

函數(shù)2:對數(shù)據(jù)幀的SQL查詢

我們的第二個任務(wù)是在第一個任務(wù)中創(chuàng)建的數(shù)據(jù)庫和表上編寫和執(zhí)行SQL查詢。

下面的代碼將其作為另一個函數(shù)實(shí)現(xiàn),我也將逐步介紹。該函數(shù)將sql_query_string和db_name(.db file)作為輸入,運(yùn)行以下步驟,并返回一個dataframe作為輸出。

  1. 連接到.DB文件中的SQL DB

  2. 在SQL查詢字符串中執(zhí)行SQL查詢

  3. 運(yùn)行SQL查詢后獲取結(jié)果數(shù)據(jù)和輸出的列名

  4. 關(guān)閉與數(shù)據(jù)庫的連接

  5. 將結(jié)果作為數(shù)據(jù)幀返回

defsql_query_to_pd(sql_query_string:str,db_name:str='default.db')->pd.DataFrame:
'''執(zhí)行一個SQL查詢,并以數(shù)據(jù)幀的形式返回結(jié)果
Args:
sql_query_string(str):要執(zhí)行的SQL查詢字符串
db_name(str,optional)::要執(zhí)行查詢的SQLITE數(shù)據(jù)庫的名稱
默認(rèn)為“default.db”
Returns:
pd.DataFrame:數(shù)據(jù)幀中SQL查詢的結(jié)果
'''

#步驟1:連接SQL數(shù)據(jù)庫
con=sqlite3.connect(db_name)

#步驟2:執(zhí)行SQL查詢
cursor=con.execute(sql_query_string)

#步驟3:獲取數(shù)據(jù)和列名
result_data=cursor.fetchall()
cols=[description[0]fordescriptionincursor.description]

#步驟4:關(guān)閉連接
con.close()

#步驟5:返回?cái)?shù)據(jù)幀
returnpd.DataFrame(result_data,columns=cols)

差不多就是這樣!我們現(xiàn)在有兩個函數(shù),可以粘貼到任何Colab筆記本中,以解決我們的兩個任務(wù)。讓我們通過一個例子來看看如何使用這兩個函數(shù)

使用這兩個函數(shù)在Colab中運(yùn)行SQL

由于新冠病毒基本上是我們這些天談?wù)摰奈ㄒ辉掝},我從Kaggle下載了一個新冠病毒疫苗樣本數(shù)據(jù)集,以測試我們的兩個函數(shù)函數(shù)的使用非常簡單,如下所示

  1. 將下載的csv文件加載到數(shù)據(jù)幀中

  2. 使用我們的第一個函數(shù)pd_to_sqlDB函數(shù)將我們在上一步中加載的數(shù)據(jù)幀上載到名為default.DB的數(shù)據(jù)庫中名為 country_vaccination 的表中

  3. 在名為 sql_query_string 的字符串變量中編寫SQL查詢。正如你在下面的代碼片段中所看到的,我們可以編寫任何可以想到的復(fù)雜SQL查詢。

  4. 使用第二個函數(shù)sql_query_to_pd在default.db上執(zhí)行上一步的sql查詢,并將結(jié)果保存在result_df數(shù)據(jù)框中

#步驟1:讀取csv文件到一個數(shù)據(jù)幀
#數(shù)據(jù)集來自https://www.kaggle.com/gpreda/covid-world-vaccination-progress
input_df=pd.read_csv('country_vaccinations.csv')

#步驟2:上傳數(shù)據(jù)幀到SQL表
pd_to_sqlDB(input_df,
table_name='country_vaccinations',
db_name='default.db')

#步驟3:在字符串變量中寫入SQL查詢
sql_query_string="""
SELECTcountry,SUM(daily_vaccinations)astotal_vaccinated
FROMcountry_vaccinations
WHEREdaily_vaccinationsISNOTNULL
GROUPBYcountry
ORDERBYtotal_vaccinatedDESC
"""


#步驟4:執(zhí)行SQL查詢
result_df=sql_query_to_pd(sql_query_string,db_name='default.db')
result_df

d456ab56-2ab5-11ec-82a8-dac502259ad0.png

從結(jié)果中,我們可以看到(在撰寫本文時),中國的接種人數(shù)居世界首位,其次是印度和美國。我們通過在GoogleColab中對DB執(zhí)行SQL查詢得到了這些結(jié)果!

給你?,F(xiàn)在,你可以在下次面試中展示你卓越的Python和SQL知識了!

另外,節(jié)省一些時間,直接使用我在本文開頭鏈接的GoogleColab筆記本,它包含上述函數(shù)和示例查詢。

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

    關(guān)注

    1

    文章

    789

    瀏覽量

    46703
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67524
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73992
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4876

    瀏覽量

    90058

原文標(biāo)題:在Colab中使用SQL

文章出處:【微信號:tyutcsplab,微信公眾號:智能感知與物聯(lián)網(wǎng)技術(shù)研究所】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用NVIDIA Nemotron RAG和Microsoft SQL Server 2025構(gòu)建高性能AI應(yīng)用

    在 Microsoft Ignite 2025 大會上,隨著 Microsoft SQL Server 2025 的發(fā)布,AI 就緒型企業(yè)數(shù)據(jù)庫愿景成為現(xiàn)實(shí),為開發(fā)者提供強(qiáng)大的新工具,例如內(nèi)置向量
    的頭像 發(fā)表于 12-01 09:31 ?808次閱讀
    使用NVIDIA Nemotron RAG和Microsoft <b class='flag-5'>SQL</b> Server 2025構(gòu)建高性能AI應(yīng)用

    何在AMD Vitis Unified IDE中使用系統(tǒng)設(shè)備樹

    您將在這篇博客中了解系統(tǒng)設(shè)備樹 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 維護(hù)來自 XSA 的硬件元數(shù)據(jù)。本文還講述了如何對 SDT 進(jìn)行操作,以便在 Vitis Unified IDE 中實(shí)現(xiàn)更靈活的使用場景。
    的頭像 發(fā)表于 11-18 11:13 ?3123次閱讀
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系統(tǒng)設(shè)備樹

    何在VS code中配置Zephyr集成開發(fā)環(huán)境

    上一篇文章介紹了如何在VS code中使用瑞薩官方插件為RA芯片創(chuàng)建項(xiàng)目與項(xiàng)目調(diào)試,相信大家對RA在VS code中的開發(fā)有了基礎(chǔ)的了解。
    的頭像 發(fā)表于 11-05 14:46 ?1516次閱讀
    如<b class='flag-5'>何在</b>VS code中配置Zephyr集成開發(fā)環(huán)境

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中導(dǎo)入模型后,需要設(shè)置其輸入和輸出接口以與您的設(shè)計(jì)進(jìn)行適配。 1. 在Vivado HLS項(xiàng)目中導(dǎo)入模型文件 可以
    發(fā)表于 10-22 06:29

    何在資源受限型應(yīng)用中使用 FPGA

    作者:Kenton Williston 投稿人:DigiKey 北美編輯 資源受限的嵌入式系統(tǒng)對可配置邏輯的需求與日俱增。邊緣 AI、機(jī)器視覺和工業(yè)自動化等應(yīng)用需要靈活的應(yīng)用特定邏輯,以滿足不斷變化的性能需求,同時在嚴(yán)格的功耗、尺寸和成本限制內(nèi)運(yùn)行?,F(xiàn)代現(xiàn)場可編程門陣列 (FPGA) 可以滿足這些相互競爭的需求。 本文回顧了為資源受限型應(yīng)用選擇 FPGA 時需要考慮的關(guān)鍵設(shè)計(jì)標(biāo)準(zhǔn)。然后,以 [Altera] 經(jīng)過[功率和成本優(yōu)化的 FPGA] 產(chǎn)品組合為例,說明不同產(chǎn)品線如何與應(yīng)
    的頭像 發(fā)表于 10-03 17:31 ?1957次閱讀
    如<b class='flag-5'>何在</b>資源受限型應(yīng)用<b class='flag-5'>中使</b>用 FPGA

    數(shù)據(jù)庫慢查詢分析與SQL優(yōu)化實(shí)戰(zhàn)技巧

    今天,我將分享我在處理數(shù)千次數(shù)據(jù)庫性能問題中積累的實(shí)戰(zhàn)經(jīng)驗(yàn),幫助你系統(tǒng)掌握慢查詢分析與SQL優(yōu)化的核心技巧。無論你是剛?cè)腴T的運(yùn)維新手,還是有一定經(jīng)驗(yàn)的工程師,這篇文章都將為你提供實(shí)用的解決方案。
    的頭像 發(fā)表于 09-08 09:34 ?987次閱讀

    請問如何在 Keil μVision 或 IAR EWARM 中使用觀察點(diǎn)進(jìn)行調(diào)試?

    何在 Keil μVision 或 IAR EWARM 中使用觀察點(diǎn)進(jìn)行調(diào)試?
    發(fā)表于 08-20 06:29

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫表中的每個列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?713次閱讀

    Text2SQL準(zhǔn)確率暴漲22.6%!3大維度全拆

    摘要 技術(shù)背景:Text2SQL 是將自然語言查詢轉(zhuǎn)為 SQL 的任務(wù),經(jīng)歷了基于規(guī)則、神經(jīng)網(wǎng)絡(luò)、預(yù)訓(xùn)練語言模型、大語言模型四個階段。當(dāng)前面臨提示優(yōu)化、模型訓(xùn)練、推理時增強(qiáng)三大難題,研究
    的頭像 發(fā)表于 08-14 11:17 ?708次閱讀
    Text2<b class='flag-5'>SQL</b>準(zhǔn)確率暴漲22.6%!3大維度全拆

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?676次閱讀
    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—<b class='flag-5'>SQL</b> Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    請問如何在C++中使用NPU上的模型緩存?

    無法確定如何在 C++ 中的 NPU 上使用模型緩存
    發(fā)表于 06-24 07:25

    達(dá)夢數(shù)據(jù)庫常用管理SQL命令詳解

    達(dá)夢數(shù)據(jù)庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?7188次閱讀
    達(dá)夢數(shù)據(jù)庫常用管理<b class='flag-5'>SQL</b>命令詳解

    大促數(shù)據(jù)庫壓力激增,如何一眼定位 SQL 執(zhí)行來源?

    你是否曾經(jīng)遇到過這樣的情況:在大促活動期間,用戶訪問量驟增,數(shù)據(jù)庫的壓力陡然加大,導(dǎo)致響應(yīng)變慢甚至服務(wù)中斷?更讓人頭疼的是,當(dāng)你試圖快速定位問題所在時,卻發(fā)現(xiàn)難以確定究竟是哪個業(yè)務(wù)邏輯中的 SQL
    的頭像 發(fā)表于 06-10 11:32 ?565次閱讀
    大促數(shù)據(jù)庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執(zhí)行來源?

    何在Ollama中使用OpenVINO后端

    Ollama 和 OpenVINO 的結(jié)合為大型語言模型(LLM)的管理和推理提供了強(qiáng)大的雙引擎驅(qū)動。Ollama 提供了極簡的模型管理工具鏈,而 OpenVINO 則通過 Intel 硬件(CPU/GPU/NPU)為模型推理提供了高效的加速能力。這種組合不僅簡化了模型的部署和調(diào)用流程,還顯著提升了推理性能,特別適合需要高性能和易用性的場景。
    的頭像 發(fā)表于 04-14 10:22 ?1543次閱讀

    LPC1227FBD48如何在沒有SDK的情況下配置FreeRTOS?

    我想在基于 LPC1227FBD48 系列的現(xiàn)有項(xiàng)目中使用 FreeRTOS,但我們沒有可用于控制器的 SDK。我們?nèi)?b class='flag-5'>何在沒有 SDK 的情況下配置 FreeRTOS。
    發(fā)表于 04-02 06:33