はじめに
データ分析をする際にデータがそもそもそのデータがデータベースの中にあるという事があると思います。
その場合にローカルにあればいいのですがAWSのRDSにある場合などはリモートに接続してデータを取得する必要があります。この場合、1つの方法としてローカルとリモートでポートフォワーディングして取得する方法があります。今回はanacondaを使ってこれを実行して見たいと思います。
準備
下記のものをcondaもしくはpipでインストールしておきます。
※ポートフォワーディングするのに使います。
sshtunnel
※mysqlへの接続に使います。
mysql.connector
pandas
ポートフォワーディングして
sshtunnelをインポートしてポートフォワードします。
※必要な物をインポートします
from sshtunnel import SSHTunnelForwarder
※ポートフォワーディングの設定
host = 'リモートホスト'
localhost = '127.0.0.1'
ssh_username = 'ユーザー名'
ssh_private_key = '秘密鍵の場所'
server = SSHTunnelForwarder(
(host, 22),
ssh_private_key_password="秘密鍵のパスワード",
ssh_username=ssh_username,
ssh_private_key=ssh_private_key,
local_bind_address=('0.0.0.0', バインドするローカルポート),
remote_bind_address=(localhost, バインドするリモートポート))
server.start()
※ポートフォワードを終わらせる時はstopをします。
server.stop()
ポートフォワーディングしてデータベースからデータを取得する
上記のソースでポートフォワーディングできている状態で、
データベースに接続しデータを取得、データフレームでデータを表示しています。
import mysql.connector
import pandas as pd
#データベース接続情報
connect = mysql.connector.connect(user='DBユーザー名', password='DBパスワード', host='127.0.0.1',port='ポートフォワーディング先', database='DB名', charset='utf8')
cursor = connect.cursor()
cursor.execute("select * from table WHERE id = 1")
result = cursor.fetchall()
dataframe = pd.DataFrame(result)
dataframe
終わりに
anacondaで直接データを取得できるようになったの簡単にデータを取得することができるようになりました。