データアナリストとして、データベース言語を習得する必要があります。
今日、Huangは、MySQLとOracleの2つのリレーショナルデータベースについて学び、非リレーショナルデータベースのMongoDBについて学びます。
データアナリストにとって、データベースについて学ぶ最も重要なことは、データベースのクエリ機能を学ぶことです。この記事では、これをエントリポイントとして取り上げ、Pythonを使用してこれら3つのデータベースを操作する方法について説明します。
1.PythonはOracleデータベースを操作します
この部分の難しさは、環境構成が少し面倒であるということです。心配しないでください。Oracle環境の構成に関する記事を作成しました。
Pythonは、cx_Oracleライブラリを使用してOracleを操作します。次のコマンドを使用して、事前にインストールする必要があります。
pip insatll cx_Oracle
①PythonがOracleサーバーにリンクする3つの方法
# ① 用户名、密码和监听写在一起
import cx_Oracle
db = cx_Oracle.connect('scott/a123456@DESKTOP-V4LKB10:1521/orcl')
# ② 用户名、密码和监听分开写
import cx_Oracle
db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
# ③ 配置监听并连接
import cx_Oracle
moniter = cx_Oracle.makedsn('192.168.2.1',1521,'orcl')
db = cx_Oracle.connect('scott','a123456',moniter)
②PythonはどのようにしてOracleのデータを取得しますか?
一般的に使用される方法は3つあり、それぞれを紹介します。
Ⅰfetchone():一度に1つのレコードをフェッチします。
import cx_Oracle
# 注意:一定要加下面这两行代码,负责会中文乱码;
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
cursor = db.cursor()
cursor.execute('select count(*) from emp1')
aa = cursor.fetchone()
print(aa)
cursor.execute('select ename,deptno,sal from emp1')
for i in range(aa[0]):
a,b,c = cursor.fetchone()
d = "我的名字叫{},所在部门是{},工资是{}美元".format(a,b,c)
display(d)
db.close()
結果は次のとおりです。
Ⅱfetchall():すべてのレコードを一度に取得します。
import cx_Oracle
# 注意:一定要加下面这两行代码,负责会中文乱码;
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
cursor = db.cursor()
cursor.execute('select ename,deptno,sal from emp1')
aa = cursor.fetchall()
# print(aa)
for a,b,c in aa:
d = "我的名字叫{},所在部门是{},工资是{}美元".format(a,b,c)
display(d)
db.close()
結果は次のとおりです。
Ⅲパンダのread_sql()メソッドを使用して、抽出されたデータを操作のためにDataFrameに直接変換します。
import cx_Oracle
import pandas as pd
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
cursor = db.cursor()
df1 = pd.read_sql("select * from emp where deptno=20",db)
display(df1)
df2 = pd.read_sql("select * from emp where deptno=30",db)
display(df2)
結果は次のとおりです。
2.MySQLデータベースを操作するPython
MySQLデータベースは、中国で最も広く使用されているデータベースである必要があります。このデータベースは通常、ほとんどの企業で使用されています。これは、多くの学生が卒業前に面接のためにデータベースの知識を学ぶことを選択することを意味します。
Pythonはcx_Oracleライブラリを使用してMySQLを操作します。次のコマンドを使用して、事前にインストールする必要があります。
pip insatll pymysql
詳細については、Python操作Oracleの詳細な説明を参照してください。
①PythonリンクMySQLサーバー
import pymysql
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306,db='spiders',charset=' utf8')
ここには6つのパラメーターがあり、それらを1つずつ紹介する必要があります。
- パラメータhost:mysqlサーバーが配置されているホストのIP。
- パラメータuser:username;
- パラメータpassword:password;
- パラメータport:接続されたmysqlホストのポート。デフォルトは3306です。
- パラメータdb:接続のデータベース名。
- パラメータcharset:データの読み取りが中国語で文字化けしているように見える場合は、エンコーディングを設定する必要があります。pythonを使用してデータベースを操作する場合、pythonはクライアントと同等であり、このクライアントを使用してmysqlサーバーサーバーを操作します。python3のデフォルトはutf8文字セット。私のmysqlサーバーはデフォルトでlatin1文字セットを使用するため、mysqlで作成される各テーブルは、テーブルの作成時にutf8でエンコードされるため、ここで設定するコードは接続コネクタである必要があります。
②PythonはどのようにしてMySQLのデータを取得しますか?
Ⅰfetchone():一度に1つのレコードをフェッチします。
import pymysql
db = pymysql.connect(host='localhost',user='root',db='huangwei',password='123456',port=3306,charset='utf8')
cursor = db.cursor()
cursor.execute('select count(*) from person')
aa = cursor.fetchone()
print(aa)
cursor.execute('select name,age from person')
for i in range(aa[0]):
a,b = cursor.fetchone()
c = "我的名字叫{},今年{}岁".format(a,b)
display(c)
db.close()
結果は次のとおりです。
Ⅱfetchall():すべてのレコードを一度に取得します。
import pymysql
db = pymysql.connect(host='localhost',user='root',db='huangwei',password='123456',port=3306,charset='utf8')
cursor = db.cursor()
cursor.execute('select name,age from person')
aa = cursor.fetchall()
# print(aa)
for a,b in aa:
c = "我的名字叫{},今年{}岁".format(a,b)
display(c)
db.close()
結果は次のとおりです。
Ⅲパンダのread_sql()メソッドを使用して、抽出されたデータを操作のためにDataFrameに直接変換します。
import pymysql
import pandas as pd
db = pymysql.connect(host='localhost',user='root',db='huangwei',password='123456',port=3306,charset='utf8')
cursor = db.cursor()
df1 = pd.read_sql("select * from student where ssex='男'",db)
display(df1)
df2 = pd.read_sql("select * from student where ssex='女'",db)
display(df2)
結果は次のとおりです。
3.PythonはMongoDBデータベースを操作します
このパートでは、主に、リレーショナルデータと非リレーショナルデータベースの違いを比較して学習します。データアナリストは基本的にこの種のデータベースを使用しないため、これを見てみましょう。詳しく調べる必要はありません。
Pythonはpymongoライブラリを使用してMongoDBを操作します。次のコマンドを使用して、事前にインストールする必要があります。
pip insatll pymongo
詳細については、 Python操作MongoDBの詳細な説明を参照してください。
①PythonはMongoDBサーバーにリンクします
from pymongo import MongoClient
conn = MongoClient("localhost",27017)
②PythonはどのようにしてMongoDBのデータを取得しますか?
Ⅰいくつかのドキュメントをクエリします。
res = collection.find({
"age": {
"$gte": 19}})
for row in res:
print(row)
Ⅱすべてのドキュメントをクエリします。
res = collection.find()
for row in res:
print(row)
Ⅲ統計クエリ;
res = collection.find().count()
print(res)
ⅣIDによるクエリ。
ここでサードパーティのライブラリを紹介する必要があります。
from bson.objectid import ObjectId
res = collection.find({
"_id":ObjectId("5cc506289e1d88c95465488e")})
print(res[0])
Ⅴ昇順で並べ替えます。
res = collection.find().sort("age")
for row in res:
print(row)
Ⅵ降順で並べ替えます。
サードパーティのライブラリもここで紹介する必要があります。
import pymongo
res = collection.find().sort("age",pymongo.DESCENDING)
for row in res:
print(row)
VIIページネーションクエリ
res = collection.find().limit(3).skip(5)
for row in res:
print(row)