Python でさまざまなデータ形式を読み取る (完全なコード)

Internet of Things やビッグデータの時代を迎え、画像、音声、テキスト、天気情報、株価の変動など、あらゆる場所にデータがあふれています。これらの Hailiang データは保存され、さまざまな形式でユーザーに提供されます。一部の一般的なデータ形式の読み取り、保存、および操作の方法を学ぶことは不可欠です。
この記事では、pythonを使用して、txt、csv、JSON、HDP5、SQL、NoSQL などのさまざまなデータ形式を読み書きします

 

TXT形式

TXT 形式は、最も単純で最も一般的なデータ ストレージ形式の 1 つであり、多くの IoT センサーは、センサーの読み取り値をさまざまなタイムスタンプで単純な .txt ファイル形式に記録します。Python には、TXT ファイルの作成、読み取り、書き込みのための組み込み関数が用意されています。
文字列データ (テキスト) を扱っている場合は、python を直接使用するのが最良の選択です。TXT ファイルに数値データが含まれる場合は NumPy を使用することをお勧めします。データが混合データの場合は pandas を使用することをお勧めします。

data_folder = '......'
data_file = 'alllines.txt'
f = open(data_file)
contents = f.read()
print(contents[:1000])

# f.write() 写入数据
# f.close() 关闭文件

# np.load()  用 NumPy读
# pd.read_csv() 用 pandas读

 

CSV形式

コンマ区切り値 (CSV) ファイルは、IoT システムによって生成された表形式のデータを格納するために使用される最も一般的なファイル形式です。.csv ファイルでは、レコードの値はプレーン テキストの行に格納され、各行には区切り記号で区切られたフィールドの値が含まれます。CSV 形式のファイルでは、デフォルトでカンマが区切り文字として使用されますが、他の任意の文字を使用できます。
CSV ファイルのデータをすばやく読み取るには、Python の csv モジュールを使用できます。ただし、データを時間と数値データ フィールドの組み合わせとして解釈する必要がある場合は、 pandasパッケージを使用することをお勧めしますデータが単なる数値データの場合、NumPy が最適なパッケージです。

パイソン

import csv
import os
with open (os.path.join(data_folder, data_file), newline='') as csvfile:
	csvreader = csv.reader(csvfile, delimiter=',')
	for row in csvreader:
		print(row)

# csv.writer()  写入数据
#csvwriter.writerow(...)

でこぼこ

# 读取第3和第4列
arr = np.loadtxt('temp.csv',skiprow=1,usecols=(2,3),delimiter=',')

パンダ

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv("10.csv")
x = data["timestamp"]  #获取一列,用一维数据
x = np.array(x)
y = data["V"]  #获取一列,用一维数据
y = np.array(y)
plt.plot(x, y)  # 绘制x,y的折线图
plt.show()  # 显示折线图

XLSX形式

Microsoft Office パッケージのコンポーネントである Excel は、一般的に使用されるデータ ストレージおよび視覚化形式の 1 つです。2010 年以降、Office は .xlsx ファイル形式をサポートしています。XLSX ファイルは、OpenPyXl および pandas 関数を使用して読み取ることができます。

openpyxl

#Creating and writing into xlsx file
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.utils import get_column_letter

wb = Workbook()

dest_filename = 'empty_book.xlsx'

ws1 = wb.active
ws1.title = "range names"

for row in range(1, 40):
     ws1.append(range(0,100,5))

ws2 = wb.create_sheet(title="Pi")
ws2['F5'] = 2 * 3.14
ws2.cell(column=1, row=5, value= 3.14)

ws3 = wb.create_sheet(title="Data")
for row in range(1, 20):
     for col in range(1, 15):
         _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
print(ws3['A10'].value)

wb.save(filename = dest_filename)
#Reading from xlsx file
from openpyxl import load_workbook
wb = load_workbook(filename = 'empty_book.xlsx')
sheet_ranges = wb['range names']
print(wb.get_sheet_names())
print(sheet_ranges['D18'].value)

パンダ

import pandas as pd
df = pd.read_excel("empty_book.xlsx", sheet_name=0)
df.describe()
result = df * 2
result.describe()
result.to_excel("empty_book_modified.xlsx")

JSON 形式

JSON (JavaScript Object Notation) も、IoT システムで一般的なデータ形式であり、データを {key : value} の辞書の形式で格納します。

パイソン

import os
import json
from pprint import pprint

with open (os.path.join(data_folder,data_file)) as json_file:
	for line, i in zip(json_file,range(10)):
		json_data=json.loads(line)
		pprint(json_data)

#json.loads()函数将字符串对象作为输入,而json.load()函数将文件对象作为输入。两个函数都对JSON对象进行解码,并将其作为一个Python字典对象加载到json_data文件中。
#json.dumps()函数接收一个对象并产生一个JSON字符串,而json.dump()函数接收一个对象并将JSON字符串写到文件中。因此,这两个函数的作用与json.loads()和json.load()函数相反。

パンダ

JSON 文字列またはファイルは、データフレームまたはシリーズ オブジェクトを返す pandas.read_json() 関数で読み取ることができます。たとえば、次のコードは zips.json ファイルを読み取ります。

df = pd.read_json(os.path.join(data_folder,data_file), lines=Ture)
print(df)

#DataFrame.to_json()函数的功能是将pandas DataFrame或系列对象保存为JSON文件或字符串。

HDF5形式

Hierarchical Data Format (HDF) は、HDF グループによって開発された仕様です. HDF5 ファイルでは、データはグループとデータセットに編成されます. グループは、コレクションのグループまたはデータセットのコレクションです。データセットは多次元同種配列です。Python では、PyTables と h5py が HDF5 ファイルを操作するための 2 つの主要なライブラリです。どちらのライブラリも、HDF5 をインストールする必要があります。

PyTable

import numpy as np
arr = np.random.rand(5,4)
np.savetxt('temp.csv', arr, delimiter=',')
arr = np.loadtxt('temp.csv', skiprows=1, usecols=(2,3),
            delimiter=',')
import tables
h5filename = 'pytable_demo.hdf5'
with tables.open_file(h5filename,mode='w') as h5file:
    root = h5file.root
    h5file.create_array(root,'global_power',arr)
    h5file.close()
    
with tables.open_file(h5filename,mode='r') as h5file:
    root = h5file.root
    for node in h5file.root:
        ds = node.read()
        print(type(ds),ds.shape)
        print(ds)
	

パンダ

#用pandas来创建一个包含global_power值的HDF5文件
import numpy as np
import pandas as pd
arr = np.loadtxt('temp.csv', skiprows=1, usecols=(2,3),delimiter=',')
store = pd.HDFstore('hdfstore_demo.hdf5')
print(store)
store['global_power']=pd.DataFrame(arr)
store.close()

#读取刚创建的HDF5文件并打印数组
store=pd.HDFStore('hdfstore_demo.hdf5')
print(store)
print(store['global_power'])
store.close()

h5py

#用h5py打开一个HDF5文件,然后打印出存储在/global_power组中的数组
import h5py
hdf5file = h5py.File('pytable_demo.hdf5')
ds = hdf5file['/global_power']
print(ds)
for i in range(len(ds)):
	print(arr[i])
hdf5file.close()

SQL 形式

ほとんどのデータベースは、リレーショナル データベースで構成されています。リレーショナル データベースは、関連する 1 つ以上の情報テーブルで構成され、異なるテーブル内の情報間の関係はキーによって記述されます。通常、これらのデータベースはデータベース管理システム (Database ManagementSystem、DBMS) を通じて管理されます。DBMS は、エンド ユーザー、さまざまなアプリケーション、およびデータベース自体とやり取りして、データを取得および分析できるソフトウェアです。現在の商用 DBMS は SQL (Structured Query Language) を使用してデータベースにアクセスし、操作します。Python を使用してリレーショナル データベースにアクセスすることもできます。

SQLite

SQLite (https://sqlite.org/index.html) は、独立した、信頼性の高い、組み込み型のフル機能のパブリック ドメイン SQL データベース エンジンです。SQLite は組み込みアプリケーション向けに最適化されています。使い方は簡単で、非常に高速です。SQLite は、Python sqlite3 モジュールを使用して Python と統合できます。sqlite3 モジュールは Python 3 にバンドルされているため、インストールする必要はありません。

import sqlite3 
import pandas as pd
connection = sqlite3.connect('database.sqlite')
print("Database opened successfully")

tables = pd.read_sql("SELECT * FROM sqlite_master WHERE type='table';", connection)
print(tables)

countries = pd.read_sql("SELECT * FROM Country;", connection)
countries.head()

players = pd.read_sql_query("SELECT * FROM Player", connection)
players.head()

selected_players = pd.read_sql_query("SELECT * FROM Player WHERE height >= 180 AND weight >= 170 ", connection)
print(selected_players)

MySQL

ユーザーは SQLite を使用して大規模なデータベースを操作できますが、一般に、MySQL が最初の選択肢です。MySQL は、大規模なデータベースに対してスケーラブルであるだけでなく、データ セキュリティの面でも役立ちます。MySQL を使用する前に、Python MySQL コネクタをインストールする必要があります。現在、MySQLdb、PyMySQL、MySQL など、多くの代替 PythonMySQL コネクタがあります。

import mysql.connector 
connection = mysql.connector.connect(host="127.0.0.1",  # your host 
                    user="root",                        # username
                    password="reddel17R" )              # password 
print(connection)
mycursor = connection.cursor()
mycursor.execute("SHOW DATABASES")
for x in mycursor:
  print(x) 

connection = mysql.connector.connect(host="127.0.0.1",  # your host 
                    user="root",                        # username
                    password="reddel17R" ,
                    database = 'mysql') 
mycursor = connection.cursor()
mycursor.execute("SHOW TABLES")
for x in mycursor:
  print(x) 

NoSQL形式

Not Only Structured Query Language (NoSQL) データベースは、リレーショナル データベースではありません。代わりに、その中のデータは、キー値、JSON、ドキュメント、列、またはグラフ形式で保存できます。これらは、ビッグ データやリアルタイム アプリケーションでよく使用されます。ここでは、MongoDB を使用して NoSQL データにアクセスする方法を学習します。MongoDB サーバーが適切に構成されていることを前提としています。

!pip install pymongo

import pymongo
client = pymongo.MongoClient()
db = client.test
from sklearn.datasets import load_breast_cancer
import pandas as pd

cancer = load_breast_cancer()
data = pd.DataFrame(cancer.data, columns=[cancer.feature_names])
import json
data.head()

data_in_json = data.to_json(orient='split')
rows = json.loads(data_in_json)
db.cancer_data_2.insert(rows)

cursor = db['cancer_data_2'].find({
    
    })
df = pd.DataFrame(list(cursor))
print(df)

おすすめ

転載: blog.csdn.net/weixin_45116099/article/details/127712820