第十章用Python獲取sqlite硫狞、MySQL信轿、Excel、csv残吩、json中的數(shù)據(jù)

本文可以學(xué)習(xí)到以下內(nèi)容:

  1. 用Python财忽、pandas獲取sqlite3中的數(shù)據(jù)
  2. 用Python、pandas獲取MySQL中的數(shù)據(jù)
  3. 用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ù)

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)...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隘擎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凉夯,更是在濱河造成了極大的恐慌货葬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劲够,死亡現(xiàn)場離奇詭異震桶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)征绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門蹲姐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人人柿,你說我怎么就攤上這事柴墩。” “怎么了凫岖?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵拐邪,是天一觀的道長。 經(jīng)常有香客問我隘截,道長扎阶,這世上最難降的妖魔是什么汹胃? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮东臀,結(jié)果婚禮上着饥,老公的妹妹穿的比我還像新娘。我一直安慰自己惰赋,他們只是感情好宰掉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赁濒,像睡著了一般轨奄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拒炎,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天挪拟,我揣著相機(jī)與錄音,去河邊找鬼击你。 笑死玉组,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丁侄。 我是一名探鬼主播惯雳,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸿摇!你這毒婦竟也來了石景?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤拙吉,失蹤者是張志新(化名)和其女友劉穎潮孽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庐镐,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恩商,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年变逃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了必逆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揽乱,死狀恐怖名眉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凰棉,我是刑警寧澤损拢,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站撒犀,受9級特大地震影響福压,放射性物質(zhì)發(fā)生泄漏掏秩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一荆姆、第九天 我趴在偏房一處隱蔽的房頂上張望蒙幻。 院中可真熱鬧,春花似錦胆筒、人聲如沸邮破。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抒和。三九已至,卻和暖如春彤蔽,著一層夾襖步出監(jiān)牢的瞬間摧莽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工铆惑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留范嘱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓员魏,卻偏偏與公主長得像丑蛤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子撕阎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容