Đọc dữ liệu từ cơ sở dữ liệu và ghi vào tệp văn bản trong python

Cách lấy dữ liệu từ tệp cục bộ, cơ sở dữ liệu, API và thư viện truy cập dữ liệu vào môi trường Python của bạn

Hình ảnh của Lance Grandahl trên BaptGiới thiệu

Hầu hết các phân tích Python bắt đầu bằng cách nhập dữ liệu vào môi trường của bạn. Nhưng nếu dữ liệu đó bị kẹt trong cơ sở dữ liệu thì sao?

May mắn thay, Python cực kỳ linh hoạt và có rất nhiều thư viện mã nguồn mở để truy cập và xử lý dữ liệu. Trong hướng dẫn này, chúng ta sẽ xem xét 13 phương pháp để đưa dữ liệu vào Dataframe của gấu trúc, sau đó dữ liệu có thể được làm sạch, phân tích và trực quan hóa. Chúng ta có thể nhóm các phương pháp thành 4 loại chính

  1. Tập tin có sẵn
  2. cơ sở dữ liệu
  3. API
  4. Thư viện truy cập tập dữ liệu

Yêu cầu chính duy nhất là cài đặt thư viện

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
8

$ pip install pandas

Với điều đó, chúng ta hãy bẻ khóa

📁 Tệp cục bộ

Thông thường, dữ liệu bạn cần được lưu trữ trong một tệp cục bộ trên máy tính của bạn. Tùy thuộc vào nơi bạn đang chạy môi trường Python của mình, bạn có thể chỉ định tên tệp dưới dạng đường dẫn tương đối hoặc tuyệt đối

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"

1. tệp CSV

CSV là lựa chọn phổ biến để lưu trữ dữ liệu dạng bảng và là cách đơn giản nhất để bắt đầu. Giả sử bạn đã tải xuống bộ dữ liệu dân số này từ Thế giới dữ liệu của chúng tôi

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]

Sau khi nhập dữ liệu, sẽ rất hữu ích khi chạy

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
9 để hiểu cách dữ liệu của bạn được cấu trúc e. g. bạn có bao nhiêu hàng, cột và giá trị khác null. Chạy mã đó cho chúng ta đầu ra sau

Phương pháp này cũng hoạt động đối với các tệp có thể truy cập bằng URL, chẳng hạn như tệp CSV hoặc Google Sheet công khai trong repo Github công khai. Ngoài ra, nếu bạn tiếp tục nhận được ____30 thì hãy thử đổi tên tệp của bạn để thay thế khoảng trắng bằng dấu gạch dưới e. g. "Mẫu tài chính. xlsx" trở thành "Financial_Sample. xlsx"

2. tập tin excel

Bạn cần thận trọng hơn một chút với các tệp Excel, vì chúng có thể chứa nhiều hơn một bảng dữ liệu và định dạng hình ảnh phức tạp. g. hàng tiêu đề bổ sung. Mặt khác, cú pháp khá giống nhau — đây là một ví dụ về dữ liệu tài chính

import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
df_from_excel.info[]

3. tệp văn bản

Các tệp văn bản thường cần xử lý dữ liệu nhiều hơn — hãy bắt đầu bằng cách xem cách dữ liệu được lưu trữ và cách bạn muốn thể hiện dữ liệu đó trong Python. Từ đó, bạn có thể viết mã để chuyển đổi đầu vào văn bản thành khung dữ liệu. Hãy sử dụng ví dụ về danh sách mua sắm, với mỗi dòng chứa một mặt hàng và số lượng

Để chuyển đổi nó thành một khung dữ liệu, bạn có thể chạy như sau

shopping_list = "/Users/johnreid/Downloads/shopping_list.txt"results = []with open[shopping_list] as f:
line = f.readline[]
while line:
results.append[line.strip[].split[" "]]
line = f.readline[]
f.close[]df_from_textfile = pd.DataFrame[results, columns = ["Item", "Quantity"]]

Chúng tôi đọc từng dòng một, loại bỏ các khoảng trắng thừa và chia dòng thành hai phần. Khi chúng tôi tạo một khung dữ liệu, chúng tôi cũng cần gán tên cột

4. Nhiều tệp/thư mục

Điều gì xảy ra nếu bạn cần trích xuất dữ liệu từ nhiều tệp được lưu trữ?

Chúng tôi có 5 thư mục con, mỗi thư mục có khoảng 100 tệp. Mỗi tệp bắt đầu bằng một tiêu đề, tiếp theo là nội dung của bài viết. Mục tiêu của chúng tôi sẽ là kết hợp tất cả các tệp này vào một khung dữ liệu duy nhất với các cột 'Tiêu đề', 'Phụ đề', 'Nội dung' và 'Thể loại'. Thư viện

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
1 thực sự hữu ích ở đây để liệt kê tất cả các tên tệp có thể

import glob
import pandas as pd
base_path = "/Users/johnreid/Downloads/bbcsport/"
genres = ["athletics", "cricket", "football", "rugby", "tennis"]
def read_and_split_file[filename]:
with open[filename, 'r', encoding="latin-1"] as f:
lines = f.readlines[] # Get lines as a list of strings
lines = list[map[str.strip, lines]] # Remove /n characters
lines = list[filter[None, lines]] # Remove empty strings
return linesdef get_df_from_genre[path, genre]:
files = glob.glob[path + genre + "/*.txt"]
titles = []
subtitles = []
bodies = []
for f in files:
lines = read_and_split_file[f]
titles.append[lines[0]] # First line is the title
subtitles.append[lines[1]] # Second line is the subtitle
bodies.append[' '.join[lines[2:]]] # Combine all the rest
return[pd.DataFrame[{
'genre': genre,
'title': titles,
'subtitle': subtitles,
'body': bodies
}]
]
final_df = pd.concat[[get_df_from_genre[base_path, g] for g in genres]]final_df

Chúng tôi sử dụng toán tử

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
2 với toàn cục để lấy tất cả các tên tệp có thể có kết thúc bằng
import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
3. Lưu ý rằng bạn có thể nối nhiều khung dữ liệu lại với nhau bằng cách sử dụng
import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
4. Chạy mã đó cho chúng ta đầu ra sau

🗄 Cơ sở dữ liệu

Hầu hết các tổ chức lưu trữ dữ liệu quan trọng trong kinh doanh của họ trong cơ sở dữ liệu quan hệ như Postgres hoặc MySQL và bạn sẽ cần biết Ngôn ngữ truy vấn có cấu trúc [SQL] để truy cập hoặc cập nhật dữ liệu được lưu trữ ở đó. Cơ sở dữ liệu có một số lợi thế, như chuẩn hóa dữ liệu

5. SQLite

SQLite là một cơ sở dữ liệu nhúng được lưu trữ dưới dạng một tệp duy nhất, vì vậy đây là một nơi tuyệt vời để bắt đầu thử nghiệm các truy vấn. Ở đây chúng tôi sẽ hiển thị một ví dụ về kết nối với tệp SQLite của cơ sở dữ liệu Chinook

$ pip install pandas
3

Nếu bạn tò mò, hãy đọc hướng dẫn đầy đủ của tôi về cách xây dựng bảng điều khiển tương tác bằng SQL tại đây

Xây dựng bảng điều khiển Python tương tác bằng SQL và Datapane

hướng tới khoa học dữ liệu. com

6. cơ sở dữ liệu từ xa

Kết nối với cơ sở dữ liệu từ xa như Postgres, Redshift hoặc SQLServer sử dụng hầu hết cùng một cú pháp nhưng yêu cầu thông tin đăng nhập truy cập. Vì lý do bảo mật, tốt nhất bạn nên lưu trữ các thông tin đăng nhập này trong tệp cấu hình và tải chúng vào tập lệnh Python của bạn. Bạn có thể tạo một tệp

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
5 riêng với thông tin sau

$ pip install pandas
5

và sau đó nhập nó vào tập lệnh Python của bạn như sau [bạn cũng sẽ cần thư viện

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
6]

$ pip install pandas
7

Đảm bảo giữ an toàn cho tệp

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
7 của bạn và không tải tệp lên nơi khác - bạn có thể thêm tệp đó vào tệp
import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
8 của mình để đảm bảo tệp không bị đưa vào cam kết git

7. Thuật giả kim SQL

Nếu bạn muốn một cách truy vấn cơ sở dữ liệu 'trăn trở' hơn, hãy thử thư viện SQLAlchemy, đây là một Trình ánh xạ quan hệ đối tượng. Nó thường được sử dụng cho các ứng dụng để các nhà phát triển không phải viết SQL thuần túy để cập nhật cơ sở dữ liệu của họ, nhưng bạn cũng có thể sử dụng nó để truy vấn dữ liệu

Đây là một ví dụ sử dụng cùng một cơ sở dữ liệu cửa hàng âm nhạc Chinook

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
0

Trong mã này, chúng tôi kết nối với cơ sở dữ liệu, sau đó thiết lập một số bảng & siêu dữ liệu trong SQLAlchemy. Khi điều đó đã được xác định, chúng ta có thể viết một truy vấn theo cách 'trăn trở' hơn và đọc kết quả trực tiếp vào khung dữ liệu Pandas. Chạy mã đó cho đầu ra sau

📶 API

Đôi khi, bạn sẽ cần truy cập dữ liệu từ một nền tảng cụ thể mà công ty của bạn sử dụng, chẳng hạn như Hubspot, Twitter hoặc Trello. Các nền tảng này thường có API công khai mà bạn có thể lấy dữ liệu từ đó, trực tiếp bên trong môi trường Python của mình

Ý tưởng cơ bản là bạn gửi một yêu cầu [có thể bao gồm các tham số truy vấn và thông tin đăng nhập truy cập] đến một điểm cuối. Điểm cuối đó sẽ trả về mã phản hồi cộng với dữ liệu bạn đã yêu cầu [hy vọng vậy]. Bạn sẽ cần xem tài liệu API để hiểu trường dữ liệu nào có sẵn. Dữ liệu thường sẽ được trả về ở định dạng JSON, cho phép dữ liệu được lồng sâu

8. Không có thông tin đăng nhập

Hãy làm một ví dụ tối thiểu bằng API OpenNotify, theo dõi tất cả những người hiện đang ở trong không gian

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
0

Chạy mã đó cho chúng ta đầu ra sau

Mã phản hồi cho bạn biết kết quả lệnh gọi API của bạn — theo Dataquest, mã phổ biến nhất là

  • import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
    df_from_csv = pd.read_csv[csv_file]
    df_from_csv.info[]
    9. Mọi thứ vẫn ổn, và kết quả đã được trả về [nếu có]
  • import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
    df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
    df_from_excel.info[]
    0. Máy chủ đang chuyển hướng bạn đến một điểm cuối khác. Điều này có thể xảy ra khi một công ty chuyển đổi tên miền hoặc tên điểm cuối bị thay đổi
  • import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
    df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
    df_from_excel.info[]
    1. Máy chủ cho rằng bạn đã thực hiện một yêu cầu không hợp lệ. Điều này có thể xảy ra khi bạn không gửi đúng dữ liệu, trong số những thứ khác
  • import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
    df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
    df_from_excel.info[]
    2. Tài nguyên bạn đang cố truy cập bị cấm. bạn không có quyền để xem nó
  • import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
    df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
    df_from_excel.info[]
    3. Không tìm thấy tài nguyên bạn đã cố truy cập trên máy chủ
  • import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
    df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
    df_from_excel.info[]
    4. Máy chủ chưa sẵn sàng để xử lý yêu cầu

9. Với thông tin đăng nhập & tham số truy vấn

Đôi khi bạn có thể cần thông tin cụ thể hơn từ API hoặc phải xác thực. Có một số cách để thực hiện việc này, tuy nhiên một trong những cách phổ biến nhất là thêm các tham số URL vào yêu cầu của bạn

Giả sử chúng ta có một tệp

import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
7 với khóa API của mình trong đó

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
1

Sau đó, chúng tôi tạo một từ điển cho tất cả các tham số [đây là một ví dụ được tạo sẵn] và chuyển nó vào

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
2

Nếu bạn không muốn xử lý JSON, bạn có thể thử tìm kiếm thư viện Python cho API đó — đây thường là mã nguồn mở và được duy trì bởi công ty hoặc bên thứ ba

📚 Thư viện truy cập tập dữ liệu

Nếu bạn cần một số dữ liệu tham khảo để so sánh hoặc thêm ngữ cảnh thì sao?

10. Pandas_datareader

Pandas_datareader là một cách tuyệt vời để kéo dữ liệu từ internet vào môi trường Python của bạn. Nó đặc biệt phù hợp với dữ liệu tài chính, nhưng cũng có một số nguồn dữ liệu của Ngân hàng Thế giới. Để biết giá cổ phiếu hàng ngày của Zoom trong vài năm qua, hãy thử cách sau

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
3

Chạy mã đó cho chúng ta đầu ra sau

11. Dữ liệu chung

Datacommons là một dự án của Google cung cấp quyền truy cập vào các bộ dữ liệu công khai đã được chuẩn hóa và làm sạch. Dữ liệu cơ bản được biểu diễn ở định dạng biểu đồ, giúp dễ dàng truy vấn và nối dữ liệu từ nhiều nguồn dữ liệu khác nhau e. g. Điều tra dân số Hoa Kỳ, Ngân hàng Thế giới, Wikipedia, Trung tâm Kiểm soát Dịch bệnh và hơn thế nữa. Đây là một ví dụ cơ bản

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
4

Chạy mã đó cho chúng ta như sau

Nếu bạn muốn tìm hiểu cách sử dụng DataCommons, hãy đọc hướng dẫn đầy đủ của tôi tại đây

Khám phá DataCommons — API cung cấp năng lượng cho Tìm kiếm của Google

Một mô hình mới để truy cập các bộ dữ liệu có sẵn công khai

hướng tới khoa học dữ liệu. com

12. PyTrends [Google Xu hướng]

PyTrends là một thư viện không chính thức nhưng hữu ích để truy vấn dữ liệu Google Xu hướng — đây là một ví dụ đơn giản

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
5

Chạy mã đó cho chúng ta đầu ra sau

13. kaggle

Kaggle là một cộng đồng khoa học dữ liệu lưu trữ rất nhiều bộ dữ liệu và các cuộc thi để học Python. Bạn có thể tải xuống một số bộ dữ liệu này để thử qua giao diện dòng lệnh của chúng [lưu ý. bạn sẽ cần đăng ký tài khoản Kaggle]. Ví dụ: giả sử chúng tôi muốn tải xuống một số dữ liệu kinh tế Zillow, chúng tôi có thể chạy các lệnh sau trong thiết bị đầu cuối của mình [Người dùng Jupyter. thay thế

import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
df_from_excel.info[]
6 bằng
import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
df_from_excel.info[]
7 trong mã Python của bạn

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
6

Điều này sẽ tải xuống một tệp nén của bộ dữ liệu, sau đó giải nén chúng. Từ đó, bạn có thể mở chúng dưới dạng tệp cục bộ bằng Pandas

# Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"
# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
7

Để tìm hiểu thêm, hãy xem tài liệu API Kaggle

Phần kết luận

Hình ảnh từ Giphy

Bạn đã thực hiện nó. Giờ đây, bạn có thể sử dụng các quyền hạn mới tìm thấy của mình để truy cập nhiều nguồn dữ liệu và kết hợp chúng cùng với

import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel[excel_file, sheet_name = "Sheet1"]
df_from_excel.info[]
8 hoặc
import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv[csv_file]
df_from_csv.info[]
4, sau đó trực quan hóa chúng bằng một thư viện tương tác như Altair, Pandas hoặc Folium

Chủ Đề