成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Pandas 做 ETL,不要太快

大數據 數據分析
TL 的全稱是 extract, transform, load,意思就是:提取、轉換、 加載。ETL 是數據分析中的基礎工作,獲取非結構化或難以使用的數據,把它變為干凈、結構化的數據,比如導出 csv 文件,為后續的分析提供數據基礎。

久違了,朋友們,來篇干貨。

ETL 的全稱是 extract, transform, load,意思就是:提取、轉換、 加載。ETL 是數據分析中的基礎工作,獲取非結構化或難以使用的數據,把它變為干凈、結構化的數據,比如導出 csv 文件,為后續的分析提供數據基礎。

1、提取數據

這里從電影數據 API 請求數據。在開始之前,你需要獲得 API 密鑰來訪問 API可以在這里[1]找到獲取密鑰的說明。

一旦你有了密鑰,需要確保你沒有把它直接放入你的源代碼中,因此你需要創建 ETL 腳本的同一目錄中創建一個名為 config.py 的文件,將此放入文件:

#config.py
api_key = <YOUR API KEY HERE>

如果要將代碼發布到任何地方,應該將 config.py 放入 .gitignore 或類似文件中,以確保它不會被推送到任何遠程存儲庫中。

還可以將 API 密鑰存儲為環境變量,或使用其他方法隱藏它。目標是保護它不暴露在 ETL 腳本中。

現在創建一個名為 tmdb.py 的文件,并導入必要的依賴:

import pandas as pd
import requests
import config

向 API 發送單個 GET 請求的方法。在響應中,我們收到一條 JSON 記錄,其中包含我們指定的 movie_id:

API_KEY = config.api_key
url = 'https://api.themoviedb.org/3/movie/{}?api_key={}'.format(movie_id, API_KEY)

r = requests.get(url)

這里我們請求 6 部電影,電影 movie_id 從 550 到 555 不等。我們創建一個循環,一次請求每部電影一部,并將響應附加到列表中:

response_list = []
API_KEY = config.api_key

for movie_id in range(550,556):
url = 'https://api.themoviedb.org/3/movie/{}?api_key={}'.format(movie_id, API_KEY)
r = requests.get(url)
response_list.append(r.json())

現在我們拿到了 response_list 這樣復雜冗長的 JSON 數據,這里使用 from_dict() 從記錄中創建 Pandas 的 DataFrame 對象:

df = pd.DataFrame.from_dict(response_list)

如果在 jupyter 上輸出一下 df,你會看到這樣一個數據幀:

至此,數據提取完畢。

2、轉換

我們并不需要提取數據的所有這些列,所以接下來選擇我們需要使用的列。

假如以下列是我們感興趣的:

budget
id
imdb_id
genres
original_title
release_date
revenue
runtime

創建一個名為 df_columns 的列名稱列表,以便從主數據幀中選擇所需的列。

df_columns = ['budget', 'genres', 'id', 'imdb_id', 'original_title', 'release_date', 'revenue', 'runtime']

請注意,有一個 genres 列(表示電影的體裁,類型)是長這樣的:

這是一個 JSON 格式的列,我們希望擴展它。

一種比較直觀的方法是將 genres 內的分類分解為多個列,如果某個電影屬于這個分類,那么就在該列賦值 1,否則就置 0,就像這樣:

現在我們用 pandas 來實現這個擴展效果。

首先扁平化這個 JSON 列表:

genres_list = df['genres'].tolist()
flat_list = [item for sublist in genres_list for item in sublist]

接下來,我們創建一個 genres_all 的臨時列,作為電影類別的代表,我們只需要 genres 內的 name 屬性,稍后把它擴展為單獨的列:

result = []
for l in genres_list:
r = []
for d in l:
r.append(d['name'])
result.append(r)
df = df.assign(genres_all=result)

為了完整的保存 genres 類型表,我們把它單獨做為一個表:電影類型表:

df_genres = pd.DataFrame.from_records(flat_list).drop_duplicates()

它是這樣的:

接下來,將類型名稱附加到 df_columns 中,然后刪除 genres 列:

df_columns = ['budget', 'id', 'imdb_id', 'original_title', 'release_date', 'revenue', 'runtime']
df_genre_columns = df_genres['name'].to_list()
df_columns.extend(df_genre_columns)

s = df['genres_all'].explode()
df = df.join(pd.crosstab(s.index, s))

代碼的最后兩行,使用了 explode、crosstab 函數來擴展多個列,其效果就是如果電影屬于某個類型,該行的值就為 1,結果就是這樣:

關于日期時間,我們希望將日期擴展為年、月、日、周,像這樣:

那么以下代碼就是干這個的:

df['release_date'] = pd.to_datetime(df['release_date'])
df['day'] = df['release_date'].dt.day
df['month'] = df['release_date'].dt.month
df['year'] = df['release_date'].dt.year
df['day_of_week'] = df['release_date'].dt.day_name()
df_time_columns = ['id', 'release_date', 'day', 'month', 'year', 'day_of_week']

3、加載

加載就很簡單了,將 DataFrame 導出到 excel 或者 csv 即可。

df[df_columns].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 的常見用法。


責任編輯:武曉燕 來源: Python七號
相關推薦

2017-09-01 09:52:20

PythonPandas數據分析

2023-04-20 16:48:22

PandasPolarsPython

2021-01-20 07:28:02

nullcollections對象

2018-07-12 09:04:15

RAID陣列硬盤

2021-10-12 05:00:27

PandasSQL查詢

2022-09-26 00:00:02

PandasExcel文件

2021-07-28 13:29:57

大數據PandasCSV

2022-05-31 12:26:50

移動響應css

2019-02-19 08:46:57

物聯網IOT物聯網設備

2018-05-24 13:35:22

數據分析ETL工具處理

2011-03-16 16:59:46

iptables 映射

2016-10-27 14:48:36

工程師ETL算法

2022-10-21 18:31:21

ETL

2019-10-14 13:20:26

物聯網數據IOT

2023-05-08 19:32:56

2020-08-30 14:29:01

Pandas數據分析函數

2022-07-11 09:00:00

數據集成云計算ELT

2019-07-05 11:20:31

PythonMySQL數據庫

2021-02-06 14:55:05

大數據pandas數據分析

2014-04-30 12:01:06

開源開源貢獻
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产网站在线免费观看 | 久久精品在线播放 | 久久国产99 | 亚洲综合在线播放 | 亚洲手机在线 | 亚洲一视频 | 在线观看中文字幕 | 国产精品99久久久久久动医院 | 亚洲91精品 | 亚洲精品视频三区 | 日本一区二区高清不卡 | 北条麻妃一区二区三区在线观看 | 精品国产乱码一区二区三 | 国产免费视频 | 免费一区二区在线观看 | 国产精品a久久久久 | 91.com在线观看| 日韩午夜网站 | 中文字幕国产精品 | 欧美精品一区在线 | 中文字幕一区二区三区精彩视频 | 日韩欧美专区 | 成人亚洲 | 欧美极品在线观看 | 一级网站 | 精品国产一区二区三区在线观看 | 99精品国产一区二区青青牛奶 | 免费中文字幕 | 亚洲精品片| 成人在线精品视频 | av在线免费观看网址 | 亚洲精品一区二区三区中文字幕 | 天堂在线1 | 久久久久久久综合 | www.jizzjizz| 综合色久 | 99re99| 亚洲高清在线 | 日韩精品一区二区久久 | 日韩在线精品强乱中文字幕 | 国产欧美一区二区三区日本久久久 |