本文可以學(xué)習(xí)到以下內(nèi)容:
- 用Python财忽、pandas獲取sqlite3中的數(shù)據(jù)
- 用Python、pandas獲取MySQL中的數(shù)據(jù)
- 用Python泣侮、pandas獲取Excel即彪、csv、json中的數(shù)據(jù)
數(shù)據(jù)及源碼地址:https://gitee.com/myrensheng/data_analysis
項(xiàng)目背景
小凡所在的數(shù)據(jù)部門需要經(jīng)常和各種數(shù)據(jù)打交道活尊,包括數(shù)據(jù)庫隶校、Excel、csv蛹锰、json深胳。面對各種各樣的數(shù)據(jù),小凡總結(jié)了一套數(shù)據(jù)讀取的方法铜犬。
獲取sqlite3中的數(shù)據(jù)
- sqlite3是一個(gè)很輕量級C語言庫舞终,可以提供一種基于磁盤的數(shù)據(jù)庫轻庆。在瀏覽器、手機(jī)敛劝、電子設(shè)備中廣泛使用余爆。
- 我們可以用SQL語句查詢數(shù)據(jù),還可以用Python操作sqlite3數(shù)據(jù)庫對數(shù)據(jù)進(jìn)行查詢夸盟。
- 更多詳細(xì)操作蛾方,官網(wǎng)地址:https://docs.python.org/zh-cn/3.9/library/sqlite3.html
sqlite3庫獲取sqlite數(shù)據(jù)
import sqlite3
# 創(chuàng)建一個(gè)連接對象,連接上上級目錄下的 data.db 數(shù)據(jù)庫
conn = sqlite3.connect("../data.db")
# 創(chuàng)建一個(gè)游標(biāo)對象满俗,操作數(shù)據(jù)庫中的數(shù)據(jù)
c = conn.cursor()
# 執(zhí)行 SQL 語句查詢數(shù)據(jù)
sql = "select * FROM salesSummary limit 5;"
result = c.execute(sql)
# 查看數(shù)據(jù)
for r in result:
print(r)
# 數(shù)據(jù)操作完成后转捕,需要關(guān)閉數(shù)據(jù)庫的連接
conn.close()
將此操作封裝為函數(shù):
def get_sqlite3_data(sql,db_path="../data.db"):
conn = sqlite3.connect(db_path)
c = conn.cursor()
# 將數(shù)據(jù)保存到列表中
result = [r for r in c.execute(sql)]
conn.close()
return result
調(diào)用函數(shù):
sql = "select * FROM salesSummary limit 5;"
result = get_sqlite3_data(sql)
print(result)
pandas庫獲取sqlite數(shù)據(jù)
- pandas讀取sqlite3數(shù)據(jù)需要用到sqlalchemy庫
- sqlalchemy官網(wǎng)地址:https://www.osgeo.cn/sqlalchemy/
- pandas的read_sql方法通過sql語言獲取數(shù)據(jù)
import os
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
# 數(shù)據(jù)庫地址:數(shù)據(jù)庫放在上一級目錄下
db_path = os.path.join(os.path.dirname(os.getcwd()),"data.db")
engine_path = "sqlite:///"+db_path
# 獲取數(shù)據(jù)函數(shù),根據(jù)輸入的SQL語句返回 DataFrame 類型數(shù)據(jù)
def link_sqlite(sql):
engine = create_engine(engine_path)
df = pd.read_sql(sql,con=engine)
return df
sql = "select * from salesSummary"
df = link_sqlite(sql)
# 查看數(shù)據(jù)前5條數(shù)據(jù)
df.head()
獲取MySQL中的數(shù)據(jù)
- MySQL是個(gè)人和中小型企業(yè)常用的關(guān)系型數(shù)據(jù)庫
- 體積小唆垃、速度快五芝、成本低,開放源碼
- python讀取沒有MySQL需要安裝 pymysql 第三方庫
pip install pymysql
pymsql庫獲取MySQL數(shù)據(jù)
import pymysql
host = "127.0.0.1"
port=3306
user="user"
password="password"
database="database"
conn = pymysql.connect(
host=host,
port=port,
user=user,
password=password,
database=database
)
cursor = conn.cursor()
sql = "select * from country limit 5;"
cursor.execute(sql)
cursor.fetchone()
conn.close()
將此操作封裝為函數(shù)使用:
import pymysql
host = "127.0.0.1"
port=3306
user="user"
password="password"
database="database"
def get_mysql_data(sql):
conn = pymysql.connect(host=host,port=port,user=user,password=password,database=database)
cursor = conn.cursor()
cursor.execute(sql)
result = [r for r in cursor.fetchall()]
conn.close()
return result
pandas庫獲取mysql數(shù)據(jù)
- 官方文檔:https://docs.sqlalchemy.org/en/20/intro.html
- 需要先安裝 SQLAlchemy和pymysql第三方庫
from sqlalchemy import create_engine
# 當(dāng)密碼中有特殊符合時(shí):@!@#$%^&*(),需要處理一下
from urllib.parse import quote_plus as urlquote
host = "127.0.0.1"
port=3306
user="user"
password="password"
database="database"
url = f"mysql+pymysql://{user}:{urlquote(password)}@{host}:{port}/{database}"
engine = create_engine(url=url)
sql = "select * from country limit 5;"
df = pd.read_sql(sql,con=engine)
獲取Excel中的數(shù)據(jù)
- Excel是一款電子表格軟件辕万,出色的計(jì)算功能和圖表工具
- Python獲取Excel數(shù)據(jù)需要安裝 xlrd 庫
- 文檔地址:https://xlrd.readthedocs.io/en/latest/
pip install xlrd
xlrd庫獲取Excel數(shù)據(jù)
import xlrd
# 打開指定的Excel文件
workbook = xlrd.open_workbook("../數(shù)據(jù)源/省市區(qū)adcode與經(jīng)緯度映射表.xlsx")
# Excel文件中的工作薄數(shù)量
sheet_num = workbook.nsheets
# Excel 文件中工作薄名字
sheet_name = workbook.sheet_names()
# 打開第一個(gè)工作簿
sheet = workbook.sheet_by_index(0)
# 工作薄名字
sh_name = sheet.name
# 工作簿行數(shù)
sh_rows = sheet.nrows
# 工作簿列數(shù)
sh_cols = sheet.nclos
# 獲取指定單元格的數(shù)據(jù)
cell = sheet.cell_value(rowx=29,colx=3)
# 獲取一行數(shù)據(jù)
row_value = sheet.row(0)
# 獲取一列數(shù)據(jù)
col_value = sheet.col(0)
print(sheet_name,sh_name,sh_rows,sh_cols,cell,row_value)
print(col_value)
pandas庫獲取Excel數(shù)據(jù)
- pandas使用read_excel方法獲取Excel數(shù)據(jù)
import numpy as np
import pandas as pd
df= pd.read_excel("../數(shù)據(jù)源/省市區(qū)adcode與經(jīng)緯度映射表.xlsx")
df.head()
獲取csv中的數(shù)據(jù)
- csv以純文本形式存儲(chǔ)表格數(shù)據(jù)枢步,已字符分割不同值
- CSV是一種通用的、相對簡單的文件格式渐尿,被用戶醉途、商業(yè)和科學(xué)廣泛應(yīng)用
- Python內(nèi)置的csv模塊可以讀取csv數(shù)據(jù)
csv庫讀取csv數(shù)據(jù)
import csv
with open("../數(shù)據(jù)源/sale.csv",encoding="gbk") as f:
f_csv = csv.reader(f)
header = next(f_csv)
print(header)
for r in f_csv:
print(r)
pandas讀取csv數(shù)據(jù)
- pandas的read_csv方法獲取數(shù)據(jù)
import numpy as np
import pandas as pd
df= pd.read_csv("../數(shù)據(jù)源/earphone_sentiment.csv")
獲取json中的數(shù)據(jù)
- json是一種輕量級的數(shù)據(jù)交換格式
- 簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言
- Python內(nèi)置的json模塊可以讀取csv數(shù)據(jù)
json庫讀取json數(shù)據(jù)
import json
with open("../數(shù)據(jù)源/商品銷售額.json") as f:
json_data = json.load(f)
print(json_data)
pandas讀取json數(shù)據(jù)
- pandas中的read_json方法獲取數(shù)據(jù)
import numpy as np
import pandas as pd
df = pd.read_json("../數(shù)據(jù)源/商品銷售額.json")
總結(jié)
數(shù)據(jù)獲取是數(shù)據(jù)分析的基礎(chǔ),小凡總結(jié)的只是常用代碼中的一小部分砖茸,數(shù)據(jù)分析的道路任重道遠(yuǎn)...