0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Colab中使用SQL

智能感知与物联网技术研究所 来源:Towards Data Science 作者:Marie Stephen Leo 2021-10-12 09:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如今,编码测试在数据科学面试过程中几乎是标准的。

作为一名数据科学招聘经理,我发现一个20-30分钟的现场编码测试和一些准备好的任务能够有效地识别那些能够胜任职位的候选人。

Google Colab[https://colab.research.google.com/notebooks/intro.ipynb?utm_source=scs-index]是各种离线和实时数据科学编码的优秀工具,因为它熟悉的笔记本环境和并且方便共享。但是Colab几乎只限于Python(还有一些黑客攻击)。

根据我个人的经验,SQL是成为一名成功的数据科学家的关键技能。深度学习是很好的,但是如果你不能编写SQL查询,你可能永远都会被你的猫对狗分类器所困扰。

因此,我开始寻找进行实时SQL编码测试的方法,瞧!我偶然发现了这种在Colab(或任何Python环境)中运行SQL的简单方法,实际上只有2个helper函数。

在本文中,我将介绍两个Python函数,我们可以使用它们在Google Colab中设置和运行SQL,具体如下:

在Google Colab中创建一个数据库并将数据帧上传到该数据库中的一个表中

在GoogleColab中对该数据库和表编写和执行SQL查询。

所有代码都可以在我的Github帐户上找到。你也可以直接在谷歌Colab上打开代码, 单击此链接:

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

SQLite

失败是成功之母

在这次搜索之前,我只隐约听说过SQLite,但从未需要深入研究它。

SQLite…实现了一个小型、快速、自包含、高可靠性、功能齐全的SQL数据库引擎。

SQLite是世界上使用最多的数据库引擎。SQLite内置于所有手机和大多数计算机中,并捆绑在人们每天使用的应用程序中。

听起来很有希望!SQLite的工作原理是创建一个本地的.db文件,我们可以像普通的SQL数据库一样连接到该文件。然后我们可以在这个.db文件上创建表、上传数据和查询数据。

另外,用于创建SQLite并与之交互的Python模块(sqlite3)也是Python标准库的一部分。所以它在Colab上是开箱即用的。

首先,让我们导入sqlite3和pandas模块,它们是我们任务的唯一需求

importsqlite3
importpandasaspd

函数1:将Dataframe转换为SQL DB表

我们的第一个任务是创建一个数据库,并将一个数据帧上传到该数据库中的一个表中。

下面的代码将其作为一个函数实现,我将逐步介绍。该函数将输入数据帧、表名称和数据库名称(.db)作为输入,并运行以下步骤。

  1. 设置一些日志以跟踪函数的执行

  2. 查找数据框中的所有列。这是必要的,因为我们需要在创建表和将数据上载到表时提供此信息。

  3. 连接到.db文件(如果存在)。如果文件不存在,请在本地计算机上创建新文件。

  4. 在.db文件中创建一个表,我们在上一步中连接到该表(或刚刚创建)

  5. 将 input_df 中的数据行上传到我们在上一步中刚刚创建的表中

  6. 提交更改并关闭与数据库的连接

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


'''
取一个数据帧'input_df'并将其上传到'table_name'SQLITE表
Args:
input_df(pd.DataFrame):包含要上传到SQLITE的数据的数据帧
table_name(str):要上传的SQLITE表的名称
db_name (str, optional):创建表的SQLITE数据库的名称。
默认为“default.db”
'''


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

#步骤2:在数据帧中查找列
cols=input_df.columns
cols_string=','.join(cols)
val_wildcard_string=','.join(['?']*len(cols))

#步骤3:如果DB文件存在,连接到它,否则创建一个新文件
con=sqlite3.connect(db_name)
cur=con.cursor()
logging.info(f'SQLDB{db_name}created')

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

#步骤5:上传数据帧
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:提交更改并关闭连接
con.commit()
con.close()

函数2:对数据帧的SQL查询

我们的第二个任务是在第一个任务中创建的数据库和表上编写和执行SQL查询。

下面的代码将其作为另一个函数实现,我也将逐步介绍。该函数将sql_query_string和db_name(.db file)作为输入,运行以下步骤,并返回一个dataframe作为输出。

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

  2. 在SQL查询字符串中执行SQL查询

  3. 运行SQL查询后获取结果数据和输出的列名

  4. 关闭与数据库的连接

  5. 将结果作为数据帧返回

defsql_query_to_pd(sql_query_string:str,db_name:str='default.db')->pd.DataFrame:
'''执行一个SQL查询,并以数据帧的形式返回结果
Args:
sql_query_string(str):要执行的SQL查询字符串
db_name(str,optional)::要执行查询的SQLITE数据库的名称
默认为“default.db”
Returns:
pd.DataFrame:数据帧中SQL查询的结果
'''

#步骤1:连接SQL数据库
con=sqlite3.connect(db_name)

#步骤2:执行SQL查询
cursor=con.execute(sql_query_string)

#步骤3:获取数据和列名
result_data=cursor.fetchall()
cols=[description[0]fordescriptionincursor.description]

#步骤4:关闭连接
con.close()

#步骤5:返回数据帧
returnpd.DataFrame(result_data,columns=cols)

差不多就是这样!我们现在有两个函数,可以粘贴到任何Colab笔记本中,以解决我们的两个任务。让我们通过一个例子来看看如何使用这两个函数

使用这两个函数在Colab中运行SQL

由于新冠病毒基本上是我们这些天谈论的唯一话题,我从Kaggle下载了一个新冠病毒疫苗样本数据集,以测试我们的两个函数函数的使用非常简单,如下所示

  1. 将下载的csv文件加载到数据帧中

  2. 使用我们的第一个函数pd_to_sqlDB函数将我们在上一步中加载的数据帧上载到名为default.DB的数据库中名为 country_vaccination 的表中

  3. 在名为 sql_query_string 的字符串变量中编写SQL查询。正如你在下面的代码片段中所看到的,我们可以编写任何可以想到的复杂SQL查询。

  4. 使用第二个函数sql_query_to_pd在default.db上执行上一步的sql查询,并将结果保存在result_df数据框中

#步骤1:读取csv文件到一个数据帧
#数据集来自https://www.kaggle.com/gpreda/covid-world-vaccination-progress
input_df=pd.read_csv('country_vaccinations.csv')

#步骤2:上传数据帧到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:执行SQL查询
result_df=sql_query_to_pd(sql_query_string,db_name='default.db')
result_df

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

从结果中,我们可以看到(在撰写本文时),中国的接种人数居世界首位,其次是印度和美国。我们通过在GoogleColab中对DB执行SQL查询得到了这些结果!

给你。现在,你可以在下次面试中展示你卓越的Python和SQL知识了!

另外,节省一些时间,直接使用我在本文开头链接的GoogleColab笔记本,它包含上述函数和示例查询。

编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    789

    浏览量

    46371
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66841
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73151
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89587

原文标题:在Colab中使用SQL

文章出处:【微信号:tyutcsplab,微信公众号:智能感知与物联网技术研究所】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在AMD Vitis Unified IDE中使用系统设备树

    您将在这篇博客中了解系统设备树 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在 Vitis Unified IDE 中实现更灵活的使用场景。
    的头像 发表于 11-18 11:13 2814次阅读
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系统设备树

    何在VS code中配置Zephyr集成开发环境

    上一篇文章介绍了如何在VS code中使用瑞萨官方插件为RA芯片创建项目与项目调试,相信大家对RA在VS code中的开发有了基础的了解。
    的头像 发表于 11-05 14:46 1078次阅读
    如<b class='flag-5'>何在</b>VS code中配置Zephyr集成开发环境

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中导入模型后,需要设置其输入和输出接口以与您的设计进行适配。 1. 在Vivado HLS项目中导入模型文件 可以
    发表于 10-22 06:29

    请问如何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?

    何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?
    发表于 08-20 06:29

    SQL 通用数据类型

    SQL 通用数据类型 数据库表中的每个列都要求有名称和数据类型。Each column in a database table is required to have a name and a
    的头像 发表于 08-18 09:46 576次阅读

    请问如何在C++中使用NPU上的模型缓存?

    无法确定如何在 C++ 中的 NPU 上使用模型缓存
    发表于 06-24 07:25

    达梦数据库常用管理SQL命令详解

    达梦数据库常用管理SQL命令详解
    的头像 发表于 06-17 15:12 6574次阅读
    达梦数据库常用管理<b class='flag-5'>SQL</b>命令详解

    如何一眼定位SQL的代码来源:一款SQL染色标记的简易MyBatis插件

    作者:京东物流 郭忠强 导语 本文分析了后端研发和运维在日常工作中所面临的线上SQL定位排查痛点,基于姓名贴的灵感,设计和开发了一款SQL染色标记的MyBatis插件。该插件轻量高效,对业务代码无
    的头像 发表于 03-05 11:36 735次阅读
    如何一眼定位<b class='flag-5'>SQL</b>的代码来源:一款<b class='flag-5'>SQL</b>染色标记的简易MyBatis插件

    在Google Colab笔记本电脑上导入OpenVINO™工具包2021中的 IEPlugin类出现报错,怎么解决?

    在 Google* Colab Notebook 上OpenVINO™工具包 2021 中使用了 IEPlugin 。 遇到: ImportError: cannot import name \'IEPlugin\' from \'openvino.inferenc
    发表于 03-05 10:31

    何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC)

    电子发烧友网站提供《如何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC).pdf》资料免费下载
    发表于 02-28 17:36 2次下载

    何在MATLAB中使用DeepSeek模型

    在 DeepSeek-R1(https://github.com/deepseek-ai/DeepSeek-R1) AI 模型横空出世后,人们几乎就立马开始询问如何在 MATLAB 中使用这些模型
    的头像 发表于 02-13 09:20 4063次阅读
    如<b class='flag-5'>何在</b>MATLAB<b class='flag-5'>中使</b>用DeepSeek模型

    Devart: dbForge Compare Bundle for SQL Server—比较SQL数据库最简单、最准确的方法

      dbForge Compare Bundle For SQL Server:包含两个工具,可帮助您节省用于手动数据库比较的 70% 的时间 dbForge数据比较 帮助检测和分析实时SQL数据库
    的头像 发表于 01-17 11:35 866次阅读

    dbForge Studio For SQL Server:用于有效开发的最佳SQL Server集成开发环境

    dbForge Studio For SQL Server:用于有效开发的最佳SQL Server集成开发环境 SQL编码助手 SQL代码分析 查询分析器 可视化查询生成器 数据和模式
    的头像 发表于 01-16 10:36 1082次阅读

    何在Windows中使用MTP协议

    、图片等)的通信协议,它被广泛用于Android设备。以下是如何在Windows中使用MTP协议的详细步骤: 1. 确保设备支持MTP 首先,你需要确认你的设备支持MTP协议。大多数现代Android
    的头像 发表于 01-03 10:26 4415次阅读

    通过Skyvia Connect SQL终端节点访问任何数据

    通过 Skyvia Connect SQL 终端节点访问任何数据   通过 Skyvia Connect SQL 终端节点访问任何数据ADO.NET 数据网关 使用 Skyvia Connect
    的头像 发表于 01-02 09:31 595次阅读
    通过Skyvia Connect <b class='flag-5'>SQL</b>终端节点访问任何数据