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

    文章

    762

    浏览量

    44117
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62576
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68539
  • python
    +关注

    关注

    56

    文章

    4793

    浏览量

    84634

原文标题:在Colab中使用SQL

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

收藏 人收藏

    评论

    相关推荐

    何在智能手机系统中使用bq27505

    电子发烧友网站提供《如何在智能手机系统中使用bq27505.pdf》资料免费下载
    发表于 10-17 10:21 0次下载
    如<b class='flag-5'>何在</b>智能手机系统<b class='flag-5'>中使</b>用bq27505

    何在RS-485网络中使用MSP430和MSP432 eUSCI和USCI模块

    电子发烧友网站提供《如何在RS-485网络中使用MSP430和MSP432 eUSCI和USCI模块.pdf》资料免费下载
    发表于 10-09 10:21 0次下载
    如<b class='flag-5'>何在</b>RS-485网络<b class='flag-5'>中使</b>用MSP430和MSP432 eUSCI和USCI模块

    何在MSP430™MCU中使用智能模拟组合

    电子发烧友网站提供《如何在MSP430™MCU中使用智能模拟组合.pdf》资料免费下载
    发表于 09-14 10:19 0次下载
    如<b class='flag-5'>何在</b>MSP430™MCU<b class='flag-5'>中使</b>用智能模拟组合

    何在反向降压-升压拓扑中使用TPS6290x

    电子发烧友网站提供《如何在反向降压-升压拓扑中使用TPS6290x.pdf》资料免费下载
    发表于 09-13 10:07 0次下载
    如<b class='flag-5'>何在</b>反向降压-升压拓扑<b class='flag-5'>中使</b>用TPS6290x

    何在汽车CAN应用中使用负边缘触发触发器节省电力

    电子发烧友网站提供《如何在汽车CAN应用中使用负边缘触发触发器节省电力.pdf》资料免费下载
    发表于 09-13 10:06 0次下载
    如<b class='flag-5'>何在</b>汽车CAN应用<b class='flag-5'>中使</b>用负边缘触发触发器节省电力

    何在显示器设计中使用TPS6598x I2C控制TUSB564

    电子发烧友网站提供《如何在显示器设计中使用TPS6598x I2C控制TUSB564.pdf》资料免费下载
    发表于 09-12 09:54 0次下载
    如<b class='flag-5'>何在</b>显示器设计<b class='flag-5'>中使</b>用TPS6598x I2C控制TUSB564

    何在新兴的低轨卫星应用中使用数字隔离器隔离信号

    电子发烧友网站提供《如何在新兴的低轨卫星应用中使用数字隔离器隔离信号.pdf》资料免费下载
    发表于 09-12 09:37 0次下载
    如<b class='flag-5'>何在</b>新兴的低轨卫星应用<b class='flag-5'>中使</b>用数字隔离器隔离信号

    何在SQL中创建触发器

    的业务逻辑,以及执行审计和记录更改历史等功能。下面,我将详细解释如何在SQL中创建触发器,并附带示例代码。
    的头像 发表于 07-18 16:01 1798次阅读

    何在RTOS中使用spi_interface.c?

    何在 RTOS 中使用 spi_interface.c?
    发表于 07-10 06:29

    请问cmakelists中的变量如何在程序中使用?

    大家好, 我有个问题请教,cmakelists.txt中的变量如何在程序中使用?比如以下cmakelists.txt文件中的PROJECT_VER变量,我如何在c程序中使用?试了很多办
    发表于 06-11 07:34

    工业计算机是什么?如何在不同行业中使用?

    工业电脑是专为在工业环境中使用而设计的计算机。它们可用于各个行业,包括制造、运 输和能源。它们通常比普通计算机更强大,并且能够在大多数计算机无法运行的环境中运行。在本文中,我们将更深入地了解什么是工业计算机以及它们如何在不同行业中使
    的头像 发表于 04-01 15:45 796次阅读
    工业计算机是什么?如<b class='flag-5'>何在</b>不同行业<b class='flag-5'>中使</b>用?

    何在测试中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大会 上分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 745次阅读

    何在DAVE IDE中使用XMC7200?

    能否在 DAVE IDE 中为 XMC 7200 EVK KIT 构建应用程序。我尝试打开一个项目但它最多只能显示 XMC48000。如何在 DAVE IDE 中使用 XMC7200 请帮忙。
    发表于 01-26 06:32

    何在ModustoolBox中使用XMC4000系列库?

    我发现 BSP Assistant 只能用于 XMC7000 系列,但我使用的是 XMC4000 系列。 如何在 ModustoolBox 中使用 XMC4000 系列库?
    发表于 01-24 06:16

    何在网络中使用光纤收发器?使用光纤收发器的注意事项

    何在网络中使用光纤收发器?使用光纤收发器的注意事项 光纤收发器故障如何排除与解决? 在网络中使用光纤收发器是一种常见的技术,用于将光信号转换为电信号或将电信号转换为光信号。它在光纤网络中的作用
    的头像 发表于 12-27 15:17 963次阅读