久违了,朋友们,来篇干货。

ETL 的全称是 extract, transform, load,意思就是:提取,转换, 加载ETL 是数据分析中的基础工作,获取非结构化或难以使用的数据,把它变为干净,结构化的数据,比如导出 csv 文件,为后续的分析提供数据基础
1,提取数据
这里从电影数据 API 请求数据在开始之前,你需要获得 API 密钥来访问 API可以在这里找到获取密钥的说明
一旦你有了密钥,需要确保你没有把它直接放入你的源代码中,因此你需要创建 ETL 脚本的同一目录中创建一个名为 config.py 的文件,将此放入文件:
#config.pyapi_key =
如果要将代码发布到任何地方,应该将 config.py 放入 .gitignore 或类似文件中,以确保它不会被推送到任何远程存储库中。
还可以将 API 密钥存储为环境变量,或使用其他方法隐藏它目标是保护它不暴露在 ETL 脚本中
现在创建一个名为 tmdb.py 的文件,并导入必要的依赖:
import pandas as pdimport requestsimport config
向 API 发送单个 GET 请求的方法。在响应中,我们收到一条 JSON 记录,其中包含我们指定的 movie_id:
这里我们请求 6 部电影,电影 movie_id 从 550 到 555 不等。我们创建一个循环,一次请求每部电影一部,并将响应附加到列表中:
现在我们拿到了 response_list 这样复杂冗长的 JSON 数据,这里使用 from_dict 从记录中创建 Pandas 的 DataFrame 对象:
df = pd.DataFrame.from_dict
如果在 jupyter 上输出一下 df,你会看到这样一个数据帧:
至此,数据提取完毕。
2,转换
我们并不需要提取数据的所有这些列,所以接下来选择我们需要使用的列。
假如以下列是我们感兴趣的:
budgetidimdb_idgenresoriginal_titlerelease_daterevenueruntime
创建一个名为 df_columns 的列名称列表,以便从主数据帧中选择所需的列。
df_columns =
请注意,有一个 genres 列是长这样的:
这是一个 JSON 格式的列,我们希望扩展它。
一种比较直观的方法是将 genres 内的分类分解为多个列,如果某个电影属于这个分类,那么就在该列赋值 1,否则就置 0,就像这样:
现在我们用 pandas 来实现这个扩展效果。
首先扁平化这个 JSON 列表:
genres_list = df.tolistflat_list =
接下来,我们创建一个 genres_all 的临时列,作为电影类别的代表,我们只需要 genres 内的 name 属性,稍后把它扩展为单独的列:
result = for l in genres_list: r = for d in l: r.append) result.append(r)df = df.assign(genres_all=result)
为了完整的保存 genres 类型表,我们把它单独做为一个表:电影类型表:
df_genres = pd.DataFrame.from_records.drop_duplicates
它是这样的:
接下来,将类型名称附加到 df_columns 中,然后删除 genres 列:
df_columns = df_genre_columns = df_genres('name').to_listdf_columns.extend(df_genre_columns)s = df('genres_all').explodedf = df.join(pd.crosstab(s.index, s))
关于日期时间,我们希望将日期扩展为年,月,日,周,像这样:
那么以下代码就是干这个的:
df = pd.to_datetime(df)df('day') = df.dt.daydf('month') = df.dt.monthdf('year') = df.dt.yeardf('day_of_week') = df.dt.day_namedf_time_columns = ('id', 'release_date', 'day', 'month', 'year', 'day_of_week')3,加载
加载就很简单了,将 DataFrame 导出到 excel 或者 csv 即可。
df.to_csv('tmdb_movies.csv', index=False)df_genres.to_csv('tmdb_genres.csv', index=False)df(df_time_columns).to_csv('tmdb_datetimes.csv', index=False)
如果要导出 excel,那么就用 to_excel 函数。
最后的话
Pandas 是处理 excel 或者数据分析的利器,ETL 必备工具,本文以电影数据为例,分享了 Pandas 的常见用法。
。声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。
三大航货运业务逆势增长,燃油附加费翻番 三大航去年亏损仍在加剧,航空业出路何在。3月30日晚间,国内三大航司相继发布2021年年报,三大航营收均录得增...
3999元起,小米11Ultra手机限时特惠150 日前,小米春季发布会上正式推出了小米11Ultra,该机拥有黑白两色,精密陶瓷工艺机身,黑色沉稳大气,白色优雅...
新北洋:累计回购605万股占比0.9088% 每经AI快讯,新北洋3月31日晚间发布公告称,截至2022年3月31日,公司累计通过回购专用证券账户以集中竞价...
中青旅:2021年营收同比增长两成持续布局“旅游+ 中青旅3月31日披露2021年报,公司全年实现营业收入86.35亿元,较上年增加20.76%,实现归属于上市公...
高值设计·重构未来——SK瓷砖x金堂奖战略合作云发 SKCERAMICS2022随着消费新升级,新生代消费群体对居住空间的诉求,越来越艺术化、多元化、个性化。SK...
605389长龄液压3月24日收盘小幅上涨0.57 2022年3月24日长龄液压(605389)收盘点评:长龄液压今日小幅上涨.57%,早盘低开-0.50%,报4...
600358国旅联合3月24日全天上涨2.48%, 2022年3月24日国旅联合(600358)收盘点评:国旅联合今日上涨2.48%,早盘低开-0.41%,报7....
600386北巴传媒3月24日收盘数据:较昨日下跌 2022年3月24日北巴传媒(600386)收盘点评:北巴传媒今日微跌-.25%,早盘高开0.25%,报4.0...
海能实业:2021年度独立董事述职报告王义华 安福县海能实业股份有限公司2021年度独立董事述职报告王义华各位股东及股东代表:本人作为安福县海能实业股份有限...
601598中国外运3月24日股价收盘3.88元与 2022年3月24日中国外运(601598)收盘点评:中国外运今日股价与昨日持平早盘高开0.77%,报3.91... 
601138工业富联3月24 2022年3月24日工业富联(60113...
陈小春开启京东汽车超级直播夜 11月9日晚18点,京东汽车11.11超...
挑战善行者丨2021速8酒店 热爱不止,善行不息善行者是一种勇气善行者...
布局宠物蓝海市场安心养宠物计 京东健康宠物医院作为安心养宠物最重要的升...
苏炳添用9秒83的佳绩带领亚 每0.01秒的提升都是汗水与泪水...
4×100米接力决赛 中国男 4×100米接力·决赛中国女队4...
JBL/UA PROJECT 在这七月热汗运动季,由高保真至潮...
中国队“00后”纷纷登上东京 杨倩、管晨辰、李雯雯、全红婵……...
体育赛事招商的三大注意事项 今年4月姚明和篮协对CBA商务开发权的争...
传统体育文化的两大现代价值 中国传统体育文化丰富多彩,内容博大精深,...
当今世界体育对人的价值体现在 不知你想过没有,在当今这个高度互联网化、...
体育分析中机器学习的标准:预 运动分析有相当一部分属于机器学习,即从数...
进行冬奥会体育营销的五个关键 明年冬奥会将在北京和张家口举行,关于奥运...
父母如何从家庭教育当中反思自 某天晚上睡不着,忽然想到能够写这么一个角...
思维教育对幼儿的四大好处 思想教育对幼儿的益处,幼儿思想处于直观行...
父母教育孩子前必须要知道的前 网上的很多文章提到过,一些懵懂型鸡娃的家...
华为是第一大客户EDA第一股 在半导体芯片设计领域,EDA软件也是卡脖...
新的设计和技术风向奥迪gra 2021年9月3日消息,奥迪将在2021...