ネットからデータをインポートする

DataCampのIntermediate Importing Data in Pythonを受講中です。

①Importing data from the Internetを自分でも試してみました。


・データセットをインポートしてローカルに保存する

・pandasデータフレームにロードする

・HTTPリクエストを作成する

・HTMLのようなデータをスクレイピングする

・BeautifulSoupを利用してHTMLを解析してデータに変換する

・urllibとrequestsパッケージ


データセットをインポートしてローカルに保存する

カリフォルニア大学アーバイン校の機械学習リポジトリ(保管場所)。ワインの品質のデータセット

Wine Quality Data Set

Download : Data Folderをクリックすると、winequality-red.csvやwinequality-white.csvをダウンロードするページが現れる。

クリックしてダウンロードするが、このようなことを1000回も手動でするのは大変。

画像1

ダウンロードしたいファイルがあるURL+ファイル名

画像10

urllib.request.urlretrieve(url, ファイル名):URL で表されるネットワークオブジェクトをローカルファイルにコピーする。retrieveは「取得する」という意味。

画像3

確かにダウンロードされています!

今度は赤ワインの方をpandas DataFrameにロードし、先頭を表示します。

画像10

ちなみにこのファイル、CSVだけれどセミコロン;区切りなんですね。

他にもタブ区切りやスペース区切りもあるそう。

Comma-Separated Values


ローカルに保存しないでDataFrameにロードする

pd.read_csv()は第一引数をURLにできます。

画像10

ixはlocやilocに似たもので、行や列を指定します。df.ix[: , 0:1]は0列の全行、つまりfixed acidity列を指定しています。 

画像6

非推奨だからlocやiloc使ってよ!と言われます。なぜDataCampはここでixを使ったのか…。謎。

ちなみにfixed acidityは酒石酸濃度らしいです。


Excel スプレッドシートをインポートする

Excelスプレッドシートのダウンロードはpd.read_excel()を使います。DataCampでは用意された資料だったので、ここでは国連の人口予測のデータをダウンロードしてみましょう。

import pandas as pd
url="https://population.un.org/wpp2019/Download/Standard/Population/WPP2019_POP_F01_1_TOTAL_POPULATION_BOTH_SEXES.xlsx"
xls=pd.read_excel(url,sheet_name=None)
print(xls.keys())


あれ?エラー…。 

Unsupported format, or corrupt file: Expected BOF record; found b'\r\n\r\n<!DO'

画像11


pandasでExcelファイル(xlsx, xls)の読み込み(read_excel)

pandas.read_excel()では内部でopenpyxlとxlrdというライブラリを使っているらしいので、インストールを確認→既にインストールしていた。

調べてみると、ごみが残っているとか難しいので一旦保留。


しかたないので、ローカルに保存して少し遊んでみる。pd.ExcelFile()

画像7

ちなみに、列名は17行目、データは18行目から始まります。

画像8


画像9

parseにもskiprowsがあるので、16行飛ばすと

画像10

お、いい感じ!


HTMLデータをインポートする

DataCampの例を自分でもやってみます。あれ?またエラー…

画像12

Request関数を使用してGETリクエストをパッケージ化し、リクエストを送信して、urlopen関数を使用してレスポンスをキャッチする。これにより、読み取りメソッドが関連付けられたHTTP Responseオブジェクトが返される。次に、この読み取りメソッドを応答に適用します。HTMLを文字列として返し、変数htmlに格納する。そして、応答を閉じる。

url="https://en.wikipedia.org/wiki/Main_Page"とすると、エラーは起こりませんでした。

画像13


Requestsモジュールを使う

画像14

import requests

Requestsパッケージをインポートする。

r=requests.get(url)

URLを指定し、リクエストをパッケージ化し、リクエストを送り、レスポンスをキャッチする。

HTMLを文字列として返す応答にtextメソッドを適用する。


BeautifulSoup

HTMLから構造化データを解析し、抽出する。

画像15

r=requests.get(url)

ここでも、Requestsモジュールを使用して、webからHTMLをscrape(データなどを取得する)する。

soup=BeautifulSoup(html_doc)
print(soup.prettify())

次に、結果のHTMLからBeautifulSoupオブジェクトを作成し、prettify(きれいに飾り立てる)する。出力されたHTMLはインデントされている。


タイトルやテキストを抽出する。

画像16

HTML内のハイパーリンクを全て抽出する。

画像17


いいなと思ったら応援しよう!